@automagik/genie 4.260504.11 → 4.260504.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/genie.js CHANGED
@@ -22,114 +22,7 @@ Expecting one of '${allowedValues.join("', '")}'`);if(this._lifeCycleHooks[event
22
22
  `),this._exit(0,"commander.version",str)}),this}description(str,argsDescription){if(str===void 0&&argsDescription===void 0)return this._description;if(this._description=str,argsDescription)this._argsDescription=argsDescription;return this}summary(str){if(str===void 0)return this._summary;return this._summary=str,this}alias(alias){if(alias===void 0)return this._aliases[0];let command=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)command=this.commands[this.commands.length-1];if(alias===command._name)throw Error("Command alias can't be the same as its name");let matchingCommand=this.parent?._findCommand(alias);if(matchingCommand){let existingCmd=[matchingCommand.name()].concat(matchingCommand.aliases()).join("|");throw Error(`cannot add alias '${alias}' to command '${this.name()}' as already have command '${existingCmd}'`)}return command._aliases.push(alias),this}aliases(aliases){if(aliases===void 0)return this._aliases;return aliases.forEach((alias)=>this.alias(alias)),this}usage(str){if(str===void 0){if(this._usage)return this._usage;let args=this.registeredArguments.map((arg)=>{return humanReadableArgName(arg)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?args:[]).join(" ")}return this._usage=str,this}name(str){if(str===void 0)return this._name;return this._name=str,this}nameFromFilename(filename){return this._name=path.basename(filename,path.extname(filename)),this}executableDir(path2){if(path2===void 0)return this._executableDir;return this._executableDir=path2,this}helpInformation(contextOptions){let helper=this.createHelp();if(helper.helpWidth===void 0)helper.helpWidth=contextOptions&&contextOptions.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth();return helper.formatHelp(this,helper)}_getHelpContext(contextOptions){contextOptions=contextOptions||{};let context={error:!!contextOptions.error},write;if(context.error)write=(arg)=>this._outputConfiguration.writeErr(arg);else write=(arg)=>this._outputConfiguration.writeOut(arg);return context.write=contextOptions.write||write,context.command=this,context}outputHelp(contextOptions){let deprecatedCallback;if(typeof contextOptions==="function")deprecatedCallback=contextOptions,contextOptions=void 0;let context=this._getHelpContext(contextOptions);this._getCommandAndAncestors().reverse().forEach((command)=>command.emit("beforeAllHelp",context)),this.emit("beforeHelp",context);let helpInformation=this.helpInformation(context);if(deprecatedCallback){if(helpInformation=deprecatedCallback(helpInformation),typeof helpInformation!=="string"&&!Buffer.isBuffer(helpInformation))throw Error("outputHelp callback must return a string or a Buffer")}if(context.write(helpInformation),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",context),this._getCommandAndAncestors().forEach((command)=>command.emit("afterAllHelp",context))}helpOption(flags,description){if(typeof flags==="boolean"){if(flags)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return flags=flags??"-h, --help",description=description??"display help for command",this._helpOption=this.createOption(flags,description),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(option){return this._helpOption=option,this}help(contextOptions){this.outputHelp(contextOptions);let exitCode=process2.exitCode||0;if(exitCode===0&&contextOptions&&typeof contextOptions!=="function"&&contextOptions.error)exitCode=1;this._exit(exitCode,"commander.help","(outputHelp)")}addHelpText(position,text){let allowedValues=["beforeAll","before","after","afterAll"];if(!allowedValues.includes(position))throw Error(`Unexpected value for position to addHelpText.
23
23
  Expecting one of '${allowedValues.join("', '")}'`);let helpEvent=`${position}Help`;return this.on(helpEvent,(context)=>{let helpStr;if(typeof text==="function")helpStr=text({error:context.error,command:context.command});else helpStr=text;if(helpStr)context.write(`${helpStr}
24
24
  `)}),this}_outputHelpIfRequested(args){let helpOption=this._getHelpOption();if(helpOption&&args.find((arg)=>helpOption.is(arg)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function incrementNodeInspectorPort(args){return args.map((arg)=>{if(!arg.startsWith("--inspect"))return arg;let debugOption,debugHost="127.0.0.1",debugPort="9229",match;if((match=arg.match(/^(--inspect(-brk)?)$/))!==null)debugOption=match[1];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(debugOption=match[1],/^\d+$/.test(match[3]))debugPort=match[3];else debugHost=match[3];else if((match=arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)debugOption=match[1],debugHost=match[3],debugPort=match[4];if(debugOption&&debugPort!=="0")return`${debugOption}=${debugHost}:${parseInt(debugPort)+1}`;return arg})}exports.Command=Command});var require_commander=__commonJS((exports)=>{var{Argument}=require_argument(),{Command}=require_command(),{CommanderError,InvalidArgumentError}=require_error(),{Help}=require_help(),{Option}=require_option();exports.program=new Command;exports.createCommand=(name)=>new Command(name);exports.createOption=(flags,description)=>new Option(flags,description);exports.createArgument=(name,description)=>new Argument(name,description);exports.Command=Command;exports.Option=Option;exports.Argument=Argument;exports.Help=Help;exports.CommanderError=CommanderError;exports.InvalidArgumentError=InvalidArgumentError;exports.InvalidOptionArgumentError=InvalidArgumentError});import{existsSync,mkdirSync,readFileSync,unlinkSync,writeFileSync}from"fs";import{homedir}from"os";import{join}from"path";function getClaudeSettingsPath(){return CLAUDE_SETTINGS_FILE}function getGenieHookScriptPath(){return join(CLAUDE_HOOKS_DIR,GENIE_HOOK_SCRIPT_NAME)}function hookScriptExists(){return existsSync(getGenieHookScriptPath())}function removeHookScript(){let scriptPath=getGenieHookScriptPath();if(existsSync(scriptPath))unlinkSync(scriptPath)}function ensureClaudeSettingsSafe(){let dir=join(homedir(),".claude");if(!existsSync(dir))mkdirSync(dir,{recursive:!0});let settings={};if(existsSync(CLAUDE_SETTINGS_FILE))try{settings=JSON.parse(readFileSync(CLAUDE_SETTINGS_FILE,"utf-8"))}catch{}let validTopologyValues=new Set(["auto","tmux","in-process"]),changed=!1;if("teammateMode"in settings&&!validTopologyValues.has(settings.teammateMode)){let{teammateMode:_removed,...rest}=settings;settings=rest,changed=!0}if(settings.skipDangerousModePermissionPrompt!==!0)settings.skipDangerousModePermissionPrompt=!0,changed=!0;if(changed)writeFileSync(CLAUDE_SETTINGS_FILE,`${JSON.stringify(settings,null,2)}
25
- `,"utf-8")}function contractClaudePath(path){let home=homedir();if(path.startsWith(`${home}/`))return`~${path.slice(home.length)}`;if(path===home)return"~";return path}var CLAUDE_DIR,CLAUDE_HOOKS_DIR,CLAUDE_SETTINGS_FILE,GENIE_HOOK_SCRIPT_NAME="genie-bash-hook.sh";var init_claude_settings=__esm(()=>{CLAUDE_DIR=join(homedir(),".claude"),CLAUDE_HOOKS_DIR=join(CLAUDE_DIR,"hooks"),CLAUDE_SETTINGS_FILE=join(CLAUDE_DIR,"settings.json")});var exports_ensure_tmux={};__export(exports_ensure_tmux,{tmuxBin:()=>tmuxBin,ensureTmux:()=>ensureTmux});import{execSync}from"child_process";import{chmodSync,copyFileSync,existsSync as existsSync2,mkdirSync as mkdirSync2,rmSync,unlinkSync as unlinkSync2,writeFileSync as writeFileSync2}from"fs";import{arch,homedir as homedir2,platform,tmpdir}from"os";import{join as join2}from"path";function getPlatformAsset(){let os=platform(),cpu=arch(),key=`${os}-${cpu}`,asset={"linux-x64":`tmux-${TMUX_VERSION}-linux-x86_64.tar.gz`,"linux-arm64":`tmux-${TMUX_VERSION}-linux-arm64.tar.gz`,"darwin-arm64":`tmux-${TMUX_VERSION}-macos-arm64.tar.gz`,"darwin-x64":`tmux-${TMUX_VERSION}-macos-x86_64.tar.gz`}[key];if(!asset)throw Error(`Unsupported platform: ${key}
26
- tmux auto-download supports: linux-x64, linux-arm64, macos-arm64, macos-x64.
27
- Install tmux manually: https://github.com/tmux/tmux/wiki/Installing`);return asset}function genieHome(){return process.env.GENIE_HOME??join2(homedir2(),".genie")}function genieBinDir(){return join2(genieHome(),"bin")}function cachedTmuxPath(){return join2(genieBinDir(),"tmux")}function tmuxBin(){if(_resolved)return _resolved;try{let p=execSync("which tmux",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim();if(p)return _resolved=p,p}catch{}let cached=cachedTmuxPath();if(existsSync2(cached))return _resolved=cached,cached;return"tmux"}async function ensureTmux(){let bin=tmuxBin();if(bin!=="tmux")return bin;return downloadTmux()}async function downloadTmux(){let asset=getPlatformAsset(),url=process.env.GENIE_TMUX_URL??`https://github.com/tmux/tmux-builds/releases/download/v${TMUX_VERSION}/${asset}`,dest=cachedTmuxPath(),tempDir=join2(tmpdir(),`genie-tmux-download-${Date.now()}`);console.log(" tmux not found \u2014 downloading static binary..."),console.log(` ${url}`);try{let response=await fetch(url);if(!response.ok)throw Error(`HTTP ${response.status} ${response.statusText}`);let buffer=Buffer.from(await response.arrayBuffer()),sizeMB=(buffer.byteLength/1024/1024).toFixed(1);console.log(` Downloaded ${sizeMB} MB`),mkdirSync2(tempDir,{recursive:!0});let tarballPath=join2(tempDir,asset);writeFileSync2(tarballPath,buffer),execSync(`tar -xzf '${tarballPath}' -C '${tempDir}'`,{stdio:"ignore"});let extractedBin=join2(tempDir,"tmux");if(!existsSync2(extractedBin))throw Error("Tarball did not contain a tmux binary");mkdirSync2(genieBinDir(),{recursive:!0}),copyFileSync(extractedBin,dest),chmodSync(dest,493);let version=execSync(`'${dest}' -V`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim();return _resolved=dest,console.log(` ${version} installed to ${dest}`),dest}catch(err){try{if(existsSync2(dest))unlinkSync2(dest)}catch{}let msg=err instanceof Error?err.message:String(err);throw Error(`Failed to download tmux: ${msg}
28
- Install manually:
29
- Linux: sudo apt install tmux
30
- macOS: brew install tmux`)}finally{try{rmSync(tempDir,{recursive:!0,force:!0})}catch{}}}var TMUX_VERSION="3.6a",_resolved=null;var init_ensure_tmux=()=>{};var util,objectUtil,ZodParsedType,getParsedType=(data)=>{switch(typeof data){case"undefined":return ZodParsedType.undefined;case"string":return ZodParsedType.string;case"number":return Number.isNaN(data)?ZodParsedType.nan:ZodParsedType.number;case"boolean":return ZodParsedType.boolean;case"function":return ZodParsedType.function;case"bigint":return ZodParsedType.bigint;case"symbol":return ZodParsedType.symbol;case"object":if(Array.isArray(data))return ZodParsedType.array;if(data===null)return ZodParsedType.null;if(data.then&&typeof data.then==="function"&&data.catch&&typeof data.catch==="function")return ZodParsedType.promise;if(typeof Map<"u"&&data instanceof Map)return ZodParsedType.map;if(typeof Set<"u"&&data instanceof Set)return ZodParsedType.set;if(typeof Date<"u"&&data instanceof Date)return ZodParsedType.date;return ZodParsedType.object;default:return ZodParsedType.unknown}};var init_util=__esm(()=>{(function(util2){util2.assertEqual=(_)=>{};function assertIs(_arg){}util2.assertIs=assertIs;function assertNever(_x){throw Error()}util2.assertNever=assertNever,util2.arrayToEnum=(items)=>{let obj={};for(let item of items)obj[item]=item;return obj},util2.getValidEnumValues=(obj)=>{let validKeys=util2.objectKeys(obj).filter((k)=>typeof obj[obj[k]]!=="number"),filtered={};for(let k of validKeys)filtered[k]=obj[k];return util2.objectValues(filtered)},util2.objectValues=(obj)=>{return util2.objectKeys(obj).map(function(e){return obj[e]})},util2.objectKeys=typeof Object.keys==="function"?(obj)=>Object.keys(obj):(object)=>{let keys=[];for(let key in object)if(Object.prototype.hasOwnProperty.call(object,key))keys.push(key);return keys},util2.find=(arr,checker)=>{for(let item of arr)if(checker(item))return item;return},util2.isInteger=typeof Number.isInteger==="function"?(val)=>Number.isInteger(val):(val)=>typeof val==="number"&&Number.isFinite(val)&&Math.floor(val)===val;function joinValues(array,separator=" | "){return array.map((val)=>typeof val==="string"?`'${val}'`:val).join(separator)}util2.joinValues=joinValues,util2.jsonStringifyReplacer=(_,value)=>{if(typeof value==="bigint")return value.toString();return value}})(util||(util={}));(function(objectUtil2){objectUtil2.mergeShapes=(first,second)=>{return{...first,...second}}})(objectUtil||(objectUtil={}));ZodParsedType=util.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"])});var ZodIssueCode,quotelessJson=(obj)=>{return JSON.stringify(obj,null,2).replace(/"([^"]+)":/g,"$1:")},ZodError;var init_ZodError=__esm(()=>{init_util();ZodIssueCode=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"]);ZodError=class ZodError extends Error{get errors(){return this.issues}constructor(issues){super();this.issues=[],this.addIssue=(sub)=>{this.issues=[...this.issues,sub]},this.addIssues=(subs=[])=>{this.issues=[...this.issues,...subs]};let actualProto=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,actualProto);else this.__proto__=actualProto;this.name="ZodError",this.issues=issues}format(_mapper){let mapper=_mapper||function(issue){return issue.message},fieldErrors={_errors:[]},processError=(error)=>{for(let issue of error.issues)if(issue.code==="invalid_union")issue.unionErrors.map(processError);else if(issue.code==="invalid_return_type")processError(issue.returnTypeError);else if(issue.code==="invalid_arguments")processError(issue.argumentsError);else if(issue.path.length===0)fieldErrors._errors.push(mapper(issue));else{let curr=fieldErrors,i=0;while(i<issue.path.length){let el=issue.path[i];if(i!==issue.path.length-1)curr[el]=curr[el]||{_errors:[]};else curr[el]=curr[el]||{_errors:[]},curr[el]._errors.push(mapper(issue));curr=curr[el],i++}}};return processError(this),fieldErrors}static assert(value){if(!(value instanceof ZodError))throw Error(`Not a ZodError: ${value}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(mapper=(issue)=>issue.message){let fieldErrors={},formErrors=[];for(let sub of this.issues)if(sub.path.length>0){let firstEl=sub.path[0];fieldErrors[firstEl]=fieldErrors[firstEl]||[],fieldErrors[firstEl].push(mapper(sub))}else formErrors.push(mapper(sub));return{formErrors,fieldErrors}}get formErrors(){return this.flatten()}};ZodError.create=(issues)=>{return new ZodError(issues)}});var errorMap=(issue,_ctx)=>{let message;switch(issue.code){case ZodIssueCode.invalid_type:if(issue.received===ZodParsedType.undefined)message="Required";else message=`Expected ${issue.expected}, received ${issue.received}`;break;case ZodIssueCode.invalid_literal:message=`Invalid literal value, expected ${JSON.stringify(issue.expected,util.jsonStringifyReplacer)}`;break;case ZodIssueCode.unrecognized_keys:message=`Unrecognized key(s) in object: ${util.joinValues(issue.keys,", ")}`;break;case ZodIssueCode.invalid_union:message="Invalid input";break;case ZodIssueCode.invalid_union_discriminator:message=`Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;break;case ZodIssueCode.invalid_enum_value:message=`Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;break;case ZodIssueCode.invalid_arguments:message="Invalid function arguments";break;case ZodIssueCode.invalid_return_type:message="Invalid function return type";break;case ZodIssueCode.invalid_date:message="Invalid date";break;case ZodIssueCode.invalid_string:if(typeof issue.validation==="object")if("includes"in issue.validation){if(message=`Invalid input: must include "${issue.validation.includes}"`,typeof issue.validation.position==="number")message=`${message} at one or more positions greater than or equal to ${issue.validation.position}`}else if("startsWith"in issue.validation)message=`Invalid input: must start with "${issue.validation.startsWith}"`;else if("endsWith"in issue.validation)message=`Invalid input: must end with "${issue.validation.endsWith}"`;else util.assertNever(issue.validation);else if(issue.validation!=="regex")message=`Invalid ${issue.validation}`;else message="Invalid";break;case ZodIssueCode.too_small:if(issue.type==="array")message=`Array must contain ${issue.exact?"exactly":issue.inclusive?"at least":"more than"} ${issue.minimum} element(s)`;else if(issue.type==="string")message=`String must contain ${issue.exact?"exactly":issue.inclusive?"at least":"over"} ${issue.minimum} character(s)`;else if(issue.type==="number")message=`Number must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${issue.minimum}`;else if(issue.type==="bigint")message=`Number must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${issue.minimum}`;else if(issue.type==="date")message=`Date must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(issue.minimum))}`;else message="Invalid input";break;case ZodIssueCode.too_big:if(issue.type==="array")message=`Array must contain ${issue.exact?"exactly":issue.inclusive?"at most":"less than"} ${issue.maximum} element(s)`;else if(issue.type==="string")message=`String must contain ${issue.exact?"exactly":issue.inclusive?"at most":"under"} ${issue.maximum} character(s)`;else if(issue.type==="number")message=`Number must be ${issue.exact?"exactly":issue.inclusive?"less than or equal to":"less than"} ${issue.maximum}`;else if(issue.type==="bigint")message=`BigInt must be ${issue.exact?"exactly":issue.inclusive?"less than or equal to":"less than"} ${issue.maximum}`;else if(issue.type==="date")message=`Date must be ${issue.exact?"exactly":issue.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(issue.maximum))}`;else message="Invalid input";break;case ZodIssueCode.custom:message="Invalid input";break;case ZodIssueCode.invalid_intersection_types:message="Intersection results could not be merged";break;case ZodIssueCode.not_multiple_of:message=`Number must be a multiple of ${issue.multipleOf}`;break;case ZodIssueCode.not_finite:message="Number must be finite";break;default:message=_ctx.defaultError,util.assertNever(issue)}return{message}},en_default;var init_en=__esm(()=>{init_ZodError();init_util();en_default=errorMap});function setErrorMap(map){overrideErrorMap=map}function getErrorMap(){return overrideErrorMap}var overrideErrorMap;var init_errors=__esm(()=>{init_en();overrideErrorMap=en_default});function addIssueToContext(ctx,issueData){let overrideMap=getErrorMap(),issue=makeIssue({issueData,data:ctx.data,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,overrideMap,overrideMap===en_default?void 0:en_default].filter((x)=>!!x)});ctx.common.issues.push(issue)}class ParseStatus{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(status,results){let arrayValue=[];for(let s of results){if(s.status==="aborted")return INVALID;if(s.status==="dirty")status.dirty();arrayValue.push(s.value)}return{status:status.value,value:arrayValue}}static async mergeObjectAsync(status,pairs){let syncPairs=[];for(let pair of pairs){let key=await pair.key,value=await pair.value;syncPairs.push({key,value})}return ParseStatus.mergeObjectSync(status,syncPairs)}static mergeObjectSync(status,pairs){let finalObject={};for(let pair of pairs){let{key,value}=pair;if(key.status==="aborted")return INVALID;if(value.status==="aborted")return INVALID;if(key.status==="dirty")status.dirty();if(value.status==="dirty")status.dirty();if(key.value!=="__proto__"&&(typeof value.value<"u"||pair.alwaysSet))finalObject[key.value]=value.value}return{status:status.value,value:finalObject}}}var makeIssue=(params)=>{let{data,path,errorMaps,issueData}=params,fullPath=[...path,...issueData.path||[]],fullIssue={...issueData,path:fullPath};if(issueData.message!==void 0)return{...issueData,path:fullPath,message:issueData.message};let errorMessage="",maps=errorMaps.filter((m)=>!!m).slice().reverse();for(let map of maps)errorMessage=map(fullIssue,{data,defaultError:errorMessage}).message;return{...issueData,path:fullPath,message:errorMessage}},EMPTY_PATH,INVALID,DIRTY=(value)=>({status:"dirty",value}),OK=(value)=>({status:"valid",value}),isAborted=(x)=>x.status==="aborted",isDirty=(x)=>x.status==="dirty",isValid=(x)=>x.status==="valid",isAsync=(x)=>typeof Promise<"u"&&x instanceof Promise;var init_parseUtil=__esm(()=>{init_errors();init_en();EMPTY_PATH=[];INVALID=Object.freeze({status:"aborted"})});var init_typeAliases=()=>{};var errorUtil;var init_errorUtil=__esm(()=>{(function(errorUtil2){errorUtil2.errToObj=(message)=>typeof message==="string"?{message}:message||{},errorUtil2.toString=(message)=>typeof message==="string"?message:message?.message})(errorUtil||(errorUtil={}))});class ParseInputLazyPath{constructor(parent,value,path,key){this._cachedPath=[],this.parent=parent,this.data=value,this._path=path,this._key=key}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}function processCreateParams(params){if(!params)return{};let{errorMap:errorMap2,invalid_type_error,required_error,description}=params;if(errorMap2&&(invalid_type_error||required_error))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(errorMap2)return{errorMap:errorMap2,description};return{errorMap:(iss,ctx)=>{let{message}=params;if(iss.code==="invalid_enum_value")return{message:message??ctx.defaultError};if(typeof ctx.data>"u")return{message:message??required_error??ctx.defaultError};if(iss.code!=="invalid_type")return{message:ctx.defaultError};return{message:message??invalid_type_error??ctx.defaultError}},description}}class ZodType{get description(){return this._def.description}_getType(input){return getParsedType(input.data)}_getOrReturnCtx(input,ctx){return ctx||{common:input.parent.common,data:input.data,parsedType:getParsedType(input.data),schemaErrorMap:this._def.errorMap,path:input.path,parent:input.parent}}_processInputParams(input){return{status:new ParseStatus,ctx:{common:input.parent.common,data:input.data,parsedType:getParsedType(input.data),schemaErrorMap:this._def.errorMap,path:input.path,parent:input.parent}}}_parseSync(input){let result2=this._parse(input);if(isAsync(result2))throw Error("Synchronous parse encountered promise.");return result2}_parseAsync(input){let result2=this._parse(input);return Promise.resolve(result2)}parse(data,params){let result2=this.safeParse(data,params);if(result2.success)return result2.data;throw result2.error}safeParse(data,params){let ctx={common:{issues:[],async:params?.async??!1,contextualErrorMap:params?.errorMap},path:params?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)},result2=this._parseSync({data,path:ctx.path,parent:ctx});return handleResult(ctx,result2)}"~validate"(data){let ctx={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)};if(!this["~standard"].async)try{let result2=this._parseSync({data,path:[],parent:ctx});return isValid(result2)?{value:result2.value}:{issues:ctx.common.issues}}catch(err){if(err?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;ctx.common={issues:[],async:!0}}return this._parseAsync({data,path:[],parent:ctx}).then((result2)=>isValid(result2)?{value:result2.value}:{issues:ctx.common.issues})}async parseAsync(data,params){let result2=await this.safeParseAsync(data,params);if(result2.success)return result2.data;throw result2.error}async safeParseAsync(data,params){let ctx={common:{issues:[],contextualErrorMap:params?.errorMap,async:!0},path:params?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)},maybeAsyncResult=this._parse({data,path:ctx.path,parent:ctx}),result2=await(isAsync(maybeAsyncResult)?maybeAsyncResult:Promise.resolve(maybeAsyncResult));return handleResult(ctx,result2)}refine(check,message){let getIssueProperties=(val)=>{if(typeof message==="string"||typeof message>"u")return{message};else if(typeof message==="function")return message(val);else return message};return this._refinement((val,ctx)=>{let result2=check(val),setError=()=>ctx.addIssue({code:ZodIssueCode.custom,...getIssueProperties(val)});if(typeof Promise<"u"&&result2 instanceof Promise)return result2.then((data)=>{if(!data)return setError(),!1;else return!0});if(!result2)return setError(),!1;else return!0})}refinement(check,refinementData){return this._refinement((val,ctx)=>{if(!check(val))return ctx.addIssue(typeof refinementData==="function"?refinementData(val,ctx):refinementData),!1;else return!0})}_refinement(refinement){return new ZodEffects({schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"refinement",refinement}})}superRefine(refinement){return this._refinement(refinement)}constructor(def){this.spa=this.safeParseAsync,this._def=def,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:(data)=>this["~validate"](data)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(option){return ZodUnion.create([this,option],this._def)}and(incoming){return ZodIntersection.create(this,incoming,this._def)}transform(transform){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"transform",transform}})}default(def){let defaultValueFunc=typeof def==="function"?def:()=>def;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:defaultValueFunc,typeName:ZodFirstPartyTypeKind.ZodDefault})}brand(){return new ZodBranded({typeName:ZodFirstPartyTypeKind.ZodBranded,type:this,...processCreateParams(this._def)})}catch(def){let catchValueFunc=typeof def==="function"?def:()=>def;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:catchValueFunc,typeName:ZodFirstPartyTypeKind.ZodCatch})}describe(description){return new this.constructor({...this._def,description})}pipe(target){return ZodPipeline.create(this,target)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}function timeRegexSource(args){let secondsRegexSource="[0-5]\\d";if(args.precision)secondsRegexSource=`${secondsRegexSource}\\.\\d{${args.precision}}`;else if(args.precision==null)secondsRegexSource=`${secondsRegexSource}(\\.\\d+)?`;let secondsQuantifier=args.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`}function timeRegex(args){return new RegExp(`^${timeRegexSource(args)}$`)}function datetimeRegex(args){let regex=`${dateRegexSource}T${timeRegexSource(args)}`,opts=[];if(opts.push(args.local?"Z?":"Z"),args.offset)opts.push("([+-]\\d{2}:?\\d{2})");return regex=`${regex}(${opts.join("|")})`,new RegExp(`^${regex}$`)}function isValidIP(ip,version){if((version==="v4"||!version)&&ipv4Regex.test(ip))return!0;if((version==="v6"||!version)&&ipv6Regex.test(ip))return!0;return!1}function isValidJWT(jwt,alg){if(!jwtRegex.test(jwt))return!1;try{let[header]=jwt.split(".");if(!header)return!1;let base64=header.replace(/-/g,"+").replace(/_/g,"/").padEnd(header.length+(4-header.length%4)%4,"="),decoded=JSON.parse(atob(base64));if(typeof decoded!=="object"||decoded===null)return!1;if("typ"in decoded&&decoded?.typ!=="JWT")return!1;if(!decoded.alg)return!1;if(alg&&decoded.alg!==alg)return!1;return!0}catch{return!1}}function isValidCidr(ip,version){if((version==="v4"||!version)&&ipv4CidrRegex.test(ip))return!0;if((version==="v6"||!version)&&ipv6CidrRegex.test(ip))return!0;return!1}function floatSafeRemainder(val,step){let valDecCount=(val.toString().split(".")[1]||"").length,stepDecCount=(step.toString().split(".")[1]||"").length,decCount=valDecCount>stepDecCount?valDecCount:stepDecCount,valInt=Number.parseInt(val.toFixed(decCount).replace(".","")),stepInt=Number.parseInt(step.toFixed(decCount).replace(".",""));return valInt%stepInt/10**decCount}function deepPartialify(schema){if(schema instanceof ZodObject){let newShape={};for(let key in schema.shape){let fieldSchema=schema.shape[key];newShape[key]=ZodOptional.create(deepPartialify(fieldSchema))}return new ZodObject({...schema._def,shape:()=>newShape})}else if(schema instanceof ZodArray)return new ZodArray({...schema._def,type:deepPartialify(schema.element)});else if(schema instanceof ZodOptional)return ZodOptional.create(deepPartialify(schema.unwrap()));else if(schema instanceof ZodNullable)return ZodNullable.create(deepPartialify(schema.unwrap()));else if(schema instanceof ZodTuple)return ZodTuple.create(schema.items.map((item)=>deepPartialify(item)));else return schema}function mergeValues(a,b){let aType=getParsedType(a),bType=getParsedType(b);if(a===b)return{valid:!0,data:a};else if(aType===ZodParsedType.object&&bType===ZodParsedType.object){let bKeys=util.objectKeys(b),sharedKeys=util.objectKeys(a).filter((key)=>bKeys.indexOf(key)!==-1),newObj={...a,...b};for(let key of sharedKeys){let sharedValue=mergeValues(a[key],b[key]);if(!sharedValue.valid)return{valid:!1};newObj[key]=sharedValue.data}return{valid:!0,data:newObj}}else if(aType===ZodParsedType.array&&bType===ZodParsedType.array){if(a.length!==b.length)return{valid:!1};let newArray=[];for(let index=0;index<a.length;index++){let itemA=a[index],itemB=b[index],sharedValue=mergeValues(itemA,itemB);if(!sharedValue.valid)return{valid:!1};newArray.push(sharedValue.data)}return{valid:!0,data:newArray}}else if(aType===ZodParsedType.date&&bType===ZodParsedType.date&&+a===+b)return{valid:!0,data:a};else return{valid:!1}}function createZodEnum(values,params){return new ZodEnum({values,typeName:ZodFirstPartyTypeKind.ZodEnum,...processCreateParams(params)})}function cleanParams(params,data){let p=typeof params==="function"?params(data):typeof params==="string"?{message:params}:params;return typeof p==="string"?{message:p}:p}function custom(check,_params={},fatal){if(check)return ZodAny.create().superRefine((data,ctx)=>{let r=check(data);if(r instanceof Promise)return r.then((r2)=>{if(!r2){let params=cleanParams(_params,data),_fatal=params.fatal??fatal??!0;ctx.addIssue({code:"custom",...params,fatal:_fatal})}});if(!r){let params=cleanParams(_params,data),_fatal=params.fatal??fatal??!0;ctx.addIssue({code:"custom",...params,fatal:_fatal})}return});return ZodAny.create()}var handleResult=(ctx,result2)=>{if(isValid(result2))return{success:!0,data:result2.value};else{if(!ctx.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let error=new ZodError(ctx.common.issues);return this._error=error,this._error}}}},cuidRegex,cuid2Regex,ulidRegex,uuidRegex,nanoidRegex,jwtRegex,durationRegex,emailRegex,_emojiRegex="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",emojiRegex,ipv4Regex,ipv4CidrRegex,ipv6Regex,ipv6CidrRegex,base64Regex,base64urlRegex,dateRegexSource="((\\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])))",dateRegex,ZodString,ZodNumber,ZodBigInt,ZodBoolean,ZodDate,ZodSymbol,ZodUndefined,ZodNull,ZodAny,ZodUnknown,ZodNever,ZodVoid,ZodArray,ZodObject,ZodUnion,getDiscriminator=(type)=>{if(type instanceof ZodLazy)return getDiscriminator(type.schema);else if(type instanceof ZodEffects)return getDiscriminator(type.innerType());else if(type instanceof ZodLiteral)return[type.value];else if(type instanceof ZodEnum)return type.options;else if(type instanceof ZodNativeEnum)return util.objectValues(type.enum);else if(type instanceof ZodDefault)return getDiscriminator(type._def.innerType);else if(type instanceof ZodUndefined)return[void 0];else if(type instanceof ZodNull)return[null];else if(type instanceof ZodOptional)return[void 0,...getDiscriminator(type.unwrap())];else if(type instanceof ZodNullable)return[null,...getDiscriminator(type.unwrap())];else if(type instanceof ZodBranded)return getDiscriminator(type.unwrap());else if(type instanceof ZodReadonly)return getDiscriminator(type.unwrap());else if(type instanceof ZodCatch)return getDiscriminator(type._def.innerType);else return[]},ZodDiscriminatedUnion,ZodIntersection,ZodTuple,ZodRecord,ZodMap,ZodSet,ZodFunction,ZodLazy,ZodLiteral,ZodEnum,ZodNativeEnum,ZodPromise,ZodEffects,ZodOptional,ZodNullable,ZodDefault,ZodCatch,ZodNaN,BRAND,ZodBranded,ZodPipeline,ZodReadonly,late,ZodFirstPartyTypeKind,instanceOfType=(cls,params={message:`Input not instance of ${cls.name}`})=>custom((data)=>data instanceof cls,params),stringType,numberType,nanType,bigIntType,booleanType,dateType,symbolType,undefinedType,nullType,anyType,unknownType,neverType,voidType,arrayType,objectType,strictObjectType,unionType,discriminatedUnionType,intersectionType,tupleType,recordType,mapType,setType,functionType,lazyType,literalType,enumType,nativeEnumType,promiseType,effectsType,optionalType,nullableType,preprocessType,pipelineType,ostring=()=>stringType().optional(),onumber=()=>numberType().optional(),oboolean=()=>booleanType().optional(),coerce,NEVER;var init_types=__esm(()=>{init_ZodError();init_errors();init_errorUtil();init_parseUtil();init_util();cuidRegex=/^c[^\s-]{8,}$/i,cuid2Regex=/^[0-9a-z]+$/,ulidRegex=/^[0-9A-HJKMNP-TV-Z]{26}$/i,uuidRegex=/^[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,nanoidRegex=/^[a-z0-9_-]{21}$/i,jwtRegex=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,durationRegex=/^[-+]?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)?)??$/,emailRegex=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ipv4Regex=/^(?:(?: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])$/,ipv4CidrRegex=/^(?:(?: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])$/,ipv6Regex=/^(([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]))$/,ipv6CidrRegex=/^(([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])$/,base64Regex=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64urlRegex=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,dateRegex=new RegExp(`^${dateRegexSource}$`);ZodString=class ZodString extends ZodType{_parse(input){if(this._def.coerce)input.data=String(input.data);if(this._getType(input)!==ZodParsedType.string){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.string,received:ctx2.parsedType}),INVALID}let status=new ParseStatus,ctx=void 0;for(let check of this._def.checks)if(check.kind==="min"){if(input.data.length<check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"string",inclusive:!0,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="max"){if(input.data.length>check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"string",inclusive:!0,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="length"){let tooBig=input.data.length>check.value,tooSmall=input.data.length<check.value;if(tooBig||tooSmall){if(ctx=this._getOrReturnCtx(input,ctx),tooBig)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"string",inclusive:!0,exact:!0,message:check.message});else if(tooSmall)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"string",inclusive:!0,exact:!0,message:check.message});status.dirty()}}else if(check.kind==="email"){if(!emailRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"email",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="emoji"){if(!emojiRegex)emojiRegex=new RegExp(_emojiRegex,"u");if(!emojiRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"emoji",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="uuid"){if(!uuidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"uuid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="nanoid"){if(!nanoidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"nanoid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cuid"){if(!cuidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cuid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cuid2"){if(!cuid2Regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cuid2",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="ulid"){if(!ulidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"ulid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="url")try{new URL(input.data)}catch{ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"url",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="regex"){if(check.regex.lastIndex=0,!check.regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"regex",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="trim")input.data=input.data.trim();else if(check.kind==="includes"){if(!input.data.includes(check.value,check.position))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{includes:check.value,position:check.position},message:check.message}),status.dirty()}else if(check.kind==="toLowerCase")input.data=input.data.toLowerCase();else if(check.kind==="toUpperCase")input.data=input.data.toUpperCase();else if(check.kind==="startsWith"){if(!input.data.startsWith(check.value))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{startsWith:check.value},message:check.message}),status.dirty()}else if(check.kind==="endsWith"){if(!input.data.endsWith(check.value))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{endsWith:check.value},message:check.message}),status.dirty()}else if(check.kind==="datetime"){if(!datetimeRegex(check).test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"datetime",message:check.message}),status.dirty()}else if(check.kind==="date"){if(!dateRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"date",message:check.message}),status.dirty()}else if(check.kind==="time"){if(!timeRegex(check).test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"time",message:check.message}),status.dirty()}else if(check.kind==="duration"){if(!durationRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"duration",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="ip"){if(!isValidIP(input.data,check.version))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"ip",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="jwt"){if(!isValidJWT(input.data,check.alg))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"jwt",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cidr"){if(!isValidCidr(input.data,check.version))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cidr",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="base64"){if(!base64Regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"base64",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="base64url"){if(!base64urlRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"base64url",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}_regex(regex,validation,message){return this.refinement((data)=>regex.test(data),{validation,code:ZodIssueCode.invalid_string,...errorUtil.errToObj(message)})}_addCheck(check){return new ZodString({...this._def,checks:[...this._def.checks,check]})}email(message){return this._addCheck({kind:"email",...errorUtil.errToObj(message)})}url(message){return this._addCheck({kind:"url",...errorUtil.errToObj(message)})}emoji(message){return this._addCheck({kind:"emoji",...errorUtil.errToObj(message)})}uuid(message){return this._addCheck({kind:"uuid",...errorUtil.errToObj(message)})}nanoid(message){return this._addCheck({kind:"nanoid",...errorUtil.errToObj(message)})}cuid(message){return this._addCheck({kind:"cuid",...errorUtil.errToObj(message)})}cuid2(message){return this._addCheck({kind:"cuid2",...errorUtil.errToObj(message)})}ulid(message){return this._addCheck({kind:"ulid",...errorUtil.errToObj(message)})}base64(message){return this._addCheck({kind:"base64",...errorUtil.errToObj(message)})}base64url(message){return this._addCheck({kind:"base64url",...errorUtil.errToObj(message)})}jwt(options){return this._addCheck({kind:"jwt",...errorUtil.errToObj(options)})}ip(options){return this._addCheck({kind:"ip",...errorUtil.errToObj(options)})}cidr(options){return this._addCheck({kind:"cidr",...errorUtil.errToObj(options)})}datetime(options){if(typeof options==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:options});return this._addCheck({kind:"datetime",precision:typeof options?.precision>"u"?null:options?.precision,offset:options?.offset??!1,local:options?.local??!1,...errorUtil.errToObj(options?.message)})}date(message){return this._addCheck({kind:"date",message})}time(options){if(typeof options==="string")return this._addCheck({kind:"time",precision:null,message:options});return this._addCheck({kind:"time",precision:typeof options?.precision>"u"?null:options?.precision,...errorUtil.errToObj(options?.message)})}duration(message){return this._addCheck({kind:"duration",...errorUtil.errToObj(message)})}regex(regex,message){return this._addCheck({kind:"regex",regex,...errorUtil.errToObj(message)})}includes(value,options){return this._addCheck({kind:"includes",value,position:options?.position,...errorUtil.errToObj(options?.message)})}startsWith(value,message){return this._addCheck({kind:"startsWith",value,...errorUtil.errToObj(message)})}endsWith(value,message){return this._addCheck({kind:"endsWith",value,...errorUtil.errToObj(message)})}min(minLength,message){return this._addCheck({kind:"min",value:minLength,...errorUtil.errToObj(message)})}max(maxLength,message){return this._addCheck({kind:"max",value:maxLength,...errorUtil.errToObj(message)})}length(len,message){return this._addCheck({kind:"length",value:len,...errorUtil.errToObj(message)})}nonempty(message){return this.min(1,errorUtil.errToObj(message))}trim(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((ch)=>ch.kind==="datetime")}get isDate(){return!!this._def.checks.find((ch)=>ch.kind==="date")}get isTime(){return!!this._def.checks.find((ch)=>ch.kind==="time")}get isDuration(){return!!this._def.checks.find((ch)=>ch.kind==="duration")}get isEmail(){return!!this._def.checks.find((ch)=>ch.kind==="email")}get isURL(){return!!this._def.checks.find((ch)=>ch.kind==="url")}get isEmoji(){return!!this._def.checks.find((ch)=>ch.kind==="emoji")}get isUUID(){return!!this._def.checks.find((ch)=>ch.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((ch)=>ch.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((ch)=>ch.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((ch)=>ch.kind==="cuid2")}get isULID(){return!!this._def.checks.find((ch)=>ch.kind==="ulid")}get isIP(){return!!this._def.checks.find((ch)=>ch.kind==="ip")}get isCIDR(){return!!this._def.checks.find((ch)=>ch.kind==="cidr")}get isBase64(){return!!this._def.checks.find((ch)=>ch.kind==="base64")}get isBase64url(){return!!this._def.checks.find((ch)=>ch.kind==="base64url")}get minLength(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxLength(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}};ZodString.create=(params)=>{return new ZodString({checks:[],typeName:ZodFirstPartyTypeKind.ZodString,coerce:params?.coerce??!1,...processCreateParams(params)})};ZodNumber=class ZodNumber extends ZodType{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(input){if(this._def.coerce)input.data=Number(input.data);if(this._getType(input)!==ZodParsedType.number){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.number,received:ctx2.parsedType}),INVALID}let ctx=void 0,status=new ParseStatus;for(let check of this._def.checks)if(check.kind==="int"){if(!util.isInteger(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:"integer",received:"float",message:check.message}),status.dirty()}else if(check.kind==="min"){if(check.inclusive?input.data<check.value:input.data<=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"number",inclusive:check.inclusive,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="max"){if(check.inclusive?input.data>check.value:input.data>=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"number",inclusive:check.inclusive,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="multipleOf"){if(floatSafeRemainder(input.data,check.value)!==0)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_multiple_of,multipleOf:check.value,message:check.message}),status.dirty()}else if(check.kind==="finite"){if(!Number.isFinite(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_finite,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}gte(value,message){return this.setLimit("min",value,!0,errorUtil.toString(message))}gt(value,message){return this.setLimit("min",value,!1,errorUtil.toString(message))}lte(value,message){return this.setLimit("max",value,!0,errorUtil.toString(message))}lt(value,message){return this.setLimit("max",value,!1,errorUtil.toString(message))}setLimit(kind,value,inclusive,message){return new ZodNumber({...this._def,checks:[...this._def.checks,{kind,value,inclusive,message:errorUtil.toString(message)}]})}_addCheck(check){return new ZodNumber({...this._def,checks:[...this._def.checks,check]})}int(message){return this._addCheck({kind:"int",message:errorUtil.toString(message)})}positive(message){return this._addCheck({kind:"min",value:0,inclusive:!1,message:errorUtil.toString(message)})}negative(message){return this._addCheck({kind:"max",value:0,inclusive:!1,message:errorUtil.toString(message)})}nonpositive(message){return this._addCheck({kind:"max",value:0,inclusive:!0,message:errorUtil.toString(message)})}nonnegative(message){return this._addCheck({kind:"min",value:0,inclusive:!0,message:errorUtil.toString(message)})}multipleOf(value,message){return this._addCheck({kind:"multipleOf",value,message:errorUtil.toString(message)})}finite(message){return this._addCheck({kind:"finite",message:errorUtil.toString(message)})}safe(message){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:errorUtil.toString(message)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:errorUtil.toString(message)})}get minValue(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxValue(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}get isInt(){return!!this._def.checks.find((ch)=>ch.kind==="int"||ch.kind==="multipleOf"&&util.isInteger(ch.value))}get isFinite(){let max=null,min=null;for(let ch of this._def.checks)if(ch.kind==="finite"||ch.kind==="int"||ch.kind==="multipleOf")return!0;else if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}else if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return Number.isFinite(min)&&Number.isFinite(max)}};ZodNumber.create=(params)=>{return new ZodNumber({checks:[],typeName:ZodFirstPartyTypeKind.ZodNumber,coerce:params?.coerce||!1,...processCreateParams(params)})};ZodBigInt=class ZodBigInt extends ZodType{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(input){if(this._def.coerce)try{input.data=BigInt(input.data)}catch{return this._getInvalidInput(input)}if(this._getType(input)!==ZodParsedType.bigint)return this._getInvalidInput(input);let ctx=void 0,status=new ParseStatus;for(let check of this._def.checks)if(check.kind==="min"){if(check.inclusive?input.data<check.value:input.data<=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,type:"bigint",minimum:check.value,inclusive:check.inclusive,message:check.message}),status.dirty()}else if(check.kind==="max"){if(check.inclusive?input.data>check.value:input.data>=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,type:"bigint",maximum:check.value,inclusive:check.inclusive,message:check.message}),status.dirty()}else if(check.kind==="multipleOf"){if(input.data%check.value!==BigInt(0))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_multiple_of,multipleOf:check.value,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}_getInvalidInput(input){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.bigint,received:ctx.parsedType}),INVALID}gte(value,message){return this.setLimit("min",value,!0,errorUtil.toString(message))}gt(value,message){return this.setLimit("min",value,!1,errorUtil.toString(message))}lte(value,message){return this.setLimit("max",value,!0,errorUtil.toString(message))}lt(value,message){return this.setLimit("max",value,!1,errorUtil.toString(message))}setLimit(kind,value,inclusive,message){return new ZodBigInt({...this._def,checks:[...this._def.checks,{kind,value,inclusive,message:errorUtil.toString(message)}]})}_addCheck(check){return new ZodBigInt({...this._def,checks:[...this._def.checks,check]})}positive(message){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:errorUtil.toString(message)})}negative(message){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:errorUtil.toString(message)})}nonpositive(message){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:errorUtil.toString(message)})}nonnegative(message){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:errorUtil.toString(message)})}multipleOf(value,message){return this._addCheck({kind:"multipleOf",value,message:errorUtil.toString(message)})}get minValue(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxValue(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}};ZodBigInt.create=(params)=>{return new ZodBigInt({checks:[],typeName:ZodFirstPartyTypeKind.ZodBigInt,coerce:params?.coerce??!1,...processCreateParams(params)})};ZodBoolean=class ZodBoolean extends ZodType{_parse(input){if(this._def.coerce)input.data=Boolean(input.data);if(this._getType(input)!==ZodParsedType.boolean){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.boolean,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodBoolean.create=(params)=>{return new ZodBoolean({typeName:ZodFirstPartyTypeKind.ZodBoolean,coerce:params?.coerce||!1,...processCreateParams(params)})};ZodDate=class ZodDate extends ZodType{_parse(input){if(this._def.coerce)input.data=new Date(input.data);if(this._getType(input)!==ZodParsedType.date){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.date,received:ctx2.parsedType}),INVALID}if(Number.isNaN(input.data.getTime())){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_date}),INVALID}let status=new ParseStatus,ctx=void 0;for(let check of this._def.checks)if(check.kind==="min"){if(input.data.getTime()<check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,message:check.message,inclusive:!0,exact:!1,minimum:check.value,type:"date"}),status.dirty()}else if(check.kind==="max"){if(input.data.getTime()>check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,message:check.message,inclusive:!0,exact:!1,maximum:check.value,type:"date"}),status.dirty()}else util.assertNever(check);return{status:status.value,value:new Date(input.data.getTime())}}_addCheck(check){return new ZodDate({...this._def,checks:[...this._def.checks,check]})}min(minDate,message){return this._addCheck({kind:"min",value:minDate.getTime(),message:errorUtil.toString(message)})}max(maxDate,message){return this._addCheck({kind:"max",value:maxDate.getTime(),message:errorUtil.toString(message)})}get minDate(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min!=null?new Date(min):null}get maxDate(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max!=null?new Date(max):null}};ZodDate.create=(params)=>{return new ZodDate({checks:[],coerce:params?.coerce||!1,typeName:ZodFirstPartyTypeKind.ZodDate,...processCreateParams(params)})};ZodSymbol=class ZodSymbol extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.symbol){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.symbol,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodSymbol.create=(params)=>{return new ZodSymbol({typeName:ZodFirstPartyTypeKind.ZodSymbol,...processCreateParams(params)})};ZodUndefined=class ZodUndefined extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.undefined){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.undefined,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodUndefined.create=(params)=>{return new ZodUndefined({typeName:ZodFirstPartyTypeKind.ZodUndefined,...processCreateParams(params)})};ZodNull=class ZodNull extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.null){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.null,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodNull.create=(params)=>{return new ZodNull({typeName:ZodFirstPartyTypeKind.ZodNull,...processCreateParams(params)})};ZodAny=class ZodAny extends ZodType{constructor(){super(...arguments);this._any=!0}_parse(input){return OK(input.data)}};ZodAny.create=(params)=>{return new ZodAny({typeName:ZodFirstPartyTypeKind.ZodAny,...processCreateParams(params)})};ZodUnknown=class ZodUnknown extends ZodType{constructor(){super(...arguments);this._unknown=!0}_parse(input){return OK(input.data)}};ZodUnknown.create=(params)=>{return new ZodUnknown({typeName:ZodFirstPartyTypeKind.ZodUnknown,...processCreateParams(params)})};ZodNever=class ZodNever extends ZodType{_parse(input){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.never,received:ctx.parsedType}),INVALID}};ZodNever.create=(params)=>{return new ZodNever({typeName:ZodFirstPartyTypeKind.ZodNever,...processCreateParams(params)})};ZodVoid=class ZodVoid extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.undefined){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.void,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodVoid.create=(params)=>{return new ZodVoid({typeName:ZodFirstPartyTypeKind.ZodVoid,...processCreateParams(params)})};ZodArray=class ZodArray extends ZodType{_parse(input){let{ctx,status}=this._processInputParams(input),def=this._def;if(ctx.parsedType!==ZodParsedType.array)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:ctx.parsedType}),INVALID;if(def.exactLength!==null){let tooBig=ctx.data.length>def.exactLength.value,tooSmall=ctx.data.length<def.exactLength.value;if(tooBig||tooSmall)addIssueToContext(ctx,{code:tooBig?ZodIssueCode.too_big:ZodIssueCode.too_small,minimum:tooSmall?def.exactLength.value:void 0,maximum:tooBig?def.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:def.exactLength.message}),status.dirty()}if(def.minLength!==null){if(ctx.data.length<def.minLength.value)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:def.minLength.value,type:"array",inclusive:!0,exact:!1,message:def.minLength.message}),status.dirty()}if(def.maxLength!==null){if(ctx.data.length>def.maxLength.value)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:def.maxLength.value,type:"array",inclusive:!0,exact:!1,message:def.maxLength.message}),status.dirty()}if(ctx.common.async)return Promise.all([...ctx.data].map((item,i)=>{return def.type._parseAsync(new ParseInputLazyPath(ctx,item,ctx.path,i))})).then((result3)=>{return ParseStatus.mergeArray(status,result3)});let result2=[...ctx.data].map((item,i)=>{return def.type._parseSync(new ParseInputLazyPath(ctx,item,ctx.path,i))});return ParseStatus.mergeArray(status,result2)}get element(){return this._def.type}min(minLength,message){return new ZodArray({...this._def,minLength:{value:minLength,message:errorUtil.toString(message)}})}max(maxLength,message){return new ZodArray({...this._def,maxLength:{value:maxLength,message:errorUtil.toString(message)}})}length(len,message){return new ZodArray({...this._def,exactLength:{value:len,message:errorUtil.toString(message)}})}nonempty(message){return this.min(1,message)}};ZodArray.create=(schema,params)=>{return new ZodArray({type:schema,minLength:null,maxLength:null,exactLength:null,typeName:ZodFirstPartyTypeKind.ZodArray,...processCreateParams(params)})};ZodObject=class ZodObject extends ZodType{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let shape=this._def.shape(),keys=util.objectKeys(shape);return this._cached={shape,keys},this._cached}_parse(input){if(this._getType(input)!==ZodParsedType.object){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx2.parsedType}),INVALID}let{status,ctx}=this._processInputParams(input),{shape,keys:shapeKeys}=this._getCached(),extraKeys=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys==="strip")){for(let key in ctx.data)if(!shapeKeys.includes(key))extraKeys.push(key)}let pairs=[];for(let key of shapeKeys){let keyValidator=shape[key],value=ctx.data[key];pairs.push({key:{status:"valid",value:key},value:keyValidator._parse(new ParseInputLazyPath(ctx,value,ctx.path,key)),alwaysSet:key in ctx.data})}if(this._def.catchall instanceof ZodNever){let unknownKeys=this._def.unknownKeys;if(unknownKeys==="passthrough")for(let key of extraKeys)pairs.push({key:{status:"valid",value:key},value:{status:"valid",value:ctx.data[key]}});else if(unknownKeys==="strict"){if(extraKeys.length>0)addIssueToContext(ctx,{code:ZodIssueCode.unrecognized_keys,keys:extraKeys}),status.dirty()}else if(unknownKeys==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let catchall=this._def.catchall;for(let key of extraKeys){let value=ctx.data[key];pairs.push({key:{status:"valid",value:key},value:catchall._parse(new ParseInputLazyPath(ctx,value,ctx.path,key)),alwaysSet:key in ctx.data})}}if(ctx.common.async)return Promise.resolve().then(async()=>{let syncPairs=[];for(let pair of pairs){let key=await pair.key,value=await pair.value;syncPairs.push({key,value,alwaysSet:pair.alwaysSet})}return syncPairs}).then((syncPairs)=>{return ParseStatus.mergeObjectSync(status,syncPairs)});else return ParseStatus.mergeObjectSync(status,pairs)}get shape(){return this._def.shape()}strict(message){return errorUtil.errToObj,new ZodObject({...this._def,unknownKeys:"strict",...message!==void 0?{errorMap:(issue,ctx)=>{let defaultError=this._def.errorMap?.(issue,ctx).message??ctx.defaultError;if(issue.code==="unrecognized_keys")return{message:errorUtil.errToObj(message).message??defaultError};return{message:defaultError}}}:{}})}strip(){return new ZodObject({...this._def,unknownKeys:"strip"})}passthrough(){return new ZodObject({...this._def,unknownKeys:"passthrough"})}extend(augmentation){return new ZodObject({...this._def,shape:()=>({...this._def.shape(),...augmentation})})}merge(merging){return new ZodObject({unknownKeys:merging._def.unknownKeys,catchall:merging._def.catchall,shape:()=>({...this._def.shape(),...merging._def.shape()}),typeName:ZodFirstPartyTypeKind.ZodObject})}setKey(key,schema){return this.augment({[key]:schema})}catchall(index){return new ZodObject({...this._def,catchall:index})}pick(mask){let shape={};for(let key of util.objectKeys(mask))if(mask[key]&&this.shape[key])shape[key]=this.shape[key];return new ZodObject({...this._def,shape:()=>shape})}omit(mask){let shape={};for(let key of util.objectKeys(this.shape))if(!mask[key])shape[key]=this.shape[key];return new ZodObject({...this._def,shape:()=>shape})}deepPartial(){return deepPartialify(this)}partial(mask){let newShape={};for(let key of util.objectKeys(this.shape)){let fieldSchema=this.shape[key];if(mask&&!mask[key])newShape[key]=fieldSchema;else newShape[key]=fieldSchema.optional()}return new ZodObject({...this._def,shape:()=>newShape})}required(mask){let newShape={};for(let key of util.objectKeys(this.shape))if(mask&&!mask[key])newShape[key]=this.shape[key];else{let newField=this.shape[key];while(newField instanceof ZodOptional)newField=newField._def.innerType;newShape[key]=newField}return new ZodObject({...this._def,shape:()=>newShape})}keyof(){return createZodEnum(util.objectKeys(this.shape))}};ZodObject.create=(shape,params)=>{return new ZodObject({shape:()=>shape,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodObject.strictCreate=(shape,params)=>{return new ZodObject({shape:()=>shape,unknownKeys:"strict",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodObject.lazycreate=(shape,params)=>{return new ZodObject({shape,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodUnion=class ZodUnion extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),options=this._def.options;function handleResults(results){for(let result2 of results)if(result2.result.status==="valid")return result2.result;for(let result2 of results)if(result2.result.status==="dirty")return ctx.common.issues.push(...result2.ctx.common.issues),result2.result;let unionErrors=results.map((result2)=>new ZodError(result2.ctx.common.issues));return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union,unionErrors}),INVALID}if(ctx.common.async)return Promise.all(options.map(async(option)=>{let childCtx={...ctx,common:{...ctx.common,issues:[]},parent:null};return{result:await option._parseAsync({data:ctx.data,path:ctx.path,parent:childCtx}),ctx:childCtx}})).then(handleResults);else{let dirty=void 0,issues=[];for(let option of options){let childCtx={...ctx,common:{...ctx.common,issues:[]},parent:null},result2=option._parseSync({data:ctx.data,path:ctx.path,parent:childCtx});if(result2.status==="valid")return result2;else if(result2.status==="dirty"&&!dirty)dirty={result:result2,ctx:childCtx};if(childCtx.common.issues.length)issues.push(childCtx.common.issues)}if(dirty)return ctx.common.issues.push(...dirty.ctx.common.issues),dirty.result;let unionErrors=issues.map((issues2)=>new ZodError(issues2));return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union,unionErrors}),INVALID}}get options(){return this._def.options}};ZodUnion.create=(types,params)=>{return new ZodUnion({options:types,typeName:ZodFirstPartyTypeKind.ZodUnion,...processCreateParams(params)})};ZodDiscriminatedUnion=class ZodDiscriminatedUnion extends ZodType{_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.object)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx.parsedType}),INVALID;let discriminator=this.discriminator,discriminatorValue=ctx.data[discriminator],option=this.optionsMap.get(discriminatorValue);if(!option)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[discriminator]}),INVALID;if(ctx.common.async)return option._parseAsync({data:ctx.data,path:ctx.path,parent:ctx});else return option._parseSync({data:ctx.data,path:ctx.path,parent:ctx})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(discriminator,options,params){let optionsMap=new Map;for(let type of options){let discriminatorValues=getDiscriminator(type.shape[discriminator]);if(!discriminatorValues.length)throw Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);for(let value of discriminatorValues){if(optionsMap.has(value))throw Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);optionsMap.set(value,type)}}return new ZodDiscriminatedUnion({typeName:ZodFirstPartyTypeKind.ZodDiscriminatedUnion,discriminator,options,optionsMap,...processCreateParams(params)})}};ZodIntersection=class ZodIntersection extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input),handleParsed=(parsedLeft,parsedRight)=>{if(isAborted(parsedLeft)||isAborted(parsedRight))return INVALID;let merged=mergeValues(parsedLeft.value,parsedRight.value);if(!merged.valid)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_intersection_types}),INVALID;if(isDirty(parsedLeft)||isDirty(parsedRight))status.dirty();return{status:status.value,value:merged.data}};if(ctx.common.async)return Promise.all([this._def.left._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}),this._def.right._parseAsync({data:ctx.data,path:ctx.path,parent:ctx})]).then(([left,right])=>handleParsed(left,right));else return handleParsed(this._def.left._parseSync({data:ctx.data,path:ctx.path,parent:ctx}),this._def.right._parseSync({data:ctx.data,path:ctx.path,parent:ctx}))}};ZodIntersection.create=(left,right,params)=>{return new ZodIntersection({left,right,typeName:ZodFirstPartyTypeKind.ZodIntersection,...processCreateParams(params)})};ZodTuple=class ZodTuple extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.array)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:ctx.parsedType}),INVALID;if(ctx.data.length<this._def.items.length)return addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),INVALID;if(!this._def.rest&&ctx.data.length>this._def.items.length)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),status.dirty();let items=[...ctx.data].map((item,itemIndex)=>{let schema=this._def.items[itemIndex]||this._def.rest;if(!schema)return null;return schema._parse(new ParseInputLazyPath(ctx,item,ctx.path,itemIndex))}).filter((x)=>!!x);if(ctx.common.async)return Promise.all(items).then((results)=>{return ParseStatus.mergeArray(status,results)});else return ParseStatus.mergeArray(status,items)}get items(){return this._def.items}rest(rest){return new ZodTuple({...this._def,rest})}};ZodTuple.create=(schemas,params)=>{if(!Array.isArray(schemas))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new ZodTuple({items:schemas,typeName:ZodFirstPartyTypeKind.ZodTuple,rest:null,...processCreateParams(params)})};ZodRecord=class ZodRecord extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.object)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx.parsedType}),INVALID;let pairs=[],keyType=this._def.keyType,valueType=this._def.valueType;for(let key in ctx.data)pairs.push({key:keyType._parse(new ParseInputLazyPath(ctx,key,ctx.path,key)),value:valueType._parse(new ParseInputLazyPath(ctx,ctx.data[key],ctx.path,key)),alwaysSet:key in ctx.data});if(ctx.common.async)return ParseStatus.mergeObjectAsync(status,pairs);else return ParseStatus.mergeObjectSync(status,pairs)}get element(){return this._def.valueType}static create(first,second,third){if(second instanceof ZodType)return new ZodRecord({keyType:first,valueType:second,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(third)});return new ZodRecord({keyType:ZodString.create(),valueType:first,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(second)})}};ZodMap=class ZodMap extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.map)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.map,received:ctx.parsedType}),INVALID;let keyType=this._def.keyType,valueType=this._def.valueType,pairs=[...ctx.data.entries()].map(([key,value],index)=>{return{key:keyType._parse(new ParseInputLazyPath(ctx,key,ctx.path,[index,"key"])),value:valueType._parse(new ParseInputLazyPath(ctx,value,ctx.path,[index,"value"]))}});if(ctx.common.async){let finalMap=new Map;return Promise.resolve().then(async()=>{for(let pair of pairs){let key=await pair.key,value=await pair.value;if(key.status==="aborted"||value.status==="aborted")return INVALID;if(key.status==="dirty"||value.status==="dirty")status.dirty();finalMap.set(key.value,value.value)}return{status:status.value,value:finalMap}})}else{let finalMap=new Map;for(let pair of pairs){let{key,value}=pair;if(key.status==="aborted"||value.status==="aborted")return INVALID;if(key.status==="dirty"||value.status==="dirty")status.dirty();finalMap.set(key.value,value.value)}return{status:status.value,value:finalMap}}}};ZodMap.create=(keyType,valueType,params)=>{return new ZodMap({valueType,keyType,typeName:ZodFirstPartyTypeKind.ZodMap,...processCreateParams(params)})};ZodSet=class ZodSet extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.set)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.set,received:ctx.parsedType}),INVALID;let def=this._def;if(def.minSize!==null){if(ctx.data.size<def.minSize.value)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:def.minSize.value,type:"set",inclusive:!0,exact:!1,message:def.minSize.message}),status.dirty()}if(def.maxSize!==null){if(ctx.data.size>def.maxSize.value)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:def.maxSize.value,type:"set",inclusive:!0,exact:!1,message:def.maxSize.message}),status.dirty()}let valueType=this._def.valueType;function finalizeSet(elements2){let parsedSet=new Set;for(let element of elements2){if(element.status==="aborted")return INVALID;if(element.status==="dirty")status.dirty();parsedSet.add(element.value)}return{status:status.value,value:parsedSet}}let elements=[...ctx.data.values()].map((item,i)=>valueType._parse(new ParseInputLazyPath(ctx,item,ctx.path,i)));if(ctx.common.async)return Promise.all(elements).then((elements2)=>finalizeSet(elements2));else return finalizeSet(elements)}min(minSize,message){return new ZodSet({...this._def,minSize:{value:minSize,message:errorUtil.toString(message)}})}max(maxSize,message){return new ZodSet({...this._def,maxSize:{value:maxSize,message:errorUtil.toString(message)}})}size(size,message){return this.min(size,message).max(size,message)}nonempty(message){return this.min(1,message)}};ZodSet.create=(valueType,params)=>{return new ZodSet({valueType,minSize:null,maxSize:null,typeName:ZodFirstPartyTypeKind.ZodSet,...processCreateParams(params)})};ZodFunction=class ZodFunction extends ZodType{constructor(){super(...arguments);this.validate=this.implement}_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.function)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.function,received:ctx.parsedType}),INVALID;function makeArgsIssue(args,error){return makeIssue({data:args,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,getErrorMap(),en_default].filter((x)=>!!x),issueData:{code:ZodIssueCode.invalid_arguments,argumentsError:error}})}function makeReturnsIssue(returns,error){return makeIssue({data:returns,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,getErrorMap(),en_default].filter((x)=>!!x),issueData:{code:ZodIssueCode.invalid_return_type,returnTypeError:error}})}let params={errorMap:ctx.common.contextualErrorMap},fn=ctx.data;if(this._def.returns instanceof ZodPromise){let me=this;return OK(async function(...args){let error=new ZodError([]),parsedArgs=await me._def.args.parseAsync(args,params).catch((e)=>{throw error.addIssue(makeArgsIssue(args,e)),error}),result2=await Reflect.apply(fn,this,parsedArgs);return await me._def.returns._def.type.parseAsync(result2,params).catch((e)=>{throw error.addIssue(makeReturnsIssue(result2,e)),error})})}else{let me=this;return OK(function(...args){let parsedArgs=me._def.args.safeParse(args,params);if(!parsedArgs.success)throw new ZodError([makeArgsIssue(args,parsedArgs.error)]);let result2=Reflect.apply(fn,this,parsedArgs.data),parsedReturns=me._def.returns.safeParse(result2,params);if(!parsedReturns.success)throw new ZodError([makeReturnsIssue(result2,parsedReturns.error)]);return parsedReturns.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...items){return new ZodFunction({...this._def,args:ZodTuple.create(items).rest(ZodUnknown.create())})}returns(returnType){return new ZodFunction({...this._def,returns:returnType})}implement(func){return this.parse(func)}strictImplement(func){return this.parse(func)}static create(args,returns,params){return new ZodFunction({args:args?args:ZodTuple.create([]).rest(ZodUnknown.create()),returns:returns||ZodUnknown.create(),typeName:ZodFirstPartyTypeKind.ZodFunction,...processCreateParams(params)})}};ZodLazy=class ZodLazy extends ZodType{get schema(){return this._def.getter()}_parse(input){let{ctx}=this._processInputParams(input);return this._def.getter()._parse({data:ctx.data,path:ctx.path,parent:ctx})}};ZodLazy.create=(getter,params)=>{return new ZodLazy({getter,typeName:ZodFirstPartyTypeKind.ZodLazy,...processCreateParams(params)})};ZodLiteral=class ZodLiteral extends ZodType{_parse(input){if(input.data!==this._def.value){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_literal,expected:this._def.value}),INVALID}return{status:"valid",value:input.data}}get value(){return this._def.value}};ZodLiteral.create=(value,params)=>{return new ZodLiteral({value,typeName:ZodFirstPartyTypeKind.ZodLiteral,...processCreateParams(params)})};ZodEnum=class ZodEnum extends ZodType{_parse(input){if(typeof input.data!=="string"){let ctx=this._getOrReturnCtx(input),expectedValues=this._def.values;return addIssueToContext(ctx,{expected:util.joinValues(expectedValues),received:ctx.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(input.data)){let ctx=this._getOrReturnCtx(input),expectedValues=this._def.values;return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_enum_value,options:expectedValues}),INVALID}return OK(input.data)}get options(){return this._def.values}get enum(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}get Values(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}get Enum(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}extract(values,newDef=this._def){return ZodEnum.create(values,{...this._def,...newDef})}exclude(values,newDef=this._def){return ZodEnum.create(this.options.filter((opt)=>!values.includes(opt)),{...this._def,...newDef})}};ZodEnum.create=createZodEnum;ZodNativeEnum=class ZodNativeEnum extends ZodType{_parse(input){let nativeEnumValues=util.getValidEnumValues(this._def.values),ctx=this._getOrReturnCtx(input);if(ctx.parsedType!==ZodParsedType.string&&ctx.parsedType!==ZodParsedType.number){let expectedValues=util.objectValues(nativeEnumValues);return addIssueToContext(ctx,{expected:util.joinValues(expectedValues),received:ctx.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(!this._cache)this._cache=new Set(util.getValidEnumValues(this._def.values));if(!this._cache.has(input.data)){let expectedValues=util.objectValues(nativeEnumValues);return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_enum_value,options:expectedValues}),INVALID}return OK(input.data)}get enum(){return this._def.values}};ZodNativeEnum.create=(values,params)=>{return new ZodNativeEnum({values,typeName:ZodFirstPartyTypeKind.ZodNativeEnum,...processCreateParams(params)})};ZodPromise=class ZodPromise extends ZodType{unwrap(){return this._def.type}_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.promise&&ctx.common.async===!1)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.promise,received:ctx.parsedType}),INVALID;let promisified=ctx.parsedType===ZodParsedType.promise?ctx.data:Promise.resolve(ctx.data);return OK(promisified.then((data)=>{return this._def.type.parseAsync(data,{path:ctx.path,errorMap:ctx.common.contextualErrorMap})}))}};ZodPromise.create=(schema,params)=>{return new ZodPromise({type:schema,typeName:ZodFirstPartyTypeKind.ZodPromise,...processCreateParams(params)})};ZodEffects=class ZodEffects extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ZodFirstPartyTypeKind.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(input){let{status,ctx}=this._processInputParams(input),effect=this._def.effect||null,checkCtx={addIssue:(arg)=>{if(addIssueToContext(ctx,arg),arg.fatal)status.abort();else status.dirty()},get path(){return ctx.path}};if(checkCtx.addIssue=checkCtx.addIssue.bind(checkCtx),effect.type==="preprocess"){let processed=effect.transform(ctx.data,checkCtx);if(ctx.common.async)return Promise.resolve(processed).then(async(processed2)=>{if(status.value==="aborted")return INVALID;let result2=await this._def.schema._parseAsync({data:processed2,path:ctx.path,parent:ctx});if(result2.status==="aborted")return INVALID;if(result2.status==="dirty")return DIRTY(result2.value);if(status.value==="dirty")return DIRTY(result2.value);return result2});else{if(status.value==="aborted")return INVALID;let result2=this._def.schema._parseSync({data:processed,path:ctx.path,parent:ctx});if(result2.status==="aborted")return INVALID;if(result2.status==="dirty")return DIRTY(result2.value);if(status.value==="dirty")return DIRTY(result2.value);return result2}}if(effect.type==="refinement"){let executeRefinement=(acc)=>{let result2=effect.refinement(acc,checkCtx);if(ctx.common.async)return Promise.resolve(result2);if(result2 instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return acc};if(ctx.common.async===!1){let inner=this._def.schema._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(inner.status==="aborted")return INVALID;if(inner.status==="dirty")status.dirty();return executeRefinement(inner.value),{status:status.value,value:inner.value}}else return this._def.schema._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}).then((inner)=>{if(inner.status==="aborted")return INVALID;if(inner.status==="dirty")status.dirty();return executeRefinement(inner.value).then(()=>{return{status:status.value,value:inner.value}})})}if(effect.type==="transform")if(ctx.common.async===!1){let base=this._def.schema._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(!isValid(base))return INVALID;let result2=effect.transform(base.value,checkCtx);if(result2 instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:status.value,value:result2}}else return this._def.schema._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}).then((base)=>{if(!isValid(base))return INVALID;return Promise.resolve(effect.transform(base.value,checkCtx)).then((result2)=>({status:status.value,value:result2}))});util.assertNever(effect)}};ZodEffects.create=(schema,effect,params)=>{return new ZodEffects({schema,typeName:ZodFirstPartyTypeKind.ZodEffects,effect,...processCreateParams(params)})};ZodEffects.createWithPreprocess=(preprocess,schema,params)=>{return new ZodEffects({schema,effect:{type:"preprocess",transform:preprocess},typeName:ZodFirstPartyTypeKind.ZodEffects,...processCreateParams(params)})};ZodOptional=class ZodOptional extends ZodType{_parse(input){if(this._getType(input)===ZodParsedType.undefined)return OK(void 0);return this._def.innerType._parse(input)}unwrap(){return this._def.innerType}};ZodOptional.create=(type,params)=>{return new ZodOptional({innerType:type,typeName:ZodFirstPartyTypeKind.ZodOptional,...processCreateParams(params)})};ZodNullable=class ZodNullable extends ZodType{_parse(input){if(this._getType(input)===ZodParsedType.null)return OK(null);return this._def.innerType._parse(input)}unwrap(){return this._def.innerType}};ZodNullable.create=(type,params)=>{return new ZodNullable({innerType:type,typeName:ZodFirstPartyTypeKind.ZodNullable,...processCreateParams(params)})};ZodDefault=class ZodDefault extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),data=ctx.data;if(ctx.parsedType===ZodParsedType.undefined)data=this._def.defaultValue();return this._def.innerType._parse({data,path:ctx.path,parent:ctx})}removeDefault(){return this._def.innerType}};ZodDefault.create=(type,params)=>{return new ZodDefault({innerType:type,typeName:ZodFirstPartyTypeKind.ZodDefault,defaultValue:typeof params.default==="function"?params.default:()=>params.default,...processCreateParams(params)})};ZodCatch=class ZodCatch extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),newCtx={...ctx,common:{...ctx.common,issues:[]}},result2=this._def.innerType._parse({data:newCtx.data,path:newCtx.path,parent:{...newCtx}});if(isAsync(result2))return result2.then((result3)=>{return{status:"valid",value:result3.status==="valid"?result3.value:this._def.catchValue({get error(){return new ZodError(newCtx.common.issues)},input:newCtx.data})}});else return{status:"valid",value:result2.status==="valid"?result2.value:this._def.catchValue({get error(){return new ZodError(newCtx.common.issues)},input:newCtx.data})}}removeCatch(){return this._def.innerType}};ZodCatch.create=(type,params)=>{return new ZodCatch({innerType:type,typeName:ZodFirstPartyTypeKind.ZodCatch,catchValue:typeof params.catch==="function"?params.catch:()=>params.catch,...processCreateParams(params)})};ZodNaN=class ZodNaN extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.nan){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.nan,received:ctx.parsedType}),INVALID}return{status:"valid",value:input.data}}};ZodNaN.create=(params)=>{return new ZodNaN({typeName:ZodFirstPartyTypeKind.ZodNaN,...processCreateParams(params)})};BRAND=Symbol("zod_brand");ZodBranded=class ZodBranded extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),data=ctx.data;return this._def.type._parse({data,path:ctx.path,parent:ctx})}unwrap(){return this._def.type}};ZodPipeline=class ZodPipeline extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.common.async)return(async()=>{let inResult=await this._def.in._parseAsync({data:ctx.data,path:ctx.path,parent:ctx});if(inResult.status==="aborted")return INVALID;if(inResult.status==="dirty")return status.dirty(),DIRTY(inResult.value);else return this._def.out._parseAsync({data:inResult.value,path:ctx.path,parent:ctx})})();else{let inResult=this._def.in._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(inResult.status==="aborted")return INVALID;if(inResult.status==="dirty")return status.dirty(),{status:"dirty",value:inResult.value};else return this._def.out._parseSync({data:inResult.value,path:ctx.path,parent:ctx})}}static create(a,b){return new ZodPipeline({in:a,out:b,typeName:ZodFirstPartyTypeKind.ZodPipeline})}};ZodReadonly=class ZodReadonly extends ZodType{_parse(input){let result2=this._def.innerType._parse(input),freeze=(data)=>{if(isValid(data))data.value=Object.freeze(data.value);return data};return isAsync(result2)?result2.then((data)=>freeze(data)):freeze(result2)}unwrap(){return this._def.innerType}};ZodReadonly.create=(type,params)=>{return new ZodReadonly({innerType:type,typeName:ZodFirstPartyTypeKind.ZodReadonly,...processCreateParams(params)})};late={object:ZodObject.lazycreate};(function(ZodFirstPartyTypeKind2){ZodFirstPartyTypeKind2.ZodString="ZodString",ZodFirstPartyTypeKind2.ZodNumber="ZodNumber",ZodFirstPartyTypeKind2.ZodNaN="ZodNaN",ZodFirstPartyTypeKind2.ZodBigInt="ZodBigInt",ZodFirstPartyTypeKind2.ZodBoolean="ZodBoolean",ZodFirstPartyTypeKind2.ZodDate="ZodDate",ZodFirstPartyTypeKind2.ZodSymbol="ZodSymbol",ZodFirstPartyTypeKind2.ZodUndefined="ZodUndefined",ZodFirstPartyTypeKind2.ZodNull="ZodNull",ZodFirstPartyTypeKind2.ZodAny="ZodAny",ZodFirstPartyTypeKind2.ZodUnknown="ZodUnknown",ZodFirstPartyTypeKind2.ZodNever="ZodNever",ZodFirstPartyTypeKind2.ZodVoid="ZodVoid",ZodFirstPartyTypeKind2.ZodArray="ZodArray",ZodFirstPartyTypeKind2.ZodObject="ZodObject",ZodFirstPartyTypeKind2.ZodUnion="ZodUnion",ZodFirstPartyTypeKind2.ZodDiscriminatedUnion="ZodDiscriminatedUnion",ZodFirstPartyTypeKind2.ZodIntersection="ZodIntersection",ZodFirstPartyTypeKind2.ZodTuple="ZodTuple",ZodFirstPartyTypeKind2.ZodRecord="ZodRecord",ZodFirstPartyTypeKind2.ZodMap="ZodMap",ZodFirstPartyTypeKind2.ZodSet="ZodSet",ZodFirstPartyTypeKind2.ZodFunction="ZodFunction",ZodFirstPartyTypeKind2.ZodLazy="ZodLazy",ZodFirstPartyTypeKind2.ZodLiteral="ZodLiteral",ZodFirstPartyTypeKind2.ZodEnum="ZodEnum",ZodFirstPartyTypeKind2.ZodEffects="ZodEffects",ZodFirstPartyTypeKind2.ZodNativeEnum="ZodNativeEnum",ZodFirstPartyTypeKind2.ZodOptional="ZodOptional",ZodFirstPartyTypeKind2.ZodNullable="ZodNullable",ZodFirstPartyTypeKind2.ZodDefault="ZodDefault",ZodFirstPartyTypeKind2.ZodCatch="ZodCatch",ZodFirstPartyTypeKind2.ZodPromise="ZodPromise",ZodFirstPartyTypeKind2.ZodBranded="ZodBranded",ZodFirstPartyTypeKind2.ZodPipeline="ZodPipeline",ZodFirstPartyTypeKind2.ZodReadonly="ZodReadonly"})(ZodFirstPartyTypeKind||(ZodFirstPartyTypeKind={}));stringType=ZodString.create,numberType=ZodNumber.create,nanType=ZodNaN.create,bigIntType=ZodBigInt.create,booleanType=ZodBoolean.create,dateType=ZodDate.create,symbolType=ZodSymbol.create,undefinedType=ZodUndefined.create,nullType=ZodNull.create,anyType=ZodAny.create,unknownType=ZodUnknown.create,neverType=ZodNever.create,voidType=ZodVoid.create,arrayType=ZodArray.create,objectType=ZodObject.create,strictObjectType=ZodObject.strictCreate,unionType=ZodUnion.create,discriminatedUnionType=ZodDiscriminatedUnion.create,intersectionType=ZodIntersection.create,tupleType=ZodTuple.create,recordType=ZodRecord.create,mapType=ZodMap.create,setType=ZodSet.create,functionType=ZodFunction.create,lazyType=ZodLazy.create,literalType=ZodLiteral.create,enumType=ZodEnum.create,nativeEnumType=ZodNativeEnum.create,promiseType=ZodPromise.create,effectsType=ZodEffects.create,optionalType=ZodOptional.create,nullableType=ZodNullable.create,preprocessType=ZodEffects.createWithPreprocess,pipelineType=ZodPipeline.create,coerce={string:(arg)=>ZodString.create({...arg,coerce:!0}),number:(arg)=>ZodNumber.create({...arg,coerce:!0}),boolean:(arg)=>ZodBoolean.create({...arg,coerce:!0}),bigint:(arg)=>ZodBigInt.create({...arg,coerce:!0}),date:(arg)=>ZodDate.create({...arg,coerce:!0})},NEVER=INVALID});var exports_external={};__export(exports_external,{void:()=>voidType,util:()=>util,unknown:()=>unknownType,union:()=>unionType,undefined:()=>undefinedType,tuple:()=>tupleType,transformer:()=>effectsType,symbol:()=>symbolType,string:()=>stringType,strictObject:()=>strictObjectType,setErrorMap:()=>setErrorMap,set:()=>setType,record:()=>recordType,quotelessJson:()=>quotelessJson,promise:()=>promiseType,preprocess:()=>preprocessType,pipeline:()=>pipelineType,ostring:()=>ostring,optional:()=>optionalType,onumber:()=>onumber,oboolean:()=>oboolean,objectUtil:()=>objectUtil,object:()=>objectType,number:()=>numberType,nullable:()=>nullableType,null:()=>nullType,never:()=>neverType,nativeEnum:()=>nativeEnumType,nan:()=>nanType,map:()=>mapType,makeIssue:()=>makeIssue,literal:()=>literalType,lazy:()=>lazyType,late:()=>late,isValid:()=>isValid,isDirty:()=>isDirty,isAsync:()=>isAsync,isAborted:()=>isAborted,intersection:()=>intersectionType,instanceof:()=>instanceOfType,getParsedType:()=>getParsedType,getErrorMap:()=>getErrorMap,function:()=>functionType,enum:()=>enumType,effect:()=>effectsType,discriminatedUnion:()=>discriminatedUnionType,defaultErrorMap:()=>en_default,datetimeRegex:()=>datetimeRegex,date:()=>dateType,custom:()=>custom,coerce:()=>coerce,boolean:()=>booleanType,bigint:()=>bigIntType,array:()=>arrayType,any:()=>anyType,addIssueToContext:()=>addIssueToContext,ZodVoid:()=>ZodVoid,ZodUnknown:()=>ZodUnknown,ZodUnion:()=>ZodUnion,ZodUndefined:()=>ZodUndefined,ZodType:()=>ZodType,ZodTuple:()=>ZodTuple,ZodTransformer:()=>ZodEffects,ZodSymbol:()=>ZodSymbol,ZodString:()=>ZodString,ZodSet:()=>ZodSet,ZodSchema:()=>ZodType,ZodRecord:()=>ZodRecord,ZodReadonly:()=>ZodReadonly,ZodPromise:()=>ZodPromise,ZodPipeline:()=>ZodPipeline,ZodParsedType:()=>ZodParsedType,ZodOptional:()=>ZodOptional,ZodObject:()=>ZodObject,ZodNumber:()=>ZodNumber,ZodNullable:()=>ZodNullable,ZodNull:()=>ZodNull,ZodNever:()=>ZodNever,ZodNativeEnum:()=>ZodNativeEnum,ZodNaN:()=>ZodNaN,ZodMap:()=>ZodMap,ZodLiteral:()=>ZodLiteral,ZodLazy:()=>ZodLazy,ZodIssueCode:()=>ZodIssueCode,ZodIntersection:()=>ZodIntersection,ZodFunction:()=>ZodFunction,ZodFirstPartyTypeKind:()=>ZodFirstPartyTypeKind,ZodError:()=>ZodError,ZodEnum:()=>ZodEnum,ZodEffects:()=>ZodEffects,ZodDiscriminatedUnion:()=>ZodDiscriminatedUnion,ZodDefault:()=>ZodDefault,ZodDate:()=>ZodDate,ZodCatch:()=>ZodCatch,ZodBranded:()=>ZodBranded,ZodBoolean:()=>ZodBoolean,ZodBigInt:()=>ZodBigInt,ZodArray:()=>ZodArray,ZodAny:()=>ZodAny,Schema:()=>ZodType,ParseStatus:()=>ParseStatus,OK:()=>OK,NEVER:()=>NEVER,INVALID:()=>INVALID,EMPTY_PATH:()=>EMPTY_PATH,DIRTY:()=>DIRTY,BRAND:()=>BRAND});var init_external=__esm(()=>{init_errors();init_parseUtil();init_typeAliases();init_util();init_types();init_ZodError()});var init_zod=__esm(()=>{init_external();init_external()});var SessionConfigSchema,TerminalConfigSchema,LoggingConfigSchema,ShellConfigSchema,ShortcutsConfigSchema,CodexConfigSchema,WorkerProfileSchema,OtelConfigSchema,OmniConfigSchema,BrainConfigSchema,CouncilPresetSchema,GenieConfigSchema;var init_genie_config=__esm(()=>{init_zod();SessionConfigSchema=exports_external.object({name:exports_external.string().default("genie"),defaultWindow:exports_external.string().default("shell"),autoCreate:exports_external.boolean().default(!0)}),TerminalConfigSchema=exports_external.object({execTimeout:exports_external.number().default(120000),readLines:exports_external.number().default(100),worktreeBase:exports_external.string().optional()}),LoggingConfigSchema=exports_external.object({tmuxDebug:exports_external.boolean().default(!1),verbose:exports_external.boolean().default(!1)}),ShellConfigSchema=exports_external.object({preference:exports_external.enum(["auto","zsh","bash","fish"]).default("auto")}),ShortcutsConfigSchema=exports_external.object({tmuxInstalled:exports_external.boolean().default(!1),shellInstalled:exports_external.boolean().default(!1)}),CodexConfigSchema=exports_external.object({configured:exports_external.boolean().default(!1)}),WorkerProfileSchema=exports_external.object({launcher:exports_external.preprocess((val)=>val==="claudio"?"claude":val,exports_external.literal("claude")),claudeArgs:exports_external.array(exports_external.string())}).passthrough(),OtelConfigSchema=exports_external.object({enabled:exports_external.boolean().default(!0),port:exports_external.number().optional(),logPrompts:exports_external.boolean().default(!0)}),OmniConfigSchema=exports_external.object({apiUrl:exports_external.string(),apiKey:exports_external.string().optional(),defaultInstanceId:exports_external.string().optional(),executor:exports_external.enum(["tmux","sdk"]).optional()}),BrainConfigSchema=exports_external.object({embedded:exports_external.boolean().default(!0),paths:exports_external.array(exports_external.string()).optional()}),CouncilPresetSchema=exports_external.object({left:exports_external.string(),right:exports_external.string(),skill:exports_external.string().default("council")}),GenieConfigSchema=exports_external.object({version:exports_external.number().default(2),session:SessionConfigSchema.default({}),terminal:TerminalConfigSchema.default({}),logging:LoggingConfigSchema.default({}),shell:ShellConfigSchema.default({}),shortcuts:ShortcutsConfigSchema.default({}),codex:CodexConfigSchema.optional(),installMethod:exports_external.enum(["source","npm","bun"]).optional(),updateChannel:exports_external.enum(["latest","next"]).default("latest"),setupComplete:exports_external.boolean().default(!1),lastSetupAt:exports_external.string().optional(),sourcePath:exports_external.string().optional(),workerProfiles:exports_external.record(exports_external.string(),WorkerProfileSchema).optional(),defaultWorkerProfile:exports_external.string().optional(),councilPresets:exports_external.record(exports_external.string(),CouncilPresetSchema).optional(),defaultCouncilPreset:exports_external.string().optional(),promptMode:exports_external.enum(["append","system"]).default("append"),autoMergeDev:exports_external.boolean().default(!1),defaultProject:exports_external.string().optional(),otel:OtelConfigSchema.optional(),omni:OmniConfigSchema.optional(),brain:BrainConfigSchema.default({})})});var exports_genie_config={};__export(exports_genie_config,{updateShortcutsConfig:()=>updateShortcutsConfig,saveGenieConfig:()=>saveGenieConfig,resetConfig:()=>resetConfig,markSetupComplete:()=>markSetupComplete,loadGenieConfigSync:()=>loadGenieConfigSync,loadGenieConfig:()=>loadGenieConfig,isSetupComplete:()=>isSetupComplete,getTerminalConfig:()=>getTerminalConfig,getGenieDir:()=>getGenieDir,getGenieConfigPath:()=>getGenieConfigPath,genieConfigExists:()=>genieConfigExists,contractPath:()=>contractPath});import{existsSync as existsSync3,mkdirSync as mkdirSync3,readFileSync as readFileSync2,writeFileSync as writeFileSync3}from"fs";import{homedir as homedir3}from"os";import{join as join3}from"path";function getGenieDir(){return GENIE_DIR}function getGenieConfigPath(){return GENIE_CONFIG_FILE}function genieConfigExists(){return existsSync3(GENIE_CONFIG_FILE)}function ensureGenieDir(){if(!existsSync3(GENIE_DIR))mkdirSync3(GENIE_DIR,{recursive:!0})}async function loadGenieConfig(){if(!existsSync3(GENIE_CONFIG_FILE))return GenieConfigSchema.parse({});try{let content=readFileSync2(GENIE_CONFIG_FILE,"utf-8"),data=JSON.parse(content);return GenieConfigSchema.parse(data)}catch(error){let message=error instanceof Error?error.message:String(error);return console.warn(`Warning: Invalid genie config, using defaults: ${message}`),GenieConfigSchema.parse({})}}async function saveGenieConfig(config){ensureGenieDir();try{let validated=GenieConfigSchema.parse(config),content=JSON.stringify(validated,null,2);writeFileSync3(GENIE_CONFIG_FILE,content,"utf-8")}catch(error){let message=error instanceof Error?error.message:String(error);throw Error(`Failed to save genie config: ${message}`)}}function getDefaultGenieConfig(){return GenieConfigSchema.parse({})}function loadGenieConfigSync(){if(!existsSync3(GENIE_CONFIG_FILE))return GenieConfigSchema.parse({});try{let content=readFileSync2(GENIE_CONFIG_FILE,"utf-8"),data=JSON.parse(content);return GenieConfigSchema.parse(data)}catch{return GenieConfigSchema.parse({})}}function contractPath(path){let home=homedir3();if(path.startsWith(`${home}/`))return`~${path.slice(home.length)}`;if(path===home)return"~";return path}function getTerminalConfig(){return loadGenieConfigSync().terminal}function isSetupComplete(){if(!genieConfigExists())return!1;return loadGenieConfigSync().setupComplete??!1}async function markSetupComplete(){let config=await loadGenieConfig();config.setupComplete=!0,config.lastSetupAt=new Date().toISOString(),await saveGenieConfig(config)}async function resetConfig(){let defaultConfig=getDefaultGenieConfig();await saveGenieConfig(defaultConfig)}async function updateShortcutsConfig(partial){let config=await loadGenieConfig();config.shortcuts={...config.shortcuts,...partial},await saveGenieConfig(config)}var GENIE_DIR,GENIE_CONFIG_FILE;var init_genie_config2=__esm(()=>{init_genie_config();GENIE_DIR=join3(homedir3(),".genie"),GENIE_CONFIG_FILE=join3(GENIE_DIR,"config.json")});var{$}=globalThis.Bun;async function checkCommand(cmd){try{let cmdPath=(await $`which ${cmd}`.quiet().text()).trim();if(!cmdPath)return{exists:!1};let version;try{let firstLine=(await $`${cmd} --version`.quiet().text()).split(`
31
- `)[0].trim(),versionMatch=firstLine.match(/(\d+\.[\d.]+[a-z0-9-]*)/i);version=versionMatch?versionMatch[1]:firstLine.slice(0,50)}catch{try{let firstLine=(await $`${cmd} -v`.quiet().text()).split(`
32
- `)[0].trim(),versionMatch=firstLine.match(/(\d+\.[\d.]+[a-z0-9-]*)/i);version=versionMatch?versionMatch[1]:firstLine.slice(0,50)}catch{}}return{exists:!0,version,path:cmdPath}}catch{return{exists:!1}}}var init_system_detect=()=>{};var exports_workspace={};__export(exports_workspace,{validateWorkspaceDefaults:()=>validateWorkspaceDefaults,scanAgents:()=>scanAgents,migrateWorkspaceConfig:()=>migrateWorkspaceConfig,getWorkspaceConfig:()=>getWorkspaceConfig,genieHome:()=>genieHome2,findWorkspace:()=>findWorkspace,AgentDefaultsSchema:()=>AgentDefaultsSchema});import{existsSync as existsSync4,mkdirSync as mkdirSync4,readFileSync as readFileSync3,readdirSync,realpathSync,writeFileSync as writeFileSync4}from"fs";import{homedir as homedir4,tmpdir as tmpdir2}from"os";import{dirname,join as join4,resolve,sep}from"path";function findWorkspace(cwd,opts){let startDir=resolve(cwd??process.cwd()),current=startDir,userHome=opts?.userHome??homedir4();while(!0){if(current!==userHome){let candidate=join4(current,WORKSPACE_MARKER);if(existsSync4(candidate)){saveWorkspaceRoot(current);let agent=detectAgent(startDir,current);return{root:current,agent:agent??void 0}}}let parent=dirname(current);if(parent===current)break;current=parent}let savedRoot=loadWorkspaceRoot();if(savedRoot&&savedRoot!==userHome&&existsSync4(join4(savedRoot,WORKSPACE_MARKER))){let agent=detectAgent(startDir,savedRoot);return{root:savedRoot,agent:agent??void 0}}return null}function genieHome2(){return process.env.GENIE_HOME??join4(homedir4(),".genie")}function isTempPath(root){try{let canonicalTmp=realpathSync(tmpdir2()),canonicalRoot=realpathSync(root);return canonicalRoot===canonicalTmp||canonicalRoot.startsWith(canonicalTmp+sep)}catch{return!0}}function saveWorkspaceRoot(root){if(isTempPath(root))return;try{let home=genieHome2(),configPath=join4(home,"config.json"),config=existsSync4(configPath)?JSON.parse(readFileSync3(configPath,"utf-8")):{};if(config.workspaceRoot===root)return;config.workspaceRoot=root,mkdirSync4(home,{recursive:!0}),writeFileSync4(configPath,`${JSON.stringify(config,null,2)}
33
- `,"utf-8")}catch{}}function clearWorkspaceRoot(){try{let configPath=join4(genieHome2(),"config.json");if(!existsSync4(configPath))return;let config=JSON.parse(readFileSync3(configPath,"utf-8"));if(config.workspaceRoot===void 0)return;config.workspaceRoot=void 0,writeFileSync4(configPath,`${JSON.stringify(config,null,2)}
34
- `,"utf-8")}catch{}}function loadWorkspaceRoot(){try{let configPath=join4(genieHome2(),"config.json");if(!existsSync4(configPath))return null;let config=JSON.parse(readFileSync3(configPath,"utf-8")),saved=typeof config.workspaceRoot==="string"?config.workspaceRoot:null;if(!saved)return null;if(!existsSync4(join4(saved,WORKSPACE_MARKER)))return clearWorkspaceRoot(),null;return saved}catch{return null}}function detectAgent(startDir,workspaceRoot){let agentsDir=join4(workspaceRoot,"agents"),relative=startDir.slice(agentsDir.length);if(!startDir.startsWith(agentsDir)||relative.length>0&&relative[0]!==sep)return null;let parts=relative.split(sep).filter(Boolean);if(parts.length===0)return null;let agentName=parts[0],agentsMd=join4(agentsDir,agentName,"AGENTS.md");if(existsSync4(agentsMd))return agentName;return null}function getWorkspaceConfig(root){let configPath=join4(root,WORKSPACE_MARKER),raw=readFileSync3(configPath,"utf-8"),parsed=JSON.parse(raw);return migrateWorkspaceConfig(parsed)}function validateWorkspaceDefaults(config){if(!config.agents?.defaults)return;let result2=AgentDefaultsSchema.safeParse(config.agents.defaults);if(!result2.success){let issues=result2.error.issues.map((i)=>` ${i.path.join(".")}: ${i.message}`).join(`
35
- `);throw Error(`Invalid agents.defaults in workspace.json:
36
- ${issues}`)}}function migrateWorkspaceConfig(raw){let config={...raw};if("tmuxSocket"in config&&typeof config.tmuxSocket==="string"&&!config.tmux)config.tmux={socket:config.tmuxSocket};if(!config.agents)config.agents={};if(!config.agents.defaults)config.agents.defaults={};if(!config.tmux)config.tmux={};if(!config.sdk)config.sdk={};return config}function scanAgents(root){let agentsDir=join4(root,"agents");if(!existsSync4(agentsDir))return[];try{let entries=readdirSync(agentsDir,{withFileTypes:!0}),names=[];for(let d of entries){if(!d.isDirectory()||!existsSync4(join4(agentsDir,d.name,"AGENTS.md")))continue;names.push(d.name),scanSubAgents(join4(agentsDir,d.name),d.name,names)}return names.sort()}catch{return[]}}function scanSubAgents(parentDir,parentName,out){let subDir=join4(parentDir,".genie","agents");if(!existsSync4(subDir))return;try{for(let sub of readdirSync(subDir,{withFileTypes:!0}))if(sub.isDirectory()&&existsSync4(join4(subDir,sub.name,"AGENTS.md")))out.push(`${parentName}/${sub.name}`)}catch{}}var WORKSPACE_MARKER=".genie/workspace.json",AgentDefaultsSchema;var init_workspace=__esm(()=>{init_zod();AgentDefaultsSchema=exports_external.object({model:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),color:exports_external.string().optional(),effort:exports_external.string().optional(),thinking:exports_external.string().optional(),permissionMode:exports_external.string().optional()}).strict()});function normalizeValue(v){if(v===void 0||v===null)return;if(v==="")return;if(v==="inherit")return;return v}function resolveField(agent,field,ctx){return resolveFieldWithSource(agent,field,ctx).value}function resolveFieldWithSource(agent,field,ctx){let agentVal=normalizeValue(agent[field]);if(agentVal!==void 0)return{value:agentVal,source:"explicit"};if(ctx.parent){let parentVal=normalizeValue(ctx.parent.fields[field]);if(parentVal!==void 0)return{value:parentVal,source:`parent:${ctx.parent.name}`}}if(ctx.workspaceDefaults){let wsVal=normalizeValue(ctx.workspaceDefaults[field]);if(wsVal!==void 0)return{value:wsVal,source:"workspace"}}return{value:BUILTIN_DEFAULTS[field],source:"built-in"}}function computeEffectiveDefaults(workspaceDefaults){if(!workspaceDefaults)return{...BUILTIN_DEFAULTS};let result2={...BUILTIN_DEFAULTS};for(let key of Object.keys(BUILTIN_DEFAULTS)){let wsVal=normalizeValue(workspaceDefaults[key]);if(wsVal!==void 0)result2[key]=wsVal}return result2}var BUILTIN_DEFAULTS,RESOLVED_FIELDS;var init_defaults=__esm(()=>{BUILTIN_DEFAULTS={model:"opus",promptMode:"append",color:"blue",effort:"high",thinking:"enabled",permissionMode:"auto"},RESOLVED_FIELDS=["model"]});import{writeFileSync as writeFileSync5}from"fs";import{join as join5}from"path";function renderAgentsTemplate(agentName,workspaceDefaults){let effective=computeEffectiveDefaults(workspaceDefaults),rendered=AGENTS_TEMPLATE;for(let key of Object.keys(BUILTIN_DEFAULTS))rendered=rendered.replace(`{{${key}}}`,effective[key]);if(agentName)rendered=rendered.replace(`---
37
- #`,`---
38
- name: ${agentName}
39
- #`);return rendered}function scaffoldAgentFiles(targetDir,agentName,workspaceDefaults){if(agentName==="genie")writeFileSync5(join5(targetDir,"SOUL.md"),GENIE_SOUL_TEMPLATE),writeFileSync5(join5(targetDir,"HEARTBEAT.md"),GENIE_HEARTBEAT_TEMPLATE),writeFileSync5(join5(targetDir,"AGENTS.md"),GENIE_AGENTS_TEMPLATE);else writeFileSync5(join5(targetDir,"SOUL.md"),SOUL_TEMPLATE),writeFileSync5(join5(targetDir,"HEARTBEAT.md"),HEARTBEAT_TEMPLATE),writeFileSync5(join5(targetDir,"AGENTS.md"),renderAgentsTemplate(agentName,workspaceDefaults))}var SOUL_TEMPLATE=`# Soul
40
-
41
- You are an AI assistant. Define your role, personality, and approach here.
42
-
43
- Replace this with your agent's identity \u2014 who they are, how they communicate, and what they care about.
44
- `,HEARTBEAT_TEMPLATE=`# Heartbeat
45
-
46
- Run this checklist on every iteration. Exit early if nothing actionable.
47
-
48
- ## Checklist
49
-
50
- ### 1. Check Assignments
51
- Review your task queue. What's assigned to you? Prioritize by urgency and impact.
52
-
53
- ### 2. Do Work
54
- Execute on your current tasks. Focus on the highest-priority item first.
55
-
56
- ### 3. Report Progress
57
- Update status on completed or blocked items. Keep it factual.
58
-
59
- ### 4. Exit If Nothing Actionable
60
- If all work is done and no new tasks exist \u2014 exit. Don't create busywork.
61
- `,AGENTS_TEMPLATE=`---
62
- # \u2500\u2500 Freeform (no default, fill in as needed) \u2500\u2500
63
- # description: Describe what this agent does.
64
-
65
- # \u2500\u2500 Inherited defaults (effective values shown, uncomment to override) \u2500\u2500
66
- # model: {{model}}
67
- # promptMode: {{promptMode}}
68
- # color: {{color}}
69
- # effort: {{effort}}
70
- # thinking: {{thinking}}
71
- # permissionMode: {{permissionMode}}
72
- ---
73
-
74
- @HEARTBEAT.md
75
-
76
- <mission>
77
- Define your agent's mission here. What is their primary goal? What do they own?
78
- </mission>
79
-
80
- <principles>
81
- - **Clarity over ambiguity.** Be specific about expectations and outcomes.
82
- - **Quality over speed.** Do it right the first time.
83
- </principles>
84
-
85
- <constraints>
86
- - List any hard constraints or rules this agent must follow.
87
- </constraints>
88
- `,GENIE_AGENTS_TEMPLATE=`---
89
- name: genie
90
- description: Workspace concierge and orchestrator \u2014 guides new users, manages agents, runs pipelines.
91
- model: opus
92
- promptMode: append
93
- color: cyan
94
- effort: high
95
- thinking: enabled
96
- permissionMode: auto
97
- ---
98
-
99
- @HEARTBEAT.md
100
-
101
- <mission>
102
- You are the **genie specialist** \u2014 the default agent for this workspace.
103
-
104
- Your role adapts based on workspace maturity:
105
-
106
- **Concierge mode** (new or empty workspace):
107
- - Guide users through first steps: creating agents, shaping wishes, running pipelines
108
- - Explain genie concepts (agents, wishes, skills, heartbeats) when asked
109
- - Suggest next actions based on workspace state
110
-
111
- **Orchestrator mode** (mature workspace with agents):
112
- - Route work to the right agents via \`genie spawn\` and \`genie team create\`
113
- - Monitor wish progress with \`genie status\`
114
- - Coordinate multi-agent workflows (brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship)
115
- - Analyze existing agents and propose improvements
116
- </mission>
117
-
118
- <principles>
119
- - **Meet users where they are.** New users need guidance; experienced users need efficiency.
120
- - **Workspace state drives behavior.** Check what exists before suggesting what to do.
121
- - **Propose, never modify.** When analyzing agents, show proposals \u2014 let the user confirm.
122
- - **Pipeline over ad-hoc.** Encourage the brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship flow.
123
- </principles>
124
-
125
- <constraints>
126
- - Never modify existing agent files without explicit user confirmation.
127
- - Never auto-register agents \u2014 all registration flows through interactive prompts.
128
- - When analyzing agents from other systems, compare against genie conventions but respect existing structures.
129
- </constraints>
130
- `,GENIE_SOUL_TEMPLATE,GENIE_HEARTBEAT_TEMPLATE,STALE_GENIE_AGENTS_MD_MARKER="Define your agent's mission here.",STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX;var init_templates=__esm(()=>{init_defaults();GENIE_SOUL_TEMPLATE=["# Genie Specialist \u2014 Soul","","You are the genie workspace specialist. You guide users through the genie workflow and orchestrate agents.","","## The Genie Pipeline","","Every idea follows this pipeline:","","```","brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship","```","","1. **Brainstorm** \u2014 Explore the idea. Use `/brainstorm` to think through scope, tradeoffs, and approach.","2. **Wish** \u2014 Structure the idea into an actionable plan with acceptance criteria, execution groups, and validation commands. Use `/wish` to create one.","3. **Work** \u2014 Execute the wish. Use `/work` to dispatch engineers per execution group.","4. **Review** \u2014 Validate the work against wish criteria. Use `/review` to check compliance.","5. **Ship** \u2014 Merge, release, deploy. The pipeline ensures quality before shipping.","","## Genie Commands Reference","","### Agent Management","```bash","genie spawn <name> # Start an agent","genie kill <name> # Force kill an agent","genie stop <name> # Stop (preserves session)","genie resume [name] # Resume a suspended agent","genie ls # List agents with status","genie log [agent] # Unified observability feed","genie read <name> # Read terminal output","genie history <name> # Compressed session history","genie answer <name> <choice> # Answer a prompt for an agent","```","","### Agent Communication","```bash","genie agent send '<msg>' --to <name> # Direct message","genie agent send '<msg>' --broadcast # Team broadcast","genie agent inbox # View inbox","genie agent brief --team <name> # Cold-start summary","```","","### Team Orchestration","```bash","genie team create <name> --repo <path> --wish <slug> # Launch autonomous team","genie team hire <name> --team <team> # Add to team","genie team fire <name> --team <team> # Remove from team","genie team list # List teams","genie team disband <name> # Disband team","```","","### Task & Wish Management","```bash","genie task create --title 'x' # Create task","genie task list # List tasks","genie task status <slug> # Wish group status","genie task done <ref> # Mark done","genie task board # Planning board","```","","### Workspace","```bash","genie init # Initialize workspace","genie init agent <name> # Scaffold new agent","genie serve # Start infrastructure","genie doctor # Diagnostic checks","```","","## Concierge \u2192 Orchestrator Transition","","Detect workspace maturity and adapt:","","**Concierge mode** activates when:","- Workspace has 0-1 agents (just the default genie agent)","- No wishes exist yet","- User appears new to genie","","In concierge mode:","- Explain concepts with examples","- Suggest creating a first agent or brainstorming a first wish","- Walk through the pipeline step by step","","**Orchestrator mode** activates when:","- Workspace has 2+ agents","- Wishes exist with execution groups","- User gives direct commands","","In orchestrator mode:","- Route work to the right agents","- Monitor progress across teams","- Summarize status concisely","- Suggest next pipeline steps based on current state","","## Agent Analysis Capability","","When invoked in a workspace with existing agents (from genie or other systems), analyze their setup:","","### Analysis Process","1. List all directories under `agents/` (and any discovered via tree scan)","2. For each agent directory, check:"," - Has `AGENTS.md`? (identity file with frontmatter)"," - Has `SOUL.md`? (personality and knowledge)"," - Has `HEARTBEAT.md`? (autonomous checklist)"," - Has `.claude/settings.local.json`? (Claude Code config)"," - Frontmatter fields present vs. missing","3. Compare against genie conventions:"," - Missing files \u2192 propose creation with templates"," - Incomplete frontmatter \u2192 propose mini-wizard"," - Non-standard structure \u2192 explain conventions, offer migration","4. Present proposals as a checklist \u2014 never auto-modify",""].join(`
131
- `),GENIE_HEARTBEAT_TEMPLATE=["# Heartbeat \u2014 Genie Specialist","","Run this checklist on every iteration. Exit early if nothing actionable.","","## Checklist","","### 1. Workspace State Check","Verify workspace health before doing anything else.","- Is `genie serve` running? If not, suggest starting it.","- Are there registered agents? List them with `genie ls`.","- Any agents in error/crashed state? Flag for user attention.","","### 2. Pending Agents Check","Look for agents waiting to be initialized.","- Check `.genie/pending-agents.json` for queued discoveries.","- If pending agents exist, notify the user and offer to initialize them.","- If new `AGENTS.md` files appeared outside `agents/`, flag for import.","","### 3. Wish Status Check","Review active work across the workspace.","- Check `genie task board` for in-progress wishes.","- For each active wish, check execution group progress.","- Flag blocked groups or stale tasks (no progress in 30+ minutes).","- Summarize: X wishes active, Y groups complete, Z blocked.","","### 4. Generate Suggestions","Based on workspace state, suggest the next most valuable action:",'- **Empty workspace** \u2192 "Start with /brainstorm to explore an idea"','- **Has brainstorm, no wish** \u2192 "Ready to structure this? Run /wish"','- **Has wish, no workers** \u2192 "Dispatch workers with /work"','- **Work complete** \u2192 "Time to review: /review"','- **Review passed** \u2192 "Ship it \u2014 merge the PR"','- **Agents from other systems** \u2192 "I can analyze your agents \u2014 want a compatibility report?"',"","### 5. Exit If Nothing Actionable","If workspace is healthy, no pending agents, no active wishes, and no suggestions \u2014 exit.","Don't create busywork. The user will invoke you when needed.",""].join(`
132
- `);STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX=/^model\s*:/m});import{existsSync as existsSync5,readFileSync as readFileSync4,realpathSync as realpathSync2}from"fs";import{dirname as dirname2,join as join6}from"path";async function runSilent(cmd,args){try{let proc=Bun.spawn([cmd,...args],{stdout:"pipe",stderr:"ignore",stdin:"ignore"}),text=await new Response(proc.stdout).text();if(await proc.exited!==0)return null;let trimmed=text.trim();return trimmed.length>0?trimmed:null}catch{return null}}function findPackageJson(realBinPath){let dir=dirname2(realBinPath);for(let i=0;i<8;i++){let candidate=join6(dir,"package.json");if(existsSync5(candidate))try{let parsed=JSON.parse(readFileSync4(candidate,"utf-8"));if(parsed.name===PKG_NAME&&typeof parsed.version==="string")return{path:candidate,version:parsed.version}}catch{}let parent=dirname2(dir);if(parent===dir)break;dir=parent}return null}function safeRealpath(p){try{return realpathSync2(p)}catch{return p}}async function probeOne(installer,binDir){if(!binDir)return null;let binPath=join6(binDir,"genie");if(!existsSync5(binPath))return null;let real=safeRealpath(binPath),pkg=findPackageJson(real);if(!pkg)return null;return{installer,binPath,packageJsonPath:pkg.path,version:pkg.version}}async function probeInstallers(){let entries=[],npmRoot=await runSilent("npm",["root","-g"]),npmBin=npmRoot?join6(dirname2(npmRoot),"bin"):null,bunBin=await runSilent("bun",["pm","-g","bin"]),pnpmRoot=await runSilent("pnpm",["root","-g"]),pnpmBin=process.env.PNPM_HOME??(pnpmRoot?join6(dirname2(pnpmRoot),"bin"):null),yarnBin=await runSilent("yarn",["global","bin"]),probes=[["npm",npmBin],["bun",bunBin],["pnpm",pnpmBin],["yarn",yarnBin]];for(let[id,dir]of probes){let entry=await probeOne(id,dir);if(entry)entries.push(entry)}return entries}async function probeResolvedBinary(){let path=await runSilent("which",["genie"]);if(!path)return null;return{path,realPath:safeRealpath(path)}}function compareVersions(a,b){let pa=a.split(".").map((s)=>Number.parseInt(s,10)),pb=b.split(".").map((s)=>Number.parseInt(s,10)),len=Math.max(pa.length,pb.length);for(let i=0;i<len;i++){let na=Number.isFinite(pa[i])?pa[i]:0,nb=Number.isFinite(pb[i])?pb[i]:0;if(na!==nb)return na-nb}return 0}function uninstallHint(installer){switch(installer){case"npm":return`npm uninstall -g ${PKG_NAME}`;case"bun":return`bun remove -g ${PKG_NAME}`;case"pnpm":return`pnpm remove -g ${PKG_NAME}`;case"yarn":return`yarn global remove ${PKG_NAME}`}}function classifyInstallerResolution(state){let{resolved,installers}=state;if(!resolved)return[{name:"Resolved binary",status:"warn",message:"`which genie` returned nothing",suggestion:"Add the installer bin dir to PATH, or reinstall with: npm install -g @automagik/genie"}];let owner=installers.find((e)=>safeRealpath(e.binPath)===resolved.realPath)??null,rows=[];if(!owner){rows.push({name:"Resolved binary",status:"warn",message:`${resolved.path} (not owned by a detected installer)`,suggestion:"Likely a dev checkout or manual symlink. Package-manager updates (`npm i -g`, `bun add -g`) will not replace this binary."});for(let entry of installers)rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version} at ${entry.binPath}`});return rows}rows.push({name:"Resolved binary",status:"pass",message:`${resolved.path} (${owner.installer} @ ${owner.version})`});let others=installers.filter((e)=>e.installer!==owner.installer);if(others.length===0)return rows;let newest=[...installers].sort((a,b)=>compareVersions(b.version,a.version))[0],resolverIsStale=compareVersions(owner.version,newest.version)<0;for(let entry of others){let stale=compareVersions(entry.version,owner.version)<0;rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version}${stale?" (stale)":""} at ${entry.binPath}`,suggestion:`Remove with: ${uninstallHint(entry.installer)}`})}if(resolverIsStale)rows.push({name:"Update path",status:"warn",message:`${owner.installer}@${owner.version} is stale; ${newest.installer}@${newest.version} is newer but shadowed`,suggestion:`Either reinstall via the resolver (${uninstallHint(owner.installer).replace("uninstall","install").replace("remove","add")}) or remove the resolver so ${newest.installer} takes over.`});return rows}async function collectInstallerResolution(){let[resolved,installers]=await Promise.all([probeResolvedBinary(),probeInstallers()]);return classifyInstallerResolution({resolved,installers})}var PKG_NAME="@automagik/genie";var init_installer_resolution=()=>{};import{readdirSync as readdirSync2}from"fs";import{dirname as dirname3,join as join7}from"path";function getMigrationsDir(){return join7(import.meta.dir,"..","db","migrations")}function getPackageRootMigrationsDir(){return join7(dirname3(import.meta.dir),"src","db","migrations")}async function loadMigrationFiles(){let candidates=[getMigrationsDir(),getPackageRootMigrationsDir()];for(let dir of candidates)try{let files=readdirSync2(dir).filter((f)=>f.endsWith(".sql")).sort();if(files.length===0)continue;let migrations=[];for(let file of files){let content=await Bun.file(join7(dir,file)).text();migrations.push({name:file.replace(/\.sql$/,""),sql:content})}return migrations}catch{}return[]}async function ensureMigrationsTable(sql){await sql`
25
+ `,"utf-8")}function contractClaudePath(path){let home=homedir();if(path.startsWith(`${home}/`))return`~${path.slice(home.length)}`;if(path===home)return"~";return path}var CLAUDE_DIR,CLAUDE_HOOKS_DIR,CLAUDE_SETTINGS_FILE,GENIE_HOOK_SCRIPT_NAME="genie-bash-hook.sh";var init_claude_settings=__esm(()=>{CLAUDE_DIR=join(homedir(),".claude"),CLAUDE_HOOKS_DIR=join(CLAUDE_DIR,"hooks"),CLAUDE_SETTINGS_FILE=join(CLAUDE_DIR,"settings.json")});import{readdirSync}from"fs";import{dirname,join as join2}from"path";function getMigrationsDir(){return join2(import.meta.dir,"..","db","migrations")}function getPackageRootMigrationsDir(){return join2(dirname(import.meta.dir),"src","db","migrations")}async function loadMigrationFiles(){let candidates=[getMigrationsDir(),getPackageRootMigrationsDir()];for(let dir of candidates)try{let files=readdirSync(dir).filter((f)=>f.endsWith(".sql")).sort();if(files.length===0)continue;let migrations=[];for(let file of files){let content=await Bun.file(join2(dir,file)).text();migrations.push({name:file.replace(/\.sql$/,""),sql:content})}return migrations}catch{}return[]}async function ensureMigrationsTable(sql){await sql`
133
26
  CREATE TABLE IF NOT EXISTS _genie_migrations (
134
27
  id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
135
28
  name TEXT UNIQUE NOT NULL,
@@ -255,7 +148,7 @@ Your role adapts based on workspace maturity:
255
148
  COUNT(*) FILTER (WHERE entity_type = 'otel_tool')::int AS tool_calls,
256
149
  COUNT(*) FILTER (WHERE entity_type = 'otel_api')::int AS api_requests
257
150
  FROM audit_events
258
- WHERE created_at >= $1::timestamptz`,[sinceTs]))[0]??{};return{agents_spawned:r.agents_spawned??0,tasks_moved:r.tasks_moved??0,total_cost:r.total_cost??0,error_count:r.error_count??0,total_events:r.total_events??0,tool_calls:r.tool_calls??0,api_requests:r.api_requests??0}}function generateTraceId(){return crypto.randomUUID()}var DEFAULT_TIMELINE_LIMIT=200,MAX_TIMELINE_LIMIT=2000,DEFAULT_TIMELINE_SINCE_MS=86400000;var init_audit=__esm(()=>{init_db()});import{readFile,unlink,writeFile}from"fs/promises";function lockPath(filePath){return`${filePath}.lock`}function isPidAlive(pid){try{return process.kill(pid,0),!0}catch{return!1}}async function acquireLock(path){let lock=lockPath(path),deadline=Date.now()+LOCK_TIMEOUT_MS;while(Date.now()<deadline)try{await writeFile(lock,String(process.pid),{flag:"wx"});return}catch{try{let content=await readFile(lock,"utf-8"),holderPid=Number.parseInt(content.trim(),10);if(!Number.isNaN(holderPid)&&!isPidAlive(holderPid)){try{await unlink(lock)}catch{}continue}}catch{continue}let jitter=Math.floor(Math.random()*LOCK_POLL_MS);await new Promise((r)=>setTimeout(r,LOCK_POLL_MS+jitter))}console.warn(`[lockfile] Force-acquiring stale lock: ${lock}`),await writeFile(lock,String(process.pid))}async function releaseLock(path){try{await unlink(lockPath(path))}catch{}}var LOCK_TIMEOUT_MS=5000,LOCK_POLL_MS=50;var init_lockfile=()=>{};var exports_types={};__export(exports_types,{isBlockingEvent:()=>isBlockingEvent,DISPATCHED_EVENT_MATCHERS:()=>DISPATCHED_EVENT_MATCHERS,DISPATCHED_EVENTS:()=>DISPATCHED_EVENTS,CODEX_DISPATCHED_EVENT_MATCHERS:()=>CODEX_DISPATCHED_EVENT_MATCHERS});function isBlockingEvent(event){return BLOCKING_EVENTS.has(event)}var DISPATCHED_EVENT_MATCHERS,CODEX_DISPATCHED_EVENT_MATCHERS,DISPATCHED_EVENTS,BLOCKING_EVENTS;var init_types2=__esm(()=>{DISPATCHED_EVENT_MATCHERS={PreToolUse:"*",PostToolUse:"SendMessage"},CODEX_DISPATCHED_EVENT_MATCHERS={PreToolUse:"*",PostToolUse:"SendMessage",UserPromptSubmit:"*",Stop:"*"},DISPATCHED_EVENTS=Object.keys(DISPATCHED_EVENT_MATCHERS),BLOCKING_EVENTS=new Set(["PreToolUse","UserPromptSubmit","TeammateIdle","TaskCompleted","PermissionRequest"])});var exports_inject={};__export(exports_inject,{isTeamHooked:()=>isTeamHooked,injectTeamHooks:()=>injectTeamHooks,buildDispatchCommand:()=>buildDispatchCommand});import{existsSync as existsSync6}from"fs";import{mkdir,readFile as readFile2,writeFile as writeFile2}from"fs/promises";import{homedir as homedir5}from"os";import{join as join8}from"path";import{fileURLToPath}from"url";function escapeShellArg(arg){return`'${arg.replace(/'/g,"'\\''")}'`}function compiledBinaryCandidates(){let candidates=[];if(process.env.GENIE_HOOK_BIN)candidates.push(process.env.GENIE_HOOK_BIN);let home=process.env.GENIE_HOME??join8(homedir5(),".genie");candidates.push(join8(home,"bin","genie-hook"));try{let repoBin=fileURLToPath(new URL("../../dist/genie-hook",import.meta.url));candidates.push(repoBin)}catch{}return candidates}function buildDispatchCommand(){for(let candidate of compiledBinaryCandidates())if(existsSync6(candidate))return escapeShellArg(candidate);let entrypoint=fileURLToPath(new URL("../genie.ts",import.meta.url));if(!existsSync6(entrypoint))return"genie hook dispatch";let bun=process.execPath||"bun";return`${escapeShellArg(bun)} run ${escapeShellArg(entrypoint)} hook dispatch`}function isGenieDispatchCommand(command){return typeof command==="string"&&/(?:^|\s)hook\s+dispatch(?:\s|$)/.test(command)}function claudeConfigDir(){return process.env.CLAUDE_CONFIG_DIR??join8(homedir5(),".claude")}function teamSettingsPath(teamName){let sanitized=teamName.replace(/[^a-zA-Z0-9]/g,"-").toLowerCase();return join8(claudeConfigDir(),"teams",sanitized,"settings.json")}function buildHooksConfig(){let hooks={},dispatchCommand=buildDispatchCommand();for(let[event,matcher]of Object.entries(DISPATCHED_EVENT_MATCHERS))hooks[event]=[{matcher,hooks:[{type:"command",command:dispatchCommand,timeout:DISPATCH_TIMEOUT}]}];return hooks}async function readSettings(settingsPath){if(!existsSync6(settingsPath))return{};try{return JSON.parse(await readFile2(settingsPath,"utf-8"))}catch{return{}}}function allEventsAlreadyInjected(existingHooks,hooksConfig){return DISPATCHED_EVENTS.every((event)=>{let existing=existingHooks[event],desiredCommand=hooksConfig[event][0].hooks[0].command,desiredMatcher=hooksConfig[event][0].matcher;return existing?.some((m)=>m.matcher===desiredMatcher&&m.hooks?.some((h)=>h.command===desiredCommand))})}function hasNoObsoleteGenieEntries(existingHooks){return Object.keys(existingHooks).every((event)=>{if(DISPATCHED_EVENTS.includes(event))return!0;return!existingHooks[event]?.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)))})}function pruneObsoleteGenieEntries(mergedHooks){for(let event of Object.keys(mergedHooks)){if(DISPATCHED_EVENTS.includes(event))continue;let cleaned=(mergedHooks[event]??[]).map((matcher)=>({...matcher,hooks:matcher.hooks?.filter((hook)=>!isGenieDispatchCommand(hook.command))})).filter((matcher)=>(matcher.hooks?.length??0)>0);if(cleaned.length===0)delete mergedHooks[event];else mergedHooks[event]=cleaned}}function refreshMatcherEntries(entries,genieEntry){return entries.map((matcher)=>{let hasGenieHook=matcher.hooks?.some((h)=>isGenieDispatchCommand(h.command));return{...matcher,matcher:hasGenieHook?genieEntry.matcher:matcher.matcher,hooks:matcher.hooks?.map((hook)=>isGenieDispatchCommand(hook.command)?{...hook,command:genieEntry.hooks[0].command,timeout:DISPATCH_TIMEOUT}:hook)}})}function upsertGenieEntry(mergedHooks,event,genieEntry){let existingEntries=refreshMatcherEntries(mergedHooks[event]??[],genieEntry),alreadyPresent=existingEntries.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)));mergedHooks[event]=alreadyPresent?existingEntries:[...existingEntries,genieEntry]}async function injectIntoFile(settingsPath){let settings=await readSettings(settingsPath),hooksConfig=buildHooksConfig(),existingHooks=settings.hooks;if(existingHooks&&allEventsAlreadyInjected(existingHooks,hooksConfig)&&hasNoObsoleteGenieEntries(existingHooks))return!1;let mergedHooks=existingHooks?{...existingHooks}:{};pruneObsoleteGenieEntries(mergedHooks);for(let event of DISPATCHED_EVENTS)upsertGenieEntry(mergedHooks,event,hooksConfig[event][0]);settings.hooks=mergedHooks;let dir=join8(settingsPath,"..");return await mkdir(dir,{recursive:!0}),await writeFile2(settingsPath,JSON.stringify(settings,null,2)),!0}async function injectTeamHooks(teamName){let path=teamSettingsPath(teamName);return injectIntoFile(path)}async function isTeamHooked(teamName){let path=teamSettingsPath(teamName);if(!existsSync6(path))return!1;try{let content=await readFile2(path,"utf-8"),hooks=JSON.parse(content).hooks;if(!hooks)return!1;return DISPATCHED_EVENTS.every((event)=>{return hooks[event]?.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)))})}catch{return!1}}var DISPATCH_TIMEOUT=15;var init_inject=__esm(()=>{init_types2()});var exports_js_yaml={};__export(exports_js_yaml,{types:()=>types2,safeLoadAll:()=>safeLoadAll,safeLoad:()=>safeLoad,safeDump:()=>safeDump,loadAll:()=>loadAll,load:()=>load,dump:()=>dump,default:()=>jsYaml,YAMLException:()=>YAMLException,Type:()=>Type,Schema:()=>Schema,JSON_SCHEMA:()=>JSON_SCHEMA,FAILSAFE_SCHEMA:()=>FAILSAFE_SCHEMA,DEFAULT_SCHEMA:()=>DEFAULT_SCHEMA,CORE_SCHEMA:()=>CORE_SCHEMA});function isNothing(subject){return typeof subject>"u"||subject===null}function isObject(subject){return typeof subject==="object"&&subject!==null}function toArray(sequence){if(Array.isArray(sequence))return sequence;else if(isNothing(sequence))return[];return[sequence]}function extend(target,source){var index,length,key,sourceKeys;if(source){sourceKeys=Object.keys(source);for(index=0,length=sourceKeys.length;index<length;index+=1)key=sourceKeys[index],target[key]=source[key]}return target}function repeat(string,count){var result2="",cycle;for(cycle=0;cycle<count;cycle+=1)result2+=string;return result2}function isNegativeZero(number){return number===0&&Number.NEGATIVE_INFINITY===1/number}function formatError(exception,compact){var where="",message=exception.reason||"(unknown reason)";if(!exception.mark)return message;if(exception.mark.name)where+='in "'+exception.mark.name+'" ';if(where+="("+(exception.mark.line+1)+":"+(exception.mark.column+1)+")",!compact&&exception.mark.snippet)where+=`
151
+ WHERE created_at >= $1::timestamptz`,[sinceTs]))[0]??{};return{agents_spawned:r.agents_spawned??0,tasks_moved:r.tasks_moved??0,total_cost:r.total_cost??0,error_count:r.error_count??0,total_events:r.total_events??0,tool_calls:r.tool_calls??0,api_requests:r.api_requests??0}}function generateTraceId(){return crypto.randomUUID()}var DEFAULT_TIMELINE_LIMIT=200,MAX_TIMELINE_LIMIT=2000,DEFAULT_TIMELINE_SINCE_MS=86400000;var init_audit=__esm(()=>{init_db()});import{readFile,unlink,writeFile}from"fs/promises";function lockPath(filePath){return`${filePath}.lock`}function isPidAlive(pid){try{return process.kill(pid,0),!0}catch{return!1}}async function acquireLock(path){let lock=lockPath(path),deadline=Date.now()+LOCK_TIMEOUT_MS;while(Date.now()<deadline)try{await writeFile(lock,String(process.pid),{flag:"wx"});return}catch{try{let content=await readFile(lock,"utf-8"),holderPid=Number.parseInt(content.trim(),10);if(!Number.isNaN(holderPid)&&!isPidAlive(holderPid)){try{await unlink(lock)}catch{}continue}}catch{continue}let jitter=Math.floor(Math.random()*LOCK_POLL_MS);await new Promise((r)=>setTimeout(r,LOCK_POLL_MS+jitter))}console.warn(`[lockfile] Force-acquiring stale lock: ${lock}`),await writeFile(lock,String(process.pid))}async function releaseLock(path){try{await unlink(lockPath(path))}catch{}}var LOCK_TIMEOUT_MS=5000,LOCK_POLL_MS=50;var init_lockfile=()=>{};var util,objectUtil,ZodParsedType,getParsedType=(data)=>{switch(typeof data){case"undefined":return ZodParsedType.undefined;case"string":return ZodParsedType.string;case"number":return Number.isNaN(data)?ZodParsedType.nan:ZodParsedType.number;case"boolean":return ZodParsedType.boolean;case"function":return ZodParsedType.function;case"bigint":return ZodParsedType.bigint;case"symbol":return ZodParsedType.symbol;case"object":if(Array.isArray(data))return ZodParsedType.array;if(data===null)return ZodParsedType.null;if(data.then&&typeof data.then==="function"&&data.catch&&typeof data.catch==="function")return ZodParsedType.promise;if(typeof Map<"u"&&data instanceof Map)return ZodParsedType.map;if(typeof Set<"u"&&data instanceof Set)return ZodParsedType.set;if(typeof Date<"u"&&data instanceof Date)return ZodParsedType.date;return ZodParsedType.object;default:return ZodParsedType.unknown}};var init_util=__esm(()=>{(function(util2){util2.assertEqual=(_)=>{};function assertIs(_arg){}util2.assertIs=assertIs;function assertNever(_x){throw Error()}util2.assertNever=assertNever,util2.arrayToEnum=(items)=>{let obj={};for(let item of items)obj[item]=item;return obj},util2.getValidEnumValues=(obj)=>{let validKeys=util2.objectKeys(obj).filter((k)=>typeof obj[obj[k]]!=="number"),filtered={};for(let k of validKeys)filtered[k]=obj[k];return util2.objectValues(filtered)},util2.objectValues=(obj)=>{return util2.objectKeys(obj).map(function(e){return obj[e]})},util2.objectKeys=typeof Object.keys==="function"?(obj)=>Object.keys(obj):(object)=>{let keys=[];for(let key in object)if(Object.prototype.hasOwnProperty.call(object,key))keys.push(key);return keys},util2.find=(arr,checker)=>{for(let item of arr)if(checker(item))return item;return},util2.isInteger=typeof Number.isInteger==="function"?(val)=>Number.isInteger(val):(val)=>typeof val==="number"&&Number.isFinite(val)&&Math.floor(val)===val;function joinValues(array,separator=" | "){return array.map((val)=>typeof val==="string"?`'${val}'`:val).join(separator)}util2.joinValues=joinValues,util2.jsonStringifyReplacer=(_,value)=>{if(typeof value==="bigint")return value.toString();return value}})(util||(util={}));(function(objectUtil2){objectUtil2.mergeShapes=(first,second)=>{return{...first,...second}}})(objectUtil||(objectUtil={}));ZodParsedType=util.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"])});var ZodIssueCode,quotelessJson=(obj)=>{return JSON.stringify(obj,null,2).replace(/"([^"]+)":/g,"$1:")},ZodError;var init_ZodError=__esm(()=>{init_util();ZodIssueCode=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"]);ZodError=class ZodError extends Error{get errors(){return this.issues}constructor(issues){super();this.issues=[],this.addIssue=(sub)=>{this.issues=[...this.issues,sub]},this.addIssues=(subs=[])=>{this.issues=[...this.issues,...subs]};let actualProto=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,actualProto);else this.__proto__=actualProto;this.name="ZodError",this.issues=issues}format(_mapper){let mapper=_mapper||function(issue){return issue.message},fieldErrors={_errors:[]},processError=(error)=>{for(let issue of error.issues)if(issue.code==="invalid_union")issue.unionErrors.map(processError);else if(issue.code==="invalid_return_type")processError(issue.returnTypeError);else if(issue.code==="invalid_arguments")processError(issue.argumentsError);else if(issue.path.length===0)fieldErrors._errors.push(mapper(issue));else{let curr=fieldErrors,i=0;while(i<issue.path.length){let el=issue.path[i];if(i!==issue.path.length-1)curr[el]=curr[el]||{_errors:[]};else curr[el]=curr[el]||{_errors:[]},curr[el]._errors.push(mapper(issue));curr=curr[el],i++}}};return processError(this),fieldErrors}static assert(value){if(!(value instanceof ZodError))throw Error(`Not a ZodError: ${value}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(mapper=(issue)=>issue.message){let fieldErrors={},formErrors=[];for(let sub of this.issues)if(sub.path.length>0){let firstEl=sub.path[0];fieldErrors[firstEl]=fieldErrors[firstEl]||[],fieldErrors[firstEl].push(mapper(sub))}else formErrors.push(mapper(sub));return{formErrors,fieldErrors}}get formErrors(){return this.flatten()}};ZodError.create=(issues)=>{return new ZodError(issues)}});var errorMap=(issue,_ctx)=>{let message;switch(issue.code){case ZodIssueCode.invalid_type:if(issue.received===ZodParsedType.undefined)message="Required";else message=`Expected ${issue.expected}, received ${issue.received}`;break;case ZodIssueCode.invalid_literal:message=`Invalid literal value, expected ${JSON.stringify(issue.expected,util.jsonStringifyReplacer)}`;break;case ZodIssueCode.unrecognized_keys:message=`Unrecognized key(s) in object: ${util.joinValues(issue.keys,", ")}`;break;case ZodIssueCode.invalid_union:message="Invalid input";break;case ZodIssueCode.invalid_union_discriminator:message=`Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;break;case ZodIssueCode.invalid_enum_value:message=`Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;break;case ZodIssueCode.invalid_arguments:message="Invalid function arguments";break;case ZodIssueCode.invalid_return_type:message="Invalid function return type";break;case ZodIssueCode.invalid_date:message="Invalid date";break;case ZodIssueCode.invalid_string:if(typeof issue.validation==="object")if("includes"in issue.validation){if(message=`Invalid input: must include "${issue.validation.includes}"`,typeof issue.validation.position==="number")message=`${message} at one or more positions greater than or equal to ${issue.validation.position}`}else if("startsWith"in issue.validation)message=`Invalid input: must start with "${issue.validation.startsWith}"`;else if("endsWith"in issue.validation)message=`Invalid input: must end with "${issue.validation.endsWith}"`;else util.assertNever(issue.validation);else if(issue.validation!=="regex")message=`Invalid ${issue.validation}`;else message="Invalid";break;case ZodIssueCode.too_small:if(issue.type==="array")message=`Array must contain ${issue.exact?"exactly":issue.inclusive?"at least":"more than"} ${issue.minimum} element(s)`;else if(issue.type==="string")message=`String must contain ${issue.exact?"exactly":issue.inclusive?"at least":"over"} ${issue.minimum} character(s)`;else if(issue.type==="number")message=`Number must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${issue.minimum}`;else if(issue.type==="bigint")message=`Number must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${issue.minimum}`;else if(issue.type==="date")message=`Date must be ${issue.exact?"exactly equal to ":issue.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(issue.minimum))}`;else message="Invalid input";break;case ZodIssueCode.too_big:if(issue.type==="array")message=`Array must contain ${issue.exact?"exactly":issue.inclusive?"at most":"less than"} ${issue.maximum} element(s)`;else if(issue.type==="string")message=`String must contain ${issue.exact?"exactly":issue.inclusive?"at most":"under"} ${issue.maximum} character(s)`;else if(issue.type==="number")message=`Number must be ${issue.exact?"exactly":issue.inclusive?"less than or equal to":"less than"} ${issue.maximum}`;else if(issue.type==="bigint")message=`BigInt must be ${issue.exact?"exactly":issue.inclusive?"less than or equal to":"less than"} ${issue.maximum}`;else if(issue.type==="date")message=`Date must be ${issue.exact?"exactly":issue.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(issue.maximum))}`;else message="Invalid input";break;case ZodIssueCode.custom:message="Invalid input";break;case ZodIssueCode.invalid_intersection_types:message="Intersection results could not be merged";break;case ZodIssueCode.not_multiple_of:message=`Number must be a multiple of ${issue.multipleOf}`;break;case ZodIssueCode.not_finite:message="Number must be finite";break;default:message=_ctx.defaultError,util.assertNever(issue)}return{message}},en_default;var init_en=__esm(()=>{init_ZodError();init_util();en_default=errorMap});function setErrorMap(map){overrideErrorMap=map}function getErrorMap(){return overrideErrorMap}var overrideErrorMap;var init_errors=__esm(()=>{init_en();overrideErrorMap=en_default});function addIssueToContext(ctx,issueData){let overrideMap=getErrorMap(),issue=makeIssue({issueData,data:ctx.data,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,overrideMap,overrideMap===en_default?void 0:en_default].filter((x)=>!!x)});ctx.common.issues.push(issue)}class ParseStatus{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(status,results){let arrayValue=[];for(let s of results){if(s.status==="aborted")return INVALID;if(s.status==="dirty")status.dirty();arrayValue.push(s.value)}return{status:status.value,value:arrayValue}}static async mergeObjectAsync(status,pairs){let syncPairs=[];for(let pair of pairs){let key=await pair.key,value=await pair.value;syncPairs.push({key,value})}return ParseStatus.mergeObjectSync(status,syncPairs)}static mergeObjectSync(status,pairs){let finalObject={};for(let pair of pairs){let{key,value}=pair;if(key.status==="aborted")return INVALID;if(value.status==="aborted")return INVALID;if(key.status==="dirty")status.dirty();if(value.status==="dirty")status.dirty();if(key.value!=="__proto__"&&(typeof value.value<"u"||pair.alwaysSet))finalObject[key.value]=value.value}return{status:status.value,value:finalObject}}}var makeIssue=(params)=>{let{data,path,errorMaps,issueData}=params,fullPath=[...path,...issueData.path||[]],fullIssue={...issueData,path:fullPath};if(issueData.message!==void 0)return{...issueData,path:fullPath,message:issueData.message};let errorMessage="",maps=errorMaps.filter((m)=>!!m).slice().reverse();for(let map of maps)errorMessage=map(fullIssue,{data,defaultError:errorMessage}).message;return{...issueData,path:fullPath,message:errorMessage}},EMPTY_PATH,INVALID,DIRTY=(value)=>({status:"dirty",value}),OK=(value)=>({status:"valid",value}),isAborted=(x)=>x.status==="aborted",isDirty=(x)=>x.status==="dirty",isValid=(x)=>x.status==="valid",isAsync=(x)=>typeof Promise<"u"&&x instanceof Promise;var init_parseUtil=__esm(()=>{init_errors();init_en();EMPTY_PATH=[];INVALID=Object.freeze({status:"aborted"})});var init_typeAliases=()=>{};var errorUtil;var init_errorUtil=__esm(()=>{(function(errorUtil2){errorUtil2.errToObj=(message)=>typeof message==="string"?{message}:message||{},errorUtil2.toString=(message)=>typeof message==="string"?message:message?.message})(errorUtil||(errorUtil={}))});class ParseInputLazyPath{constructor(parent,value,path,key){this._cachedPath=[],this.parent=parent,this.data=value,this._path=path,this._key=key}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}function processCreateParams(params){if(!params)return{};let{errorMap:errorMap2,invalid_type_error,required_error,description}=params;if(errorMap2&&(invalid_type_error||required_error))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(errorMap2)return{errorMap:errorMap2,description};return{errorMap:(iss,ctx)=>{let{message}=params;if(iss.code==="invalid_enum_value")return{message:message??ctx.defaultError};if(typeof ctx.data>"u")return{message:message??required_error??ctx.defaultError};if(iss.code!=="invalid_type")return{message:ctx.defaultError};return{message:message??invalid_type_error??ctx.defaultError}},description}}class ZodType{get description(){return this._def.description}_getType(input){return getParsedType(input.data)}_getOrReturnCtx(input,ctx){return ctx||{common:input.parent.common,data:input.data,parsedType:getParsedType(input.data),schemaErrorMap:this._def.errorMap,path:input.path,parent:input.parent}}_processInputParams(input){return{status:new ParseStatus,ctx:{common:input.parent.common,data:input.data,parsedType:getParsedType(input.data),schemaErrorMap:this._def.errorMap,path:input.path,parent:input.parent}}}_parseSync(input){let result2=this._parse(input);if(isAsync(result2))throw Error("Synchronous parse encountered promise.");return result2}_parseAsync(input){let result2=this._parse(input);return Promise.resolve(result2)}parse(data,params){let result2=this.safeParse(data,params);if(result2.success)return result2.data;throw result2.error}safeParse(data,params){let ctx={common:{issues:[],async:params?.async??!1,contextualErrorMap:params?.errorMap},path:params?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)},result2=this._parseSync({data,path:ctx.path,parent:ctx});return handleResult(ctx,result2)}"~validate"(data){let ctx={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)};if(!this["~standard"].async)try{let result2=this._parseSync({data,path:[],parent:ctx});return isValid(result2)?{value:result2.value}:{issues:ctx.common.issues}}catch(err){if(err?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;ctx.common={issues:[],async:!0}}return this._parseAsync({data,path:[],parent:ctx}).then((result2)=>isValid(result2)?{value:result2.value}:{issues:ctx.common.issues})}async parseAsync(data,params){let result2=await this.safeParseAsync(data,params);if(result2.success)return result2.data;throw result2.error}async safeParseAsync(data,params){let ctx={common:{issues:[],contextualErrorMap:params?.errorMap,async:!0},path:params?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data,parsedType:getParsedType(data)},maybeAsyncResult=this._parse({data,path:ctx.path,parent:ctx}),result2=await(isAsync(maybeAsyncResult)?maybeAsyncResult:Promise.resolve(maybeAsyncResult));return handleResult(ctx,result2)}refine(check,message){let getIssueProperties=(val)=>{if(typeof message==="string"||typeof message>"u")return{message};else if(typeof message==="function")return message(val);else return message};return this._refinement((val,ctx)=>{let result2=check(val),setError=()=>ctx.addIssue({code:ZodIssueCode.custom,...getIssueProperties(val)});if(typeof Promise<"u"&&result2 instanceof Promise)return result2.then((data)=>{if(!data)return setError(),!1;else return!0});if(!result2)return setError(),!1;else return!0})}refinement(check,refinementData){return this._refinement((val,ctx)=>{if(!check(val))return ctx.addIssue(typeof refinementData==="function"?refinementData(val,ctx):refinementData),!1;else return!0})}_refinement(refinement){return new ZodEffects({schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"refinement",refinement}})}superRefine(refinement){return this._refinement(refinement)}constructor(def){this.spa=this.safeParseAsync,this._def=def,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:(data)=>this["~validate"](data)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(option){return ZodUnion.create([this,option],this._def)}and(incoming){return ZodIntersection.create(this,incoming,this._def)}transform(transform){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:"transform",transform}})}default(def){let defaultValueFunc=typeof def==="function"?def:()=>def;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:defaultValueFunc,typeName:ZodFirstPartyTypeKind.ZodDefault})}brand(){return new ZodBranded({typeName:ZodFirstPartyTypeKind.ZodBranded,type:this,...processCreateParams(this._def)})}catch(def){let catchValueFunc=typeof def==="function"?def:()=>def;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:catchValueFunc,typeName:ZodFirstPartyTypeKind.ZodCatch})}describe(description){return new this.constructor({...this._def,description})}pipe(target){return ZodPipeline.create(this,target)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}function timeRegexSource(args){let secondsRegexSource="[0-5]\\d";if(args.precision)secondsRegexSource=`${secondsRegexSource}\\.\\d{${args.precision}}`;else if(args.precision==null)secondsRegexSource=`${secondsRegexSource}(\\.\\d+)?`;let secondsQuantifier=args.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`}function timeRegex(args){return new RegExp(`^${timeRegexSource(args)}$`)}function datetimeRegex(args){let regex=`${dateRegexSource}T${timeRegexSource(args)}`,opts=[];if(opts.push(args.local?"Z?":"Z"),args.offset)opts.push("([+-]\\d{2}:?\\d{2})");return regex=`${regex}(${opts.join("|")})`,new RegExp(`^${regex}$`)}function isValidIP(ip,version){if((version==="v4"||!version)&&ipv4Regex.test(ip))return!0;if((version==="v6"||!version)&&ipv6Regex.test(ip))return!0;return!1}function isValidJWT(jwt,alg){if(!jwtRegex.test(jwt))return!1;try{let[header]=jwt.split(".");if(!header)return!1;let base64=header.replace(/-/g,"+").replace(/_/g,"/").padEnd(header.length+(4-header.length%4)%4,"="),decoded=JSON.parse(atob(base64));if(typeof decoded!=="object"||decoded===null)return!1;if("typ"in decoded&&decoded?.typ!=="JWT")return!1;if(!decoded.alg)return!1;if(alg&&decoded.alg!==alg)return!1;return!0}catch{return!1}}function isValidCidr(ip,version){if((version==="v4"||!version)&&ipv4CidrRegex.test(ip))return!0;if((version==="v6"||!version)&&ipv6CidrRegex.test(ip))return!0;return!1}function floatSafeRemainder(val,step){let valDecCount=(val.toString().split(".")[1]||"").length,stepDecCount=(step.toString().split(".")[1]||"").length,decCount=valDecCount>stepDecCount?valDecCount:stepDecCount,valInt=Number.parseInt(val.toFixed(decCount).replace(".","")),stepInt=Number.parseInt(step.toFixed(decCount).replace(".",""));return valInt%stepInt/10**decCount}function deepPartialify(schema){if(schema instanceof ZodObject){let newShape={};for(let key in schema.shape){let fieldSchema=schema.shape[key];newShape[key]=ZodOptional.create(deepPartialify(fieldSchema))}return new ZodObject({...schema._def,shape:()=>newShape})}else if(schema instanceof ZodArray)return new ZodArray({...schema._def,type:deepPartialify(schema.element)});else if(schema instanceof ZodOptional)return ZodOptional.create(deepPartialify(schema.unwrap()));else if(schema instanceof ZodNullable)return ZodNullable.create(deepPartialify(schema.unwrap()));else if(schema instanceof ZodTuple)return ZodTuple.create(schema.items.map((item)=>deepPartialify(item)));else return schema}function mergeValues(a,b){let aType=getParsedType(a),bType=getParsedType(b);if(a===b)return{valid:!0,data:a};else if(aType===ZodParsedType.object&&bType===ZodParsedType.object){let bKeys=util.objectKeys(b),sharedKeys=util.objectKeys(a).filter((key)=>bKeys.indexOf(key)!==-1),newObj={...a,...b};for(let key of sharedKeys){let sharedValue=mergeValues(a[key],b[key]);if(!sharedValue.valid)return{valid:!1};newObj[key]=sharedValue.data}return{valid:!0,data:newObj}}else if(aType===ZodParsedType.array&&bType===ZodParsedType.array){if(a.length!==b.length)return{valid:!1};let newArray=[];for(let index=0;index<a.length;index++){let itemA=a[index],itemB=b[index],sharedValue=mergeValues(itemA,itemB);if(!sharedValue.valid)return{valid:!1};newArray.push(sharedValue.data)}return{valid:!0,data:newArray}}else if(aType===ZodParsedType.date&&bType===ZodParsedType.date&&+a===+b)return{valid:!0,data:a};else return{valid:!1}}function createZodEnum(values,params){return new ZodEnum({values,typeName:ZodFirstPartyTypeKind.ZodEnum,...processCreateParams(params)})}function cleanParams(params,data){let p=typeof params==="function"?params(data):typeof params==="string"?{message:params}:params;return typeof p==="string"?{message:p}:p}function custom(check,_params={},fatal){if(check)return ZodAny.create().superRefine((data,ctx)=>{let r=check(data);if(r instanceof Promise)return r.then((r2)=>{if(!r2){let params=cleanParams(_params,data),_fatal=params.fatal??fatal??!0;ctx.addIssue({code:"custom",...params,fatal:_fatal})}});if(!r){let params=cleanParams(_params,data),_fatal=params.fatal??fatal??!0;ctx.addIssue({code:"custom",...params,fatal:_fatal})}return});return ZodAny.create()}var handleResult=(ctx,result2)=>{if(isValid(result2))return{success:!0,data:result2.value};else{if(!ctx.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let error=new ZodError(ctx.common.issues);return this._error=error,this._error}}}},cuidRegex,cuid2Regex,ulidRegex,uuidRegex,nanoidRegex,jwtRegex,durationRegex,emailRegex,_emojiRegex="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",emojiRegex,ipv4Regex,ipv4CidrRegex,ipv6Regex,ipv6CidrRegex,base64Regex,base64urlRegex,dateRegexSource="((\\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])))",dateRegex,ZodString,ZodNumber,ZodBigInt,ZodBoolean,ZodDate,ZodSymbol,ZodUndefined,ZodNull,ZodAny,ZodUnknown,ZodNever,ZodVoid,ZodArray,ZodObject,ZodUnion,getDiscriminator=(type)=>{if(type instanceof ZodLazy)return getDiscriminator(type.schema);else if(type instanceof ZodEffects)return getDiscriminator(type.innerType());else if(type instanceof ZodLiteral)return[type.value];else if(type instanceof ZodEnum)return type.options;else if(type instanceof ZodNativeEnum)return util.objectValues(type.enum);else if(type instanceof ZodDefault)return getDiscriminator(type._def.innerType);else if(type instanceof ZodUndefined)return[void 0];else if(type instanceof ZodNull)return[null];else if(type instanceof ZodOptional)return[void 0,...getDiscriminator(type.unwrap())];else if(type instanceof ZodNullable)return[null,...getDiscriminator(type.unwrap())];else if(type instanceof ZodBranded)return getDiscriminator(type.unwrap());else if(type instanceof ZodReadonly)return getDiscriminator(type.unwrap());else if(type instanceof ZodCatch)return getDiscriminator(type._def.innerType);else return[]},ZodDiscriminatedUnion,ZodIntersection,ZodTuple,ZodRecord,ZodMap,ZodSet,ZodFunction,ZodLazy,ZodLiteral,ZodEnum,ZodNativeEnum,ZodPromise,ZodEffects,ZodOptional,ZodNullable,ZodDefault,ZodCatch,ZodNaN,BRAND,ZodBranded,ZodPipeline,ZodReadonly,late,ZodFirstPartyTypeKind,instanceOfType=(cls,params={message:`Input not instance of ${cls.name}`})=>custom((data)=>data instanceof cls,params),stringType,numberType,nanType,bigIntType,booleanType,dateType,symbolType,undefinedType,nullType,anyType,unknownType,neverType,voidType,arrayType,objectType,strictObjectType,unionType,discriminatedUnionType,intersectionType,tupleType,recordType,mapType,setType,functionType,lazyType,literalType,enumType,nativeEnumType,promiseType,effectsType,optionalType,nullableType,preprocessType,pipelineType,ostring=()=>stringType().optional(),onumber=()=>numberType().optional(),oboolean=()=>booleanType().optional(),coerce,NEVER;var init_types=__esm(()=>{init_ZodError();init_errors();init_errorUtil();init_parseUtil();init_util();cuidRegex=/^c[^\s-]{8,}$/i,cuid2Regex=/^[0-9a-z]+$/,ulidRegex=/^[0-9A-HJKMNP-TV-Z]{26}$/i,uuidRegex=/^[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,nanoidRegex=/^[a-z0-9_-]{21}$/i,jwtRegex=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,durationRegex=/^[-+]?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)?)??$/,emailRegex=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ipv4Regex=/^(?:(?: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])$/,ipv4CidrRegex=/^(?:(?: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])$/,ipv6Regex=/^(([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]))$/,ipv6CidrRegex=/^(([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])$/,base64Regex=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64urlRegex=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,dateRegex=new RegExp(`^${dateRegexSource}$`);ZodString=class ZodString extends ZodType{_parse(input){if(this._def.coerce)input.data=String(input.data);if(this._getType(input)!==ZodParsedType.string){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.string,received:ctx2.parsedType}),INVALID}let status=new ParseStatus,ctx=void 0;for(let check of this._def.checks)if(check.kind==="min"){if(input.data.length<check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"string",inclusive:!0,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="max"){if(input.data.length>check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"string",inclusive:!0,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="length"){let tooBig=input.data.length>check.value,tooSmall=input.data.length<check.value;if(tooBig||tooSmall){if(ctx=this._getOrReturnCtx(input,ctx),tooBig)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"string",inclusive:!0,exact:!0,message:check.message});else if(tooSmall)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"string",inclusive:!0,exact:!0,message:check.message});status.dirty()}}else if(check.kind==="email"){if(!emailRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"email",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="emoji"){if(!emojiRegex)emojiRegex=new RegExp(_emojiRegex,"u");if(!emojiRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"emoji",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="uuid"){if(!uuidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"uuid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="nanoid"){if(!nanoidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"nanoid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cuid"){if(!cuidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cuid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cuid2"){if(!cuid2Regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cuid2",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="ulid"){if(!ulidRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"ulid",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="url")try{new URL(input.data)}catch{ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"url",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="regex"){if(check.regex.lastIndex=0,!check.regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"regex",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="trim")input.data=input.data.trim();else if(check.kind==="includes"){if(!input.data.includes(check.value,check.position))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{includes:check.value,position:check.position},message:check.message}),status.dirty()}else if(check.kind==="toLowerCase")input.data=input.data.toLowerCase();else if(check.kind==="toUpperCase")input.data=input.data.toUpperCase();else if(check.kind==="startsWith"){if(!input.data.startsWith(check.value))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{startsWith:check.value},message:check.message}),status.dirty()}else if(check.kind==="endsWith"){if(!input.data.endsWith(check.value))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:{endsWith:check.value},message:check.message}),status.dirty()}else if(check.kind==="datetime"){if(!datetimeRegex(check).test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"datetime",message:check.message}),status.dirty()}else if(check.kind==="date"){if(!dateRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"date",message:check.message}),status.dirty()}else if(check.kind==="time"){if(!timeRegex(check).test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_string,validation:"time",message:check.message}),status.dirty()}else if(check.kind==="duration"){if(!durationRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"duration",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="ip"){if(!isValidIP(input.data,check.version))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"ip",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="jwt"){if(!isValidJWT(input.data,check.alg))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"jwt",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="cidr"){if(!isValidCidr(input.data,check.version))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"cidr",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="base64"){if(!base64Regex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"base64",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else if(check.kind==="base64url"){if(!base64urlRegex.test(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{validation:"base64url",code:ZodIssueCode.invalid_string,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}_regex(regex,validation,message){return this.refinement((data)=>regex.test(data),{validation,code:ZodIssueCode.invalid_string,...errorUtil.errToObj(message)})}_addCheck(check){return new ZodString({...this._def,checks:[...this._def.checks,check]})}email(message){return this._addCheck({kind:"email",...errorUtil.errToObj(message)})}url(message){return this._addCheck({kind:"url",...errorUtil.errToObj(message)})}emoji(message){return this._addCheck({kind:"emoji",...errorUtil.errToObj(message)})}uuid(message){return this._addCheck({kind:"uuid",...errorUtil.errToObj(message)})}nanoid(message){return this._addCheck({kind:"nanoid",...errorUtil.errToObj(message)})}cuid(message){return this._addCheck({kind:"cuid",...errorUtil.errToObj(message)})}cuid2(message){return this._addCheck({kind:"cuid2",...errorUtil.errToObj(message)})}ulid(message){return this._addCheck({kind:"ulid",...errorUtil.errToObj(message)})}base64(message){return this._addCheck({kind:"base64",...errorUtil.errToObj(message)})}base64url(message){return this._addCheck({kind:"base64url",...errorUtil.errToObj(message)})}jwt(options){return this._addCheck({kind:"jwt",...errorUtil.errToObj(options)})}ip(options){return this._addCheck({kind:"ip",...errorUtil.errToObj(options)})}cidr(options){return this._addCheck({kind:"cidr",...errorUtil.errToObj(options)})}datetime(options){if(typeof options==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:options});return this._addCheck({kind:"datetime",precision:typeof options?.precision>"u"?null:options?.precision,offset:options?.offset??!1,local:options?.local??!1,...errorUtil.errToObj(options?.message)})}date(message){return this._addCheck({kind:"date",message})}time(options){if(typeof options==="string")return this._addCheck({kind:"time",precision:null,message:options});return this._addCheck({kind:"time",precision:typeof options?.precision>"u"?null:options?.precision,...errorUtil.errToObj(options?.message)})}duration(message){return this._addCheck({kind:"duration",...errorUtil.errToObj(message)})}regex(regex,message){return this._addCheck({kind:"regex",regex,...errorUtil.errToObj(message)})}includes(value,options){return this._addCheck({kind:"includes",value,position:options?.position,...errorUtil.errToObj(options?.message)})}startsWith(value,message){return this._addCheck({kind:"startsWith",value,...errorUtil.errToObj(message)})}endsWith(value,message){return this._addCheck({kind:"endsWith",value,...errorUtil.errToObj(message)})}min(minLength,message){return this._addCheck({kind:"min",value:minLength,...errorUtil.errToObj(message)})}max(maxLength,message){return this._addCheck({kind:"max",value:maxLength,...errorUtil.errToObj(message)})}length(len,message){return this._addCheck({kind:"length",value:len,...errorUtil.errToObj(message)})}nonempty(message){return this.min(1,errorUtil.errToObj(message))}trim(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((ch)=>ch.kind==="datetime")}get isDate(){return!!this._def.checks.find((ch)=>ch.kind==="date")}get isTime(){return!!this._def.checks.find((ch)=>ch.kind==="time")}get isDuration(){return!!this._def.checks.find((ch)=>ch.kind==="duration")}get isEmail(){return!!this._def.checks.find((ch)=>ch.kind==="email")}get isURL(){return!!this._def.checks.find((ch)=>ch.kind==="url")}get isEmoji(){return!!this._def.checks.find((ch)=>ch.kind==="emoji")}get isUUID(){return!!this._def.checks.find((ch)=>ch.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((ch)=>ch.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((ch)=>ch.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((ch)=>ch.kind==="cuid2")}get isULID(){return!!this._def.checks.find((ch)=>ch.kind==="ulid")}get isIP(){return!!this._def.checks.find((ch)=>ch.kind==="ip")}get isCIDR(){return!!this._def.checks.find((ch)=>ch.kind==="cidr")}get isBase64(){return!!this._def.checks.find((ch)=>ch.kind==="base64")}get isBase64url(){return!!this._def.checks.find((ch)=>ch.kind==="base64url")}get minLength(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxLength(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}};ZodString.create=(params)=>{return new ZodString({checks:[],typeName:ZodFirstPartyTypeKind.ZodString,coerce:params?.coerce??!1,...processCreateParams(params)})};ZodNumber=class ZodNumber extends ZodType{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(input){if(this._def.coerce)input.data=Number(input.data);if(this._getType(input)!==ZodParsedType.number){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.number,received:ctx2.parsedType}),INVALID}let ctx=void 0,status=new ParseStatus;for(let check of this._def.checks)if(check.kind==="int"){if(!util.isInteger(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:"integer",received:"float",message:check.message}),status.dirty()}else if(check.kind==="min"){if(check.inclusive?input.data<check.value:input.data<=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:check.value,type:"number",inclusive:check.inclusive,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="max"){if(check.inclusive?input.data>check.value:input.data>=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:check.value,type:"number",inclusive:check.inclusive,exact:!1,message:check.message}),status.dirty()}else if(check.kind==="multipleOf"){if(floatSafeRemainder(input.data,check.value)!==0)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_multiple_of,multipleOf:check.value,message:check.message}),status.dirty()}else if(check.kind==="finite"){if(!Number.isFinite(input.data))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_finite,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}gte(value,message){return this.setLimit("min",value,!0,errorUtil.toString(message))}gt(value,message){return this.setLimit("min",value,!1,errorUtil.toString(message))}lte(value,message){return this.setLimit("max",value,!0,errorUtil.toString(message))}lt(value,message){return this.setLimit("max",value,!1,errorUtil.toString(message))}setLimit(kind,value,inclusive,message){return new ZodNumber({...this._def,checks:[...this._def.checks,{kind,value,inclusive,message:errorUtil.toString(message)}]})}_addCheck(check){return new ZodNumber({...this._def,checks:[...this._def.checks,check]})}int(message){return this._addCheck({kind:"int",message:errorUtil.toString(message)})}positive(message){return this._addCheck({kind:"min",value:0,inclusive:!1,message:errorUtil.toString(message)})}negative(message){return this._addCheck({kind:"max",value:0,inclusive:!1,message:errorUtil.toString(message)})}nonpositive(message){return this._addCheck({kind:"max",value:0,inclusive:!0,message:errorUtil.toString(message)})}nonnegative(message){return this._addCheck({kind:"min",value:0,inclusive:!0,message:errorUtil.toString(message)})}multipleOf(value,message){return this._addCheck({kind:"multipleOf",value,message:errorUtil.toString(message)})}finite(message){return this._addCheck({kind:"finite",message:errorUtil.toString(message)})}safe(message){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:errorUtil.toString(message)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:errorUtil.toString(message)})}get minValue(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxValue(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}get isInt(){return!!this._def.checks.find((ch)=>ch.kind==="int"||ch.kind==="multipleOf"&&util.isInteger(ch.value))}get isFinite(){let max=null,min=null;for(let ch of this._def.checks)if(ch.kind==="finite"||ch.kind==="int"||ch.kind==="multipleOf")return!0;else if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}else if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return Number.isFinite(min)&&Number.isFinite(max)}};ZodNumber.create=(params)=>{return new ZodNumber({checks:[],typeName:ZodFirstPartyTypeKind.ZodNumber,coerce:params?.coerce||!1,...processCreateParams(params)})};ZodBigInt=class ZodBigInt extends ZodType{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(input){if(this._def.coerce)try{input.data=BigInt(input.data)}catch{return this._getInvalidInput(input)}if(this._getType(input)!==ZodParsedType.bigint)return this._getInvalidInput(input);let ctx=void 0,status=new ParseStatus;for(let check of this._def.checks)if(check.kind==="min"){if(check.inclusive?input.data<check.value:input.data<=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,type:"bigint",minimum:check.value,inclusive:check.inclusive,message:check.message}),status.dirty()}else if(check.kind==="max"){if(check.inclusive?input.data>check.value:input.data>=check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,type:"bigint",maximum:check.value,inclusive:check.inclusive,message:check.message}),status.dirty()}else if(check.kind==="multipleOf"){if(input.data%check.value!==BigInt(0))ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.not_multiple_of,multipleOf:check.value,message:check.message}),status.dirty()}else util.assertNever(check);return{status:status.value,value:input.data}}_getInvalidInput(input){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.bigint,received:ctx.parsedType}),INVALID}gte(value,message){return this.setLimit("min",value,!0,errorUtil.toString(message))}gt(value,message){return this.setLimit("min",value,!1,errorUtil.toString(message))}lte(value,message){return this.setLimit("max",value,!0,errorUtil.toString(message))}lt(value,message){return this.setLimit("max",value,!1,errorUtil.toString(message))}setLimit(kind,value,inclusive,message){return new ZodBigInt({...this._def,checks:[...this._def.checks,{kind,value,inclusive,message:errorUtil.toString(message)}]})}_addCheck(check){return new ZodBigInt({...this._def,checks:[...this._def.checks,check]})}positive(message){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:errorUtil.toString(message)})}negative(message){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:errorUtil.toString(message)})}nonpositive(message){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:errorUtil.toString(message)})}nonnegative(message){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:errorUtil.toString(message)})}multipleOf(value,message){return this._addCheck({kind:"multipleOf",value,message:errorUtil.toString(message)})}get minValue(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min}get maxValue(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max}};ZodBigInt.create=(params)=>{return new ZodBigInt({checks:[],typeName:ZodFirstPartyTypeKind.ZodBigInt,coerce:params?.coerce??!1,...processCreateParams(params)})};ZodBoolean=class ZodBoolean extends ZodType{_parse(input){if(this._def.coerce)input.data=Boolean(input.data);if(this._getType(input)!==ZodParsedType.boolean){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.boolean,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodBoolean.create=(params)=>{return new ZodBoolean({typeName:ZodFirstPartyTypeKind.ZodBoolean,coerce:params?.coerce||!1,...processCreateParams(params)})};ZodDate=class ZodDate extends ZodType{_parse(input){if(this._def.coerce)input.data=new Date(input.data);if(this._getType(input)!==ZodParsedType.date){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.date,received:ctx2.parsedType}),INVALID}if(Number.isNaN(input.data.getTime())){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_date}),INVALID}let status=new ParseStatus,ctx=void 0;for(let check of this._def.checks)if(check.kind==="min"){if(input.data.getTime()<check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_small,message:check.message,inclusive:!0,exact:!1,minimum:check.value,type:"date"}),status.dirty()}else if(check.kind==="max"){if(input.data.getTime()>check.value)ctx=this._getOrReturnCtx(input,ctx),addIssueToContext(ctx,{code:ZodIssueCode.too_big,message:check.message,inclusive:!0,exact:!1,maximum:check.value,type:"date"}),status.dirty()}else util.assertNever(check);return{status:status.value,value:new Date(input.data.getTime())}}_addCheck(check){return new ZodDate({...this._def,checks:[...this._def.checks,check]})}min(minDate,message){return this._addCheck({kind:"min",value:minDate.getTime(),message:errorUtil.toString(message)})}max(maxDate,message){return this._addCheck({kind:"max",value:maxDate.getTime(),message:errorUtil.toString(message)})}get minDate(){let min=null;for(let ch of this._def.checks)if(ch.kind==="min"){if(min===null||ch.value>min)min=ch.value}return min!=null?new Date(min):null}get maxDate(){let max=null;for(let ch of this._def.checks)if(ch.kind==="max"){if(max===null||ch.value<max)max=ch.value}return max!=null?new Date(max):null}};ZodDate.create=(params)=>{return new ZodDate({checks:[],coerce:params?.coerce||!1,typeName:ZodFirstPartyTypeKind.ZodDate,...processCreateParams(params)})};ZodSymbol=class ZodSymbol extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.symbol){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.symbol,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodSymbol.create=(params)=>{return new ZodSymbol({typeName:ZodFirstPartyTypeKind.ZodSymbol,...processCreateParams(params)})};ZodUndefined=class ZodUndefined extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.undefined){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.undefined,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodUndefined.create=(params)=>{return new ZodUndefined({typeName:ZodFirstPartyTypeKind.ZodUndefined,...processCreateParams(params)})};ZodNull=class ZodNull extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.null){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.null,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodNull.create=(params)=>{return new ZodNull({typeName:ZodFirstPartyTypeKind.ZodNull,...processCreateParams(params)})};ZodAny=class ZodAny extends ZodType{constructor(){super(...arguments);this._any=!0}_parse(input){return OK(input.data)}};ZodAny.create=(params)=>{return new ZodAny({typeName:ZodFirstPartyTypeKind.ZodAny,...processCreateParams(params)})};ZodUnknown=class ZodUnknown extends ZodType{constructor(){super(...arguments);this._unknown=!0}_parse(input){return OK(input.data)}};ZodUnknown.create=(params)=>{return new ZodUnknown({typeName:ZodFirstPartyTypeKind.ZodUnknown,...processCreateParams(params)})};ZodNever=class ZodNever extends ZodType{_parse(input){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.never,received:ctx.parsedType}),INVALID}};ZodNever.create=(params)=>{return new ZodNever({typeName:ZodFirstPartyTypeKind.ZodNever,...processCreateParams(params)})};ZodVoid=class ZodVoid extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.undefined){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.void,received:ctx.parsedType}),INVALID}return OK(input.data)}};ZodVoid.create=(params)=>{return new ZodVoid({typeName:ZodFirstPartyTypeKind.ZodVoid,...processCreateParams(params)})};ZodArray=class ZodArray extends ZodType{_parse(input){let{ctx,status}=this._processInputParams(input),def=this._def;if(ctx.parsedType!==ZodParsedType.array)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:ctx.parsedType}),INVALID;if(def.exactLength!==null){let tooBig=ctx.data.length>def.exactLength.value,tooSmall=ctx.data.length<def.exactLength.value;if(tooBig||tooSmall)addIssueToContext(ctx,{code:tooBig?ZodIssueCode.too_big:ZodIssueCode.too_small,minimum:tooSmall?def.exactLength.value:void 0,maximum:tooBig?def.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:def.exactLength.message}),status.dirty()}if(def.minLength!==null){if(ctx.data.length<def.minLength.value)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:def.minLength.value,type:"array",inclusive:!0,exact:!1,message:def.minLength.message}),status.dirty()}if(def.maxLength!==null){if(ctx.data.length>def.maxLength.value)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:def.maxLength.value,type:"array",inclusive:!0,exact:!1,message:def.maxLength.message}),status.dirty()}if(ctx.common.async)return Promise.all([...ctx.data].map((item,i)=>{return def.type._parseAsync(new ParseInputLazyPath(ctx,item,ctx.path,i))})).then((result3)=>{return ParseStatus.mergeArray(status,result3)});let result2=[...ctx.data].map((item,i)=>{return def.type._parseSync(new ParseInputLazyPath(ctx,item,ctx.path,i))});return ParseStatus.mergeArray(status,result2)}get element(){return this._def.type}min(minLength,message){return new ZodArray({...this._def,minLength:{value:minLength,message:errorUtil.toString(message)}})}max(maxLength,message){return new ZodArray({...this._def,maxLength:{value:maxLength,message:errorUtil.toString(message)}})}length(len,message){return new ZodArray({...this._def,exactLength:{value:len,message:errorUtil.toString(message)}})}nonempty(message){return this.min(1,message)}};ZodArray.create=(schema,params)=>{return new ZodArray({type:schema,minLength:null,maxLength:null,exactLength:null,typeName:ZodFirstPartyTypeKind.ZodArray,...processCreateParams(params)})};ZodObject=class ZodObject extends ZodType{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let shape=this._def.shape(),keys=util.objectKeys(shape);return this._cached={shape,keys},this._cached}_parse(input){if(this._getType(input)!==ZodParsedType.object){let ctx2=this._getOrReturnCtx(input);return addIssueToContext(ctx2,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx2.parsedType}),INVALID}let{status,ctx}=this._processInputParams(input),{shape,keys:shapeKeys}=this._getCached(),extraKeys=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys==="strip")){for(let key in ctx.data)if(!shapeKeys.includes(key))extraKeys.push(key)}let pairs=[];for(let key of shapeKeys){let keyValidator=shape[key],value=ctx.data[key];pairs.push({key:{status:"valid",value:key},value:keyValidator._parse(new ParseInputLazyPath(ctx,value,ctx.path,key)),alwaysSet:key in ctx.data})}if(this._def.catchall instanceof ZodNever){let unknownKeys=this._def.unknownKeys;if(unknownKeys==="passthrough")for(let key of extraKeys)pairs.push({key:{status:"valid",value:key},value:{status:"valid",value:ctx.data[key]}});else if(unknownKeys==="strict"){if(extraKeys.length>0)addIssueToContext(ctx,{code:ZodIssueCode.unrecognized_keys,keys:extraKeys}),status.dirty()}else if(unknownKeys==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let catchall=this._def.catchall;for(let key of extraKeys){let value=ctx.data[key];pairs.push({key:{status:"valid",value:key},value:catchall._parse(new ParseInputLazyPath(ctx,value,ctx.path,key)),alwaysSet:key in ctx.data})}}if(ctx.common.async)return Promise.resolve().then(async()=>{let syncPairs=[];for(let pair of pairs){let key=await pair.key,value=await pair.value;syncPairs.push({key,value,alwaysSet:pair.alwaysSet})}return syncPairs}).then((syncPairs)=>{return ParseStatus.mergeObjectSync(status,syncPairs)});else return ParseStatus.mergeObjectSync(status,pairs)}get shape(){return this._def.shape()}strict(message){return errorUtil.errToObj,new ZodObject({...this._def,unknownKeys:"strict",...message!==void 0?{errorMap:(issue,ctx)=>{let defaultError=this._def.errorMap?.(issue,ctx).message??ctx.defaultError;if(issue.code==="unrecognized_keys")return{message:errorUtil.errToObj(message).message??defaultError};return{message:defaultError}}}:{}})}strip(){return new ZodObject({...this._def,unknownKeys:"strip"})}passthrough(){return new ZodObject({...this._def,unknownKeys:"passthrough"})}extend(augmentation){return new ZodObject({...this._def,shape:()=>({...this._def.shape(),...augmentation})})}merge(merging){return new ZodObject({unknownKeys:merging._def.unknownKeys,catchall:merging._def.catchall,shape:()=>({...this._def.shape(),...merging._def.shape()}),typeName:ZodFirstPartyTypeKind.ZodObject})}setKey(key,schema){return this.augment({[key]:schema})}catchall(index){return new ZodObject({...this._def,catchall:index})}pick(mask){let shape={};for(let key of util.objectKeys(mask))if(mask[key]&&this.shape[key])shape[key]=this.shape[key];return new ZodObject({...this._def,shape:()=>shape})}omit(mask){let shape={};for(let key of util.objectKeys(this.shape))if(!mask[key])shape[key]=this.shape[key];return new ZodObject({...this._def,shape:()=>shape})}deepPartial(){return deepPartialify(this)}partial(mask){let newShape={};for(let key of util.objectKeys(this.shape)){let fieldSchema=this.shape[key];if(mask&&!mask[key])newShape[key]=fieldSchema;else newShape[key]=fieldSchema.optional()}return new ZodObject({...this._def,shape:()=>newShape})}required(mask){let newShape={};for(let key of util.objectKeys(this.shape))if(mask&&!mask[key])newShape[key]=this.shape[key];else{let newField=this.shape[key];while(newField instanceof ZodOptional)newField=newField._def.innerType;newShape[key]=newField}return new ZodObject({...this._def,shape:()=>newShape})}keyof(){return createZodEnum(util.objectKeys(this.shape))}};ZodObject.create=(shape,params)=>{return new ZodObject({shape:()=>shape,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodObject.strictCreate=(shape,params)=>{return new ZodObject({shape:()=>shape,unknownKeys:"strict",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodObject.lazycreate=(shape,params)=>{return new ZodObject({shape,unknownKeys:"strip",catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(params)})};ZodUnion=class ZodUnion extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),options=this._def.options;function handleResults(results){for(let result2 of results)if(result2.result.status==="valid")return result2.result;for(let result2 of results)if(result2.result.status==="dirty")return ctx.common.issues.push(...result2.ctx.common.issues),result2.result;let unionErrors=results.map((result2)=>new ZodError(result2.ctx.common.issues));return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union,unionErrors}),INVALID}if(ctx.common.async)return Promise.all(options.map(async(option)=>{let childCtx={...ctx,common:{...ctx.common,issues:[]},parent:null};return{result:await option._parseAsync({data:ctx.data,path:ctx.path,parent:childCtx}),ctx:childCtx}})).then(handleResults);else{let dirty=void 0,issues=[];for(let option of options){let childCtx={...ctx,common:{...ctx.common,issues:[]},parent:null},result2=option._parseSync({data:ctx.data,path:ctx.path,parent:childCtx});if(result2.status==="valid")return result2;else if(result2.status==="dirty"&&!dirty)dirty={result:result2,ctx:childCtx};if(childCtx.common.issues.length)issues.push(childCtx.common.issues)}if(dirty)return ctx.common.issues.push(...dirty.ctx.common.issues),dirty.result;let unionErrors=issues.map((issues2)=>new ZodError(issues2));return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union,unionErrors}),INVALID}}get options(){return this._def.options}};ZodUnion.create=(types,params)=>{return new ZodUnion({options:types,typeName:ZodFirstPartyTypeKind.ZodUnion,...processCreateParams(params)})};ZodDiscriminatedUnion=class ZodDiscriminatedUnion extends ZodType{_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.object)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx.parsedType}),INVALID;let discriminator=this.discriminator,discriminatorValue=ctx.data[discriminator],option=this.optionsMap.get(discriminatorValue);if(!option)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[discriminator]}),INVALID;if(ctx.common.async)return option._parseAsync({data:ctx.data,path:ctx.path,parent:ctx});else return option._parseSync({data:ctx.data,path:ctx.path,parent:ctx})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(discriminator,options,params){let optionsMap=new Map;for(let type of options){let discriminatorValues=getDiscriminator(type.shape[discriminator]);if(!discriminatorValues.length)throw Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);for(let value of discriminatorValues){if(optionsMap.has(value))throw Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);optionsMap.set(value,type)}}return new ZodDiscriminatedUnion({typeName:ZodFirstPartyTypeKind.ZodDiscriminatedUnion,discriminator,options,optionsMap,...processCreateParams(params)})}};ZodIntersection=class ZodIntersection extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input),handleParsed=(parsedLeft,parsedRight)=>{if(isAborted(parsedLeft)||isAborted(parsedRight))return INVALID;let merged=mergeValues(parsedLeft.value,parsedRight.value);if(!merged.valid)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_intersection_types}),INVALID;if(isDirty(parsedLeft)||isDirty(parsedRight))status.dirty();return{status:status.value,value:merged.data}};if(ctx.common.async)return Promise.all([this._def.left._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}),this._def.right._parseAsync({data:ctx.data,path:ctx.path,parent:ctx})]).then(([left,right])=>handleParsed(left,right));else return handleParsed(this._def.left._parseSync({data:ctx.data,path:ctx.path,parent:ctx}),this._def.right._parseSync({data:ctx.data,path:ctx.path,parent:ctx}))}};ZodIntersection.create=(left,right,params)=>{return new ZodIntersection({left,right,typeName:ZodFirstPartyTypeKind.ZodIntersection,...processCreateParams(params)})};ZodTuple=class ZodTuple extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.array)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:ctx.parsedType}),INVALID;if(ctx.data.length<this._def.items.length)return addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),INVALID;if(!this._def.rest&&ctx.data.length>this._def.items.length)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),status.dirty();let items=[...ctx.data].map((item,itemIndex)=>{let schema=this._def.items[itemIndex]||this._def.rest;if(!schema)return null;return schema._parse(new ParseInputLazyPath(ctx,item,ctx.path,itemIndex))}).filter((x)=>!!x);if(ctx.common.async)return Promise.all(items).then((results)=>{return ParseStatus.mergeArray(status,results)});else return ParseStatus.mergeArray(status,items)}get items(){return this._def.items}rest(rest){return new ZodTuple({...this._def,rest})}};ZodTuple.create=(schemas,params)=>{if(!Array.isArray(schemas))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new ZodTuple({items:schemas,typeName:ZodFirstPartyTypeKind.ZodTuple,rest:null,...processCreateParams(params)})};ZodRecord=class ZodRecord extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.object)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:ctx.parsedType}),INVALID;let pairs=[],keyType=this._def.keyType,valueType=this._def.valueType;for(let key in ctx.data)pairs.push({key:keyType._parse(new ParseInputLazyPath(ctx,key,ctx.path,key)),value:valueType._parse(new ParseInputLazyPath(ctx,ctx.data[key],ctx.path,key)),alwaysSet:key in ctx.data});if(ctx.common.async)return ParseStatus.mergeObjectAsync(status,pairs);else return ParseStatus.mergeObjectSync(status,pairs)}get element(){return this._def.valueType}static create(first,second,third){if(second instanceof ZodType)return new ZodRecord({keyType:first,valueType:second,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(third)});return new ZodRecord({keyType:ZodString.create(),valueType:first,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(second)})}};ZodMap=class ZodMap extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.map)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.map,received:ctx.parsedType}),INVALID;let keyType=this._def.keyType,valueType=this._def.valueType,pairs=[...ctx.data.entries()].map(([key,value],index)=>{return{key:keyType._parse(new ParseInputLazyPath(ctx,key,ctx.path,[index,"key"])),value:valueType._parse(new ParseInputLazyPath(ctx,value,ctx.path,[index,"value"]))}});if(ctx.common.async){let finalMap=new Map;return Promise.resolve().then(async()=>{for(let pair of pairs){let key=await pair.key,value=await pair.value;if(key.status==="aborted"||value.status==="aborted")return INVALID;if(key.status==="dirty"||value.status==="dirty")status.dirty();finalMap.set(key.value,value.value)}return{status:status.value,value:finalMap}})}else{let finalMap=new Map;for(let pair of pairs){let{key,value}=pair;if(key.status==="aborted"||value.status==="aborted")return INVALID;if(key.status==="dirty"||value.status==="dirty")status.dirty();finalMap.set(key.value,value.value)}return{status:status.value,value:finalMap}}}};ZodMap.create=(keyType,valueType,params)=>{return new ZodMap({valueType,keyType,typeName:ZodFirstPartyTypeKind.ZodMap,...processCreateParams(params)})};ZodSet=class ZodSet extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.set)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.set,received:ctx.parsedType}),INVALID;let def=this._def;if(def.minSize!==null){if(ctx.data.size<def.minSize.value)addIssueToContext(ctx,{code:ZodIssueCode.too_small,minimum:def.minSize.value,type:"set",inclusive:!0,exact:!1,message:def.minSize.message}),status.dirty()}if(def.maxSize!==null){if(ctx.data.size>def.maxSize.value)addIssueToContext(ctx,{code:ZodIssueCode.too_big,maximum:def.maxSize.value,type:"set",inclusive:!0,exact:!1,message:def.maxSize.message}),status.dirty()}let valueType=this._def.valueType;function finalizeSet(elements2){let parsedSet=new Set;for(let element of elements2){if(element.status==="aborted")return INVALID;if(element.status==="dirty")status.dirty();parsedSet.add(element.value)}return{status:status.value,value:parsedSet}}let elements=[...ctx.data.values()].map((item,i)=>valueType._parse(new ParseInputLazyPath(ctx,item,ctx.path,i)));if(ctx.common.async)return Promise.all(elements).then((elements2)=>finalizeSet(elements2));else return finalizeSet(elements)}min(minSize,message){return new ZodSet({...this._def,minSize:{value:minSize,message:errorUtil.toString(message)}})}max(maxSize,message){return new ZodSet({...this._def,maxSize:{value:maxSize,message:errorUtil.toString(message)}})}size(size,message){return this.min(size,message).max(size,message)}nonempty(message){return this.min(1,message)}};ZodSet.create=(valueType,params)=>{return new ZodSet({valueType,minSize:null,maxSize:null,typeName:ZodFirstPartyTypeKind.ZodSet,...processCreateParams(params)})};ZodFunction=class ZodFunction extends ZodType{constructor(){super(...arguments);this.validate=this.implement}_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.function)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.function,received:ctx.parsedType}),INVALID;function makeArgsIssue(args,error){return makeIssue({data:args,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,getErrorMap(),en_default].filter((x)=>!!x),issueData:{code:ZodIssueCode.invalid_arguments,argumentsError:error}})}function makeReturnsIssue(returns,error){return makeIssue({data:returns,path:ctx.path,errorMaps:[ctx.common.contextualErrorMap,ctx.schemaErrorMap,getErrorMap(),en_default].filter((x)=>!!x),issueData:{code:ZodIssueCode.invalid_return_type,returnTypeError:error}})}let params={errorMap:ctx.common.contextualErrorMap},fn=ctx.data;if(this._def.returns instanceof ZodPromise){let me=this;return OK(async function(...args){let error=new ZodError([]),parsedArgs=await me._def.args.parseAsync(args,params).catch((e)=>{throw error.addIssue(makeArgsIssue(args,e)),error}),result2=await Reflect.apply(fn,this,parsedArgs);return await me._def.returns._def.type.parseAsync(result2,params).catch((e)=>{throw error.addIssue(makeReturnsIssue(result2,e)),error})})}else{let me=this;return OK(function(...args){let parsedArgs=me._def.args.safeParse(args,params);if(!parsedArgs.success)throw new ZodError([makeArgsIssue(args,parsedArgs.error)]);let result2=Reflect.apply(fn,this,parsedArgs.data),parsedReturns=me._def.returns.safeParse(result2,params);if(!parsedReturns.success)throw new ZodError([makeReturnsIssue(result2,parsedReturns.error)]);return parsedReturns.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...items){return new ZodFunction({...this._def,args:ZodTuple.create(items).rest(ZodUnknown.create())})}returns(returnType){return new ZodFunction({...this._def,returns:returnType})}implement(func){return this.parse(func)}strictImplement(func){return this.parse(func)}static create(args,returns,params){return new ZodFunction({args:args?args:ZodTuple.create([]).rest(ZodUnknown.create()),returns:returns||ZodUnknown.create(),typeName:ZodFirstPartyTypeKind.ZodFunction,...processCreateParams(params)})}};ZodLazy=class ZodLazy extends ZodType{get schema(){return this._def.getter()}_parse(input){let{ctx}=this._processInputParams(input);return this._def.getter()._parse({data:ctx.data,path:ctx.path,parent:ctx})}};ZodLazy.create=(getter,params)=>{return new ZodLazy({getter,typeName:ZodFirstPartyTypeKind.ZodLazy,...processCreateParams(params)})};ZodLiteral=class ZodLiteral extends ZodType{_parse(input){if(input.data!==this._def.value){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_literal,expected:this._def.value}),INVALID}return{status:"valid",value:input.data}}get value(){return this._def.value}};ZodLiteral.create=(value,params)=>{return new ZodLiteral({value,typeName:ZodFirstPartyTypeKind.ZodLiteral,...processCreateParams(params)})};ZodEnum=class ZodEnum extends ZodType{_parse(input){if(typeof input.data!=="string"){let ctx=this._getOrReturnCtx(input),expectedValues=this._def.values;return addIssueToContext(ctx,{expected:util.joinValues(expectedValues),received:ctx.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(input.data)){let ctx=this._getOrReturnCtx(input),expectedValues=this._def.values;return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_enum_value,options:expectedValues}),INVALID}return OK(input.data)}get options(){return this._def.values}get enum(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}get Values(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}get Enum(){let enumValues={};for(let val of this._def.values)enumValues[val]=val;return enumValues}extract(values,newDef=this._def){return ZodEnum.create(values,{...this._def,...newDef})}exclude(values,newDef=this._def){return ZodEnum.create(this.options.filter((opt)=>!values.includes(opt)),{...this._def,...newDef})}};ZodEnum.create=createZodEnum;ZodNativeEnum=class ZodNativeEnum extends ZodType{_parse(input){let nativeEnumValues=util.getValidEnumValues(this._def.values),ctx=this._getOrReturnCtx(input);if(ctx.parsedType!==ZodParsedType.string&&ctx.parsedType!==ZodParsedType.number){let expectedValues=util.objectValues(nativeEnumValues);return addIssueToContext(ctx,{expected:util.joinValues(expectedValues),received:ctx.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(!this._cache)this._cache=new Set(util.getValidEnumValues(this._def.values));if(!this._cache.has(input.data)){let expectedValues=util.objectValues(nativeEnumValues);return addIssueToContext(ctx,{received:ctx.data,code:ZodIssueCode.invalid_enum_value,options:expectedValues}),INVALID}return OK(input.data)}get enum(){return this._def.values}};ZodNativeEnum.create=(values,params)=>{return new ZodNativeEnum({values,typeName:ZodFirstPartyTypeKind.ZodNativeEnum,...processCreateParams(params)})};ZodPromise=class ZodPromise extends ZodType{unwrap(){return this._def.type}_parse(input){let{ctx}=this._processInputParams(input);if(ctx.parsedType!==ZodParsedType.promise&&ctx.common.async===!1)return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.promise,received:ctx.parsedType}),INVALID;let promisified=ctx.parsedType===ZodParsedType.promise?ctx.data:Promise.resolve(ctx.data);return OK(promisified.then((data)=>{return this._def.type.parseAsync(data,{path:ctx.path,errorMap:ctx.common.contextualErrorMap})}))}};ZodPromise.create=(schema,params)=>{return new ZodPromise({type:schema,typeName:ZodFirstPartyTypeKind.ZodPromise,...processCreateParams(params)})};ZodEffects=class ZodEffects extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ZodFirstPartyTypeKind.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(input){let{status,ctx}=this._processInputParams(input),effect=this._def.effect||null,checkCtx={addIssue:(arg)=>{if(addIssueToContext(ctx,arg),arg.fatal)status.abort();else status.dirty()},get path(){return ctx.path}};if(checkCtx.addIssue=checkCtx.addIssue.bind(checkCtx),effect.type==="preprocess"){let processed=effect.transform(ctx.data,checkCtx);if(ctx.common.async)return Promise.resolve(processed).then(async(processed2)=>{if(status.value==="aborted")return INVALID;let result2=await this._def.schema._parseAsync({data:processed2,path:ctx.path,parent:ctx});if(result2.status==="aborted")return INVALID;if(result2.status==="dirty")return DIRTY(result2.value);if(status.value==="dirty")return DIRTY(result2.value);return result2});else{if(status.value==="aborted")return INVALID;let result2=this._def.schema._parseSync({data:processed,path:ctx.path,parent:ctx});if(result2.status==="aborted")return INVALID;if(result2.status==="dirty")return DIRTY(result2.value);if(status.value==="dirty")return DIRTY(result2.value);return result2}}if(effect.type==="refinement"){let executeRefinement=(acc)=>{let result2=effect.refinement(acc,checkCtx);if(ctx.common.async)return Promise.resolve(result2);if(result2 instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return acc};if(ctx.common.async===!1){let inner=this._def.schema._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(inner.status==="aborted")return INVALID;if(inner.status==="dirty")status.dirty();return executeRefinement(inner.value),{status:status.value,value:inner.value}}else return this._def.schema._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}).then((inner)=>{if(inner.status==="aborted")return INVALID;if(inner.status==="dirty")status.dirty();return executeRefinement(inner.value).then(()=>{return{status:status.value,value:inner.value}})})}if(effect.type==="transform")if(ctx.common.async===!1){let base=this._def.schema._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(!isValid(base))return INVALID;let result2=effect.transform(base.value,checkCtx);if(result2 instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:status.value,value:result2}}else return this._def.schema._parseAsync({data:ctx.data,path:ctx.path,parent:ctx}).then((base)=>{if(!isValid(base))return INVALID;return Promise.resolve(effect.transform(base.value,checkCtx)).then((result2)=>({status:status.value,value:result2}))});util.assertNever(effect)}};ZodEffects.create=(schema,effect,params)=>{return new ZodEffects({schema,typeName:ZodFirstPartyTypeKind.ZodEffects,effect,...processCreateParams(params)})};ZodEffects.createWithPreprocess=(preprocess,schema,params)=>{return new ZodEffects({schema,effect:{type:"preprocess",transform:preprocess},typeName:ZodFirstPartyTypeKind.ZodEffects,...processCreateParams(params)})};ZodOptional=class ZodOptional extends ZodType{_parse(input){if(this._getType(input)===ZodParsedType.undefined)return OK(void 0);return this._def.innerType._parse(input)}unwrap(){return this._def.innerType}};ZodOptional.create=(type,params)=>{return new ZodOptional({innerType:type,typeName:ZodFirstPartyTypeKind.ZodOptional,...processCreateParams(params)})};ZodNullable=class ZodNullable extends ZodType{_parse(input){if(this._getType(input)===ZodParsedType.null)return OK(null);return this._def.innerType._parse(input)}unwrap(){return this._def.innerType}};ZodNullable.create=(type,params)=>{return new ZodNullable({innerType:type,typeName:ZodFirstPartyTypeKind.ZodNullable,...processCreateParams(params)})};ZodDefault=class ZodDefault extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),data=ctx.data;if(ctx.parsedType===ZodParsedType.undefined)data=this._def.defaultValue();return this._def.innerType._parse({data,path:ctx.path,parent:ctx})}removeDefault(){return this._def.innerType}};ZodDefault.create=(type,params)=>{return new ZodDefault({innerType:type,typeName:ZodFirstPartyTypeKind.ZodDefault,defaultValue:typeof params.default==="function"?params.default:()=>params.default,...processCreateParams(params)})};ZodCatch=class ZodCatch extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),newCtx={...ctx,common:{...ctx.common,issues:[]}},result2=this._def.innerType._parse({data:newCtx.data,path:newCtx.path,parent:{...newCtx}});if(isAsync(result2))return result2.then((result3)=>{return{status:"valid",value:result3.status==="valid"?result3.value:this._def.catchValue({get error(){return new ZodError(newCtx.common.issues)},input:newCtx.data})}});else return{status:"valid",value:result2.status==="valid"?result2.value:this._def.catchValue({get error(){return new ZodError(newCtx.common.issues)},input:newCtx.data})}}removeCatch(){return this._def.innerType}};ZodCatch.create=(type,params)=>{return new ZodCatch({innerType:type,typeName:ZodFirstPartyTypeKind.ZodCatch,catchValue:typeof params.catch==="function"?params.catch:()=>params.catch,...processCreateParams(params)})};ZodNaN=class ZodNaN extends ZodType{_parse(input){if(this._getType(input)!==ZodParsedType.nan){let ctx=this._getOrReturnCtx(input);return addIssueToContext(ctx,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.nan,received:ctx.parsedType}),INVALID}return{status:"valid",value:input.data}}};ZodNaN.create=(params)=>{return new ZodNaN({typeName:ZodFirstPartyTypeKind.ZodNaN,...processCreateParams(params)})};BRAND=Symbol("zod_brand");ZodBranded=class ZodBranded extends ZodType{_parse(input){let{ctx}=this._processInputParams(input),data=ctx.data;return this._def.type._parse({data,path:ctx.path,parent:ctx})}unwrap(){return this._def.type}};ZodPipeline=class ZodPipeline extends ZodType{_parse(input){let{status,ctx}=this._processInputParams(input);if(ctx.common.async)return(async()=>{let inResult=await this._def.in._parseAsync({data:ctx.data,path:ctx.path,parent:ctx});if(inResult.status==="aborted")return INVALID;if(inResult.status==="dirty")return status.dirty(),DIRTY(inResult.value);else return this._def.out._parseAsync({data:inResult.value,path:ctx.path,parent:ctx})})();else{let inResult=this._def.in._parseSync({data:ctx.data,path:ctx.path,parent:ctx});if(inResult.status==="aborted")return INVALID;if(inResult.status==="dirty")return status.dirty(),{status:"dirty",value:inResult.value};else return this._def.out._parseSync({data:inResult.value,path:ctx.path,parent:ctx})}}static create(a,b){return new ZodPipeline({in:a,out:b,typeName:ZodFirstPartyTypeKind.ZodPipeline})}};ZodReadonly=class ZodReadonly extends ZodType{_parse(input){let result2=this._def.innerType._parse(input),freeze=(data)=>{if(isValid(data))data.value=Object.freeze(data.value);return data};return isAsync(result2)?result2.then((data)=>freeze(data)):freeze(result2)}unwrap(){return this._def.innerType}};ZodReadonly.create=(type,params)=>{return new ZodReadonly({innerType:type,typeName:ZodFirstPartyTypeKind.ZodReadonly,...processCreateParams(params)})};late={object:ZodObject.lazycreate};(function(ZodFirstPartyTypeKind2){ZodFirstPartyTypeKind2.ZodString="ZodString",ZodFirstPartyTypeKind2.ZodNumber="ZodNumber",ZodFirstPartyTypeKind2.ZodNaN="ZodNaN",ZodFirstPartyTypeKind2.ZodBigInt="ZodBigInt",ZodFirstPartyTypeKind2.ZodBoolean="ZodBoolean",ZodFirstPartyTypeKind2.ZodDate="ZodDate",ZodFirstPartyTypeKind2.ZodSymbol="ZodSymbol",ZodFirstPartyTypeKind2.ZodUndefined="ZodUndefined",ZodFirstPartyTypeKind2.ZodNull="ZodNull",ZodFirstPartyTypeKind2.ZodAny="ZodAny",ZodFirstPartyTypeKind2.ZodUnknown="ZodUnknown",ZodFirstPartyTypeKind2.ZodNever="ZodNever",ZodFirstPartyTypeKind2.ZodVoid="ZodVoid",ZodFirstPartyTypeKind2.ZodArray="ZodArray",ZodFirstPartyTypeKind2.ZodObject="ZodObject",ZodFirstPartyTypeKind2.ZodUnion="ZodUnion",ZodFirstPartyTypeKind2.ZodDiscriminatedUnion="ZodDiscriminatedUnion",ZodFirstPartyTypeKind2.ZodIntersection="ZodIntersection",ZodFirstPartyTypeKind2.ZodTuple="ZodTuple",ZodFirstPartyTypeKind2.ZodRecord="ZodRecord",ZodFirstPartyTypeKind2.ZodMap="ZodMap",ZodFirstPartyTypeKind2.ZodSet="ZodSet",ZodFirstPartyTypeKind2.ZodFunction="ZodFunction",ZodFirstPartyTypeKind2.ZodLazy="ZodLazy",ZodFirstPartyTypeKind2.ZodLiteral="ZodLiteral",ZodFirstPartyTypeKind2.ZodEnum="ZodEnum",ZodFirstPartyTypeKind2.ZodEffects="ZodEffects",ZodFirstPartyTypeKind2.ZodNativeEnum="ZodNativeEnum",ZodFirstPartyTypeKind2.ZodOptional="ZodOptional",ZodFirstPartyTypeKind2.ZodNullable="ZodNullable",ZodFirstPartyTypeKind2.ZodDefault="ZodDefault",ZodFirstPartyTypeKind2.ZodCatch="ZodCatch",ZodFirstPartyTypeKind2.ZodPromise="ZodPromise",ZodFirstPartyTypeKind2.ZodBranded="ZodBranded",ZodFirstPartyTypeKind2.ZodPipeline="ZodPipeline",ZodFirstPartyTypeKind2.ZodReadonly="ZodReadonly"})(ZodFirstPartyTypeKind||(ZodFirstPartyTypeKind={}));stringType=ZodString.create,numberType=ZodNumber.create,nanType=ZodNaN.create,bigIntType=ZodBigInt.create,booleanType=ZodBoolean.create,dateType=ZodDate.create,symbolType=ZodSymbol.create,undefinedType=ZodUndefined.create,nullType=ZodNull.create,anyType=ZodAny.create,unknownType=ZodUnknown.create,neverType=ZodNever.create,voidType=ZodVoid.create,arrayType=ZodArray.create,objectType=ZodObject.create,strictObjectType=ZodObject.strictCreate,unionType=ZodUnion.create,discriminatedUnionType=ZodDiscriminatedUnion.create,intersectionType=ZodIntersection.create,tupleType=ZodTuple.create,recordType=ZodRecord.create,mapType=ZodMap.create,setType=ZodSet.create,functionType=ZodFunction.create,lazyType=ZodLazy.create,literalType=ZodLiteral.create,enumType=ZodEnum.create,nativeEnumType=ZodNativeEnum.create,promiseType=ZodPromise.create,effectsType=ZodEffects.create,optionalType=ZodOptional.create,nullableType=ZodNullable.create,preprocessType=ZodEffects.createWithPreprocess,pipelineType=ZodPipeline.create,coerce={string:(arg)=>ZodString.create({...arg,coerce:!0}),number:(arg)=>ZodNumber.create({...arg,coerce:!0}),boolean:(arg)=>ZodBoolean.create({...arg,coerce:!0}),bigint:(arg)=>ZodBigInt.create({...arg,coerce:!0}),date:(arg)=>ZodDate.create({...arg,coerce:!0})},NEVER=INVALID});var exports_external={};__export(exports_external,{void:()=>voidType,util:()=>util,unknown:()=>unknownType,union:()=>unionType,undefined:()=>undefinedType,tuple:()=>tupleType,transformer:()=>effectsType,symbol:()=>symbolType,string:()=>stringType,strictObject:()=>strictObjectType,setErrorMap:()=>setErrorMap,set:()=>setType,record:()=>recordType,quotelessJson:()=>quotelessJson,promise:()=>promiseType,preprocess:()=>preprocessType,pipeline:()=>pipelineType,ostring:()=>ostring,optional:()=>optionalType,onumber:()=>onumber,oboolean:()=>oboolean,objectUtil:()=>objectUtil,object:()=>objectType,number:()=>numberType,nullable:()=>nullableType,null:()=>nullType,never:()=>neverType,nativeEnum:()=>nativeEnumType,nan:()=>nanType,map:()=>mapType,makeIssue:()=>makeIssue,literal:()=>literalType,lazy:()=>lazyType,late:()=>late,isValid:()=>isValid,isDirty:()=>isDirty,isAsync:()=>isAsync,isAborted:()=>isAborted,intersection:()=>intersectionType,instanceof:()=>instanceOfType,getParsedType:()=>getParsedType,getErrorMap:()=>getErrorMap,function:()=>functionType,enum:()=>enumType,effect:()=>effectsType,discriminatedUnion:()=>discriminatedUnionType,defaultErrorMap:()=>en_default,datetimeRegex:()=>datetimeRegex,date:()=>dateType,custom:()=>custom,coerce:()=>coerce,boolean:()=>booleanType,bigint:()=>bigIntType,array:()=>arrayType,any:()=>anyType,addIssueToContext:()=>addIssueToContext,ZodVoid:()=>ZodVoid,ZodUnknown:()=>ZodUnknown,ZodUnion:()=>ZodUnion,ZodUndefined:()=>ZodUndefined,ZodType:()=>ZodType,ZodTuple:()=>ZodTuple,ZodTransformer:()=>ZodEffects,ZodSymbol:()=>ZodSymbol,ZodString:()=>ZodString,ZodSet:()=>ZodSet,ZodSchema:()=>ZodType,ZodRecord:()=>ZodRecord,ZodReadonly:()=>ZodReadonly,ZodPromise:()=>ZodPromise,ZodPipeline:()=>ZodPipeline,ZodParsedType:()=>ZodParsedType,ZodOptional:()=>ZodOptional,ZodObject:()=>ZodObject,ZodNumber:()=>ZodNumber,ZodNullable:()=>ZodNullable,ZodNull:()=>ZodNull,ZodNever:()=>ZodNever,ZodNativeEnum:()=>ZodNativeEnum,ZodNaN:()=>ZodNaN,ZodMap:()=>ZodMap,ZodLiteral:()=>ZodLiteral,ZodLazy:()=>ZodLazy,ZodIssueCode:()=>ZodIssueCode,ZodIntersection:()=>ZodIntersection,ZodFunction:()=>ZodFunction,ZodFirstPartyTypeKind:()=>ZodFirstPartyTypeKind,ZodError:()=>ZodError,ZodEnum:()=>ZodEnum,ZodEffects:()=>ZodEffects,ZodDiscriminatedUnion:()=>ZodDiscriminatedUnion,ZodDefault:()=>ZodDefault,ZodDate:()=>ZodDate,ZodCatch:()=>ZodCatch,ZodBranded:()=>ZodBranded,ZodBoolean:()=>ZodBoolean,ZodBigInt:()=>ZodBigInt,ZodArray:()=>ZodArray,ZodAny:()=>ZodAny,Schema:()=>ZodType,ParseStatus:()=>ParseStatus,OK:()=>OK,NEVER:()=>NEVER,INVALID:()=>INVALID,EMPTY_PATH:()=>EMPTY_PATH,DIRTY:()=>DIRTY,BRAND:()=>BRAND});var init_external=__esm(()=>{init_errors();init_parseUtil();init_typeAliases();init_util();init_types();init_ZodError()});var init_zod=__esm(()=>{init_external();init_external()});var exports_types={};__export(exports_types,{isBlockingEvent:()=>isBlockingEvent,DISPATCHED_EVENT_MATCHERS:()=>DISPATCHED_EVENT_MATCHERS,DISPATCHED_EVENTS:()=>DISPATCHED_EVENTS,CODEX_DISPATCHED_EVENT_MATCHERS:()=>CODEX_DISPATCHED_EVENT_MATCHERS});function isBlockingEvent(event){return BLOCKING_EVENTS.has(event)}var DISPATCHED_EVENT_MATCHERS,CODEX_DISPATCHED_EVENT_MATCHERS,DISPATCHED_EVENTS,BLOCKING_EVENTS;var init_types2=__esm(()=>{DISPATCHED_EVENT_MATCHERS={PreToolUse:"*",PostToolUse:"SendMessage"},CODEX_DISPATCHED_EVENT_MATCHERS={PreToolUse:"*",PostToolUse:"SendMessage",UserPromptSubmit:"*",Stop:"*"},DISPATCHED_EVENTS=Object.keys(DISPATCHED_EVENT_MATCHERS),BLOCKING_EVENTS=new Set(["PreToolUse","UserPromptSubmit","TeammateIdle","TaskCompleted","PermissionRequest"])});var exports_inject={};__export(exports_inject,{isTeamHooked:()=>isTeamHooked,injectTeamHooks:()=>injectTeamHooks,buildDispatchCommand:()=>buildDispatchCommand});import{existsSync as existsSync2}from"fs";import{mkdir,readFile as readFile2,writeFile as writeFile2}from"fs/promises";import{homedir as homedir2}from"os";import{join as join3}from"path";import{fileURLToPath}from"url";function escapeShellArg(arg){return`'${arg.replace(/'/g,"'\\''")}'`}function compiledBinaryCandidates(){let candidates=[];if(process.env.GENIE_HOOK_BIN)candidates.push(process.env.GENIE_HOOK_BIN);let home=process.env.GENIE_HOME??join3(homedir2(),".genie");candidates.push(join3(home,"bin","genie-hook"));try{let repoBin=fileURLToPath(new URL("../../dist/genie-hook",import.meta.url));candidates.push(repoBin)}catch{}return candidates}function buildDispatchCommand(){for(let candidate of compiledBinaryCandidates())if(existsSync2(candidate))return escapeShellArg(candidate);let entrypoint=fileURLToPath(new URL("../genie.ts",import.meta.url));if(!existsSync2(entrypoint))return"genie hook dispatch";let bun=process.execPath||"bun";return`${escapeShellArg(bun)} run ${escapeShellArg(entrypoint)} hook dispatch`}function isGenieDispatchCommand(command){return typeof command==="string"&&/(?:^|\s)hook\s+dispatch(?:\s|$)/.test(command)}function claudeConfigDir(){return process.env.CLAUDE_CONFIG_DIR??join3(homedir2(),".claude")}function teamSettingsPath(teamName){let sanitized=teamName.replace(/[^a-zA-Z0-9]/g,"-").toLowerCase();return join3(claudeConfigDir(),"teams",sanitized,"settings.json")}function buildHooksConfig(){let hooks={},dispatchCommand=buildDispatchCommand();for(let[event,matcher]of Object.entries(DISPATCHED_EVENT_MATCHERS))hooks[event]=[{matcher,hooks:[{type:"command",command:dispatchCommand,timeout:DISPATCH_TIMEOUT}]}];return hooks}async function readSettings(settingsPath){if(!existsSync2(settingsPath))return{};try{return JSON.parse(await readFile2(settingsPath,"utf-8"))}catch{return{}}}function allEventsAlreadyInjected(existingHooks,hooksConfig){return DISPATCHED_EVENTS.every((event)=>{let existing=existingHooks[event],desiredCommand=hooksConfig[event][0].hooks[0].command,desiredMatcher=hooksConfig[event][0].matcher;return existing?.some((m)=>m.matcher===desiredMatcher&&m.hooks?.some((h)=>h.command===desiredCommand))})}function hasNoObsoleteGenieEntries(existingHooks){return Object.keys(existingHooks).every((event)=>{if(DISPATCHED_EVENTS.includes(event))return!0;return!existingHooks[event]?.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)))})}function pruneObsoleteGenieEntries(mergedHooks){for(let event of Object.keys(mergedHooks)){if(DISPATCHED_EVENTS.includes(event))continue;let cleaned=(mergedHooks[event]??[]).map((matcher)=>({...matcher,hooks:matcher.hooks?.filter((hook)=>!isGenieDispatchCommand(hook.command))})).filter((matcher)=>(matcher.hooks?.length??0)>0);if(cleaned.length===0)delete mergedHooks[event];else mergedHooks[event]=cleaned}}function refreshMatcherEntries(entries,genieEntry){return entries.map((matcher)=>{let hasGenieHook=matcher.hooks?.some((h)=>isGenieDispatchCommand(h.command));return{...matcher,matcher:hasGenieHook?genieEntry.matcher:matcher.matcher,hooks:matcher.hooks?.map((hook)=>isGenieDispatchCommand(hook.command)?{...hook,command:genieEntry.hooks[0].command,timeout:DISPATCH_TIMEOUT}:hook)}})}function upsertGenieEntry(mergedHooks,event,genieEntry){let existingEntries=refreshMatcherEntries(mergedHooks[event]??[],genieEntry),alreadyPresent=existingEntries.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)));mergedHooks[event]=alreadyPresent?existingEntries:[...existingEntries,genieEntry]}async function injectIntoFile(settingsPath){let settings=await readSettings(settingsPath),hooksConfig=buildHooksConfig(),existingHooks=settings.hooks;if(existingHooks&&allEventsAlreadyInjected(existingHooks,hooksConfig)&&hasNoObsoleteGenieEntries(existingHooks))return!1;let mergedHooks=existingHooks?{...existingHooks}:{};pruneObsoleteGenieEntries(mergedHooks);for(let event of DISPATCHED_EVENTS)upsertGenieEntry(mergedHooks,event,hooksConfig[event][0]);settings.hooks=mergedHooks;let dir=join3(settingsPath,"..");return await mkdir(dir,{recursive:!0}),await writeFile2(settingsPath,JSON.stringify(settings,null,2)),!0}async function injectTeamHooks(teamName){let path=teamSettingsPath(teamName);return injectIntoFile(path)}async function isTeamHooked(teamName){let path=teamSettingsPath(teamName);if(!existsSync2(path))return!1;try{let content=await readFile2(path,"utf-8"),hooks=JSON.parse(content).hooks;if(!hooks)return!1;return DISPATCHED_EVENTS.every((event)=>{return hooks[event]?.some((m)=>m.hooks?.some((h)=>isGenieDispatchCommand(h.command)))})}catch{return!1}}var DISPATCH_TIMEOUT=15;var init_inject=__esm(()=>{init_types2()});function normalizeValue(v){if(v===void 0||v===null)return;if(v==="")return;if(v==="inherit")return;return v}function resolveField(agent,field,ctx){return resolveFieldWithSource(agent,field,ctx).value}function resolveFieldWithSource(agent,field,ctx){let agentVal=normalizeValue(agent[field]);if(agentVal!==void 0)return{value:agentVal,source:"explicit"};if(ctx.parent){let parentVal=normalizeValue(ctx.parent.fields[field]);if(parentVal!==void 0)return{value:parentVal,source:`parent:${ctx.parent.name}`}}if(ctx.workspaceDefaults){let wsVal=normalizeValue(ctx.workspaceDefaults[field]);if(wsVal!==void 0)return{value:wsVal,source:"workspace"}}return{value:BUILTIN_DEFAULTS[field],source:"built-in"}}function computeEffectiveDefaults(workspaceDefaults){if(!workspaceDefaults)return{...BUILTIN_DEFAULTS};let result2={...BUILTIN_DEFAULTS};for(let key of Object.keys(BUILTIN_DEFAULTS)){let wsVal=normalizeValue(workspaceDefaults[key]);if(wsVal!==void 0)result2[key]=wsVal}return result2}var BUILTIN_DEFAULTS,RESOLVED_FIELDS;var init_defaults=__esm(()=>{BUILTIN_DEFAULTS={model:"opus",promptMode:"append",color:"blue",effort:"high",thinking:"enabled",permissionMode:"auto"},RESOLVED_FIELDS=["model"]});var exports_js_yaml={};__export(exports_js_yaml,{types:()=>types2,safeLoadAll:()=>safeLoadAll,safeLoad:()=>safeLoad,safeDump:()=>safeDump,loadAll:()=>loadAll,load:()=>load,dump:()=>dump,default:()=>jsYaml,YAMLException:()=>YAMLException,Type:()=>Type,Schema:()=>Schema,JSON_SCHEMA:()=>JSON_SCHEMA,FAILSAFE_SCHEMA:()=>FAILSAFE_SCHEMA,DEFAULT_SCHEMA:()=>DEFAULT_SCHEMA,CORE_SCHEMA:()=>CORE_SCHEMA});function isNothing(subject){return typeof subject>"u"||subject===null}function isObject(subject){return typeof subject==="object"&&subject!==null}function toArray(sequence){if(Array.isArray(sequence))return sequence;else if(isNothing(sequence))return[];return[sequence]}function extend(target,source){var index,length,key,sourceKeys;if(source){sourceKeys=Object.keys(source);for(index=0,length=sourceKeys.length;index<length;index+=1)key=sourceKeys[index],target[key]=source[key]}return target}function repeat(string,count){var result2="",cycle;for(cycle=0;cycle<count;cycle+=1)result2+=string;return result2}function isNegativeZero(number){return number===0&&Number.NEGATIVE_INFINITY===1/number}function formatError(exception,compact){var where="",message=exception.reason||"(unknown reason)";if(!exception.mark)return message;if(exception.mark.name)where+='in "'+exception.mark.name+'" ';if(where+="("+(exception.mark.line+1)+":"+(exception.mark.column+1)+")",!compact&&exception.mark.snippet)where+=`
259
152
 
260
153
  `+exception.mark.snippet;return message+" "+where}function YAMLException$1(reason,mark){if(Error.call(this),this.name="YAMLException",this.reason=reason,this.mark=mark,this.message=formatError(this,!1),Error.captureStackTrace)Error.captureStackTrace(this,this.constructor);else this.stack=Error().stack||""}function getLine(buffer,lineStart,lineEnd,position,maxLineLength){var head="",tail="",maxHalfLength=Math.floor(maxLineLength/2)-1;if(position-lineStart>maxHalfLength)head=" ... ",lineStart=position-maxHalfLength+head.length;if(lineEnd-position>maxHalfLength)tail=" ...",lineEnd=position+maxHalfLength-tail.length;return{str:head+buffer.slice(lineStart,lineEnd).replace(/\t/g,"\u2192")+tail,pos:position-lineStart+head.length}}function padStart(string,max){return common.repeat(" ",max-string.length)+string}function makeSnippet(mark,options){if(options=Object.create(options||null),!mark.buffer)return null;if(!options.maxLength)options.maxLength=79;if(typeof options.indent!=="number")options.indent=1;if(typeof options.linesBefore!=="number")options.linesBefore=3;if(typeof options.linesAfter!=="number")options.linesAfter=2;var re=/\r?\n|\r|\0/g,lineStarts=[0],lineEnds=[],match,foundLineNo=-1;while(match=re.exec(mark.buffer))if(lineEnds.push(match.index),lineStarts.push(match.index+match[0].length),mark.position<=match.index&&foundLineNo<0)foundLineNo=lineStarts.length-2;if(foundLineNo<0)foundLineNo=lineStarts.length-1;var result2="",i,line,lineNoLength=Math.min(mark.line+options.linesAfter,lineEnds.length).toString().length,maxLineLength=options.maxLength-(options.indent+lineNoLength+3);for(i=1;i<=options.linesBefore;i++){if(foundLineNo-i<0)break;line=getLine(mark.buffer,lineStarts[foundLineNo-i],lineEnds[foundLineNo-i],mark.position-(lineStarts[foundLineNo]-lineStarts[foundLineNo-i]),maxLineLength),result2=common.repeat(" ",options.indent)+padStart((mark.line-i+1).toString(),lineNoLength)+" | "+line.str+`
261
154
  `+result2}line=getLine(mark.buffer,lineStarts[foundLineNo],lineEnds[foundLineNo],mark.position,maxLineLength),result2+=common.repeat(" ",options.indent)+padStart((mark.line+1).toString(),lineNoLength)+" | "+line.str+`
@@ -286,27 +179,32 @@ Your role adapts based on workspace maturity:
286
179
  `,line.length-start>width&&curr>start)result2+=line.slice(start,curr)+`
287
180
  `+line.slice(curr+1);else result2+=line.slice(start);return result2.slice(1)}function escapeString(string){var result2="",char=0,escapeSeq;for(var i2=0;i2<string.length;char>=65536?i2+=2:i2++)if(char=codePointAt(string,i2),escapeSeq=ESCAPE_SEQUENCES[char],!escapeSeq&&isPrintable(char)){if(result2+=string[i2],char>=65536)result2+=string[i2+1]}else result2+=escapeSeq||encodeHex(char);return result2}function writeFlowSequence(state,level,object){var _result="",_tag=state.tag,index,length,value;for(index=0,length=object.length;index<length;index+=1){if(value=object[index],state.replacer)value=state.replacer.call(object,String(index),value);if(writeNode(state,level,value,!1,!1)||typeof value>"u"&&writeNode(state,level,null,!1,!1)){if(_result!=="")_result+=","+(!state.condenseFlow?" ":"");_result+=state.dump}}state.tag=_tag,state.dump="["+_result+"]"}function writeBlockSequence(state,level,object,compact){var _result="",_tag=state.tag,index,length,value;for(index=0,length=object.length;index<length;index+=1){if(value=object[index],state.replacer)value=state.replacer.call(object,String(index),value);if(writeNode(state,level+1,value,!0,!0,!1,!0)||typeof value>"u"&&writeNode(state,level+1,null,!0,!0,!1,!0)){if(!compact||_result!=="")_result+=generateNextLine(state,level);if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0))_result+="-";else _result+="- ";_result+=state.dump}}state.tag=_tag,state.dump=_result||"[]"}function writeFlowMapping(state,level,object){var _result="",_tag=state.tag,objectKeyList=Object.keys(object),index,length,objectKey,objectValue,pairBuffer;for(index=0,length=objectKeyList.length;index<length;index+=1){if(pairBuffer="",_result!=="")pairBuffer+=", ";if(state.condenseFlow)pairBuffer+='"';if(objectKey=objectKeyList[index],objectValue=object[objectKey],state.replacer)objectValue=state.replacer.call(object,objectKey,objectValue);if(!writeNode(state,level,objectKey,!1,!1))continue;if(state.dump.length>1024)pairBuffer+="? ";if(pairBuffer+=state.dump+(state.condenseFlow?'"':"")+":"+(state.condenseFlow?"":" "),!writeNode(state,level,objectValue,!1,!1))continue;pairBuffer+=state.dump,_result+=pairBuffer}state.tag=_tag,state.dump="{"+_result+"}"}function writeBlockMapping(state,level,object,compact){var _result="",_tag=state.tag,objectKeyList=Object.keys(object),index,length,objectKey,objectValue,explicitPair,pairBuffer;if(state.sortKeys===!0)objectKeyList.sort();else if(typeof state.sortKeys==="function")objectKeyList.sort(state.sortKeys);else if(state.sortKeys)throw new exception("sortKeys must be a boolean or a function");for(index=0,length=objectKeyList.length;index<length;index+=1){if(pairBuffer="",!compact||_result!=="")pairBuffer+=generateNextLine(state,level);if(objectKey=objectKeyList[index],objectValue=object[objectKey],state.replacer)objectValue=state.replacer.call(object,objectKey,objectValue);if(!writeNode(state,level+1,objectKey,!0,!0,!0))continue;if(explicitPair=state.tag!==null&&state.tag!=="?"||state.dump&&state.dump.length>1024,explicitPair)if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0))pairBuffer+="?";else pairBuffer+="? ";if(pairBuffer+=state.dump,explicitPair)pairBuffer+=generateNextLine(state,level);if(!writeNode(state,level+1,objectValue,!0,explicitPair))continue;if(state.dump&&CHAR_LINE_FEED===state.dump.charCodeAt(0))pairBuffer+=":";else pairBuffer+=": ";pairBuffer+=state.dump,_result+=pairBuffer}state.tag=_tag,state.dump=_result||"{}"}function detectType(state,object,explicit){var _result,typeList,index,length,type2,style;typeList=explicit?state.explicitTypes:state.implicitTypes;for(index=0,length=typeList.length;index<length;index+=1)if(type2=typeList[index],(type2.instanceOf||type2.predicate)&&(!type2.instanceOf||typeof object==="object"&&object instanceof type2.instanceOf)&&(!type2.predicate||type2.predicate(object))){if(explicit)if(type2.multi&&type2.representName)state.tag=type2.representName(object);else state.tag=type2.tag;else state.tag="?";if(type2.represent){if(style=state.styleMap[type2.tag]||type2.defaultStyle,_toString.call(type2.represent)==="[object Function]")_result=type2.represent(object,style);else if(_hasOwnProperty.call(type2.represent,style))_result=type2.represent[style](object,style);else throw new exception("!<"+type2.tag+'> tag resolver accepts not "'+style+'" style');state.dump=_result}return!0}return!1}function writeNode(state,level,object,block,compact,iskey,isblockseq){if(state.tag=null,state.dump=object,!detectType(state,object,!1))detectType(state,object,!0);var type2=_toString.call(state.dump),inblock=block,tagStr;if(block)block=state.flowLevel<0||state.flowLevel>level;var objectOrArray=type2==="[object Object]"||type2==="[object Array]",duplicateIndex,duplicate;if(objectOrArray)duplicateIndex=state.duplicates.indexOf(object),duplicate=duplicateIndex!==-1;if(state.tag!==null&&state.tag!=="?"||duplicate||state.indent!==2&&level>0)compact=!1;if(duplicate&&state.usedDuplicates[duplicateIndex])state.dump="*ref_"+duplicateIndex;else{if(objectOrArray&&duplicate&&!state.usedDuplicates[duplicateIndex])state.usedDuplicates[duplicateIndex]=!0;if(type2==="[object Object]"){if(block&&Object.keys(state.dump).length!==0){if(writeBlockMapping(state,level,state.dump,compact),duplicate)state.dump="&ref_"+duplicateIndex+state.dump}else if(writeFlowMapping(state,level,state.dump),duplicate)state.dump="&ref_"+duplicateIndex+" "+state.dump}else if(type2==="[object Array]"){if(block&&state.dump.length!==0){if(state.noArrayIndent&&!isblockseq&&level>0)writeBlockSequence(state,level-1,state.dump,compact);else writeBlockSequence(state,level,state.dump,compact);if(duplicate)state.dump="&ref_"+duplicateIndex+state.dump}else if(writeFlowSequence(state,level,state.dump),duplicate)state.dump="&ref_"+duplicateIndex+" "+state.dump}else if(type2==="[object String]"){if(state.tag!=="?")writeScalar(state,state.dump,level,iskey,inblock)}else if(type2==="[object Undefined]")return!1;else{if(state.skipInvalid)return!1;throw new exception("unacceptable kind of an object to dump "+type2)}if(state.tag!==null&&state.tag!=="?"){if(tagStr=encodeURI(state.tag[0]==="!"?state.tag.slice(1):state.tag).replace(/!/g,"%21"),state.tag[0]==="!")tagStr="!"+tagStr;else if(tagStr.slice(0,18)==="tag:yaml.org,2002:")tagStr="!!"+tagStr.slice(18);else tagStr="!<"+tagStr+">";state.dump=tagStr+" "+state.dump}}return!0}function getDuplicateReferences(object,state){var objects=[],duplicatesIndexes=[],index,length;inspectNode(object,objects,duplicatesIndexes);for(index=0,length=duplicatesIndexes.length;index<length;index+=1)state.duplicates.push(objects[duplicatesIndexes[index]]);state.usedDuplicates=Array(length)}function inspectNode(object,objects,duplicatesIndexes){var objectKeyList,index,length;if(object!==null&&typeof object==="object")if(index=objects.indexOf(object),index!==-1){if(duplicatesIndexes.indexOf(index)===-1)duplicatesIndexes.push(index)}else if(objects.push(object),Array.isArray(object))for(index=0,length=object.length;index<length;index+=1)inspectNode(object[index],objects,duplicatesIndexes);else{objectKeyList=Object.keys(object);for(index=0,length=objectKeyList.length;index<length;index+=1)inspectNode(object[objectKeyList[index]],objects,duplicatesIndexes)}}function dump$1(input,options){options=options||{};var state=new State(options);if(!state.noRefs)getDuplicateReferences(input,state);var value=input;if(state.replacer)value=state.replacer.call({"":value},"",value);if(writeNode(state,0,value,!0,!0))return state.dump+`
288
181
  `;return""}function renamed(from,to){return function(){throw Error("Function yaml."+from+" is removed in js-yaml 4. Use yaml."+to+" instead, which is now safe by default.")}}var isNothing_1,isObject_1,toArray_1,repeat_1,isNegativeZero_1,extend_1,common,exception,snippet,TYPE_CONSTRUCTOR_OPTIONS,YAML_NODE_KINDS,type,schema,str,seq,map,failsafe,_null,bool,int,YAML_FLOAT_PATTERN,SCIENTIFIC_WITHOUT_DOT,float,json,core,YAML_DATE_REGEXP,YAML_TIMESTAMP_REGEXP,timestamp,merge,BASE64_MAP=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
289
- \r`,binary,_hasOwnProperty$3,_toString$2,omap,_toString$1,pairs,_hasOwnProperty$2,set,_default,_hasOwnProperty$1,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE,PATTERN_NON_ASCII_LINE_BREAKS,PATTERN_FLOW_INDICATORS,PATTERN_TAG_HANDLE,PATTERN_TAG_URI,simpleEscapeCheck,simpleEscapeMap,i,directiveHandlers,loadAll_1,load_1,loader,_toString,_hasOwnProperty,CHAR_BOM=65279,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_CARRIAGE_RETURN=13,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES,DEPRECATED_BOOLEANS_SYNTAX,DEPRECATED_BASE60_SYNTAX,QUOTING_TYPE_SINGLE=1,QUOTING_TYPE_DOUBLE=2,STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5,dump_1,dumper,Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load,loadAll,dump,YAMLException,types2,safeLoad,safeLoadAll,safeDump,jsYaml;var init_js_yaml=__esm(()=>{/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */isNothing_1=isNothing,isObject_1=isObject,toArray_1=toArray,repeat_1=repeat,isNegativeZero_1=isNegativeZero,extend_1=extend,common={isNothing:isNothing_1,isObject:isObject_1,toArray:toArray_1,repeat:repeat_1,isNegativeZero:isNegativeZero_1,extend:extend_1};YAMLException$1.prototype=Object.create(Error.prototype);YAMLException$1.prototype.constructor=YAMLException$1;YAMLException$1.prototype.toString=function(compact){return this.name+": "+formatError(this,compact)};exception=YAMLException$1;snippet=makeSnippet,TYPE_CONSTRUCTOR_OPTIONS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];type=Type$1;Schema$1.prototype.extend=function(definition){var implicit=[],explicit=[];if(definition instanceof type)explicit.push(definition);else if(Array.isArray(definition))explicit=explicit.concat(definition);else if(definition&&(Array.isArray(definition.implicit)||Array.isArray(definition.explicit))){if(definition.implicit)implicit=implicit.concat(definition.implicit);if(definition.explicit)explicit=explicit.concat(definition.explicit)}else throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");implicit.forEach(function(type$1){if(!(type$1 instanceof type))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(type$1.loadKind&&type$1.loadKind!=="scalar")throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(type$1.multi)throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),explicit.forEach(function(type$1){if(!(type$1 instanceof type))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var result2=Object.create(Schema$1.prototype);return result2.implicit=(this.implicit||[]).concat(implicit),result2.explicit=(this.explicit||[]).concat(explicit),result2.compiledImplicit=compileList(result2,"implicit"),result2.compiledExplicit=compileList(result2,"explicit"),result2.compiledTypeMap=compileMap(result2.compiledImplicit,result2.compiledExplicit),result2};schema=Schema$1,str=new type("tag:yaml.org,2002:str",{kind:"scalar",construct:function(data){return data!==null?data:""}}),seq=new type("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(data){return data!==null?data:[]}}),map=new type("tag:yaml.org,2002:map",{kind:"mapping",construct:function(data){return data!==null?data:{}}}),failsafe=new schema({explicit:[str,seq,map]});_null=new type("tag:yaml.org,2002:null",{kind:"scalar",resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});bool=new type("tag:yaml.org,2002:bool",{kind:"scalar",resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean,represent:{lowercase:function(object){return object?"true":"false"},uppercase:function(object){return object?"TRUE":"FALSE"},camelcase:function(object){return object?"True":"False"}},defaultStyle:"lowercase"});int=new type("tag:yaml.org,2002:int",{kind:"scalar",resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger,represent:{binary:function(obj){return obj>=0?"0b"+obj.toString(2):"-0b"+obj.toString(2).slice(1)},octal:function(obj){return obj>=0?"0o"+obj.toString(8):"-0o"+obj.toString(8).slice(1)},decimal:function(obj){return obj.toString(10)},hexadecimal:function(obj){return obj>=0?"0x"+obj.toString(16).toUpperCase():"-0x"+obj.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;float=new type("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:"lowercase"}),json=failsafe.extend({implicit:[_null,bool,int,float]}),core=json,YAML_DATE_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");timestamp=new type("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp});merge=new type("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge});binary=new type("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}),_hasOwnProperty$3=Object.prototype.hasOwnProperty,_toString$2=Object.prototype.toString;omap=new type("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}),_toString$1=Object.prototype.toString;pairs=new type("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}),_hasOwnProperty$2=Object.prototype.hasOwnProperty;set=new type("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}),_default=core.extend({implicit:[timestamp,merge],explicit:[binary,omap,pairs,set]}),_hasOwnProperty$1=Object.prototype.hasOwnProperty,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;simpleEscapeCheck=Array(256),simpleEscapeMap=Array(256);for(i=0;i<256;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);directiveHandlers={YAML:function(state,name,args){var match,major,minor;if(state.version!==null)throwError(state,"duplication of %YAML directive");if(args.length!==1)throwError(state,"YAML directive accepts exactly one argument");if(match=/^([0-9]+)\.([0-9]+)$/.exec(args[0]),match===null)throwError(state,"ill-formed argument of the YAML directive");if(major=parseInt(match[1],10),minor=parseInt(match[2],10),major!==1)throwError(state,"unacceptable YAML version of the document");if(state.version=args[0],state.checkLineBreaks=minor<2,minor!==1&&minor!==2)throwWarning(state,"unsupported YAML version of the document")},TAG:function(state,name,args){var handle,prefix;if(args.length!==2)throwError(state,"TAG directive accepts exactly two arguments");if(handle=args[0],prefix=args[1],!PATTERN_TAG_HANDLE.test(handle))throwError(state,"ill-formed tag handle (first argument) of the TAG directive");if(_hasOwnProperty$1.call(state.tagMap,handle))throwError(state,'there is a previously declared suffix for "'+handle+'" tag handle');if(!PATTERN_TAG_URI.test(prefix))throwError(state,"ill-formed tag prefix (second argument) of the TAG directive");try{prefix=decodeURIComponent(prefix)}catch(err){throwError(state,"tag prefix is malformed: "+prefix)}state.tagMap[handle]=prefix}};loadAll_1=loadAll$1,load_1=load$1,loader={loadAll:loadAll_1,load:load_1},_toString=Object.prototype.toString,_hasOwnProperty=Object.prototype.hasOwnProperty,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0";ESCAPE_SEQUENCES[7]="\\a";ESCAPE_SEQUENCES[8]="\\b";ESCAPE_SEQUENCES[9]="\\t";ESCAPE_SEQUENCES[10]="\\n";ESCAPE_SEQUENCES[11]="\\v";ESCAPE_SEQUENCES[12]="\\f";ESCAPE_SEQUENCES[13]="\\r";ESCAPE_SEQUENCES[27]="\\e";ESCAPE_SEQUENCES[34]="\\\"";ESCAPE_SEQUENCES[92]="\\\\";ESCAPE_SEQUENCES[133]="\\N";ESCAPE_SEQUENCES[160]="\\_";ESCAPE_SEQUENCES[8232]="\\L";ESCAPE_SEQUENCES[8233]="\\P";DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],DEPRECATED_BASE60_SYNTAX=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;dump_1=dump$1,dumper={dump:dump_1};Type=type,Schema=schema,FAILSAFE_SCHEMA=failsafe,JSON_SCHEMA=json,CORE_SCHEMA=core,DEFAULT_SCHEMA=_default,load=loader.load,loadAll=loader.loadAll,dump=dumper.dump,YAMLException=exception,types2={binary,float,map,null:_null,pairs,set,timestamp,bool,int,merge,omap,seq,str},safeLoad=renamed("safeLoad","load"),safeLoadAll=renamed("safeLoadAll","loadAll"),safeDump=renamed("safeDump","dump"),jsYaml={Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load,loadAll,dump,YAMLException,types:types2,safeLoad,safeLoadAll,safeDump}});var exports_frontmatter={};__export(exports_frontmatter,{parseFrontmatter:()=>parseFrontmatter,AgentFrontmatterSchema:()=>AgentFrontmatterSchema});function extractRawYaml(content){let match=content.match(/^---\n([\s\S]*?)\n---/);if(!match)return null;try{let parsed=load(match[1]);if(typeof parsed!=="object"||parsed===null)return null;return parsed}catch{return null}}function warnUnknownFields(raw){for(let key of Object.keys(raw))if(!knownKeys.has(key))console.warn(`[frontmatter] Unknown field "${key}" \u2014 ignored.`)}function validateFieldByField(raw){let out={};for(let key of knownKeys){let fieldResult=AgentFrontmatterSchema.shape[key].safeParse(raw[key]);if(fieldResult.success){if(fieldResult.data!==void 0)out[key]=fieldResult.data}else if(raw[key]!==void 0)console.warn(`[frontmatter] Invalid value for "${key}": ${JSON.stringify(raw[key])} \u2014 using default.`)}return out}function parseFrontmatter(content){let raw=extractRawYaml(content);if(!raw)return{};warnUnknownFields(raw);let result2=AgentFrontmatterSchema.safeParse(raw);if(result2.success)return result2.data;return validateFieldByField(raw)}var promptModeValues,providerValues,AgentFrontmatterSchema,knownKeys;var init_frontmatter=__esm(()=>{init_js_yaml();init_zod();promptModeValues=["system","append"],providerValues=["claude","codex","claude-sdk"],AgentFrontmatterSchema=exports_external.object({name:exports_external.string().optional(),description:exports_external.string().optional(),model:exports_external.string().optional(),color:exports_external.string().optional(),promptMode:exports_external.enum(promptModeValues).optional(),provider:exports_external.enum(providerValues).optional(),tools:exports_external.array(exports_external.string()).optional(),permissionMode:exports_external.string().optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional()}).optional(),omniScopes:exports_external.array(exports_external.string()).optional(),hooks:exports_external.record(exports_external.unknown()).optional(),sdk:exports_external.record(exports_external.unknown()).optional(),bridgeTmuxSession:exports_external.string().optional()}),knownKeys=new Set(Object.keys(AgentFrontmatterSchema.shape))});import{existsSync as existsSync7,readFileSync as readFileSync5,readdirSync as readdirSync3,realpathSync as realpathSync3}from"fs";import{dirname as dirname4,join as join9,resolve as resolve2}from"path";function resolvePackageRoot(){let scriptPath=realpathSync3(process.argv[1]||""),candidates=[resolve2(dirname4(scriptPath),".."),resolve2(dirname4(scriptPath),"..",".."),resolve2(dirname4(import.meta.dir??__dirname),"..",".."),resolve2(dirname4(import.meta.dir??__dirname),"..")];for(let candidate of candidates)if(existsSync7(join9(candidate,"plugins","genie","agents")))return candidate;return candidates[0]}function scanAgents2(agentsDir){if(!existsSync7(agentsDir))return[];let agents=[],entries;try{entries=readdirSync3(agentsDir,{withFileTypes:!0})}catch{return[]}for(let entry of entries){if(!entry.isDirectory())continue;let agentsPath=join9(agentsDir,entry.name,"AGENTS.md");if(!existsSync7(agentsPath))continue;let content=readFileSync5(agentsPath,"utf-8"),fm=parseFrontmatter(content),name=fm.name||entry.name,isCouncil=name.startsWith("council");agents.push({name,description:fm.description||"",agentPath:agentsPath,model:normalizeValue(fm.model),promptMode:fm.promptMode||void 0,category:isCouncil?"council":"role",color:fm.color})}return agents}function getBuiltin(name){return ALL_BUILTINS.find((a)=>a.name===name)??null}function resolveBuiltinAgentPath(name){return getBuiltin(name)?.agentPath??null}var __dirname="/home/runner/_work/genie/genie/src/lib",AGENTS_DIR,_allAgents,BUILTIN_ROLES,BUILTIN_COUNCIL_MEMBERS,ALL_BUILTINS;var init_builtin_agents=__esm(()=>{init_defaults();init_frontmatter();AGENTS_DIR=join9(resolvePackageRoot(),"plugins","genie","agents"),_allAgents=scanAgents2(AGENTS_DIR),BUILTIN_ROLES=_allAgents.filter((a)=>a.category==="role"),BUILTIN_COUNCIL_MEMBERS=_allAgents.filter((a)=>a.category==="council"),ALL_BUILTINS=_allAgents});var exports_provider_models={};__export(exports_provider_models,{validateProviderModel:()=>validateProviderModel,sanitizeModelForProvider:()=>sanitizeModelForProvider,getProviderDefaultModel:()=>getProviderDefaultModel,CrossProviderModelError:()=>CrossProviderModelError});function classifyModel(model){for(let re of CLAUDE_MODEL_PATTERNS)if(re.test(model))return"claude";for(let re of CODEX_MODEL_PATTERNS)if(re.test(model))return"codex";return null}function providerFamily(provider){if(!provider)return null;let p=provider.toLowerCase();if(p==="claude"||p==="claude-sdk")return"claude";if(p==="codex")return"codex";return null}function getProviderDefaultModel(provider){if(providerFamily(provider)==="codex")return"gpt-5.5";return}function sanitizeModelForProvider(provider,model){if(!model)return getProviderDefaultModel(provider);let requestedFamily=providerFamily(provider);if(requestedFamily===null)return model;let modelFamily=classifyModel(model);if(modelFamily===null)return model;if(modelFamily===requestedFamily)return model;let def=getProviderDefaultModel(provider);return process.stderr.write(`[genie] dropping cross-provider model "${model}" (${modelFamily} family) for provider "${provider}" (${requestedFamily} family); using ${def?`default "${def}"`:"provider default"}.
182
+ \r`,binary,_hasOwnProperty$3,_toString$2,omap,_toString$1,pairs,_hasOwnProperty$2,set,_default,_hasOwnProperty$1,CONTEXT_FLOW_IN=1,CONTEXT_FLOW_OUT=2,CONTEXT_BLOCK_IN=3,CONTEXT_BLOCK_OUT=4,CHOMPING_CLIP=1,CHOMPING_STRIP=2,CHOMPING_KEEP=3,PATTERN_NON_PRINTABLE,PATTERN_NON_ASCII_LINE_BREAKS,PATTERN_FLOW_INDICATORS,PATTERN_TAG_HANDLE,PATTERN_TAG_URI,simpleEscapeCheck,simpleEscapeMap,i,directiveHandlers,loadAll_1,load_1,loader,_toString,_hasOwnProperty,CHAR_BOM=65279,CHAR_TAB=9,CHAR_LINE_FEED=10,CHAR_CARRIAGE_RETURN=13,CHAR_SPACE=32,CHAR_EXCLAMATION=33,CHAR_DOUBLE_QUOTE=34,CHAR_SHARP=35,CHAR_PERCENT=37,CHAR_AMPERSAND=38,CHAR_SINGLE_QUOTE=39,CHAR_ASTERISK=42,CHAR_COMMA=44,CHAR_MINUS=45,CHAR_COLON=58,CHAR_EQUALS=61,CHAR_GREATER_THAN=62,CHAR_QUESTION=63,CHAR_COMMERCIAL_AT=64,CHAR_LEFT_SQUARE_BRACKET=91,CHAR_RIGHT_SQUARE_BRACKET=93,CHAR_GRAVE_ACCENT=96,CHAR_LEFT_CURLY_BRACKET=123,CHAR_VERTICAL_LINE=124,CHAR_RIGHT_CURLY_BRACKET=125,ESCAPE_SEQUENCES,DEPRECATED_BOOLEANS_SYNTAX,DEPRECATED_BASE60_SYNTAX,QUOTING_TYPE_SINGLE=1,QUOTING_TYPE_DOUBLE=2,STYLE_PLAIN=1,STYLE_SINGLE=2,STYLE_LITERAL=3,STYLE_FOLDED=4,STYLE_DOUBLE=5,dump_1,dumper,Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load,loadAll,dump,YAMLException,types2,safeLoad,safeLoadAll,safeDump,jsYaml;var init_js_yaml=__esm(()=>{/*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT */isNothing_1=isNothing,isObject_1=isObject,toArray_1=toArray,repeat_1=repeat,isNegativeZero_1=isNegativeZero,extend_1=extend,common={isNothing:isNothing_1,isObject:isObject_1,toArray:toArray_1,repeat:repeat_1,isNegativeZero:isNegativeZero_1,extend:extend_1};YAMLException$1.prototype=Object.create(Error.prototype);YAMLException$1.prototype.constructor=YAMLException$1;YAMLException$1.prototype.toString=function(compact){return this.name+": "+formatError(this,compact)};exception=YAMLException$1;snippet=makeSnippet,TYPE_CONSTRUCTOR_OPTIONS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];type=Type$1;Schema$1.prototype.extend=function(definition){var implicit=[],explicit=[];if(definition instanceof type)explicit.push(definition);else if(Array.isArray(definition))explicit=explicit.concat(definition);else if(definition&&(Array.isArray(definition.implicit)||Array.isArray(definition.explicit))){if(definition.implicit)implicit=implicit.concat(definition.implicit);if(definition.explicit)explicit=explicit.concat(definition.explicit)}else throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");implicit.forEach(function(type$1){if(!(type$1 instanceof type))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(type$1.loadKind&&type$1.loadKind!=="scalar")throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(type$1.multi)throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),explicit.forEach(function(type$1){if(!(type$1 instanceof type))throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var result2=Object.create(Schema$1.prototype);return result2.implicit=(this.implicit||[]).concat(implicit),result2.explicit=(this.explicit||[]).concat(explicit),result2.compiledImplicit=compileList(result2,"implicit"),result2.compiledExplicit=compileList(result2,"explicit"),result2.compiledTypeMap=compileMap(result2.compiledImplicit,result2.compiledExplicit),result2};schema=Schema$1,str=new type("tag:yaml.org,2002:str",{kind:"scalar",construct:function(data){return data!==null?data:""}}),seq=new type("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(data){return data!==null?data:[]}}),map=new type("tag:yaml.org,2002:map",{kind:"mapping",construct:function(data){return data!==null?data:{}}}),failsafe=new schema({explicit:[str,seq,map]});_null=new type("tag:yaml.org,2002:null",{kind:"scalar",resolve:resolveYamlNull,construct:constructYamlNull,predicate:isNull,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});bool=new type("tag:yaml.org,2002:bool",{kind:"scalar",resolve:resolveYamlBoolean,construct:constructYamlBoolean,predicate:isBoolean,represent:{lowercase:function(object){return object?"true":"false"},uppercase:function(object){return object?"TRUE":"FALSE"},camelcase:function(object){return object?"True":"False"}},defaultStyle:"lowercase"});int=new type("tag:yaml.org,2002:int",{kind:"scalar",resolve:resolveYamlInteger,construct:constructYamlInteger,predicate:isInteger,represent:{binary:function(obj){return obj>=0?"0b"+obj.toString(2):"-0b"+obj.toString(2).slice(1)},octal:function(obj){return obj>=0?"0o"+obj.toString(8):"-0o"+obj.toString(8).slice(1)},decimal:function(obj){return obj.toString(10)},hexadecimal:function(obj){return obj>=0?"0x"+obj.toString(16).toUpperCase():"-0x"+obj.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),YAML_FLOAT_PATTERN=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");SCIENTIFIC_WITHOUT_DOT=/^[-+]?[0-9]+e/;float=new type("tag:yaml.org,2002:float",{kind:"scalar",resolve:resolveYamlFloat,construct:constructYamlFloat,predicate:isFloat,represent:representYamlFloat,defaultStyle:"lowercase"}),json=failsafe.extend({implicit:[_null,bool,int,float]}),core=json,YAML_DATE_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),YAML_TIMESTAMP_REGEXP=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");timestamp=new type("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:resolveYamlTimestamp,construct:constructYamlTimestamp,instanceOf:Date,represent:representYamlTimestamp});merge=new type("tag:yaml.org,2002:merge",{kind:"scalar",resolve:resolveYamlMerge});binary=new type("tag:yaml.org,2002:binary",{kind:"scalar",resolve:resolveYamlBinary,construct:constructYamlBinary,predicate:isBinary,represent:representYamlBinary}),_hasOwnProperty$3=Object.prototype.hasOwnProperty,_toString$2=Object.prototype.toString;omap=new type("tag:yaml.org,2002:omap",{kind:"sequence",resolve:resolveYamlOmap,construct:constructYamlOmap}),_toString$1=Object.prototype.toString;pairs=new type("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:resolveYamlPairs,construct:constructYamlPairs}),_hasOwnProperty$2=Object.prototype.hasOwnProperty;set=new type("tag:yaml.org,2002:set",{kind:"mapping",resolve:resolveYamlSet,construct:constructYamlSet}),_default=core.extend({implicit:[timestamp,merge],explicit:[binary,omap,pairs,set]}),_hasOwnProperty$1=Object.prototype.hasOwnProperty,PATTERN_NON_PRINTABLE=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,PATTERN_NON_ASCII_LINE_BREAKS=/[\x85\u2028\u2029]/,PATTERN_FLOW_INDICATORS=/[,\[\]\{\}]/,PATTERN_TAG_HANDLE=/^(?:!|!!|![a-z\-]+!)$/i,PATTERN_TAG_URI=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;simpleEscapeCheck=Array(256),simpleEscapeMap=Array(256);for(i=0;i<256;i++)simpleEscapeCheck[i]=simpleEscapeSequence(i)?1:0,simpleEscapeMap[i]=simpleEscapeSequence(i);directiveHandlers={YAML:function(state,name,args){var match,major,minor;if(state.version!==null)throwError(state,"duplication of %YAML directive");if(args.length!==1)throwError(state,"YAML directive accepts exactly one argument");if(match=/^([0-9]+)\.([0-9]+)$/.exec(args[0]),match===null)throwError(state,"ill-formed argument of the YAML directive");if(major=parseInt(match[1],10),minor=parseInt(match[2],10),major!==1)throwError(state,"unacceptable YAML version of the document");if(state.version=args[0],state.checkLineBreaks=minor<2,minor!==1&&minor!==2)throwWarning(state,"unsupported YAML version of the document")},TAG:function(state,name,args){var handle,prefix;if(args.length!==2)throwError(state,"TAG directive accepts exactly two arguments");if(handle=args[0],prefix=args[1],!PATTERN_TAG_HANDLE.test(handle))throwError(state,"ill-formed tag handle (first argument) of the TAG directive");if(_hasOwnProperty$1.call(state.tagMap,handle))throwError(state,'there is a previously declared suffix for "'+handle+'" tag handle');if(!PATTERN_TAG_URI.test(prefix))throwError(state,"ill-formed tag prefix (second argument) of the TAG directive");try{prefix=decodeURIComponent(prefix)}catch(err){throwError(state,"tag prefix is malformed: "+prefix)}state.tagMap[handle]=prefix}};loadAll_1=loadAll$1,load_1=load$1,loader={loadAll:loadAll_1,load:load_1},_toString=Object.prototype.toString,_hasOwnProperty=Object.prototype.hasOwnProperty,ESCAPE_SEQUENCES={};ESCAPE_SEQUENCES[0]="\\0";ESCAPE_SEQUENCES[7]="\\a";ESCAPE_SEQUENCES[8]="\\b";ESCAPE_SEQUENCES[9]="\\t";ESCAPE_SEQUENCES[10]="\\n";ESCAPE_SEQUENCES[11]="\\v";ESCAPE_SEQUENCES[12]="\\f";ESCAPE_SEQUENCES[13]="\\r";ESCAPE_SEQUENCES[27]="\\e";ESCAPE_SEQUENCES[34]="\\\"";ESCAPE_SEQUENCES[92]="\\\\";ESCAPE_SEQUENCES[133]="\\N";ESCAPE_SEQUENCES[160]="\\_";ESCAPE_SEQUENCES[8232]="\\L";ESCAPE_SEQUENCES[8233]="\\P";DEPRECATED_BOOLEANS_SYNTAX=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],DEPRECATED_BASE60_SYNTAX=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;dump_1=dump$1,dumper={dump:dump_1};Type=type,Schema=schema,FAILSAFE_SCHEMA=failsafe,JSON_SCHEMA=json,CORE_SCHEMA=core,DEFAULT_SCHEMA=_default,load=loader.load,loadAll=loader.loadAll,dump=dumper.dump,YAMLException=exception,types2={binary,float,map,null:_null,pairs,set,timestamp,bool,int,merge,omap,seq,str},safeLoad=renamed("safeLoad","load"),safeLoadAll=renamed("safeLoadAll","loadAll"),safeDump=renamed("safeDump","dump"),jsYaml={Type,Schema,FAILSAFE_SCHEMA,JSON_SCHEMA,CORE_SCHEMA,DEFAULT_SCHEMA,load,loadAll,dump,YAMLException,types:types2,safeLoad,safeLoadAll,safeDump}});var exports_frontmatter={};__export(exports_frontmatter,{parseFrontmatter:()=>parseFrontmatter,AgentFrontmatterSchema:()=>AgentFrontmatterSchema});function extractRawYaml(content){let match=content.match(/^---\n([\s\S]*?)\n---/);if(!match)return null;try{let parsed=load(match[1]);if(typeof parsed!=="object"||parsed===null)return null;return parsed}catch{return null}}function warnUnknownFields(raw){for(let key of Object.keys(raw))if(!knownKeys.has(key))console.warn(`[frontmatter] Unknown field "${key}" \u2014 ignored.`)}function validateFieldByField(raw){let out={};for(let key of knownKeys){let fieldResult=AgentFrontmatterSchema.shape[key].safeParse(raw[key]);if(fieldResult.success){if(fieldResult.data!==void 0)out[key]=fieldResult.data}else if(raw[key]!==void 0)console.warn(`[frontmatter] Invalid value for "${key}": ${JSON.stringify(raw[key])} \u2014 using default.`)}return out}function parseFrontmatter(content){let raw=extractRawYaml(content);if(!raw)return{};warnUnknownFields(raw);let result2=AgentFrontmatterSchema.safeParse(raw);if(result2.success)return result2.data;return validateFieldByField(raw)}var promptModeValues,providerValues,AgentFrontmatterSchema,knownKeys;var init_frontmatter=__esm(()=>{init_js_yaml();init_zod();promptModeValues=["system","append"],providerValues=["claude","codex","claude-sdk"],AgentFrontmatterSchema=exports_external.object({name:exports_external.string().optional(),description:exports_external.string().optional(),model:exports_external.string().optional(),color:exports_external.string().optional(),promptMode:exports_external.enum(promptModeValues).optional(),provider:exports_external.enum(providerValues).optional(),tools:exports_external.array(exports_external.string()).optional(),permissionMode:exports_external.string().optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional()}).optional(),omniScopes:exports_external.array(exports_external.string()).optional(),hooks:exports_external.record(exports_external.unknown()).optional(),sdk:exports_external.record(exports_external.unknown()).optional(),bridgeTmuxSession:exports_external.string().optional()}),knownKeys=new Set(Object.keys(AgentFrontmatterSchema.shape))});import{existsSync as existsSync3,readFileSync as readFileSync2,readdirSync as readdirSync2,realpathSync}from"fs";import{dirname as dirname2,join as join4,resolve}from"path";function resolvePackageRoot(){let scriptPath=realpathSync(process.argv[1]||""),candidates=[resolve(dirname2(scriptPath),".."),resolve(dirname2(scriptPath),"..",".."),resolve(dirname2(import.meta.dir??__dirname),"..",".."),resolve(dirname2(import.meta.dir??__dirname),"..")];for(let candidate of candidates)if(existsSync3(join4(candidate,"plugins","genie","agents")))return candidate;return candidates[0]}function scanAgents(agentsDir){if(!existsSync3(agentsDir))return[];let agents=[],entries;try{entries=readdirSync2(agentsDir,{withFileTypes:!0})}catch{return[]}for(let entry of entries){if(!entry.isDirectory())continue;let agentsPath=join4(agentsDir,entry.name,"AGENTS.md");if(!existsSync3(agentsPath))continue;let content=readFileSync2(agentsPath,"utf-8"),fm=parseFrontmatter(content),name=fm.name||entry.name,isCouncil=name.startsWith("council");agents.push({name,description:fm.description||"",agentPath:agentsPath,model:normalizeValue(fm.model),promptMode:fm.promptMode||void 0,category:isCouncil?"council":"role",color:fm.color})}return agents}function getBuiltin(name){return ALL_BUILTINS.find((a)=>a.name===name)??null}function resolveBuiltinAgentPath(name){return getBuiltin(name)?.agentPath??null}var __dirname="/home/runner/_work/genie/genie/src/lib",AGENTS_DIR,_allAgents,BUILTIN_ROLES,BUILTIN_COUNCIL_MEMBERS,ALL_BUILTINS;var init_builtin_agents=__esm(()=>{init_defaults();init_frontmatter();AGENTS_DIR=join4(resolvePackageRoot(),"plugins","genie","agents"),_allAgents=scanAgents(AGENTS_DIR),BUILTIN_ROLES=_allAgents.filter((a)=>a.category==="role"),BUILTIN_COUNCIL_MEMBERS=_allAgents.filter((a)=>a.category==="council"),ALL_BUILTINS=_allAgents});var exports_provider_models={};__export(exports_provider_models,{validateProviderModel:()=>validateProviderModel,sanitizeModelForProvider:()=>sanitizeModelForProvider,getProviderDefaultModel:()=>getProviderDefaultModel,CrossProviderModelError:()=>CrossProviderModelError});function classifyModel(model){for(let re of CLAUDE_MODEL_PATTERNS)if(re.test(model))return"claude";for(let re of CODEX_MODEL_PATTERNS)if(re.test(model))return"codex";return null}function providerFamily(provider){if(!provider)return null;let p=provider.toLowerCase();if(p==="claude"||p==="claude-sdk")return"claude";if(p==="codex")return"codex";return null}function getProviderDefaultModel(provider){if(providerFamily(provider)==="codex")return"gpt-5.5";return}function sanitizeModelForProvider(provider,model){if(!model)return getProviderDefaultModel(provider);let requestedFamily=providerFamily(provider);if(requestedFamily===null)return model;let modelFamily=classifyModel(model);if(modelFamily===null)return model;if(modelFamily===requestedFamily)return model;let def=getProviderDefaultModel(provider);return process.stderr.write(`[genie] dropping cross-provider model "${model}" (${modelFamily} family) for provider "${provider}" (${requestedFamily} family); using ${def?`default "${def}"`:"provider default"}.
290
183
  `),def}function validateProviderModel(args){let{provider,model}=args;if(!provider||!model)return;let requestedFamily=providerFamily(provider);if(requestedFamily===null)return;let modelFamily=classifyModel(model);if(modelFamily===null)return;if(modelFamily===requestedFamily)return;let wantedExamples=requestedFamily==="claude"?"opus, sonnet, haiku, claude-opus-4-7":"gpt-5-codex, gpt-4o, o3-mini, codex-mini",lines=[`--model "${model}" is a ${modelFamily} model name but --provider is "${provider}" (${requestedFamily} family). This was the source of the council-deliberation incident on 2026-04-28: "genie spawn --provider codex --model opus" forwarded "opus" to codex CLI, which rejected it, killing the agent on startup with no useful error to the operator.`,"","Either:"," - Drop --model to use the provider's default, OR",` - Pass a ${requestedFamily}-family model (e.g., ${wantedExamples}), OR`," - Switch --provider to match the model family."];throw new CrossProviderModelError(lines.join(`
291
184
  `))}var CLAUDE_MODEL_PATTERNS,CODEX_MODEL_PATTERNS,CrossProviderModelError;var init_provider_models=__esm(()=>{CLAUDE_MODEL_PATTERNS=[/^opus(-\d+(\.\d+)?)?$/i,/^sonnet(-\d+(\.\d+)?)?$/i,/^haiku(-\d+(\.\d+)?)?$/i,/^claude-/i],CODEX_MODEL_PATTERNS=[/^gpt-/i,/^o[134](?:-|$)/i,/^codex(?:-|$)/i];CrossProviderModelError=class CrossProviderModelError extends Error{constructor(message){super(message);this.name="CrossProviderModelError"}}});var exports_trace_context={};__export(exports_trace_context,{setAmbient:()=>setAmbient,propagateEnv:()=>propagateEnv,parseToken:()=>parseToken,newTraceId:()=>newTraceId,newSpanId:()=>newSpanId,mintToken:()=>mintToken,injectPromptPreamble:()=>injectPromptPreamble,getAmbient:()=>getAmbient,extractPromptPreamble:()=>extractPromptPreamble,adoptFromEnv:()=>adoptFromEnv,TRACE_SECRET_ENV_VAR:()=>TRACE_SECRET_ENV_VAR,TRACE_ID_ENV_VAR:()=>TRACE_ID_ENV_VAR,TRACE_ENV_VAR:()=>TRACE_ENV_VAR,TOKEN_MAX_AGE_MS:()=>TOKEN_MAX_AGE_MS,PREAMBLE_SUFFIX:()=>PREAMBLE_SUFFIX,PREAMBLE_PREFIX:()=>PREAMBLE_PREFIX});import{createHmac,randomBytes,timingSafeEqual}from"crypto";function getSecret(){let raw=process.env[TRACE_SECRET_ENV_VAR];if(!raw||raw.length<16)return Buffer.from("genie-trace-fallback-secret-dev-only-do-not-ship","utf8");return Buffer.from(raw,"utf8")}function toBase64Url(buf){return(typeof buf==="string"?Buffer.from(buf,"utf8"):buf).toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function fromBase64Url(s){let pad=s.length%4===0?"":"=".repeat(4-s.length%4);return Buffer.from(s.replace(/-/g,"+").replace(/_/g,"/")+pad,"base64")}function mintToken(ctx){let body={trace_id:ctx.trace_id,parent_span_id:ctx.parent_span_id,tenant_id:ctx.tenant_id,iat:Date.now(),nonce:randomBytes(6).toString("hex")},payloadB64=toBase64Url(JSON.stringify(body)),sig=createHmac("sha256",getSecret()).update(payloadB64).digest(),sigB64=toBase64Url(sig);return`${payloadB64}.${sigB64}`}function parseToken(token,now=Date.now()){if(!token||typeof token!=="string")return{ok:!1,reason:"malformed"};let dot=token.indexOf(".");if(dot<=0||dot===token.length-1)return{ok:!1,reason:"malformed"};let payloadB64=token.slice(0,dot),sigB64=token.slice(dot+1),expected=createHmac("sha256",getSecret()).update(payloadB64).digest(),provided;try{provided=fromBase64Url(sigB64)}catch{return{ok:!1,reason:"malformed"}}if(provided.length!==expected.length)return{ok:!1,reason:"signature"};if(!timingSafeEqual(provided,expected))return{ok:!1,reason:"signature"};let body;try{body=JSON.parse(fromBase64Url(payloadB64).toString("utf8"))}catch{return{ok:!1,reason:"malformed"}}if(!body||typeof body.trace_id!=="string"||typeof body.iat!=="number")return{ok:!1,reason:"malformed"};let age=now-body.iat;if(age>TOKEN_MAX_AGE_MS)return{ok:!1,reason:"expired"};if(age<-TOKEN_MAX_AGE_MS)return{ok:!1,reason:"future-dated"};return{ok:!0,ctx:{trace_id:body.trace_id,parent_span_id:body.parent_span_id,tenant_id:body.tenant_id}}}function adoptFromEnv(env=process.env){let token=env[TRACE_ENV_VAR];if(token){let parsed=parseToken(token);if(parsed.ok&&parsed.ctx)return ambient=parsed.ctx,parsed.ctx}let legacyId=env[TRACE_ID_ENV_VAR];if(legacyId&&/^[a-f0-9-]{8,64}$/i.test(legacyId))return ambient={trace_id:legacyId.replace(/-/g,"").toLowerCase()},ambient;return null}function setAmbient(ctx){ambient=ctx}function getAmbient(){return ambient}function propagateEnv(ctx=ambient,base=process.env){let out={};for(let[k,v]of Object.entries(base))if(typeof v==="string")out[k]=v;if(!ctx)return out;return out[TRACE_ENV_VAR]=mintToken(ctx),out[TRACE_ID_ENV_VAR]=ctx.trace_id,out}function injectPromptPreamble(prompt,ctx=ambient){if(!ctx)return prompt;if(PREAMBLE_REGEX.test(prompt))return prompt;return`<genie-trace token="${mintToken(ctx)}" />
292
- ${prompt}`}function extractPromptPreamble(input){let match=input.match(PREAMBLE_REGEX);if(!match)return{ctx:null,rest:input};let parsed=parseToken(match[1]);if(!parsed.ok||!parsed.ctx)return{ctx:null,rest:input.slice(match[0].length)};return{ctx:parsed.ctx,rest:input.slice(match[0].length)}}function newTraceId(){return randomBytes(16).toString("hex")}function newSpanId(){return randomBytes(8).toString("hex")}var TRACE_ENV_VAR="GENIE_TRACE_TOKEN",TRACE_ID_ENV_VAR="GENIE_TRACE_ID",TRACE_SECRET_ENV_VAR="GENIE_TRACE_SECRET",TOKEN_MAX_AGE_MS=3600000,PREAMBLE_PREFIX="<genie-trace",PREAMBLE_SUFFIX="/>",PREAMBLE_REGEX,ambient=null;var init_trace_context=__esm(()=>{PREAMBLE_REGEX=/^<genie-trace\s+token="([A-Za-z0-9_\-.]+)"\s*\/>\s*/});var exports_provider_adapters={};__export(exports_provider_adapters,{validateSpawnParams:()=>validateSpawnParams,buildLaunchCommand:()=>buildLaunchCommand,buildCodexCommand:()=>buildCodexCommand,buildClaudeCommand:()=>buildClaudeCommand,CLAUDE_TEAM_COLORS:()=>CLAUDE_TEAM_COLORS});function validateSpawnParams(params){return spawnParamsSchema.parse(params)}function escapeShellArg2(arg){return`'${arg.replace(/'/g,"'\\''")}'`}function hasBinary(name){try{let BunExt=Bun;if(typeof BunExt.which==="function")return Boolean(BunExt.which(name));let{execSync:execSync2}=__require("child_process");return execSync2(`which ${name}`,{stdio:"ignore"}),!0}catch{return!1}}function resolveShellBinary(name){try{let{execFileSync}=__require("child_process"),shell=process.env.SHELL||"/bin/sh";return execFileSync(shell,["-lc",`command -v ${name}`],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function preflightCheck(provider){if(!hasBinary(provider))throw Error(`Provider binary "${provider}" not found on PATH. Install ${provider} or check your environment.`)}function appendNativeTeamFlags(parts,env,nt,params){env.CLAUDECODE="1",env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS="1";let agentName=nt.agentName??params.role??"worker";if(env.GENIE_AGENT_NAME=agentName,parts.push("--agent-id",escapeShellArg2(`${agentName}@${params.team}`)),parts.push("--agent-name",escapeShellArg2(agentName)),parts.push("--team-name",escapeShellArg2(params.team)),nt.color)parts.push("--agent-color",escapeShellArg2(nt.color));if(nt.parentSessionId)parts.push("--parent-session-id",escapeShellArg2(nt.parentSessionId));if(nt.agentType)parts.push("--agent-type",escapeShellArg2(nt.agentType));if(nt.planModeRequired)parts.push("--plan-mode-required");let effectivePermMode=nt.permissionMode??"auto";parts.push("--permission-mode",escapeShellArg2(effectivePermMode))}function appendSystemPromptFlags(parts,params){if(params.systemPrompt){let{mkdirSync:mkdirSync5,writeFileSync:writeFileSync6,readFileSync:readFileSync6}=__require("fs"),{join:join10}=__require("path"),dir="/tmp/genie-prompts";mkdirSync5("/tmp/genie-prompts",{recursive:!0});let ts=Date.now().toString(36),promptFile=join10("/tmp/genie-prompts",`${params.role||"agent"}-${ts}.md`),content=params.systemPrompt;if(params.systemPromptFile)content=`${readFileSync6(params.systemPromptFile,"utf-8")}
185
+ ${prompt}`}function extractPromptPreamble(input){let match=input.match(PREAMBLE_REGEX);if(!match)return{ctx:null,rest:input};let parsed=parseToken(match[1]);if(!parsed.ok||!parsed.ctx)return{ctx:null,rest:input.slice(match[0].length)};return{ctx:parsed.ctx,rest:input.slice(match[0].length)}}function newTraceId(){return randomBytes(16).toString("hex")}function newSpanId(){return randomBytes(8).toString("hex")}var TRACE_ENV_VAR="GENIE_TRACE_TOKEN",TRACE_ID_ENV_VAR="GENIE_TRACE_ID",TRACE_SECRET_ENV_VAR="GENIE_TRACE_SECRET",TOKEN_MAX_AGE_MS=3600000,PREAMBLE_PREFIX="<genie-trace",PREAMBLE_SUFFIX="/>",PREAMBLE_REGEX,ambient=null;var init_trace_context=__esm(()=>{PREAMBLE_REGEX=/^<genie-trace\s+token="([A-Za-z0-9_\-.]+)"\s*\/>\s*/});var exports_provider_adapters={};__export(exports_provider_adapters,{validateSpawnParams:()=>validateSpawnParams,buildLaunchCommand:()=>buildLaunchCommand,buildCodexCommand:()=>buildCodexCommand,buildClaudeCommand:()=>buildClaudeCommand,CLAUDE_TEAM_COLORS:()=>CLAUDE_TEAM_COLORS});function validateSpawnParams(params){return spawnParamsSchema.parse(params)}function escapeShellArg2(arg){return`'${arg.replace(/'/g,"'\\''")}'`}function hasBinary(name){try{let BunExt=Bun;if(typeof BunExt.which==="function")return Boolean(BunExt.which(name));let{execSync}=__require("child_process");return execSync(`which ${name}`,{stdio:"ignore"}),!0}catch{return!1}}function resolveShellBinary(name){try{let{execFileSync}=__require("child_process"),shell=process.env.SHELL||"/bin/sh";return execFileSync(shell,["-lc",`command -v ${name}`],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function preflightCheck(provider){if(!hasBinary(provider))throw Error(`Provider binary "${provider}" not found on PATH. Install ${provider} or check your environment.`)}function appendNativeTeamFlags(parts,env,nt,params){env.CLAUDECODE="1",env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS="1";let agentName=nt.agentName??params.role??"worker";if(env.GENIE_AGENT_NAME=agentName,parts.push("--agent-id",escapeShellArg2(`${agentName}@${params.team}`)),parts.push("--agent-name",escapeShellArg2(agentName)),parts.push("--team-name",escapeShellArg2(params.team)),nt.color)parts.push("--agent-color",escapeShellArg2(nt.color));if(nt.parentSessionId)parts.push("--parent-session-id",escapeShellArg2(nt.parentSessionId));if(nt.agentType)parts.push("--agent-type",escapeShellArg2(nt.agentType));if(nt.planModeRequired)parts.push("--plan-mode-required");let effectivePermMode=nt.permissionMode??"auto";parts.push("--permission-mode",escapeShellArg2(effectivePermMode))}function appendSystemPromptFlags(parts,params){if(params.systemPrompt){let{mkdirSync:mkdirSync2,writeFileSync:writeFileSync2,readFileSync:readFileSync3}=__require("fs"),{join:join5}=__require("path"),dir="/tmp/genie-prompts";mkdirSync2("/tmp/genie-prompts",{recursive:!0});let ts=Date.now().toString(36),promptFile=join5("/tmp/genie-prompts",`${params.role||"agent"}-${ts}.md`),content=params.systemPrompt;if(params.systemPromptFile)content=`${readFileSync3(params.systemPromptFile,"utf-8")}
293
186
 
294
187
  ${content}`;if(params.extraArgs){let fileIdx=params.extraArgs.indexOf("--append-system-prompt-file");if(fileIdx!==-1&&params.extraArgs[fileIdx+1])content=`${content}
295
188
 
296
- ${readFileSync6(params.extraArgs[fileIdx+1],"utf-8")}`,params.extraArgs.splice(fileIdx,2)}writeFileSync6(promptFile,content);let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(promptFile))}else if(params.systemPromptFile){let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(params.systemPromptFile))}}function appendOtelEnv(env,params){if(!params.otelPort||process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return;if(env.CLAUDE_CODE_ENABLE_TELEMETRY="1",env.OTEL_LOGS_EXPORTER="otlp",env.OTEL_METRICS_EXPORTER="otlp",env.OTEL_EXPORTER_OTLP_PROTOCOL="http/json",env.OTEL_EXPORTER_OTLP_ENDPOINT=`http://127.0.0.1:${params.otelPort}`,env.OTEL_LOG_TOOL_DETAILS="1",params.otelLogPrompts!==!1)env.OTEL_LOG_USER_PROMPTS="1";let resourceParts=[];if(params.role)resourceParts.push(`agent.name=${params.role}`);if(params.team)resourceParts.push(`team.name=${params.team}`);if(params.otelWishSlug)resourceParts.push(`wish.slug=${params.otelWishSlug}`);if(params.role)resourceParts.push(`agent.role=${params.role}`);if(resourceParts.length>0)env.OTEL_RESOURCE_ATTRIBUTES=resourceParts.join(",")}function appendTraceContext(parts,env,params){let ctx=getAmbient();if(params.initialPrompt){let prompt=ctx?injectPromptPreamble(params.initialPrompt,ctx):params.initialPrompt;parts.push(escapeShellArg2(prompt))}if(ctx)env[TRACE_ENV_VAR]=mintToken(ctx),env[TRACE_ID_ENV_VAR]=ctx.trace_id}function buildClaudeGenieEnv(params){let env={};if(env.GENIE_WORKER="1",params.role)env.GENIE_AGENT_NAME=params.role;if(params.team)env.GENIE_TEAM=params.team;if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;return env}function appendSessionFlags(parts,params){if(params.resume)parts.push("--resume",escapeShellArg2(params.resume));else if(params.sessionId)parts.push("--session-id",escapeShellArg2(params.sessionId));let claudeAgentFlag=params.agentTemplate??params.role;if(claudeAgentFlag)parts.push("--agent",escapeShellArg2(claudeAgentFlag));if(params.model)parts.push("--model",escapeShellArg2(params.model));if(params.name)parts.push("--name",escapeShellArg2(params.name))}function buildSettingsObject(params){let settingsObj={};if(!params.skipHooks){let hookEntry={type:"command",command:buildDispatchCommand(),timeout:15},{DISPATCHED_EVENT_MATCHERS:DISPATCHED_EVENT_MATCHERS2}=(init_types2(),__toCommonJS(exports_types)),hooks={};for(let[event,matcher]of Object.entries(DISPATCHED_EVENT_MATCHERS2))hooks[event]=[{matcher,hooks:[hookEntry]}];settingsObj.hooks=hooks}if(params.permissions){let perms={};if(params.permissions.allow?.length)perms.allow=params.permissions.allow;if(params.permissions.deny?.length)perms.deny=params.permissions.deny;if(Object.keys(perms).length>0)settingsObj.permissions=perms}return settingsObj}function warnIfAllowRulesAreBypassed(params){if(!params.permissions?.allow?.length)return;if(params.nativeTeam?.permissionMode!=="bypassPermissions")return;let agentName=params.nativeTeam.agentName??params.role??params.name??"unknown";process.stderr.write(`Warning: agent ${agentName} declares permissions.allow but permissionMode is bypassPermissions \u2014 allow rules are advisory under bypass (deny still enforced).
297
- `)}function appendDisallowedAndExtraArgs(parts,params){if(params.disallowedTools?.length)for(let tool of params.disallowedTools)parts.push("--disallowedTools",escapeShellArg2(tool));if(params.extraArgs)for(let arg of params.extraArgs)parts.push(escapeShellArg2(arg))}function assertClaudeBuiltinHasIdentity(params){let templateName=params.agentTemplate??params.role;if(!templateName)return;if(params.resume)return;if(!resolveBuiltinAgentPath(templateName))return;if(params.systemPromptFile||params.systemPrompt)return;throw Error(`Refusing to launch built-in agent "${templateName}" without AGENTS.md identity. Resolve systemPromptFile or systemPrompt before building the Claude command.`)}function buildClaudeCommand(params){assertClaudeBuiltinHasIdentity(params),preflightCheck("claude");let parts=[resolveShellBinary("claude")??"claude","--permission-mode",escapeShellArg2("auto")],env=buildClaudeGenieEnv(params);if(appendOtelEnv(env,params),params.nativeTeam?.enabled)appendNativeTeamFlags(parts,env,params.nativeTeam,params);appendSessionFlags(parts,params),appendSystemPromptFlags(parts,params),warnIfAllowRulesAreBypassed(params);let settingsObj=buildSettingsObject(params);if(Object.keys(settingsObj).length>0)parts.push("--settings",escapeShellArg2(JSON.stringify(settingsObj)));return appendDisallowedAndExtraArgs(parts,params),appendTraceContext(parts,env,params),{command:parts.join(" "),provider:"claude",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildCodexAutoPrompt(params){let promptParts=[`Genie worker. Team: ${params.team}.`];if(params.role)promptParts.push(`Role: ${params.role}.`);if(params.skill)promptParts.push(`Execute the ${params.skill} skill instructions.`);return promptParts.join(" ")}function sanitizeCodexPromptFileStem(stem){return stem.replace(/[^a-zA-Z0-9._-]/g,"-")||Date.now().toString(36)}function splitCodexExtraArgs(extraArgs){let forwarded=[],promptFiles=[],args=extraArgs??[];for(let i2=0;i2<args.length;i2++){let arg=args[i2],equalsFlag=[...CODEX_PROMPT_FILE_FLAGS].find((flag)=>arg.startsWith(`${flag}=`));if(equalsFlag){let path=arg.slice(equalsFlag.length+1);if(!path)throw Error(`Missing path for ${equalsFlag}`);promptFiles.push(path);continue}if(CODEX_PROMPT_FILE_FLAGS.has(arg)){let path=args[i2+1];if(!path)throw Error(`Missing path after ${arg}`);promptFiles.push(path),i2++;continue}forwarded.push(arg)}return{forwarded,promptFiles}}function buildCodexMergedPrompt(params,extraPromptFiles){let{readFileSync:readFileSync6}=__require("fs"),sections=[];if(params.systemPromptFile!==void 0)sections.push(readFileSync6(params.systemPromptFile,"utf-8"));if(params.systemPrompt!==void 0)sections.push(params.systemPrompt);for(let promptFile of extraPromptFiles)sections.push(readFileSync6(promptFile,"utf-8"));if(params.initialPrompt!==void 0)sections.push(params.initialPrompt);return sections.length>0?sections.join(`
189
+ ${readFileSync3(params.extraArgs[fileIdx+1],"utf-8")}`,params.extraArgs.splice(fileIdx,2)}writeFileSync2(promptFile,content);let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(promptFile))}else if(params.systemPromptFile){let flag=params.promptMode==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(flag,escapeShellArg2(params.systemPromptFile))}}function appendOtelEnv(env,params){if(!params.otelPort||process.env.OTEL_EXPORTER_OTLP_ENDPOINT)return;if(env.CLAUDE_CODE_ENABLE_TELEMETRY="1",env.OTEL_LOGS_EXPORTER="otlp",env.OTEL_METRICS_EXPORTER="otlp",env.OTEL_EXPORTER_OTLP_PROTOCOL="http/json",env.OTEL_EXPORTER_OTLP_ENDPOINT=`http://127.0.0.1:${params.otelPort}`,env.OTEL_LOG_TOOL_DETAILS="1",params.otelLogPrompts!==!1)env.OTEL_LOG_USER_PROMPTS="1";let resourceParts=[];if(params.role)resourceParts.push(`agent.name=${params.role}`);if(params.team)resourceParts.push(`team.name=${params.team}`);if(params.otelWishSlug)resourceParts.push(`wish.slug=${params.otelWishSlug}`);if(params.role)resourceParts.push(`agent.role=${params.role}`);if(resourceParts.length>0)env.OTEL_RESOURCE_ATTRIBUTES=resourceParts.join(",")}function appendTraceContext(parts,env,params){let ctx=getAmbient();if(params.initialPrompt){let prompt=ctx?injectPromptPreamble(params.initialPrompt,ctx):params.initialPrompt;parts.push(escapeShellArg2(prompt))}if(ctx)env[TRACE_ENV_VAR]=mintToken(ctx),env[TRACE_ID_ENV_VAR]=ctx.trace_id}function buildClaudeGenieEnv(params){let env={};if(env.GENIE_WORKER="1",params.role)env.GENIE_AGENT_NAME=params.role;if(params.team)env.GENIE_TEAM=params.team;if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;return env}function appendSessionFlags(parts,params){if(params.resume)parts.push("--resume",escapeShellArg2(params.resume));else if(params.sessionId)parts.push("--session-id",escapeShellArg2(params.sessionId));let claudeAgentFlag=params.agentTemplate??params.role;if(claudeAgentFlag)parts.push("--agent",escapeShellArg2(claudeAgentFlag));if(params.model)parts.push("--model",escapeShellArg2(params.model));if(params.name)parts.push("--name",escapeShellArg2(params.name))}function buildSettingsObject(params){let settingsObj={};if(!params.skipHooks){let hookEntry={type:"command",command:buildDispatchCommand(),timeout:15},{DISPATCHED_EVENT_MATCHERS:DISPATCHED_EVENT_MATCHERS2}=(init_types2(),__toCommonJS(exports_types)),hooks={};for(let[event,matcher]of Object.entries(DISPATCHED_EVENT_MATCHERS2))hooks[event]=[{matcher,hooks:[hookEntry]}];settingsObj.hooks=hooks}if(params.permissions){let perms={};if(params.permissions.allow?.length)perms.allow=params.permissions.allow;if(params.permissions.deny?.length)perms.deny=params.permissions.deny;if(Object.keys(perms).length>0)settingsObj.permissions=perms}return settingsObj}function warnIfAllowRulesAreBypassed(params){if(!params.permissions?.allow?.length)return;if(params.nativeTeam?.permissionMode!=="bypassPermissions")return;let agentName=params.nativeTeam.agentName??params.role??params.name??"unknown";process.stderr.write(`Warning: agent ${agentName} declares permissions.allow but permissionMode is bypassPermissions \u2014 allow rules are advisory under bypass (deny still enforced).
190
+ `)}function appendDisallowedAndExtraArgs(parts,params){if(params.disallowedTools?.length)for(let tool of params.disallowedTools)parts.push("--disallowedTools",escapeShellArg2(tool));if(params.extraArgs)for(let arg of params.extraArgs)parts.push(escapeShellArg2(arg))}function assertClaudeBuiltinHasIdentity(params){let templateName=params.agentTemplate??params.role;if(!templateName)return;if(params.resume)return;if(!resolveBuiltinAgentPath(templateName))return;if(params.systemPromptFile||params.systemPrompt)return;throw Error(`Refusing to launch built-in agent "${templateName}" without AGENTS.md identity. Resolve systemPromptFile or systemPrompt before building the Claude command.`)}function buildClaudeCommand(params){assertClaudeBuiltinHasIdentity(params),preflightCheck("claude");let parts=[resolveShellBinary("claude")??"claude","--permission-mode",escapeShellArg2("auto")],env=buildClaudeGenieEnv(params);if(appendOtelEnv(env,params),params.nativeTeam?.enabled)appendNativeTeamFlags(parts,env,params.nativeTeam,params);appendSessionFlags(parts,params),appendSystemPromptFlags(parts,params),warnIfAllowRulesAreBypassed(params);let settingsObj=buildSettingsObject(params);if(Object.keys(settingsObj).length>0)parts.push("--settings",escapeShellArg2(JSON.stringify(settingsObj)));return appendDisallowedAndExtraArgs(parts,params),appendTraceContext(parts,env,params),{command:parts.join(" "),provider:"claude",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildCodexAutoPrompt(params){let promptParts=[`Genie worker. Team: ${params.team}.`];if(params.role)promptParts.push(`Role: ${params.role}.`);if(params.skill)promptParts.push(`Execute the ${params.skill} skill instructions.`);return promptParts.join(" ")}function sanitizeCodexPromptFileStem(stem){return stem.replace(/[^a-zA-Z0-9._-]/g,"-")||Date.now().toString(36)}function splitCodexExtraArgs(extraArgs){let forwarded=[],promptFiles=[],args=extraArgs??[];for(let i2=0;i2<args.length;i2++){let arg=args[i2],equalsFlag=[...CODEX_PROMPT_FILE_FLAGS].find((flag)=>arg.startsWith(`${flag}=`));if(equalsFlag){let path=arg.slice(equalsFlag.length+1);if(!path)throw Error(`Missing path for ${equalsFlag}`);promptFiles.push(path);continue}if(CODEX_PROMPT_FILE_FLAGS.has(arg)){let path=args[i2+1];if(!path)throw Error(`Missing path after ${arg}`);promptFiles.push(path),i2++;continue}forwarded.push(arg)}return{forwarded,promptFiles}}function buildCodexMergedPrompt(params,extraPromptFiles){let{readFileSync:readFileSync3}=__require("fs"),sections=[];if(params.systemPromptFile!==void 0)sections.push(readFileSync3(params.systemPromptFile,"utf-8"));if(params.systemPrompt!==void 0)sections.push(params.systemPrompt);for(let promptFile of extraPromptFiles)sections.push(readFileSync3(promptFile,"utf-8"));if(params.initialPrompt!==void 0)sections.push(params.initialPrompt);return sections.length>0?sections.join(`
298
191
 
299
- `):null}function writeCodexPromptFile(params,content){let{mkdirSync:mkdirSync5,writeFileSync:writeFileSync6}=__require("fs"),{join:join10}=__require("path");mkdirSync5(CODEX_PROMPT_DIR,{recursive:!0});let stem=sanitizeCodexPromptFileStem(params.executorId??Date.now().toString(36)),promptFile=join10(CODEX_PROMPT_DIR,`${stem}.txt`);return writeFileSync6(promptFile,content,"utf-8"),promptFile}function buildCodexCommand(params){preflightCheck("codex");let parts=["codex"],env={};if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;if(params.role)env.GENIE_AGENT_NAME=params.role;else if(params.name)env.GENIE_AGENT_NAME=params.name;if(params.team)env.GENIE_TEAM=params.team;let{forwarded:extraArgs,promptFiles:extraPromptFiles}=splitCodexExtraArgs(params.extraArgs);parts.push("--yolo"),parts.push("--no-alt-screen");let codexModel=sanitizeModelForProvider("codex",params.model);if(codexModel)parts.push("--model",escapeShellArg2(codexModel));for(let arg of extraArgs)parts.push(escapeShellArg2(arg));let mergedPrompt=buildCodexMergedPrompt(params,extraPromptFiles);if(mergedPrompt!==null){let promptFile=writeCodexPromptFile(params,mergedPrompt);parts.push(`"$(cat ${escapeShellArg2(promptFile)})"`)}else parts.push(escapeShellArg2(buildCodexAutoPrompt(params)));return{command:parts.join(" "),provider:"codex",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildLaunchCommand(params){let validated=validateSpawnParams(params);switch(validated.provider){case"claude":return buildClaudeCommand(validated);case"codex":return buildCodexCommand(validated);case"claude-sdk":return{command:"claude-sdk-in-process",provider:"claude-sdk",meta:{role:validated.role,skill:validated.skill}};default:throw Error(`Unknown provider "${validated.provider}". Valid providers: claude, codex, claude-sdk`)}}var CLAUDE_TEAM_COLORS,spawnParamsSchema,CODEX_PROMPT_DIR="/tmp/genie-codex-prompts",CODEX_PROMPT_FILE_FLAGS;var init_provider_adapters=__esm(()=>{init_zod();init_inject();init_builtin_agents();init_provider_models();init_trace_context();CLAUDE_TEAM_COLORS=["red","blue","green","yellow","purple","orange","pink","cyan"],spawnParamsSchema=exports_external.object({provider:exports_external.enum(["claude","codex","claude-sdk","app-pty"]),team:exports_external.string().min(1,"Team name is required"),role:exports_external.string().optional(),agentTemplate:exports_external.string().optional(),skill:exports_external.string().optional(),agentId:exports_external.string().optional(),executorId:exports_external.string().uuid().optional(),extraArgs:exports_external.array(exports_external.string()).optional(),nativeTeam:exports_external.object({enabled:exports_external.boolean(),parentSessionId:exports_external.string().optional(),color:exports_external.string().optional(),agentType:exports_external.string().optional(),planModeRequired:exports_external.boolean().optional(),permissionMode:exports_external.string().optional(),agentName:exports_external.string().optional()}).optional(),sessionId:exports_external.string().uuid().optional(),resume:exports_external.string().optional(),systemPromptFile:exports_external.string().optional(),systemPrompt:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),initialPrompt:exports_external.string().optional(),name:exports_external.string().optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),permissionMode:exports_external.enum(["default","acceptEdits","bypassPermissions","plan","dontAsk","auto","remoteApproval"]).optional()}).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),otelPort:exports_external.number().optional(),otelLogPrompts:exports_external.boolean().optional(),otelWishSlug:exports_external.string().optional(),newWindow:exports_external.boolean().optional(),windowTarget:exports_external.string().optional()});CODEX_PROMPT_FILE_FLAGS=new Set(["--append-system-prompt-file","--system-prompt-file"])});var palette;var init_palette=__esm(()=>{palette={bg:"#0a1d2a",bgRaised:"#0f2638",bgHover:"#143049",bgOverlay:"rgba(10, 29, 42, 0.92)",text:"#c9cfd4",textDim:"#8a9499",textMuted:"#5e6e74",border:"#2a3f4f",borderActive:"#7fc8a9",accent:"#7fc8a9",accentDim:"#5a9d82",accentBright:"#9eddc1",success:"#7fc8a9",warning:"#d4a574",error:"#a83838",errorBright:"#c44a4a",info:"#5a8ca8",beige:"#d4c5a9",innieGrey:"#5e6e74",outieAmber:"#d4a574",scrollTrack:"#2a3f4f",scrollThumb:"#5e6e74"}});var tokens;var init_tokens=__esm(()=>{init_palette();tokens={accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,surface:palette.bg,surfaceRaised:palette.bgRaised,surfaceHover:palette.bgHover,surfaceOverlay:palette.bgOverlay,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,borderActive:palette.borderActive,danger:palette.error,dangerStrong:palette.errorBright,attention:palette.warning,info:palette.info,success:palette.success,severed:palette.innieGrey,outieWarm:palette.outieAmber,lumonBeige:palette.beige}});function hexToRgb(hex){let m=hex.trim().match(/^#?([0-9a-fA-F]{6})$/);if(!m)throw Error(`Invalid hex: ${hex}`);let n=Number.parseInt(m[1],16);return[n>>16&255,n>>8&255,n&255]}function rgbToHex([r,g,b]){let c=(v)=>Math.max(0,Math.min(255,Math.round(v))).toString(16).padStart(2,"0");return`#${c(r)}${c(g)}${c(b)}`}function rgbToHsl([r,g,b]){let rn=r/255,gn=g/255,bn=b/255,max=Math.max(rn,gn,bn),min=Math.min(rn,gn,bn),l=(max+min)/2;if(max===min)return[0,0,l];let d=max-min,s=l>0.5?d/(2-max-min):d/(max+min),h;switch(max){case rn:h=((gn-bn)/d+(gn<bn?6:0))*60;break;case gn:h=((bn-rn)/d+2)*60;break;default:h=((rn-gn)/d+4)*60}return[h,s,l]}function hslToRgb([h,s,l]){if(s===0){let v=l*255;return[v,v,v]}let q=l<0.5?l*(1+s):l+s-l*s,p=2*l-q,hk=(h%360+360)%360/360,f=(t)=>{let tt=t;if(tt<0)tt+=1;if(tt>1)tt-=1;if(tt<0.16666666666666666)return p+(q-p)*6*tt;if(tt<0.5)return q;if(tt<0.6666666666666666)return p+(q-p)*(0.6666666666666666-tt)*6;return p};return[f(hk+0.3333333333333333)*255,f(hk)*255,f(hk-0.3333333333333333)*255]}function rotateHue(hex,deg){let[h,s,l]=rgbToHsl(hexToRgb(hex));return rgbToHex(hslToRgb([h+deg,s,l]))}var init_genie_tokens=__esm(()=>{init_palette();init_tokens()});var exports_team_lead_command={};__export(exports_team_lead_command,{shellQuote:()=>shellQuote,sessionExists:()=>sessionExists,ccProjectDirName:()=>ccProjectDirName,buildTeamLeadCommand:()=>buildTeamLeadCommand});import{readFileSync as readFileSync6,readdirSync as readdirSync4}from"fs";import{join as join10}from"path";function shellQuote(s){return`'${s.replace(/'/g,"'\\''")}'`}function buildTeamLeadCommand(teamName,options){let sanitized=sanitizeTeamName(teamName),qTeam=shellQuote(sanitized),resolvedLeader=options?.leaderName??teamName,sanitizedLeader=sanitizeTeamName(resolvedLeader),parts=["GENIE_WORKER=1","CLAUDECODE=1","CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1",`GENIE_TEAM=${qTeam}`,`GENIE_AGENT_NAME=${shellQuote(sanitizedLeader)}`,"claude",`--agent-id ${shellQuote(`${sanitizedLeader}@${sanitized}`)}`,`--agent-name ${shellQuote(sanitizedLeader)}`,`--team-name ${qTeam}`,"--agent-type team-lead","--permission-mode auto"];if(parts.push(`--name ${shellQuote(sanitized)}`),options?.sessionId){let flag=options.resume?"--resume":"--session-id";parts.push(`${flag} ${shellQuote(options.sessionId)}`)}if(options?.systemPromptFile){let promptFlag=(options?.promptMode??loadGenieConfigSync().promptMode)==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(`${promptFlag} ${shellQuote(options.systemPromptFile)}`)}return parts.join(" ")}function ccProjectDirName(dir){return dir.replace(/\//g,"-")}function fileHasSessionName(filePath,needle){try{let lines=readFileSync6(filePath,"utf-8").split(`
300
- `).slice(0,10);for(let line of lines){if(!line.includes("custom-title"))continue;let entry=JSON.parse(line);if(entry.type==="custom-title"&&entry.customTitle?.toLowerCase()===needle)return!0}}catch{}return!1}function sessionExists(name,cwd){try{let home=process.env.HOME??"/root",projectDir=ccProjectDirName(cwd??process.cwd()),projectPath=join10(home,".claude","projects",projectDir),files;try{files=readdirSync4(projectPath).filter((f)=>f.endsWith(".jsonl"))}catch{return!1}let needle=name.toLowerCase();return files.some((file)=>{let full=join10(projectPath,file);return fileHasSessionName(full,needle)||fileHasSessionName(full,`${needle}-${needle}`)})}catch{return!1}}var init_team_lead_command=__esm(()=>{init_claude_native_teams();init_genie_config2()});var exports_tmux_wrapper={};__export(exports_tmux_wrapper,{prependEnvVars:()=>prependEnvVars,genieTmuxPrefix:()=>genieTmuxPrefix,genieTmuxCmd:()=>genieTmuxCmd,executeTmux:()=>executeTmux});import{exec as execCallback}from"child_process";import{existsSync as existsSync8,mkdirSync as mkdirSync5}from"fs";import{homedir as homedir6}from"os";import{join as join11}from"path";import{promisify}from"util";function resolveGenieTmuxConf(){let home=homedir6(),genieHome3=process.env.GENIE_HOME??join11(home,".genie");return[join11(genieHome3,"tmux.conf"),join11(__dirname,"..","..","scripts","tmux","genie.tmux.conf"),join11(home,".bun","install","global","node_modules","@automagik","genie","scripts","tmux","genie.tmux.conf")].find((p)=>existsSync8(p))??"/dev/null"}function genieTmuxPrefix(){return["-L",GENIE_TMUX_SOCKET,"-f",resolveGenieTmuxConf()]}function genieTmuxCmd(subcommand){return`${tmuxBin()} ${genieTmuxPrefix().join(" ")} ${subcommand}`}function prependEnvVars(command,env){if(!env||Object.keys(env).length===0)return command;return`env ${Object.entries(env).map(([k,v])=>`${k}=${v}`).join(" ")} ${command}`}function getLogDir(){let logDir=join11(homedir6(),".genie","logs","tmux");if(!existsSync8(logDir))mkdirSync5(logDir,{recursive:!0});return logDir}function stripVerboseFlags(args){return args.filter((arg)=>!/^-v+$/.test(arg))}function isTmuxDebugEnabled(){return process.env.GENIE_TMUX_DEBUG==="1"}async function executeTmux(args){let argList=typeof args==="string"?args.split(/\s+/).filter(Boolean):args,finalArgs=stripVerboseFlags(argList),debugMode=isTmuxDebugEnabled(),options={};if(debugMode)finalArgs=["-v",...finalArgs],options.cwd=getLogDir();finalArgs=[...genieTmuxPrefix(),...finalArgs];let command=`${tmuxBin()} ${finalArgs.join(" ")}`,{stdout}=await exec(command,options);return stdout.trim()}var __dirname="/home/runner/_work/genie/genie/src/lib",exec,GENIE_TMUX_SOCKET;var init_tmux_wrapper=__esm(()=>{init_ensure_tmux();exec=promisify(execCallback),GENIE_TMUX_SOCKET=process.env.GENIE_TMUX_SOCKET||"genie"});var exports_tmux={};__export(exports_tmux,{setWindowEnv:()=>setWindowEnv,resolveRepoSession:()=>resolveRepoSession,listWindows:()=>listWindows,listPanes:()=>listPanes,killWindow:()=>killWindow,killSession:()=>killSession,isTmuxServerReachable:()=>isTmuxServerReachable,isPaneProcessRunning:()=>isPaneProcessRunning,isPaneAlive:()=>isPaneAlive,getWindowEnv:()=>getWindowEnv,getCurrentSessionName:()=>getCurrentSessionName,findWindowByName:()=>findWindowByName,findSessionByName:()=>findSessionByName,executeTmux:()=>executeTmux2,ensureTeamWindow:()=>ensureTeamWindow,createSession:()=>createSession,capturePaneContent:()=>capturePaneContent,applyPaneColor:()=>applyPaneColor,TmuxUnreachableError:()=>TmuxUnreachableError});import{existsSync as existsSync9}from"fs";import{basename,join as join12}from"path";async function executeTmux2(tmuxCommand){let{executeTmux:wrapperExec}=await Promise.resolve().then(() => (init_tmux_wrapper(),exports_tmux_wrapper));try{return await wrapperExec(tmuxCommand)}catch(error){let message=error instanceof Error?error.message:String(error);throw Error(`Failed to execute tmux command: ${message}`)}}async function getCurrentSessionName(hint){if(process.env.TMUX)try{return(await executeTmux2("display-message -p '#{session_name}'")).trim()||null}catch{return null}try{let sessions=await listSessions();if(sessions.length===0)return null;if(hint){let match=sessions.find((s)=>s.name.includes(hint));if(match)return match.name}return sessions[0].name}catch{return null}}async function listSessions(){try{let output=await executeTmux2("list-sessions -F '#{session_id}:#{session_name}:#{?session_attached,1,0}:#{session_windows}'");if(!output)return[];return output.split(`
192
+ `):null}function writeCodexPromptFile(params,content){let{mkdirSync:mkdirSync2,writeFileSync:writeFileSync2}=__require("fs"),{join:join5}=__require("path");mkdirSync2(CODEX_PROMPT_DIR,{recursive:!0});let stem=sanitizeCodexPromptFileStem(params.executorId??Date.now().toString(36)),promptFile=join5(CODEX_PROMPT_DIR,`${stem}.txt`);return writeFileSync2(promptFile,content,"utf-8"),promptFile}function buildCodexCommand(params){preflightCheck("codex");let parts=["codex"],env={};if(params.executorId)env.GENIE_EXECUTOR_ID=params.executorId;if(params.agentId)env.GENIE_AGENT_ID=params.agentId;if(params.role)env.GENIE_AGENT_NAME=params.role;else if(params.name)env.GENIE_AGENT_NAME=params.name;if(params.team)env.GENIE_TEAM=params.team;let{forwarded:extraArgs,promptFiles:extraPromptFiles}=splitCodexExtraArgs(params.extraArgs);parts.push("--yolo"),parts.push("--no-alt-screen");let codexModel=sanitizeModelForProvider("codex",params.model);if(codexModel)parts.push("--model",escapeShellArg2(codexModel));for(let arg of extraArgs)parts.push(escapeShellArg2(arg));let mergedPrompt=buildCodexMergedPrompt(params,extraPromptFiles);if(mergedPrompt!==null){let promptFile=writeCodexPromptFile(params,mergedPrompt);parts.push(`"$(cat ${escapeShellArg2(promptFile)})"`)}else parts.push(escapeShellArg2(buildCodexAutoPrompt(params)));return{command:parts.join(" "),provider:"codex",env:Object.keys(env).length>0?env:void 0,meta:{role:params.role,skill:params.skill}}}function buildLaunchCommand(params){let validated=validateSpawnParams(params);switch(validated.provider){case"claude":return buildClaudeCommand(validated);case"codex":return buildCodexCommand(validated);case"claude-sdk":return{command:"claude-sdk-in-process",provider:"claude-sdk",meta:{role:validated.role,skill:validated.skill}};default:throw Error(`Unknown provider "${validated.provider}". Valid providers: claude, codex, claude-sdk`)}}var CLAUDE_TEAM_COLORS,spawnParamsSchema,CODEX_PROMPT_DIR="/tmp/genie-codex-prompts",CODEX_PROMPT_FILE_FLAGS;var init_provider_adapters=__esm(()=>{init_zod();init_inject();init_builtin_agents();init_provider_models();init_trace_context();CLAUDE_TEAM_COLORS=["red","blue","green","yellow","purple","orange","pink","cyan"],spawnParamsSchema=exports_external.object({provider:exports_external.enum(["claude","codex","claude-sdk","app-pty"]),team:exports_external.string().min(1,"Team name is required"),role:exports_external.string().optional(),agentTemplate:exports_external.string().optional(),skill:exports_external.string().optional(),agentId:exports_external.string().optional(),executorId:exports_external.string().uuid().optional(),extraArgs:exports_external.array(exports_external.string()).optional(),nativeTeam:exports_external.object({enabled:exports_external.boolean(),parentSessionId:exports_external.string().optional(),color:exports_external.string().optional(),agentType:exports_external.string().optional(),planModeRequired:exports_external.boolean().optional(),permissionMode:exports_external.string().optional(),agentName:exports_external.string().optional()}).optional(),sessionId:exports_external.string().uuid().optional(),resume:exports_external.string().optional(),systemPromptFile:exports_external.string().optional(),systemPrompt:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),model:exports_external.string().optional(),initialPrompt:exports_external.string().optional(),name:exports_external.string().optional(),permissions:exports_external.object({allow:exports_external.array(exports_external.string()).optional(),deny:exports_external.array(exports_external.string()).optional(),allowedTools:exports_external.array(exports_external.string()).optional(),permissionMode:exports_external.enum(["default","acceptEdits","bypassPermissions","plan","dontAsk","auto","remoteApproval"]).optional()}).optional(),disallowedTools:exports_external.array(exports_external.string()).optional(),otelPort:exports_external.number().optional(),otelLogPrompts:exports_external.boolean().optional(),otelWishSlug:exports_external.string().optional(),newWindow:exports_external.boolean().optional(),windowTarget:exports_external.string().optional()});CODEX_PROMPT_FILE_FLAGS=new Set(["--append-system-prompt-file","--system-prompt-file"])});var palette;var init_palette=__esm(()=>{palette={bg:"#0a1d2a",bgRaised:"#0f2638",bgHover:"#143049",bgOverlay:"rgba(10, 29, 42, 0.92)",text:"#c9cfd4",textDim:"#8a9499",textMuted:"#5e6e74",border:"#2a3f4f",borderActive:"#7fc8a9",accent:"#7fc8a9",accentDim:"#5a9d82",accentBright:"#9eddc1",success:"#7fc8a9",warning:"#d4a574",error:"#a83838",errorBright:"#c44a4a",info:"#5a8ca8",beige:"#d4c5a9",innieGrey:"#5e6e74",outieAmber:"#d4a574",scrollTrack:"#2a3f4f",scrollThumb:"#5e6e74"}});var tokens;var init_tokens=__esm(()=>{init_palette();tokens={accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,surface:palette.bg,surfaceRaised:palette.bgRaised,surfaceHover:palette.bgHover,surfaceOverlay:palette.bgOverlay,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,borderActive:palette.borderActive,danger:palette.error,dangerStrong:palette.errorBright,attention:palette.warning,info:palette.info,success:palette.success,severed:palette.innieGrey,outieWarm:palette.outieAmber,lumonBeige:palette.beige}});function hexToRgb(hex){let m=hex.trim().match(/^#?([0-9a-fA-F]{6})$/);if(!m)throw Error(`Invalid hex: ${hex}`);let n=Number.parseInt(m[1],16);return[n>>16&255,n>>8&255,n&255]}function rgbToHex([r,g,b]){let c=(v)=>Math.max(0,Math.min(255,Math.round(v))).toString(16).padStart(2,"0");return`#${c(r)}${c(g)}${c(b)}`}function rgbToHsl([r,g,b]){let rn=r/255,gn=g/255,bn=b/255,max=Math.max(rn,gn,bn),min=Math.min(rn,gn,bn),l=(max+min)/2;if(max===min)return[0,0,l];let d=max-min,s=l>0.5?d/(2-max-min):d/(max+min),h;switch(max){case rn:h=((gn-bn)/d+(gn<bn?6:0))*60;break;case gn:h=((bn-rn)/d+2)*60;break;default:h=((rn-gn)/d+4)*60}return[h,s,l]}function hslToRgb([h,s,l]){if(s===0){let v=l*255;return[v,v,v]}let q=l<0.5?l*(1+s):l+s-l*s,p=2*l-q,hk=(h%360+360)%360/360,f=(t)=>{let tt=t;if(tt<0)tt+=1;if(tt>1)tt-=1;if(tt<0.16666666666666666)return p+(q-p)*6*tt;if(tt<0.5)return q;if(tt<0.6666666666666666)return p+(q-p)*(0.6666666666666666-tt)*6;return p};return[f(hk+0.3333333333333333)*255,f(hk)*255,f(hk-0.3333333333333333)*255]}function rotateHue(hex,deg){let[h,s,l]=rgbToHsl(hexToRgb(hex));return rgbToHex(hslToRgb([h+deg,s,l]))}var init_genie_tokens=__esm(()=>{init_palette();init_tokens()});var exports_ensure_tmux={};__export(exports_ensure_tmux,{tmuxBin:()=>tmuxBin,ensureTmux:()=>ensureTmux});import{execSync}from"child_process";import{chmodSync,copyFileSync,existsSync as existsSync4,mkdirSync as mkdirSync2,rmSync,unlinkSync as unlinkSync2,writeFileSync as writeFileSync2}from"fs";import{arch,homedir as homedir3,platform,tmpdir}from"os";import{join as join5}from"path";function getPlatformAsset(){let os=platform(),cpu=arch(),key=`${os}-${cpu}`,asset={"linux-x64":`tmux-${TMUX_VERSION}-linux-x86_64.tar.gz`,"linux-arm64":`tmux-${TMUX_VERSION}-linux-arm64.tar.gz`,"darwin-arm64":`tmux-${TMUX_VERSION}-macos-arm64.tar.gz`,"darwin-x64":`tmux-${TMUX_VERSION}-macos-x86_64.tar.gz`}[key];if(!asset)throw Error(`Unsupported platform: ${key}
193
+ tmux auto-download supports: linux-x64, linux-arm64, macos-arm64, macos-x64.
194
+ Install tmux manually: https://github.com/tmux/tmux/wiki/Installing`);return asset}function genieHome(){return process.env.GENIE_HOME??join5(homedir3(),".genie")}function genieBinDir(){return join5(genieHome(),"bin")}function cachedTmuxPath(){return join5(genieBinDir(),"tmux")}function tmuxBin(){if(_resolved)return _resolved;try{let p=execSync("which tmux",{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim();if(p)return _resolved=p,p}catch{}let cached=cachedTmuxPath();if(existsSync4(cached))return _resolved=cached,cached;return"tmux"}async function ensureTmux(){let bin=tmuxBin();if(bin!=="tmux")return bin;return downloadTmux()}async function downloadTmux(){let asset=getPlatformAsset(),url=process.env.GENIE_TMUX_URL??`https://github.com/tmux/tmux-builds/releases/download/v${TMUX_VERSION}/${asset}`,dest=cachedTmuxPath(),tempDir=join5(tmpdir(),`genie-tmux-download-${Date.now()}`);console.log(" tmux not found \u2014 downloading static binary..."),console.log(` ${url}`);try{let response=await fetch(url);if(!response.ok)throw Error(`HTTP ${response.status} ${response.statusText}`);let buffer=Buffer.from(await response.arrayBuffer()),sizeMB=(buffer.byteLength/1024/1024).toFixed(1);console.log(` Downloaded ${sizeMB} MB`),mkdirSync2(tempDir,{recursive:!0});let tarballPath=join5(tempDir,asset);writeFileSync2(tarballPath,buffer),execSync(`tar -xzf '${tarballPath}' -C '${tempDir}'`,{stdio:"ignore"});let extractedBin=join5(tempDir,"tmux");if(!existsSync4(extractedBin))throw Error("Tarball did not contain a tmux binary");mkdirSync2(genieBinDir(),{recursive:!0}),copyFileSync(extractedBin,dest),chmodSync(dest,493);let version=execSync(`'${dest}' -V`,{encoding:"utf-8",stdio:["pipe","pipe","ignore"]}).trim();return _resolved=dest,console.log(` ${version} installed to ${dest}`),dest}catch(err){try{if(existsSync4(dest))unlinkSync2(dest)}catch{}let msg=err instanceof Error?err.message:String(err);throw Error(`Failed to download tmux: ${msg}
195
+ Install manually:
196
+ Linux: sudo apt install tmux
197
+ macOS: brew install tmux`)}finally{try{rmSync(tempDir,{recursive:!0,force:!0})}catch{}}}var TMUX_VERSION="3.6a",_resolved=null;var init_ensure_tmux=()=>{};var SessionConfigSchema,TerminalConfigSchema,LoggingConfigSchema,ShellConfigSchema,ShortcutsConfigSchema,CodexConfigSchema,WorkerProfileSchema,OtelConfigSchema,OmniConfigSchema,BrainConfigSchema,CouncilPresetSchema,GenieConfigSchema;var init_genie_config=__esm(()=>{init_zod();SessionConfigSchema=exports_external.object({name:exports_external.string().default("genie"),defaultWindow:exports_external.string().default("shell"),autoCreate:exports_external.boolean().default(!0)}),TerminalConfigSchema=exports_external.object({execTimeout:exports_external.number().default(120000),readLines:exports_external.number().default(100),worktreeBase:exports_external.string().optional()}),LoggingConfigSchema=exports_external.object({tmuxDebug:exports_external.boolean().default(!1),verbose:exports_external.boolean().default(!1)}),ShellConfigSchema=exports_external.object({preference:exports_external.enum(["auto","zsh","bash","fish"]).default("auto")}),ShortcutsConfigSchema=exports_external.object({tmuxInstalled:exports_external.boolean().default(!1),shellInstalled:exports_external.boolean().default(!1)}),CodexConfigSchema=exports_external.object({configured:exports_external.boolean().default(!1)}),WorkerProfileSchema=exports_external.object({launcher:exports_external.preprocess((val)=>val==="claudio"?"claude":val,exports_external.literal("claude")),claudeArgs:exports_external.array(exports_external.string())}).passthrough(),OtelConfigSchema=exports_external.object({enabled:exports_external.boolean().default(!0),port:exports_external.number().optional(),logPrompts:exports_external.boolean().default(!0)}),OmniConfigSchema=exports_external.object({apiUrl:exports_external.string(),apiKey:exports_external.string().optional(),defaultInstanceId:exports_external.string().optional(),executor:exports_external.enum(["tmux","sdk"]).optional()}),BrainConfigSchema=exports_external.object({embedded:exports_external.boolean().default(!0),paths:exports_external.array(exports_external.string()).optional()}),CouncilPresetSchema=exports_external.object({left:exports_external.string(),right:exports_external.string(),skill:exports_external.string().default("council")}),GenieConfigSchema=exports_external.object({version:exports_external.number().default(2),session:SessionConfigSchema.default({}),terminal:TerminalConfigSchema.default({}),logging:LoggingConfigSchema.default({}),shell:ShellConfigSchema.default({}),shortcuts:ShortcutsConfigSchema.default({}),codex:CodexConfigSchema.optional(),installMethod:exports_external.enum(["source","npm","bun"]).optional(),updateChannel:exports_external.enum(["latest","next"]).default("latest"),setupComplete:exports_external.boolean().default(!1),lastSetupAt:exports_external.string().optional(),sourcePath:exports_external.string().optional(),workerProfiles:exports_external.record(exports_external.string(),WorkerProfileSchema).optional(),defaultWorkerProfile:exports_external.string().optional(),councilPresets:exports_external.record(exports_external.string(),CouncilPresetSchema).optional(),defaultCouncilPreset:exports_external.string().optional(),promptMode:exports_external.enum(["append","system"]).default("append"),autoMergeDev:exports_external.boolean().default(!1),defaultProject:exports_external.string().optional(),otel:OtelConfigSchema.optional(),omni:OmniConfigSchema.optional(),brain:BrainConfigSchema.default({})})});var exports_genie_config={};__export(exports_genie_config,{updateShortcutsConfig:()=>updateShortcutsConfig,saveGenieConfig:()=>saveGenieConfig,resetConfig:()=>resetConfig,markSetupComplete:()=>markSetupComplete,loadGenieConfigSync:()=>loadGenieConfigSync,loadGenieConfig:()=>loadGenieConfig,isSetupComplete:()=>isSetupComplete,getTerminalConfig:()=>getTerminalConfig,getGenieDir:()=>getGenieDir,getGenieConfigPath:()=>getGenieConfigPath,genieConfigExists:()=>genieConfigExists,contractPath:()=>contractPath});import{existsSync as existsSync5,mkdirSync as mkdirSync3,readFileSync as readFileSync3,writeFileSync as writeFileSync3}from"fs";import{homedir as homedir4}from"os";import{join as join6}from"path";function getGenieDir(){return GENIE_DIR}function getGenieConfigPath(){return GENIE_CONFIG_FILE}function genieConfigExists(){return existsSync5(GENIE_CONFIG_FILE)}function ensureGenieDir(){if(!existsSync5(GENIE_DIR))mkdirSync3(GENIE_DIR,{recursive:!0})}async function loadGenieConfig(){if(!existsSync5(GENIE_CONFIG_FILE))return GenieConfigSchema.parse({});try{let content=readFileSync3(GENIE_CONFIG_FILE,"utf-8"),data=JSON.parse(content);return GenieConfigSchema.parse(data)}catch(error){let message=error instanceof Error?error.message:String(error);return console.warn(`Warning: Invalid genie config, using defaults: ${message}`),GenieConfigSchema.parse({})}}async function saveGenieConfig(config){ensureGenieDir();try{let validated=GenieConfigSchema.parse(config),content=JSON.stringify(validated,null,2);writeFileSync3(GENIE_CONFIG_FILE,content,"utf-8")}catch(error){let message=error instanceof Error?error.message:String(error);throw Error(`Failed to save genie config: ${message}`)}}function getDefaultGenieConfig(){return GenieConfigSchema.parse({})}function loadGenieConfigSync(){if(!existsSync5(GENIE_CONFIG_FILE))return GenieConfigSchema.parse({});try{let content=readFileSync3(GENIE_CONFIG_FILE,"utf-8"),data=JSON.parse(content);return GenieConfigSchema.parse(data)}catch{return GenieConfigSchema.parse({})}}function contractPath(path){let home=homedir4();if(path.startsWith(`${home}/`))return`~${path.slice(home.length)}`;if(path===home)return"~";return path}function getTerminalConfig(){return loadGenieConfigSync().terminal}function isSetupComplete(){if(!genieConfigExists())return!1;return loadGenieConfigSync().setupComplete??!1}async function markSetupComplete(){let config=await loadGenieConfig();config.setupComplete=!0,config.lastSetupAt=new Date().toISOString(),await saveGenieConfig(config)}async function resetConfig(){let defaultConfig=getDefaultGenieConfig();await saveGenieConfig(defaultConfig)}async function updateShortcutsConfig(partial){let config=await loadGenieConfig();config.shortcuts={...config.shortcuts,...partial},await saveGenieConfig(config)}var GENIE_DIR,GENIE_CONFIG_FILE;var init_genie_config2=__esm(()=>{init_genie_config();GENIE_DIR=join6(homedir4(),".genie"),GENIE_CONFIG_FILE=join6(GENIE_DIR,"config.json")});var exports_team_lead_command={};__export(exports_team_lead_command,{shellQuote:()=>shellQuote,sessionExists:()=>sessionExists,ccProjectDirName:()=>ccProjectDirName,buildTeamLeadCommand:()=>buildTeamLeadCommand});import{readFileSync as readFileSync4,readdirSync as readdirSync3}from"fs";import{join as join7}from"path";function shellQuote(s){return`'${s.replace(/'/g,"'\\''")}'`}function buildTeamLeadCommand(teamName,options){let sanitized=sanitizeTeamName(teamName),qTeam=shellQuote(sanitized),resolvedLeader=options?.leaderName??teamName,sanitizedLeader=sanitizeTeamName(resolvedLeader),parts=["GENIE_WORKER=1","CLAUDECODE=1","CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1",`GENIE_TEAM=${qTeam}`,`GENIE_AGENT_NAME=${shellQuote(sanitizedLeader)}`,"claude",`--agent-id ${shellQuote(`${sanitizedLeader}@${sanitized}`)}`,`--agent-name ${shellQuote(sanitizedLeader)}`,`--team-name ${qTeam}`,"--agent-type team-lead","--permission-mode auto"];if(parts.push(`--name ${shellQuote(sanitized)}`),options?.sessionId){let flag=options.resume?"--resume":"--session-id";parts.push(`${flag} ${shellQuote(options.sessionId)}`)}if(options?.systemPromptFile){let promptFlag=(options?.promptMode??loadGenieConfigSync().promptMode)==="system"?"--system-prompt-file":"--append-system-prompt-file";parts.push(`${promptFlag} ${shellQuote(options.systemPromptFile)}`)}return parts.join(" ")}function ccProjectDirName(dir){return dir.replace(/\//g,"-")}function fileHasSessionName(filePath,needle){try{let lines=readFileSync4(filePath,"utf-8").split(`
198
+ `).slice(0,10);for(let line of lines){if(!line.includes("custom-title"))continue;let entry=JSON.parse(line);if(entry.type==="custom-title"&&entry.customTitle?.toLowerCase()===needle)return!0}}catch{}return!1}function sessionExists(name,cwd){try{let home=process.env.HOME??"/root",projectDir=ccProjectDirName(cwd??process.cwd()),projectPath=join7(home,".claude","projects",projectDir),files;try{files=readdirSync3(projectPath).filter((f)=>f.endsWith(".jsonl"))}catch{return!1}let needle=name.toLowerCase();return files.some((file)=>{let full=join7(projectPath,file);return fileHasSessionName(full,needle)||fileHasSessionName(full,`${needle}-${needle}`)})}catch{return!1}}var init_team_lead_command=__esm(()=>{init_claude_native_teams();init_genie_config2()});var exports_tmux_wrapper={};__export(exports_tmux_wrapper,{prependEnvVars:()=>prependEnvVars,genieTmuxPrefix:()=>genieTmuxPrefix,genieTmuxCmd:()=>genieTmuxCmd,executeTmux:()=>executeTmux});import{exec as execCallback}from"child_process";import{existsSync as existsSync6,mkdirSync as mkdirSync4}from"fs";import{homedir as homedir5}from"os";import{join as join8}from"path";import{promisify}from"util";function resolveGenieTmuxConf(){let home=homedir5(),genieHome2=process.env.GENIE_HOME??join8(home,".genie");return[join8(genieHome2,"tmux.conf"),join8(__dirname,"..","..","scripts","tmux","genie.tmux.conf"),join8(home,".bun","install","global","node_modules","@automagik","genie","scripts","tmux","genie.tmux.conf")].find((p)=>existsSync6(p))??"/dev/null"}function genieTmuxPrefix(){return["-L",GENIE_TMUX_SOCKET,"-f",resolveGenieTmuxConf()]}function genieTmuxCmd(subcommand){return`${tmuxBin()} ${genieTmuxPrefix().join(" ")} ${subcommand}`}function prependEnvVars(command,env){if(!env||Object.keys(env).length===0)return command;return`env ${Object.entries(env).map(([k,v])=>`${k}=${v}`).join(" ")} ${command}`}function getLogDir(){let logDir=join8(homedir5(),".genie","logs","tmux");if(!existsSync6(logDir))mkdirSync4(logDir,{recursive:!0});return logDir}function stripVerboseFlags(args){return args.filter((arg)=>!/^-v+$/.test(arg))}function isTmuxDebugEnabled(){return process.env.GENIE_TMUX_DEBUG==="1"}async function executeTmux(args){let argList=typeof args==="string"?args.split(/\s+/).filter(Boolean):args,finalArgs=stripVerboseFlags(argList),debugMode=isTmuxDebugEnabled(),options={};if(debugMode)finalArgs=["-v",...finalArgs],options.cwd=getLogDir();finalArgs=[...genieTmuxPrefix(),...finalArgs];let command=`${tmuxBin()} ${finalArgs.join(" ")}`,{stdout}=await exec(command,options);return stdout.trim()}var __dirname="/home/runner/_work/genie/genie/src/lib",exec,GENIE_TMUX_SOCKET;var init_tmux_wrapper=__esm(()=>{init_ensure_tmux();exec=promisify(execCallback),GENIE_TMUX_SOCKET=process.env.GENIE_TMUX_SOCKET||"genie"});var exports_tmux={};__export(exports_tmux,{setWindowEnv:()=>setWindowEnv,resolveRepoSession:()=>resolveRepoSession,listWindows:()=>listWindows,listPanes:()=>listPanes,killWindow:()=>killWindow,killSession:()=>killSession,isTmuxServerReachable:()=>isTmuxServerReachable,isPaneProcessRunning:()=>isPaneProcessRunning,isPaneAlive:()=>isPaneAlive,getWindowEnv:()=>getWindowEnv,getCurrentSessionName:()=>getCurrentSessionName,findWindowByName:()=>findWindowByName,findSessionByName:()=>findSessionByName,executeTmux:()=>executeTmux2,ensureTeamWindow:()=>ensureTeamWindow,createSession:()=>createSession,capturePaneContent:()=>capturePaneContent,applyPaneColor:()=>applyPaneColor,TmuxUnreachableError:()=>TmuxUnreachableError});import{existsSync as existsSync7}from"fs";import{basename,join as join9}from"path";async function executeTmux2(tmuxCommand){let{executeTmux:wrapperExec}=await Promise.resolve().then(() => (init_tmux_wrapper(),exports_tmux_wrapper));try{return await wrapperExec(tmuxCommand)}catch(error){let message=error instanceof Error?error.message:String(error);throw Error(`Failed to execute tmux command: ${message}`)}}async function getCurrentSessionName(hint){if(process.env.TMUX)try{return(await executeTmux2("display-message -p '#{session_name}'")).trim()||null}catch{return null}try{let sessions=await listSessions();if(sessions.length===0)return null;if(hint){let match=sessions.find((s)=>s.name.includes(hint));if(match)return match.name}return sessions[0].name}catch{return null}}async function listSessions(){try{let output=await executeTmux2("list-sessions -F '#{session_id}:#{session_name}:#{?session_attached,1,0}:#{session_windows}'");if(!output)return[];return output.split(`
301
199
  `).map((line)=>{let[id,name,attached,windows]=line.split(":");return{id,name,attached:attached==="1",windows:Number.parseInt(windows,10)}})}catch(error){if((error instanceof Error?error.message:String(error)).includes("no server running"))return[];throw error}}async function findSessionByName(name){try{return(await listSessions()).find((session)=>session.name===name)||null}catch(_error){return null}}async function getWindowEnv(target,varName){try{let output=await executeTmux2(`show-environment -t ${shellQuote(target)} ${shellQuote(varName)}`),prefix=`${varName}=`;if(output?.startsWith(prefix))return output.slice(prefix.length).trim();return null}catch{return null}}async function setWindowEnv(target,varName,value){await executeTmux2(`set-environment -t ${shellQuote(target)} ${shellQuote(varName)} ${shellQuote(value)}`)}async function killSession(sessionId){await executeTmux2(`kill-session -t '${sessionId}'`)}async function listWindows(sessionId){try{let output=await executeTmux2(`list-windows -t '=${sessionId}' -F '#{window_id}:#{window_name}:#{window_index}:#{?window_active,1,0}'`);if(!output)return[];return output.split(`
302
200
  `).map((line)=>{let[id,name,indexStr,active]=line.split(":");return{id,name,index:Number.parseInt(indexStr,10),active:active==="1",sessionId}})}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("session not found"))return[];throw error}}async function listPanes(windowId){try{let output=await executeTmux2(`list-panes -t '${windowId}' -F '#{pane_id}:#{pane_title}:#{?pane_active,1,0}'`);if(!output)return[];return output.split(`
303
- `).map((line)=>{let[id,title,active]=line.split(":");return{id,windowId,title,active:active==="1"}})}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("window not found"))return[];throw error}}async function capturePaneContent(paneId,lines=200,includeColors=!1){try{return await executeTmux2(`capture-pane -p ${includeColors?"-e":""} -t '${paneId}' -S -${lines} -E -`)}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("pane not found"))return"";throw error}}async function createSession(name){return await executeTmux2(`new-session -d -s "${name}" -e LC_ALL=C.UTF-8 -e LANG=C.UTF-8`),findSessionByName(name)}async function createWindow(sessionId,name,workingDir){let cdFlag=workingDir?` -c '${workingDir.replace(/'/g,"'\\''")}'`:"",output=await executeTmux2(`new-window -d -P -F '#{window_id}:#{window_index}' -t '${sessionId}:' -n '${name}'${cdFlag}`),[windowId,indexStr]=output.trim().split(":");if(!windowId)return null;try{await executeTmux2(`set-window-option -t '${windowId}' automatic-rename off`)}catch{}return{id:windowId,name,index:Number.parseInt(indexStr,10)||0,active:!1,sessionId}}async function findWindowByName(sessionId,name){return(await listWindows(sessionId)).find((w)=>w.name===name)||null}async function ensureMasterWindow(session,masterName){try{let windows=await listWindows(session);if(windows.length<2)return;let masterWindow=windows.find((w)=>w.name===masterName);if(!masterWindow)return;let minIndex=Math.min(...windows.map((w)=>w.index));if(masterWindow.index===minIndex)return;await executeTmux2(`swap-window -s '${session}:${masterWindow.index}' -t '${session}:${minIndex}'`)}catch{}}async function ensureSessionExists(name){if(/^[@$]\d+$/.test(name))throw Error(`Refused to create tmux session with id-shaped name "${name}". Names matching /^[@$]\\d+$/ collide with tmux's window-id (@N) and session-id ($N) notation, producing ghost sessions that cannot be safely targeted. Pass a human-readable session name (e.g. the team or agent name) instead.`);try{await executeTmux2(`new-session -d -s "${name}" -e LC_ALL=C.UTF-8 -e LANG=C.UTF-8`)}catch(error){if((error instanceof Error?error.message:String(error)).includes("duplicate session"))return;throw error}}async function ensureTeamWindow(session,teamName,workingDir){for(let attempt=0;attempt<3;attempt++)try{return await ensureTeamWindowOnce(session,teamName,workingDir)}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting")){if(attempt<2){let delay=250*2**attempt;console.warn(`[genie-tmux] tmux server unreachable (attempt ${attempt+1}/3), retrying in ${delay}ms...`),await new Promise((resolve3)=>setTimeout(resolve3,delay));continue}}throw error}throw Error("Failed to ensure team window after 3 attempts")}async function ensureTeamWindowOnce(session,teamName,workingDir){await ensureSessionExists(session);let existing=await findWindowByName(session,teamName);if(existing){try{await executeTmux2(`set-window-option -t '${existing.id}' automatic-rename off`)}catch{}await rehydratePaneColorHook(existing.id);let panes2=await listPanes(existing.id),paneId2=panes2.length>0?panes2[0].id:`${session}:${teamName}.0`;return{windowId:existing.id,windowName:teamName,sessionName:session,paneId:paneId2,created:!1}}let windowsBefore=await listWindows(session),masterBefore=windowsBefore.length>0?windowsBefore.reduce((a,b)=>a.index<=b.index?a:b):null,newWindow=await createWindow(session,teamName,workingDir);if(!newWindow)throw Error(`Failed to create team window "${teamName}" in session "${session}"`);if(masterBefore)await ensureMasterWindow(session,masterBefore.name);await rehydratePaneColorHook(newWindow.id);let panes=await listPanes(newWindow.id),paneId=panes.length>0?panes[0].id:`${session}:${teamName}.0`;return{windowId:newWindow.id,windowName:teamName,sessionName:session,paneId,created:!0}}function ensurePaneColorScript(){let{existsSync:existsSync10,writeFileSync:writeFileSync6,mkdirSync:mkdirSync6,chmodSync:chmodSync2}=__require("fs"),{dirname:dirname5}=__require("path");if(existsSync10(PANE_COLOR_SCRIPT))return;mkdirSync6(dirname5(PANE_COLOR_SCRIPT),{recursive:!0});let bin=tmuxBin();writeFileSync6(PANE_COLOR_SCRIPT,`#!/bin/bash
201
+ `).map((line)=>{let[id,title,active]=line.split(":");return{id,windowId,title,active:active==="1"}})}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("window not found"))return[];throw error}}async function capturePaneContent(paneId,lines=200,includeColors=!1){try{return await executeTmux2(`capture-pane -p ${includeColors?"-e":""} -t '${paneId}' -S -${lines} -E -`)}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("pane not found"))return"";throw error}}async function createSession(name){return await executeTmux2(`new-session -d -s "${name}" -e LC_ALL=C.UTF-8 -e LANG=C.UTF-8`),findSessionByName(name)}async function createWindow(sessionId,name,workingDir){let cdFlag=workingDir?` -c '${workingDir.replace(/'/g,"'\\''")}'`:"",output=await executeTmux2(`new-window -d -P -F '#{window_id}:#{window_index}' -t '${sessionId}:' -n '${name}'${cdFlag}`),[windowId,indexStr]=output.trim().split(":");if(!windowId)return null;try{await executeTmux2(`set-window-option -t '${windowId}' automatic-rename off`)}catch{}return{id:windowId,name,index:Number.parseInt(indexStr,10)||0,active:!1,sessionId}}async function findWindowByName(sessionId,name){return(await listWindows(sessionId)).find((w)=>w.name===name)||null}async function ensureMasterWindow(session,masterName){try{let windows=await listWindows(session);if(windows.length<2)return;let masterWindow=windows.find((w)=>w.name===masterName);if(!masterWindow)return;let minIndex=Math.min(...windows.map((w)=>w.index));if(masterWindow.index===minIndex)return;await executeTmux2(`swap-window -s '${session}:${masterWindow.index}' -t '${session}:${minIndex}'`)}catch{}}async function ensureSessionExists(name){if(/^[@$]\d+$/.test(name))throw Error(`Refused to create tmux session with id-shaped name "${name}". Names matching /^[@$]\\d+$/ collide with tmux's window-id (@N) and session-id ($N) notation, producing ghost sessions that cannot be safely targeted. Pass a human-readable session name (e.g. the team or agent name) instead.`);try{await executeTmux2(`new-session -d -s "${name}" -e LC_ALL=C.UTF-8 -e LANG=C.UTF-8`)}catch(error){if((error instanceof Error?error.message:String(error)).includes("duplicate session"))return;throw error}}async function ensureTeamWindow(session,teamName,workingDir){for(let attempt=0;attempt<3;attempt++)try{return await ensureTeamWindowOnce(session,teamName,workingDir)}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting")){if(attempt<2){let delay=250*2**attempt;console.warn(`[genie-tmux] tmux server unreachable (attempt ${attempt+1}/3), retrying in ${delay}ms...`),await new Promise((resolve2)=>setTimeout(resolve2,delay));continue}}throw error}throw Error("Failed to ensure team window after 3 attempts")}async function ensureTeamWindowOnce(session,teamName,workingDir){await ensureSessionExists(session);let existing=await findWindowByName(session,teamName);if(existing){try{await executeTmux2(`set-window-option -t '${existing.id}' automatic-rename off`)}catch{}await rehydratePaneColorHook(existing.id);let panes2=await listPanes(existing.id),paneId2=panes2.length>0?panes2[0].id:`${session}:${teamName}.0`;return{windowId:existing.id,windowName:teamName,sessionName:session,paneId:paneId2,created:!1}}let windowsBefore=await listWindows(session),masterBefore=windowsBefore.length>0?windowsBefore.reduce((a,b)=>a.index<=b.index?a:b):null,newWindow=await createWindow(session,teamName,workingDir);if(!newWindow)throw Error(`Failed to create team window "${teamName}" in session "${session}"`);if(masterBefore)await ensureMasterWindow(session,masterBefore.name);await rehydratePaneColorHook(newWindow.id);let panes=await listPanes(newWindow.id),paneId=panes.length>0?panes[0].id:`${session}:${teamName}.0`;return{windowId:newWindow.id,windowName:teamName,sessionName:session,paneId,created:!0}}function ensurePaneColorScript(){let{existsSync:existsSync8,writeFileSync:writeFileSync4,mkdirSync:mkdirSync5,chmodSync:chmodSync2}=__require("fs"),{dirname:dirname3}=__require("path");if(existsSync8(PANE_COLOR_SCRIPT))return;mkdirSync5(dirname3(PANE_COLOR_SCRIPT),{recursive:!0});let bin=tmuxBin();writeFileSync4(PANE_COLOR_SCRIPT,`#!/bin/bash
304
202
  # Genie tmux pane color router \u2014 reads @genie_color pane option
305
203
  PANE_ID="$1"
306
204
  COLOR=$(${bin} display-message -p -t "$PANE_ID" '#{@genie_color}' 2>/dev/null)
307
205
  [ -z "$COLOR" ] && COLOR="default"
308
206
  ${bin} set-option -w pane-active-border-style "fg=$COLOR"
309
- `),chmodSync2(PANE_COLOR_SCRIPT,493)}async function applyPaneColor(paneId,color,windowId){let hex=TMUX_COLOR_MAP[color]??TMUX_COLOR_MAP.blue;try{ensurePaneColorScript(),await executeTmux2(`set-option -p -t '${paneId}' @genie_color '${hex}'`);try{let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));await(await getConnection2())`UPDATE executors SET pane_color = ${hex} WHERE tmux_pane_id = ${paneId}`}catch{}if(windowId)await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function rehydratePaneColorHook(windowId){try{ensurePaneColorScript(),await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function resolveRepoSession(repoPath){let derived=basename(repoPath);try{let sessions=await listSessions(),exact=sessions.find((s)=>s.name===derived);if(exact)return exact.name;if(process.env.TMUX)try{let name=(await executeTmux2("display-message -p '#{session_name}'")).trim();if(name)return name}catch{}let partial=sessions.find((s)=>s.name.includes(derived));if(partial)return partial.name}catch{}return derived}function isTmuxSocketAlive(socketName){if(!socketName)return!1;let uid=process.getuid?.()??501;return existsSync9(join12(`/tmp/tmux-${uid}`,socketName))}async function isTmuxServerReachable(socketName){if(!socketName)return!1;if(!isTmuxSocketAlive(socketName))return!1;try{let{execSync:execSync2}=await import("child_process");return execSync2(`${tmuxBin()} -L ${shellQuote(socketName)} list-sessions -F ''`,{stdio:["ignore","ignore","ignore"],timeout:2000}),!0}catch{return!1}}async function isPaneAlive(paneId){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{return(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_dead}'`)).trim()==="0"}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting"))throw new TmuxUnreachableError(message);return!1}}async function isPaneProcessRunning(paneId,processName,execSyncFn){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{let panePid=(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_pid}'`)).trim();if(!panePid||!/^\d+$/.test(panePid))return!1;return(execSyncFn??(await import("child_process")).execSync)(`pgrep -la -P ${panePid} 2>/dev/null; for cpid in $(pgrep -P ${panePid} 2>/dev/null); do pgrep -la -P "$cpid" 2>/dev/null; done; true`,{encoding:"utf-8",timeout:5000}).toLowerCase().includes(processName.toLowerCase())}catch{return!1}}async function killWindow(sessionName,windowName){try{return await executeTmux2(`kill-window -t ${shellQuote(`${sessionName}:${windowName}`)}`),!0}catch{return!1}}var TMUX_COLOR_NAMES,TMUX_COLOR_MAP,PANE_COLOR_SCRIPT,TmuxUnreachableError;var init_tmux=__esm(()=>{init_genie_tokens();init_ensure_tmux();init_team_lead_command();TMUX_COLOR_NAMES=["red","blue","green","yellow","purple","orange","pink","cyan"],TMUX_COLOR_MAP=Object.fromEntries(TMUX_COLOR_NAMES.map((name,i2)=>[name,rotateHue(palette.accent,i2*45)])),PANE_COLOR_SCRIPT=`${__require("os").homedir()}/.genie/tmux-pane-color.sh`;TmuxUnreachableError=class TmuxUnreachableError extends Error{constructor(message){super(message);this.name="TmuxUnreachableError"}}});var exports_agent_registry={};__export(exports_agent_registry,{update:()=>update,unregister:()=>unregister,setCurrentExecutor:()=>setCurrentExecutor,saveTemplate:()=>saveTemplate,resolveAgentIdStrict:()=>resolveAgentIdStrict,resolveAgentId:()=>resolveAgentId,removeSubPane:()=>removeSubPane,register:()=>register,reconcileStaleSpawns:()=>reconcileStaleSpawns,listTemplates:()=>listTemplates,listForRender:()=>listForRender,listExhaustedZombies:()=>listExhaustedZombies,listAllExhaustedErrored:()=>listAllExhaustedErrored,listAgentsForRender:()=>listAgentsForRender,listAgents:()=>listAgents,list:()=>list,getTeamLeadEntry:()=>getTeamLeadEntry,getPane:()=>getPane,getElapsedTime:()=>getElapsedTime,getAgentResolverCounters:()=>getAgentResolverCounters,getAgentEffectiveState:()=>getAgentEffectiveState,getAgentByName:()=>getAgentByName,getAgent:()=>getAgent,get:()=>get,findOrCreateAgent:()=>findOrCreateAgent,findByWindow:()=>findByWindow,findByTask:()=>findByTask,findByPane:()=>findByPane,filterBySession:()=>filterBySession,auditAgentKind:()=>auditAgentKind,archiveExhaustedZombies:()=>archiveExhaustedZombies,archiveAllExhaustedErrored:()=>archiveAllExhaustedErrored,addSubPane:()=>addSubPane,_resetAgentResolverCountersForTests:()=>_resetAgentResolverCountersForTests});import{createHash,randomUUID}from"crypto";function resolveWorkerSocketName(){return process.env.GENIE_TMUX_SOCKET||"genie"}function ts(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToAgent(r){let agent={id:r.id,paneId:r.pane_id,session:r.session,worktree:r.worktree??null,startedAt:ts(r.started_at),state:r.state,lastStateChange:ts(r.last_state_change),repoPath:r.repo_path};if(r.task_id!=null)agent.taskId=r.task_id;if(r.task_title!=null)agent.taskTitle=r.task_title;if(r.wish_slug!=null)agent.wishSlug=r.wish_slug;if(r.group_number!=null)agent.groupNumber=r.group_number;if(r.window_name!=null)agent.windowName=r.window_name;if(r.window_id!=null)agent.windowId=r.window_id;if(r.role!=null)agent.role=r.role;if(r.custom_name!=null)agent.customName=r.custom_name;if(r.sub_panes!=null){let sp=typeof r.sub_panes==="string"?JSON.parse(r.sub_panes):r.sub_panes;if(Array.isArray(sp)&&sp.length>0)agent.subPanes=sp}if(r.provider!=null)agent.provider=r.provider;if(r.transport!=null)agent.transport=r.transport;if(r.skill!=null)agent.skill=r.skill;if(r.team!=null)agent.team=r.team;if(r.tmux_window!=null)agent.window=r.tmux_window;if(r.native_agent_id!=null)agent.nativeAgentId=r.native_agent_id;if(r.native_color!=null)agent.nativeColor=r.native_color;if(r.native_team_enabled)agent.nativeTeamEnabled=r.native_team_enabled;if(r.parent_session_id!=null)agent.parentSessionId=r.parent_session_id;if(r.suspended_at!=null)agent.suspendedAt=ts(r.suspended_at);if(r.auto_resume!=null)agent.autoResume=r.auto_resume;if(r.resume_attempts!=null)agent.resumeAttempts=r.resume_attempts;if(r.last_resume_attempt!=null)agent.lastResumeAttempt=ts(r.last_resume_attempt);if(r.max_resume_attempts!=null)agent.maxResumeAttempts=r.max_resume_attempts;if(r.pane_color!=null)agent.paneColor=r.pane_color;if(agent.currentExecutorId=r.current_executor_id??null,agent.reportsTo=r.reports_to??null,agent.title=r.title??null,r.kind!=null)agent.kind=r.kind;return agent}function rowToTemplate(r){let tpl={id:r.id,provider:r.provider,team:r.team,cwd:r.cwd,lastSpawnedAt:ts(r.last_spawned_at)};if(r.role!=null)tpl.role=r.role;if(r.skill!=null)tpl.skill=r.skill;if(r.extra_args!=null){let ea=typeof r.extra_args==="string"?JSON.parse(r.extra_args):r.extra_args;if(Array.isArray(ea)&&ea.length>0)tpl.extraArgs=ea}if(r.native_team_enabled)tpl.nativeTeamEnabled=r.native_team_enabled;return tpl}function shortProjectHash(repoPath){return createHash("sha1").update(repoPath).digest("hex").slice(0,8)}function buildProjectTeamLeadEntryId(teamName,session,repoPath){return`team-lead:${session}:${shortProjectHash(repoPath)}:${teamName}`}function buildSessionTeamLeadEntryId(teamName,session){return`team-lead:${session}:${teamName}`}function buildLegacyTeamLeadEntryId(teamName){return`team-lead:${teamName}`}function assertRegisterableId(id){if(!REGISTER_ID_RE.test(id))throw Error(`register: refusing to insert non-UUID/non-dir agent id ${JSON.stringify(id)}. Spawn callers must resolve the durable identity row via findOrCreateAgent first and pass that UUID \u2014 the bare-name shadow path was retired in wish retire-session-names-id-only Group 3 (migration 061 enforces the same shape at the DB).`)}async function register(agent){assertRegisterableId(agent.id);let sql=await getConnection(),now=new Date().toISOString();if(agent.team){let existing=await sql`
207
+ `),chmodSync2(PANE_COLOR_SCRIPT,493)}async function applyPaneColor(paneId,color,windowId){let hex=TMUX_COLOR_MAP[color]??TMUX_COLOR_MAP.blue;try{ensurePaneColorScript(),await executeTmux2(`set-option -p -t '${paneId}' @genie_color '${hex}'`);try{let{getConnection:getConnection2}=await Promise.resolve().then(() => (init_db(),exports_db));await(await getConnection2())`UPDATE executors SET pane_color = ${hex} WHERE tmux_pane_id = ${paneId}`}catch{}if(windowId)await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function rehydratePaneColorHook(windowId){try{ensurePaneColorScript(),await executeTmux2(`set-hook -w -t '${windowId}' pane-focus-in "run-shell '${PANE_COLOR_SCRIPT} #{pane_id}'"`)}catch{}}async function resolveRepoSession(repoPath){let derived=basename(repoPath);try{let sessions=await listSessions(),exact=sessions.find((s)=>s.name===derived);if(exact)return exact.name;if(process.env.TMUX)try{let name=(await executeTmux2("display-message -p '#{session_name}'")).trim();if(name)return name}catch{}let partial=sessions.find((s)=>s.name.includes(derived));if(partial)return partial.name}catch{}return derived}function isTmuxSocketAlive(socketName){if(!socketName)return!1;let uid=process.getuid?.()??501;return existsSync7(join9(`/tmp/tmux-${uid}`,socketName))}async function isTmuxServerReachable(socketName){if(!socketName)return!1;if(!isTmuxSocketAlive(socketName))return!1;try{let{execSync:execSync2}=await import("child_process");return execSync2(`${tmuxBin()} -L ${shellQuote(socketName)} list-sessions -F ''`,{stdio:["ignore","ignore","ignore"],timeout:2000}),!0}catch{return!1}}async function isPaneAlive(paneId){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{return(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_dead}'`)).trim()==="0"}catch(error){let message=error instanceof Error?error.message:String(error);if(message.includes("no server running")||message.includes("server exited")||message.includes("error connecting"))throw new TmuxUnreachableError(message);return!1}}async function isPaneProcessRunning(paneId,processName,execSyncFn){if(!paneId||paneId==="inline")return!1;if(!/^%\d+$/.test(paneId))return!1;try{let panePid=(await executeTmux2(`display-message -t '${paneId}' -p '#{pane_pid}'`)).trim();if(!panePid||!/^\d+$/.test(panePid))return!1;return(execSyncFn??(await import("child_process")).execSync)(`pgrep -la -P ${panePid} 2>/dev/null; for cpid in $(pgrep -P ${panePid} 2>/dev/null); do pgrep -la -P "$cpid" 2>/dev/null; done; true`,{encoding:"utf-8",timeout:5000}).toLowerCase().includes(processName.toLowerCase())}catch{return!1}}async function killWindow(sessionName,windowName){try{return await executeTmux2(`kill-window -t ${shellQuote(`${sessionName}:${windowName}`)}`),!0}catch{return!1}}var TMUX_COLOR_NAMES,TMUX_COLOR_MAP,PANE_COLOR_SCRIPT,TmuxUnreachableError;var init_tmux=__esm(()=>{init_genie_tokens();init_ensure_tmux();init_team_lead_command();TMUX_COLOR_NAMES=["red","blue","green","yellow","purple","orange","pink","cyan"],TMUX_COLOR_MAP=Object.fromEntries(TMUX_COLOR_NAMES.map((name,i2)=>[name,rotateHue(palette.accent,i2*45)])),PANE_COLOR_SCRIPT=`${__require("os").homedir()}/.genie/tmux-pane-color.sh`;TmuxUnreachableError=class TmuxUnreachableError extends Error{constructor(message){super(message);this.name="TmuxUnreachableError"}}});var exports_agent_registry={};__export(exports_agent_registry,{update:()=>update,unregister:()=>unregister,setCurrentExecutor:()=>setCurrentExecutor,saveTemplate:()=>saveTemplate,resolveAgentIdStrict:()=>resolveAgentIdStrict,resolveAgentId:()=>resolveAgentId,removeSubPane:()=>removeSubPane,register:()=>register,reconcileStaleSpawns:()=>reconcileStaleSpawns,listTemplates:()=>listTemplates,listForRender:()=>listForRender,listExhaustedZombies:()=>listExhaustedZombies,listAllExhaustedErrored:()=>listAllExhaustedErrored,listAgentsForRender:()=>listAgentsForRender,listAgents:()=>listAgents,list:()=>list,getTeamLeadEntry:()=>getTeamLeadEntry,getPane:()=>getPane,getElapsedTime:()=>getElapsedTime,getAgentResolverCounters:()=>getAgentResolverCounters,getAgentEffectiveState:()=>getAgentEffectiveState,getAgentByName:()=>getAgentByName,getAgent:()=>getAgent,get:()=>get,findOrCreateAgent:()=>findOrCreateAgent,findByWindow:()=>findByWindow,findByTask:()=>findByTask,findByPane:()=>findByPane,filterBySession:()=>filterBySession,auditAgentKind:()=>auditAgentKind,archiveExhaustedZombies:()=>archiveExhaustedZombies,archiveAllExhaustedErrored:()=>archiveAllExhaustedErrored,addSubPane:()=>addSubPane,_resetAgentResolverCountersForTests:()=>_resetAgentResolverCountersForTests});import{createHash,randomUUID}from"crypto";function resolveWorkerSocketName(){return process.env.GENIE_TMUX_SOCKET||"genie"}function ts(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToAgent(r){let agent={id:r.id,paneId:r.pane_id,session:r.session,worktree:r.worktree??null,startedAt:ts(r.started_at),state:r.state,lastStateChange:ts(r.last_state_change),repoPath:r.repo_path};if(r.task_id!=null)agent.taskId=r.task_id;if(r.task_title!=null)agent.taskTitle=r.task_title;if(r.wish_slug!=null)agent.wishSlug=r.wish_slug;if(r.group_number!=null)agent.groupNumber=r.group_number;if(r.window_name!=null)agent.windowName=r.window_name;if(r.window_id!=null)agent.windowId=r.window_id;if(r.role!=null)agent.role=r.role;if(r.custom_name!=null)agent.customName=r.custom_name;if(r.sub_panes!=null){let sp=typeof r.sub_panes==="string"?JSON.parse(r.sub_panes):r.sub_panes;if(Array.isArray(sp)&&sp.length>0)agent.subPanes=sp}if(r.provider!=null)agent.provider=r.provider;if(r.transport!=null)agent.transport=r.transport;if(r.skill!=null)agent.skill=r.skill;if(r.team!=null)agent.team=r.team;if(r.tmux_window!=null)agent.window=r.tmux_window;if(r.native_agent_id!=null)agent.nativeAgentId=r.native_agent_id;if(r.native_color!=null)agent.nativeColor=r.native_color;if(r.native_team_enabled)agent.nativeTeamEnabled=r.native_team_enabled;if(r.parent_session_id!=null)agent.parentSessionId=r.parent_session_id;if(r.suspended_at!=null)agent.suspendedAt=ts(r.suspended_at);if(r.auto_resume!=null)agent.autoResume=r.auto_resume;if(r.resume_attempts!=null)agent.resumeAttempts=r.resume_attempts;if(r.last_resume_attempt!=null)agent.lastResumeAttempt=ts(r.last_resume_attempt);if(r.max_resume_attempts!=null)agent.maxResumeAttempts=r.max_resume_attempts;if(r.pane_color!=null)agent.paneColor=r.pane_color;if(agent.currentExecutorId=r.current_executor_id??null,agent.reportsTo=r.reports_to??null,agent.title=r.title??null,r.kind!=null)agent.kind=r.kind;return agent}function rowToTemplate(r){let tpl={id:r.id,provider:r.provider,team:r.team,cwd:r.cwd,lastSpawnedAt:ts(r.last_spawned_at)};if(r.role!=null)tpl.role=r.role;if(r.skill!=null)tpl.skill=r.skill;if(r.extra_args!=null){let ea=typeof r.extra_args==="string"?JSON.parse(r.extra_args):r.extra_args;if(Array.isArray(ea)&&ea.length>0)tpl.extraArgs=ea}if(r.native_team_enabled)tpl.nativeTeamEnabled=r.native_team_enabled;return tpl}function shortProjectHash(repoPath){return createHash("sha1").update(repoPath).digest("hex").slice(0,8)}function buildProjectTeamLeadEntryId(teamName,session,repoPath){return`team-lead:${session}:${shortProjectHash(repoPath)}:${teamName}`}function buildSessionTeamLeadEntryId(teamName,session){return`team-lead:${session}:${teamName}`}function buildLegacyTeamLeadEntryId(teamName){return`team-lead:${teamName}`}function assertRegisterableId(id){if(!REGISTER_ID_RE.test(id))throw Error(`register: refusing to insert non-UUID/non-dir agent id ${JSON.stringify(id)}. Spawn callers must resolve the durable identity row via findOrCreateAgent first and pass that UUID \u2014 the bare-name shadow path was retired in wish retire-session-names-id-only Group 3 (migration 061 enforces the same shape at the DB).`)}async function register(agent){assertRegisterableId(agent.id);let sql=await getConnection(),now=new Date().toISOString();if(agent.team){let existing=await sql`
310
208
  SELECT team FROM agents WHERE id = ${agent.id} LIMIT 1
311
209
  `;if(existing.length>0&&existing[0].team!==null&&existing[0].team!==agent.team)throw Error(`register: cross-team id collision \u2014 agent id "${agent.id}" already exists in team "${existing[0].team}", refusing to re-register under team "${agent.team}". Unregister the stale row first, or pick a different id/suffix for this spawn.`)}await sql`INSERT INTO agents (id, pane_id, session, worktree, task_id, task_title, wish_slug, group_number, started_at, state, last_state_change, repo_path, window_name, window_id, role, custom_name, sub_panes, provider, transport, skill, team, tmux_window, native_agent_id, native_color, native_team_enabled, parent_session_id, suspended_at, auto_resume, resume_attempts, last_resume_attempt, max_resume_attempts, pane_color) VALUES (${agent.id}, ${agent.paneId}, ${agent.session}, ${agent.worktree??null}, ${agent.taskId??null}, ${agent.taskTitle??null}, ${agent.wishSlug??null}, ${agent.groupNumber??null}, ${agent.startedAt??now}, ${agent.state??"spawning"}, ${agent.lastStateChange??now}, ${agent.repoPath}, ${agent.windowName??null}, ${agent.windowId??null}, ${agent.role??null}, ${agent.customName??null}, ${sql.json(agent.subPanes??[])}, ${agent.provider??null}, ${agent.transport??"tmux"}, ${agent.skill??null}, ${agent.team??null}, ${agent.window??null}, ${agent.nativeAgentId??null}, ${agent.nativeColor??null}, ${agent.nativeTeamEnabled??!1}, ${agent.parentSessionId??null}, ${agent.suspendedAt??null}, ${agent.autoResume??!1}, ${agent.resumeAttempts??0}, ${agent.lastResumeAttempt??null}, ${agent.maxResumeAttempts??3}, ${agent.paneColor??null}) ON CONFLICT (id) DO UPDATE SET pane_id = EXCLUDED.pane_id, session = EXCLUDED.session, state = EXCLUDED.state, last_state_change = EXCLUDED.last_state_change, team = COALESCE(agents.team, EXCLUDED.team), role = COALESCE(agents.role, EXCLUDED.role), custom_name = COALESCE(agents.custom_name, EXCLUDED.custom_name), updated_at = now()`}async function unregister(id){await(await getConnection())`DELETE FROM agents WHERE id = ${id}`}async function get(id){let rows=await(await getConnection())`SELECT * FROM agents WHERE id = ${id}`;return rows.length>0?rowToAgent(rows[0]):null}async function list(){return(await(await getConnection())`SELECT * FROM agents`).map(rowToAgent)}function dedupeShadowRows(rows,opts){let groups=new Map;for(let r of rows){let k=opts.keyFor(r),arr=groups.get(k);if(arr)arr.push(r);else groups.set(k,[r])}let out=[];for(let arr of groups.values()){if(arr.length===1){out.push(arr[0]);continue}arr.sort((a,b)=>{let aExec=opts.hasExecutor(a)?1:0,bExec=opts.hasExecutor(b)?1:0;if(aExec!==bExec)return bExec-aExec;return opts.startedAt(b).localeCompare(opts.startedAt(a))}),out.push(arr[0])}return out}function shadowKey(customName,id,team){return`${customName??id}\x00${team??""}`}async function listForRender(){let all=await list();return dedupeShadowRows(all,{keyFor:(a)=>shadowKey(a.customName,a.id,a.team),hasExecutor:(a)=>a.currentExecutorId!=null,startedAt:(a)=>a.startedAt})}async function reconcileStaleSpawns(thresholdSeconds=60){try{let sql=await getConnection(),rows=await sql`
312
210
  UPDATE agents
@@ -450,7 +348,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
450
348
  WHERE (${includeArchived} OR state IS DISTINCT FROM 'archived')
451
349
  `;return rows.map(rowToAgentIdentity)}async function listAgentsForRender(filters){let all=await listAgents(filters);return dedupeShadowRows(all,{keyFor:(a)=>shadowKey(a.customName,a.id,a.team),hasExecutor:(a)=>a.currentExecutorId!=null,startedAt:(a)=>a.startedAt})}async function auditAgentKind(){let rows=await(await getConnection())`
452
350
  SELECT id, kind, reports_to FROM agents
453
- `,drifted=[];for(let row of rows){let expected=row.id.startsWith("dir:")||row.reports_to===null?"permanent":"task";if(row.kind!==expected)drifted.push({id:row.id,kind:row.kind,expected})}for(let drift of drifted)recordAuditEvent("worker",drift.id,"agents.kind.audit_drift","auditor",{stored:drift.kind,expected:drift.expected}).catch(()=>{});return{total:rows.length,drifted}}var REGISTER_ID_RE,DEAD_PANE_ZOMBIE_TTL_HOURS=24,EXHAUSTED_ERRORED_TTL_HOURS=1,resolverCounters;var init_agent_registry=__esm(()=>{init_audit();init_db();init_tmux();REGISTER_ID_RE=/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|dir:[A-Za-z0-9_-]+)$/i;resolverCounters={uuid:0,dir:0,customName:0,role:0,miss:0}});function ts2(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToExecutor(r){return{id:r.id,agentId:r.agent_id,provider:r.provider,transport:r.transport,pid:r.pid,tmuxSession:r.tmux_session,tmuxPaneId:r.tmux_pane_id,tmuxWindow:r.tmux_window,tmuxWindowId:r.tmux_window_id,claudeSessionId:r.claude_session_id,state:r.state,metadata:typeof r.metadata==="string"?JSON.parse(r.metadata):r.metadata??{},worktree:r.worktree,repoPath:r.repo_path,paneColor:r.pane_color,startedAt:ts2(r.started_at),endedAt:r.ended_at?ts2(r.ended_at):null,createdAt:ts2(r.created_at),updatedAt:ts2(r.updated_at),turnId:r.turn_id??null,outcome:r.outcome??null,closedAt:r.closed_at?ts2(r.closed_at):null,closeReason:r.close_reason??null}}function rowToAssignment(r){return{id:r.id,executorId:r.executor_id,taskId:r.task_id,wishSlug:r.wish_slug,groupNumber:r.group_number,startedAt:ts2(r.started_at),endedAt:r.ended_at?ts2(r.ended_at):null,outcome:r.outcome,createdAt:ts2(r.created_at)}}var exports_executor_registry={};__export(exports_executor_registry,{updateExecutorState:()=>updateExecutorState,updateClaudeSessionId:()=>updateClaudeSessionId,terminateExecutor:()=>terminateExecutor,terminateActiveExecutor:()=>terminateActiveExecutor,resolveWorkerLivenessByTransport:()=>resolveWorkerLivenessByTransport,relinkExecutorToAgent:()=>relinkExecutorToAgent,recordResumeProviderRejected:()=>recordResumeProviderRejected,recordResumeMissingSession:()=>recordResumeMissingSession,listExecutors:()=>listExecutors,isExecutorAlive:()=>isExecutorAlive,getResumeSessionId:()=>getResumeSessionId,getLiveExecutorState:()=>getLiveExecutorState,getExecutor:()=>getExecutor,getCurrentExecutor:()=>getCurrentExecutor,findLatestByMetadata:()=>findLatestByMetadata,findExecutorBySession:()=>findExecutorBySession,findExecutorByPane:()=>findExecutorByPane,createExecutor:()=>createExecutor,createAndLinkExecutor:()=>createAndLinkExecutor,acquireResumeSessionForAttempt:()=>acquireResumeSessionForAttempt,_resumeJsonlScannerDeps:()=>_resumeJsonlScannerDeps,_resetMissingSessionDedupeForTests:()=>_resetMissingSessionDedupeForTests});import{randomUUID as randomUUID2}from"crypto";import{open,readdir,stat}from"fs/promises";import{homedir as homedir7}from"os";import{join as join13}from"path";async function createExecutor(agentId,provider,transport,opts={}){let sql=await getConnection(),id=opts.id??randomUUID2(),now=new Date().toISOString(),rows=await sql`
351
+ `,drifted=[];for(let row of rows){let expected=row.id.startsWith("dir:")||row.reports_to===null?"permanent":"task";if(row.kind!==expected)drifted.push({id:row.id,kind:row.kind,expected})}for(let drift of drifted)recordAuditEvent("worker",drift.id,"agents.kind.audit_drift","auditor",{stored:drift.kind,expected:drift.expected}).catch(()=>{});return{total:rows.length,drifted}}var REGISTER_ID_RE,DEAD_PANE_ZOMBIE_TTL_HOURS=24,EXHAUSTED_ERRORED_TTL_HOURS=1,resolverCounters;var init_agent_registry=__esm(()=>{init_audit();init_db();init_tmux();REGISTER_ID_RE=/^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|dir:[A-Za-z0-9_-]+)$/i;resolverCounters={uuid:0,dir:0,customName:0,role:0,miss:0}});function ts2(v){if(!v)return new Date().toISOString();return v instanceof Date?v.toISOString():v}function rowToExecutor(r){return{id:r.id,agentId:r.agent_id,provider:r.provider,transport:r.transport,pid:r.pid,tmuxSession:r.tmux_session,tmuxPaneId:r.tmux_pane_id,tmuxWindow:r.tmux_window,tmuxWindowId:r.tmux_window_id,claudeSessionId:r.claude_session_id,state:r.state,metadata:typeof r.metadata==="string"?JSON.parse(r.metadata):r.metadata??{},worktree:r.worktree,repoPath:r.repo_path,paneColor:r.pane_color,startedAt:ts2(r.started_at),endedAt:r.ended_at?ts2(r.ended_at):null,createdAt:ts2(r.created_at),updatedAt:ts2(r.updated_at),turnId:r.turn_id??null,outcome:r.outcome??null,closedAt:r.closed_at?ts2(r.closed_at):null,closeReason:r.close_reason??null}}function rowToAssignment(r){return{id:r.id,executorId:r.executor_id,taskId:r.task_id,wishSlug:r.wish_slug,groupNumber:r.group_number,startedAt:ts2(r.started_at),endedAt:r.ended_at?ts2(r.ended_at):null,outcome:r.outcome,createdAt:ts2(r.created_at)}}var exports_executor_registry={};__export(exports_executor_registry,{updateExecutorState:()=>updateExecutorState,updateClaudeSessionId:()=>updateClaudeSessionId,terminateExecutor:()=>terminateExecutor,terminateActiveExecutor:()=>terminateActiveExecutor,resolveWorkerLivenessByTransport:()=>resolveWorkerLivenessByTransport,relinkExecutorToAgent:()=>relinkExecutorToAgent,recordResumeProviderRejected:()=>recordResumeProviderRejected,recordResumeMissingSession:()=>recordResumeMissingSession,listExecutors:()=>listExecutors,isExecutorAlive:()=>isExecutorAlive,getResumeSessionId:()=>getResumeSessionId,getLiveExecutorState:()=>getLiveExecutorState,getExecutor:()=>getExecutor,getCurrentExecutor:()=>getCurrentExecutor,findLatestByMetadata:()=>findLatestByMetadata,findExecutorBySession:()=>findExecutorBySession,findExecutorByPane:()=>findExecutorByPane,createExecutor:()=>createExecutor,createAndLinkExecutor:()=>createAndLinkExecutor,acquireResumeSessionForAttempt:()=>acquireResumeSessionForAttempt,_resumeJsonlScannerDeps:()=>_resumeJsonlScannerDeps,_resetMissingSessionDedupeForTests:()=>_resetMissingSessionDedupeForTests});import{randomUUID as randomUUID2}from"crypto";import{open,readdir,stat}from"fs/promises";import{homedir as homedir6}from"os";import{join as join10}from"path";async function createExecutor(agentId,provider,transport,opts={}){let sql=await getConnection(),id=opts.id??randomUUID2(),now=new Date().toISOString(),rows=await sql`
454
352
  INSERT INTO executors (
455
353
  id, agent_id, provider, transport, pid,
456
354
  tmux_session, tmux_pane_id, tmux_window, tmux_window_id,
@@ -504,8 +402,8 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
504
402
  AND ended_at IS NULL
505
403
  ORDER BY started_at DESC
506
404
  LIMIT 1
507
- `;return rows.length>0?rowToExecutor(rows[0]):null}async function relinkExecutorToAgent(executorId,agentId){await(await getConnection())`UPDATE agents SET current_executor_id = ${executorId} WHERE id = ${agentId}`}async function updateClaudeSessionId(executorId,sessionId){await(await getConnection())`UPDATE executors SET claude_session_id = ${sessionId} WHERE id = ${executorId}`}function sanitizeCwdForProjects(p){return p.replace(/[^a-zA-Z0-9]/g,"-")}function resolveClaudeConfigDir(){return process.env.CLAUDE_CONFIG_DIR??join13(homedir7(),".claude")}async function readJsonlIdentity(filePath){let handle=null;try{handle=await open(filePath,"r");let buffer=Buffer.alloc(16384),{bytesRead}=await handle.read(buffer,0,buffer.length,0),head=buffer.toString("utf-8",0,bytesRead);for(let line of head.split(`
508
- `).slice(0,40)){let trimmed=line.trim();if(!trimmed)continue;try{let entry=JSON.parse(trimmed),teamName=typeof entry.teamName==="string"?entry.teamName:null,agentName=typeof entry.agentName==="string"?entry.agentName:null;if(teamName!==null&&agentName!==null)return{teamName,agentName}}catch{}}}catch{return{teamName:null,agentName:null}}finally{await handle?.close().catch(()=>{})}return{teamName:null,agentName:null}}async function mapWithConcurrency(items,cap,fn){let results=Array(items.length),cursor=0,workers=[],workerCount=Math.min(cap,items.length);for(let w=0;w<workerCount;w++)workers.push((async()=>{while(cursor<items.length){let i2=cursor++;if(i2>=items.length)return;results[i2]=await fn(items[i2])}})());return await Promise.all(workers),results}async function defaultScanForSession(cwd,identity){if(!identity)return null;let projectDir=join13(resolveClaudeConfigDir(),"projects",sanitizeCwdForProjects(cwd)),entries;try{entries=await readdir(projectDir)}catch{return null}let jsonls=entries.filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let sorted=(await mapWithConcurrency(jsonls,STAT_CONCURRENCY_CAP,async(name)=>{let full=join13(projectDir,name);try{let s=await stat(full);return{name,full,mtime:s.mtimeMs}}catch{return null}})).filter((x)=>x!==null).sort((a,b)=>b.mtime-a.mtime);for(let candidate of sorted){let{teamName,agentName}=await readJsonlIdentity(candidate.full);if(teamName!==identity.team||agentName!==identity.customName)continue;return candidate.name.replace(/\.jsonl$/,"")}return null}async function tryJsonlFallback(row){let cwd=row?.repo_path??null;if(!cwd)return null;let team=row?.team??null,customName=row?.custom_name??null,identity=team&&customName?{team,customName}:null;if(!identity)return null;let recoveredSessionId=await(_resumeJsonlScannerDeps.scanForSession??defaultScanForSession)(cwd,identity);if(!recoveredSessionId)return null;let recoveredFrom=row&&row.executor_id!==null?"null_session":"no_executor";return{sessionId:recoveredSessionId,source:"jsonl",executorId:row?.executor_id??null,cwd,team:identity.team,customName:identity.customName,recoveredFrom}}function _resetMissingSessionDedupeForTests(){}async function recordResumeMissingSession(agentId,actor,details){await recordAuditEvent("agent",agentId,"resume.missing_session",actor,details)}async function lookupResumeSession(agentId){let row=(await(await getConnection())`
405
+ `;return rows.length>0?rowToExecutor(rows[0]):null}async function relinkExecutorToAgent(executorId,agentId){await(await getConnection())`UPDATE agents SET current_executor_id = ${executorId} WHERE id = ${agentId}`}async function updateClaudeSessionId(executorId,sessionId){await(await getConnection())`UPDATE executors SET claude_session_id = ${sessionId} WHERE id = ${executorId}`}function sanitizeCwdForProjects(p){return p.replace(/[^a-zA-Z0-9]/g,"-")}function resolveClaudeConfigDir(){return process.env.CLAUDE_CONFIG_DIR??join10(homedir6(),".claude")}async function readJsonlIdentity(filePath){let handle=null;try{handle=await open(filePath,"r");let buffer=Buffer.alloc(16384),{bytesRead}=await handle.read(buffer,0,buffer.length,0),head=buffer.toString("utf-8",0,bytesRead);for(let line of head.split(`
406
+ `).slice(0,40)){let trimmed=line.trim();if(!trimmed)continue;try{let entry=JSON.parse(trimmed),teamName=typeof entry.teamName==="string"?entry.teamName:null,agentName=typeof entry.agentName==="string"?entry.agentName:null;if(teamName!==null&&agentName!==null)return{teamName,agentName}}catch{}}}catch{return{teamName:null,agentName:null}}finally{await handle?.close().catch(()=>{})}return{teamName:null,agentName:null}}async function mapWithConcurrency(items,cap,fn){let results=Array(items.length),cursor=0,workers=[],workerCount=Math.min(cap,items.length);for(let w=0;w<workerCount;w++)workers.push((async()=>{while(cursor<items.length){let i2=cursor++;if(i2>=items.length)return;results[i2]=await fn(items[i2])}})());return await Promise.all(workers),results}async function defaultScanForSession(cwd,identity){if(!identity)return null;let projectDir=join10(resolveClaudeConfigDir(),"projects",sanitizeCwdForProjects(cwd)),entries;try{entries=await readdir(projectDir)}catch{return null}let jsonls=entries.filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let sorted=(await mapWithConcurrency(jsonls,STAT_CONCURRENCY_CAP,async(name)=>{let full=join10(projectDir,name);try{let s=await stat(full);return{name,full,mtime:s.mtimeMs}}catch{return null}})).filter((x)=>x!==null).sort((a,b)=>b.mtime-a.mtime);for(let candidate of sorted){let{teamName,agentName}=await readJsonlIdentity(candidate.full);if(teamName!==identity.team||agentName!==identity.customName)continue;return candidate.name.replace(/\.jsonl$/,"")}return null}async function tryJsonlFallback(row){let cwd=row?.repo_path??null;if(!cwd)return null;let team=row?.team??null,customName=row?.custom_name??null,identity=team&&customName?{team,customName}:null;if(!identity)return null;let recoveredSessionId=await(_resumeJsonlScannerDeps.scanForSession??defaultScanForSession)(cwd,identity);if(!recoveredSessionId)return null;let recoveredFrom=row&&row.executor_id!==null?"null_session":"no_executor";return{sessionId:recoveredSessionId,source:"jsonl",executorId:row?.executor_id??null,cwd,team:identity.team,customName:identity.customName,recoveredFrom}}function _resetMissingSessionDedupeForTests(){}async function recordResumeMissingSession(agentId,actor,details){await recordAuditEvent("agent",agentId,"resume.missing_session",actor,details)}async function lookupResumeSession(agentId){let row=(await(await getConnection())`
509
407
  SELECT a.current_executor_id AS executor_id,
510
408
  e.claude_session_id,
511
409
  a.repo_path,
@@ -520,7 +418,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
520
418
  WHERE a.id = ${agentId}
521
419
  AND e.state IN ('spawning', 'running', 'working', 'idle', 'permission', 'question')
522
420
  LIMIT 1
523
- `;return rows.length>0?rows[0].state:null}async function isExecutorAlive(agentId){return await getLiveExecutorState(agentId)!==null}async function resolveWorkerLivenessByTransport(worker,opts){if(/^%\d+$/.test(worker.paneId))return(opts?.isPaneAliveFn??(async(pane)=>{let{isPaneAlive:isPaneAlive2}=await Promise.resolve().then(() => (init_tmux(),exports_tmux));return isPaneAlive2(pane)}))(worker.paneId);return(opts?.isExecutorAliveFn??isExecutorAlive)(worker.id)}var STAT_CONCURRENCY_CAP=32,_resumeJsonlScannerDeps;var init_executor_registry=__esm(()=>{init_audit();init_db();_resumeJsonlScannerDeps={scanForSession:null}});var exports_team_manager={};__export(exports_team_manager,{validateBranchName:()=>validateBranchName,updateTeamConfig:()=>updateTeamConfig,unarchiveTeam:()=>unarchiveTeam,setTeamStatus:()=>setTeamStatus,resolveLeaderName:()=>resolveLeaderName,listTeams:()=>listTeams,listMembers:()=>listMembers,killTeamMembers:()=>killTeamMembers,hireAgent:()=>hireAgent,getTeam:()=>getTeam,fireAgent:()=>fireAgent,ensureTeamRow:()=>ensureTeamRow,disbandTeam:()=>disbandTeam,createTeam:()=>createTeam,archiveTeam:()=>archiveTeam});import{existsSync as existsSync10}from"fs";import{mkdir as mkdir2,rm,symlink}from"fs/promises";import{homedir as homedir8}from"os";import path,{join as join14}from"path";var{$:$2}=globalThis.Bun;function parseMembers(raw){if(Array.isArray(raw))return raw;if(typeof raw==="string")try{let parsed=JSON.parse(raw);return Array.isArray(parsed)?parsed:[]}catch{return[]}return[]}function rowToTeamConfig(row){let config={name:row.name,repo:row.repo,baseBranch:row.base_branch,worktreePath:row.worktree_path,members:parseMembers(row.members),status:row.status,createdAt:row.created_at instanceof Date?row.created_at.toISOString():String(row.created_at)};if(row.leader)config.leader=row.leader;if(row.native_team_parent_session_id)config.nativeTeamParentSessionId=row.native_team_parent_session_id;if(row.native_teams_enabled)config.nativeTeamsEnabled=row.native_teams_enabled;if(row.tmux_session_name)config.tmuxSessionName=row.tmux_session_name;if(row.wish_slug)config.wishSlug=row.wish_slug;if(row.spawner)config.spawner=row.spawner;if(row.archived_at)config.archivedAt=row.archived_at instanceof Date?row.archived_at.toISOString():String(row.archived_at);if(row.parent_team)config.parentTeam=row.parent_team;let allow=parseAllowChildReachback(row.allow_child_reachback);if(allow.length>0)config.allowChildReachback=allow;return config}function parseAllowChildReachback(raw){if(Array.isArray(raw))return raw.filter((x)=>typeof x==="string");if(typeof raw==="string")try{let parsed=JSON.parse(raw);return Array.isArray(parsed)?parsed.filter((x)=>typeof x==="string"):[]}catch{return[]}return[]}function getGenieDir2(){return process.env.GENIE_HOME??join14(homedir8(),".genie")}function getWorktreeBase(repoPath){let base=loadGenieConfigSync().terminal?.worktreeBase;if(base&&base!==".worktrees"){if(path.isAbsolute(base))return base;return join14(repoPath,base)}let projectName=path.basename(repoPath);return join14(getGenieDir2(),"worktrees",projectName)}function validateBranchName(name){let errors2=[];if(/\s/.test(name))errors2.push("contains spaces");if(name.includes(".."))errors2.push('contains ".."');if(name.includes("~"))errors2.push('contains "~"');if(name.includes("^"))errors2.push('contains "^"');if(name.includes(":"))errors2.push('contains ":"');if(name.includes("?"))errors2.push('contains "?"');if(name.includes("*"))errors2.push('contains "*"');if(name.includes("["))errors2.push('contains "["');if(name.includes("\\"))errors2.push('contains "\\"');if(/[\x00-\x1f\x7f]/.test(name))errors2.push("contains control characters");if(name.endsWith(".lock"))errors2.push('ends with ".lock"');if(name.endsWith("/"))errors2.push('ends with "/"');if(name.endsWith("."))errors2.push('ends with "."');if(name.startsWith("-"))errors2.push('starts with "-"');if(errors2.length>0)throw Error(`Invalid team name '${name}': must be a valid git branch name (${errors2.join(", ")})`)}async function killWorkersByName(agentName,teamName){let matches=(await list()).filter((w)=>(w.role===agentName||w.id===agentName)&&(!teamName||w.team===teamName));for(let w of matches){if(w.currentExecutorId)try{await terminateExecutor(w.currentExecutorId),await setCurrentExecutor(w.id,null)}catch{}try{if(w.paneId&&w.paneId!=="inline"){let{execSync:execSync2}=__require("child_process"),{genieTmuxCmd:genieTmuxCmd2}=(init_tmux_wrapper(),__toCommonJS(exports_tmux_wrapper));execSync2(genieTmuxCmd2(`kill-pane -t ${w.paneId}`),{stdio:"ignore"})}}catch{}await unregister(w.id)}}async function postCloneInit(repoPath,worktreePath){let parentNodeModules=join14(repoPath,"node_modules"),worktreeNodeModules=join14(worktreePath,"node_modules");if(existsSync10(parentNodeModules)&&!existsSync10(worktreeNodeModules))try{await symlink(parentNodeModules,worktreeNodeModules,"dir")}catch{}let initScript=join14(repoPath,".genie","init.sh");if(existsSync10(initScript))try{await $2`bash ${initScript}`.cwd(worktreePath).quiet()}catch{}}async function ensureWorktree(repoPath,branchName,worktreePath,baseBranch){try{await $2`git -C ${repoPath} fetch origin ${baseBranch}`.quiet()}catch{}if(await mkdir2(path.dirname(worktreePath),{recursive:!0}),existsSync10(worktreePath))return;let branchExists=!1;try{await $2`git -C ${repoPath} rev-parse --verify ${branchName}`.quiet(),branchExists=!0}catch{if(!branchExists)try{await $2`git -C ${repoPath} branch ${branchName} origin/${baseBranch}`.quiet()}catch{try{await $2`git -C ${repoPath} branch ${branchName} ${baseBranch}`.quiet()}catch{await $2`git -C ${repoPath} branch ${branchName}`.quiet()}}}await $2`git clone --shared --branch ${branchName} ${repoPath} ${worktreePath}`.quiet();try{let userName=(await $2`git -C ${repoPath} config user.name`.quiet()).text().trim(),userEmail=(await $2`git -C ${repoPath} config user.email`.quiet()).text().trim();if(userName)await $2`git -C ${worktreePath} config user.name ${userName}`.quiet();if(userEmail)await $2`git -C ${worktreePath} config user.email ${userEmail}`.quiet()}catch{}await postCloneInit(repoPath,worktreePath)}async function detectSpawnerParentTeam(newTeamName){let envTeam=process.env.GENIE_TEAM,spawnerName=process.env.GENIE_AGENT_NAME;if(!envTeam||!spawnerName)return null;if(spawnerName==="cli")return null;if(envTeam===newTeamName)return null;try{return await getTeam(envTeam)?envTeam:null}catch{return null}}async function createTeam(name,repo,baseBranch="dev"){validateBranchName(name);let repoPath=path.resolve(repo),existing=await getTeam(name);if(existing)return existing;let worktreeBase=getWorktreeBase(repoPath),worktreePath=join14(worktreeBase,name);await ensureWorktree(repoPath,name,worktreePath,baseBranch);let now=new Date().toISOString(),config={name,repo:repoPath,baseBranch,worktreePath,members:[],status:"in_progress",createdAt:now},promoted=await detectSpawnerParentTeam(name);if(promoted)config.parentTeam=promoted;if(isInsideClaudeCode()){config.nativeTeamsEnabled=!0;try{let result2=await registerAsTeamLead(name);config.nativeTeamParentSessionId=result2.sessionId}catch{}}let sql=await getConnection();return await sql`
421
+ `;return rows.length>0?rows[0].state:null}async function isExecutorAlive(agentId){return await getLiveExecutorState(agentId)!==null}async function resolveWorkerLivenessByTransport(worker,opts){if(/^%\d+$/.test(worker.paneId))return(opts?.isPaneAliveFn??(async(pane)=>{let{isPaneAlive:isPaneAlive2}=await Promise.resolve().then(() => (init_tmux(),exports_tmux));return isPaneAlive2(pane)}))(worker.paneId);return(opts?.isExecutorAliveFn??isExecutorAlive)(worker.id)}var STAT_CONCURRENCY_CAP=32,_resumeJsonlScannerDeps;var init_executor_registry=__esm(()=>{init_audit();init_db();_resumeJsonlScannerDeps={scanForSession:null}});var exports_team_manager={};__export(exports_team_manager,{validateBranchName:()=>validateBranchName,updateTeamConfig:()=>updateTeamConfig,unarchiveTeam:()=>unarchiveTeam,setTeamStatus:()=>setTeamStatus,resolveLeaderName:()=>resolveLeaderName,listTeams:()=>listTeams,listMembers:()=>listMembers,killTeamMembers:()=>killTeamMembers,hireAgent:()=>hireAgent,getTeam:()=>getTeam,fireAgent:()=>fireAgent,ensureTeamRow:()=>ensureTeamRow,disbandTeam:()=>disbandTeam,createTeam:()=>createTeam,archiveTeam:()=>archiveTeam});import{existsSync as existsSync8}from"fs";import{mkdir as mkdir2,rm,symlink}from"fs/promises";import{homedir as homedir7}from"os";import path,{join as join11}from"path";var{$}=globalThis.Bun;function parseMembers(raw){if(Array.isArray(raw))return raw;if(typeof raw==="string")try{let parsed=JSON.parse(raw);return Array.isArray(parsed)?parsed:[]}catch{return[]}return[]}function rowToTeamConfig(row){let config={name:row.name,repo:row.repo,baseBranch:row.base_branch,worktreePath:row.worktree_path,members:parseMembers(row.members),status:row.status,createdAt:row.created_at instanceof Date?row.created_at.toISOString():String(row.created_at)};if(row.leader)config.leader=row.leader;if(row.native_team_parent_session_id)config.nativeTeamParentSessionId=row.native_team_parent_session_id;if(row.native_teams_enabled)config.nativeTeamsEnabled=row.native_teams_enabled;if(row.tmux_session_name)config.tmuxSessionName=row.tmux_session_name;if(row.wish_slug)config.wishSlug=row.wish_slug;if(row.spawner)config.spawner=row.spawner;if(row.archived_at)config.archivedAt=row.archived_at instanceof Date?row.archived_at.toISOString():String(row.archived_at);if(row.parent_team)config.parentTeam=row.parent_team;let allow=parseAllowChildReachback(row.allow_child_reachback);if(allow.length>0)config.allowChildReachback=allow;return config}function parseAllowChildReachback(raw){if(Array.isArray(raw))return raw.filter((x)=>typeof x==="string");if(typeof raw==="string")try{let parsed=JSON.parse(raw);return Array.isArray(parsed)?parsed.filter((x)=>typeof x==="string"):[]}catch{return[]}return[]}function getGenieDir2(){return process.env.GENIE_HOME??join11(homedir7(),".genie")}function getWorktreeBase(repoPath){let base=loadGenieConfigSync().terminal?.worktreeBase;if(base&&base!==".worktrees"){if(path.isAbsolute(base))return base;return join11(repoPath,base)}let projectName=path.basename(repoPath);return join11(getGenieDir2(),"worktrees",projectName)}function validateBranchName(name){let errors2=[];if(/\s/.test(name))errors2.push("contains spaces");if(name.includes(".."))errors2.push('contains ".."');if(name.includes("~"))errors2.push('contains "~"');if(name.includes("^"))errors2.push('contains "^"');if(name.includes(":"))errors2.push('contains ":"');if(name.includes("?"))errors2.push('contains "?"');if(name.includes("*"))errors2.push('contains "*"');if(name.includes("["))errors2.push('contains "["');if(name.includes("\\"))errors2.push('contains "\\"');if(/[\x00-\x1f\x7f]/.test(name))errors2.push("contains control characters");if(name.endsWith(".lock"))errors2.push('ends with ".lock"');if(name.endsWith("/"))errors2.push('ends with "/"');if(name.endsWith("."))errors2.push('ends with "."');if(name.startsWith("-"))errors2.push('starts with "-"');if(errors2.length>0)throw Error(`Invalid team name '${name}': must be a valid git branch name (${errors2.join(", ")})`)}async function killWorkersByName(agentName,teamName){let matches=(await list()).filter((w)=>(w.role===agentName||w.id===agentName)&&(!teamName||w.team===teamName));for(let w of matches){if(w.currentExecutorId)try{await terminateExecutor(w.currentExecutorId),await setCurrentExecutor(w.id,null)}catch{}try{if(w.paneId&&w.paneId!=="inline"){let{execSync:execSync2}=__require("child_process"),{genieTmuxCmd:genieTmuxCmd2}=(init_tmux_wrapper(),__toCommonJS(exports_tmux_wrapper));execSync2(genieTmuxCmd2(`kill-pane -t ${w.paneId}`),{stdio:"ignore"})}}catch{}await unregister(w.id)}}async function postCloneInit(repoPath,worktreePath){let parentNodeModules=join11(repoPath,"node_modules"),worktreeNodeModules=join11(worktreePath,"node_modules");if(existsSync8(parentNodeModules)&&!existsSync8(worktreeNodeModules))try{await symlink(parentNodeModules,worktreeNodeModules,"dir")}catch{}let initScript=join11(repoPath,".genie","init.sh");if(existsSync8(initScript))try{await $`bash ${initScript}`.cwd(worktreePath).quiet()}catch{}}async function ensureWorktree(repoPath,branchName,worktreePath,baseBranch){try{await $`git -C ${repoPath} fetch origin ${baseBranch}`.quiet()}catch{}if(await mkdir2(path.dirname(worktreePath),{recursive:!0}),existsSync8(worktreePath))return;let branchExists=!1;try{await $`git -C ${repoPath} rev-parse --verify ${branchName}`.quiet(),branchExists=!0}catch{if(!branchExists)try{await $`git -C ${repoPath} branch ${branchName} origin/${baseBranch}`.quiet()}catch{try{await $`git -C ${repoPath} branch ${branchName} ${baseBranch}`.quiet()}catch{await $`git -C ${repoPath} branch ${branchName}`.quiet()}}}await $`git clone --shared --branch ${branchName} ${repoPath} ${worktreePath}`.quiet();try{let userName=(await $`git -C ${repoPath} config user.name`.quiet()).text().trim(),userEmail=(await $`git -C ${repoPath} config user.email`.quiet()).text().trim();if(userName)await $`git -C ${worktreePath} config user.name ${userName}`.quiet();if(userEmail)await $`git -C ${worktreePath} config user.email ${userEmail}`.quiet()}catch{}await postCloneInit(repoPath,worktreePath)}async function detectSpawnerParentTeam(newTeamName){let envTeam=process.env.GENIE_TEAM,spawnerName=process.env.GENIE_AGENT_NAME;if(!envTeam||!spawnerName)return null;if(spawnerName==="cli")return null;if(envTeam===newTeamName)return null;try{return await getTeam(envTeam)?envTeam:null}catch{return null}}async function createTeam(name,repo,baseBranch="dev"){validateBranchName(name);let repoPath=path.resolve(repo),existing=await getTeam(name);if(existing)return existing;let worktreeBase=getWorktreeBase(repoPath),worktreePath=join11(worktreeBase,name);await ensureWorktree(repoPath,name,worktreePath,baseBranch);let now=new Date().toISOString(),config={name,repo:repoPath,baseBranch,worktreePath,members:[],status:"in_progress",createdAt:now},promoted=await detectSpawnerParentTeam(name);if(promoted)config.parentTeam=promoted;if(isInsideClaudeCode()){config.nativeTeamsEnabled=!0;try{let result2=await registerAsTeamLead(name);config.nativeTeamParentSessionId=result2.sessionId}catch{}}let sql=await getConnection();return await sql`
524
422
  INSERT INTO teams (
525
423
  name, repo, base_branch, worktree_path, leader,
526
424
  members, status, native_team_parent_session_id,
@@ -557,7 +455,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
557
455
  `,added}async function fireAgent(teamName,agentName){let config=await getTeam(teamName);if(!config)throw Error(`Team "${teamName}" not found.`);let idx=config.members.indexOf(agentName);if(idx===-1)return!1;config.members.splice(idx,1);let sql=await getConnection();await sql`
558
456
  UPDATE teams SET members = ${sql.json(config.members)}
559
457
  WHERE name = ${teamName}
560
- `;try{await killWorkersByName(agentName)}catch{}return!0}async function cleanupTeamGitArtifacts(config){if(config.worktreePath)try{await $2`git -C ${config.repo} worktree remove --force ${config.worktreePath}`.quiet()}catch{try{await $2`rm -rf ${config.worktreePath}`.quiet()}catch{}}try{let branchTip=(await $2`git -C ${config.repo} rev-parse ${config.name}`.quiet()).text().trim(),baseTip="";try{baseTip=(await $2`git -C ${config.repo} rev-parse origin/${config.baseBranch}`.quiet()).text().trim()}catch{try{baseTip=(await $2`git -C ${config.repo} rev-parse ${config.baseBranch}`.quiet()).text().trim()}catch{return}}if(branchTip&&baseTip&&branchTip===baseTip)await $2`git -C ${config.repo} branch -D ${config.name}`.quiet()}catch{}}async function cleanupTeamTmuxSession(tmuxSessionName,teamName){if(!tmuxSessionName)return;try{if(!await findSessionByName(tmuxSessionName))return;let windows=await listWindows(tmuxSessionName),teamWindow=await findWindowByName(tmuxSessionName,teamName);if(tmuxSessionName===teamName||windows.length===1&&windows[0]?.name===teamName)await killSession(tmuxSessionName);else if(teamWindow)await executeTmux2(`kill-window -t '${teamWindow.id}'`)}catch{}}async function archiveTeam(teamName){let config=await getTeam(teamName);if(!config)return!1;let killResults=await Promise.allSettled(config.members.map((member)=>killWorkersByName(member,teamName)));for(let i2=0;i2<killResults.length;i2++)if(killResults[i2].status==="rejected")console.error(` Failed to kill member "${config.members[i2]}": ${killResults[i2].reason}`);await cleanupTeamTmuxSession(config.tmuxSessionName??teamName,teamName),await cleanupTeamGitArtifacts(config);let sql=await getConnection(),archivedAgents=0,updated=!1;if(await sql.begin(async(tx)=>{if((await tx`
458
+ `;try{await killWorkersByName(agentName)}catch{}return!0}async function cleanupTeamGitArtifacts(config){if(config.worktreePath)try{await $`git -C ${config.repo} worktree remove --force ${config.worktreePath}`.quiet()}catch{try{await $`rm -rf ${config.worktreePath}`.quiet()}catch{}}try{let branchTip=(await $`git -C ${config.repo} rev-parse ${config.name}`.quiet()).text().trim(),baseTip="";try{baseTip=(await $`git -C ${config.repo} rev-parse origin/${config.baseBranch}`.quiet()).text().trim()}catch{try{baseTip=(await $`git -C ${config.repo} rev-parse ${config.baseBranch}`.quiet()).text().trim()}catch{return}}if(branchTip&&baseTip&&branchTip===baseTip)await $`git -C ${config.repo} branch -D ${config.name}`.quiet()}catch{}}async function cleanupTeamTmuxSession(tmuxSessionName,teamName){if(!tmuxSessionName)return;try{if(!await findSessionByName(tmuxSessionName))return;let windows=await listWindows(tmuxSessionName),teamWindow=await findWindowByName(tmuxSessionName,teamName);if(tmuxSessionName===teamName||windows.length===1&&windows[0]?.name===teamName)await killSession(tmuxSessionName);else if(teamWindow)await executeTmux2(`kill-window -t '${teamWindow.id}'`)}catch{}}async function archiveTeam(teamName){let config=await getTeam(teamName);if(!config)return!1;let killResults=await Promise.allSettled(config.members.map((member)=>killWorkersByName(member,teamName)));for(let i2=0;i2<killResults.length;i2++)if(killResults[i2].status==="rejected")console.error(` Failed to kill member "${config.members[i2]}": ${killResults[i2].reason}`);await cleanupTeamTmuxSession(config.tmuxSessionName??teamName,teamName),await cleanupTeamGitArtifacts(config);let sql=await getConnection(),archivedAgents=0,updated=!1;if(await sql.begin(async(tx)=>{if((await tx`
561
459
  UPDATE teams SET status = 'archived', archived_at = now(), updated_at = now()
562
460
  WHERE name = ${teamName}
563
461
  `).count===0)return;updated=!0,archivedAgents=(await tx`
@@ -578,7 +476,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
578
476
  `).count>0,disbanded)await tx`
579
477
  UPDATE agents SET state = 'archived', updated_at = now()
580
478
  WHERE team = ${teamName} AND state IS DISTINCT FROM 'archived'
581
- `}),!disbanded)return!1;return recordAuditEvent("team",teamName,"disbanded",getActor(),{repo:config.repo}).catch(()=>{}),await pruneStaleWorktrees(config.repo),!0}async function pruneStaleWorktrees(_repoPath){let sql=await getConnection(),rows=await sql`SELECT name, worktree_path FROM teams`;for(let row of rows)if(row.worktree_path&&!existsSync10(row.worktree_path)){try{await deleteNativeTeam(row.name)}catch{}await sql`DELETE FROM teams WHERE name = ${row.name}`}}async function updateTeamConfig(name,config){let sql=await getConnection();await sql`
479
+ `}),!disbanded)return!1;return recordAuditEvent("team",teamName,"disbanded",getActor(),{repo:config.repo}).catch(()=>{}),await pruneStaleWorktrees(config.repo),!0}async function pruneStaleWorktrees(_repoPath){let sql=await getConnection(),rows=await sql`SELECT name, worktree_path FROM teams`;for(let row of rows)if(row.worktree_path&&!existsSync8(row.worktree_path)){try{await deleteNativeTeam(row.name)}catch{}await sql`DELETE FROM teams WHERE name = ${row.name}`}}async function updateTeamConfig(name,config){let sql=await getConnection();await sql`
582
480
  UPDATE teams SET
583
481
  repo = ${config.repo},
584
482
  base_branch = ${config.baseBranch},
@@ -597,9 +495,9 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
597
495
  `}async function getTeam(name){try{let rows=await(await getConnection())`SELECT * FROM teams WHERE name = ${name}`;if(rows.length===0)return null;return rowToTeamConfig(rows[0])}catch{return null}}async function listTeams(includeArchived=!1){try{let sql=await getConnection();if(includeArchived)return(await sql`SELECT * FROM teams ORDER BY created_at DESC`).map(rowToTeamConfig);return(await sql`SELECT * FROM teams WHERE status != 'archived' ORDER BY created_at DESC`).map(rowToTeamConfig)}catch{return[]}}async function listMembers(teamName){let config=await getTeam(teamName);if(!config)return null;return config.members}async function killTeamMembers(teamName){let config=await getTeam(teamName);if(!config)return;for(let member of config.members)try{await killWorkersByName(member,teamName)}catch{}}async function resolveLeaderName(teamName){try{let config=await getTeam(teamName);if(config?.leader&&config.leader!=="team-lead")return config.leader}catch{}return teamName}async function setTeamStatus(teamName,status){if(status==="done"||status==="archived"){let config=await getTeam(teamName);if(config)await Promise.allSettled(config.members.map((member)=>killWorkersByName(member,teamName))),await cleanupTeamTmuxSession(config.tmuxSessionName??teamName,teamName),await cleanupTeamGitArtifacts(config)}if((await(await getConnection())`
598
496
  UPDATE teams SET status = ${status}
599
497
  WHERE name = ${teamName}
600
- `).count===0)throw Error(`Team "${teamName}" not found.`)}var init_team_manager=__esm(()=>{init_agent_registry();init_audit();init_builtin_agents();init_claude_native_teams();init_db();init_executor_registry();init_genie_config2();init_tmux()});var exports_claude_native_teams={};__export(exports_claude_native_teams,{writeNativeInbox:()=>writeNativeInbox,unregisterNativeMember:()=>unregisterNativeMember,sanitizeTeamName:()=>sanitizeTeamName,resolveNativeMemberName:()=>resolveNativeMemberName,registerNativeMember:()=>registerNativeMember,registerAsTeamLead:()=>registerAsTeamLead,loadNativeTeamConfig:()=>loadNativeTeamConfig,loadConfig:()=>loadConfig,loadAllNativeTeamConfigs:()=>loadAllNativeTeamConfigs,listTeamsWithUnreadInbox:()=>listTeamsWithUnreadInbox,listTeams:()=>listTeams2,isInsideClaudeCode:()=>isInsideClaudeCode,findTeamsContainingAgent:()=>findTeamsContainingAgent,ensureNativeTeamWithSessionId:()=>ensureNativeTeamWithSessionId,ensureNativeTeam:()=>ensureNativeTeam,discoverTeamName:()=>discoverTeamName,discoverClaudeParentSessionId:()=>discoverClaudeParentSessionId,deleteNativeTeam:()=>deleteNativeTeam,clearNativeInbox:()=>clearNativeInbox,assignColor:()=>assignColor});import{existsSync as existsSync11}from"fs";import{mkdir as mkdir3,open as open2,readFile as readFile3,readdir as readdir2,rm as rm2,stat as stat2,writeFile as writeFile3}from"fs/promises";import{homedir as homedir9}from"os";import{join as join15}from"path";function claudeConfigDir2(){return process.env.CLAUDE_CONFIG_DIR??join15(homedir9(),".claude")}function teamsBaseDir(){return join15(claudeConfigDir2(),"teams")}function sanitizeTeamName(name){return name.replace(/[^a-zA-Z0-9]/g,"-").toLowerCase()}async function listTeams2(){try{return(await readdir2(teamsBaseDir())).filter((e)=>!e.startsWith("."))}catch{return[]}}function teamDir(teamName){return join15(teamsBaseDir(),sanitizeTeamName(teamName))}function configPath(teamName){return join15(teamDir(teamName),"config.json")}function inboxesDir(teamName){return join15(teamDir(teamName),"inboxes")}function inboxPath(teamName,agentName){return join15(inboxesDir(teamName),`${sanitizeTeamName(agentName)}.json`)}async function loadConfig(teamName){try{let content=await readFile3(configPath(teamName),"utf-8");return JSON.parse(content)}catch(err){if(err instanceof Error&&"code"in err&&err.code==="ENOENT")return null;let message=err instanceof Error?err.message:String(err);return console.warn(`[claude-native-teams] Failed to load config for "${teamName}": ${message}`),null}}async function loadNativeTeamConfig(teamName){return loadConfig(teamName)}async function loadAllNativeTeamConfigs(){let teamNames=await listTeams2(),configs=[];for(let name of teamNames){let cfg=await loadConfig(name);if(cfg)configs.push(cfg)}return configs}async function findTeamsContainingAgent(agentName){let teams=await listTeams2(),matches=[];for(let teamName of teams){let config=await loadConfig(teamName);if(!config)continue;if(config.members.some((m)=>m.name===agentName||m.agentType===agentName))matches.push(teamName)}return matches}async function saveConfig(teamName,config){await writeFile3(configPath(teamName),JSON.stringify(config,null,2))}async function countLeadSessionRefs(){let counts=new Map,teams=await listTeams2();for(let team of teams){let leadSessionId=(await loadConfig(team))?.leadSessionId;if(!leadSessionId)continue;counts.set(leadSessionId,(counts.get(leadSessionId)??0)+1)}return counts}async function ensureNativeTeam(teamName,description,leadSessionId,leaderName){let dir=teamDir(teamName),inboxDir=inboxesDir(teamName);await mkdir3(dir,{recursive:!0}),await mkdir3(inboxDir,{recursive:!0}),ensureClaudeSettingsSafe();let existing=await loadConfig(teamName);if(existing)return await backfillTeamRow(sanitizeTeamName(teamName),existing),existing;let sanitized=sanitizeTeamName(teamName),resolvedLeader=sanitizeTeamName(leaderName??teamName),config={name:sanitized,description,createdAt:Date.now(),leadAgentId:`${resolvedLeader}@${sanitized}`,leadSessionId,members:[]};return await saveConfig(teamName,config),await backfillTeamRow(sanitized,config),config}async function backfillTeamRow(name,nativeConfig){try{let{ensureTeamRow:ensureTeamRow2}=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager));await ensureTeamRow2(name,{nativeConfig})}catch{}}function isHealthyLeadSessionId(id){if(typeof id!=="string"||id.length===0)return!1;return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)}async function ensureNativeTeamWithSessionId(teamName,description,sessionId,leaderName){let config=await ensureNativeTeam(teamName,description,sessionId,leaderName);if(config.leadSessionId===sessionId)return config;if(isHealthyLeadSessionId(config.leadSessionId))return config;return config.leadSessionId=sessionId,await saveConfig(teamName,config),config}async function registerNativeMember(teamName,member){let config=await loadConfig(teamName);if(!config)throw Error(`Native team "${teamName}" not found`);let sanitized=sanitizeTeamName(teamName),agentId=`${sanitizeTeamName(member.agentName)}@${sanitized}`;config.members=config.members.filter((m)=>m.agentId!==agentId),config.members.push({agentId,name:sanitizeTeamName(member.agentName),agentType:member.agentType??"general-purpose",joinedAt:Date.now(),tmuxPaneId:member.tmuxPaneId,cwd:member.cwd??process.cwd(),backendType:"tmux",color:member.color,planModeRequired:member.planModeRequired??!1,isActive:!0}),await saveConfig(teamName,config);let inbox=inboxPath(teamName,member.agentName);if(!existsSync11(inbox))await writeFile3(inbox,"[]")}async function unregisterNativeMember(teamName,agentName){let config=await loadConfig(teamName);if(!config)return;let sanitized=sanitizeTeamName(teamName),agentId=`${sanitizeTeamName(agentName)}@${sanitized}`,before=config.members.length;if(config.members=config.members.filter((m)=>m.agentId!==agentId),config.members.length===before)return;await saveConfig(teamName,config)}async function writeNativeInbox(teamName,agentName,message){let path2=inboxPath(teamName,agentName);await mkdir3(inboxesDir(teamName),{recursive:!0}),await acquireLock(path2);try{let messages=[];try{let content=await readFile3(path2,"utf-8");messages=JSON.parse(content)}catch{}messages.push(message),await writeFile3(path2,JSON.stringify(messages,null,2))}finally{await releaseLock(path2)}}async function resolveNativeMemberName(teamName,genieWorkerId){let config=await loadConfig(teamName);if(!config||config.members.length===0)return null;let sanitizedId=sanitizeTeamName(genieWorkerId),sanitizedTeam=sanitizeTeamName(teamName),exactMatch=config.members.find((m)=>m.name===sanitizedId&&m.isActive);if(exactMatch)return exactMatch.name;let agentIdMatch=config.members.find((m)=>m.agentId===`${sanitizedId}@${sanitizedTeam}`&&m.isActive);if(agentIdMatch)return agentIdMatch.name;let teamPrefix=`${sanitizedTeam}-`;if(sanitizedId.startsWith(teamPrefix)){let stripped=sanitizedId.slice(teamPrefix.length),prefixMatch=config.members.find((m)=>m.name===stripped&&m.isActive);if(prefixMatch)return prefixMatch.name}let inactiveMatch=config.members.find((m)=>m.name===sanitizedId);if(inactiveMatch)return inactiveMatch.name;return null}async function assignColor(teamName){let config=await loadConfig(teamName);if(!config)return CLAUDE_TEAM_COLORS[0];let usedColors=new Set(config.members.map((m)=>m.color));for(let color of CLAUDE_TEAM_COLORS)if(!usedColors.has(color))return color;return CLAUDE_TEAM_COLORS[config.members.length%CLAUDE_TEAM_COLORS.length]}async function clearNativeInbox(teamName,agentName){let path2=inboxPath(teamName,agentName);await acquireLock(path2);try{await writeFile3(path2,"[]")}finally{await releaseLock(path2)}}async function deleteNativeTeam(teamName){let dir=teamDir(teamName);if(!existsSync11(dir))return!1;return await rm2(dir,{recursive:!0,force:!0}),!0}function extractLeaderInboxName(config,teamName){if(!config?.leadAgentId)return teamName??"unknown";let atIdx=config.leadAgentId.indexOf("@");return atIdx>0?config.leadAgentId.slice(0,atIdx):teamName??"unknown"}function resolveLeadWorkingDir(config,leaderInboxName){let leadMember=config.members.find((m)=>m.agentId===config.leadAgentId||m.name===leaderInboxName);if(leadMember?.cwd)return leadMember.cwd;if(config.worktreePath)return config.worktreePath;if(config.repo)return config.repo;return config.members.find((m)=>m.cwd)?.cwd??null}async function scanTeamInbox(base,name){let config=null;try{let cfgContent=await readFile3(join15(base,name,"config.json"),"utf-8");config=JSON.parse(cfgContent)}catch{}let leaderInboxName=extractLeaderInboxName(config,name),inboxFile=join15(base,name,"inboxes",`${leaderInboxName}.json`),messages;try{let content=await readFile3(inboxFile,"utf-8");messages=JSON.parse(content)}catch{return null}if(!Array.isArray(messages))return null;let unread=messages.filter((m)=>m.read===!1);if(unread.length===0)return null;let workingDir=config?resolveLeadWorkingDir(config,leaderInboxName):null;return{teamName:name,unreadCount:unread.length,workingDir,firstUnreadText:unread[0]?.text??null}}async function listTeamsWithUnreadInbox(){let base=teamsBaseDir(),teamDirs;try{teamDirs=await readdir2(base)}catch{return[]}let results=[];for(let name of teamDirs){let entry=await scanTeamInbox(base,name);if(entry)results.push(entry)}return results}function sanitizePath(p){return p.replace(/[^a-zA-Z0-9]/g,"-")}async function discoverClaudeSessionId(cwd){let envSessionId=process.env.CLAUDE_CODE_SESSION_ID;if(envSessionId)return envSessionId;let projectDir=join15(claudeConfigDir2(),"projects",sanitizePath(cwd??process.cwd()));try{let jsonls=(await readdir2(projectDir)).filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let newest=null;for(let name of jsonls){let s=await stat2(join15(projectDir,name));if(!newest||s.mtimeMs>newest.mtime)newest={name,mtime:s.mtimeMs}}if(!newest)return null;return newest.name.replace(".jsonl","")}catch{return null}}async function readSessionMetadata(filePath){let handle=null;try{handle=await open2(filePath,"r");let buffer=Buffer.alloc(8192),{bytesRead}=await handle.read(buffer,0,buffer.length,0),head=buffer.toString("utf-8",0,bytesRead);for(let line of head.split(`
601
- `).slice(0,20)){let trimmed=line.trim();if(!trimmed)continue;try{let entry=JSON.parse(trimmed),teamName=typeof entry.teamName==="string"?entry.teamName:void 0,agentName=typeof entry.agentName==="string"?entry.agentName:void 0;if(teamName||agentName)return{teamName,agentName}}catch{}}}catch{return{}}finally{await handle?.close().catch(()=>{})}return{}}function rootScore(metadata){if(!metadata.teamName&&!metadata.agentName)return 2;if(metadata.teamName&&!metadata.agentName)return 1;return 0}function compareSessionRanking(a,b,leadRefs){let aLeadRefs=leadRefs.get(a.name.replace(".jsonl",""))??0,bLeadRefs=leadRefs.get(b.name.replace(".jsonl",""))??0;if(aLeadRefs!==bLeadRefs)return bLeadRefs-aLeadRefs;let aRoot=rootScore(a.metadata),bRoot=rootScore(b.metadata);if(aRoot!==bRoot)return bRoot-aRoot;return b.mtime-a.mtime}async function discoverClaudeParentSessionId(cwd){let envSessionId=process.env.CLAUDE_CODE_SESSION_ID;if(envSessionId)return envSessionId;let projectDir=join15(claudeConfigDir2(),"projects",sanitizePath(cwd??process.cwd()));try{let jsonls=(await readdir2(projectDir)).filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let ranked=await Promise.all(jsonls.map(async(name)=>{let filePath=join15(projectDir,name),s=await stat2(filePath),metadata=await readSessionMetadata(filePath);return{name,mtime:s.mtimeMs,metadata}})),leadRefs=await countLeadSessionRefs();return ranked.sort((a,b)=>compareSessionRanking(a,b,leadRefs)),ranked[0]?.name.replace(".jsonl","")??null}catch{return null}}function isInsideClaudeCode(){return process.env.CLAUDECODE==="1"}async function discoverTeamName(cwd){let envTeam=process.env.GENIE_TEAM;if(envTeam)return envTeam;let base=teamsBaseDir(),sessionId=await discoverClaudeSessionId(cwd);if(sessionId)try{let teams=await readdir2(base);for(let name of teams){let cfgPath=join15(base,name,"config.json");try{let content=await readFile3(cfgPath,"utf-8"),config=JSON.parse(content);if(config.leadSessionId===sessionId)return config.name}catch{}}}catch{}let tmuxSessionName=await currentTmuxSessionName();if(tmuxSessionName){let cfgPath=join15(base,tmuxSessionName,"config.json");try{let content=await readFile3(cfgPath,"utf-8");return JSON.parse(content).name}catch{}}return null}async function currentTmuxSessionName(){if(!process.env.TMUX)return null;try{let{getCurrentSessionName:getCurrentSessionName2}=await Promise.resolve().then(() => (init_tmux(),exports_tmux));return await getCurrentSessionName2()}catch{return null}}async function registerAsTeamLead(teamName,opts){let sessionId=await discoverClaudeSessionId(opts?.cwd);if(!sessionId)throw Error("Could not discover Claude Code session ID. Are you running inside Claude Code with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1?");let resolvedLeaderName=opts?.leaderName??teamName,config=await ensureNativeTeam(teamName,`Genie team: ${teamName}`,sessionId,resolvedLeaderName);if(config.leadSessionId!==sessionId)config.leadSessionId=sessionId,await saveConfig(teamName,config);let sanitized=sanitizeTeamName(teamName),leadAgentId=`${sanitizeTeamName(resolvedLeaderName)}@${sanitized}`,existingLead=config.members.find((m)=>m.agentId===leadAgentId),resolvedPaneId=opts?.tmuxPaneId??process.env.TMUX_PANE;if(!existingLead||!existingLead.isActive)await registerNativeMember(teamName,{agentName:resolvedLeaderName,agentType:"general-purpose",color:opts?.color??"blue",tmuxPaneId:resolvedPaneId,cwd:opts?.cwd??process.cwd()});else if(resolvedPaneId&&existingLead.tmuxPaneId!==resolvedPaneId)existingLead.tmuxPaneId=resolvedPaneId,await saveConfig(teamName,config);let inbox=inboxPath(teamName,resolvedLeaderName);if(!existsSync11(inbox))await writeFile3(inbox,"[]");let finalConfig=await loadConfig(teamName);if(!finalConfig)throw Error(`Failed to load config for team "${teamName}" after creation`);return{sessionId,config:finalConfig}}var init_claude_native_teams=__esm(()=>{init_claude_settings();init_lockfile();init_provider_adapters()});import{existsSync as existsSync12,readFileSync as readFileSync7,statSync}from"fs";import{mkdir as mkdir4,readFile as readFile4,readdir as readdir3,rename,writeFile as writeFile4}from"fs/promises";import{homedir as homedir10}from"os";import{join as join16}from"path";function getGenieHome(){return process.env.GENIE_HOME??join16(homedir10(),".genie")}function workersJsonPath(){return join16(getGenieHome(),"workers.json")}function claudeTeamsDirPath(){return join16(process.env.CLAUDE_CONFIG_DIR??join16(homedir10(),".claude"),"teams")}function teamsSeedMarkerPath(){return join16(getGenieHome(),"state","teams-seed-marker")}function teamsDirMtime(claudeTeamsDir){try{return String(statSync(claudeTeamsDir).mtimeMs)}catch{return null}}function readFreshTeamsSeedMarker(claudeTeamsDir){let mtimeMs=teamsDirMtime(claudeTeamsDir);if(!mtimeMs)return null;try{let marker=JSON.parse(readFileSync7(teamsSeedMarkerPath(),"utf-8"));if(marker.teamsDir!==claudeTeamsDir||marker.mtimeMs!==mtimeMs||!Array.isArray(marker.teamNames))return null;return{teamsDir:marker.teamsDir,mtimeMs:marker.mtimeMs,teamNames:marker.teamNames.filter((name)=>typeof name==="string"&&name.length>0)}}catch{return null}}function hasFreshTeamsSeedMarker(claudeTeamsDir){return readFreshTeamsSeedMarker(claudeTeamsDir)!==null}async function writeTeamsSeedMarker(teamNames){let claudeTeamsDir=claudeTeamsDirPath(),mtimeMs=teamsDirMtime(claudeTeamsDir);if(!mtimeMs)return;let markerPath=teamsSeedMarkerPath(),marker={teamsDir:claudeTeamsDir,mtimeMs,teamNames:[...new Set(teamNames)].sort()};await mkdir4(join16(getGenieHome(),"state"),{recursive:!0}),await writeFile4(markerPath,`${JSON.stringify(marker)}
602
- `,"utf-8")}function needsMigration(filePath){return existsSync12(filePath)&&!existsSync12(`${filePath}.migrated`)}async function readJson(filePath){try{let content=await readFile4(filePath,"utf-8");return JSON.parse(content)}catch{return null}}async function renameMatchingFiles(dir,filter){if(!existsSync12(dir))return;try{let files=await readdir3(dir);for(let f of files){if(!filter(f))continue;let fp=join16(dir,f);if(needsMigration(fp))await rename(fp,`${fp}.migrated`)}}catch{}}function needsSeed(){if(needsMigration(workersJsonPath()))return!0;let claudeTeamsDir=claudeTeamsDirPath();if(!existsSync12(claudeTeamsDir))return!1;if(hasFreshTeamsSeedMarker(claudeTeamsDir))return!1;try{return __require("fs").readdirSync(claudeTeamsDir).some((e)=>!e.startsWith("."))}catch{return!1}}async function needsSeededTeams(sql){let marker=readFreshTeamsSeedMarker(claudeTeamsDirPath());if(!marker||marker.teamNames.length===0)return!1;try{return(await sql`
498
+ `).count===0)throw Error(`Team "${teamName}" not found.`)}var init_team_manager=__esm(()=>{init_agent_registry();init_audit();init_builtin_agents();init_claude_native_teams();init_db();init_executor_registry();init_genie_config2();init_tmux()});var exports_claude_native_teams={};__export(exports_claude_native_teams,{writeNativeInbox:()=>writeNativeInbox,unregisterNativeMember:()=>unregisterNativeMember,sanitizeTeamName:()=>sanitizeTeamName,resolveNativeMemberName:()=>resolveNativeMemberName,registerNativeMember:()=>registerNativeMember,registerAsTeamLead:()=>registerAsTeamLead,loadNativeTeamConfig:()=>loadNativeTeamConfig,loadConfig:()=>loadConfig,loadAllNativeTeamConfigs:()=>loadAllNativeTeamConfigs,listTeamsWithUnreadInbox:()=>listTeamsWithUnreadInbox,listTeams:()=>listTeams2,isInsideClaudeCode:()=>isInsideClaudeCode,findTeamsContainingAgent:()=>findTeamsContainingAgent,ensureNativeTeamWithSessionId:()=>ensureNativeTeamWithSessionId,ensureNativeTeam:()=>ensureNativeTeam,discoverTeamName:()=>discoverTeamName,discoverClaudeParentSessionId:()=>discoverClaudeParentSessionId,deleteNativeTeam:()=>deleteNativeTeam,clearNativeInbox:()=>clearNativeInbox,assignColor:()=>assignColor});import{existsSync as existsSync9}from"fs";import{mkdir as mkdir3,open as open2,readFile as readFile3,readdir as readdir2,rm as rm2,stat as stat2,writeFile as writeFile3}from"fs/promises";import{homedir as homedir8}from"os";import{join as join12}from"path";function claudeConfigDir2(){return process.env.CLAUDE_CONFIG_DIR??join12(homedir8(),".claude")}function teamsBaseDir(){return join12(claudeConfigDir2(),"teams")}function sanitizeTeamName(name){return name.replace(/[^a-zA-Z0-9]/g,"-").toLowerCase()}async function listTeams2(){try{return(await readdir2(teamsBaseDir())).filter((e)=>!e.startsWith("."))}catch{return[]}}function teamDir(teamName){return join12(teamsBaseDir(),sanitizeTeamName(teamName))}function configPath(teamName){return join12(teamDir(teamName),"config.json")}function inboxesDir(teamName){return join12(teamDir(teamName),"inboxes")}function inboxPath(teamName,agentName){return join12(inboxesDir(teamName),`${sanitizeTeamName(agentName)}.json`)}async function loadConfig(teamName){try{let content=await readFile3(configPath(teamName),"utf-8");return JSON.parse(content)}catch(err){if(err instanceof Error&&"code"in err&&err.code==="ENOENT")return null;let message=err instanceof Error?err.message:String(err);return console.warn(`[claude-native-teams] Failed to load config for "${teamName}": ${message}`),null}}async function loadNativeTeamConfig(teamName){return loadConfig(teamName)}async function loadAllNativeTeamConfigs(){let teamNames=await listTeams2(),configs=[];for(let name of teamNames){let cfg=await loadConfig(name);if(cfg)configs.push(cfg)}return configs}async function findTeamsContainingAgent(agentName){let teams=await listTeams2(),matches=[];for(let teamName of teams){let config=await loadConfig(teamName);if(!config)continue;if(config.members.some((m)=>m.name===agentName||m.agentType===agentName))matches.push(teamName)}return matches}async function saveConfig(teamName,config){await writeFile3(configPath(teamName),JSON.stringify(config,null,2))}async function countLeadSessionRefs(){let counts=new Map,teams=await listTeams2();for(let team of teams){let leadSessionId=(await loadConfig(team))?.leadSessionId;if(!leadSessionId)continue;counts.set(leadSessionId,(counts.get(leadSessionId)??0)+1)}return counts}async function ensureNativeTeam(teamName,description,leadSessionId,leaderName){let dir=teamDir(teamName),inboxDir=inboxesDir(teamName);await mkdir3(dir,{recursive:!0}),await mkdir3(inboxDir,{recursive:!0}),ensureClaudeSettingsSafe();let existing=await loadConfig(teamName);if(existing)return await backfillTeamRow(sanitizeTeamName(teamName),existing),existing;let sanitized=sanitizeTeamName(teamName),resolvedLeader=sanitizeTeamName(leaderName??teamName),config={name:sanitized,description,createdAt:Date.now(),leadAgentId:`${resolvedLeader}@${sanitized}`,leadSessionId,members:[]};return await saveConfig(teamName,config),await backfillTeamRow(sanitized,config),config}async function backfillTeamRow(name,nativeConfig){try{let{ensureTeamRow:ensureTeamRow2}=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager));await ensureTeamRow2(name,{nativeConfig})}catch{}}function isHealthyLeadSessionId(id){if(typeof id!=="string"||id.length===0)return!1;return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id)}async function ensureNativeTeamWithSessionId(teamName,description,sessionId,leaderName){let config=await ensureNativeTeam(teamName,description,sessionId,leaderName);if(config.leadSessionId===sessionId)return config;if(isHealthyLeadSessionId(config.leadSessionId))return config;return config.leadSessionId=sessionId,await saveConfig(teamName,config),config}async function registerNativeMember(teamName,member){let config=await loadConfig(teamName);if(!config)throw Error(`Native team "${teamName}" not found`);let sanitized=sanitizeTeamName(teamName),agentId=`${sanitizeTeamName(member.agentName)}@${sanitized}`;config.members=config.members.filter((m)=>m.agentId!==agentId),config.members.push({agentId,name:sanitizeTeamName(member.agentName),agentType:member.agentType??"general-purpose",joinedAt:Date.now(),tmuxPaneId:member.tmuxPaneId,cwd:member.cwd??process.cwd(),backendType:"tmux",color:member.color,planModeRequired:member.planModeRequired??!1,isActive:!0}),await saveConfig(teamName,config);let inbox=inboxPath(teamName,member.agentName);if(!existsSync9(inbox))await writeFile3(inbox,"[]")}async function unregisterNativeMember(teamName,agentName){let config=await loadConfig(teamName);if(!config)return;let sanitized=sanitizeTeamName(teamName),agentId=`${sanitizeTeamName(agentName)}@${sanitized}`,before=config.members.length;if(config.members=config.members.filter((m)=>m.agentId!==agentId),config.members.length===before)return;await saveConfig(teamName,config)}async function writeNativeInbox(teamName,agentName,message){let path2=inboxPath(teamName,agentName);await mkdir3(inboxesDir(teamName),{recursive:!0}),await acquireLock(path2);try{let messages=[];try{let content=await readFile3(path2,"utf-8");messages=JSON.parse(content)}catch{}messages.push(message),await writeFile3(path2,JSON.stringify(messages,null,2))}finally{await releaseLock(path2)}}async function resolveNativeMemberName(teamName,genieWorkerId){let config=await loadConfig(teamName);if(!config||config.members.length===0)return null;let sanitizedId=sanitizeTeamName(genieWorkerId),sanitizedTeam=sanitizeTeamName(teamName),exactMatch=config.members.find((m)=>m.name===sanitizedId&&m.isActive);if(exactMatch)return exactMatch.name;let agentIdMatch=config.members.find((m)=>m.agentId===`${sanitizedId}@${sanitizedTeam}`&&m.isActive);if(agentIdMatch)return agentIdMatch.name;let teamPrefix=`${sanitizedTeam}-`;if(sanitizedId.startsWith(teamPrefix)){let stripped=sanitizedId.slice(teamPrefix.length),prefixMatch=config.members.find((m)=>m.name===stripped&&m.isActive);if(prefixMatch)return prefixMatch.name}let inactiveMatch=config.members.find((m)=>m.name===sanitizedId);if(inactiveMatch)return inactiveMatch.name;return null}async function assignColor(teamName){let config=await loadConfig(teamName);if(!config)return CLAUDE_TEAM_COLORS[0];let usedColors=new Set(config.members.map((m)=>m.color));for(let color of CLAUDE_TEAM_COLORS)if(!usedColors.has(color))return color;return CLAUDE_TEAM_COLORS[config.members.length%CLAUDE_TEAM_COLORS.length]}async function clearNativeInbox(teamName,agentName){let path2=inboxPath(teamName,agentName);await acquireLock(path2);try{await writeFile3(path2,"[]")}finally{await releaseLock(path2)}}async function deleteNativeTeam(teamName){let dir=teamDir(teamName);if(!existsSync9(dir))return!1;return await rm2(dir,{recursive:!0,force:!0}),!0}function extractLeaderInboxName(config,teamName){if(!config?.leadAgentId)return teamName??"unknown";let atIdx=config.leadAgentId.indexOf("@");return atIdx>0?config.leadAgentId.slice(0,atIdx):teamName??"unknown"}function resolveLeadWorkingDir(config,leaderInboxName){let leadMember=config.members.find((m)=>m.agentId===config.leadAgentId||m.name===leaderInboxName);if(leadMember?.cwd)return leadMember.cwd;if(config.worktreePath)return config.worktreePath;if(config.repo)return config.repo;return config.members.find((m)=>m.cwd)?.cwd??null}async function scanTeamInbox(base,name){let config=null;try{let cfgContent=await readFile3(join12(base,name,"config.json"),"utf-8");config=JSON.parse(cfgContent)}catch{}let leaderInboxName=extractLeaderInboxName(config,name),inboxFile=join12(base,name,"inboxes",`${leaderInboxName}.json`),messages;try{let content=await readFile3(inboxFile,"utf-8");messages=JSON.parse(content)}catch{return null}if(!Array.isArray(messages))return null;let unread=messages.filter((m)=>m.read===!1);if(unread.length===0)return null;let workingDir=config?resolveLeadWorkingDir(config,leaderInboxName):null;return{teamName:name,unreadCount:unread.length,workingDir,firstUnreadText:unread[0]?.text??null}}async function listTeamsWithUnreadInbox(){let base=teamsBaseDir(),teamDirs;try{teamDirs=await readdir2(base)}catch{return[]}let results=[];for(let name of teamDirs){let entry=await scanTeamInbox(base,name);if(entry)results.push(entry)}return results}function sanitizePath(p){return p.replace(/[^a-zA-Z0-9]/g,"-")}async function discoverClaudeSessionId(cwd){let envSessionId=process.env.CLAUDE_CODE_SESSION_ID;if(envSessionId)return envSessionId;let projectDir=join12(claudeConfigDir2(),"projects",sanitizePath(cwd??process.cwd()));try{let jsonls=(await readdir2(projectDir)).filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let newest=null;for(let name of jsonls){let s=await stat2(join12(projectDir,name));if(!newest||s.mtimeMs>newest.mtime)newest={name,mtime:s.mtimeMs}}if(!newest)return null;return newest.name.replace(".jsonl","")}catch{return null}}async function readSessionMetadata(filePath){let handle=null;try{handle=await open2(filePath,"r");let buffer=Buffer.alloc(8192),{bytesRead}=await handle.read(buffer,0,buffer.length,0),head=buffer.toString("utf-8",0,bytesRead);for(let line of head.split(`
499
+ `).slice(0,20)){let trimmed=line.trim();if(!trimmed)continue;try{let entry=JSON.parse(trimmed),teamName=typeof entry.teamName==="string"?entry.teamName:void 0,agentName=typeof entry.agentName==="string"?entry.agentName:void 0;if(teamName||agentName)return{teamName,agentName}}catch{}}}catch{return{}}finally{await handle?.close().catch(()=>{})}return{}}function rootScore(metadata){if(!metadata.teamName&&!metadata.agentName)return 2;if(metadata.teamName&&!metadata.agentName)return 1;return 0}function compareSessionRanking(a,b,leadRefs){let aLeadRefs=leadRefs.get(a.name.replace(".jsonl",""))??0,bLeadRefs=leadRefs.get(b.name.replace(".jsonl",""))??0;if(aLeadRefs!==bLeadRefs)return bLeadRefs-aLeadRefs;let aRoot=rootScore(a.metadata),bRoot=rootScore(b.metadata);if(aRoot!==bRoot)return bRoot-aRoot;return b.mtime-a.mtime}async function discoverClaudeParentSessionId(cwd){let envSessionId=process.env.CLAUDE_CODE_SESSION_ID;if(envSessionId)return envSessionId;let projectDir=join12(claudeConfigDir2(),"projects",sanitizePath(cwd??process.cwd()));try{let jsonls=(await readdir2(projectDir)).filter((e)=>e.endsWith(".jsonl"));if(jsonls.length===0)return null;let ranked=await Promise.all(jsonls.map(async(name)=>{let filePath=join12(projectDir,name),s=await stat2(filePath),metadata=await readSessionMetadata(filePath);return{name,mtime:s.mtimeMs,metadata}})),leadRefs=await countLeadSessionRefs();return ranked.sort((a,b)=>compareSessionRanking(a,b,leadRefs)),ranked[0]?.name.replace(".jsonl","")??null}catch{return null}}function isInsideClaudeCode(){return process.env.CLAUDECODE==="1"}async function discoverTeamName(cwd){let envTeam=process.env.GENIE_TEAM;if(envTeam)return envTeam;let base=teamsBaseDir(),sessionId=await discoverClaudeSessionId(cwd);if(sessionId)try{let teams=await readdir2(base);for(let name of teams){let cfgPath=join12(base,name,"config.json");try{let content=await readFile3(cfgPath,"utf-8"),config=JSON.parse(content);if(config.leadSessionId===sessionId)return config.name}catch{}}}catch{}let tmuxSessionName=await currentTmuxSessionName();if(tmuxSessionName){let cfgPath=join12(base,tmuxSessionName,"config.json");try{let content=await readFile3(cfgPath,"utf-8");return JSON.parse(content).name}catch{}}return null}async function currentTmuxSessionName(){if(!process.env.TMUX)return null;try{let{getCurrentSessionName:getCurrentSessionName2}=await Promise.resolve().then(() => (init_tmux(),exports_tmux));return await getCurrentSessionName2()}catch{return null}}async function registerAsTeamLead(teamName,opts){let sessionId=await discoverClaudeSessionId(opts?.cwd);if(!sessionId)throw Error("Could not discover Claude Code session ID. Are you running inside Claude Code with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1?");let resolvedLeaderName=opts?.leaderName??teamName,config=await ensureNativeTeam(teamName,`Genie team: ${teamName}`,sessionId,resolvedLeaderName);if(config.leadSessionId!==sessionId)config.leadSessionId=sessionId,await saveConfig(teamName,config);let sanitized=sanitizeTeamName(teamName),leadAgentId=`${sanitizeTeamName(resolvedLeaderName)}@${sanitized}`,existingLead=config.members.find((m)=>m.agentId===leadAgentId),resolvedPaneId=opts?.tmuxPaneId??process.env.TMUX_PANE;if(!existingLead||!existingLead.isActive)await registerNativeMember(teamName,{agentName:resolvedLeaderName,agentType:"general-purpose",color:opts?.color??"blue",tmuxPaneId:resolvedPaneId,cwd:opts?.cwd??process.cwd()});else if(resolvedPaneId&&existingLead.tmuxPaneId!==resolvedPaneId)existingLead.tmuxPaneId=resolvedPaneId,await saveConfig(teamName,config);let inbox=inboxPath(teamName,resolvedLeaderName);if(!existsSync9(inbox))await writeFile3(inbox,"[]");let finalConfig=await loadConfig(teamName);if(!finalConfig)throw Error(`Failed to load config for team "${teamName}" after creation`);return{sessionId,config:finalConfig}}var init_claude_native_teams=__esm(()=>{init_claude_settings();init_lockfile();init_provider_adapters()});import{existsSync as existsSync10,readFileSync as readFileSync5,statSync}from"fs";import{mkdir as mkdir4,readFile as readFile4,readdir as readdir3,rename,writeFile as writeFile4}from"fs/promises";import{homedir as homedir9}from"os";import{join as join13}from"path";function getGenieHome(){return process.env.GENIE_HOME??join13(homedir9(),".genie")}function workersJsonPath(){return join13(getGenieHome(),"workers.json")}function claudeTeamsDirPath(){return join13(process.env.CLAUDE_CONFIG_DIR??join13(homedir9(),".claude"),"teams")}function teamsSeedMarkerPath(){return join13(getGenieHome(),"state","teams-seed-marker")}function teamsDirMtime(claudeTeamsDir){try{return String(statSync(claudeTeamsDir).mtimeMs)}catch{return null}}function readFreshTeamsSeedMarker(claudeTeamsDir){let mtimeMs=teamsDirMtime(claudeTeamsDir);if(!mtimeMs)return null;try{let marker=JSON.parse(readFileSync5(teamsSeedMarkerPath(),"utf-8"));if(marker.teamsDir!==claudeTeamsDir||marker.mtimeMs!==mtimeMs||!Array.isArray(marker.teamNames))return null;return{teamsDir:marker.teamsDir,mtimeMs:marker.mtimeMs,teamNames:marker.teamNames.filter((name)=>typeof name==="string"&&name.length>0)}}catch{return null}}function hasFreshTeamsSeedMarker(claudeTeamsDir){return readFreshTeamsSeedMarker(claudeTeamsDir)!==null}async function writeTeamsSeedMarker(teamNames){let claudeTeamsDir=claudeTeamsDirPath(),mtimeMs=teamsDirMtime(claudeTeamsDir);if(!mtimeMs)return;let markerPath=teamsSeedMarkerPath(),marker={teamsDir:claudeTeamsDir,mtimeMs,teamNames:[...new Set(teamNames)].sort()};await mkdir4(join13(getGenieHome(),"state"),{recursive:!0}),await writeFile4(markerPath,`${JSON.stringify(marker)}
500
+ `,"utf-8")}function needsMigration(filePath){return existsSync10(filePath)&&!existsSync10(`${filePath}.migrated`)}async function readJson(filePath){try{let content=await readFile4(filePath,"utf-8");return JSON.parse(content)}catch{return null}}async function renameMatchingFiles(dir,filter){if(!existsSync10(dir))return;try{let files=await readdir3(dir);for(let f of files){if(!filter(f))continue;let fp=join13(dir,f);if(needsMigration(fp))await rename(fp,`${fp}.migrated`)}}catch{}}function needsSeed(){if(needsMigration(workersJsonPath()))return!0;let claudeTeamsDir=claudeTeamsDirPath();if(!existsSync10(claudeTeamsDir))return!1;if(hasFreshTeamsSeedMarker(claudeTeamsDir))return!1;try{return __require("fs").readdirSync(claudeTeamsDir).some((e)=>!e.startsWith("."))}catch{return!1}}async function needsSeededTeams(sql){let marker=readFreshTeamsSeedMarker(claudeTeamsDirPath());if(!marker||marker.teamNames.length===0)return!1;try{return(await sql`
603
501
  SELECT name FROM teams WHERE name = ANY(${marker.teamNames})
604
502
  `).length<marker.teamNames.length}catch{return!0}}function toAgentRow(a){let now=new Date().toISOString();return{id:a.id,pane_id:a.paneId??"",session:a.session??"",worktree:a.worktree??null,task_id:a.taskId??null,task_title:a.taskTitle??null,wish_slug:a.wishSlug??null,group_number:a.groupNumber??null,started_at:a.startedAt??now,state:a.state??"spawning",last_state_change:a.lastStateChange??now,repo_path:a.repoPath??"",window_name:a.windowName??null,window_id:a.windowId??null,role:a.role??null,custom_name:a.customName??null,sub_panes:a.subPanes??[],provider:a.provider??null,transport:a.transport??"tmux",skill:a.skill??null,team:a.team??null,tmux_window:a.window??null,native_agent_id:a.nativeAgentId??null,native_color:a.nativeColor??null,native_team_enabled:a.nativeTeamEnabled??!1,parent_session_id:a.parentSessionId??null,suspended_at:a.suspendedAt??null,auto_resume:a.autoResume??!1,resume_attempts:a.resumeAttempts??0,last_resume_attempt:a.lastResumeAttempt??null,max_resume_attempts:a.maxResumeAttempts??3,pane_color:null}}function isAgentIdLegal(id){return typeof id==="string"&&UUID_OR_DIR_RE.test(id)}async function upsertAgent(sql,a){if(!isAgentIdLegal(a.id)){if(process.env.DEBUG?.includes("pg-seed"))process.stderr.write(`[pg-seed] skipping legacy bare-name agent row "${a.id}" \u2014 fails migration 061 agents_id_shape_check (UUID or dir: prefix required)
605
503
  `);return}let r=toAgentRow(a);await sql`
@@ -675,7 +573,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
675
573
  ${msg.body??""}, ${repoPath}, ${msg.read??!1},
676
574
  ${msg.deliveredAt??null}, ${msg.createdAt??new Date().toISOString()}
677
575
  ) ON CONFLICT (id) DO NOTHING
678
- `}function isMailboxFile(filename){return filename.endsWith(".json")&&!filename.endsWith(".migrated")&&!filename.includes("-sent")}async function seedMailbox(sql,repoPath){let dir=join16(repoPath,".genie","mailbox");if(!existsSync12(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!isMailboxFile(file))continue;if(!needsMigration(join16(dir,file)))continue;let data=await readJson(join16(dir,file));if(!data?.messages||!Array.isArray(data.messages))continue;let fallbackTo=file.replace(".json","");for(let msg of data.messages){if(!msg.id)continue;await upsertMailboxMessage(sql,msg,repoPath,fallbackTo),count++}}return count}async function upsertChatMessage(sql,msg,teamName,repoPath){await sql`
576
+ `}function isMailboxFile(filename){return filename.endsWith(".json")&&!filename.endsWith(".migrated")&&!filename.includes("-sent")}async function seedMailbox(sql,repoPath){let dir=join13(repoPath,".genie","mailbox");if(!existsSync10(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!isMailboxFile(file))continue;if(!needsMigration(join13(dir,file)))continue;let data=await readJson(join13(dir,file));if(!data?.messages||!Array.isArray(data.messages))continue;let fallbackTo=file.replace(".json","");for(let msg of data.messages){if(!msg.id)continue;await upsertMailboxMessage(sql,msg,repoPath,fallbackTo),count++}}return count}async function upsertChatMessage(sql,msg,teamName,repoPath){await sql`
679
577
  INSERT INTO team_chat (
680
578
  id, team, repo_path, sender, body, created_at
681
579
  ) VALUES (
@@ -684,7 +582,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
684
582
  ${msg.timestamp??new Date().toISOString()}
685
583
  ) ON CONFLICT (id) DO NOTHING
686
584
  `}function parseJsonlRecords(content){let records=[];for(let line of content.trim().split(`
687
- `).filter(Boolean))try{let msg=JSON.parse(line);if(msg.id)records.push(msg)}catch{}return records}async function seedTeamChat(sql,repoPath){let dir=join16(repoPath,".genie","chat");if(!existsSync12(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!file.endsWith(".jsonl")||file.endsWith(".migrated"))continue;if(!needsMigration(join16(dir,file)))continue;let teamName=file.replace(".jsonl","").replace(/--/g,"/"),content;try{content=await readFile4(join16(dir,file),"utf-8")}catch{continue}for(let msg of parseJsonlRecords(content))await upsertChatMessage(sql,msg,teamName,repoPath),count++}return count}async function markMigrated(repoPath){let workersPath=workersJsonPath();if(needsMigration(workersPath))await rename(workersPath,`${workersPath}.migrated`);if(!repoPath)return;await renameMatchingFiles(join16(repoPath,".genie","mailbox"),isMailboxFile),await renameMatchingFiles(join16(repoPath,".genie","chat"),(f)=>f.endsWith(".jsonl")&&!f.endsWith(".migrated"))}async function runSeed(sql,repoPath){let result2={agents:0,templates:0,teams:0,mailboxMessages:0,chatMessages:0},workers=await seedWorkers(sql);result2.agents=workers.agents,result2.templates=workers.templates;let teams=await seedTeams(sql);if(result2.teams=teams.count,repoPath)result2.mailboxMessages=await seedMailbox(sql,repoPath),result2.chatMessages=await seedTeamChat(sql,repoPath);if(await markMigrated(repoPath),!teams.hadFailures)await writeTeamsSeedMarker(teams.teamNames);return result2}var UUID_OR_DIR_RE,MEMBER_UUID_RE;var init_pg_seed=__esm(()=>{init_audit();init_claude_native_teams();UUID_OR_DIR_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$|^dir:/i;MEMBER_UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/});import{execSync as execSync2}from"child_process";import{readFileSync as readFileSync8}from"fs";function getProcessStartTime(pid){if(!Number.isInteger(pid)||pid<=0)return null;try{if(process.platform==="darwin"){let raw=execSync2(`ps -o lstart= -p ${pid}`,{encoding:"utf8",timeout:1000,stdio:["ignore","pipe","ignore"]}).trim();return raw===""?null:raw}if(process.platform==="linux"){let raw=readFileSync8(`/proc/${pid}/stat`,"utf-8"),closeParen=raw.lastIndexOf(")");if(closeParen<0)return null;let starttime=raw.slice(closeParen+1).trim().split(/\s+/)[19];return starttime&&starttime.length>0?starttime:null}}catch{return null}return null}var init_process_identity=()=>{};function cachedError(xs){if(originCache.has(xs))return originCache.get(xs);let x=Error.stackTraceLimit;return Error.stackTraceLimit=4,originCache.set(xs,Error()),Error.stackTraceLimit=x,originCache.get(xs)}var originCache,originStackCache,originError,CLOSE,Query;var init_query=__esm(()=>{originCache=new Map,originStackCache=new Map,originError=Symbol("OriginError"),CLOSE={};Query=class Query extends Promise{constructor(strings,args,handler,canceller,options={}){let resolve3,reject;super((a,b)=>{resolve3=a,reject=b});this.tagged=Array.isArray(strings.raw),this.strings=strings,this.args=args,this.handler=handler,this.canceller=canceller,this.options=options,this.state=null,this.statement=null,this.resolve=(x)=>(this.active=!1,resolve3(x)),this.reject=(x)=>(this.active=!1,reject(x)),this.active=!1,this.cancelled=null,this.executed=!1,this.signature="",this[originError]=this.handler.debug?Error():this.tagged&&cachedError(this.strings)}get origin(){return(this.handler.debug?this[originError].stack:this.tagged&&originStackCache.has(this.strings)?originStackCache.get(this.strings):originStackCache.set(this.strings,this[originError].stack).get(this.strings))||""}static get[Symbol.species](){return Promise}cancel(){return this.canceller&&(this.canceller(this),this.canceller=null)}simple(){return this.options.simple=!0,this.options.prepare=!1,this}async readable(){return this.simple(),this.streaming=!0,this}async writable(){return this.simple(),this.streaming=!0,this}cursor(rows=1,fn){if(this.options.simple=!1,typeof rows==="function")fn=rows,rows=1;if(this.cursorRows=rows,typeof fn==="function")return this.cursorFn=fn,this;let prev;return{[Symbol.asyncIterator]:()=>({next:()=>{if(this.executed&&!this.active)return{done:!0};prev&&prev();let promise=new Promise((resolve3,reject)=>{this.cursorFn=(value)=>{return resolve3({value,done:!1}),new Promise((r)=>prev=r)},this.resolve=()=>(this.active=!1,resolve3({done:!0})),this.reject=(x)=>(this.active=!1,reject(x))});return this.execute(),promise},return(){return prev&&prev(CLOSE),{done:!0}}})}}describe(){return this.options.simple=!1,this.onlyDescribe=this.options.prepare=!0,this}stream(){throw Error(".stream has been renamed to .forEach")}forEach(fn){return this.forEachFn=fn,this.handle(),this}raw(){return this.isRaw=!0,this}values(){return this.isRaw="values",this}async handle(){!this.executed&&(this.executed=!0)&&await 1&&this.handler(this)}execute(){return this.handle(),this}then(){return this.handle(),super.then.apply(this,arguments)}catch(){return this.handle(),super.catch.apply(this,arguments)}finally(){return this.handle(),super.finally.apply(this,arguments)}}});function connection(x,options,socket){let{host,port}=socket||options,error=Object.assign(Error("write "+x+" "+(options.path||host+":"+port)),{code:x,errno:x,address:options.path||host},options.path?{}:{port});return Error.captureStackTrace(error,connection),error}function postgres(x){let error=new PostgresError(x);return Error.captureStackTrace(error,postgres),error}function generic(code,message){let error=Object.assign(Error(code+": "+message),{code});return Error.captureStackTrace(error,generic),error}function notSupported(x){let error=Object.assign(Error(x+" (B) is not supported"),{code:"MESSAGE_NOT_SUPPORTED",name:x});return Error.captureStackTrace(error,notSupported),error}var PostgresError,Errors;var init_errors2=__esm(()=>{PostgresError=class PostgresError extends Error{constructor(x){super(x.message);this.name=this.constructor.name,Object.assign(this,x)}};Errors={connection,postgres,generic,notSupported}});class NotTagged{then(){notTagged()}catch(){notTagged()}finally(){notTagged()}}function handleValue(x,parameters,types4,options){let value=x instanceof Parameter?x.value:x;if(value===void 0){if(x instanceof Parameter?x.value=options.transform.undefined:value=x=options.transform.undefined,value===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return"$"+types4.push(x instanceof Parameter?(parameters.push(x.value),x.array?x.array[x.type||inferType(x.value)]||x.type||firstIsString(x.value):x.type):(parameters.push(x),inferType(x)))}function stringify(q,string,value,parameters,types4,options){for(let i2=1;i2<q.strings.length;i2++)string+=stringifyValue(string,value,parameters,types4,options)+q.strings[i2],value=q.args[i2];return string}function stringifyValue(string,value,parameters,types4,o){return value instanceof Builder?value.build(string,parameters,types4,o):value instanceof Query?fragment(value,parameters,types4,o):value instanceof Identifier?value.value:value&&value[0]instanceof Query?value.reduce((acc,x)=>acc+" "+fragment(x,parameters,types4,o),""):handleValue(value,parameters,types4,o)}function fragment(q,parameters,types4,options){return q.fragment=!0,stringify(q,q.strings[0],q.args[0],parameters,types4,options)}function valuesBuilder(first,parameters,types4,columns,options){return first.map((row)=>"("+columns.map((column)=>stringifyValue("values",row[column],parameters,types4,options)).join(",")+")").join(",")}function values(first,rest,parameters,types4,options){let multi=Array.isArray(first[0]),columns=rest.length?rest.flat():Object.keys(multi?first[0]:first);return valuesBuilder(multi?first:[first],parameters,types4,columns,options)}function select(first,rest,parameters,types4,options){if(typeof first==="string"&&(first=[first].concat(rest)),Array.isArray(first))return escapeIdentifiers(first,options);let value;return(rest.length?rest.flat():Object.keys(first)).map((x)=>{return value=first[x],(value instanceof Query?fragment(value,parameters,types4,options):value instanceof Identifier?value.value:handleValue(value,parameters,types4,options))+" as "+escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)}).join(",")}function notTagged(){throw Errors.generic("NOT_TAGGED_CALL","Query not called as a tagged template literal")}function firstIsString(x){if(Array.isArray(x))return firstIsString(x[0]);return typeof x==="string"?1009:0}function typeHandlers(types4){return Object.keys(types4).reduce((acc,k)=>{if(types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.parsers[x]=types4[k].parse),types4[k].serialize)acc.serializers[types4[k].to]=types4[k].serialize,types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.serializers[x]=types4[k].serialize);return acc},{parsers:{},serializers:{}})}function escapeIdentifiers(xs,{transform:{column}}){return xs.map((x)=>escapeIdentifier(column.to?column.to(x):x)).join(",")}function arrayEscape(x){return x.replace(escapeBackslash,"\\\\").replace(escapeQuote,"\\\"")}function arrayParserLoop(s,x,parser,typarray){let xs=[],delimiter=typarray===1020?";":",";for(;s.i<x.length;s.i++){if(s.char=x[s.i],s.quoted)if(s.char==="\\")s.str+=x[++s.i];else if(s.char==='"')xs.push(parser?parser(s.str):s.str),s.str="",s.quoted=x[s.i+1]==='"',s.last=s.i+2;else s.str+=s.char;else if(s.char==='"')s.quoted=!0;else if(s.char==="{")s.last=++s.i,xs.push(arrayParserLoop(s,x,parser,typarray));else if(s.char==="}"){s.quoted=!1,s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;break}else if(s.char===delimiter&&s.p!=="}"&&s.p!=='"')xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;s.p=s.char}return s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i+1)):x.slice(s.last,s.i+1)),xs}function createJsonTransform(fn){return function jsonTransform(x,column){return typeof x==="object"&&x!==null&&(column.type===114||column.type===3802)?Array.isArray(x)?x.map((x2)=>jsonTransform(x2,column)):Object.entries(x).reduce((acc,[k,v])=>Object.assign(acc,{[fn(k)]:jsonTransform(v,column)}),{}):x}}var types3,Identifier,Parameter,Builder,defaultHandlers,builders,serializers,parsers,mergeUserTypes=function(types4){let user=typeHandlers(types4||{});return{serializers:Object.assign({},serializers,user.serializers),parsers:Object.assign({},parsers,user.parsers)}},escapeIdentifier=function(str2){return'"'+str2.replace(/"/g,'""').replace(/\./g,'"."')+'"'},inferType=function inferType2(x){return x instanceof Parameter?x.type:x instanceof Date?1184:x instanceof Uint8Array?17:x===!0||x===!1?16:typeof x==="bigint"?20:Array.isArray(x)?inferType2(x[0]):0},escapeBackslash,escapeQuote,arraySerializer=function arraySerializer2(xs,serializer,options,typarray){if(Array.isArray(xs)===!1)return xs;if(!xs.length)return"{}";let first=xs[0],delimiter=typarray===1020?";":",";if(Array.isArray(first)&&!first.type)return"{"+xs.map((x)=>arraySerializer2(x,serializer,options,typarray)).join(delimiter)+"}";return"{"+xs.map((x)=>{if(x===void 0){if(x=options.transform.undefined,x===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return x===null?"null":'"'+arrayEscape(serializer?serializer(x.type?x.value:x):""+x)+'"'}).join(delimiter)+"}"},arrayParserState,arrayParser=function(x,parser,typarray){return arrayParserState.i=arrayParserState.last=0,arrayParserLoop(arrayParserState,x,parser,typarray)},toCamel=(x)=>{let str2=x[0];for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toPascal=(x)=>{let str2=x[0].toUpperCase();for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toKebab=(x)=>x.replace(/_/g,"-"),fromCamel=(x)=>x.replace(/([A-Z])/g,"_$1").toLowerCase(),fromPascal=(x)=>(x.slice(0,1)+x.slice(1).replace(/([A-Z])/g,"_$1")).toLowerCase(),fromKebab=(x)=>x.replace(/-/g,"_"),camel,pascal,kebab;var init_types3=__esm(()=>{init_query();init_errors2();types3={string:{to:25,from:null,serialize:(x)=>""+x},number:{to:0,from:[21,23,26,700,701],serialize:(x)=>""+x,parse:(x)=>+x},json:{to:114,from:[114,3802],serialize:(x)=>JSON.stringify(x),parse:(x)=>JSON.parse(x)},boolean:{to:16,from:16,serialize:(x)=>x===!0?"t":"f",parse:(x)=>x==="t"},date:{to:1184,from:[1082,1114,1184],serialize:(x)=>(x instanceof Date?x:new Date(x)).toISOString(),parse:(x)=>new Date(x)},bytea:{to:17,from:17,serialize:(x)=>"\\x"+Buffer.from(x).toString("hex"),parse:(x)=>Buffer.from(x.slice(2),"hex")}};Identifier=class Identifier extends NotTagged{constructor(value){super();this.value=escapeIdentifier(value)}};Parameter=class Parameter extends NotTagged{constructor(value,type2,array){super();this.value=value,this.type=type2,this.array=array}};Builder=class Builder extends NotTagged{constructor(first,rest){super();this.first=first,this.rest=rest}build(before,parameters,types4,options){let keyword=builders.map(([x,fn])=>({fn,i:before.search(x)})).sort((a,b)=>a.i-b.i).pop();return keyword.i===-1?escapeIdentifiers(this.first,options):keyword.fn(this.first,this.rest,parameters,types4,options)}};defaultHandlers=typeHandlers(types3);builders=Object.entries({values,in:(...xs)=>{let x=values(...xs);return x==="()"?"(null)":x},select,as:select,returning:select,"\\(":select,update(first,rest,parameters,types4,options){return(rest.length?rest.flat():Object.keys(first)).map((x)=>escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)+"="+stringifyValue("values",first[x],parameters,types4,options))},insert(first,rest,parameters,types4,options){let columns=rest.length?rest.flat():Object.keys(Array.isArray(first)?first[0]:first);return"("+escapeIdentifiers(columns,options)+")values"+valuesBuilder(Array.isArray(first)?first:[first],parameters,types4,columns,options)}}).map(([x,fn])=>[new RegExp("((?:^|[\\s(])"+x+"(?:$|[\\s(]))(?![\\s\\S]*\\1)","i"),fn]);serializers=defaultHandlers.serializers,parsers=defaultHandlers.parsers;escapeBackslash=/\\/g,escapeQuote=/"/g;arrayParserState={i:0,char:null,str:"",quoted:!1,last:0};toCamel.column={from:toCamel};toCamel.value={from:createJsonTransform(toCamel)};fromCamel.column={to:fromCamel};camel={...toCamel};camel.column.to=fromCamel;toPascal.column={from:toPascal};toPascal.value={from:createJsonTransform(toPascal)};fromPascal.column={to:fromPascal};pascal={...toPascal};pascal.column.to=fromPascal;toKebab.column={from:toKebab};toKebab.value={from:createJsonTransform(toKebab)};fromKebab.column={to:fromKebab};kebab={...toKebab};kebab.column.to=fromKebab});var Result;var init_result=__esm(()=>{Result=class Result extends Array{constructor(){super();Object.defineProperties(this,{count:{value:null,writable:!0},state:{value:null,writable:!0},command:{value:null,writable:!0},columns:{value:null,writable:!0},statement:{value:null,writable:!0}})}static get[Symbol.species](){return Array}}});function Queue(initial=[]){let xs=initial.slice(),index=0;return{get length(){return xs.length-index},remove:(x)=>{let index2=xs.indexOf(x);return index2===-1?null:(xs.splice(index2,1),x)},push:(x)=>(xs.push(x),x),shift:()=>{let out=xs[index++];if(index===xs.length)index=0,xs=[];else xs[index-1]=void 0;return out}}}var queue_default;var init_queue=__esm(()=>{queue_default=Queue});function fit(x){if(buffer.length-b.i<x){let prev=buffer,length=prev.length;buffer=Buffer.allocUnsafe(length+(length>>1)+x),prev.copy(buffer)}}function reset(){return b.i=0,b}var buffer,messages,b,bytes_default;var init_bytes=__esm(()=>{buffer=Buffer.allocUnsafe(256),messages="BCcDdEFfHPpQSX".split("").reduce((acc,x)=>{let v=x.charCodeAt(0);return acc[x]=()=>{return buffer[0]=v,b.i=5,b},acc},{}),b=Object.assign(reset,messages,{N:String.fromCharCode(0),i:0,inc(x){return b.i+=x,b},str(x){let length=Buffer.byteLength(x);return fit(length),b.i+=buffer.write(x,b.i,length,"utf8"),b},i16(x){return fit(2),buffer.writeUInt16BE(x,b.i),b.i+=2,b},i32(x,i2){if(i2||i2===0)return buffer.writeUInt32BE(x,i2),b;return fit(4),buffer.writeUInt32BE(x,b.i),b.i+=4,b},z(x){return fit(x),buffer.fill(0,b.i,b.i+x),b.i+=x,b},raw(x){return buffer=Buffer.concat([buffer.subarray(0,b.i),x]),b.i=buffer.length,b},end(at=1){buffer.writeUInt32BE(b.i-at,at);let out=buffer.subarray(0,b.i);return b.i=0,buffer=Buffer.allocUnsafe(256),out}}),bytes_default=b});import net from"net";import tls from"tls";import crypto2 from"crypto";import Stream from"stream";import{performance as performance2}from"perf_hooks";function Connection(options,queues={},{onopen=noop,onend=noop,onclose=noop}={}){let{sslnegotiation,ssl,max,user,host,port,database,parsers:parsers2,transform,onnotice,onnotify,onparameter,max_pipeline,keep_alive,backoff,target_session_attrs}=options,sent=queue_default(),id=uid++,backend={pid:null,secret:null},idleTimer=timer(end,options.idle_timeout),lifeTimer=timer(end,options.max_lifetime),connectTimer=timer(connectTimedOut,options.connect_timeout),socket=null,cancelMessage,errorResponse=null,result2=new Result,incoming=Buffer.alloc(0),needsTypes=options.fetch_types,backendParameters={},statements={},statementId=Math.random().toString(36).slice(2),statementCount=1,closedTime=0,remaining=0,hostIndex=0,retries=0,length=0,delay=0,rows=0,serverSignature=null,nextWriteTimer=null,terminated=!1,incomings=null,results=null,initial=null,ending=null,stream=null,chunk=null,ended=null,nonce=null,query=null,final=null,connection2={queue:queues.closed,idleTimer,connect(query2){initial=query2,reconnect()},terminate,execute,cancel,end,count:0,id};return queues.closed&&queues.closed.push(connection2),connection2;async function createSocket(){let x;try{x=options.socket?await Promise.resolve(options.socket(options)):new net.Socket}catch(e){error(e);return}return x.on("error",error),x.on("close",closed),x.on("drain",drain),x}async function cancel({pid,secret},resolve3,reject){try{cancelMessage=bytes_default().i32(16).i32(80877102).i32(pid).i32(secret).end(16),await connect(),socket.once("error",reject),socket.once("close",resolve3)}catch(error2){reject(error2)}}function execute(q){if(terminated)return queryError(q,Errors.connection("CONNECTION_DESTROYED",options));if(stream)return queryError(q,Errors.generic("COPY_IN_PROGRESS","You cannot execute queries during copy"));if(q.cancelled)return;try{return q.state=backend,query?sent.push(q):(query=q,query.active=!0),build(q),write(toBuffer(q))&&!q.describeFirst&&!q.cursorFn&&sent.length<max_pipeline&&(!q.options.onexecute||q.options.onexecute(connection2))}catch(error2){return sent.length===0&&write(Sync),errored(error2),!0}}function toBuffer(q){if(q.parameters.length>=65534)throw Errors.generic("MAX_PARAMETERS_EXCEEDED","Max number of parameters (65534) exceeded");return q.options.simple?bytes_default().Q().str(q.statement.string+bytes_default.N).end():q.describeFirst?Buffer.concat([describe(q),Flush]):q.prepare?q.prepared?prepared(q):Buffer.concat([describe(q),prepared(q)]):unnamed(q)}function describe(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types,q.statement.name),Describe("S",q.statement.name)])}function prepared(q){return Buffer.concat([Bind(q.parameters,q.statement.types,q.statement.name,q.cursorName),q.cursorFn?Execute("",q.cursorRows):ExecuteUnnamed])}function unnamed(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types),DescribeUnnamed,prepared(q)])}function build(q){let parameters=[],types4=[],string=stringify(q,q.strings[0],q.args[0],parameters,types4,options);!q.tagged&&q.args.forEach((x)=>handleValue(x,parameters,types4,options)),q.prepare=options.prepare&&("prepare"in q.options?q.options.prepare:!0),q.string=string,q.signature=q.prepare&&types4+string,q.onlyDescribe&&delete statements[q.signature],q.parameters=q.parameters||parameters,q.prepared=q.prepare&&q.signature in statements,q.describeFirst=q.onlyDescribe||parameters.length&&!q.prepared,q.statement=q.prepared?statements[q.signature]:{string,types:types4,name:q.prepare?statementId+statementCount++:""},typeof options.debug==="function"&&options.debug(id,string,parameters,types4)}function write(x,fn){if(chunk=chunk?Buffer.concat([chunk,x]):Buffer.from(x),fn||chunk.length>=1024)return nextWrite(fn);return nextWriteTimer===null&&(nextWriteTimer=setImmediate(nextWrite)),!0}function nextWrite(fn){let x=socket.write(chunk,fn);return nextWriteTimer!==null&&clearImmediate(nextWriteTimer),chunk=nextWriteTimer=null,x}function connectTimedOut(){errored(Errors.connection("CONNECT_TIMEOUT",options,socket)),socket.destroy()}async function secure(){if(sslnegotiation!=="direct"){if(write(SSLRequest),!await new Promise((r)=>socket.once("data",(x)=>r(x[0]===83)))&&ssl==="prefer")return connected()}let options2={socket,servername:net.isIP(socket.host)?void 0:socket.host};if(sslnegotiation==="direct")options2.ALPNProtocols=["postgresql"];if(ssl==="require"||ssl==="allow"||ssl==="prefer")options2.rejectUnauthorized=!1;else if(typeof ssl==="object")Object.assign(options2,ssl);socket.removeAllListeners(),socket=tls.connect(options2),socket.on("secureConnect",connected),socket.on("error",error),socket.on("close",closed),socket.on("drain",drain)}function drain(){!query&&onopen(connection2)}function data(x){if(incomings){if(incomings.push(x),remaining-=x.length,remaining>0)return}incoming=incomings?Buffer.concat(incomings,length-remaining):incoming.length===0?x:Buffer.concat([incoming,x],incoming.length+x.length);while(incoming.length>4){if(length=incoming.readUInt32BE(1),length>=incoming.length){remaining=length-incoming.length,incomings=[incoming];break}try{handle(incoming.subarray(0,length+1))}catch(e){query&&(query.cursorFn||query.describeFirst)&&write(Sync),errored(e)}incoming=incoming.subarray(length+1),remaining=0,incomings=null}}async function connect(){if(terminated=!1,backendParameters={},socket||(socket=await createSocket()),!socket)return;if(connectTimer.start(),options.socket)return ssl?secure():connected();if(socket.on("connect",ssl?secure:connected),options.path)return socket.connect(options.path);socket.ssl=ssl,socket.connect(port[hostIndex],host[hostIndex]),socket.host=host[hostIndex],socket.port=port[hostIndex],hostIndex=(hostIndex+1)%port.length}function reconnect(){setTimeout(connect,closedTime?Math.max(0,closedTime+delay-performance2.now()):0)}function connected(){try{statements={},needsTypes=options.fetch_types,statementId=Math.random().toString(36).slice(2),statementCount=1,lifeTimer.start(),socket.on("data",data),keep_alive&&socket.setKeepAlive&&socket.setKeepAlive(!0,1000*keep_alive);let s=StartupMessage();write(s)}catch(err){error(err)}}function error(err){if(connection2.queue===queues.connecting&&options.host[retries+1])return;errored(err);while(sent.length)queryError(sent.shift(),err)}function errored(err){stream&&(stream.destroy(err),stream=null),query&&queryError(query,err),initial&&(queryError(initial,err),initial=null)}function queryError(query2,err){if(query2.reserve)return query2.reject(err);if(!err||typeof err!=="object")err=Error(err);"query"in err||"parameters"in err||Object.defineProperties(err,{stack:{value:err.stack+query2.origin.replace(/.*\n/,`
585
+ `).filter(Boolean))try{let msg=JSON.parse(line);if(msg.id)records.push(msg)}catch{}return records}async function seedTeamChat(sql,repoPath){let dir=join13(repoPath,".genie","chat");if(!existsSync10(dir))return 0;let files;try{files=await readdir3(dir)}catch{return 0}let count=0;for(let file of files){if(!file.endsWith(".jsonl")||file.endsWith(".migrated"))continue;if(!needsMigration(join13(dir,file)))continue;let teamName=file.replace(".jsonl","").replace(/--/g,"/"),content;try{content=await readFile4(join13(dir,file),"utf-8")}catch{continue}for(let msg of parseJsonlRecords(content))await upsertChatMessage(sql,msg,teamName,repoPath),count++}return count}async function markMigrated(repoPath){let workersPath=workersJsonPath();if(needsMigration(workersPath))await rename(workersPath,`${workersPath}.migrated`);if(!repoPath)return;await renameMatchingFiles(join13(repoPath,".genie","mailbox"),isMailboxFile),await renameMatchingFiles(join13(repoPath,".genie","chat"),(f)=>f.endsWith(".jsonl")&&!f.endsWith(".migrated"))}async function runSeed(sql,repoPath){let result2={agents:0,templates:0,teams:0,mailboxMessages:0,chatMessages:0},workers=await seedWorkers(sql);result2.agents=workers.agents,result2.templates=workers.templates;let teams=await seedTeams(sql);if(result2.teams=teams.count,repoPath)result2.mailboxMessages=await seedMailbox(sql,repoPath),result2.chatMessages=await seedTeamChat(sql,repoPath);if(await markMigrated(repoPath),!teams.hadFailures)await writeTeamsSeedMarker(teams.teamNames);return result2}var UUID_OR_DIR_RE,MEMBER_UUID_RE;var init_pg_seed=__esm(()=>{init_audit();init_claude_native_teams();UUID_OR_DIR_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$|^dir:/i;MEMBER_UUID_RE=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/});import{execSync as execSync2}from"child_process";import{readFileSync as readFileSync6}from"fs";function getProcessStartTime(pid){if(!Number.isInteger(pid)||pid<=0)return null;try{if(process.platform==="darwin"){let raw=execSync2(`ps -o lstart= -p ${pid}`,{encoding:"utf8",timeout:1000,stdio:["ignore","pipe","ignore"]}).trim();return raw===""?null:raw}if(process.platform==="linux"){let raw=readFileSync6(`/proc/${pid}/stat`,"utf-8"),closeParen=raw.lastIndexOf(")");if(closeParen<0)return null;let starttime=raw.slice(closeParen+1).trim().split(/\s+/)[19];return starttime&&starttime.length>0?starttime:null}}catch{return null}return null}var init_process_identity=()=>{};function cachedError(xs){if(originCache.has(xs))return originCache.get(xs);let x=Error.stackTraceLimit;return Error.stackTraceLimit=4,originCache.set(xs,Error()),Error.stackTraceLimit=x,originCache.get(xs)}var originCache,originStackCache,originError,CLOSE,Query;var init_query=__esm(()=>{originCache=new Map,originStackCache=new Map,originError=Symbol("OriginError"),CLOSE={};Query=class Query extends Promise{constructor(strings,args,handler,canceller,options={}){let resolve2,reject;super((a,b)=>{resolve2=a,reject=b});this.tagged=Array.isArray(strings.raw),this.strings=strings,this.args=args,this.handler=handler,this.canceller=canceller,this.options=options,this.state=null,this.statement=null,this.resolve=(x)=>(this.active=!1,resolve2(x)),this.reject=(x)=>(this.active=!1,reject(x)),this.active=!1,this.cancelled=null,this.executed=!1,this.signature="",this[originError]=this.handler.debug?Error():this.tagged&&cachedError(this.strings)}get origin(){return(this.handler.debug?this[originError].stack:this.tagged&&originStackCache.has(this.strings)?originStackCache.get(this.strings):originStackCache.set(this.strings,this[originError].stack).get(this.strings))||""}static get[Symbol.species](){return Promise}cancel(){return this.canceller&&(this.canceller(this),this.canceller=null)}simple(){return this.options.simple=!0,this.options.prepare=!1,this}async readable(){return this.simple(),this.streaming=!0,this}async writable(){return this.simple(),this.streaming=!0,this}cursor(rows=1,fn){if(this.options.simple=!1,typeof rows==="function")fn=rows,rows=1;if(this.cursorRows=rows,typeof fn==="function")return this.cursorFn=fn,this;let prev;return{[Symbol.asyncIterator]:()=>({next:()=>{if(this.executed&&!this.active)return{done:!0};prev&&prev();let promise=new Promise((resolve2,reject)=>{this.cursorFn=(value)=>{return resolve2({value,done:!1}),new Promise((r)=>prev=r)},this.resolve=()=>(this.active=!1,resolve2({done:!0})),this.reject=(x)=>(this.active=!1,reject(x))});return this.execute(),promise},return(){return prev&&prev(CLOSE),{done:!0}}})}}describe(){return this.options.simple=!1,this.onlyDescribe=this.options.prepare=!0,this}stream(){throw Error(".stream has been renamed to .forEach")}forEach(fn){return this.forEachFn=fn,this.handle(),this}raw(){return this.isRaw=!0,this}values(){return this.isRaw="values",this}async handle(){!this.executed&&(this.executed=!0)&&await 1&&this.handler(this)}execute(){return this.handle(),this}then(){return this.handle(),super.then.apply(this,arguments)}catch(){return this.handle(),super.catch.apply(this,arguments)}finally(){return this.handle(),super.finally.apply(this,arguments)}}});function connection(x,options,socket){let{host,port}=socket||options,error=Object.assign(Error("write "+x+" "+(options.path||host+":"+port)),{code:x,errno:x,address:options.path||host},options.path?{}:{port});return Error.captureStackTrace(error,connection),error}function postgres(x){let error=new PostgresError(x);return Error.captureStackTrace(error,postgres),error}function generic(code,message){let error=Object.assign(Error(code+": "+message),{code});return Error.captureStackTrace(error,generic),error}function notSupported(x){let error=Object.assign(Error(x+" (B) is not supported"),{code:"MESSAGE_NOT_SUPPORTED",name:x});return Error.captureStackTrace(error,notSupported),error}var PostgresError,Errors;var init_errors2=__esm(()=>{PostgresError=class PostgresError extends Error{constructor(x){super(x.message);this.name=this.constructor.name,Object.assign(this,x)}};Errors={connection,postgres,generic,notSupported}});class NotTagged{then(){notTagged()}catch(){notTagged()}finally(){notTagged()}}function handleValue(x,parameters,types4,options){let value=x instanceof Parameter?x.value:x;if(value===void 0){if(x instanceof Parameter?x.value=options.transform.undefined:value=x=options.transform.undefined,value===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return"$"+types4.push(x instanceof Parameter?(parameters.push(x.value),x.array?x.array[x.type||inferType(x.value)]||x.type||firstIsString(x.value):x.type):(parameters.push(x),inferType(x)))}function stringify(q,string,value,parameters,types4,options){for(let i2=1;i2<q.strings.length;i2++)string+=stringifyValue(string,value,parameters,types4,options)+q.strings[i2],value=q.args[i2];return string}function stringifyValue(string,value,parameters,types4,o){return value instanceof Builder?value.build(string,parameters,types4,o):value instanceof Query?fragment(value,parameters,types4,o):value instanceof Identifier?value.value:value&&value[0]instanceof Query?value.reduce((acc,x)=>acc+" "+fragment(x,parameters,types4,o),""):handleValue(value,parameters,types4,o)}function fragment(q,parameters,types4,options){return q.fragment=!0,stringify(q,q.strings[0],q.args[0],parameters,types4,options)}function valuesBuilder(first,parameters,types4,columns,options){return first.map((row)=>"("+columns.map((column)=>stringifyValue("values",row[column],parameters,types4,options)).join(",")+")").join(",")}function values(first,rest,parameters,types4,options){let multi=Array.isArray(first[0]),columns=rest.length?rest.flat():Object.keys(multi?first[0]:first);return valuesBuilder(multi?first:[first],parameters,types4,columns,options)}function select(first,rest,parameters,types4,options){if(typeof first==="string"&&(first=[first].concat(rest)),Array.isArray(first))return escapeIdentifiers(first,options);let value;return(rest.length?rest.flat():Object.keys(first)).map((x)=>{return value=first[x],(value instanceof Query?fragment(value,parameters,types4,options):value instanceof Identifier?value.value:handleValue(value,parameters,types4,options))+" as "+escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)}).join(",")}function notTagged(){throw Errors.generic("NOT_TAGGED_CALL","Query not called as a tagged template literal")}function firstIsString(x){if(Array.isArray(x))return firstIsString(x[0]);return typeof x==="string"?1009:0}function typeHandlers(types4){return Object.keys(types4).reduce((acc,k)=>{if(types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.parsers[x]=types4[k].parse),types4[k].serialize)acc.serializers[types4[k].to]=types4[k].serialize,types4[k].from&&[].concat(types4[k].from).forEach((x)=>acc.serializers[x]=types4[k].serialize);return acc},{parsers:{},serializers:{}})}function escapeIdentifiers(xs,{transform:{column}}){return xs.map((x)=>escapeIdentifier(column.to?column.to(x):x)).join(",")}function arrayEscape(x){return x.replace(escapeBackslash,"\\\\").replace(escapeQuote,"\\\"")}function arrayParserLoop(s,x,parser,typarray){let xs=[],delimiter=typarray===1020?";":",";for(;s.i<x.length;s.i++){if(s.char=x[s.i],s.quoted)if(s.char==="\\")s.str+=x[++s.i];else if(s.char==='"')xs.push(parser?parser(s.str):s.str),s.str="",s.quoted=x[s.i+1]==='"',s.last=s.i+2;else s.str+=s.char;else if(s.char==='"')s.quoted=!0;else if(s.char==="{")s.last=++s.i,xs.push(arrayParserLoop(s,x,parser,typarray));else if(s.char==="}"){s.quoted=!1,s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;break}else if(s.char===delimiter&&s.p!=="}"&&s.p!=='"')xs.push(parser?parser(x.slice(s.last,s.i)):x.slice(s.last,s.i)),s.last=s.i+1;s.p=s.char}return s.last<s.i&&xs.push(parser?parser(x.slice(s.last,s.i+1)):x.slice(s.last,s.i+1)),xs}function createJsonTransform(fn){return function jsonTransform(x,column){return typeof x==="object"&&x!==null&&(column.type===114||column.type===3802)?Array.isArray(x)?x.map((x2)=>jsonTransform(x2,column)):Object.entries(x).reduce((acc,[k,v])=>Object.assign(acc,{[fn(k)]:jsonTransform(v,column)}),{}):x}}var types3,Identifier,Parameter,Builder,defaultHandlers,builders,serializers,parsers,mergeUserTypes=function(types4){let user=typeHandlers(types4||{});return{serializers:Object.assign({},serializers,user.serializers),parsers:Object.assign({},parsers,user.parsers)}},escapeIdentifier=function(str2){return'"'+str2.replace(/"/g,'""').replace(/\./g,'"."')+'"'},inferType=function inferType2(x){return x instanceof Parameter?x.type:x instanceof Date?1184:x instanceof Uint8Array?17:x===!0||x===!1?16:typeof x==="bigint"?20:Array.isArray(x)?inferType2(x[0]):0},escapeBackslash,escapeQuote,arraySerializer=function arraySerializer2(xs,serializer,options,typarray){if(Array.isArray(xs)===!1)return xs;if(!xs.length)return"{}";let first=xs[0],delimiter=typarray===1020?";":",";if(Array.isArray(first)&&!first.type)return"{"+xs.map((x)=>arraySerializer2(x,serializer,options,typarray)).join(delimiter)+"}";return"{"+xs.map((x)=>{if(x===void 0){if(x=options.transform.undefined,x===void 0)throw Errors.generic("UNDEFINED_VALUE","Undefined values are not allowed")}return x===null?"null":'"'+arrayEscape(serializer?serializer(x.type?x.value:x):""+x)+'"'}).join(delimiter)+"}"},arrayParserState,arrayParser=function(x,parser,typarray){return arrayParserState.i=arrayParserState.last=0,arrayParserLoop(arrayParserState,x,parser,typarray)},toCamel=(x)=>{let str2=x[0];for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toPascal=(x)=>{let str2=x[0].toUpperCase();for(let i2=1;i2<x.length;i2++)str2+=x[i2]==="_"?x[++i2].toUpperCase():x[i2];return str2},toKebab=(x)=>x.replace(/_/g,"-"),fromCamel=(x)=>x.replace(/([A-Z])/g,"_$1").toLowerCase(),fromPascal=(x)=>(x.slice(0,1)+x.slice(1).replace(/([A-Z])/g,"_$1")).toLowerCase(),fromKebab=(x)=>x.replace(/-/g,"_"),camel,pascal,kebab;var init_types3=__esm(()=>{init_query();init_errors2();types3={string:{to:25,from:null,serialize:(x)=>""+x},number:{to:0,from:[21,23,26,700,701],serialize:(x)=>""+x,parse:(x)=>+x},json:{to:114,from:[114,3802],serialize:(x)=>JSON.stringify(x),parse:(x)=>JSON.parse(x)},boolean:{to:16,from:16,serialize:(x)=>x===!0?"t":"f",parse:(x)=>x==="t"},date:{to:1184,from:[1082,1114,1184],serialize:(x)=>(x instanceof Date?x:new Date(x)).toISOString(),parse:(x)=>new Date(x)},bytea:{to:17,from:17,serialize:(x)=>"\\x"+Buffer.from(x).toString("hex"),parse:(x)=>Buffer.from(x.slice(2),"hex")}};Identifier=class Identifier extends NotTagged{constructor(value){super();this.value=escapeIdentifier(value)}};Parameter=class Parameter extends NotTagged{constructor(value,type2,array){super();this.value=value,this.type=type2,this.array=array}};Builder=class Builder extends NotTagged{constructor(first,rest){super();this.first=first,this.rest=rest}build(before,parameters,types4,options){let keyword=builders.map(([x,fn])=>({fn,i:before.search(x)})).sort((a,b)=>a.i-b.i).pop();return keyword.i===-1?escapeIdentifiers(this.first,options):keyword.fn(this.first,this.rest,parameters,types4,options)}};defaultHandlers=typeHandlers(types3);builders=Object.entries({values,in:(...xs)=>{let x=values(...xs);return x==="()"?"(null)":x},select,as:select,returning:select,"\\(":select,update(first,rest,parameters,types4,options){return(rest.length?rest.flat():Object.keys(first)).map((x)=>escapeIdentifier(options.transform.column.to?options.transform.column.to(x):x)+"="+stringifyValue("values",first[x],parameters,types4,options))},insert(first,rest,parameters,types4,options){let columns=rest.length?rest.flat():Object.keys(Array.isArray(first)?first[0]:first);return"("+escapeIdentifiers(columns,options)+")values"+valuesBuilder(Array.isArray(first)?first:[first],parameters,types4,columns,options)}}).map(([x,fn])=>[new RegExp("((?:^|[\\s(])"+x+"(?:$|[\\s(]))(?![\\s\\S]*\\1)","i"),fn]);serializers=defaultHandlers.serializers,parsers=defaultHandlers.parsers;escapeBackslash=/\\/g,escapeQuote=/"/g;arrayParserState={i:0,char:null,str:"",quoted:!1,last:0};toCamel.column={from:toCamel};toCamel.value={from:createJsonTransform(toCamel)};fromCamel.column={to:fromCamel};camel={...toCamel};camel.column.to=fromCamel;toPascal.column={from:toPascal};toPascal.value={from:createJsonTransform(toPascal)};fromPascal.column={to:fromPascal};pascal={...toPascal};pascal.column.to=fromPascal;toKebab.column={from:toKebab};toKebab.value={from:createJsonTransform(toKebab)};fromKebab.column={to:fromKebab};kebab={...toKebab};kebab.column.to=fromKebab});var Result;var init_result=__esm(()=>{Result=class Result extends Array{constructor(){super();Object.defineProperties(this,{count:{value:null,writable:!0},state:{value:null,writable:!0},command:{value:null,writable:!0},columns:{value:null,writable:!0},statement:{value:null,writable:!0}})}static get[Symbol.species](){return Array}}});function Queue(initial=[]){let xs=initial.slice(),index=0;return{get length(){return xs.length-index},remove:(x)=>{let index2=xs.indexOf(x);return index2===-1?null:(xs.splice(index2,1),x)},push:(x)=>(xs.push(x),x),shift:()=>{let out=xs[index++];if(index===xs.length)index=0,xs=[];else xs[index-1]=void 0;return out}}}var queue_default;var init_queue=__esm(()=>{queue_default=Queue});function fit(x){if(buffer.length-b.i<x){let prev=buffer,length=prev.length;buffer=Buffer.allocUnsafe(length+(length>>1)+x),prev.copy(buffer)}}function reset(){return b.i=0,b}var buffer,messages,b,bytes_default;var init_bytes=__esm(()=>{buffer=Buffer.allocUnsafe(256),messages="BCcDdEFfHPpQSX".split("").reduce((acc,x)=>{let v=x.charCodeAt(0);return acc[x]=()=>{return buffer[0]=v,b.i=5,b},acc},{}),b=Object.assign(reset,messages,{N:String.fromCharCode(0),i:0,inc(x){return b.i+=x,b},str(x){let length=Buffer.byteLength(x);return fit(length),b.i+=buffer.write(x,b.i,length,"utf8"),b},i16(x){return fit(2),buffer.writeUInt16BE(x,b.i),b.i+=2,b},i32(x,i2){if(i2||i2===0)return buffer.writeUInt32BE(x,i2),b;return fit(4),buffer.writeUInt32BE(x,b.i),b.i+=4,b},z(x){return fit(x),buffer.fill(0,b.i,b.i+x),b.i+=x,b},raw(x){return buffer=Buffer.concat([buffer.subarray(0,b.i),x]),b.i=buffer.length,b},end(at=1){buffer.writeUInt32BE(b.i-at,at);let out=buffer.subarray(0,b.i);return b.i=0,buffer=Buffer.allocUnsafe(256),out}}),bytes_default=b});import net from"net";import tls from"tls";import crypto2 from"crypto";import Stream from"stream";import{performance as performance2}from"perf_hooks";function Connection(options,queues={},{onopen=noop,onend=noop,onclose=noop}={}){let{sslnegotiation,ssl,max,user,host,port,database,parsers:parsers2,transform,onnotice,onnotify,onparameter,max_pipeline,keep_alive,backoff,target_session_attrs}=options,sent=queue_default(),id=uid++,backend={pid:null,secret:null},idleTimer=timer(end,options.idle_timeout),lifeTimer=timer(end,options.max_lifetime),connectTimer=timer(connectTimedOut,options.connect_timeout),socket=null,cancelMessage,errorResponse=null,result2=new Result,incoming=Buffer.alloc(0),needsTypes=options.fetch_types,backendParameters={},statements={},statementId=Math.random().toString(36).slice(2),statementCount=1,closedTime=0,remaining=0,hostIndex=0,retries=0,length=0,delay=0,rows=0,serverSignature=null,nextWriteTimer=null,terminated=!1,incomings=null,results=null,initial=null,ending=null,stream=null,chunk=null,ended=null,nonce=null,query=null,final=null,connection2={queue:queues.closed,idleTimer,connect(query2){initial=query2,reconnect()},terminate,execute,cancel,end,count:0,id};return queues.closed&&queues.closed.push(connection2),connection2;async function createSocket(){let x;try{x=options.socket?await Promise.resolve(options.socket(options)):new net.Socket}catch(e){error(e);return}return x.on("error",error),x.on("close",closed),x.on("drain",drain),x}async function cancel({pid,secret},resolve2,reject){try{cancelMessage=bytes_default().i32(16).i32(80877102).i32(pid).i32(secret).end(16),await connect(),socket.once("error",reject),socket.once("close",resolve2)}catch(error2){reject(error2)}}function execute(q){if(terminated)return queryError(q,Errors.connection("CONNECTION_DESTROYED",options));if(stream)return queryError(q,Errors.generic("COPY_IN_PROGRESS","You cannot execute queries during copy"));if(q.cancelled)return;try{return q.state=backend,query?sent.push(q):(query=q,query.active=!0),build(q),write(toBuffer(q))&&!q.describeFirst&&!q.cursorFn&&sent.length<max_pipeline&&(!q.options.onexecute||q.options.onexecute(connection2))}catch(error2){return sent.length===0&&write(Sync),errored(error2),!0}}function toBuffer(q){if(q.parameters.length>=65534)throw Errors.generic("MAX_PARAMETERS_EXCEEDED","Max number of parameters (65534) exceeded");return q.options.simple?bytes_default().Q().str(q.statement.string+bytes_default.N).end():q.describeFirst?Buffer.concat([describe(q),Flush]):q.prepare?q.prepared?prepared(q):Buffer.concat([describe(q),prepared(q)]):unnamed(q)}function describe(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types,q.statement.name),Describe("S",q.statement.name)])}function prepared(q){return Buffer.concat([Bind(q.parameters,q.statement.types,q.statement.name,q.cursorName),q.cursorFn?Execute("",q.cursorRows):ExecuteUnnamed])}function unnamed(q){return Buffer.concat([Parse(q.statement.string,q.parameters,q.statement.types),DescribeUnnamed,prepared(q)])}function build(q){let parameters=[],types4=[],string=stringify(q,q.strings[0],q.args[0],parameters,types4,options);!q.tagged&&q.args.forEach((x)=>handleValue(x,parameters,types4,options)),q.prepare=options.prepare&&("prepare"in q.options?q.options.prepare:!0),q.string=string,q.signature=q.prepare&&types4+string,q.onlyDescribe&&delete statements[q.signature],q.parameters=q.parameters||parameters,q.prepared=q.prepare&&q.signature in statements,q.describeFirst=q.onlyDescribe||parameters.length&&!q.prepared,q.statement=q.prepared?statements[q.signature]:{string,types:types4,name:q.prepare?statementId+statementCount++:""},typeof options.debug==="function"&&options.debug(id,string,parameters,types4)}function write(x,fn){if(chunk=chunk?Buffer.concat([chunk,x]):Buffer.from(x),fn||chunk.length>=1024)return nextWrite(fn);return nextWriteTimer===null&&(nextWriteTimer=setImmediate(nextWrite)),!0}function nextWrite(fn){let x=socket.write(chunk,fn);return nextWriteTimer!==null&&clearImmediate(nextWriteTimer),chunk=nextWriteTimer=null,x}function connectTimedOut(){errored(Errors.connection("CONNECT_TIMEOUT",options,socket)),socket.destroy()}async function secure(){if(sslnegotiation!=="direct"){if(write(SSLRequest),!await new Promise((r)=>socket.once("data",(x)=>r(x[0]===83)))&&ssl==="prefer")return connected()}let options2={socket,servername:net.isIP(socket.host)?void 0:socket.host};if(sslnegotiation==="direct")options2.ALPNProtocols=["postgresql"];if(ssl==="require"||ssl==="allow"||ssl==="prefer")options2.rejectUnauthorized=!1;else if(typeof ssl==="object")Object.assign(options2,ssl);socket.removeAllListeners(),socket=tls.connect(options2),socket.on("secureConnect",connected),socket.on("error",error),socket.on("close",closed),socket.on("drain",drain)}function drain(){!query&&onopen(connection2)}function data(x){if(incomings){if(incomings.push(x),remaining-=x.length,remaining>0)return}incoming=incomings?Buffer.concat(incomings,length-remaining):incoming.length===0?x:Buffer.concat([incoming,x],incoming.length+x.length);while(incoming.length>4){if(length=incoming.readUInt32BE(1),length>=incoming.length){remaining=length-incoming.length,incomings=[incoming];break}try{handle(incoming.subarray(0,length+1))}catch(e){query&&(query.cursorFn||query.describeFirst)&&write(Sync),errored(e)}incoming=incoming.subarray(length+1),remaining=0,incomings=null}}async function connect(){if(terminated=!1,backendParameters={},socket||(socket=await createSocket()),!socket)return;if(connectTimer.start(),options.socket)return ssl?secure():connected();if(socket.on("connect",ssl?secure:connected),options.path)return socket.connect(options.path);socket.ssl=ssl,socket.connect(port[hostIndex],host[hostIndex]),socket.host=host[hostIndex],socket.port=port[hostIndex],hostIndex=(hostIndex+1)%port.length}function reconnect(){setTimeout(connect,closedTime?Math.max(0,closedTime+delay-performance2.now()):0)}function connected(){try{statements={},needsTypes=options.fetch_types,statementId=Math.random().toString(36).slice(2),statementCount=1,lifeTimer.start(),socket.on("data",data),keep_alive&&socket.setKeepAlive&&socket.setKeepAlive(!0,1000*keep_alive);let s=StartupMessage();write(s)}catch(err){error(err)}}function error(err){if(connection2.queue===queues.connecting&&options.host[retries+1])return;errored(err);while(sent.length)queryError(sent.shift(),err)}function errored(err){stream&&(stream.destroy(err),stream=null),query&&queryError(query,err),initial&&(queryError(initial,err),initial=null)}function queryError(query2,err){if(query2.reserve)return query2.reject(err);if(!err||typeof err!=="object")err=Error(err);"query"in err||"parameters"in err||Object.defineProperties(err,{stack:{value:err.stack+query2.origin.replace(/.*\n/,`
688
586
  `),enumerable:options.debug},query:{value:query2.string,enumerable:options.debug},parameters:{value:query2.parameters,enumerable:options.debug},args:{value:query2.args,enumerable:options.debug},types:{value:query2.statement&&query2.statement.types,enumerable:options.debug}}),query2.reject(err)}function end(){return ending||(!connection2.reserved&&onend(connection2),!connection2.reserved&&!initial&&!query&&sent.length===0?(terminate(),new Promise((r)=>socket&&socket.readyState!=="closed"?socket.once("close",r):r())):ending=new Promise((r)=>ended=r))}function terminate(){if(terminated=!0,stream||query||initial||sent.length)error(Errors.connection("CONNECTION_DESTROYED",options));if(clearImmediate(nextWriteTimer),socket)socket.removeListener("data",data),socket.removeListener("connect",connected),socket.readyState==="open"&&socket.end(bytes_default().X().end());ended&&(ended(),ending=ended=null)}async function closed(hadError){if(incoming=Buffer.alloc(0),remaining=0,incomings=null,clearImmediate(nextWriteTimer),socket.removeListener("data",data),socket.removeListener("connect",connected),idleTimer.cancel(),lifeTimer.cancel(),connectTimer.cancel(),socket.removeAllListeners(),socket=null,initial)return reconnect();!hadError&&(query||sent.length)&&error(Errors.connection("CONNECTION_CLOSED",options,socket)),closedTime=performance2.now(),hadError&&options.shared.retries++,delay=(typeof backoff==="function"?backoff(options.shared.retries):backoff)*1000,onclose(connection2,Errors.connection("CONNECTION_CLOSED",options,socket))}function handle(xs,x=xs[0]){(x===68?DataRow:x===100?CopyData:x===65?NotificationResponse:x===83?ParameterStatus:x===90?ReadyForQuery:x===67?CommandComplete:x===50?BindComplete:x===49?ParseComplete:x===116?ParameterDescription:x===84?RowDescription:x===82?Authentication:x===110?NoData:x===75?BackendKeyData:x===69?ErrorResponse:x===115?PortalSuspended:x===51?CloseComplete:x===71?CopyInResponse:x===78?NoticeResponse:x===72?CopyOutResponse:x===99?CopyDone:x===73?EmptyQueryResponse:x===86?FunctionCallResponse:x===118?NegotiateProtocolVersion:x===87?CopyBothResponse:UnknownMessage)(xs)}function DataRow(x){let index=7,length2,column,value,row=query.isRaw?Array(query.statement.columns.length):{};for(let i2=0;i2<query.statement.columns.length;i2++)column=query.statement.columns[i2],length2=x.readInt32BE(index),index+=4,value=length2===-1?null:query.isRaw===!0?x.subarray(index,index+=length2):column.parser===void 0?x.toString("utf8",index,index+=length2):column.parser.array===!0?column.parser(x.toString("utf8",index+1,index+=length2)):column.parser(x.toString("utf8",index,index+=length2)),query.isRaw?row[i2]=query.isRaw===!0?value:transform.value.from?transform.value.from(value,column):value:row[column.name]=transform.value.from?transform.value.from(value,column):value;query.forEachFn?query.forEachFn(transform.row.from?transform.row.from(row):row,result2):result2[rows++]=transform.row.from?transform.row.from(row):row}function ParameterStatus(x){let[k,v]=x.toString("utf8",5,x.length-1).split(bytes_default.N);if(backendParameters[k]=v,options.parameters[k]!==v)options.parameters[k]=v,onparameter&&onparameter(k,v)}function ReadyForQuery(x){if(query)if(errorResponse)query.retried?errored(query.retried):query.prepared&&retryRoutines.has(errorResponse.routine)?retry(query,errorResponse):errored(errorResponse);else query.resolve(results||result2);else if(errorResponse)errored(errorResponse);if(query=results=errorResponse=null,result2=new Result,connectTimer.cancel(),initial){if(target_session_attrs){if(!backendParameters.in_hot_standby||!backendParameters.default_transaction_read_only)return fetchState();else if(tryNext(target_session_attrs,backendParameters))return terminate()}if(needsTypes)return initial.reserve&&(initial=null),fetchArrayTypes();initial&&!initial.reserve&&execute(initial),options.shared.retries=retries=0,initial=null;return}while(sent.length&&(query=sent.shift())&&(query.active=!0,query.cancelled))Connection(options).cancel(query.state,query.cancelled.resolve,query.cancelled.reject);if(query)return;connection2.reserved?!connection2.reserved.release&&x[5]===73?ending?terminate():(connection2.reserved=null,onopen(connection2)):connection2.reserved():ending?terminate():onopen(connection2)}function CommandComplete(x){rows=0;for(let i2=x.length-1;i2>0;i2--){if(x[i2]===32&&x[i2+1]<58&&result2.count===null)result2.count=+x.toString("utf8",i2+1,x.length-1);if(x[i2-1]>=65){result2.command=x.toString("utf8",5,i2),result2.state=backend;break}}if(final&&(final(),final=null),result2.command==="BEGIN"&&max!==1&&!connection2.reserved)return errored(Errors.generic("UNSAFE_TRANSACTION","Only use sql.begin, sql.reserved or max: 1"));if(query.options.simple)return BindComplete();if(query.cursorFn)result2.count&&query.cursorFn(result2),write(Sync)}function ParseComplete(){query.parsing=!1}function BindComplete(){!result2.statement&&(result2.statement=query.statement),result2.columns=query.statement.columns}function ParameterDescription(x){let length2=x.readUInt16BE(5);for(let i2=0;i2<length2;++i2)!query.statement.types[i2]&&(query.statement.types[i2]=x.readUInt32BE(7+i2*4));query.prepare&&(statements[query.signature]=query.statement),query.describeFirst&&!query.onlyDescribe&&(write(prepared(query)),query.describeFirst=!1)}function RowDescription(x){if(result2.command)results=results||[result2],results.push(result2=new Result),result2.count=null,query.statement.columns=null;let length2=x.readUInt16BE(5),index=7,start;query.statement.columns=Array(length2);for(let i2=0;i2<length2;++i2){start=index;while(x[index++]!==0);let table=x.readUInt32BE(index),number=x.readUInt16BE(index+4),type2=x.readUInt32BE(index+6);query.statement.columns[i2]={name:transform.column.from?transform.column.from(x.toString("utf8",start,index-1)):x.toString("utf8",start,index-1),parser:parsers2[type2],table,number,type:type2},index+=18}if(result2.statement=query.statement,query.onlyDescribe)return query.resolve(query.statement),write(Sync)}async function Authentication(x,type2=x.readUInt32BE(5)){(type2===3?AuthenticationCleartextPassword:type2===5?AuthenticationMD5Password:type2===10?SASL:type2===11?SASLContinue:type2===12?SASLFinal:type2!==0?UnknownAuth:noop)(x,type2)}async function AuthenticationCleartextPassword(){let payload=await Pass();write(bytes_default().p().str(payload).z(1).end())}async function AuthenticationMD5Password(x){let payload="md5"+await md5(Buffer.concat([Buffer.from(await md5(await Pass()+user)),x.subarray(9)]));write(bytes_default().p().str(payload).z(1).end())}async function SASL(){nonce=(await crypto2.randomBytes(18)).toString("base64"),bytes_default().p().str("SCRAM-SHA-256"+bytes_default.N);let i2=bytes_default.i;write(bytes_default.inc(4).str("n,,n=*,r="+nonce).i32(bytes_default.i-i2-4,i2).end())}async function SASLContinue(x){let res=x.toString("utf8",9).split(",").reduce((acc,x2)=>(acc[x2[0]]=x2.slice(2),acc),{}),saltedPassword=await crypto2.pbkdf2Sync(await Pass(),Buffer.from(res.s,"base64"),parseInt(res.i),32,"sha256"),clientKey=await hmac(saltedPassword,"Client Key"),auth="n=*,r="+nonce+",r="+res.r+",s="+res.s+",i="+res.i+",c=biws,r="+res.r;serverSignature=(await hmac(await hmac(saltedPassword,"Server Key"),auth)).toString("base64");let payload="c=biws,r="+res.r+",p="+xor(clientKey,Buffer.from(await hmac(await sha256(clientKey),auth))).toString("base64");write(bytes_default().p().str(payload).end())}function SASLFinal(x){if(x.toString("utf8",9).split(bytes_default.N,1)[0].slice(2)===serverSignature)return;errored(Errors.generic("SASL_SIGNATURE_MISMATCH","The server did not return the correct signature")),socket.destroy()}function Pass(){return Promise.resolve(typeof options.pass==="function"?options.pass():options.pass)}function NoData(){if(result2.statement=query.statement,result2.statement.columns=[],query.onlyDescribe)return query.resolve(query.statement),write(Sync)}function BackendKeyData(x){backend.pid=x.readUInt32BE(5),backend.secret=x.readUInt32BE(9)}async function fetchArrayTypes(){needsTypes=!1,(await new Query([`
689
587
  select b.oid, b.typarray
690
588
  from pg_catalog.pg_type a
@@ -695,7 +593,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
695
593
  `],[],execute)).forEach(({oid,typarray})=>addArrayType(oid,typarray))}function addArrayType(oid,typarray){if(!!options.parsers[typarray]&&!!options.serializers[typarray])return;let parser=options.parsers[oid];options.shared.typeArrayMap[oid]=typarray,options.parsers[typarray]=(xs)=>arrayParser(xs,parser,typarray),options.parsers[typarray].array=!0,options.serializers[typarray]=(xs)=>arraySerializer(xs,options.serializers[oid],options,typarray)}function tryNext(x,xs){return x==="read-write"&&xs.default_transaction_read_only==="on"||x==="read-only"&&xs.default_transaction_read_only==="off"||x==="primary"&&xs.in_hot_standby==="on"||x==="standby"&&xs.in_hot_standby==="off"||x==="prefer-standby"&&xs.in_hot_standby==="off"&&options.host[retries]}function fetchState(){let query2=new Query([`
696
594
  show transaction_read_only;
697
595
  select pg_catalog.pg_is_in_recovery()
698
- `],[],execute,null,{simple:!0});query2.resolve=([[a],[b2]])=>{backendParameters.default_transaction_read_only=a.transaction_read_only,backendParameters.in_hot_standby=b2.pg_is_in_recovery?"on":"off"},query2.execute()}function ErrorResponse(x){if(query)(query.cursorFn||query.describeFirst)&&write(Sync),errorResponse=Errors.postgres(parseError(x));else errored(Errors.postgres(parseError(x)))}function retry(q,error2){delete statements[q.signature],q.retried=error2,execute(q)}function NotificationResponse(x){if(!onnotify)return;let index=9;while(x[index++]!==0);onnotify(x.toString("utf8",9,index-1),x.toString("utf8",index,x.length-1))}async function PortalSuspended(){try{let x=await Promise.resolve(query.cursorFn(result2));rows=0,x===CLOSE?write(Close(query.portal)):(result2=new Result,write(Execute("",query.cursorRows)))}catch(err){write(Sync),query.reject(err)}}function CloseComplete(){result2.count&&query.cursorFn(result2),query.resolve(result2)}function CopyInResponse(){stream=new Stream.Writable({autoDestroy:!0,write(chunk2,encoding,callback){socket.write(bytes_default().d().raw(chunk2).end(),callback)},destroy(error2,callback){callback(error2),socket.write(bytes_default().f().str(error2+bytes_default.N).end()),stream=null},final(callback){socket.write(bytes_default().c().end()),final=callback,stream=null}}),query.resolve(stream)}function CopyOutResponse(){stream=new Stream.Readable({read(){socket.resume()}}),query.resolve(stream)}function CopyBothResponse(){stream=new Stream.Duplex({autoDestroy:!0,read(){socket.resume()},write(chunk2,encoding,callback){socket.write(bytes_default().d().raw(chunk2).end(),callback)},destroy(error2,callback){callback(error2),socket.write(bytes_default().f().str(error2+bytes_default.N).end()),stream=null},final(callback){socket.write(bytes_default().c().end()),final=callback}}),query.resolve(stream)}function CopyData(x){stream&&(stream.push(x.subarray(5))||socket.pause())}function CopyDone(){stream&&stream.push(null),stream=null}function NoticeResponse(x){onnotice?onnotice(parseError(x)):console.log(parseError(x))}function EmptyQueryResponse(){}function FunctionCallResponse(){errored(Errors.notSupported("FunctionCallResponse"))}function NegotiateProtocolVersion(){errored(Errors.notSupported("NegotiateProtocolVersion"))}function UnknownMessage(x){console.error("Postgres.js : Unknown Message:",x[0])}function UnknownAuth(x,type2){console.error("Postgres.js : Unknown Auth:",type2)}function Bind(parameters,types4,statement="",portal=""){let prev,type2;return bytes_default().B().str(portal+bytes_default.N).str(statement+bytes_default.N).i16(0).i16(parameters.length),parameters.forEach((x,i2)=>{if(x===null)return bytes_default.i32(4294967295);type2=types4[i2],parameters[i2]=x=type2 in options.serializers?options.serializers[type2](x):""+x,prev=bytes_default.i,bytes_default.inc(4).str(x).i32(bytes_default.i-prev-4,prev)}),bytes_default.i16(0),bytes_default.end()}function Parse(str2,parameters,types4,name=""){return bytes_default().P().str(name+bytes_default.N).str(str2+bytes_default.N).i16(parameters.length),parameters.forEach((x,i2)=>bytes_default.i32(types4[i2]||0)),bytes_default.end()}function Describe(x,name=""){return bytes_default().D().str(x).str(name+bytes_default.N).end()}function Execute(portal="",rows2=0){return Buffer.concat([bytes_default().E().str(portal+bytes_default.N).i32(rows2).end(),Flush])}function Close(portal=""){return Buffer.concat([bytes_default().C().str("P").str(portal+bytes_default.N).end(),bytes_default().S().end()])}function StartupMessage(){return cancelMessage||bytes_default().inc(4).i16(3).z(2).str(Object.entries(Object.assign({user,database,client_encoding:"UTF8"},options.connection)).filter(([,v])=>v).map(([k,v])=>k+bytes_default.N+v).join(bytes_default.N)).z(2).end(0)}}function parseError(x){let error={},start=5;for(let i2=5;i2<x.length-1;i2++)if(x[i2]===0)error[errorFields[x[start]]]=x.toString("utf8",start+1,i2),start=i2+1;return error}function md5(x){return crypto2.createHash("md5").update(x).digest("hex")}function hmac(key,x){return crypto2.createHmac("sha256",key).update(x).digest()}function sha256(x){return crypto2.createHash("sha256").update(x).digest()}function xor(a,b2){let length=Math.max(a.length,b2.length),buffer2=Buffer.allocUnsafe(length);for(let i2=0;i2<length;i2++)buffer2[i2]=a[i2]^b2[i2];return buffer2}function timer(fn,seconds){if(seconds=typeof seconds==="function"?seconds():seconds,!seconds)return{cancel:noop,start:noop};let timer2;return{cancel(){timer2&&(clearTimeout(timer2),timer2=null)},start(){timer2&&clearTimeout(timer2),timer2=setTimeout(done,seconds*1000,arguments)}};function done(args){fn.apply(null,args),timer2=null}}var connection_default,uid=1,Sync,Flush,SSLRequest,ExecuteUnnamed,DescribeUnnamed,noop=()=>{},retryRoutines,errorFields;var init_connection=__esm(()=>{init_types3();init_errors2();init_result();init_queue();init_query();init_bytes();connection_default=Connection,Sync=bytes_default().S().end(),Flush=bytes_default().H().end(),SSLRequest=bytes_default().i32(8).i32(80877103).end(8),ExecuteUnnamed=Buffer.concat([bytes_default().E().str(bytes_default.N).i32(0).end(),Sync]),DescribeUnnamed=bytes_default().D().str("S").str(bytes_default.N).end(),retryRoutines=new Set(["FetchPreparedStatement","RevalidateCachedQuery","transformAssignedExpr"]),errorFields={83:"severity_local",86:"severity",67:"code",77:"message",68:"detail",72:"hint",80:"position",112:"internal_position",113:"internal_query",87:"where",115:"schema_name",116:"table_name",99:"column_name",100:"data type_name",110:"constraint_name",70:"file",76:"line",82:"routine"}});function Subscribe(postgres2,options){let subscribers=new Map,slot="postgresjs_"+Math.random().toString(36).slice(2),state={},connection2,stream,ended=!1,sql=subscribe.sql=postgres2({...options,transform:{column:{},value:{},row:{}},max:1,fetch_types:!1,idle_timeout:null,max_lifetime:null,connection:{...options.connection,replication:"database"},onclose:async function(){if(ended)return;stream=null,state.pid=state.secret=void 0,connected(await init(sql,slot,options.publications)),subscribers.forEach((event)=>event.forEach(({onsubscribe})=>onsubscribe()))},no_subscribe:!0}),end=sql.end,close=sql.close;return sql.end=async()=>{return ended=!0,stream&&await new Promise((r)=>(stream.once("close",r),stream.end())),end()},sql.close=async()=>{return stream&&await new Promise((r)=>(stream.once("close",r),stream.end())),close()},subscribe;async function subscribe(event,fn,onsubscribe=noop2,onerror=noop2){if(event=parseEvent(event),!connection2)connection2=init(sql,slot,options.publications);let subscriber={fn,onsubscribe},fns=subscribers.has(event)?subscribers.get(event).add(subscriber):subscribers.set(event,new Set([subscriber])).get(event),unsubscribe=()=>{fns.delete(subscriber),fns.size===0&&subscribers.delete(event)};return connection2.then((x)=>{return connected(x),onsubscribe(),stream&&stream.on("error",onerror),{unsubscribe,state,sql}})}function connected(x){stream=x.stream,state.pid=x.state.pid,state.secret=x.state.secret}async function init(sql2,slot2,publications){if(!publications)throw Error("Missing publication names");let xs=await sql2.unsafe(`CREATE_REPLICATION_SLOT ${slot2} TEMPORARY LOGICAL pgoutput NOEXPORT_SNAPSHOT`),[x]=xs,stream2=await sql2.unsafe(`START_REPLICATION SLOT ${slot2} LOGICAL ${x.consistent_point} (proto_version '1', publication_names '${publications}')`).writable(),state2={lsn:Buffer.concat(x.consistent_point.split("/").map((x2)=>Buffer.from(("00000000"+x2).slice(-8),"hex")))};return stream2.on("data",data),stream2.on("error",error),stream2.on("close",sql2.close),{stream:stream2,state:xs.state};function error(e){console.error("Unexpected error during logical streaming - reconnecting",e)}function data(x2){if(x2[0]===119)parse(x2.subarray(25),state2,sql2.options.parsers,handle,options.transform);else if(x2[0]===107&&x2[17])state2.lsn=x2.subarray(1,9),pong()}function handle(a,b2){let path2=b2.relation.schema+"."+b2.relation.table;call("*",a,b2),call("*:"+path2,a,b2),b2.relation.keys.length&&call("*:"+path2+"="+b2.relation.keys.map((x2)=>a[x2.name]),a,b2),call(b2.command,a,b2),call(b2.command+":"+path2,a,b2),b2.relation.keys.length&&call(b2.command+":"+path2+"="+b2.relation.keys.map((x2)=>a[x2.name]),a,b2)}function pong(){let x2=Buffer.alloc(34);x2[0]=114,x2.fill(state2.lsn,1),x2.writeBigInt64BE(BigInt(Date.now()-Date.UTC(2000,0,1))*BigInt(1000),25),stream2.write(x2)}}function call(x,a,b2){subscribers.has(x)&&subscribers.get(x).forEach(({fn})=>fn(a,b2,x))}}function Time(x){return new Date(Date.UTC(2000,0,1)+Number(x/BigInt(1000)))}function parse(x,state,parsers2,handle,transform){let char=(acc,[k,v])=>(acc[k.charCodeAt(0)]=v,acc);Object.entries({R:(x2)=>{let i2=1,r=state[x2.readUInt32BE(i2)]={schema:x2.toString("utf8",i2+=4,i2=x2.indexOf(0,i2))||"pg_catalog",table:x2.toString("utf8",i2+1,i2=x2.indexOf(0,i2+1)),columns:Array(x2.readUInt16BE(i2+=2)),keys:[]};i2+=2;let columnIndex=0,column;while(i2<x2.length)column=r.columns[columnIndex++]={key:x2[i2++],name:transform.column.from?transform.column.from(x2.toString("utf8",i2,i2=x2.indexOf(0,i2))):x2.toString("utf8",i2,i2=x2.indexOf(0,i2)),type:x2.readUInt32BE(i2+=1),parser:parsers2[x2.readUInt32BE(i2)],atttypmod:x2.readUInt32BE(i2+=4)},column.key&&r.keys.push(column),i2+=4},Y:()=>{},O:()=>{},B:(x2)=>{state.date=Time(x2.readBigInt64BE(9)),state.lsn=x2.subarray(1,9)},I:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)],{row}=tuples(x2,relation.columns,i2+=7,transform);handle(row,{command:"insert",relation})},D:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)];i2+=4;let key=x2[i2]===75;handle(key||x2[i2]===79?tuples(x2,relation.columns,i2+=3,transform).row:null,{command:"delete",relation,key})},U:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)];i2+=4;let key=x2[i2]===75,xs=key||x2[i2]===79?tuples(x2,relation.columns,i2+=3,transform):null;xs&&(i2=xs.i);let{row}=tuples(x2,relation.columns,i2+3,transform);handle(row,{command:"update",relation,key,old:xs&&xs.row})},T:()=>{},C:()=>{}}).reduce(char,{})[x[0]](x)}function tuples(x,columns,xi,transform){let type2,column,value,row=transform.raw?Array(columns.length):{};for(let i2=0;i2<columns.length;i2++)type2=x[xi++],column=columns[i2],value=type2===110?null:type2===117?void 0:column.parser===void 0?x.toString("utf8",xi+4,xi+=4+x.readUInt32BE(xi)):column.parser.array===!0?column.parser(x.toString("utf8",xi+5,xi+=4+x.readUInt32BE(xi))):column.parser(x.toString("utf8",xi+4,xi+=4+x.readUInt32BE(xi))),transform.raw?row[i2]=transform.raw===!0?value:transform.value.from?transform.value.from(value,column):value:row[column.name]=transform.value.from?transform.value.from(value,column):value;return{i:xi,row:transform.row.from?transform.row.from(row):row}}function parseEvent(x){let xs=x.match(/^(\*|insert|update|delete)?:?([^.]+?\.?[^=]+)?=?(.+)?/i)||[];if(!xs)throw Error("Malformed subscribe pattern: "+x);let[,command,path2,key]=xs;return(command||"*")+(path2?":"+(path2.indexOf(".")===-1?"public."+path2:path2):"")+(key?"="+key:"")}var noop2=()=>{};import Stream2 from"stream";function largeObject(sql,oid,mode=393216){return new Promise(async(resolve3,reject)=>{await sql.begin(async(sql2)=>{let finish;!oid&&([{oid}]=await sql2`select lo_creat(-1) as oid`);let[{fd}]=await sql2`select lo_open(${oid}, ${mode}) as fd`,lo={writable,readable,close:()=>sql2`select lo_close(${fd})`.then(finish),tell:()=>sql2`select lo_tell64(${fd})`,read:(x)=>sql2`select loread(${fd}, ${x}) as data`,write:(x)=>sql2`select lowrite(${fd}, ${x})`,truncate:(x)=>sql2`select lo_truncate64(${fd}, ${x})`,seek:(x,whence=0)=>sql2`select lo_lseek64(${fd}, ${x}, ${whence})`,size:()=>sql2`
596
+ `],[],execute,null,{simple:!0});query2.resolve=([[a],[b2]])=>{backendParameters.default_transaction_read_only=a.transaction_read_only,backendParameters.in_hot_standby=b2.pg_is_in_recovery?"on":"off"},query2.execute()}function ErrorResponse(x){if(query)(query.cursorFn||query.describeFirst)&&write(Sync),errorResponse=Errors.postgres(parseError(x));else errored(Errors.postgres(parseError(x)))}function retry(q,error2){delete statements[q.signature],q.retried=error2,execute(q)}function NotificationResponse(x){if(!onnotify)return;let index=9;while(x[index++]!==0);onnotify(x.toString("utf8",9,index-1),x.toString("utf8",index,x.length-1))}async function PortalSuspended(){try{let x=await Promise.resolve(query.cursorFn(result2));rows=0,x===CLOSE?write(Close(query.portal)):(result2=new Result,write(Execute("",query.cursorRows)))}catch(err){write(Sync),query.reject(err)}}function CloseComplete(){result2.count&&query.cursorFn(result2),query.resolve(result2)}function CopyInResponse(){stream=new Stream.Writable({autoDestroy:!0,write(chunk2,encoding,callback){socket.write(bytes_default().d().raw(chunk2).end(),callback)},destroy(error2,callback){callback(error2),socket.write(bytes_default().f().str(error2+bytes_default.N).end()),stream=null},final(callback){socket.write(bytes_default().c().end()),final=callback,stream=null}}),query.resolve(stream)}function CopyOutResponse(){stream=new Stream.Readable({read(){socket.resume()}}),query.resolve(stream)}function CopyBothResponse(){stream=new Stream.Duplex({autoDestroy:!0,read(){socket.resume()},write(chunk2,encoding,callback){socket.write(bytes_default().d().raw(chunk2).end(),callback)},destroy(error2,callback){callback(error2),socket.write(bytes_default().f().str(error2+bytes_default.N).end()),stream=null},final(callback){socket.write(bytes_default().c().end()),final=callback}}),query.resolve(stream)}function CopyData(x){stream&&(stream.push(x.subarray(5))||socket.pause())}function CopyDone(){stream&&stream.push(null),stream=null}function NoticeResponse(x){onnotice?onnotice(parseError(x)):console.log(parseError(x))}function EmptyQueryResponse(){}function FunctionCallResponse(){errored(Errors.notSupported("FunctionCallResponse"))}function NegotiateProtocolVersion(){errored(Errors.notSupported("NegotiateProtocolVersion"))}function UnknownMessage(x){console.error("Postgres.js : Unknown Message:",x[0])}function UnknownAuth(x,type2){console.error("Postgres.js : Unknown Auth:",type2)}function Bind(parameters,types4,statement="",portal=""){let prev,type2;return bytes_default().B().str(portal+bytes_default.N).str(statement+bytes_default.N).i16(0).i16(parameters.length),parameters.forEach((x,i2)=>{if(x===null)return bytes_default.i32(4294967295);type2=types4[i2],parameters[i2]=x=type2 in options.serializers?options.serializers[type2](x):""+x,prev=bytes_default.i,bytes_default.inc(4).str(x).i32(bytes_default.i-prev-4,prev)}),bytes_default.i16(0),bytes_default.end()}function Parse(str2,parameters,types4,name=""){return bytes_default().P().str(name+bytes_default.N).str(str2+bytes_default.N).i16(parameters.length),parameters.forEach((x,i2)=>bytes_default.i32(types4[i2]||0)),bytes_default.end()}function Describe(x,name=""){return bytes_default().D().str(x).str(name+bytes_default.N).end()}function Execute(portal="",rows2=0){return Buffer.concat([bytes_default().E().str(portal+bytes_default.N).i32(rows2).end(),Flush])}function Close(portal=""){return Buffer.concat([bytes_default().C().str("P").str(portal+bytes_default.N).end(),bytes_default().S().end()])}function StartupMessage(){return cancelMessage||bytes_default().inc(4).i16(3).z(2).str(Object.entries(Object.assign({user,database,client_encoding:"UTF8"},options.connection)).filter(([,v])=>v).map(([k,v])=>k+bytes_default.N+v).join(bytes_default.N)).z(2).end(0)}}function parseError(x){let error={},start=5;for(let i2=5;i2<x.length-1;i2++)if(x[i2]===0)error[errorFields[x[start]]]=x.toString("utf8",start+1,i2),start=i2+1;return error}function md5(x){return crypto2.createHash("md5").update(x).digest("hex")}function hmac(key,x){return crypto2.createHmac("sha256",key).update(x).digest()}function sha256(x){return crypto2.createHash("sha256").update(x).digest()}function xor(a,b2){let length=Math.max(a.length,b2.length),buffer2=Buffer.allocUnsafe(length);for(let i2=0;i2<length;i2++)buffer2[i2]=a[i2]^b2[i2];return buffer2}function timer(fn,seconds){if(seconds=typeof seconds==="function"?seconds():seconds,!seconds)return{cancel:noop,start:noop};let timer2;return{cancel(){timer2&&(clearTimeout(timer2),timer2=null)},start(){timer2&&clearTimeout(timer2),timer2=setTimeout(done,seconds*1000,arguments)}};function done(args){fn.apply(null,args),timer2=null}}var connection_default,uid=1,Sync,Flush,SSLRequest,ExecuteUnnamed,DescribeUnnamed,noop=()=>{},retryRoutines,errorFields;var init_connection=__esm(()=>{init_types3();init_errors2();init_result();init_queue();init_query();init_bytes();connection_default=Connection,Sync=bytes_default().S().end(),Flush=bytes_default().H().end(),SSLRequest=bytes_default().i32(8).i32(80877103).end(8),ExecuteUnnamed=Buffer.concat([bytes_default().E().str(bytes_default.N).i32(0).end(),Sync]),DescribeUnnamed=bytes_default().D().str("S").str(bytes_default.N).end(),retryRoutines=new Set(["FetchPreparedStatement","RevalidateCachedQuery","transformAssignedExpr"]),errorFields={83:"severity_local",86:"severity",67:"code",77:"message",68:"detail",72:"hint",80:"position",112:"internal_position",113:"internal_query",87:"where",115:"schema_name",116:"table_name",99:"column_name",100:"data type_name",110:"constraint_name",70:"file",76:"line",82:"routine"}});function Subscribe(postgres2,options){let subscribers=new Map,slot="postgresjs_"+Math.random().toString(36).slice(2),state={},connection2,stream,ended=!1,sql=subscribe.sql=postgres2({...options,transform:{column:{},value:{},row:{}},max:1,fetch_types:!1,idle_timeout:null,max_lifetime:null,connection:{...options.connection,replication:"database"},onclose:async function(){if(ended)return;stream=null,state.pid=state.secret=void 0,connected(await init(sql,slot,options.publications)),subscribers.forEach((event)=>event.forEach(({onsubscribe})=>onsubscribe()))},no_subscribe:!0}),end=sql.end,close=sql.close;return sql.end=async()=>{return ended=!0,stream&&await new Promise((r)=>(stream.once("close",r),stream.end())),end()},sql.close=async()=>{return stream&&await new Promise((r)=>(stream.once("close",r),stream.end())),close()},subscribe;async function subscribe(event,fn,onsubscribe=noop2,onerror=noop2){if(event=parseEvent(event),!connection2)connection2=init(sql,slot,options.publications);let subscriber={fn,onsubscribe},fns=subscribers.has(event)?subscribers.get(event).add(subscriber):subscribers.set(event,new Set([subscriber])).get(event),unsubscribe=()=>{fns.delete(subscriber),fns.size===0&&subscribers.delete(event)};return connection2.then((x)=>{return connected(x),onsubscribe(),stream&&stream.on("error",onerror),{unsubscribe,state,sql}})}function connected(x){stream=x.stream,state.pid=x.state.pid,state.secret=x.state.secret}async function init(sql2,slot2,publications){if(!publications)throw Error("Missing publication names");let xs=await sql2.unsafe(`CREATE_REPLICATION_SLOT ${slot2} TEMPORARY LOGICAL pgoutput NOEXPORT_SNAPSHOT`),[x]=xs,stream2=await sql2.unsafe(`START_REPLICATION SLOT ${slot2} LOGICAL ${x.consistent_point} (proto_version '1', publication_names '${publications}')`).writable(),state2={lsn:Buffer.concat(x.consistent_point.split("/").map((x2)=>Buffer.from(("00000000"+x2).slice(-8),"hex")))};return stream2.on("data",data),stream2.on("error",error),stream2.on("close",sql2.close),{stream:stream2,state:xs.state};function error(e){console.error("Unexpected error during logical streaming - reconnecting",e)}function data(x2){if(x2[0]===119)parse(x2.subarray(25),state2,sql2.options.parsers,handle,options.transform);else if(x2[0]===107&&x2[17])state2.lsn=x2.subarray(1,9),pong()}function handle(a,b2){let path2=b2.relation.schema+"."+b2.relation.table;call("*",a,b2),call("*:"+path2,a,b2),b2.relation.keys.length&&call("*:"+path2+"="+b2.relation.keys.map((x2)=>a[x2.name]),a,b2),call(b2.command,a,b2),call(b2.command+":"+path2,a,b2),b2.relation.keys.length&&call(b2.command+":"+path2+"="+b2.relation.keys.map((x2)=>a[x2.name]),a,b2)}function pong(){let x2=Buffer.alloc(34);x2[0]=114,x2.fill(state2.lsn,1),x2.writeBigInt64BE(BigInt(Date.now()-Date.UTC(2000,0,1))*BigInt(1000),25),stream2.write(x2)}}function call(x,a,b2){subscribers.has(x)&&subscribers.get(x).forEach(({fn})=>fn(a,b2,x))}}function Time(x){return new Date(Date.UTC(2000,0,1)+Number(x/BigInt(1000)))}function parse(x,state,parsers2,handle,transform){let char=(acc,[k,v])=>(acc[k.charCodeAt(0)]=v,acc);Object.entries({R:(x2)=>{let i2=1,r=state[x2.readUInt32BE(i2)]={schema:x2.toString("utf8",i2+=4,i2=x2.indexOf(0,i2))||"pg_catalog",table:x2.toString("utf8",i2+1,i2=x2.indexOf(0,i2+1)),columns:Array(x2.readUInt16BE(i2+=2)),keys:[]};i2+=2;let columnIndex=0,column;while(i2<x2.length)column=r.columns[columnIndex++]={key:x2[i2++],name:transform.column.from?transform.column.from(x2.toString("utf8",i2,i2=x2.indexOf(0,i2))):x2.toString("utf8",i2,i2=x2.indexOf(0,i2)),type:x2.readUInt32BE(i2+=1),parser:parsers2[x2.readUInt32BE(i2)],atttypmod:x2.readUInt32BE(i2+=4)},column.key&&r.keys.push(column),i2+=4},Y:()=>{},O:()=>{},B:(x2)=>{state.date=Time(x2.readBigInt64BE(9)),state.lsn=x2.subarray(1,9)},I:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)],{row}=tuples(x2,relation.columns,i2+=7,transform);handle(row,{command:"insert",relation})},D:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)];i2+=4;let key=x2[i2]===75;handle(key||x2[i2]===79?tuples(x2,relation.columns,i2+=3,transform).row:null,{command:"delete",relation,key})},U:(x2)=>{let i2=1,relation=state[x2.readUInt32BE(i2)];i2+=4;let key=x2[i2]===75,xs=key||x2[i2]===79?tuples(x2,relation.columns,i2+=3,transform):null;xs&&(i2=xs.i);let{row}=tuples(x2,relation.columns,i2+3,transform);handle(row,{command:"update",relation,key,old:xs&&xs.row})},T:()=>{},C:()=>{}}).reduce(char,{})[x[0]](x)}function tuples(x,columns,xi,transform){let type2,column,value,row=transform.raw?Array(columns.length):{};for(let i2=0;i2<columns.length;i2++)type2=x[xi++],column=columns[i2],value=type2===110?null:type2===117?void 0:column.parser===void 0?x.toString("utf8",xi+4,xi+=4+x.readUInt32BE(xi)):column.parser.array===!0?column.parser(x.toString("utf8",xi+5,xi+=4+x.readUInt32BE(xi))):column.parser(x.toString("utf8",xi+4,xi+=4+x.readUInt32BE(xi))),transform.raw?row[i2]=transform.raw===!0?value:transform.value.from?transform.value.from(value,column):value:row[column.name]=transform.value.from?transform.value.from(value,column):value;return{i:xi,row:transform.row.from?transform.row.from(row):row}}function parseEvent(x){let xs=x.match(/^(\*|insert|update|delete)?:?([^.]+?\.?[^=]+)?=?(.+)?/i)||[];if(!xs)throw Error("Malformed subscribe pattern: "+x);let[,command,path2,key]=xs;return(command||"*")+(path2?":"+(path2.indexOf(".")===-1?"public."+path2:path2):"")+(key?"="+key:"")}var noop2=()=>{};import Stream2 from"stream";function largeObject(sql,oid,mode=393216){return new Promise(async(resolve2,reject)=>{await sql.begin(async(sql2)=>{let finish;!oid&&([{oid}]=await sql2`select lo_creat(-1) as oid`);let[{fd}]=await sql2`select lo_open(${oid}, ${mode}) as fd`,lo={writable,readable,close:()=>sql2`select lo_close(${fd})`.then(finish),tell:()=>sql2`select lo_tell64(${fd})`,read:(x)=>sql2`select loread(${fd}, ${x}) as data`,write:(x)=>sql2`select lowrite(${fd}, ${x})`,truncate:(x)=>sql2`select lo_truncate64(${fd}, ${x})`,seek:(x,whence=0)=>sql2`select lo_lseek64(${fd}, ${x}, ${whence})`,size:()=>sql2`
699
597
  select
700
598
  lo_lseek64(${fd}, location, 0) as position,
701
599
  seek.size
@@ -705,7 +603,7 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
705
603
  tell.location
706
604
  from (select lo_tell64($1) as location) tell
707
605
  ) seek
708
- `};return resolve3(lo),new Promise(async(r)=>finish=r);async function readable({highWaterMark=16384,start=0,end=1/0}={}){let max=end-start;return start&&await lo.seek(start),new Stream2.Readable({highWaterMark,async read(size){let l=size>max?size-max:size;max-=size;let[{data}]=await lo.read(l);if(this.push(data),data.length<size)this.push(null)}})}async function writable({highWaterMark=16384,start=0}={}){return start&&await lo.seek(start),new Stream2.Writable({highWaterMark,write(chunk,encoding,callback){lo.write(chunk).then(()=>callback(),callback)}})}}).catch(reject)})}var init_large=()=>{};var exports_src={};__export(exports_src,{default:()=>src_default});import os from"os";import fs from"fs";function Postgres(a,b2){let options=parseOptions(a,b2),subscribe=options.no_subscribe||Subscribe(Postgres,{...options}),ending=!1,queries=queue_default(),connecting=queue_default(),reserved=queue_default(),closed=queue_default(),ended=queue_default(),open3=queue_default(),busy=queue_default(),full=queue_default(),queues={connecting,reserved,closed,ended,open:open3,busy,full},connections=[...Array(options.max)].map(()=>connection_default(options,queues,{onopen,onend,onclose})),sql=Sql(handler);return Object.assign(sql,{get parameters(){return options.parameters},largeObject:largeObject.bind(null,sql),subscribe,CLOSE,END:CLOSE,PostgresError,options,reserve,listen,begin,close,end}),sql;function Sql(handler2){return handler2.debug=options.debug,Object.entries(options.types).reduce((acc,[name,type2])=>{return acc[name]=(x)=>new Parameter(x,type2.to),acc},typed),Object.assign(sql2,{types:typed,typed,unsafe,notify,array,json:json2,file}),sql2;function typed(value,type2){return new Parameter(value,type2)}function sql2(strings,...args){return strings&&Array.isArray(strings.raw)?new Query(strings,args,handler2,cancel):typeof strings==="string"&&!args.length?new Identifier(options.transform.column.to?options.transform.column.to(strings):strings):new Builder(strings,args)}function unsafe(string,args=[],options2={}){return arguments.length===2&&!Array.isArray(args)&&(options2=args,args=[]),new Query([string],args,handler2,cancel,{prepare:!1,...options2,simple:"simple"in options2?options2.simple:args.length===0})}function file(path2,args=[],options2={}){return arguments.length===2&&!Array.isArray(args)&&(options2=args,args=[]),new Query([],args,(query2)=>{fs.readFile(path2,"utf8",(err,string)=>{if(err)return query2.reject(err);query2.strings=[string],handler2(query2)})},cancel,{...options2,simple:"simple"in options2?options2.simple:args.length===0})}}async function listen(name,fn,onlisten){let listener={fn,onlisten},sql2=listen.sql||(listen.sql=Postgres({...options,max:1,idle_timeout:null,max_lifetime:null,fetch_types:!1,onclose(){Object.entries(listen.channels).forEach(([name2,{listeners}])=>{delete listen.channels[name2],Promise.all(listeners.map((l)=>listen(name2,l.fn,l.onlisten).catch(()=>{})))})},onnotify(c,x){c in listen.channels&&listen.channels[c].listeners.forEach((l)=>l.fn(x))}})),channels=listen.channels||(listen.channels={});if(name in channels){channels[name].listeners.push(listener);let result3=await channels[name].result;return listener.onlisten&&listener.onlisten(),{state:result3.state,unlisten}}channels[name]={result:sql2`listen ${sql2.unsafe('"'+name.replace(/"/g,'""')+'"')}`,listeners:[listener]};let result2=await channels[name].result;return listener.onlisten&&listener.onlisten(),{state:result2.state,unlisten};async function unlisten(){if(name in channels===!1)return;if(channels[name].listeners=channels[name].listeners.filter((x)=>x!==listener),channels[name].listeners.length)return;return delete channels[name],sql2`unlisten ${sql2.unsafe('"'+name.replace(/"/g,'""')+'"')}`}}async function notify(channel,payload){return await sql`select pg_notify(${channel}, ${""+payload})`}async function reserve(){let queue=queue_default(),c=open3.length?open3.shift():await new Promise((resolve3,reject)=>{let query={reserve:resolve3,reject};queries.push(query),closed.length&&connect(closed.shift(),query)});move(c,reserved),c.reserved=()=>queue.length?c.execute(queue.shift()):move(c,reserved),c.reserved.release=!0;let sql2=Sql(handler2);return sql2.release=()=>{c.reserved=null,onopen(c)},sql2;function handler2(q){c.queue===full?queue.push(q):c.execute(q)||move(c,full)}}async function begin(options2,fn){!fn&&(fn=options2,options2="");let queries2=queue_default(),savepoints=0,connection2,prepare=null;try{return await sql.unsafe("begin "+options2.replace(/[^a-z ]/ig,""),[],{onexecute}).execute(),await Promise.race([scope(connection2,fn),new Promise((_,reject)=>connection2.onclose=reject)])}catch(error){throw error}async function scope(c,fn2,name){let sql2=Sql(handler2);sql2.savepoint=savepoint,sql2.prepare=(x)=>prepare=x.replace(/[^a-z0-9$-_. ]/gi);let uncaughtError,result2;name&&await sql2`savepoint ${sql2(name)}`;try{if(result2=await new Promise((resolve3,reject)=>{let x=fn2(sql2);Promise.resolve(Array.isArray(x)?Promise.all(x):x).then(resolve3,reject)}),uncaughtError)throw uncaughtError}catch(e){throw await(name?sql2`rollback to ${sql2(name)}`:sql2`rollback`),e instanceof PostgresError&&e.code==="25P02"&&uncaughtError||e}if(!name)prepare?await sql2`prepare transaction '${sql2.unsafe(prepare)}'`:await sql2`commit`;return result2;function savepoint(name2,fn3){if(name2&&Array.isArray(name2.raw))return savepoint((sql3)=>sql3.apply(sql3,arguments));return arguments.length===1&&(fn3=name2,name2=null),scope(c,fn3,"s"+savepoints+++(name2?"_"+name2:""))}function handler2(q){q.catch((e)=>uncaughtError||(uncaughtError=e)),c.queue===full?queries2.push(q):c.execute(q)||move(c,full)}}function onexecute(c){connection2=c,move(c,reserved),c.reserved=()=>queries2.length?c.execute(queries2.shift()):move(c,reserved)}}function move(c,queue){return c.queue.remove(c),queue.push(c),c.queue=queue,queue===open3?c.idleTimer.start():c.idleTimer.cancel(),c}function json2(x){return new Parameter(x,3802)}function array(x,type2){if(!Array.isArray(x))return array(Array.from(arguments));return new Parameter(x,type2||(x.length?inferType(x)||25:0),options.shared.typeArrayMap)}function handler(query){if(ending)return query.reject(Errors.connection("CONNECTION_ENDED",options,options));if(open3.length)return go(open3.shift(),query);if(closed.length)return connect(closed.shift(),query);busy.length?go(busy.shift(),query):queries.push(query)}function go(c,query){return c.execute(query)?move(c,busy):move(c,full)}function cancel(query){return new Promise((resolve3,reject)=>{query.state?query.active?connection_default(options).cancel(query.state,resolve3,reject):query.cancelled={resolve:resolve3,reject}:(queries.remove(query),query.cancelled=!0,query.reject(Errors.generic("57014","canceling statement due to user request")),resolve3())})}async function end({timeout=null}={}){if(ending)return ending;await 1;let timer2;return ending=Promise.race([new Promise((r)=>timeout!==null&&(timer2=setTimeout(destroy,timeout*1000,r))),Promise.all(connections.map((c)=>c.end()).concat(listen.sql?listen.sql.end({timeout:0}):[],subscribe.sql?subscribe.sql.end({timeout:0}):[]))]).then(()=>clearTimeout(timer2))}async function close(){await Promise.all(connections.map((c)=>c.end()))}async function destroy(resolve3){await Promise.all(connections.map((c)=>c.terminate()));while(queries.length)queries.shift().reject(Errors.connection("CONNECTION_DESTROYED",options));resolve3()}function connect(c,query){return move(c,connecting),c.connect(query),c}function onend(c){move(c,ended)}function onopen(c){if(queries.length===0)return move(c,open3);let max=Math.ceil(queries.length/(connecting.length+1)),ready=!0;while(ready&&queries.length&&max-- >0){let query=queries.shift();if(query.reserve)return query.reserve(c);ready=c.execute(query)}ready?move(c,busy):move(c,full)}function onclose(c,e){move(c,closed),c.reserved=null,c.onclose&&(c.onclose(e),c.onclose=null),options.onclose&&options.onclose(c.id),queries.length&&connect(c,queries.shift())}}function parseOptions(a,b2){if(a&&a.shared)return a;let env=process.env,o=(!a||typeof a==="string"?b2:a)||{},{url,multihost}=parseUrl(a),query=[...url.searchParams].reduce((a2,[b3,c])=>(a2[b3]=c,a2),{}),host=o.hostname||o.host||multihost||url.hostname||env.PGHOST||"localhost",port=o.port||url.port||env.PGPORT||5432,user=o.user||o.username||url.username||env.PGUSERNAME||env.PGUSER||osUsername();o.no_prepare&&(o.prepare=!1),query.sslmode&&(query.ssl=query.sslmode,delete query.sslmode),"timeout"in o&&(console.log("The timeout option is deprecated, use idle_timeout instead"),o.idle_timeout=o.timeout),query.sslrootcert==="system"&&(query.ssl="verify-full");let ints=["idle_timeout","connect_timeout","max_lifetime","max_pipeline","backoff","keep_alive"],defaults={max:globalThis.Cloudflare?3:10,ssl:!1,sslnegotiation:null,idle_timeout:null,connect_timeout:30,max_lifetime,max_pipeline:100,backoff,keep_alive:60,prepare:!0,debug:!1,fetch_types:!0,publications:"alltables",target_session_attrs:null};return{host:Array.isArray(host)?host:host.split(",").map((x)=>x.split(":")[0]),port:Array.isArray(port)?port:host.split(",").map((x)=>parseInt(x.split(":")[1]||port)),path:o.path||host.indexOf("/")>-1&&host+"/.s.PGSQL."+port,database:o.database||o.db||(url.pathname||"").slice(1)||env.PGDATABASE||user,user,pass:o.pass||o.password||url.password||env.PGPASSWORD||"",...Object.entries(defaults).reduce((acc,[k,d])=>{let value=k in o?o[k]:(k in query)?query[k]==="disable"||query[k]==="false"?!1:query[k]:env["PG"+k.toUpperCase()]||d;return acc[k]=typeof value==="string"&&ints.includes(k)?+value:value,acc},{}),connection:{application_name:env.PGAPPNAME||"postgres.js",...o.connection,...Object.entries(query).reduce((acc,[k,v])=>((k in defaults)||(acc[k]=v),acc),{})},types:o.types||{},target_session_attrs:tsa(o,url,env),onnotice:o.onnotice,onnotify:o.onnotify,onclose:o.onclose,onparameter:o.onparameter,socket:o.socket,transform:parseTransform(o.transform||{undefined:void 0}),parameters:{},shared:{retries:0,typeArrayMap:{}},...mergeUserTypes(o.types)}}function tsa(o,url,env){let x=o.target_session_attrs||url.searchParams.get("target_session_attrs")||env.PGTARGETSESSIONATTRS;if(!x||["read-write","read-only","primary","standby","prefer-standby"].includes(x))return x;throw Error("target_session_attrs "+x+" is not supported")}function backoff(retries){return(0.5+Math.random()/2)*Math.min(3**retries/100,20)}function max_lifetime(){return 60*(30+Math.random()*30)}function parseTransform(x){return{undefined:x.undefined,column:{from:typeof x.column==="function"?x.column:x.column&&x.column.from,to:x.column&&x.column.to},value:{from:typeof x.value==="function"?x.value:x.value&&x.value.from,to:x.value&&x.value.to},row:{from:typeof x.row==="function"?x.row:x.row&&x.row.from,to:x.row&&x.row.to}}}function parseUrl(url){if(!url||typeof url!=="string")return{url:{searchParams:new Map}};let host=url;host=host.slice(host.indexOf("://")+3).split(/[?/]/)[0],host=decodeURIComponent(host.slice(host.indexOf("@")+1));let urlObj=new URL(url.replace(host,host.split(",")[0]));return{url:{username:decodeURIComponent(urlObj.username),password:decodeURIComponent(urlObj.password),host:urlObj.host,hostname:urlObj.hostname,port:urlObj.port,pathname:urlObj.pathname,searchParams:urlObj.searchParams},multihost:host.indexOf(",")>-1&&host}}function osUsername(){try{return os.userInfo().username}catch(_){return process.env.USERNAME||process.env.USER||process.env.LOGNAME}}var src_default;var init_src=__esm(()=>{init_types3();init_connection();init_query();init_queue();init_errors2();init_large();Object.assign(Postgres,{PostgresError,toPascal,pascal,toCamel,camel,toKebab,kebab,fromPascal,fromCamel,fromKebab,BigInt:{to:20,from:[20],parse:(x)=>BigInt(x),serialize:(x)=>x.toString()}});src_default=Postgres});async function maybePromptV1Migration(target){if(promptedThisProcess)return;if(promptedThisProcess=!0,process.env.GENIE_NO_V1_PROMPT==="1")return;if(process.env.GENIE_QUIET==="1")return;if(process.env.GENIE_TEST_DB_NAME)return;if(process.env.GENIE_NO_BANNER==="1")return;let detection;try{detection=await detectV1State(target)}catch{return}if(!detection.v1Exists)return;if(detection.alreadyMigrated)return;let{tasks=0,wishes=0,teams=0,sessions=0}=detection.v1Counts??{};if(tasks===0&&wishes===0&&teams===0&&sessions===0)return;if(!Boolean(process.stderr.isTTY)){process.stderr.write(`[genie] \u24D8 Legacy v1 data detected (${tasks} tasks, ${wishes} wishes, ${teams} teams, ${sessions} sessions).
606
+ `};return resolve2(lo),new Promise(async(r)=>finish=r);async function readable({highWaterMark=16384,start=0,end=1/0}={}){let max=end-start;return start&&await lo.seek(start),new Stream2.Readable({highWaterMark,async read(size){let l=size>max?size-max:size;max-=size;let[{data}]=await lo.read(l);if(this.push(data),data.length<size)this.push(null)}})}async function writable({highWaterMark=16384,start=0}={}){return start&&await lo.seek(start),new Stream2.Writable({highWaterMark,write(chunk,encoding,callback){lo.write(chunk).then(()=>callback(),callback)}})}}).catch(reject)})}var init_large=()=>{};var exports_src={};__export(exports_src,{default:()=>src_default});import os from"os";import fs from"fs";function Postgres(a,b2){let options=parseOptions(a,b2),subscribe=options.no_subscribe||Subscribe(Postgres,{...options}),ending=!1,queries=queue_default(),connecting=queue_default(),reserved=queue_default(),closed=queue_default(),ended=queue_default(),open3=queue_default(),busy=queue_default(),full=queue_default(),queues={connecting,reserved,closed,ended,open:open3,busy,full},connections=[...Array(options.max)].map(()=>connection_default(options,queues,{onopen,onend,onclose})),sql=Sql(handler);return Object.assign(sql,{get parameters(){return options.parameters},largeObject:largeObject.bind(null,sql),subscribe,CLOSE,END:CLOSE,PostgresError,options,reserve,listen,begin,close,end}),sql;function Sql(handler2){return handler2.debug=options.debug,Object.entries(options.types).reduce((acc,[name,type2])=>{return acc[name]=(x)=>new Parameter(x,type2.to),acc},typed),Object.assign(sql2,{types:typed,typed,unsafe,notify,array,json:json2,file}),sql2;function typed(value,type2){return new Parameter(value,type2)}function sql2(strings,...args){return strings&&Array.isArray(strings.raw)?new Query(strings,args,handler2,cancel):typeof strings==="string"&&!args.length?new Identifier(options.transform.column.to?options.transform.column.to(strings):strings):new Builder(strings,args)}function unsafe(string,args=[],options2={}){return arguments.length===2&&!Array.isArray(args)&&(options2=args,args=[]),new Query([string],args,handler2,cancel,{prepare:!1,...options2,simple:"simple"in options2?options2.simple:args.length===0})}function file(path2,args=[],options2={}){return arguments.length===2&&!Array.isArray(args)&&(options2=args,args=[]),new Query([],args,(query2)=>{fs.readFile(path2,"utf8",(err,string)=>{if(err)return query2.reject(err);query2.strings=[string],handler2(query2)})},cancel,{...options2,simple:"simple"in options2?options2.simple:args.length===0})}}async function listen(name,fn,onlisten){let listener={fn,onlisten},sql2=listen.sql||(listen.sql=Postgres({...options,max:1,idle_timeout:null,max_lifetime:null,fetch_types:!1,onclose(){Object.entries(listen.channels).forEach(([name2,{listeners}])=>{delete listen.channels[name2],Promise.all(listeners.map((l)=>listen(name2,l.fn,l.onlisten).catch(()=>{})))})},onnotify(c,x){c in listen.channels&&listen.channels[c].listeners.forEach((l)=>l.fn(x))}})),channels=listen.channels||(listen.channels={});if(name in channels){channels[name].listeners.push(listener);let result3=await channels[name].result;return listener.onlisten&&listener.onlisten(),{state:result3.state,unlisten}}channels[name]={result:sql2`listen ${sql2.unsafe('"'+name.replace(/"/g,'""')+'"')}`,listeners:[listener]};let result2=await channels[name].result;return listener.onlisten&&listener.onlisten(),{state:result2.state,unlisten};async function unlisten(){if(name in channels===!1)return;if(channels[name].listeners=channels[name].listeners.filter((x)=>x!==listener),channels[name].listeners.length)return;return delete channels[name],sql2`unlisten ${sql2.unsafe('"'+name.replace(/"/g,'""')+'"')}`}}async function notify(channel,payload){return await sql`select pg_notify(${channel}, ${""+payload})`}async function reserve(){let queue=queue_default(),c=open3.length?open3.shift():await new Promise((resolve2,reject)=>{let query={reserve:resolve2,reject};queries.push(query),closed.length&&connect(closed.shift(),query)});move(c,reserved),c.reserved=()=>queue.length?c.execute(queue.shift()):move(c,reserved),c.reserved.release=!0;let sql2=Sql(handler2);return sql2.release=()=>{c.reserved=null,onopen(c)},sql2;function handler2(q){c.queue===full?queue.push(q):c.execute(q)||move(c,full)}}async function begin(options2,fn){!fn&&(fn=options2,options2="");let queries2=queue_default(),savepoints=0,connection2,prepare=null;try{return await sql.unsafe("begin "+options2.replace(/[^a-z ]/ig,""),[],{onexecute}).execute(),await Promise.race([scope(connection2,fn),new Promise((_,reject)=>connection2.onclose=reject)])}catch(error){throw error}async function scope(c,fn2,name){let sql2=Sql(handler2);sql2.savepoint=savepoint,sql2.prepare=(x)=>prepare=x.replace(/[^a-z0-9$-_. ]/gi);let uncaughtError,result2;name&&await sql2`savepoint ${sql2(name)}`;try{if(result2=await new Promise((resolve2,reject)=>{let x=fn2(sql2);Promise.resolve(Array.isArray(x)?Promise.all(x):x).then(resolve2,reject)}),uncaughtError)throw uncaughtError}catch(e){throw await(name?sql2`rollback to ${sql2(name)}`:sql2`rollback`),e instanceof PostgresError&&e.code==="25P02"&&uncaughtError||e}if(!name)prepare?await sql2`prepare transaction '${sql2.unsafe(prepare)}'`:await sql2`commit`;return result2;function savepoint(name2,fn3){if(name2&&Array.isArray(name2.raw))return savepoint((sql3)=>sql3.apply(sql3,arguments));return arguments.length===1&&(fn3=name2,name2=null),scope(c,fn3,"s"+savepoints+++(name2?"_"+name2:""))}function handler2(q){q.catch((e)=>uncaughtError||(uncaughtError=e)),c.queue===full?queries2.push(q):c.execute(q)||move(c,full)}}function onexecute(c){connection2=c,move(c,reserved),c.reserved=()=>queries2.length?c.execute(queries2.shift()):move(c,reserved)}}function move(c,queue){return c.queue.remove(c),queue.push(c),c.queue=queue,queue===open3?c.idleTimer.start():c.idleTimer.cancel(),c}function json2(x){return new Parameter(x,3802)}function array(x,type2){if(!Array.isArray(x))return array(Array.from(arguments));return new Parameter(x,type2||(x.length?inferType(x)||25:0),options.shared.typeArrayMap)}function handler(query){if(ending)return query.reject(Errors.connection("CONNECTION_ENDED",options,options));if(open3.length)return go(open3.shift(),query);if(closed.length)return connect(closed.shift(),query);busy.length?go(busy.shift(),query):queries.push(query)}function go(c,query){return c.execute(query)?move(c,busy):move(c,full)}function cancel(query){return new Promise((resolve2,reject)=>{query.state?query.active?connection_default(options).cancel(query.state,resolve2,reject):query.cancelled={resolve:resolve2,reject}:(queries.remove(query),query.cancelled=!0,query.reject(Errors.generic("57014","canceling statement due to user request")),resolve2())})}async function end({timeout=null}={}){if(ending)return ending;await 1;let timer2;return ending=Promise.race([new Promise((r)=>timeout!==null&&(timer2=setTimeout(destroy,timeout*1000,r))),Promise.all(connections.map((c)=>c.end()).concat(listen.sql?listen.sql.end({timeout:0}):[],subscribe.sql?subscribe.sql.end({timeout:0}):[]))]).then(()=>clearTimeout(timer2))}async function close(){await Promise.all(connections.map((c)=>c.end()))}async function destroy(resolve2){await Promise.all(connections.map((c)=>c.terminate()));while(queries.length)queries.shift().reject(Errors.connection("CONNECTION_DESTROYED",options));resolve2()}function connect(c,query){return move(c,connecting),c.connect(query),c}function onend(c){move(c,ended)}function onopen(c){if(queries.length===0)return move(c,open3);let max=Math.ceil(queries.length/(connecting.length+1)),ready=!0;while(ready&&queries.length&&max-- >0){let query=queries.shift();if(query.reserve)return query.reserve(c);ready=c.execute(query)}ready?move(c,busy):move(c,full)}function onclose(c,e){move(c,closed),c.reserved=null,c.onclose&&(c.onclose(e),c.onclose=null),options.onclose&&options.onclose(c.id),queries.length&&connect(c,queries.shift())}}function parseOptions(a,b2){if(a&&a.shared)return a;let env=process.env,o=(!a||typeof a==="string"?b2:a)||{},{url,multihost}=parseUrl(a),query=[...url.searchParams].reduce((a2,[b3,c])=>(a2[b3]=c,a2),{}),host=o.hostname||o.host||multihost||url.hostname||env.PGHOST||"localhost",port=o.port||url.port||env.PGPORT||5432,user=o.user||o.username||url.username||env.PGUSERNAME||env.PGUSER||osUsername();o.no_prepare&&(o.prepare=!1),query.sslmode&&(query.ssl=query.sslmode,delete query.sslmode),"timeout"in o&&(console.log("The timeout option is deprecated, use idle_timeout instead"),o.idle_timeout=o.timeout),query.sslrootcert==="system"&&(query.ssl="verify-full");let ints=["idle_timeout","connect_timeout","max_lifetime","max_pipeline","backoff","keep_alive"],defaults={max:globalThis.Cloudflare?3:10,ssl:!1,sslnegotiation:null,idle_timeout:null,connect_timeout:30,max_lifetime,max_pipeline:100,backoff,keep_alive:60,prepare:!0,debug:!1,fetch_types:!0,publications:"alltables",target_session_attrs:null};return{host:Array.isArray(host)?host:host.split(",").map((x)=>x.split(":")[0]),port:Array.isArray(port)?port:host.split(",").map((x)=>parseInt(x.split(":")[1]||port)),path:o.path||host.indexOf("/")>-1&&host+"/.s.PGSQL."+port,database:o.database||o.db||(url.pathname||"").slice(1)||env.PGDATABASE||user,user,pass:o.pass||o.password||url.password||env.PGPASSWORD||"",...Object.entries(defaults).reduce((acc,[k,d])=>{let value=k in o?o[k]:(k in query)?query[k]==="disable"||query[k]==="false"?!1:query[k]:env["PG"+k.toUpperCase()]||d;return acc[k]=typeof value==="string"&&ints.includes(k)?+value:value,acc},{}),connection:{application_name:env.PGAPPNAME||"postgres.js",...o.connection,...Object.entries(query).reduce((acc,[k,v])=>((k in defaults)||(acc[k]=v),acc),{})},types:o.types||{},target_session_attrs:tsa(o,url,env),onnotice:o.onnotice,onnotify:o.onnotify,onclose:o.onclose,onparameter:o.onparameter,socket:o.socket,transform:parseTransform(o.transform||{undefined:void 0}),parameters:{},shared:{retries:0,typeArrayMap:{}},...mergeUserTypes(o.types)}}function tsa(o,url,env){let x=o.target_session_attrs||url.searchParams.get("target_session_attrs")||env.PGTARGETSESSIONATTRS;if(!x||["read-write","read-only","primary","standby","prefer-standby"].includes(x))return x;throw Error("target_session_attrs "+x+" is not supported")}function backoff(retries){return(0.5+Math.random()/2)*Math.min(3**retries/100,20)}function max_lifetime(){return 60*(30+Math.random()*30)}function parseTransform(x){return{undefined:x.undefined,column:{from:typeof x.column==="function"?x.column:x.column&&x.column.from,to:x.column&&x.column.to},value:{from:typeof x.value==="function"?x.value:x.value&&x.value.from,to:x.value&&x.value.to},row:{from:typeof x.row==="function"?x.row:x.row&&x.row.from,to:x.row&&x.row.to}}}function parseUrl(url){if(!url||typeof url!=="string")return{url:{searchParams:new Map}};let host=url;host=host.slice(host.indexOf("://")+3).split(/[?/]/)[0],host=decodeURIComponent(host.slice(host.indexOf("@")+1));let urlObj=new URL(url.replace(host,host.split(",")[0]));return{url:{username:decodeURIComponent(urlObj.username),password:decodeURIComponent(urlObj.password),host:urlObj.host,hostname:urlObj.hostname,port:urlObj.port,pathname:urlObj.pathname,searchParams:urlObj.searchParams},multihost:host.indexOf(",")>-1&&host}}function osUsername(){try{return os.userInfo().username}catch(_){return process.env.USERNAME||process.env.USER||process.env.LOGNAME}}var src_default;var init_src=__esm(()=>{init_types3();init_connection();init_query();init_queue();init_errors2();init_large();Object.assign(Postgres,{PostgresError,toPascal,pascal,toCamel,camel,toKebab,kebab,fromPascal,fromCamel,fromKebab,BigInt:{to:20,from:[20],parse:(x)=>BigInt(x),serialize:(x)=>x.toString()}});src_default=Postgres});async function maybePromptV1Migration(target){if(promptedThisProcess)return;if(promptedThisProcess=!0,process.env.GENIE_NO_V1_PROMPT==="1")return;if(process.env.GENIE_QUIET==="1")return;if(process.env.GENIE_TEST_DB_NAME)return;if(process.env.GENIE_NO_BANNER==="1")return;let detection;try{detection=await detectV1State(target)}catch{return}if(!detection.v1Exists)return;if(detection.alreadyMigrated)return;let{tasks=0,wishes=0,teams=0,sessions=0}=detection.v1Counts??{};if(tasks===0&&wishes===0&&teams===0&&sessions===0)return;if(!Boolean(process.stderr.isTTY)){process.stderr.write(`[genie] \u24D8 Legacy v1 data detected (${tasks} tasks, ${wishes} wishes, ${teams} teams, ${sessions} sessions).
709
607
  Run \`genie db migrate-v1\` to import. Suppress with GENIE_NO_V1_PROMPT=1.
710
608
  `);return}process.stderr.write(`[genie] \u26A0 Legacy v1 data detected (${tasks} tasks, ${wishes} wishes, ${teams} teams, ${sessions} sessions, last 30d).
711
609
  Run \`genie db migrate-v1\` to import.
@@ -725,19 +623,121 @@ ${bin} set-option -w pane-active-border-style "fg=$COLOR"
725
623
  )
726
624
  `)}async function recordMigrationComplete(target,sourceDb,rowsCopied){await ensureMigrationStateTable(target),await target.unsafe(`INSERT INTO _genie_migration_state (source_db, rows_copied)
727
625
  VALUES ($1, $2::jsonb)
728
- ON CONFLICT (source_db) DO UPDATE SET completed_at = now(), rows_copied = EXCLUDED.rows_copied`,[sourceDb,JSON.stringify(rowsCopied)])}var V1_DB_NAME="genie",PG_USER="postgres",PG_PASS="postgres",PG_HOST="127.0.0.1",promptedThisProcess=!1;var init_v1_migration_prompt=__esm(()=>{init_src()});var exports_db={};__export(exports_db,{shutdown:()=>shutdown,runRetention:()=>runRetention,resolveTcpPgPassword:()=>resolveTcpPgPassword,resolvePgserveSocketDir:()=>resolvePgserveSocketDir,resolvePgserveLibpqSocketPath:()=>resolvePgserveLibpqSocketPath,resolvePgserveDaemonPidPath:()=>resolvePgserveDaemonPidPath,resolvePgserveControlSocketPath:()=>resolvePgserveControlSocketPath,resolvePgserveAuthPassword:()=>resolvePgserveAuthPassword,resolveDatabaseName:()=>resolveDatabaseName,resetConnection:()=>resetConnection,requirePgserveDaemon:()=>requirePgserveDaemon,readPostmasterDiscovery:()=>readPostmasterDiscovery,probePgserveDaemon:()=>probePgserveDaemon,pinCwdToGeniePackageDir:()=>pinCwdToGeniePackageDir,isSocketMode:()=>isSocketMode,isConnected:()=>isConnected,isAvailable:()=>isAvailable,getLockfilePath:()=>getLockfilePath,getDataDir:()=>getDataDir,getConnection:()=>getConnection,getAuxiliaryPortBase:()=>getAuxiliaryPortBase,getActivePort:()=>getActivePort,ensurePgserve:()=>ensurePgserve,checkRootGuard:()=>checkRootGuard,autoStartDaemon:()=>autoStartDaemon,__setSpawnDaemonForTest:()=>__setSpawnDaemonForTest,DB_NAME:()=>DB_NAME});import{spawn}from"child_process";import{existsSync as existsSync13,mkdirSync as mkdirSync6,readFileSync as readFileSync9,renameSync,unlinkSync as unlinkSync3,writeFileSync as writeFileSync6}from"fs";import{createConnection}from"net";import{homedir as homedir11}from"os";import{dirname as dirname5,join as join17}from"path";function resolvePgserveSocketDir(){let xdg=process.env.XDG_RUNTIME_DIR,base=xdg&&xdg.length>0?xdg:"/tmp";return join17(base,"pgserve")}function resolveDatabaseName(){let testDbName=process.env.GENIE_TEST_DB_NAME;if(testDbName&&testDbName.length>0)return testDbName;return DB_NAME}function resolvePgserveAuthPassword(){let password=process.env.PGPASSWORD;return password&&password.length>0?password:DB_NAME}function resolvePgserveTimeoutMs(){let parsed=Number(process.env.GENIE_PGSERVE_TIMEOUT);return Number.isFinite(parsed)&&parsed>0?parsed:16000}function resolvePgConnectTimeoutSeconds(useSocket){let parsed=Number(process.env.GENIE_PG_CONNECT_TIMEOUT);if(Number.isFinite(parsed)&&parsed>0)return Math.ceil(parsed);if(!useSocket)return 5;return Math.max(16,Math.ceil(resolvePgserveTimeoutMs()/1000))}function resolveTcpPgPassword(){return resolvePgserveAuthPassword()}function resolvePgserveLibpqSocketPath(){return join17(resolvePgserveSocketDir(),".s.PGSQL.5432")}function resolvePgserveControlSocketPath(){return join17(resolvePgserveSocketDir(),"control.sock")}function resolvePgserveDaemonPidPath(){return join17(resolvePgserveSocketDir(),"pgserve.pid")}function readPostmasterDiscovery(){let file=join17(resolvePgserveSocketDir(),"admin.json");if(!existsSync13(file))return null;let raw;try{raw=readFileSync9(file,"utf-8")}catch{return null}let parsed;try{parsed=JSON.parse(raw)}catch{return null}if(!parsed||typeof parsed!=="object")return null;let obj=parsed,socketDir=typeof obj.socketDir==="string"&&obj.socketDir.length>0?obj.socketDir:null,port=typeof obj.port==="number"&&Number.isFinite(obj.port)&&obj.port>0?obj.port:null,pid=typeof obj.pid==="number"&&Number.isFinite(obj.pid)&&obj.pid>0?obj.pid:null;if(!socketDir||!port)return null;if(!existsSync13(join17(socketDir,`.s.PGSQL.${port}`)))return null;return{socketDir,port,pid:pid??-1}}function probePgserveDaemon(){let socketPresent=existsSync13(resolvePgserveLibpqSocketPath()),pid=liveDaemonPid(readDaemonPid(resolvePgserveDaemonPidPath()));if(socketPresent&&pid!==null)return{running:!0,pid,socketPresent:!0};if(!socketPresent&&pid===null)return{running:!1,pid:null,socketPresent:!1,reason:"no daemon"};return{running:!1,pid,socketPresent,reason:socketPresent?"socket present but pid stale":"pid alive but no socket"}}function readDaemonPid(pidPath){if(!existsSync13(pidPath))return null;try{let raw=readFileSync9(pidPath,"utf-8").trim(),parsed=Number.parseInt(raw,10);return Number.isInteger(parsed)&&parsed>0?parsed:null}catch{return null}}function liveDaemonPid(pid){if(pid===null)return null;try{return process.kill(pid,0),pid}catch(err){return err.code==="EPERM"?pid:null}}function resolveGeniePackageDir(){if(geniePackageDirCache!==void 0)return geniePackageDirCache;let PACKAGE_NAME="@automagik/genie",MAX_WALK_DEPTH=10,current=dirname5(import.meta.dir??__dirname);for(let depth=0;depth<MAX_WALK_DEPTH;depth++){let candidate=join17(current,"package.json");try{if(existsSync13(candidate)){if(JSON.parse(readFileSync9(candidate,"utf-8"))?.name===PACKAGE_NAME)return geniePackageDirCache=current,current}}catch{}let parent=dirname5(current);if(parent===current)break;current=parent}return geniePackageDirCache=null,null}function pinCwdToGeniePackageDir(){let previous=process.cwd();if(daemonCwdPinned)return{previous,pinned:previous};let dir=resolveGeniePackageDir();if(!dir)return{previous,pinned:null};try{if(process.cwd()!==dir)process.chdir(dir);return daemonCwdPinned=!0,{previous,pinned:dir}}catch{return{previous,pinned:null}}}async function requirePgserveDaemon(){let state=probePgserveDaemon();if(state.running&&await isPgserveSocketResponsive())return state;if(state.reason==="socket present but pid stale"&&await isPgserveSocketResponsive())return{running:!0,pid:null,socketPresent:!0,reason:"socket completes pgserve greeting but pid file is stale"};throw Error(buildPgserveUnavailableHint(state))}function buildPgserveUnavailableHint(state){return[`pgserve canonical daemon is not reachable (${state.reason??"no daemon"}).`,"Genie depends on the pm2-supervised pgserve singleton. Recovery:"," pm2 status # is pgserve registered?"," pm2 restart pgserve # OR: autopg restart"," pgserve install # if not registered yet","See https://github.com/automagik-dev/genie/blob/main/docs/install.md for details."].join(`
729
- `)}async function isPgserveSocketResponsive(){let candidates=[resolvePgserveLibpqSocketPath(),resolvePgserveControlSocketPath()].filter((path2)=>existsSync13(path2));for(let path2 of candidates)if(await canCompletePgserveGreet(path2))return!0;return!1}function canCompletePgserveGreet(path2){return new Promise((resolve3)=>{let settled=!1,timer2=null,socket=null,finish=(ok)=>{if(settled)return;if(settled=!0,timer2)clearTimeout(timer2);socket?.removeAllListeners(),socket?.destroy(),resolve3(ok)},request=Buffer.alloc(8);request.writeUInt32BE(8,0),request.writeUInt32BE(PG_SSL_REQUEST_CODE,4),socket=createConnection(path2),timer2=setTimeout(()=>finish(!1),PGSERVE_GREET_TIMEOUT_MS),timer2.unref(),socket.once("connect",()=>socket?.write(request)),socket.once("data",(chunk)=>finish(chunk[0]===78||chunk[0]===83)),socket.once("error",()=>finish(!1))})}function checkRootGuard(){if(process.getuid?.()!==0)return null;if(process.env.GENIE_ALLOW_ROOT==="1")return null;return"pgserve cannot start under uid 0 (root) \u2014 PostgreSQL refuses to run as root for security reasons. "+"Run genie as a non-root user, or set GENIE_ALLOW_ROOT=1 to attempt anyway. See: https://github.com/automagik-dev/genie/issues/1226"}function getPort(){let envPort=process.env.GENIE_PG_PORT;if(envPort){let parsed=Number.parseInt(envPort,10);if(!Number.isNaN(parsed)&&parsed>0&&parsed<65536)return parsed}return DEFAULT_PORT}async function isPostgresHealthy(port){try{return await Promise.race([(async()=>{let pg=(await Promise.resolve().then(() => (init_src(),exports_src))).default,probe=pg({host:DEFAULT_HOST,port,database:DB_NAME,username:DB_NAME,password:resolveTcpPgPassword(),max:1,connect_timeout:3,idle_timeout:1});try{return await probe`SELECT 1`,await probe.end({timeout:2}),!0}catch{try{await probe.end({timeout:1})}catch{}return!1}})(),new Promise((resolve3)=>{setTimeout(()=>resolve3(!1),4000).unref()})])}catch{return!1}}function readLockfile(){try{let content=readFileSync9(LOCKFILE_PATH,"utf-8").trim(),port=Number.parseInt(content,10);if(!Number.isNaN(port)&&port>0&&port<65536)return port}catch{}return null}function writeLockfile(port){try{mkdirSync6(GENIE_HOME,{recursive:!0});let tmpPath=`${LOCKFILE_PATH}.tmp.${process.pid}`;writeFileSync6(tmpPath,String(port),"utf-8"),renameSync(tmpPath,LOCKFILE_PATH)}catch{}}function removeLockfile(){try{unlinkSync3(LOCKFILE_PATH)}catch{}}async function runRetention(sql){if(retentionRan)return;try{await sql.unsafe(`
626
+ ON CONFLICT (source_db) DO UPDATE SET completed_at = now(), rows_copied = EXCLUDED.rows_copied`,[sourceDb,JSON.stringify(rowsCopied)])}var V1_DB_NAME="genie",PG_USER="postgres",PG_PASS="postgres",PG_HOST="127.0.0.1",promptedThisProcess=!1;var init_v1_migration_prompt=__esm(()=>{init_src()});var exports_db={};__export(exports_db,{shutdown:()=>shutdown,runRetention:()=>runRetention,resolveTcpPgPassword:()=>resolveTcpPgPassword,resolvePgserveSocketDir:()=>resolvePgserveSocketDir,resolvePgserveLibpqSocketPath:()=>resolvePgserveLibpqSocketPath,resolvePgserveDaemonPidPath:()=>resolvePgserveDaemonPidPath,resolvePgserveControlSocketPath:()=>resolvePgserveControlSocketPath,resolvePgserveAuthPassword:()=>resolvePgserveAuthPassword,resolveDatabaseName:()=>resolveDatabaseName,resetConnection:()=>resetConnection,requirePgserveDaemon:()=>requirePgserveDaemon,readPostmasterDiscovery:()=>readPostmasterDiscovery,probePgserveDaemon:()=>probePgserveDaemon,pinCwdToGeniePackageDir:()=>pinCwdToGeniePackageDir,isSocketMode:()=>isSocketMode,isConnected:()=>isConnected,isAvailable:()=>isAvailable,getLockfilePath:()=>getLockfilePath,getDataDir:()=>getDataDir,getConnection:()=>getConnection,getAuxiliaryPortBase:()=>getAuxiliaryPortBase,getActivePort:()=>getActivePort,ensurePgserve:()=>ensurePgserve,checkRootGuard:()=>checkRootGuard,autoStartDaemon:()=>autoStartDaemon,__setSpawnDaemonForTest:()=>__setSpawnDaemonForTest,DB_NAME:()=>DB_NAME});import{spawn}from"child_process";import{existsSync as existsSync11,mkdirSync as mkdirSync5,readFileSync as readFileSync7,renameSync,unlinkSync as unlinkSync3,writeFileSync as writeFileSync4}from"fs";import{createConnection}from"net";import{homedir as homedir10}from"os";import{dirname as dirname3,join as join14}from"path";function resolvePgserveSocketDir(){let xdg=process.env.XDG_RUNTIME_DIR,base=xdg&&xdg.length>0?xdg:"/tmp";return join14(base,"pgserve")}function resolveDatabaseName(){let testDbName=process.env.GENIE_TEST_DB_NAME;if(testDbName&&testDbName.length>0)return testDbName;return DB_NAME}function resolvePgserveAuthPassword(){let password=process.env.PGPASSWORD;return password&&password.length>0?password:DB_NAME}function resolvePgserveTimeoutMs(){let parsed=Number(process.env.GENIE_PGSERVE_TIMEOUT);return Number.isFinite(parsed)&&parsed>0?parsed:16000}function resolvePgConnectTimeoutSeconds(useSocket){let parsed=Number(process.env.GENIE_PG_CONNECT_TIMEOUT);if(Number.isFinite(parsed)&&parsed>0)return Math.ceil(parsed);if(!useSocket)return 5;return Math.max(16,Math.ceil(resolvePgserveTimeoutMs()/1000))}function resolveTcpPgPassword(){return resolvePgserveAuthPassword()}function resolvePgserveLibpqSocketPath(){return join14(resolvePgserveSocketDir(),".s.PGSQL.5432")}function resolvePgserveControlSocketPath(){return join14(resolvePgserveSocketDir(),"control.sock")}function resolvePgserveDaemonPidPath(){return join14(resolvePgserveSocketDir(),"pgserve.pid")}function readPostmasterDiscovery(){let file=join14(resolvePgserveSocketDir(),"admin.json");if(!existsSync11(file))return null;let raw;try{raw=readFileSync7(file,"utf-8")}catch{return null}let parsed;try{parsed=JSON.parse(raw)}catch{return null}if(!parsed||typeof parsed!=="object")return null;let obj=parsed,socketDir=typeof obj.socketDir==="string"&&obj.socketDir.length>0?obj.socketDir:null,port=typeof obj.port==="number"&&Number.isFinite(obj.port)&&obj.port>0?obj.port:null,pid=typeof obj.pid==="number"&&Number.isFinite(obj.pid)&&obj.pid>0?obj.pid:null;if(!socketDir||!port)return null;if(!existsSync11(join14(socketDir,`.s.PGSQL.${port}`)))return null;return{socketDir,port,pid:pid??-1}}function probePgserveDaemon(){let socketPresent=existsSync11(resolvePgserveLibpqSocketPath()),pid=liveDaemonPid(readDaemonPid(resolvePgserveDaemonPidPath()));if(socketPresent&&pid!==null)return{running:!0,pid,socketPresent:!0};if(!socketPresent&&pid===null)return{running:!1,pid:null,socketPresent:!1,reason:"no daemon"};return{running:!1,pid,socketPresent,reason:socketPresent?"socket present but pid stale":"pid alive but no socket"}}function readDaemonPid(pidPath){if(!existsSync11(pidPath))return null;try{let raw=readFileSync7(pidPath,"utf-8").trim(),parsed=Number.parseInt(raw,10);return Number.isInteger(parsed)&&parsed>0?parsed:null}catch{return null}}function liveDaemonPid(pid){if(pid===null)return null;try{return process.kill(pid,0),pid}catch(err){return err.code==="EPERM"?pid:null}}function resolveGeniePackageDir(){if(geniePackageDirCache!==void 0)return geniePackageDirCache;let PACKAGE_NAME="@automagik/genie",MAX_WALK_DEPTH=10,current=dirname3(import.meta.dir??__dirname);for(let depth=0;depth<MAX_WALK_DEPTH;depth++){let candidate=join14(current,"package.json");try{if(existsSync11(candidate)){if(JSON.parse(readFileSync7(candidate,"utf-8"))?.name===PACKAGE_NAME)return geniePackageDirCache=current,current}}catch{}let parent=dirname3(current);if(parent===current)break;current=parent}return geniePackageDirCache=null,null}function pinCwdToGeniePackageDir(){let previous=process.cwd();if(daemonCwdPinned)return{previous,pinned:previous};let dir=resolveGeniePackageDir();if(!dir)return{previous,pinned:null};try{if(process.cwd()!==dir)process.chdir(dir);return daemonCwdPinned=!0,{previous,pinned:dir}}catch{return{previous,pinned:null}}}async function requirePgserveDaemon(){let state=probePgserveDaemon();if(state.running&&await isPgserveSocketResponsive())return state;if(state.reason==="socket present but pid stale"&&await isPgserveSocketResponsive())return{running:!0,pid:null,socketPresent:!0,reason:"socket completes pgserve greeting but pid file is stale"};throw Error(buildPgserveUnavailableHint(state))}function buildPgserveUnavailableHint(state){return[`pgserve canonical daemon is not reachable (${state.reason??"no daemon"}).`,"Genie depends on the pm2-supervised pgserve singleton. Recovery:"," pm2 status # is pgserve registered?"," pm2 restart pgserve # OR: autopg restart"," pgserve install # if not registered yet","See https://github.com/automagik-dev/genie/blob/main/docs/install.md for details."].join(`
627
+ `)}async function isPgserveSocketResponsive(){let candidates=[resolvePgserveLibpqSocketPath(),resolvePgserveControlSocketPath()].filter((path2)=>existsSync11(path2));for(let path2 of candidates)if(await canCompletePgserveGreet(path2))return!0;return!1}function canCompletePgserveGreet(path2){return new Promise((resolve2)=>{let settled=!1,timer2=null,socket=null,finish=(ok)=>{if(settled)return;if(settled=!0,timer2)clearTimeout(timer2);socket?.removeAllListeners(),socket?.destroy(),resolve2(ok)},request=Buffer.alloc(8);request.writeUInt32BE(8,0),request.writeUInt32BE(PG_SSL_REQUEST_CODE,4),socket=createConnection(path2),timer2=setTimeout(()=>finish(!1),PGSERVE_GREET_TIMEOUT_MS),timer2.unref(),socket.once("connect",()=>socket?.write(request)),socket.once("data",(chunk)=>finish(chunk[0]===78||chunk[0]===83)),socket.once("error",()=>finish(!1))})}function checkRootGuard(){if(process.getuid?.()!==0)return null;if(process.env.GENIE_ALLOW_ROOT==="1")return null;return"pgserve cannot start under uid 0 (root) \u2014 PostgreSQL refuses to run as root for security reasons. "+"Run genie as a non-root user, or set GENIE_ALLOW_ROOT=1 to attempt anyway. See: https://github.com/automagik-dev/genie/issues/1226"}function getPort(){let envPort=process.env.GENIE_PG_PORT;if(envPort){let parsed=Number.parseInt(envPort,10);if(!Number.isNaN(parsed)&&parsed>0&&parsed<65536)return parsed}return DEFAULT_PORT}async function isPostgresHealthy(port){try{return await Promise.race([(async()=>{let pg=(await Promise.resolve().then(() => (init_src(),exports_src))).default,probe=pg({host:DEFAULT_HOST,port,database:DB_NAME,username:DB_NAME,password:resolveTcpPgPassword(),max:1,connect_timeout:3,idle_timeout:1});try{return await probe`SELECT 1`,await probe.end({timeout:2}),!0}catch{try{await probe.end({timeout:1})}catch{}return!1}})(),new Promise((resolve2)=>{setTimeout(()=>resolve2(!1),4000).unref()})])}catch{return!1}}function readLockfile(){try{let content=readFileSync7(LOCKFILE_PATH,"utf-8").trim(),port=Number.parseInt(content,10);if(!Number.isNaN(port)&&port>0&&port<65536)return port}catch{}return null}function writeLockfile(port){try{mkdirSync5(GENIE_HOME,{recursive:!0});let tmpPath=`${LOCKFILE_PATH}.tmp.${process.pid}`;writeFileSync4(tmpPath,String(port),"utf-8"),renameSync(tmpPath,LOCKFILE_PATH)}catch{}}function removeLockfile(){try{unlinkSync3(LOCKFILE_PATH)}catch{}}async function runRetention(sql){if(retentionRan)return;try{await sql.unsafe(`
730
628
  DELETE FROM heartbeats WHERE created_at < now() - interval '7 days';
731
629
  DELETE FROM machine_snapshots WHERE created_at < now() - interval '30 days';
732
630
  DELETE FROM audit_events WHERE entity_type LIKE 'otel_%' AND created_at < now() - interval '30 days';
733
631
  DELETE FROM genie_runtime_events WHERE created_at < now() - interval '14 days';
734
632
  `),retentionRan=!0}catch(retErr){retentionRan=!0;let msg=retErr instanceof Error?retErr.message:String(retErr);process.stderr.write(`[genie] retention cleanup warning: ${msg}
735
- `)}}async function ensurePgserve(){if(activePort===null){let testPort=await resolveTestPort();if(testPort!==null)return activePort=testPort,process.env.GENIE_PG_AVAILABLE="true",testPort}if(ensurePromise)return ensurePromise;ensurePromise=_ensurePgserve();try{return await ensurePromise}finally{ensurePromise=null}}function __setSpawnDaemonForTest(fn){spawnDaemon=fn??(()=>{let bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"serve","start","--headless","--foreground"],{detached:!0,stdio:"ignore",env:{...process.env,GENIE_IS_DAEMON:"1"}}).unref()})}function readPidFile(pidPath){try{return readFileSync9(pidPath,"utf-8").trim()||null}catch{return null}}function parsePidFile(raw){let sepIdx=raw.indexOf(":"),pid,recordedStartTime;if(sepIdx<0)pid=Number.parseInt(raw,10),recordedStartTime=null;else{pid=Number.parseInt(raw.slice(0,sepIdx),10);let tail=raw.slice(sepIdx+1).trim();recordedStartTime=tail===""||tail==="unknown"?null:tail}if(Number.isNaN(pid)||pid<=0)return null;return{pid,recordedStartTime}}function isServeAlive(pid,recordedStartTime){try{process.kill(pid,0)}catch{return!1}if(recordedStartTime===null)return!1;let currentStartTime=getProcessStartTime(pid);return currentStartTime!==null&&currentStartTime===recordedStartTime}function unlinkQuiet(path2){try{unlinkSync3(path2)}catch{}}async function autoStartDaemon(){let home=process.env.GENIE_HOME??GENIE_HOME,pidPath=join17(home,"serve.pid"),raw=readPidFile(pidPath);if(!raw){spawnDaemon();return}let parsed=parsePidFile(raw);if(!parsed){unlinkQuiet(pidPath),spawnDaemon();return}if(isServeAlive(parsed.pid,parsed.recordedStartTime))return;unlinkQuiet(pidPath),spawnDaemon()}async function resolveTestPort(){let raw=process.env.GENIE_TEST_PG_PORT;if(!raw)return null;let parsed=Number.parseInt(raw,10);if(Number.isNaN(parsed)||parsed<=0||parsed>=65536||!await isPostgresHealthy(parsed))throw Error(`GENIE_TEST_PG_PORT=${raw} set but not reachable`);return parsed}async function tryExistingPort(port){let portFromFile=readLockfile();if(portFromFile!==null&&await isPostgresHealthy(portFromFile))return activePort=portFromFile,process.env.GENIE_PG_AVAILABLE="true",portFromFile;if(await isPostgresHealthy(port))return activePort=port,process.env.GENIE_PG_AVAILABLE="true",writeLockfile(port),port;return null}async function _ensurePgserve(){if(activePort!==null)return activePort;let port=getPort(),existing=await tryExistingPort(port);if(existing!==null)return existing;throw process.env.GENIE_PG_AVAILABLE="false",Error([`pgserve TCP port ${port} is not reachable.`,"Genie is consumer-only after the canonical-pgserve cutover; it does not spawn pgserve.","Force-TCP mode (GENIE_PG_FORCE_TCP=1) requires you to start a TCP-listening pgserve yourself.","Recommended: drop GENIE_PG_FORCE_TCP and let genie connect via the canonical Unix socket:"," pm2 status # is pgserve registered?"," pm2 restart pgserve # OR: autopg restart"," pgserve install # if not registered yet"].join(`
633
+ `)}}async function ensurePgserve(){if(activePort===null){let testPort=await resolveTestPort();if(testPort!==null)return activePort=testPort,process.env.GENIE_PG_AVAILABLE="true",testPort}if(ensurePromise)return ensurePromise;ensurePromise=_ensurePgserve();try{return await ensurePromise}finally{ensurePromise=null}}function __setSpawnDaemonForTest(fn){spawnDaemon=fn??(()=>{let bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"serve","start","--headless","--foreground"],{detached:!0,stdio:"ignore",env:{...process.env,GENIE_IS_DAEMON:"1"}}).unref()})}function readPidFile(pidPath){try{return readFileSync7(pidPath,"utf-8").trim()||null}catch{return null}}function parsePidFile(raw){let sepIdx=raw.indexOf(":"),pid,recordedStartTime;if(sepIdx<0)pid=Number.parseInt(raw,10),recordedStartTime=null;else{pid=Number.parseInt(raw.slice(0,sepIdx),10);let tail=raw.slice(sepIdx+1).trim();recordedStartTime=tail===""||tail==="unknown"?null:tail}if(Number.isNaN(pid)||pid<=0)return null;return{pid,recordedStartTime}}function isServeAlive(pid,recordedStartTime){try{process.kill(pid,0)}catch{return!1}if(recordedStartTime===null)return!1;let currentStartTime=getProcessStartTime(pid);return currentStartTime!==null&&currentStartTime===recordedStartTime}function unlinkQuiet(path2){try{unlinkSync3(path2)}catch{}}async function autoStartDaemon(){let home=process.env.GENIE_HOME??GENIE_HOME,pidPath=join14(home,"serve.pid"),raw=readPidFile(pidPath);if(!raw){spawnDaemon();return}let parsed=parsePidFile(raw);if(!parsed){unlinkQuiet(pidPath),spawnDaemon();return}if(isServeAlive(parsed.pid,parsed.recordedStartTime))return;unlinkQuiet(pidPath),spawnDaemon()}async function resolveTestPort(){let raw=process.env.GENIE_TEST_PG_PORT;if(!raw)return null;let parsed=Number.parseInt(raw,10);if(Number.isNaN(parsed)||parsed<=0||parsed>=65536||!await isPostgresHealthy(parsed))throw Error(`GENIE_TEST_PG_PORT=${raw} set but not reachable`);return parsed}async function tryExistingPort(port){let portFromFile=readLockfile();if(portFromFile!==null&&await isPostgresHealthy(portFromFile))return activePort=portFromFile,process.env.GENIE_PG_AVAILABLE="true",portFromFile;if(await isPostgresHealthy(port))return activePort=port,process.env.GENIE_PG_AVAILABLE="true",writeLockfile(port),port;return null}async function _ensurePgserve(){if(activePort!==null)return activePort;let port=getPort(),existing=await tryExistingPort(port);if(existing!==null)return existing;throw process.env.GENIE_PG_AVAILABLE="false",Error([`pgserve TCP port ${port} is not reachable.`,"Genie is consumer-only after the canonical-pgserve cutover; it does not spawn pgserve.","Force-TCP mode (GENIE_PG_FORCE_TCP=1) requires you to start a TCP-listening pgserve yourself.","Recommended: drop GENIE_PG_FORCE_TCP and let genie connect via the canonical Unix socket:"," pm2 status # is pgserve registered?"," pm2 restart pgserve # OR: autopg restart"," pgserve install # if not registered yet"].join(`
736
634
  `))}function registerExitHandler(){if(exitHandlerRegistered)return;exitHandlerRegistered=!0;let cleanup=()=>{if(sqlClient){let dying=sqlClient;sqlClient=null,dying.end({timeout:1}).catch(()=>{})}if(ownsLockfile)removeLockfile(),ownsLockfile=!1};process.on("exit",cleanup),process.on("beforeExit",()=>{shutdown().catch(()=>{})})}async function healthCheckCachedClient(){if(!sqlClient)return null;try{return await sqlClient`SELECT 1`,sqlClient}catch{let dying=sqlClient;if(!dying)return null;return sqlClient=null,activePort=null,dying.end({timeout:5}).catch(()=>{}),null}}async function runPostConnectSetup(client,isTestMode,timings){let _t2=Date.now(),skipBoot=isTestMode||process.env.GENIE_SKIP_DB_BOOT==="1";if(!skipBoot)await runMigrations(client);let _t3=Date.now();if(!skipBoot&&(needsSeed()||await needsSeededTeams(client)))await runSeed(client);if(!skipBoot)await maybePromptV1Migration(client);let _t4=Date.now(),_t5=_t4;if(process.env.GENIE_PROFILE_DB)console.error(`[db-profile] pgserve=${timings.t1-timings.t0}ms migrate=${_t3-_t2}ms seed=${_t4-_t3}ms retention=skipped total=${_t5-timings.t0}ms`)}async function getConnection(){let cached=await healthCheckCachedClient();if(cached)return cached;if(buildPromise)return buildPromise;buildPromise=_buildConnection();try{return await buildPromise}finally{buildPromise=null}}function shouldUseUnixSocket(){if(process.env.GENIE_PG_FORCE_TCP==="1")return!1;if(process.env.GENIE_TEST_PG_PORT)return!1;return!0}async function maybePrintBanner(client,isTestMode){if(bannerPrinted||isTestMode)return;if(process.env.GENIE_QUIET==="1"||process.env.GENIE_NO_BANNER==="1"){bannerPrinted=!0;return}try{let db=(await client.unsafe("SELECT current_database() AS db"))[0]?.db;if(typeof db==="string"&&db.length>0)process.stderr.write(`[pgserve] connected to ${db}
737
635
  `)}catch{}bannerPrinted=!0}async function _buildConnection(){let _t0=Date.now(),useSocket=shouldUseUnixSocket();if(useSocket)await requirePgserveDaemon();let discovery=useSocket?readPostmasterDiscovery():null,port=useSocket?discovery?.port??5432:await ensurePgserve(),_t1=Date.now(),pgModule=(await Promise.resolve().then(() => (init_src(),exports_src))).default,database=resolveDatabaseName(),isTestMode=Boolean(process.env.GENIE_TEST_DB_NAME),pgWireCredential=useSocket?resolvePgserveAuthPassword():resolveTcpPgPassword(),host=useSocket?discovery?.socketDir??resolvePgserveSocketDir():DEFAULT_HOST,cliShortLived=!daemonCwdPinned&&!isTestMode&&process.env.GENIE_SKIP_DB_BOOT==="1",originalCwd=process.cwd(),pkgDir=resolveGeniePackageDir(),shouldRestoreCwd=!daemonCwdPinned&&!isTestMode,pinned=!1;if(pkgDir&&process.cwd()!==pkgDir)try{process.chdir(pkgDir),pinned=!0}catch(err){let msg=err instanceof Error?err.message:String(err);process.stderr.write(`[pgserve] WARN: failed to pin cwd to ${pkgDir}: ${msg}
738
636
  `)}else if(!pkgDir)process.stderr.write(`[pgserve] WARN: could not resolve genie package dir; pgserve fingerprint may be unstable
739
637
  `);let client=pgModule({host,port,database,username:DB_NAME,[PG_AUTH_FIELD]:pgWireCredential,max:cliShortLived?1:50,idle_timeout:cliShortLived?0:1,connect_timeout:resolvePgConnectTimeoutSeconds(useSocket),onnotice:()=>{},connection:{client_min_messages:"warning"}});sqlClient=client;try{if(await client`SELECT 1`,registerExitHandler(),await runPostConnectSetup(client,isTestMode,{t0:_t0,t1:_t1}),await maybePrintBanner(client,isTestMode),useSocket)activePort=SOCKET_PORT_SENTINEL,process.env.GENIE_PG_AVAILABLE="true"}catch(err){if(sqlClient===client)sqlClient=null;throw activePort=null,client.end({timeout:2}).catch(()=>{}),err}finally{if(pinned&&shouldRestoreCwd&&process.cwd()!==originalCwd)try{process.chdir(originalCwd)}catch(err){let msg=err instanceof Error?err.message:String(err);process.stderr.write(`[pgserve] WARN: failed to restore cwd to ${originalCwd}: ${msg}
740
- `)}}return client}function isConnected(){return sqlClient!==null}async function resetConnection(){if(sqlClient){let dying=sqlClient;sqlClient=null,await dying.end({timeout:5})}}async function isAvailable(){try{return await(await getConnection())`SELECT 1`,!0}catch{return!1}}async function shutdown(){if(sqlClient)await sqlClient.end({timeout:5}),sqlClient=null;if(ownsLockfile)removeLockfile(),ownsLockfile=!1}function getDataDir(){return DATA_DIR}function getActivePort(){return activePort??getPort()}function getAuxiliaryPortBase(){return activePort===SOCKET_PORT_SENTINEL?getPort():getActivePort()}function isSocketMode(){return activePort===SOCKET_PORT_SENTINEL}function getLockfilePath(){return LOCKFILE_PATH}var __dirname="/home/runner/_work/genie/genie/src/lib",DEFAULT_PORT=19642,DEFAULT_HOST="127.0.0.1",SOCKET_PORT_SENTINEL=0,GENIE_HOME,DATA_DIR,LOCKFILE_PATH,PG_AUTH_FIELD,PG_SSL_REQUEST_CODE=80877103,PGSERVE_GREET_TIMEOUT_MS=1000,DB_NAME,sqlClient=null,activePort=null,ensurePromise=null,geniePackageDirCache=void 0,daemonCwdPinned=!1,buildPromise=null,ownsLockfile=!1,exitHandlerRegistered=!1,retentionRan=!1,spawnDaemon=()=>{let bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"serve","start","--headless","--foreground"],{detached:!0,stdio:"ignore",env:{...process.env,GENIE_IS_DAEMON:"1"}}).unref()},bannerPrinted=!1;var init_db=__esm(()=>{init_db_migrations();init_pg_seed();init_process_identity();init_v1_migration_prompt();GENIE_HOME=process.env.GENIE_HOME??join17(homedir11(),".genie"),DATA_DIR=join17(GENIE_HOME,"data","pgserve"),LOCKFILE_PATH=join17(GENIE_HOME,"pgserve.port"),PG_AUTH_FIELD=["pass","word"].join(""),DB_NAME=["post","gres"].join("")});import{createHmac as createHmac2}from"crypto";import{homedir as homedir12}from"os";function hashEntity(namespace,value){let key=process.env.GENIE_REDACTION_KEY??"genie-redaction-fallback";return`tier-a:${namespace}:${createHmac2("sha256",key).update(value).digest("hex").slice(0,16)}`}function dropSecretShaped(text){let out=text;for(let{name,pattern}of SECRET_PATTERNS)out=out.replace(pattern,`<REDACTED:${name}>`);return out}function stripEnvVars(text){return text.replace(ENV_ASSIGN,(_m,name)=>`${name}=<REDACTED>`)}function tokenizePath(p){let home=homedir12(),out=p;if(home&&out.startsWith(home))out=`~${out.slice(home.length)}`;let segments=out.split("/").filter(Boolean);if(segments.length>6){let head=segments.slice(0,3).join("/"),tail=segments.slice(-2).join("/");out=`${out.startsWith("/")?"/":""}${head}/\u2026/${tail}`}return out=out.replace(/\b[0-9a-f]{12,}\b/g,"<id>"),out}function redactFreeText(value){return stripEnvVars(dropSecretShaped(value))}function capPayload(body){let serialized;try{serialized=JSON.stringify(body)}catch{return{overflow:!0,content_hash:"unserializable",body:{overflow:!0}}}if(Buffer.byteLength(serialized,"utf8")<=MAX_PAYLOAD_BYTES)return{overflow:!1,body};let key=process.env.GENIE_REDACTION_KEY??"genie-redaction-fallback",digest=createHmac2("sha256",key).update(serialized).digest("hex").slice(0,16);return{overflow:!0,content_hash:digest,body:{overflow:!0,content_hash:digest,original_bytes:Buffer.byteLength(serialized,"utf8")}}}var SECRET_PATTERNS,SENSITIVE_ENV_NAME="[A-Z][A-Z0-9_]*(?:_KEY|_SECRET|_TOKEN|_PASSWORD|_PASS|_AUTH|_API_KEY)",ENV_ASSIGN,MAX_PAYLOAD_BYTES=65536;var init_redactors=__esm(()=>{SECRET_PATTERNS=[{name:"anthropic-key",pattern:/sk-ant-[A-Za-z0-9_-]{20,}/g},{name:"openai-key",pattern:/sk-[A-Za-z0-9]{20,}/g},{name:"github-token",pattern:/gh[pousr]_[A-Za-z0-9]{30,}/g},{name:"aws-access-key",pattern:/AKIA[0-9A-Z]{16}/g},{name:"aws-secret",pattern:/(?<![A-Za-z0-9])[A-Za-z0-9/+=]{40}(?![A-Za-z0-9])/g},{name:"bearer-token",pattern:/(?:Bearer|bearer)\s+[A-Za-z0-9._\-~+/=]{20,}/g},{name:"jwt",pattern:/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g},{name:"pem-header",pattern:/-----BEGIN [A-Z ]+ PRIVATE KEY-----/g},{name:"sensitive-path",pattern:/\/(?:[^\s"',;():]+\/)*\.(?:secrets|ssh|aws|gnupg|keys)(?:\/[^\s"',;():]*)?/g}];ENV_ASSIGN=new RegExp(`\\b(${SENSITIVE_ENV_NAME})\\s*[=:]\\s*([^\\s"',;]+)`,"g")});function tagTier(schema2,tier,note){let desc=`tier:${tier}${note?`; ${note}`:""}`;return schema2.describe(desc)}var exports_agent_lifecycle={};__export(exports_agent_lifecycle,{schema:()=>schema2,TYPE:()=>TYPE,SCHEMA_VERSION:()=>SCHEMA_VERSION,KIND:()=>KIND});var SCHEMA_VERSION=1,TYPE="agent.lifecycle",KIND="span",AgentIdSchema,TeamSchema,ExecutorSchema,SessionIdSchema,CwdSchema,ExitReasonSchema,DurationSchema,schema2;var init_agent_lifecycle=__esm(()=>{init_zod();init_redactors();AgentIdSchema=tagTier(exports_external.string().min(1).max(256),"B","agent name \u2014 public"),TeamSchema=tagTier(exports_external.string().min(1).max(256).optional(),"B"),ExecutorSchema=tagTier(exports_external.enum(["claude-code","claude-sdk","codex","shell"]),"C"),SessionIdSchema=tagTier(exports_external.string().min(1).max(128).transform((v)=>hashEntity("session",v)),"A","session id hashed"),CwdSchema=tagTier(exports_external.string().max(1024).transform(tokenizePath),"B"),ExitReasonSchema=tagTier(exports_external.enum(["stopped","killed","crashed","idle-suspend","completed"]),"C"),DurationSchema=tagTier(exports_external.number().int().min(0),"C","ms"),schema2=exports_external.object({agent_id:AgentIdSchema,team:TeamSchema,executor:ExecutorSchema,session_id:SessionIdSchema.optional(),cwd:CwdSchema.optional(),exit_reason:ExitReasonSchema.optional(),duration_ms:DurationSchema.optional()}).strict()});var exports_agent_resume_attempted={};__export(exports_agent_resume_attempted,{schema:()=>schema3,TYPE:()=>TYPE2,SCHEMA_VERSION:()=>SCHEMA_VERSION2,KIND:()=>KIND2});var SCHEMA_VERSION2=1,TYPE2="agent.resume.attempted",KIND2="event",AGENT_STATES,EntityIdSchema,AttemptNumberSchema,StateSchema,LastErrorSchema,TriggerSchema,schema3;var init_agent_resume_attempted=__esm(()=>{init_zod();init_redactors();AGENT_STATES=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema=tagTier(exports_external.enum(AGENT_STATES),"C"),LastErrorSchema=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),schema3=exports_external.object({entity_id:EntityIdSchema,attempt_number:AttemptNumberSchema,state_before:StateSchema,state_after:StateSchema,last_error:LastErrorSchema,trigger:TriggerSchema}).strict()});var exports_agent_resume_failed={};__export(exports_agent_resume_failed,{schema:()=>schema4,TYPE:()=>TYPE3,SCHEMA_VERSION:()=>SCHEMA_VERSION3,KIND:()=>KIND3});var SCHEMA_VERSION3=1,TYPE3="agent.resume.failed",KIND3="event",AGENT_STATES2,EntityIdSchema2,AttemptNumberSchema2,StateSchema2,LastErrorSchema2,TriggerSchema2,ExhaustedSchema,schema4;var init_agent_resume_failed=__esm(()=>{init_zod();init_redactors();AGENT_STATES2=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema2=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema2=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema2=tagTier(exports_external.enum(AGENT_STATES2),"C"),LastErrorSchema2=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema2=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),ExhaustedSchema=tagTier(exports_external.boolean(),"C"),schema4=exports_external.object({entity_id:EntityIdSchema2,attempt_number:AttemptNumberSchema2,state_before:StateSchema2,state_after:StateSchema2,last_error:LastErrorSchema2,trigger:TriggerSchema2,exhausted:ExhaustedSchema}).strict()});var exports_agent_resume_succeeded={};__export(exports_agent_resume_succeeded,{schema:()=>schema5,TYPE:()=>TYPE4,SCHEMA_VERSION:()=>SCHEMA_VERSION4,KIND:()=>KIND4});var SCHEMA_VERSION4=1,TYPE4="agent.resume.succeeded",KIND4="event",AGENT_STATES3,EntityIdSchema3,AttemptNumberSchema3,StateSchema3,LastErrorSchema3,TriggerSchema3,schema5;var init_agent_resume_succeeded=__esm(()=>{init_zod();init_redactors();AGENT_STATES3=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema3=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema3=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema3=tagTier(exports_external.enum(AGENT_STATES3),"C"),LastErrorSchema3=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema3=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),schema5=exports_external.object({entity_id:EntityIdSchema3,attempt_number:AttemptNumberSchema3,state_before:StateSchema3,state_after:StateSchema3,last_error:LastErrorSchema3,trigger:TriggerSchema3}).strict()});var exports_audit_export={};__export(exports_audit_export,{schema:()=>schema6,TYPE:()=>TYPE5,SCHEMA_VERSION:()=>SCHEMA_VERSION5,KIND:()=>KIND5,DEFAULT_TIER:()=>DEFAULT_TIER});var SCHEMA_VERSION5=1,TYPE5="audit.export",KIND5="event",DEFAULT_TIER="audit",ExporterActorSchema,SinceIdSchema,RowCountSchema,BreakCountSchema,BundleSignaturePrefixSchema,TenantIdSchema,ReasonSchema,schema6;var init_audit_export=__esm(()=>{init_zod();init_redactors();ExporterActorSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A"),SinceIdSchema=tagTier(exports_external.number().int().min(0),"C"),RowCountSchema=tagTier(exports_external.number().int().min(0),"C"),BreakCountSchema=tagTier(exports_external.number().int().min(0),"C","chain breaks detected in the exported range"),BundleSignaturePrefixSchema=tagTier(exports_external.string().min(1).max(16),"C","first 16 hex of the bundle HMAC signature (full is on disk)"),TenantIdSchema=tagTier(exports_external.string().min(1).max(128),"C"),ReasonSchema=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)),"B","IR justification for the export"),schema6=exports_external.object({exporter_actor:ExporterActorSchema,since_id:SinceIdSchema,row_count:RowCountSchema,break_count:BreakCountSchema,bundle_signature_prefix:BundleSignaturePrefixSchema,tenant_id:TenantIdSchema,reason:ReasonSchema}).strict()});var exports_audit_un_hash={};__export(exports_audit_un_hash,{schema:()=>schema7,TYPE:()=>TYPE6,SCHEMA_VERSION:()=>SCHEMA_VERSION6,KIND:()=>KIND6,DEFAULT_TIER:()=>DEFAULT_TIER2});var SCHEMA_VERSION6=1,TYPE6="audit.un_hash",KIND6="event",DEFAULT_TIER2="audit",AdminActorSchema,NamespaceSchema,HashedValueSchema,ResolvedMarkerSchema,ReasonSchema2,TicketRefSchema,schema7;var init_audit_un_hash=__esm(()=>{init_zod();init_redactors();AdminActorSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A","admin who performed the un-hash (Tier-A hashed)"),NamespaceSchema=tagTier(exports_external.string().min(1).max(64),"C"),HashedValueSchema=tagTier(exports_external.string().min(1).max(256),"B","tier-a:ns:... source hash requested"),ResolvedMarkerSchema=tagTier(exports_external.boolean(),"C","true if un-hash succeeded"),ReasonSchema2=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)),"B","IR justification for the un-hash"),TicketRefSchema=tagTier(exports_external.string().max(128).optional(),"C","incident ticket reference"),schema7=exports_external.object({admin_actor:AdminActorSchema,namespace:NamespaceSchema,hashed_value:HashedValueSchema,resolved:ResolvedMarkerSchema,reason:ReasonSchema2,ticket_ref:TicketRefSchema}).strict()});var exports_cache_hit={};__export(exports_cache_hit,{schema:()=>schema8,TYPE:()=>TYPE7,SCHEMA_VERSION:()=>SCHEMA_VERSION7,KIND:()=>KIND7});var SCHEMA_VERSION7=1,TYPE7="cache.hit",KIND7="event",CacheSchema,HitSchema,KeyHintSchema,LatencyUsSchema,schema8;var init_cache_hit=__esm(()=>{init_zod();init_redactors();CacheSchema=tagTier(exports_external.string().min(1).max(128),"C"),HitSchema=tagTier(exports_external.boolean(),"C"),KeyHintSchema=tagTier(exports_external.string().max(128).transform((v)=>redactFreeText(v)).optional(),"B"),LatencyUsSchema=tagTier(exports_external.number().int().min(0).max(1e7).optional(),"C","microseconds"),schema8=exports_external.object({cache:CacheSchema,hit:HitSchema,key_hint:KeyHintSchema,latency_us:LatencyUsSchema}).strict()});var exports_cache_invalidate={};__export(exports_cache_invalidate,{schema:()=>schema9,TYPE:()=>TYPE8,SCHEMA_VERSION:()=>SCHEMA_VERSION8,KIND:()=>KIND8});var SCHEMA_VERSION8=1,TYPE8="cache.invalidate",KIND8="event",CacheSchema2,KeysInvalidatedSchema,ReasonSchema3,ScopeSchema,schema9;var init_cache_invalidate=__esm(()=>{init_zod();CacheSchema2=tagTier(exports_external.string().min(1).max(128),"C","cache name \u2014 public"),KeysInvalidatedSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),ReasonSchema3=tagTier(exports_external.enum(["ttl","manual","capacity","rotation","upstream_change"]).optional(),"C"),ScopeSchema=tagTier(exports_external.enum(["key","bucket","all"]).optional(),"C"),schema9=exports_external.object({cache:CacheSchema2,keys_invalidated:KeysInvalidatedSchema,reason:ReasonSchema3,scope:ScopeSchema}).strict()});var exports_cli_command={};__export(exports_cli_command,{schema:()=>schema10,TYPE:()=>TYPE9,SCHEMA_VERSION:()=>SCHEMA_VERSION9,KIND:()=>KIND9});var SCHEMA_VERSION9=1,TYPE9="cli.command",KIND9="span",CommandSchema,ArgsSchema,CwdSchema2,ExitCodeSchema,DurationSchema2,UserAgentSchema,schema10;var init_cli_command=__esm(()=>{init_zod();init_redactors();CommandSchema=tagTier(exports_external.string().max(256),"C","subcommand name only"),ArgsSchema=tagTier(exports_external.array(exports_external.string()).max(32).transform((args)=>args.map((a)=>redactFreeText(a))),"B","argv \u2014 secrets stripped, paths kept"),CwdSchema2=tagTier(exports_external.string().max(1024).transform(tokenizePath),"B","working directory tokenized"),ExitCodeSchema=tagTier(exports_external.number().int().min(-1).max(255),"C"),DurationSchema2=tagTier(exports_external.number().int().min(0).max(3600000),"C","milliseconds"),UserAgentSchema=tagTier(exports_external.string().max(256).optional(),"C"),schema10=exports_external.object({command:CommandSchema,args:ArgsSchema,cwd:CwdSchema2,exit_code:ExitCodeSchema.optional(),duration_ms:DurationSchema2.optional(),user_agent:UserAgentSchema}).strict().transform((v)=>({...v}))});var exports_consumer_heartbeat={};__export(exports_consumer_heartbeat,{schema:()=>schema11,TYPE:()=>TYPE10,SCHEMA_VERSION:()=>SCHEMA_VERSION10,KIND:()=>KIND10});var SCHEMA_VERSION10=1,TYPE10="consumer.heartbeat",KIND10="event",ConsumerIdSchema,LastEventIdSchema,BacklogDepthSchema,RoleSchema,UptimeSecondsSchema,schema11;var init_consumer_heartbeat=__esm(()=>{init_zod();init_redactors();ConsumerIdSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("consumer",v)),"A"),LastEventIdSchema=tagTier(exports_external.number().int().min(0).max(9007199254740991),"C"),BacklogDepthSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),RoleSchema=tagTier(exports_external.enum(["admin","operator","subscriber","audit"]).optional(),"C"),UptimeSecondsSchema=tagTier(exports_external.number().int().min(0).max(31536000).optional(),"C"),schema11=exports_external.object({consumer_id:ConsumerIdSchema,last_event_id_processed:LastEventIdSchema,backlog_depth:BacklogDepthSchema,role:RoleSchema,uptime_seconds:UptimeSecondsSchema}).strict()});var exports_consumer_lagged={};__export(exports_consumer_lagged,{schema:()=>schema12,TYPE:()=>TYPE11,SCHEMA_VERSION:()=>SCHEMA_VERSION11,KIND:()=>KIND11,DEFAULT_TIER:()=>DEFAULT_TIER3});var SCHEMA_VERSION11=1,TYPE11="consumer.lagged",KIND11="event",DEFAULT_TIER3="audit",CountSchema,SpillPathSchema,SeveritySchema,schema12;var init_consumer_lagged=__esm(()=>{init_zod();CountSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),SpillPathSchema=tagTier(exports_external.string().max(512),"B"),SeveritySchema=tagTier(exports_external.enum(["warn","error","fatal"]),"C"),schema12=exports_external.object({severity_class:SeveritySchema,spill_path:SpillPathSchema,rows_spilled:CountSchema,queue_depth:CountSchema,queue_cap:CountSchema}).strict()});var exports_correlation_orphan_rate={};__export(exports_correlation_orphan_rate,{schema:()=>schema13,TYPE:()=>TYPE12,SCHEMA_VERSION:()=>SCHEMA_VERSION12,KIND:()=>KIND12});var SCHEMA_VERSION12=1,TYPE12="correlation.orphan.rate",KIND12="event",RateSchema,CountSchema2,schema13;var init_correlation_orphan_rate=__esm(()=>{init_zod();RateSchema=tagTier(exports_external.number().min(0).max(1),"C"),CountSchema2=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema13=exports_external.object({window_samples:CountSchema2,orphans:CountSchema2,rate:RateSchema}).strict()});var exports_detector_disabled={};__export(exports_detector_disabled,{schema:()=>schema14,TYPE:()=>TYPE13,SCHEMA_VERSION:()=>SCHEMA_VERSION13,KIND:()=>KIND13});var SCHEMA_VERSION13=1,TYPE13="detector.disabled",KIND13="event",DetectorIdSchema,CauseSchema,BudgetSchema,FireCountSchema,BucketEndTsSchema,schema14;var init_detector_disabled=__esm(()=>{init_zod();DetectorIdSchema=tagTier(exports_external.string().min(1).max(128),"C"),CauseSchema=tagTier(exports_external.literal("fire_budget_exceeded"),"C"),BudgetSchema=tagTier(exports_external.number().int().min(1).max(1e6),"C","events per hour bucket"),FireCountSchema=tagTier(exports_external.number().int().min(0).max(1e6),"C","fires observed in this bucket"),BucketEndTsSchema=tagTier(exports_external.string().datetime({offset:!0}),"C","ISO-8601 timestamp when the current hour bucket expires"),schema14=exports_external.object({detector_id:DetectorIdSchema,cause:CauseSchema,budget:BudgetSchema,fire_count:FireCountSchema,bucket_end_ts:BucketEndTsSchema}).strict()});var exports_emit_backpressure_critical={};__export(exports_emit_backpressure_critical,{schema:()=>schema15,TYPE:()=>TYPE14,SCHEMA_VERSION:()=>SCHEMA_VERSION14,KIND:()=>KIND14,DEFAULT_TIER:()=>DEFAULT_TIER4});var SCHEMA_VERSION14=1,TYPE14="emit.backpressure.critical",KIND14="event",DEFAULT_TIER4="audit",SecondsSchema,CountSchema3,schema15;var init_emit_backpressure_critical=__esm(()=>{init_zod();SecondsSchema=tagTier(exports_external.number().min(0).max(86400),"C"),CountSchema3=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema15=exports_external.object({spill_duration_seconds:SecondsSchema,spill_rows_total:CountSchema3,queue_depth:CountSchema3,queue_cap:CountSchema3,recommended_action:tagTier(exports_external.enum(["scale_consumers","inspect_pg","restart_bridge"]).optional(),"C")}).strict()});var exports_emitter_latency_p99={};__export(exports_emitter_latency_p99,{schema:()=>schema16,TYPE:()=>TYPE15,SCHEMA_VERSION:()=>SCHEMA_VERSION15,KIND:()=>KIND15});var SCHEMA_VERSION15=1,TYPE15="emitter.latency_p99",KIND15="event",MillisSchema,SampleCountSchema,schema16;var init_emitter_latency_p99=__esm(()=>{init_zod();MillisSchema=tagTier(exports_external.number().min(0).max(600000),"C"),SampleCountSchema=tagTier(exports_external.number().int().min(1).max(1e6),"C"),schema16=exports_external.object({window_samples:SampleCountSchema,p50_ms:MillisSchema,p95_ms:MillisSchema,p99_ms:MillisSchema,max_ms:MillisSchema}).strict()});var exports_emitter_queue_depth={};__export(exports_emitter_queue_depth,{schema:()=>schema17,TYPE:()=>TYPE16,SCHEMA_VERSION:()=>SCHEMA_VERSION16,KIND:()=>KIND16});var SCHEMA_VERSION16=1,TYPE16="emitter.queue.depth",KIND16="event",DepthSchema,CapSchema,UtilizationSchema,schema17;var init_emitter_queue_depth=__esm(()=>{init_zod();DepthSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),CapSchema=tagTier(exports_external.number().int().min(1).max(1e7),"C"),UtilizationSchema=tagTier(exports_external.number().min(0).max(1),"C"),schema17=exports_external.object({depth:DepthSchema,cap:CapSchema,utilization:UtilizationSchema,enqueued_total:tagTier(exports_external.number().int().min(0).max(Number.MAX_SAFE_INTEGER),"C"),flushed_total:tagTier(exports_external.number().int().min(0).max(Number.MAX_SAFE_INTEGER),"C")}).strict()});var exports_emitter_rejected={};__export(exports_emitter_rejected,{schema:()=>schema18,TYPE:()=>TYPE17,SCHEMA_VERSION:()=>SCHEMA_VERSION17,KIND:()=>KIND17});var SCHEMA_VERSION17=1,TYPE17="emitter.rejected",KIND17="event",OffendingTypeSchema,ReasonSchema4,CountSchema4,schema18;var init_emitter_rejected=__esm(()=>{init_zod();OffendingTypeSchema=tagTier(exports_external.string().min(1).max(128),"C"),ReasonSchema4=tagTier(exports_external.enum(["schema_parse","unregistered","kind_mismatch","overflow_cap","queue_full"]),"C"),CountSchema4=tagTier(exports_external.number().int().min(1).max(1e7),"C"),schema18=exports_external.object({offending_type:OffendingTypeSchema,reason:ReasonSchema4,count:CountSchema4}).strict()});var exports_emitter_shedding_load={};__export(exports_emitter_shedding_load,{schema:()=>schema19,TYPE:()=>TYPE18,SCHEMA_VERSION:()=>SCHEMA_VERSION18,KIND:()=>KIND18});var SCHEMA_VERSION18=1,TYPE18="emitter.shedding_load",KIND18="event",CountSchema5,schema19;var init_emitter_shedding_load=__esm(()=>{init_zod();CountSchema5=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema19=exports_external.object({dropped_debug:CountSchema5,dropped_info:CountSchema5,spilled_warn_plus:CountSchema5,window_seconds:tagTier(exports_external.number().int().min(1).max(3600),"C")}).strict()});var exports_error_raised={};__export(exports_error_raised,{schema:()=>schema20,TYPE:()=>TYPE19,SCHEMA_VERSION:()=>SCHEMA_VERSION19,KIND:()=>KIND19});var SCHEMA_VERSION19=1,TYPE19="error.raised",KIND19="event",ErrorClassSchema,MessageSchema,StackSchema,SubsystemSchema,SeveritySchema2,RetryableSchema,schema20;var init_error_raised=__esm(()=>{init_zod();init_redactors();ErrorClassSchema=tagTier(exports_external.string().min(1).max(256),"C","exception class name"),MessageSchema=tagTier(exports_external.string().max(4096).transform(redactFreeText),"B"),StackSchema=tagTier(exports_external.string().max(16384).transform((stack)=>stack.split(`
638
+ `)}}return client}function isConnected(){return sqlClient!==null}async function resetConnection(){if(sqlClient){let dying=sqlClient;sqlClient=null,await dying.end({timeout:5})}}async function isAvailable(){try{return await(await getConnection())`SELECT 1`,!0}catch{return!1}}async function shutdown(){if(sqlClient)await sqlClient.end({timeout:5}),sqlClient=null;if(ownsLockfile)removeLockfile(),ownsLockfile=!1}function getDataDir(){return DATA_DIR}function getActivePort(){return activePort??getPort()}function getAuxiliaryPortBase(){return activePort===SOCKET_PORT_SENTINEL?getPort():getActivePort()}function isSocketMode(){return activePort===SOCKET_PORT_SENTINEL}function getLockfilePath(){return LOCKFILE_PATH}var __dirname="/home/runner/_work/genie/genie/src/lib",DEFAULT_PORT=19642,DEFAULT_HOST="127.0.0.1",SOCKET_PORT_SENTINEL=0,GENIE_HOME,DATA_DIR,LOCKFILE_PATH,PG_AUTH_FIELD,PG_SSL_REQUEST_CODE=80877103,PGSERVE_GREET_TIMEOUT_MS=1000,DB_NAME,sqlClient=null,activePort=null,ensurePromise=null,geniePackageDirCache=void 0,daemonCwdPinned=!1,buildPromise=null,ownsLockfile=!1,exitHandlerRegistered=!1,retentionRan=!1,spawnDaemon=()=>{let bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn(bunPath,[genieBin,"serve","start","--headless","--foreground"],{detached:!0,stdio:"ignore",env:{...process.env,GENIE_IS_DAEMON:"1"}}).unref()},bannerPrinted=!1;var init_db=__esm(()=>{init_db_migrations();init_pg_seed();init_process_identity();init_v1_migration_prompt();GENIE_HOME=process.env.GENIE_HOME??join14(homedir10(),".genie"),DATA_DIR=join14(GENIE_HOME,"data","pgserve"),LOCKFILE_PATH=join14(GENIE_HOME,"pgserve.port"),PG_AUTH_FIELD=["pass","word"].join(""),DB_NAME=["post","gres"].join("")});var{$:$2}=globalThis.Bun;async function checkCommand(cmd){try{let cmdPath=(await $2`which ${cmd}`.quiet().text()).trim();if(!cmdPath)return{exists:!1};let version;try{let firstLine=(await $2`${cmd} --version`.quiet().text()).split(`
639
+ `)[0].trim(),versionMatch=firstLine.match(/(\d+\.[\d.]+[a-z0-9-]*)/i);version=versionMatch?versionMatch[1]:firstLine.slice(0,50)}catch{try{let firstLine=(await $2`${cmd} -v`.quiet().text()).split(`
640
+ `)[0].trim(),versionMatch=firstLine.match(/(\d+\.[\d.]+[a-z0-9-]*)/i);version=versionMatch?versionMatch[1]:firstLine.slice(0,50)}catch{}}return{exists:!0,version,path:cmdPath}}catch{return{exists:!1}}}var init_system_detect=()=>{};var exports_workspace={};__export(exports_workspace,{validateWorkspaceDefaults:()=>validateWorkspaceDefaults,scanAgents:()=>scanAgents2,migrateWorkspaceConfig:()=>migrateWorkspaceConfig,getWorkspaceConfig:()=>getWorkspaceConfig,genieHome:()=>genieHome2,findWorkspace:()=>findWorkspace,AgentDefaultsSchema:()=>AgentDefaultsSchema});import{existsSync as existsSync12,mkdirSync as mkdirSync6,readFileSync as readFileSync8,readdirSync as readdirSync4,realpathSync as realpathSync2,writeFileSync as writeFileSync5}from"fs";import{homedir as homedir11,tmpdir as tmpdir2}from"os";import{dirname as dirname4,join as join15,resolve as resolve2,sep}from"path";function findWorkspace(cwd,opts){let startDir=resolve2(cwd??process.cwd()),current=startDir,userHome=opts?.userHome??homedir11();while(!0){if(current!==userHome){let candidate=join15(current,WORKSPACE_MARKER);if(existsSync12(candidate)){saveWorkspaceRoot(current);let agent=detectAgent(startDir,current);return{root:current,agent:agent??void 0}}}let parent=dirname4(current);if(parent===current)break;current=parent}let savedRoot=loadWorkspaceRoot();if(savedRoot&&savedRoot!==userHome&&existsSync12(join15(savedRoot,WORKSPACE_MARKER))){let agent=detectAgent(startDir,savedRoot);return{root:savedRoot,agent:agent??void 0}}return null}function genieHome2(){return process.env.GENIE_HOME??join15(homedir11(),".genie")}function isTempPath(root){try{let canonicalTmp=realpathSync2(tmpdir2()),canonicalRoot=realpathSync2(root);return canonicalRoot===canonicalTmp||canonicalRoot.startsWith(canonicalTmp+sep)}catch{return!0}}function saveWorkspaceRoot(root){if(isTempPath(root))return;try{let home=genieHome2(),configPath2=join15(home,"config.json"),config=existsSync12(configPath2)?JSON.parse(readFileSync8(configPath2,"utf-8")):{};if(config.workspaceRoot===root)return;config.workspaceRoot=root,mkdirSync6(home,{recursive:!0}),writeFileSync5(configPath2,`${JSON.stringify(config,null,2)}
641
+ `,"utf-8")}catch{}}function clearWorkspaceRoot(){try{let configPath2=join15(genieHome2(),"config.json");if(!existsSync12(configPath2))return;let config=JSON.parse(readFileSync8(configPath2,"utf-8"));if(config.workspaceRoot===void 0)return;config.workspaceRoot=void 0,writeFileSync5(configPath2,`${JSON.stringify(config,null,2)}
642
+ `,"utf-8")}catch{}}function loadWorkspaceRoot(){try{let configPath2=join15(genieHome2(),"config.json");if(!existsSync12(configPath2))return null;let config=JSON.parse(readFileSync8(configPath2,"utf-8")),saved=typeof config.workspaceRoot==="string"?config.workspaceRoot:null;if(!saved)return null;if(!existsSync12(join15(saved,WORKSPACE_MARKER)))return clearWorkspaceRoot(),null;return saved}catch{return null}}function detectAgent(startDir,workspaceRoot){let agentsDir=join15(workspaceRoot,"agents"),relative=startDir.slice(agentsDir.length);if(!startDir.startsWith(agentsDir)||relative.length>0&&relative[0]!==sep)return null;let parts=relative.split(sep).filter(Boolean);if(parts.length===0)return null;let agentName=parts[0],agentsMd=join15(agentsDir,agentName,"AGENTS.md");if(existsSync12(agentsMd))return agentName;return null}function getWorkspaceConfig(root){let configPath2=join15(root,WORKSPACE_MARKER),raw=readFileSync8(configPath2,"utf-8"),parsed=JSON.parse(raw);return migrateWorkspaceConfig(parsed)}function validateWorkspaceDefaults(config){if(!config.agents?.defaults)return;let result2=AgentDefaultsSchema.safeParse(config.agents.defaults);if(!result2.success){let issues=result2.error.issues.map((i2)=>` ${i2.path.join(".")}: ${i2.message}`).join(`
643
+ `);throw Error(`Invalid agents.defaults in workspace.json:
644
+ ${issues}`)}}function migrateWorkspaceConfig(raw){let config={...raw};if("tmuxSocket"in config&&typeof config.tmuxSocket==="string"&&!config.tmux)config.tmux={socket:config.tmuxSocket};if(!config.agents)config.agents={};if(!config.agents.defaults)config.agents.defaults={};if(!config.tmux)config.tmux={};if(!config.sdk)config.sdk={};return config}function scanAgents2(root){let agentsDir=join15(root,"agents");if(!existsSync12(agentsDir))return[];try{let entries=readdirSync4(agentsDir,{withFileTypes:!0}),names=[];for(let d of entries){if(!d.isDirectory()||!existsSync12(join15(agentsDir,d.name,"AGENTS.md")))continue;names.push(d.name),scanSubAgents(join15(agentsDir,d.name),d.name,names)}return names.sort()}catch{return[]}}function scanSubAgents(parentDir,parentName,out){let subDir=join15(parentDir,".genie","agents");if(!existsSync12(subDir))return;try{for(let sub of readdirSync4(subDir,{withFileTypes:!0}))if(sub.isDirectory()&&existsSync12(join15(subDir,sub.name,"AGENTS.md")))out.push(`${parentName}/${sub.name}`)}catch{}}var WORKSPACE_MARKER=".genie/workspace.json",AgentDefaultsSchema;var init_workspace=__esm(()=>{init_zod();AgentDefaultsSchema=exports_external.object({model:exports_external.string().optional(),promptMode:exports_external.enum(["system","append"]).optional(),color:exports_external.string().optional(),effort:exports_external.string().optional(),thinking:exports_external.string().optional(),permissionMode:exports_external.string().optional()}).strict()});import{writeFileSync as writeFileSync6}from"fs";import{join as join16}from"path";function renderAgentsTemplate(agentName,workspaceDefaults){let effective=computeEffectiveDefaults(workspaceDefaults),rendered=AGENTS_TEMPLATE;for(let key of Object.keys(BUILTIN_DEFAULTS))rendered=rendered.replace(`{{${key}}}`,effective[key]);if(agentName)rendered=rendered.replace(`---
645
+ #`,`---
646
+ name: ${agentName}
647
+ #`);return rendered}function scaffoldAgentFiles(targetDir,agentName,workspaceDefaults){if(agentName==="genie")writeFileSync6(join16(targetDir,"SOUL.md"),GENIE_SOUL_TEMPLATE),writeFileSync6(join16(targetDir,"HEARTBEAT.md"),GENIE_HEARTBEAT_TEMPLATE),writeFileSync6(join16(targetDir,"AGENTS.md"),GENIE_AGENTS_TEMPLATE);else writeFileSync6(join16(targetDir,"SOUL.md"),SOUL_TEMPLATE),writeFileSync6(join16(targetDir,"HEARTBEAT.md"),HEARTBEAT_TEMPLATE),writeFileSync6(join16(targetDir,"AGENTS.md"),renderAgentsTemplate(agentName,workspaceDefaults))}var SOUL_TEMPLATE=`# Soul
648
+
649
+ You are an AI assistant. Define your role, personality, and approach here.
650
+
651
+ Replace this with your agent's identity \u2014 who they are, how they communicate, and what they care about.
652
+ `,HEARTBEAT_TEMPLATE=`# Heartbeat
653
+
654
+ Run this checklist on every iteration. Exit early if nothing actionable.
655
+
656
+ ## Checklist
657
+
658
+ ### 1. Check Assignments
659
+ Review your task queue. What's assigned to you? Prioritize by urgency and impact.
660
+
661
+ ### 2. Do Work
662
+ Execute on your current tasks. Focus on the highest-priority item first.
663
+
664
+ ### 3. Report Progress
665
+ Update status on completed or blocked items. Keep it factual.
666
+
667
+ ### 4. Exit If Nothing Actionable
668
+ If all work is done and no new tasks exist \u2014 exit. Don't create busywork.
669
+ `,AGENTS_TEMPLATE=`---
670
+ # \u2500\u2500 Freeform (no default, fill in as needed) \u2500\u2500
671
+ # description: Describe what this agent does.
672
+
673
+ # \u2500\u2500 Inherited defaults (effective values shown, uncomment to override) \u2500\u2500
674
+ # model: {{model}}
675
+ # promptMode: {{promptMode}}
676
+ # color: {{color}}
677
+ # effort: {{effort}}
678
+ # thinking: {{thinking}}
679
+ # permissionMode: {{permissionMode}}
680
+ ---
681
+
682
+ @HEARTBEAT.md
683
+
684
+ <mission>
685
+ Define your agent's mission here. What is their primary goal? What do they own?
686
+ </mission>
687
+
688
+ <principles>
689
+ - **Clarity over ambiguity.** Be specific about expectations and outcomes.
690
+ - **Quality over speed.** Do it right the first time.
691
+ </principles>
692
+
693
+ <constraints>
694
+ - List any hard constraints or rules this agent must follow.
695
+ </constraints>
696
+ `,GENIE_AGENTS_TEMPLATE=`---
697
+ name: genie
698
+ description: Workspace concierge and orchestrator \u2014 guides new users, manages agents, runs pipelines.
699
+ model: opus
700
+ promptMode: append
701
+ color: cyan
702
+ effort: high
703
+ thinking: enabled
704
+ permissionMode: auto
705
+ ---
706
+
707
+ @HEARTBEAT.md
708
+
709
+ <mission>
710
+ You are the **genie specialist** \u2014 the default agent for this workspace.
711
+
712
+ Your role adapts based on workspace maturity:
713
+
714
+ **Concierge mode** (new or empty workspace):
715
+ - Guide users through first steps: creating agents, shaping wishes, running pipelines
716
+ - Explain genie concepts (agents, wishes, skills, heartbeats) when asked
717
+ - Suggest next actions based on workspace state
718
+
719
+ **Orchestrator mode** (mature workspace with agents):
720
+ - Route work to the right agents via \`genie spawn\` and \`genie team create\`
721
+ - Monitor wish progress with \`genie status\`
722
+ - Coordinate multi-agent workflows (brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship)
723
+ - Analyze existing agents and propose improvements
724
+ </mission>
725
+
726
+ <principles>
727
+ - **Meet users where they are.** New users need guidance; experienced users need efficiency.
728
+ - **Workspace state drives behavior.** Check what exists before suggesting what to do.
729
+ - **Propose, never modify.** When analyzing agents, show proposals \u2014 let the user confirm.
730
+ - **Pipeline over ad-hoc.** Encourage the brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship flow.
731
+ </principles>
732
+
733
+ <constraints>
734
+ - Never modify existing agent files without explicit user confirmation.
735
+ - Never auto-register agents \u2014 all registration flows through interactive prompts.
736
+ - When analyzing agents from other systems, compare against genie conventions but respect existing structures.
737
+ </constraints>
738
+ `,GENIE_SOUL_TEMPLATE,GENIE_HEARTBEAT_TEMPLATE,STALE_GENIE_AGENTS_MD_MARKER="Define your agent's mission here.",STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX;var init_templates=__esm(()=>{init_defaults();GENIE_SOUL_TEMPLATE=["# Genie Specialist \u2014 Soul","","You are the genie workspace specialist. You guide users through the genie workflow and orchestrate agents.","","## The Genie Pipeline","","Every idea follows this pipeline:","","```","brainstorm \u2192 wish \u2192 work \u2192 review \u2192 ship","```","","1. **Brainstorm** \u2014 Explore the idea. Use `/brainstorm` to think through scope, tradeoffs, and approach.","2. **Wish** \u2014 Structure the idea into an actionable plan with acceptance criteria, execution groups, and validation commands. Use `/wish` to create one.","3. **Work** \u2014 Execute the wish. Use `/work` to dispatch engineers per execution group.","4. **Review** \u2014 Validate the work against wish criteria. Use `/review` to check compliance.","5. **Ship** \u2014 Merge, release, deploy. The pipeline ensures quality before shipping.","","## Genie Commands Reference","","### Agent Management","```bash","genie spawn <name> # Start an agent","genie kill <name> # Force kill an agent","genie stop <name> # Stop (preserves session)","genie resume [name] # Resume a suspended agent","genie ls # List agents with status","genie log [agent] # Unified observability feed","genie read <name> # Read terminal output","genie history <name> # Compressed session history","genie answer <name> <choice> # Answer a prompt for an agent","```","","### Agent Communication","```bash","genie agent send '<msg>' --to <name> # Direct message","genie agent send '<msg>' --broadcast # Team broadcast","genie agent inbox # View inbox","genie agent brief --team <name> # Cold-start summary","```","","### Team Orchestration","```bash","genie team create <name> --repo <path> --wish <slug> # Launch autonomous team","genie team hire <name> --team <team> # Add to team","genie team fire <name> --team <team> # Remove from team","genie team list # List teams","genie team disband <name> # Disband team","```","","### Task & Wish Management","```bash","genie task create --title 'x' # Create task","genie task list # List tasks","genie task status <slug> # Wish group status","genie task done <ref> # Mark done","genie task board # Planning board","```","","### Workspace","```bash","genie init # Initialize workspace","genie init agent <name> # Scaffold new agent","genie serve # Start infrastructure","genie doctor # Diagnostic checks","```","","## Concierge \u2192 Orchestrator Transition","","Detect workspace maturity and adapt:","","**Concierge mode** activates when:","- Workspace has 0-1 agents (just the default genie agent)","- No wishes exist yet","- User appears new to genie","","In concierge mode:","- Explain concepts with examples","- Suggest creating a first agent or brainstorming a first wish","- Walk through the pipeline step by step","","**Orchestrator mode** activates when:","- Workspace has 2+ agents","- Wishes exist with execution groups","- User gives direct commands","","In orchestrator mode:","- Route work to the right agents","- Monitor progress across teams","- Summarize status concisely","- Suggest next pipeline steps based on current state","","## Agent Analysis Capability","","When invoked in a workspace with existing agents (from genie or other systems), analyze their setup:","","### Analysis Process","1. List all directories under `agents/` (and any discovered via tree scan)","2. For each agent directory, check:"," - Has `AGENTS.md`? (identity file with frontmatter)"," - Has `SOUL.md`? (personality and knowledge)"," - Has `HEARTBEAT.md`? (autonomous checklist)"," - Has `.claude/settings.local.json`? (Claude Code config)"," - Frontmatter fields present vs. missing","3. Compare against genie conventions:"," - Missing files \u2192 propose creation with templates"," - Incomplete frontmatter \u2192 propose mini-wizard"," - Non-standard structure \u2192 explain conventions, offer migration","4. Present proposals as a checklist \u2014 never auto-modify",""].join(`
739
+ `),GENIE_HEARTBEAT_TEMPLATE=["# Heartbeat \u2014 Genie Specialist","","Run this checklist on every iteration. Exit early if nothing actionable.","","## Checklist","","### 1. Workspace State Check","Verify workspace health before doing anything else.","- Is `genie serve` running? If not, suggest starting it.","- Are there registered agents? List them with `genie ls`.","- Any agents in error/crashed state? Flag for user attention.","","### 2. Pending Agents Check","Look for agents waiting to be initialized.","- Check `.genie/pending-agents.json` for queued discoveries.","- If pending agents exist, notify the user and offer to initialize them.","- If new `AGENTS.md` files appeared outside `agents/`, flag for import.","","### 3. Wish Status Check","Review active work across the workspace.","- Check `genie task board` for in-progress wishes.","- For each active wish, check execution group progress.","- Flag blocked groups or stale tasks (no progress in 30+ minutes).","- Summarize: X wishes active, Y groups complete, Z blocked.","","### 4. Generate Suggestions","Based on workspace state, suggest the next most valuable action:",'- **Empty workspace** \u2192 "Start with /brainstorm to explore an idea"','- **Has brainstorm, no wish** \u2192 "Ready to structure this? Run /wish"','- **Has wish, no workers** \u2192 "Dispatch workers with /work"','- **Work complete** \u2192 "Time to review: /review"','- **Review passed** \u2192 "Ship it \u2014 merge the PR"','- **Agents from other systems** \u2192 "I can analyze your agents \u2014 want a compatibility report?"',"","### 5. Exit If Nothing Actionable","If workspace is healthy, no pending agents, no active wishes, and no suggestions \u2014 exit.","Don't create busywork. The user will invoke you when needed.",""].join(`
740
+ `);STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX=/^model\s*:/m});import{existsSync as existsSync13,readFileSync as readFileSync9,realpathSync as realpathSync3}from"fs";import{dirname as dirname5,join as join17}from"path";async function runSilent(cmd,args){try{let proc=Bun.spawn([cmd,...args],{stdout:"pipe",stderr:"ignore",stdin:"ignore"}),text=await new Response(proc.stdout).text();if(await proc.exited!==0)return null;let trimmed=text.trim();return trimmed.length>0?trimmed:null}catch{return null}}function findPackageJson(realBinPath){let dir=dirname5(realBinPath);for(let i2=0;i2<8;i2++){let candidate=join17(dir,"package.json");if(existsSync13(candidate))try{let parsed=JSON.parse(readFileSync9(candidate,"utf-8"));if(parsed.name===PKG_NAME&&typeof parsed.version==="string")return{path:candidate,version:parsed.version}}catch{}let parent=dirname5(dir);if(parent===dir)break;dir=parent}return null}function safeRealpath(p){try{return realpathSync3(p)}catch{return p}}async function probeOne(installer,binDir){if(!binDir)return null;let binPath=join17(binDir,"genie");if(!existsSync13(binPath))return null;let real=safeRealpath(binPath),pkg=findPackageJson(real);if(!pkg)return null;return{installer,binPath,packageJsonPath:pkg.path,version:pkg.version}}async function probeInstallers(){let entries=[],npmRoot=await runSilent("npm",["root","-g"]),npmBin=npmRoot?join17(dirname5(npmRoot),"bin"):null,bunBin=await runSilent("bun",["pm","-g","bin"]),pnpmRoot=await runSilent("pnpm",["root","-g"]),pnpmBin=process.env.PNPM_HOME??(pnpmRoot?join17(dirname5(pnpmRoot),"bin"):null),yarnBin=await runSilent("yarn",["global","bin"]),probes=[["npm",npmBin],["bun",bunBin],["pnpm",pnpmBin],["yarn",yarnBin]];for(let[id,dir]of probes){let entry=await probeOne(id,dir);if(entry)entries.push(entry)}return entries}async function probeResolvedBinary(){let path2=await runSilent("which",["genie"]);if(!path2)return null;return{path:path2,realPath:safeRealpath(path2)}}function compareVersions(a,b2){let pa=a.split(".").map((s)=>Number.parseInt(s,10)),pb=b2.split(".").map((s)=>Number.parseInt(s,10)),len=Math.max(pa.length,pb.length);for(let i2=0;i2<len;i2++){let na=Number.isFinite(pa[i2])?pa[i2]:0,nb=Number.isFinite(pb[i2])?pb[i2]:0;if(na!==nb)return na-nb}return 0}function uninstallHint(installer){switch(installer){case"npm":return`npm uninstall -g ${PKG_NAME}`;case"bun":return`bun remove -g ${PKG_NAME}`;case"pnpm":return`pnpm remove -g ${PKG_NAME}`;case"yarn":return`yarn global remove ${PKG_NAME}`}}function classifyInstallerResolution(state){let{resolved,installers}=state;if(!resolved)return[{name:"Resolved binary",status:"warn",message:"`which genie` returned nothing",suggestion:"Add the installer bin dir to PATH, or reinstall with: npm install -g @automagik/genie"}];let owner=installers.find((e)=>safeRealpath(e.binPath)===resolved.realPath)??null,rows=[];if(!owner){rows.push({name:"Resolved binary",status:"warn",message:`${resolved.path} (not owned by a detected installer)`,suggestion:"Likely a dev checkout or manual symlink. Package-manager updates (`npm i -g`, `bun add -g`) will not replace this binary."});for(let entry of installers)rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version} at ${entry.binPath}`});return rows}rows.push({name:"Resolved binary",status:"pass",message:`${resolved.path} (${owner.installer} @ ${owner.version})`});let others=installers.filter((e)=>e.installer!==owner.installer);if(others.length===0)return rows;let newest=[...installers].sort((a,b2)=>compareVersions(b2.version,a.version))[0],resolverIsStale=compareVersions(owner.version,newest.version)<0;for(let entry of others){let stale=compareVersions(entry.version,owner.version)<0;rows.push({name:`Also installed via ${entry.installer}`,status:"warn",message:`${entry.version}${stale?" (stale)":""} at ${entry.binPath}`,suggestion:`Remove with: ${uninstallHint(entry.installer)}`})}if(resolverIsStale)rows.push({name:"Update path",status:"warn",message:`${owner.installer}@${owner.version} is stale; ${newest.installer}@${newest.version} is newer but shadowed`,suggestion:`Either reinstall via the resolver (${uninstallHint(owner.installer).replace("uninstall","install").replace("remove","add")}) or remove the resolver so ${newest.installer} takes over.`});return rows}async function collectInstallerResolution(){let[resolved,installers]=await Promise.all([probeResolvedBinary(),probeInstallers()]);return classifyInstallerResolution({resolved,installers})}var PKG_NAME="@automagik/genie";var init_installer_resolution=()=>{};import{createHmac as createHmac2}from"crypto";import{homedir as homedir12}from"os";function hashEntity(namespace,value){let key=process.env.GENIE_REDACTION_KEY??"genie-redaction-fallback";return`tier-a:${namespace}:${createHmac2("sha256",key).update(value).digest("hex").slice(0,16)}`}function dropSecretShaped(text){let out=text;for(let{name,pattern}of SECRET_PATTERNS)out=out.replace(pattern,`<REDACTED:${name}>`);return out}function stripEnvVars(text){return text.replace(ENV_ASSIGN,(_m,name)=>`${name}=<REDACTED>`)}function tokenizePath(p){let home=homedir12(),out=p;if(home&&out.startsWith(home))out=`~${out.slice(home.length)}`;let segments=out.split("/").filter(Boolean);if(segments.length>6){let head=segments.slice(0,3).join("/"),tail=segments.slice(-2).join("/");out=`${out.startsWith("/")?"/":""}${head}/\u2026/${tail}`}return out=out.replace(/\b[0-9a-f]{12,}\b/g,"<id>"),out}function redactFreeText(value){return stripEnvVars(dropSecretShaped(value))}function capPayload(body){let serialized;try{serialized=JSON.stringify(body)}catch{return{overflow:!0,content_hash:"unserializable",body:{overflow:!0}}}if(Buffer.byteLength(serialized,"utf8")<=MAX_PAYLOAD_BYTES)return{overflow:!1,body};let key=process.env.GENIE_REDACTION_KEY??"genie-redaction-fallback",digest=createHmac2("sha256",key).update(serialized).digest("hex").slice(0,16);return{overflow:!0,content_hash:digest,body:{overflow:!0,content_hash:digest,original_bytes:Buffer.byteLength(serialized,"utf8")}}}var SECRET_PATTERNS,SENSITIVE_ENV_NAME="[A-Z][A-Z0-9_]*(?:_KEY|_SECRET|_TOKEN|_PASSWORD|_PASS|_AUTH|_API_KEY)",ENV_ASSIGN,MAX_PAYLOAD_BYTES=65536;var init_redactors=__esm(()=>{SECRET_PATTERNS=[{name:"anthropic-key",pattern:/sk-ant-[A-Za-z0-9_-]{20,}/g},{name:"openai-key",pattern:/sk-[A-Za-z0-9]{20,}/g},{name:"github-token",pattern:/gh[pousr]_[A-Za-z0-9]{30,}/g},{name:"aws-access-key",pattern:/AKIA[0-9A-Z]{16}/g},{name:"aws-secret",pattern:/(?<![A-Za-z0-9])[A-Za-z0-9/+=]{40}(?![A-Za-z0-9])/g},{name:"bearer-token",pattern:/(?:Bearer|bearer)\s+[A-Za-z0-9._\-~+/=]{20,}/g},{name:"jwt",pattern:/eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g},{name:"pem-header",pattern:/-----BEGIN [A-Z ]+ PRIVATE KEY-----/g},{name:"sensitive-path",pattern:/\/(?:[^\s"',;():]+\/)*\.(?:secrets|ssh|aws|gnupg|keys)(?:\/[^\s"',;():]*)?/g}];ENV_ASSIGN=new RegExp(`\\b(${SENSITIVE_ENV_NAME})\\s*[=:]\\s*([^\\s"',;]+)`,"g")});function tagTier(schema2,tier,note){let desc=`tier:${tier}${note?`; ${note}`:""}`;return schema2.describe(desc)}var exports_agent_lifecycle={};__export(exports_agent_lifecycle,{schema:()=>schema2,TYPE:()=>TYPE,SCHEMA_VERSION:()=>SCHEMA_VERSION,KIND:()=>KIND});var SCHEMA_VERSION=1,TYPE="agent.lifecycle",KIND="span",AgentIdSchema,TeamSchema,ExecutorSchema,SessionIdSchema,CwdSchema,ExitReasonSchema,DurationSchema,schema2;var init_agent_lifecycle=__esm(()=>{init_zod();init_redactors();AgentIdSchema=tagTier(exports_external.string().min(1).max(256),"B","agent name \u2014 public"),TeamSchema=tagTier(exports_external.string().min(1).max(256).optional(),"B"),ExecutorSchema=tagTier(exports_external.enum(["claude-code","claude-sdk","codex","shell"]),"C"),SessionIdSchema=tagTier(exports_external.string().min(1).max(128).transform((v)=>hashEntity("session",v)),"A","session id hashed"),CwdSchema=tagTier(exports_external.string().max(1024).transform(tokenizePath),"B"),ExitReasonSchema=tagTier(exports_external.enum(["stopped","killed","crashed","idle-suspend","completed"]),"C"),DurationSchema=tagTier(exports_external.number().int().min(0),"C","ms"),schema2=exports_external.object({agent_id:AgentIdSchema,team:TeamSchema,executor:ExecutorSchema,session_id:SessionIdSchema.optional(),cwd:CwdSchema.optional(),exit_reason:ExitReasonSchema.optional(),duration_ms:DurationSchema.optional()}).strict()});var exports_agent_resume_attempted={};__export(exports_agent_resume_attempted,{schema:()=>schema3,TYPE:()=>TYPE2,SCHEMA_VERSION:()=>SCHEMA_VERSION2,KIND:()=>KIND2});var SCHEMA_VERSION2=1,TYPE2="agent.resume.attempted",KIND2="event",AGENT_STATES,EntityIdSchema,AttemptNumberSchema,StateSchema,LastErrorSchema,TriggerSchema,schema3;var init_agent_resume_attempted=__esm(()=>{init_zod();init_redactors();AGENT_STATES=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema=tagTier(exports_external.enum(AGENT_STATES),"C"),LastErrorSchema=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),schema3=exports_external.object({entity_id:EntityIdSchema,attempt_number:AttemptNumberSchema,state_before:StateSchema,state_after:StateSchema,last_error:LastErrorSchema,trigger:TriggerSchema}).strict()});var exports_agent_resume_failed={};__export(exports_agent_resume_failed,{schema:()=>schema4,TYPE:()=>TYPE3,SCHEMA_VERSION:()=>SCHEMA_VERSION3,KIND:()=>KIND3});var SCHEMA_VERSION3=1,TYPE3="agent.resume.failed",KIND3="event",AGENT_STATES2,EntityIdSchema2,AttemptNumberSchema2,StateSchema2,LastErrorSchema2,TriggerSchema2,ExhaustedSchema,schema4;var init_agent_resume_failed=__esm(()=>{init_zod();init_redactors();AGENT_STATES2=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema2=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema2=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema2=tagTier(exports_external.enum(AGENT_STATES2),"C"),LastErrorSchema2=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema2=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),ExhaustedSchema=tagTier(exports_external.boolean(),"C"),schema4=exports_external.object({entity_id:EntityIdSchema2,attempt_number:AttemptNumberSchema2,state_before:StateSchema2,state_after:StateSchema2,last_error:LastErrorSchema2,trigger:TriggerSchema2,exhausted:ExhaustedSchema}).strict()});var exports_agent_resume_succeeded={};__export(exports_agent_resume_succeeded,{schema:()=>schema5,TYPE:()=>TYPE4,SCHEMA_VERSION:()=>SCHEMA_VERSION4,KIND:()=>KIND4});var SCHEMA_VERSION4=1,TYPE4="agent.resume.succeeded",KIND4="event",AGENT_STATES3,EntityIdSchema3,AttemptNumberSchema3,StateSchema3,LastErrorSchema3,TriggerSchema3,schema5;var init_agent_resume_succeeded=__esm(()=>{init_zod();init_redactors();AGENT_STATES3=["spawning","working","idle","permission","question","done","error","suspended","unknown"],EntityIdSchema3=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A","agent id hashed"),AttemptNumberSchema3=tagTier(exports_external.number().int().min(1).max(64),"C"),StateSchema3=tagTier(exports_external.enum(AGENT_STATES3),"C"),LastErrorSchema3=tagTier(exports_external.string().max(500).transform((v)=>redactFreeText(v)).optional(),"B","truncated to 500 chars"),TriggerSchema3=tagTier(exports_external.enum(["scheduler","manual","boot"]),"C"),schema5=exports_external.object({entity_id:EntityIdSchema3,attempt_number:AttemptNumberSchema3,state_before:StateSchema3,state_after:StateSchema3,last_error:LastErrorSchema3,trigger:TriggerSchema3}).strict()});var exports_audit_export={};__export(exports_audit_export,{schema:()=>schema6,TYPE:()=>TYPE5,SCHEMA_VERSION:()=>SCHEMA_VERSION5,KIND:()=>KIND5,DEFAULT_TIER:()=>DEFAULT_TIER});var SCHEMA_VERSION5=1,TYPE5="audit.export",KIND5="event",DEFAULT_TIER="audit",ExporterActorSchema,SinceIdSchema,RowCountSchema,BreakCountSchema,BundleSignaturePrefixSchema,TenantIdSchema,ReasonSchema,schema6;var init_audit_export=__esm(()=>{init_zod();init_redactors();ExporterActorSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A"),SinceIdSchema=tagTier(exports_external.number().int().min(0),"C"),RowCountSchema=tagTier(exports_external.number().int().min(0),"C"),BreakCountSchema=tagTier(exports_external.number().int().min(0),"C","chain breaks detected in the exported range"),BundleSignaturePrefixSchema=tagTier(exports_external.string().min(1).max(16),"C","first 16 hex of the bundle HMAC signature (full is on disk)"),TenantIdSchema=tagTier(exports_external.string().min(1).max(128),"C"),ReasonSchema=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)),"B","IR justification for the export"),schema6=exports_external.object({exporter_actor:ExporterActorSchema,since_id:SinceIdSchema,row_count:RowCountSchema,break_count:BreakCountSchema,bundle_signature_prefix:BundleSignaturePrefixSchema,tenant_id:TenantIdSchema,reason:ReasonSchema}).strict()});var exports_audit_un_hash={};__export(exports_audit_un_hash,{schema:()=>schema7,TYPE:()=>TYPE6,SCHEMA_VERSION:()=>SCHEMA_VERSION6,KIND:()=>KIND6,DEFAULT_TIER:()=>DEFAULT_TIER2});var SCHEMA_VERSION6=1,TYPE6="audit.un_hash",KIND6="event",DEFAULT_TIER2="audit",AdminActorSchema,NamespaceSchema,HashedValueSchema,ResolvedMarkerSchema,ReasonSchema2,TicketRefSchema,schema7;var init_audit_un_hash=__esm(()=>{init_zod();init_redactors();AdminActorSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A","admin who performed the un-hash (Tier-A hashed)"),NamespaceSchema=tagTier(exports_external.string().min(1).max(64),"C"),HashedValueSchema=tagTier(exports_external.string().min(1).max(256),"B","tier-a:ns:... source hash requested"),ResolvedMarkerSchema=tagTier(exports_external.boolean(),"C","true if un-hash succeeded"),ReasonSchema2=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)),"B","IR justification for the un-hash"),TicketRefSchema=tagTier(exports_external.string().max(128).optional(),"C","incident ticket reference"),schema7=exports_external.object({admin_actor:AdminActorSchema,namespace:NamespaceSchema,hashed_value:HashedValueSchema,resolved:ResolvedMarkerSchema,reason:ReasonSchema2,ticket_ref:TicketRefSchema}).strict()});var exports_cache_hit={};__export(exports_cache_hit,{schema:()=>schema8,TYPE:()=>TYPE7,SCHEMA_VERSION:()=>SCHEMA_VERSION7,KIND:()=>KIND7});var SCHEMA_VERSION7=1,TYPE7="cache.hit",KIND7="event",CacheSchema,HitSchema,KeyHintSchema,LatencyUsSchema,schema8;var init_cache_hit=__esm(()=>{init_zod();init_redactors();CacheSchema=tagTier(exports_external.string().min(1).max(128),"C"),HitSchema=tagTier(exports_external.boolean(),"C"),KeyHintSchema=tagTier(exports_external.string().max(128).transform((v)=>redactFreeText(v)).optional(),"B"),LatencyUsSchema=tagTier(exports_external.number().int().min(0).max(1e7).optional(),"C","microseconds"),schema8=exports_external.object({cache:CacheSchema,hit:HitSchema,key_hint:KeyHintSchema,latency_us:LatencyUsSchema}).strict()});var exports_cache_invalidate={};__export(exports_cache_invalidate,{schema:()=>schema9,TYPE:()=>TYPE8,SCHEMA_VERSION:()=>SCHEMA_VERSION8,KIND:()=>KIND8});var SCHEMA_VERSION8=1,TYPE8="cache.invalidate",KIND8="event",CacheSchema2,KeysInvalidatedSchema,ReasonSchema3,ScopeSchema,schema9;var init_cache_invalidate=__esm(()=>{init_zod();CacheSchema2=tagTier(exports_external.string().min(1).max(128),"C","cache name \u2014 public"),KeysInvalidatedSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),ReasonSchema3=tagTier(exports_external.enum(["ttl","manual","capacity","rotation","upstream_change"]).optional(),"C"),ScopeSchema=tagTier(exports_external.enum(["key","bucket","all"]).optional(),"C"),schema9=exports_external.object({cache:CacheSchema2,keys_invalidated:KeysInvalidatedSchema,reason:ReasonSchema3,scope:ScopeSchema}).strict()});var exports_cli_command={};__export(exports_cli_command,{schema:()=>schema10,TYPE:()=>TYPE9,SCHEMA_VERSION:()=>SCHEMA_VERSION9,KIND:()=>KIND9});var SCHEMA_VERSION9=1,TYPE9="cli.command",KIND9="span",CommandSchema,ArgsSchema,CwdSchema2,ExitCodeSchema,DurationSchema2,UserAgentSchema,schema10;var init_cli_command=__esm(()=>{init_zod();init_redactors();CommandSchema=tagTier(exports_external.string().max(256),"C","subcommand name only"),ArgsSchema=tagTier(exports_external.array(exports_external.string()).max(32).transform((args)=>args.map((a)=>redactFreeText(a))),"B","argv \u2014 secrets stripped, paths kept"),CwdSchema2=tagTier(exports_external.string().max(1024).transform(tokenizePath),"B","working directory tokenized"),ExitCodeSchema=tagTier(exports_external.number().int().min(-1).max(255),"C"),DurationSchema2=tagTier(exports_external.number().int().min(0).max(3600000),"C","milliseconds"),UserAgentSchema=tagTier(exports_external.string().max(256).optional(),"C"),schema10=exports_external.object({command:CommandSchema,args:ArgsSchema,cwd:CwdSchema2,exit_code:ExitCodeSchema.optional(),duration_ms:DurationSchema2.optional(),user_agent:UserAgentSchema}).strict().transform((v)=>({...v}))});var exports_consumer_heartbeat={};__export(exports_consumer_heartbeat,{schema:()=>schema11,TYPE:()=>TYPE10,SCHEMA_VERSION:()=>SCHEMA_VERSION10,KIND:()=>KIND10});var SCHEMA_VERSION10=1,TYPE10="consumer.heartbeat",KIND10="event",ConsumerIdSchema,LastEventIdSchema,BacklogDepthSchema,RoleSchema,UptimeSecondsSchema,schema11;var init_consumer_heartbeat=__esm(()=>{init_zod();init_redactors();ConsumerIdSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("consumer",v)),"A"),LastEventIdSchema=tagTier(exports_external.number().int().min(0).max(9007199254740991),"C"),BacklogDepthSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),RoleSchema=tagTier(exports_external.enum(["admin","operator","subscriber","audit"]).optional(),"C"),UptimeSecondsSchema=tagTier(exports_external.number().int().min(0).max(31536000).optional(),"C"),schema11=exports_external.object({consumer_id:ConsumerIdSchema,last_event_id_processed:LastEventIdSchema,backlog_depth:BacklogDepthSchema,role:RoleSchema,uptime_seconds:UptimeSecondsSchema}).strict()});var exports_consumer_lagged={};__export(exports_consumer_lagged,{schema:()=>schema12,TYPE:()=>TYPE11,SCHEMA_VERSION:()=>SCHEMA_VERSION11,KIND:()=>KIND11,DEFAULT_TIER:()=>DEFAULT_TIER3});var SCHEMA_VERSION11=1,TYPE11="consumer.lagged",KIND11="event",DEFAULT_TIER3="audit",CountSchema,SpillPathSchema,SeveritySchema,schema12;var init_consumer_lagged=__esm(()=>{init_zod();CountSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),SpillPathSchema=tagTier(exports_external.string().max(512),"B"),SeveritySchema=tagTier(exports_external.enum(["warn","error","fatal"]),"C"),schema12=exports_external.object({severity_class:SeveritySchema,spill_path:SpillPathSchema,rows_spilled:CountSchema,queue_depth:CountSchema,queue_cap:CountSchema}).strict()});var exports_correlation_orphan_rate={};__export(exports_correlation_orphan_rate,{schema:()=>schema13,TYPE:()=>TYPE12,SCHEMA_VERSION:()=>SCHEMA_VERSION12,KIND:()=>KIND12});var SCHEMA_VERSION12=1,TYPE12="correlation.orphan.rate",KIND12="event",RateSchema,CountSchema2,schema13;var init_correlation_orphan_rate=__esm(()=>{init_zod();RateSchema=tagTier(exports_external.number().min(0).max(1),"C"),CountSchema2=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema13=exports_external.object({window_samples:CountSchema2,orphans:CountSchema2,rate:RateSchema}).strict()});var exports_detector_disabled={};__export(exports_detector_disabled,{schema:()=>schema14,TYPE:()=>TYPE13,SCHEMA_VERSION:()=>SCHEMA_VERSION13,KIND:()=>KIND13});var SCHEMA_VERSION13=1,TYPE13="detector.disabled",KIND13="event",DetectorIdSchema,CauseSchema,BudgetSchema,FireCountSchema,BucketEndTsSchema,schema14;var init_detector_disabled=__esm(()=>{init_zod();DetectorIdSchema=tagTier(exports_external.string().min(1).max(128),"C"),CauseSchema=tagTier(exports_external.literal("fire_budget_exceeded"),"C"),BudgetSchema=tagTier(exports_external.number().int().min(1).max(1e6),"C","events per hour bucket"),FireCountSchema=tagTier(exports_external.number().int().min(0).max(1e6),"C","fires observed in this bucket"),BucketEndTsSchema=tagTier(exports_external.string().datetime({offset:!0}),"C","ISO-8601 timestamp when the current hour bucket expires"),schema14=exports_external.object({detector_id:DetectorIdSchema,cause:CauseSchema,budget:BudgetSchema,fire_count:FireCountSchema,bucket_end_ts:BucketEndTsSchema}).strict()});var exports_emit_backpressure_critical={};__export(exports_emit_backpressure_critical,{schema:()=>schema15,TYPE:()=>TYPE14,SCHEMA_VERSION:()=>SCHEMA_VERSION14,KIND:()=>KIND14,DEFAULT_TIER:()=>DEFAULT_TIER4});var SCHEMA_VERSION14=1,TYPE14="emit.backpressure.critical",KIND14="event",DEFAULT_TIER4="audit",SecondsSchema,CountSchema3,schema15;var init_emit_backpressure_critical=__esm(()=>{init_zod();SecondsSchema=tagTier(exports_external.number().min(0).max(86400),"C"),CountSchema3=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema15=exports_external.object({spill_duration_seconds:SecondsSchema,spill_rows_total:CountSchema3,queue_depth:CountSchema3,queue_cap:CountSchema3,recommended_action:tagTier(exports_external.enum(["scale_consumers","inspect_pg","restart_bridge"]).optional(),"C")}).strict()});var exports_emitter_latency_p99={};__export(exports_emitter_latency_p99,{schema:()=>schema16,TYPE:()=>TYPE15,SCHEMA_VERSION:()=>SCHEMA_VERSION15,KIND:()=>KIND15});var SCHEMA_VERSION15=1,TYPE15="emitter.latency_p99",KIND15="event",MillisSchema,SampleCountSchema,schema16;var init_emitter_latency_p99=__esm(()=>{init_zod();MillisSchema=tagTier(exports_external.number().min(0).max(600000),"C"),SampleCountSchema=tagTier(exports_external.number().int().min(1).max(1e6),"C"),schema16=exports_external.object({window_samples:SampleCountSchema,p50_ms:MillisSchema,p95_ms:MillisSchema,p99_ms:MillisSchema,max_ms:MillisSchema}).strict()});var exports_emitter_queue_depth={};__export(exports_emitter_queue_depth,{schema:()=>schema17,TYPE:()=>TYPE16,SCHEMA_VERSION:()=>SCHEMA_VERSION16,KIND:()=>KIND16});var SCHEMA_VERSION16=1,TYPE16="emitter.queue.depth",KIND16="event",DepthSchema,CapSchema,UtilizationSchema,schema17;var init_emitter_queue_depth=__esm(()=>{init_zod();DepthSchema=tagTier(exports_external.number().int().min(0).max(1e7),"C"),CapSchema=tagTier(exports_external.number().int().min(1).max(1e7),"C"),UtilizationSchema=tagTier(exports_external.number().min(0).max(1),"C"),schema17=exports_external.object({depth:DepthSchema,cap:CapSchema,utilization:UtilizationSchema,enqueued_total:tagTier(exports_external.number().int().min(0).max(Number.MAX_SAFE_INTEGER),"C"),flushed_total:tagTier(exports_external.number().int().min(0).max(Number.MAX_SAFE_INTEGER),"C")}).strict()});var exports_emitter_rejected={};__export(exports_emitter_rejected,{schema:()=>schema18,TYPE:()=>TYPE17,SCHEMA_VERSION:()=>SCHEMA_VERSION17,KIND:()=>KIND17});var SCHEMA_VERSION17=1,TYPE17="emitter.rejected",KIND17="event",OffendingTypeSchema,ReasonSchema4,CountSchema4,schema18;var init_emitter_rejected=__esm(()=>{init_zod();OffendingTypeSchema=tagTier(exports_external.string().min(1).max(128),"C"),ReasonSchema4=tagTier(exports_external.enum(["schema_parse","unregistered","kind_mismatch","overflow_cap","queue_full"]),"C"),CountSchema4=tagTier(exports_external.number().int().min(1).max(1e7),"C"),schema18=exports_external.object({offending_type:OffendingTypeSchema,reason:ReasonSchema4,count:CountSchema4}).strict()});var exports_emitter_shedding_load={};__export(exports_emitter_shedding_load,{schema:()=>schema19,TYPE:()=>TYPE18,SCHEMA_VERSION:()=>SCHEMA_VERSION18,KIND:()=>KIND18});var SCHEMA_VERSION18=1,TYPE18="emitter.shedding_load",KIND18="event",CountSchema5,schema19;var init_emitter_shedding_load=__esm(()=>{init_zod();CountSchema5=tagTier(exports_external.number().int().min(0).max(1e7),"C"),schema19=exports_external.object({dropped_debug:CountSchema5,dropped_info:CountSchema5,spilled_warn_plus:CountSchema5,window_seconds:tagTier(exports_external.number().int().min(1).max(3600),"C")}).strict()});var exports_error_raised={};__export(exports_error_raised,{schema:()=>schema20,TYPE:()=>TYPE19,SCHEMA_VERSION:()=>SCHEMA_VERSION19,KIND:()=>KIND19});var SCHEMA_VERSION19=1,TYPE19="error.raised",KIND19="event",ErrorClassSchema,MessageSchema,StackSchema,SubsystemSchema,SeveritySchema2,RetryableSchema,schema20;var init_error_raised=__esm(()=>{init_zod();init_redactors();ErrorClassSchema=tagTier(exports_external.string().min(1).max(256),"C","exception class name"),MessageSchema=tagTier(exports_external.string().max(4096).transform(redactFreeText),"B"),StackSchema=tagTier(exports_external.string().max(16384).transform((stack)=>stack.split(`
741
741
  `).map((line)=>tokenizePath(redactFreeText(line))).join(`
742
742
  `)),"B","stack paths tokenized"),SubsystemSchema=tagTier(exports_external.string().min(1).max(128),"C"),SeveritySchema2=tagTier(exports_external.enum(["warn","error","fatal"]),"C"),RetryableSchema=tagTier(exports_external.boolean().optional(),"C"),schema20=exports_external.object({error_class:ErrorClassSchema,message:MessageSchema,stack:StackSchema.optional(),subsystem:SubsystemSchema,severity:SeveritySchema2,retryable:RetryableSchema}).strict()});var exports_executor_row_written={};__export(exports_executor_row_written,{schema:()=>schema21,TYPE:()=>TYPE20,SCHEMA_VERSION:()=>SCHEMA_VERSION20,KIND:()=>KIND20});var SCHEMA_VERSION20=1,TYPE20="executor.row.written",KIND20="event",TableSchema,RowIdSchema,OperationSchema,ExecutorSchema2,DiffSchema,schema21;var init_executor_row_written=__esm(()=>{init_zod();init_redactors();TableSchema=tagTier(exports_external.string().min(1).max(128),"C","PG table name \u2014 public"),RowIdSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("row",v)),"A"),OperationSchema=tagTier(exports_external.enum(["insert","update","delete","upsert"]),"C"),ExecutorSchema2=tagTier(exports_external.string().max(128).optional(),"C"),DiffSchema=tagTier(exports_external.record(exports_external.string(),exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()])).default({}),"B","shallow scalar diff only \u2014 payloads never stored here"),schema21=exports_external.object({table:TableSchema,row_id:RowIdSchema,operation:OperationSchema,executor:ExecutorSchema2,before:DiffSchema,after:DiffSchema}).strict()});var exports_executor_write={};__export(exports_executor_write,{schema:()=>schema22,TYPE:()=>TYPE21,SCHEMA_VERSION:()=>SCHEMA_VERSION21,KIND:()=>KIND21});var SCHEMA_VERSION21=1,TYPE21="executor.write",KIND21="span",ExecutorSchema3,TargetSchema,TableSchema2,OperationSchema2,RowsAffectedSchema,DurationSchema3,OutcomeSchema,ErrorHintSchema,schema22;var init_executor_write=__esm(()=>{init_zod();init_redactors();ExecutorSchema3=tagTier(exports_external.enum(["claude-code","claude-sdk","codex","shell"]),"C"),TargetSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("executor_target",v)),"A","target entity hashed"),TableSchema2=tagTier(exports_external.string().max(128).optional(),"C","PG table name \u2014 public"),OperationSchema2=tagTier(exports_external.enum(["insert","update","delete","upsert","copy","truncate"]),"C"),RowsAffectedSchema=tagTier(exports_external.number().int().min(0).max(1e7).optional(),"C"),DurationSchema3=tagTier(exports_external.number().int().min(0).max(60000).optional(),"C","ms"),OutcomeSchema=tagTier(exports_external.enum(["ok","constraint_violation","timeout","error"]).optional(),"C"),ErrorHintSchema=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)).optional(),"B"),schema22=exports_external.object({executor:ExecutorSchema3,target:TargetSchema,table:TableSchema2,operation:OperationSchema2,rows_affected:RowsAffectedSchema,duration_ms:DurationSchema3,outcome:OutcomeSchema,error_hint:ErrorHintSchema}).strict()});var exports_hook_delivery={};__export(exports_hook_delivery,{schema:()=>schema23,TYPE:()=>TYPE22,SCHEMA_VERSION:()=>SCHEMA_VERSION22,KIND:()=>KIND22});var SCHEMA_VERSION22=1,TYPE22="hook.delivery",KIND22="span",HookNameSchema,HookEventSchema,AgentIdSchema2,ToolSchema,StatusSchema,DurationSchema4,ExitCodeSchema2,StderrExcerptSchema,schema23;var init_hook_delivery=__esm(()=>{init_zod();init_redactors();HookNameSchema=tagTier(exports_external.string().min(1).max(128),"C","hook name \u2014 public"),HookEventSchema=tagTier(exports_external.string().min(1).max(64),"C","CC hook event name \u2014 public"),AgentIdSchema2=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A"),ToolSchema=tagTier(exports_external.string().max(128).optional(),"C"),StatusSchema=tagTier(exports_external.enum(["ok","timeout","rejected","error"]).optional(),"C"),DurationSchema4=tagTier(exports_external.number().int().min(0).max(60000).optional(),"C","ms (<=15s timeout)"),ExitCodeSchema2=tagTier(exports_external.number().int().min(-1).max(255).optional(),"C"),StderrExcerptSchema=tagTier(exports_external.string().max(4096).transform((v)=>redactFreeText(v)).optional(),"B","redacted stderr excerpt"),schema23=exports_external.object({hook_name:HookNameSchema,agent_id:AgentIdSchema2,tool:ToolSchema,event:HookEventSchema.optional(),status:StatusSchema,duration_ms:DurationSchema4,exit_code:ExitCodeSchema2,stderr_excerpt:StderrExcerptSchema}).strict()});var exports_mailbox_delivery={};__export(exports_mailbox_delivery,{schema:()=>schema24,TYPE:()=>TYPE23,SCHEMA_VERSION:()=>SCHEMA_VERSION23,KIND:()=>KIND23});var SCHEMA_VERSION23=1,TYPE23="mailbox.delivery",KIND23="span",AgentIdSchema3=(ns)=>tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity(ns,v)),"A"),FromSchema,ToSchema,ChannelSchema,OutcomeSchema2,MessageIdSchema,BodyExcerptSchema,DurationSchema5,schema24;var init_mailbox_delivery=__esm(()=>{init_zod();init_redactors();FromSchema=tagTier(exports_external.string().max(128),"C","sender role \u2014 public"),ToSchema=tagTier(exports_external.string().max(128),"C","recipient role \u2014 public"),ChannelSchema=tagTier(exports_external.enum(["tmux","native-inbox","file","broadcast"]),"C"),OutcomeSchema2=tagTier(exports_external.enum(["delivered","queued","pane_dead","rejected","timeout"]).optional(),"C"),MessageIdSchema=AgentIdSchema3("msg").optional(),BodyExcerptSchema=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)).optional(),"B","first 512 chars, redacted"),DurationSchema5=tagTier(exports_external.number().int().min(0).max(60000).optional(),"C","ms"),schema24=exports_external.object({from:FromSchema,to:ToSchema,channel:ChannelSchema,outcome:OutcomeSchema2,message_id:MessageIdSchema,body_excerpt:BodyExcerptSchema,duration_ms:DurationSchema5}).strict()});var exports_notify_delivery_lag={};__export(exports_notify_delivery_lag,{schema:()=>schema25,TYPE:()=>TYPE24,SCHEMA_VERSION:()=>SCHEMA_VERSION24,KIND:()=>KIND24});var SCHEMA_VERSION24=1,TYPE24="notify.delivery.lag",KIND24="event",NonceSchema,LagMillisSchema,ChannelSchema2,schema25;var init_notify_delivery_lag=__esm(()=>{init_zod();init_redactors();NonceSchema=tagTier(exports_external.string().min(1).max(128).transform((v)=>hashEntity("notify-probe",v)),"A"),LagMillisSchema=tagTier(exports_external.number().min(0).max(300000),"C"),ChannelSchema2=tagTier(exports_external.string().min(1).max(128),"C"),schema25=exports_external.object({channel:ChannelSchema2,probe_id:NonceSchema,lag_ms:LagMillisSchema,timed_out:tagTier(exports_external.boolean(),"C")}).strict()});var exports_permissions_deny={};__export(exports_permissions_deny,{schema:()=>schema26,TYPE:()=>TYPE25,SCHEMA_VERSION:()=>SCHEMA_VERSION25,KIND:()=>KIND25});var SCHEMA_VERSION25=1,TYPE25="permissions.deny",KIND25="event",ActorSchema,AttemptedRoleSchema,ScopeSchema2,ReasonSchema5,SourceIpSchema,schema26;var init_permissions_deny=__esm(()=>{init_zod();init_redactors();ActorSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A"),AttemptedRoleSchema=tagTier(exports_external.string().min(1).max(64),"C"),ScopeSchema2=tagTier(exports_external.string().min(1).max(128),"C"),ReasonSchema5=tagTier(exports_external.enum(["token_expired","token_invalid","signature_invalid","scope_mismatch","tenant_mismatch","rate_limited","revoked","unknown"]),"C"),SourceIpSchema=tagTier(exports_external.string().max(64).transform((v)=>hashEntity("ip",v)).optional(),"A"),schema26=exports_external.object({actor:ActorSchema,attempted_role:AttemptedRoleSchema,scope:ScopeSchema2,reason:ReasonSchema5,source_ip:SourceIpSchema}).strict()});var exports_permissions_grant={};__export(exports_permissions_grant,{schema:()=>schema27,TYPE:()=>TYPE26,SCHEMA_VERSION:()=>SCHEMA_VERSION26,KIND:()=>KIND26});var SCHEMA_VERSION26=1,TYPE26="permissions.grant",KIND26="event",ActorSchema2,RoleSchema2,ScopeSchema3,ExpiresAtSchema,GrantedBySchema,schema27;var init_permissions_grant=__esm(()=>{init_zod();init_redactors();ActorSchema2=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("actor",v)),"A"),RoleSchema2=tagTier(exports_external.enum(["admin","operator","subscriber","audit"]),"C"),ScopeSchema3=tagTier(exports_external.string().min(1).max(128),"C",'e.g. "genie_events.agent.*" \u2014 public'),ExpiresAtSchema=tagTier(exports_external.string().datetime().optional(),"C"),GrantedBySchema=tagTier(exports_external.string().max(256).transform((v)=>hashEntity("actor",v)).optional(),"A"),schema27=exports_external.object({actor:ActorSchema2,role:RoleSchema2,scope:ScopeSchema3,expires_at:ExpiresAtSchema,granted_by:GrantedBySchema}).strict()});var exports_resume_attempt={};__export(exports_resume_attempt,{schema:()=>schema28,TYPE:()=>TYPE27,SCHEMA_VERSION:()=>SCHEMA_VERSION27,KIND:()=>KIND27});var SCHEMA_VERSION27=1,TYPE27="resume.attempt",KIND27="span",AgentIdSchema4,AttemptNumberSchema4,StrategySchema,SessionIdSchema2,SucceededSchema,FailureReasonSchema,DurationSchema6,schema28;var init_resume_attempt=__esm(()=>{init_zod();init_redactors();AgentIdSchema4=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A"),AttemptNumberSchema4=tagTier(exports_external.number().int().min(1).max(16),"C"),StrategySchema=tagTier(exports_external.enum(["tmux-attach","claude-resume-session","cold-start","session-backfill"]),"C"),SessionIdSchema2=tagTier(exports_external.string().max(128).transform((v)=>hashEntity("session",v)).optional(),"A"),SucceededSchema=tagTier(exports_external.boolean().optional(),"C"),FailureReasonSchema=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)).optional(),"B"),DurationSchema6=tagTier(exports_external.number().int().min(0).max(300000).optional(),"C","ms"),schema28=exports_external.object({agent_id:AgentIdSchema4,attempt_number:AttemptNumberSchema4,strategy:StrategySchema,session_id:SessionIdSchema2,succeeded:SucceededSchema,failure_reason:FailureReasonSchema,duration_ms:DurationSchema6}).strict()});var exports_rot_detected={};__export(exports_rot_detected,{schema:()=>schema29,TYPE:()=>TYPE28,SCHEMA_VERSION:()=>SCHEMA_VERSION28,KIND:()=>KIND28});var SCHEMA_VERSION28=1,TYPE28="rot.detected",KIND28="event",PatternIdSchema,EntityIdSchema4,ObservedValueSchema,ObservedStateSchema,schema29;var init_rot_detected=__esm(()=>{init_zod();init_redactors();PatternIdSchema=tagTier(exports_external.string().min(1).max(128).regex(/^[a-z0-9][a-z0-9._-]*$/,"pattern_id must be kebab/dot/underscore lowercase"),"C"),EntityIdSchema4=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("entity",v)),"A"),ObservedValueSchema=tagTier(exports_external.union([exports_external.string().max(4096).transform(redactFreeText),exports_external.number().finite(),exports_external.boolean(),exports_external.null(),exports_external.array(exports_external.string().max(1024).transform(redactFreeText)).max(256),exports_external.array(exports_external.number().finite()).max(256)]),"B","evidence scalar \u2014 free text runs through redactFreeText"),ObservedStateSchema=tagTier(exports_external.record(exports_external.string().min(1).max(64).regex(/^[a-z0-9_]+$/,"observed_state key must be snake_case"),ObservedValueSchema).refine((obj)=>Object.keys(obj).length<=32,{message:"observed_state_json cannot exceed 32 keys"}),"B","per-pattern evidence record \u2014 keys documented by each detector module"),schema29=exports_external.object({pattern_id:PatternIdSchema,entity_id:EntityIdSchema4,observed_state_json:ObservedStateSchema}).strict()});var exports_rot_executor_ghost_detected={};__export(exports_rot_executor_ghost_detected,{schema:()=>schema30,TYPE:()=>TYPE29,SCHEMA_VERSION:()=>SCHEMA_VERSION29,KIND:()=>KIND29});var SCHEMA_VERSION29=1,TYPE29="rot.executor-ghost.detected",KIND29="event",ResolutionSourceSchema,EnvIdSchema,ResolvedIdSchema,AgentNameSchema,RecoveredSchema,schema30;var init_rot_executor_ghost_detected=__esm(()=>{init_zod();ResolutionSourceSchema=tagTier(exports_external.enum(["resolver","reconciler"]),"C"),EnvIdSchema=tagTier(exports_external.string().uuid(),"C"),ResolvedIdSchema=tagTier(exports_external.string().uuid(),"C"),AgentNameSchema=tagTier(exports_external.string().min(1).max(256),"C"),RecoveredSchema=tagTier(exports_external.boolean(),"C"),schema30=exports_external.object({resolution_source:ResolutionSourceSchema,env_id:EnvIdSchema,resolved_id:ResolvedIdSchema,agent_name:AgentNameSchema,recovered:RecoveredSchema}).strict()});var exports_rot_inbox_watcher_spawn_loop_detected={};__export(exports_rot_inbox_watcher_spawn_loop_detected,{schema:()=>schema31,TYPE:()=>TYPE30,SCHEMA_VERSION:()=>SCHEMA_VERSION30,KIND:()=>KIND30});var SCHEMA_VERSION30=1,TYPE30="rot.inbox-watcher-spawn-loop.detected",KIND30="event",TeamNameSchema,SessionKeySchema,FailureCountSchema,LastErrorMessageSchema,schema31;var init_rot_inbox_watcher_spawn_loop_detected=__esm(()=>{init_zod();init_redactors();TeamNameSchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>redactFreeText(v)),"C"),SessionKeySchema=tagTier(exports_external.string().min(1).max(256).transform((v)=>redactFreeText(v)),"C"),FailureCountSchema=tagTier(exports_external.number().int().min(1).max(100),"C"),LastErrorMessageSchema=tagTier(exports_external.string().min(1).max(2048).transform((v)=>redactFreeText(v)),"B","redacted error message from the final failed ensureTeamLead() call"),schema31=exports_external.object({team_name:TeamNameSchema,session_key:SessionKeySchema,failure_count:FailureCountSchema,last_error_message:LastErrorMessageSchema}).strict()});var exports_rot_team_ls_drift_detected={};__export(exports_rot_team_ls_drift_detected,{schema:()=>schema32,TYPE:()=>TYPE31,SCHEMA_VERSION:()=>SCHEMA_VERSION31,KIND:()=>KIND31});var SCHEMA_VERSION31=1,TYPE31="rot.team-ls-drift.detected",KIND31="event",DivergenceKindSchema,DivergentCountSchema,ObservedStateJsonSchema,ObservedStateJsonTruncatedSchema,schema32;var init_rot_team_ls_drift_detected=__esm(()=>{init_zod();init_redactors();DivergenceKindSchema=tagTier(exports_external.enum(["missing_in_disband","missing_in_ls","status_mismatch"]),"C"),DivergentCountSchema=tagTier(exports_external.number().int().min(1).max(1e4),"C"),ObservedStateJsonSchema=tagTier(exports_external.string().min(2).max(16384).transform((v)=>redactFreeText(v)),"B","JSON-encoded snapshot of both data sources for triage"),ObservedStateJsonTruncatedSchema=tagTier(exports_external.literal(!0).optional(),"C","set when detail was dropped to honor the observed_state_json cap"),schema32=exports_external.object({divergence_kind:DivergenceKindSchema,divergent_count:DivergentCountSchema,observed_state_json:ObservedStateJsonSchema,observed_state_json_truncated:ObservedStateJsonTruncatedSchema}).strict()});var exports_runbook_triggered={};__export(exports_runbook_triggered,{schema:()=>schema33,TYPE:()=>TYPE32,SCHEMA_VERSION:()=>SCHEMA_VERSION32,KIND:()=>KIND32});var SCHEMA_VERSION32=1,TYPE32="runbook.triggered",KIND32="event",RuleSchema,EvidenceCountSchema,CorrelationIdSchema,WindowMinutesSchema,RecommendedSqlSchema,EvidenceSummarySchema,schema33;var init_runbook_triggered=__esm(()=>{init_zod();init_redactors();RuleSchema=tagTier(exports_external.string().min(1).max(64).regex(/^R\d+$/,"rule id must be R<int>"),"C"),EvidenceCountSchema=tagTier(exports_external.number().int().min(1).max(1e6),"C"),CorrelationIdSchema=tagTier(exports_external.string().max(128).transform((v)=>hashEntity("trace",v)).optional(),"A"),WindowMinutesSchema=tagTier(exports_external.number().int().min(1).max(1440).optional(),"C"),RecommendedSqlSchema=tagTier(exports_external.string().max(4096).transform((v)=>redactFreeText(v)).optional(),"B","mitigation SQL \u2014 redacted free text"),EvidenceSummarySchema=tagTier(exports_external.string().max(1024).transform((v)=>redactFreeText(v)).optional(),"B"),schema33=exports_external.object({rule:RuleSchema,evidence_count:EvidenceCountSchema,window_minutes:WindowMinutesSchema,correlation_id:CorrelationIdSchema,recommended_sql:RecommendedSqlSchema,evidence_summary:EvidenceSummarySchema}).strict()});var exports_schema_violation={};__export(exports_schema_violation,{schema:()=>schema34,TYPE:()=>TYPE33,SCHEMA_VERSION:()=>SCHEMA_VERSION33,KIND:()=>KIND33});var SCHEMA_VERSION33=1,TYPE33="schema.violation",KIND33="event",OffendingTypeSchema2,RejectedBytesSchema,IssueSchema,schema34;var init_schema_violation=__esm(()=>{init_zod();init_redactors();OffendingTypeSchema2=tagTier(exports_external.string().min(1).max(128),"C"),RejectedBytesSchema=tagTier(exports_external.number().int().min(0).max(1048576),"C"),IssueSchema=tagTier(exports_external.object({path:exports_external.string().max(256),code:exports_external.string().max(64),message:exports_external.string().max(512).transform(redactFreeText)}),"B"),schema34=exports_external.object({offending_type:OffendingTypeSchema2,issues:tagTier(exports_external.array(IssueSchema).max(32),"B"),rejected_bytes:RejectedBytesSchema,source_subsystem:tagTier(exports_external.string().max(128).optional(),"C")}).strict()});var exports_session_id_written={};__export(exports_session_id_written,{schema:()=>schema35,TYPE:()=>TYPE34,SCHEMA_VERSION:()=>SCHEMA_VERSION34,KIND:()=>KIND34});var SCHEMA_VERSION34=1,TYPE34="session.id.written",KIND34="event",AgentIdSchema5,SessionIdSchema3,ExecutorSchema4,OriginSchema,DiffSchema2,schema35;var init_session_id_written=__esm(()=>{init_zod();init_redactors();AgentIdSchema5=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A"),SessionIdSchema3=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("session",v)),"A"),ExecutorSchema4=tagTier(exports_external.enum(["claude-code","claude-sdk","codex","shell"]),"C"),OriginSchema=tagTier(exports_external.enum(["spawn","resume","backfill","reconcile"]),"C"),DiffSchema2=tagTier(exports_external.record(exports_external.string(),exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()])).default({}),"B","shallow scalar diff \u2014 session_id hashed before arriving here"),schema35=exports_external.object({agent_id:AgentIdSchema5,session_id:SessionIdSchema3,executor:ExecutorSchema4,origin:OriginSchema,before:DiffSchema2,after:DiffSchema2}).strict()});var exports_session_reconciled={};__export(exports_session_reconciled,{schema:()=>schema36,TYPE:()=>TYPE35,SCHEMA_VERSION:()=>SCHEMA_VERSION35,KIND:()=>KIND35});var SCHEMA_VERSION35=1,TYPE35="session.reconciled",KIND35="event",AgentIdSchema6,SessionIdSchema4,ReasonSchema6,DiffSchema3,schema36;var init_session_reconciled=__esm(()=>{init_zod();init_redactors();AgentIdSchema6=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A"),SessionIdSchema4=tagTier(exports_external.string().max(256).transform((v)=>hashEntity("session",v)),"A"),ReasonSchema6=tagTier(exports_external.enum(["transcript-discovered","stale-pg-session","idle-timeout","manual","backfill"]),"C"),DiffSchema3=tagTier(exports_external.record(exports_external.string(),exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()])).default({}),"B"),schema36=exports_external.object({agent_id:AgentIdSchema6,old_session_id:SessionIdSchema4.optional(),new_session_id:SessionIdSchema4,reason:ReasonSchema6,before:DiffSchema3,after:DiffSchema3}).strict()});var exports_state_transition={};__export(exports_state_transition,{schema:()=>schema37,TYPE:()=>TYPE36,SCHEMA_VERSION:()=>SCHEMA_VERSION36,KIND:()=>KIND36});var SCHEMA_VERSION36=1,TYPE36="state_transition",KIND36="event",EntityKindSchema,EntityIdSchema5,FromSchema2,ToSchema2,ReasonSchema7,ActorSchema3,DiffSchema4,schema37;var init_state_transition=__esm(()=>{init_zod();init_redactors();EntityKindSchema=tagTier(exports_external.enum(["task","wish","worker","team","team_lead","group","mailbox_message"]),"C"),EntityIdSchema5=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("entity",v)),"A","entity id hashed"),FromSchema2=tagTier(exports_external.string().min(1).max(64),"C"),ToSchema2=tagTier(exports_external.string().min(1).max(64),"C"),ReasonSchema7=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)).optional(),"B","redacted free-text"),ActorSchema3=tagTier(exports_external.string().max(128).transform((v)=>redactFreeText(v)).optional(),"B"),DiffSchema4=tagTier(exports_external.record(exports_external.string(),exports_external.union([exports_external.string(),exports_external.number(),exports_external.boolean(),exports_external.null()])).default({}),"B","shallow scalar diff only"),schema37=exports_external.object({entity_kind:EntityKindSchema,entity_id:EntityIdSchema5,from:FromSchema2,to:ToSchema2,reason:ReasonSchema7,actor:ActorSchema3,before:DiffSchema4,after:DiffSchema4}).strict()});var exports_stream_gap_detected={};__export(exports_stream_gap_detected,{schema:()=>schema38,TYPE:()=>TYPE37,SCHEMA_VERSION:()=>SCHEMA_VERSION37,KIND:()=>KIND37});var SCHEMA_VERSION37=1,TYPE37="stream.gap.detected",KIND37="event",ConsumerIdSchema2,IdSchema,CountSchema6,schema38;var init_stream_gap_detected=__esm(()=>{init_zod();init_redactors();ConsumerIdSchema2=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("consumer",v)),"A"),IdSchema=tagTier(exports_external.number().int().min(0).max(Number.MAX_SAFE_INTEGER),"C"),CountSchema6=tagTier(exports_external.number().int().min(1).max(1e7),"C"),schema38=exports_external.object({consumer_id:ConsumerIdSchema2,from_id:IdSchema,to_id:IdSchema,missing_count:CountSchema6}).strict()});var exports_team_create={};__export(exports_team_create,{schema:()=>schema39,TYPE:()=>TYPE38,SCHEMA_VERSION:()=>SCHEMA_VERSION38,KIND:()=>KIND38,DEFAULT_TIER:()=>DEFAULT_TIER5});var SCHEMA_VERSION38=1,TYPE38="team.create",KIND38="event",DEFAULT_TIER5="audit",TeamNameSchema2,WishSlugSchema,RepoPathHashSchema,ActorSchema4,MemberCountSchema,AutoSchema,schema39;var init_team_create=__esm(()=>{init_zod();init_redactors();TeamNameSchema2=tagTier(exports_external.string().min(1).max(128),"C","team name \u2014 public label"),WishSlugSchema=tagTier(exports_external.string().max(128).optional(),"C"),RepoPathHashSchema=tagTier(exports_external.string().min(1).max(1024).transform((v)=>hashEntity("repo",v)),"A"),ActorSchema4=tagTier(exports_external.string().max(256).transform((v)=>hashEntity("actor",v)),"A"),MemberCountSchema=tagTier(exports_external.number().int().min(0).max(256).optional(),"C"),AutoSchema=tagTier(exports_external.boolean().optional(),"C","true if created by auto-spawn hook"),schema39=exports_external.object({team_name:TeamNameSchema2,wish_slug:WishSlugSchema,repo_path_hash:RepoPathHashSchema,actor:ActorSchema4,member_count:MemberCountSchema,auto:AutoSchema}).strict()});var exports_team_disband={};__export(exports_team_disband,{schema:()=>schema40,TYPE:()=>TYPE39,SCHEMA_VERSION:()=>SCHEMA_VERSION39,KIND:()=>KIND39,DEFAULT_TIER:()=>DEFAULT_TIER6});var SCHEMA_VERSION39=1,TYPE39="team.disband",KIND39="event",DEFAULT_TIER6="audit",TeamNameSchema3,ActorSchema5,RemainingMembersSchema,ReasonSchema8,schema40;var init_team_disband=__esm(()=>{init_zod();init_redactors();TeamNameSchema3=tagTier(exports_external.string().min(1).max(128),"C"),ActorSchema5=tagTier(exports_external.string().max(256).transform((v)=>hashEntity("actor",v)).optional(),"A"),RemainingMembersSchema=tagTier(exports_external.number().int().min(0).max(256).optional(),"C"),ReasonSchema8=tagTier(exports_external.string().max(512).transform((v)=>redactFreeText(v)).optional(),"B"),schema40=exports_external.object({team_name:TeamNameSchema3,actor:ActorSchema5,remaining_members:RemainingMembersSchema,reason:ReasonSchema8}).strict()});var exports_tmux_pane_placed={};__export(exports_tmux_pane_placed,{schema:()=>schema41,TYPE:()=>TYPE40,SCHEMA_VERSION:()=>SCHEMA_VERSION40,KIND:()=>KIND40});var SCHEMA_VERSION40=1,TYPE40="tmux.pane.placed",KIND40="event",AgentIdSchema7,SessionSchema,WindowIndexSchema,PaneIndexSchema,PaneIdSchema,ActionSchema,schema41;var init_tmux_pane_placed=__esm(()=>{init_zod();init_redactors();AgentIdSchema7=tagTier(exports_external.string().min(1).max(256).transform((v)=>hashEntity("agent",v)),"A"),SessionSchema=tagTier(exports_external.string().min(1).max(128),"C","tmux session name \u2014 public"),WindowIndexSchema=tagTier(exports_external.number().int().min(0).max(256),"C"),PaneIndexSchema=tagTier(exports_external.number().int().min(0).max(256),"C"),PaneIdSchema=tagTier(exports_external.string().max(64).optional(),"C","tmux pane id \u2014 public"),ActionSchema=tagTier(exports_external.enum(["spawn","attach","replace","split"]),"C"),schema41=exports_external.object({agent_id:AgentIdSchema7,session:SessionSchema,window_index:WindowIndexSchema,pane_index:PaneIndexSchema,pane_id:PaneIdSchema,action:ActionSchema}).strict()});var exports_wish_dispatch={};__export(exports_wish_dispatch,{schema:()=>schema42,TYPE:()=>TYPE41,SCHEMA_VERSION:()=>SCHEMA_VERSION41,KIND:()=>KIND41});var SCHEMA_VERSION41=1,TYPE41="wish.dispatch",KIND41="span",WishSlugSchema2,WaveSchema,GroupIdSchema,GroupNameSchema,ActorSchema6,OutcomeSchema3,DurationSchema7,DryRunSchema,schema42;var init_wish_dispatch=__esm(()=>{init_zod();init_redactors();WishSlugSchema2=tagTier(exports_external.string().min(1).max(128),"C","wish slug \u2014 public"),WaveSchema=tagTier(exports_external.number().int().min(0).max(32),"C"),GroupIdSchema=tagTier(exports_external.string().min(1).max(128).transform((v)=>hashEntity("group",v)),"A","group id hashed"),GroupNameSchema=tagTier(exports_external.string().max(128),"C"),ActorSchema6=tagTier(exports_external.string().max(128).transform((v)=>redactFreeText(v)).optional(),"B"),OutcomeSchema3=tagTier(exports_external.enum(["started","completed","failed","blocked"]).optional(),"C"),DurationSchema7=tagTier(exports_external.number().int().min(0).max(86400000).optional(),"C","ms"),DryRunSchema=tagTier(exports_external.boolean().optional(),"C"),schema42=exports_external.object({wish_slug:WishSlugSchema2,wave:WaveSchema.optional(),group_id:GroupIdSchema.optional(),group_name:GroupNameSchema.optional(),actor:ActorSchema6,outcome:OutcomeSchema3,duration_ms:DurationSchema7,dry_run:DryRunSchema}).strict()});function entry(mod){return{type:mod.TYPE,kind:mod.KIND,schema:mod.schema,schema_version:mod.SCHEMA_VERSION,tier_defaults:mod.DEFAULT_TIER??"default"}}function getEntry(type2){return EventRegistry[type2]??null}function isRegistered(type2){return Object.hasOwn(EventRegistry,type2)}var EventRegistry;var init_registry=__esm(()=>{init_agent_lifecycle();init_agent_resume_attempted();init_agent_resume_failed();init_agent_resume_succeeded();init_audit_export();init_audit_un_hash();init_cache_hit();init_cache_invalidate();init_cli_command();init_consumer_heartbeat();init_consumer_lagged();init_correlation_orphan_rate();init_detector_disabled();init_emit_backpressure_critical();init_emitter_latency_p99();init_emitter_queue_depth();init_emitter_rejected();init_emitter_shedding_load();init_error_raised();init_executor_row_written();init_executor_write();init_hook_delivery();init_mailbox_delivery();init_notify_delivery_lag();init_permissions_deny();init_permissions_grant();init_resume_attempt();init_rot_detected();init_rot_executor_ghost_detected();init_rot_inbox_watcher_spawn_loop_detected();init_rot_team_ls_drift_detected();init_runbook_triggered();init_schema_violation();init_session_id_written();init_session_reconciled();init_state_transition();init_stream_gap_detected();init_team_create();init_team_disband();init_tmux_pane_placed();init_wish_dispatch();EventRegistry={[TYPE9]:entry(exports_cli_command),[TYPE]:entry(exports_agent_lifecycle),[TYPE41]:entry(exports_wish_dispatch),[TYPE22]:entry(exports_hook_delivery),[TYPE27]:entry(exports_resume_attempt),[TYPE21]:entry(exports_executor_write),[TYPE23]:entry(exports_mailbox_delivery),[TYPE19]:entry(exports_error_raised),[TYPE36]:entry(exports_state_transition),[TYPE33]:entry(exports_schema_violation),[TYPE34]:entry(exports_session_id_written),[TYPE35]:entry(exports_session_reconciled),[TYPE40]:entry(exports_tmux_pane_placed),[TYPE20]:entry(exports_executor_row_written),[TYPE8]:entry(exports_cache_invalidate),[TYPE7]:entry(exports_cache_hit),[TYPE32]:entry(exports_runbook_triggered),[TYPE10]:entry(exports_consumer_heartbeat),[TYPE26]:entry(exports_permissions_grant),[TYPE25]:entry(exports_permissions_deny),[TYPE38]:entry(exports_team_create),[TYPE39]:entry(exports_team_disband),[TYPE6]:entry(exports_audit_un_hash),[TYPE5]:entry(exports_audit_export),[TYPE17]:entry(exports_emitter_rejected),[TYPE16]:entry(exports_emitter_queue_depth),[TYPE15]:entry(exports_emitter_latency_p99),[TYPE24]:entry(exports_notify_delivery_lag),[TYPE37]:entry(exports_stream_gap_detected),[TYPE12]:entry(exports_correlation_orphan_rate),[TYPE18]:entry(exports_emitter_shedding_load),[TYPE11]:entry(exports_consumer_lagged),[TYPE14]:entry(exports_emit_backpressure_critical),[TYPE13]:entry(exports_detector_disabled),[TYPE28]:entry(exports_rot_detected),[TYPE31]:entry(exports_rot_team_ls_drift_detected),[TYPE29]:entry(exports_rot_executor_ghost_detected),[TYPE30]:entry(exports_rot_inbox_watcher_spawn_loop_detected),[TYPE2]:entry(exports_agent_resume_attempted),[TYPE4]:entry(exports_agent_resume_succeeded),[TYPE3]:entry(exports_agent_resume_failed)}});var exports_emit={};__export(exports_emit,{startSpan:()=>startSpan,shutdownEmitter:()=>shutdownEmitter,resumeEmitter:()=>resumeEmitter,isSpillJournalEmpty:()=>isSpillJournalEmpty,getEmitStats:()=>getEmitStats,flushNow:()=>flushNow,endSpan:()=>endSpan,emitEvent:()=>emitEvent,drainSpillJournalNow:()=>drainSpillJournalNow,__setSpillPathForTests:()=>__setSpillPathForTests,__resetEmitForTests:()=>__resetEmitForTests,__TEST_QUEUE_CAP:()=>__TEST_QUEUE_CAP,__TEST_BACKPRESSURE_WAIT_MS:()=>__TEST_BACKPRESSURE_WAIT_MS});import{createHash as createHash2,randomUUID as randomUUID3}from"crypto";import{appendFileSync,closeSync,existsSync as existsSync14,fsyncSync,mkdirSync as mkdirSync7,openSync,readFileSync as readFileSync10,renameSync as renameSync2,statSync as statSync2,unlinkSync as unlinkSync4}from"fs";import{homedir as homedir13}from"os";import{dirname as dirname6,join as join18}from"path";function getEmitStats(){return{...stats,queue_depth:queue.length}}function defaultSpillPath(){let home=process.env.GENIE_HOME??join18(homedir13(),".genie");return join18(home,"data","emit-spill.jsonl")}function __setSpillPathForTests(path2){spillPathOverride=path2}function spillPath(){return spillPathOverride??defaultSpillPath()}function ensureSpillDir(path2){let dir=dirname6(path2);if(!existsSync14(dir))mkdirSync7(dir,{recursive:!0})}function writeSpillRow(row){let path2=spillPath();ensureSpillDir(path2);let line=`${JSON.stringify(row)}
743
743
  `,fd=openSync(path2,"a");try{appendFileSync(fd,line);try{fsyncSync(fd)}catch{}}finally{closeSync(fd)}if(stats.spilled_warn_plus++,firstSpillAt===null)firstSpillAt=Date.now()}function countSpillRows(){let path2=spillPath();if(!existsSync14(path2))return 0;try{let contents=readFileSync10(path2,"utf8");if(!contents)return 0;return contents.split(`
@@ -981,12 +981,12 @@ ${errCtx.stack}`;d.reject(err)}else d.resolve(msg)}});return sub.requestSubject=
981
981
  FROM session_sync
982
982
  WHERE id = 'backfill'
983
983
  LIMIT 1
984
- `;if(rows.length===0)return{driftPct:null,detail:"no prior backfill row \u2014 first run will seed"};let row=rows[0];if(row.total_bytes<=0)return{driftPct:0,detail:"no JSONL bytes discovered yet"};let pct=Math.max(0,row.total_bytes-row.processed_bytes)/row.total_bytes*100,display=pct.toFixed(1);return{driftPct:pct,detail:`processed ${row.processed_bytes}/${row.total_bytes} bytes (drift ${display}%)`}}catch(err){return{driftPct:null,detail:`drift probe failed: ${err.message}`}}}async function defaultRunBackfillSync(){if(!await isAvailable())return{ranSync:!1,driftPct:null,detail:"pg unavailable \u2014 backfill skipped"};return(async()=>{try{let sql=await getConnection(),{startBackfill:startBackfill2}=await Promise.resolve().then(() => (init_session_backfill(),exports_session_backfill));await startBackfill2(sql)}catch{}})(),{ranSync:!0,driftPct:null,detail:"background convergence kicked \u2014 `genie doctor --fix` to wait"}}async function defaultRunBackfillBlocking(){if(!await isAvailable())return{ranSync:!1,driftPct:null,detail:"pg unavailable \u2014 backfill skipped"};let sql=await getConnection(),{startBackfill:startBackfill2}=await Promise.resolve().then(() => (init_session_backfill(),exports_session_backfill));await startBackfill2(sql);let after=await defaultMeasureBackfillDrift();return{ranSync:!0,driftPct:after.driftPct,detail:after.detail}}async function defaultListOrphanedZombies(){try{let{listExhaustedZombies:listExhaustedZombies2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));return await listExhaustedZombies2()}catch{return[]}}function safeIsDirectory(path2){try{return statSync5(path2).isDirectory()}catch{return!1}}function summarizeInboxes(inboxesDir2){let inboxFiles=[];try{inboxFiles=readdirSync6(inboxesDir2).filter((f)=>f.endsWith(".json"))}catch{return{newestMs:null,hasContent:!1}}let newestMs=null,hasContent=!1;for(let f of inboxFiles)try{let st=statSync5(join24(inboxesDir2,f));if(newestMs===null||st.mtimeMs>newestMs)newestMs=st.mtimeMs;if(st.size>2)hasContent=!0}catch{}return{newestMs,hasContent}}function classifyTeamDir2(name,base,now){let dir=join24(base,name);if(!safeIsDirectory(dir))return null;if(existsSync19(join24(dir,"config.json")))return null;let inboxesDir2=join24(dir,"inboxes");if(!safeIsDirectory(inboxesDir2))return null;let{newestMs,hasContent}=summarizeInboxes(inboxesDir2),orphan={teamName:name,path:dir,newestInboxMs:newestMs,hasContent},active=hasContent&&newestMs!==null&&now-newestMs<ORPHAN_FRESH_WINDOW_MS;return{orphan,active}}function defaultScanTeamConfigOrphans(){let base=teamsBaseDir3(),result2={active:[],stale:[]};if(!existsSync19(base))return result2;let now=Date.now();for(let name of readdirSync6(base)){if(name.startsWith(".")||name==="_archive")continue;let classified=classifyTeamDir2(name,base,now);if(!classified)continue;(classified.active?result2.active:result2.stale).push(classified.orphan)}return result2}function defaultArchiveStaleTeamConfigs(orphans){if(orphans.length===0)return[];let archiveRoot=join24(teamsBaseDir3(),"_archive");mkdirSync9(archiveRoot,{recursive:!0});let ts3=new Date().toISOString().replace(/[:.]/g,"-"),archived=[];for(let o of orphans){let dest=join24(archiveRoot,`${o.teamName}-${ts3}`);try{renameSync4(o.path,dest),archived.push(dest)}catch{}}return archived}async function defaultRecordAudit(eventType,name,details){await recordAuditEvent("command","serve_start",eventType,"serve",{precondition:name,...details})}async function checkPartition(health,autoFix,deps){if(health.partition_health==="ok"||health.partition_health==="warn")return{name:"partition",status:"ok",detail:health.next_rotation_at?`next rotation: ${health.next_rotation_at}`:void 0};if(health.partition_health==="unknown")return{name:"partition",status:"skipped",detail:"pg unavailable \u2014 skipping partition probe"};if(!autoFix)return{name:"partition",status:"refused",detail:"today's partition is missing or rotation is overdue",fixCommand:"genie doctor --observability # then re-run; or `genie serve start` (without --no-fix)"};let result2=await deps.runPartitionMaintenance();return{name:"partition",status:"fixed",detail:`created/present ${result2.createdOrPresent}, dropped ${result2.dropped}; next rotation ${result2.nextRotationAt??"unknown"}`}}async function checkWatchdog(health,autoFix,deps){if(deps.platform!=="linux")return{name:"watchdog",status:"skipped",detail:"watchdog install is Linux/systemd only"};if(process.env.GENIE_WATCHDOG_SKIP==="1")return{name:"watchdog",status:"skipped",detail:"GENIE_WATCHDOG_SKIP=1"};if(health.watchdog==="ok")return{name:"watchdog",status:"ok"};if(!process.env.GENIE_WATCHDOG_INSTALL_CMD&&!resolveWatchdogCliPath())return{name:"watchdog",status:"skipped",detail:"watchdog optional in this install \u2014 set GENIE_WATCHDOG_SKIP=1 to silence, or run from source repo to enable"};if(!autoFix)return{name:"watchdog",status:"refused",detail:health.watchdog_detail??"watchdog units missing",fixCommand:"sudo bun run packages/watchdog/src/cli.ts install"};try{let result2=await deps.installWatchdog();return{name:"watchdog",status:"fixed",detail:`wrote ${result2.filesWritten.length}, skipped ${result2.filesSkipped.length}`}}catch(err){return{name:"watchdog",status:"refused",detail:`auto-install failed: ${err.message}`,fixCommand:"sudo bun run packages/watchdog/src/cli.ts install"}}}async function checkBackfill(autoFix,deps){let drift=await deps.measureBackfillDrift();if(drift.driftPct===null)return{name:"backfill",status:"skipped",detail:drift.detail};if(drift.driftPct<BACKFILL_DRIFT_THRESHOLD_PCT)return{name:"backfill",status:"ok",detail:drift.detail};if(!autoFix)return{name:"backfill",status:"refused",detail:drift.detail,fixCommand:`genie sessions sync # drift ${drift.driftPct.toFixed(1)}% > ${BACKFILL_DRIFT_THRESHOLD_PCT}%`};return{name:"backfill",status:"fixed",detail:(await deps.runBackfillSync()).detail}}async function checkDeadPaneZombies(deps){let orphans=await deps.listOrphanedZombies();if(orphans.length===0)return{name:"dead_pane_zombies",status:"ok"};return{name:"dead_pane_zombies",status:"refused",detail:`${orphans.length} exhausted zombie(s) past TTL; visible in \`genie status\``,fixCommand:"genie prune --zombies # archive eligible rows"}}function checkTeamConfigOrphans(autoFix,deps){let scan=deps.scanTeamConfigOrphans();if(scan.active.length===0&&scan.stale.length===0)return{name:"team_config_orphans",status:"ok"};if(!autoFix){let summary=`active=${scan.active.length} stale=${scan.stale.length}`,firstActive=scan.active[0]?.teamName;return{name:"team_config_orphans",status:"refused",detail:summary,fixCommand:firstActive?`genie team repair ${firstActive} # active orphan; stale dirs archive on auto-fix`:"genie serve start # auto-fix archives stale orphans"}}let archivedPaths=deps.archiveStaleTeamConfigs(scan.stale);if(scan.active.length>0)return{name:"team_config_orphans",status:"refused",detail:`archived ${archivedPaths.length} stale; ${scan.active.length} active orphan(s) need repair`,fixCommand:`genie team repair ${scan.active[0].teamName}`};return{name:"team_config_orphans",status:"fixed",detail:`archived ${archivedPaths.length} stale orphan(s)`}}function bindDefaults(deps){return{collectHealth:deps?.collectHealth??collectObservabilityHealth,runPartitionMaintenance:deps?.runPartitionMaintenance??defaultRunPartitionMaintenance,installWatchdog:deps?.installWatchdog??defaultInstallWatchdog,runBackfillSync:deps?.runBackfillSync??defaultRunBackfillSync,measureBackfillDrift:deps?.measureBackfillDrift??defaultMeasureBackfillDrift,listOrphanedZombies:deps?.listOrphanedZombies??defaultListOrphanedZombies,scanTeamConfigOrphans:deps?.scanTeamConfigOrphans??defaultScanTeamConfigOrphans,archiveStaleTeamConfigs:deps?.archiveStaleTeamConfigs??defaultArchiveStaleTeamConfigs,platform:deps?.platform??process.platform,recordAudit:deps?.recordAudit??defaultRecordAudit,log:deps?.log??((line)=>console.log(line))}}async function ensureServeReady(opts){let deps=bindDefaults(opts.deps),health=await deps.collectHealth(),results=[];results.push(await checkPartition(health,opts.autoFix,deps)),results.push(await checkBackfill(opts.autoFix,deps)),results.push(await checkDeadPaneZombies(deps)),await emitAuditEvents(results,deps);let ok=results.every((r)=>r.status==="ok"||r.status==="fixed"||r.status==="skipped");return printReport(results,deps.log),{ok,results}}function formatDuration(ms){if(ms<1000)return`${ms}ms`;return`${(ms/1000).toFixed(1)}s`}function logMaintenanceStepStart(log,silent,label){if(!silent)log(` ${label}...`);return Date.now()}function logMaintenanceStepDone(log,silent,label,startedAt){if(!silent)log(` done ${label} (${formatDuration(Date.now()-startedAt)})`)}async function runDoctorMaintenance(opts={}){let rawRunBackfillSync=opts.deps?.runBackfillSync??defaultRunBackfillBlocking,deps=bindDefaults({...opts.deps,runBackfillSync:defaultRunBackfillBlocking,log:opts.silent?()=>{}:opts.deps?.log});deps.runBackfillSync=async()=>{let startedAt2=logMaintenanceStepStart(deps.log,opts.silent,"Running session backfill convergence (can take minutes on large transcript history)");try{return await rawRunBackfillSync()}finally{logMaintenanceStepDone(deps.log,opts.silent,"session backfill convergence",startedAt2)}};let startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Collecting observability health"),health=await deps.collectHealth();logMaintenanceStepDone(deps.log,opts.silent,"observability health",startedAt);let results=[];startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking runtime event partitions"),results.push(await checkPartition(health,!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"runtime event partitions",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking watchdog install"),results.push(await checkWatchdog(health,!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"watchdog install",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking session backfill drift"),results.push(await checkBackfill(!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"session backfill drift",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking exhausted zombie rows"),results.push(await checkDeadPaneZombies(deps)),logMaintenanceStepDone(deps.log,opts.silent,"exhausted zombie rows",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking Claude team config orphans"),results.push(checkTeamConfigOrphans(!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"Claude team config orphans",startedAt),await emitAuditEvents(results,deps);let ok=results.every((r)=>r.status==="ok"||r.status==="fixed"||r.status==="skipped");return printReport(results,deps.log),{ok,results}}async function emitAuditEvents(results,deps){for(let result2 of results)if(result2.status==="fixed")await deps.recordAudit("serve.precondition.fixed",result2.name,{detail:result2.detail??null}).catch(()=>{});else if(result2.status==="refused")await deps.recordAudit("serve.precondition.refused",result2.name,{detail:result2.detail??null,fix_command:result2.fixCommand??null}).catch(()=>{})}function printReport(results,log){log(" Preconditions:");for(let r of results){let tag=statusTag(r.status),suffix=r.detail?` \u2014 ${r.detail}`:"";if(log(` ${tag} ${r.name}${suffix}`),r.status==="refused"&&r.fixCommand)log(` \u2192 ${r.fixCommand}`)}}function statusTag(status){switch(status){case"ok":return"[ok]";case"fixed":return"[fix]";case"refused":return"[!!]";case"skipped":return"[--]"}}var BACKFILL_DRIFT_THRESHOLD_PCT=5,ORPHAN_FRESH_WINDOW_MS=86400000;var init_ensure_ready=__esm(()=>{init_observability_health();init_audit();init_db()});var exports_doctor={};__export(exports_doctor,{runPostUpdateMaintenance:()=>runPostUpdateMaintenance,findStaleGenieCandidates:()=>findStaleGenieCandidates,findBundledTmuxConfigDir:()=>findBundledTmuxConfigDir,doctorCommand:()=>doctorCommand,checkTmuxConfigs:()=>checkTmuxConfigs,checkLegacyAgentFrontmatter:()=>checkLegacyAgentFrontmatter,checkGenieAgentTemplate:()=>checkGenieAgentTemplate});import{execFileSync}from"child_process";import{copyFileSync as copyFileSync2,existsSync as existsSync20,mkdirSync as mkdirSync10,readFileSync as readFileSync13,readdirSync as readdirSync7,statSync as statSync6,unlinkSync as unlinkSync6,writeFileSync as writeFileSync7}from"fs";import{homedir as homedir20}from"os";import{dirname as dirname8,join as join25,resolve as resolve3}from"path";import{fileURLToPath as fileURLToPath3}from"url";var{$:$3}=globalThis.Bun;function printSectionHeader(title){console.log(),console.log(`\x1B[1m${title}:\x1B[0m`)}function printCheckResult(result2){let icon={pass:"\x1B[32m\u2713\x1B[0m",fail:"\x1B[31m\u2717\x1B[0m",warn:"\x1B[33m!\x1B[0m"}[result2.status],message=result2.message?` ${result2.message}`:"";if(console.log(` ${icon} ${result2.name}${message}`),result2.suggestion)console.log(` \x1B[2m${result2.suggestion}\x1B[0m`)}async function checkPrerequisites(){let results=[],tmuxCheck=await checkCommand("tmux");if(tmuxCheck.exists)results.push({name:"tmux",status:"pass",message:tmuxCheck.version||""});else results.push({name:"tmux",status:"fail",suggestion:"Install with: brew install tmux (or apt install tmux)"});let jqCheck=await checkCommand("jq");if(jqCheck.exists)results.push({name:"jq",status:"pass",message:jqCheck.version||""});else results.push({name:"jq",status:"fail",suggestion:"Install with: brew install jq (or apt install jq)"});let bunCheck=await checkCommand("bun");if(bunCheck.exists)results.push({name:"bun",status:"pass",message:bunCheck.version||""});else results.push({name:"bun",status:"fail",suggestion:"Install with: curl -fsSL https://bun.sh/install | bash"});let claudeCheck=await checkCommand("claude");if(claudeCheck.exists)results.push({name:"Claude Code",status:"pass",message:claudeCheck.version||""});else results.push({name:"Claude Code",status:"warn",suggestion:"Install with: npm install -g @anthropic-ai/claude-code"});let codexCheck=await checkCommand("codex");if(codexCheck.exists)results.push({name:"Codex CLI",status:"pass",message:codexCheck.version||""});else results.push({name:"Codex CLI",status:"warn",suggestion:"Install via OpenAI account; codex is optional unless using --provider codex"});let requiredForSpawn=["genie","bun","node","npm","git","claude","codex"];for(let bin of requiredForSpawn){let interactivePath=await resolveBinaryInteractive(bin),nonInteractivePath=await resolveBinaryNonInteractive(bin);if(interactivePath&&nonInteractivePath)results.push({name:`Non-interactive PATH: ${bin}`,status:"pass",message:nonInteractivePath});else if(interactivePath&&!nonInteractivePath)results.push({name:`Non-interactive PATH: ${bin}`,status:"warn",message:"interactive-only",suggestion:`Move PATH export from ~/.bashrc to ~/.profile so spawn-scripts can resolve ${bin}. (Or use a stable symlink in ~/.local/bin.)`});else if(!interactivePath&&bin!=="codex"){if(bin==="genie"||bin==="node"||bin==="npm"||bin==="git")results.push({name:`Non-interactive PATH: ${bin}`,status:"warn",message:"not in non-interactive PATH",suggestion:`Add ${bin} to ~/.profile (not just ~/.bashrc). Some flows (e.g. genie update) shell out to bare '${bin}' from non-interactive subprocesses.`})}}return results}async function resolveBinaryInteractive(bin){try{return(await $3`command -v ${bin}`.quiet().text()).trim()||null}catch{return null}}async function resolveBinaryNonInteractive(bin){try{return(await $3`sh -c "command -v ${bin}"`.quiet().text()).trim()||null}catch{return null}}async function checkConfiguration(){let results=[];if(genieConfigExists())results.push({name:"Genie config exists",status:"pass",message:contractClaudePath(getGenieConfigPath())});else results.push({name:"Genie config exists",status:"warn",message:"not found",suggestion:"Run: genie setup"});if(isSetupComplete())results.push({name:"Setup complete",status:"pass"});else results.push({name:"Setup complete",status:"warn",message:"not completed",suggestion:"Run: genie setup"});let claudeSettingsPath=getClaudeSettingsPath();if(existsSync20(claudeSettingsPath))results.push({name:"Claude settings exists",status:"pass",message:contractClaudePath(claudeSettingsPath)});else results.push({name:"Claude settings exists",status:"warn",message:"not found",suggestion:"Claude Code creates this on first run"});return results}async function checkTmux(){let results=[];try{if((await $3`${tmuxBin()} -L genie list-sessions 2>/dev/null`.quiet()).exitCode===0)results.push({name:"Server running",status:"pass"});else return results.push({name:"Server running",status:"warn",message:"no sessions",suggestion:"Start with: tmux new-session -d -s genie"}),results}catch{return results.push({name:"Server running",status:"warn",message:"could not check"}),results}let sessionName=(await loadGenieConfig()).session.name;try{if((await $3`${tmuxBin()} -L genie has-session -t ${`=${sessionName}`} 2>/dev/null`.quiet()).exitCode===0)results.push({name:`Session '${sessionName}' exists`,status:"pass"});else results.push({name:`Session '${sessionName}' exists`,status:"warn",suggestion:`Start with: tmux new-session -d -s ${sessionName}`})}catch{results.push({name:`Session '${sessionName}' exists`,status:"warn",message:"could not check"})}return results}async function checkWorkerProfiles(){let results=[];if(!genieConfigExists())return results.push({name:"Worker profiles",status:"warn",message:"no genie config",suggestion:"Run: genie setup"}),results;let config=await loadGenieConfig(),profiles=config.workerProfiles;if(!profiles||Object.keys(profiles).length===0)return results.push({name:"Worker profiles",status:"pass",message:"none configured (using defaults)"}),results;let totalProfiles=Object.keys(profiles).length;results.push({name:"Profiles configured",status:"pass",message:`${totalProfiles} profile${totalProfiles===1?"":"s"}`});for(let name of Object.keys(profiles))results.push({name:`Profile '${name}'`,status:"pass",message:"claude (direct)"});if(config.defaultWorkerProfile)if(profiles[config.defaultWorkerProfile])results.push({name:"Default profile",status:"pass",message:config.defaultWorkerProfile});else results.push({name:"Default profile",status:"warn",message:`'${config.defaultWorkerProfile}' not found`,suggestion:"Run: genie profiles default <profile>"});return results}async function checkBridge(){let results=[];try{let{getBridgeStatus:getBridgeStatus2,removeBridgePidfile:removeBridgePidfile2}=await Promise.resolve().then(() => (init_bridge_status(),exports_bridge_status)),res=await getBridgeStatus2(void 0,{});if(res.state==="stopped")return results.push({name:"Bridge",status:"warn",message:"stopped (no pidfile)",suggestion:"Start the bridge with: genie serve"}),results;if(res.state==="stale"){if(res.pidfile)removeBridgePidfile2();return results.push({name:"Bridge",status:"fail",message:`stale: ${res.detail}`,suggestion:"Restart the bridge with: genie serve restart"}),results}let{pong,pidfile}=res;if(!pong||!pidfile)return results.push({name:"Bridge",status:"warn",message:"running state missing pong/pidfile metadata"}),results;let uptimeSec=Math.round(pong.uptimeMs/1000);results.push({name:"Bridge running",status:"pass",message:`running (pid ${pong.pid}, uptime ${uptimeSec}s)`}),results.push({name:"NATS ping",status:"pass",message:`pong in ${res.latencyMs??0}ms (${pidfile.natsUrl})`}),results.push({name:"Subjects",status:"pass",message:pong.subjects.join(", ")})}catch(err){let detail=err instanceof Error?err.message:String(err);results.push({name:"Bridge module",status:"warn",message:`could not probe bridge: ${detail}`})}return results}function checkGenieAgentTemplate(workspaceRoot){let root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let genieDir=join25(root,"agents","genie");if(!existsSync20(genieDir))return[];let agentsMd=join25(genieDir,"AGENTS.md"),agentYaml=join25(genieDir,"agent.yaml"),issues=[];if(existsSync20(agentsMd))try{if(readFileSync13(agentsMd,"utf-8").includes(STALE_GENIE_AGENTS_MD_MARKER))issues.push("AGENTS.md uses generic placeholder template")}catch{}if(existsSync20(agentYaml))try{let text=readFileSync13(agentYaml,"utf-8");if(!STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX.test(text))issues.push("agent.yaml missing model field (TUI falls back to gray)")}catch{}if(issues.length===0)return[{name:"agents/genie scaffold up to date",status:"pass"}];return[{name:"agents/genie stale scaffold",status:"warn",message:issues.join("; "),suggestion:"Run: genie doctor --fix (re-emits genie specialist templates, preserves user edits)"}]}function findBundledTmuxConfigDir(){try{let moduleDir=dirname8(fileURLToPath3(import.meta.url));for(let i2=0;i2<6;i2+=1){let candidate=resolve3(moduleDir,"../".repeat(i2+1),"scripts","tmux");if(existsSync20(join25(candidate,"tui-tmux.conf"))&&existsSync20(join25(candidate,"genie.tmux.conf")))return candidate}}catch{}return null}function checkTmuxConfigs(){if(!findBundledTmuxConfigDir())return[{name:"tmux configs",status:"pass",message:"bundled configs unavailable (skipped)"}];let home=join25(homedir20(),".genie"),stale=[],expectedSnippet="unbind -n MouseDown3Pane";for(let file of["tui-tmux.conf","tmux.conf"]){let installedPath=join25(home,file);if(!existsSync20(installedPath))continue;try{if(!readFileSync13(installedPath,"utf-8").includes(expectedSnippet))stale.push(file)}catch{stale.push(file)}}if(stale.length===0)return[{name:"~/.genie tmux configs up to date",status:"pass"}];return[{name:"~/.genie tmux configs stale",status:"warn",message:`missing right-click unbind in: ${stale.join(", ")}`,suggestion:"Run: genie doctor --fix (refreshes ~/.genie tmux configs from bundled scripts/tmux/)"}]}function isAgentDirectory(path2){try{return statSync6(path2).isDirectory()}catch{return!1}}function hasLegacyFrontmatter(agentDir){let yamlPath=join25(agentDir,"agent.yaml"),agentsMdPath=join25(agentDir,"AGENTS.md");if(!existsSync20(yamlPath)||!existsSync20(agentsMdPath))return!1;try{return readFileSync13(agentsMdPath,"utf-8").slice(0,4).startsWith("---")}catch{return!1}}function checkLegacyAgentFrontmatter(workspaceRoot){let results=[],root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let agentsDir=join25(root,"agents");if(!existsSync20(agentsDir))return[];let entries;try{entries=readdirSync7(agentsDir)}catch{return[]}for(let name of entries){let agentDir=join25(agentsDir,name);if(!isAgentDirectory(agentDir))continue;if(!hasLegacyFrontmatter(agentDir))continue;results.push({name:`agents/${name}/AGENTS.md`,status:"warn",message:"legacy frontmatter detected (ignored by sync)",suggestion:`Move config into agents/${name}/agent.yaml \u2014 AGENTS.md is prompt-only post-migration.`})}if(results.length===0)results.push({name:"No legacy frontmatter in agents/*/AGENTS.md",status:"pass"});return results}async function checkPgserveCanonical(){let results=[],canonicalPort=null;try{let out=execFileSync("pgserve",["port"],{encoding:"utf8",timeout:3000,stdio:["ignore","pipe","ignore"]}),parsed=Number.parseInt(out.trim(),10);if(Number.isFinite(parsed)&&parsed>0&&parsed<=65535)canonicalPort=parsed}catch{}if(canonicalPort===null)return results.push({name:"pgserve binary",status:"warn",message:"not on PATH (or `pgserve port` failed)",suggestion:"Install canonical pgserve: bun add -g pgserve@^2.1.0 (then run `pgserve install` to register under pm2)"}),results;results.push({name:"pgserve binary",status:"pass",message:`canonical port ${canonicalPort}`});try{let status=execFileSync("pgserve",["status","--json"],{encoding:"utf8",timeout:3000,stdio:["ignore","pipe","ignore"]}),parsed=JSON.parse(status);if(parsed.installed===!0&&parsed.status==="online")results.push({name:"pgserve under pm2",status:"pass",message:`online \u2014 shared backbone for genie-serve + omni-api on :${canonicalPort}`});else if(parsed.installed===!0)results.push({name:"pgserve under pm2",status:"warn",message:`registered but status=${parsed.status??"unknown"}`,suggestion:"Recover with: pm2 restart pgserve (logs: ~/.pgserve/logs/)"});else results.push({name:"pgserve under pm2",status:"warn",message:"binary present but not registered under pm2",suggestion:"Register canonical pgserve: pgserve install"})}catch{results.push({name:"pgserve under pm2",status:"warn",message:"`pgserve status` failed (pm2 unreachable?)",suggestion:"Verify pm2: pm2 list | Re-register: pgserve install"})}return results}function runCheckSection(label,results,counts){printSectionHeader(label);for(let result2 of results){if(printCheckResult(result2),result2.status==="fail")counts.errors=!0;if(result2.status==="warn")counts.warnings=!0}}async function doctorCommand(options){if(options?.fix){await doctorFix();return}if(options?.fixTeamOrphans){await runFixTeamOrphans({dryRun:Boolean(options.dryRun),json:Boolean(options.json)});return}if(options?.observability){await runObservabilityCheck(Boolean(options.json));return}if(options?.perf){let{runPerfCheck:runPerfCheck2}=await Promise.resolve().then(() => (init_perf_check(),exports_perf_check));await runPerfCheck2(Boolean(options.json));return}console.log(),console.log("\x1B[1mGenie Doctor\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`);let counts={errors:!1,warnings:!1};if(runCheckSection("Prerequisites",await checkPrerequisites(),counts),runCheckSection("Installer Resolution",await collectInstallerResolution(),counts),runCheckSection("Configuration",await checkConfiguration(),counts),runCheckSection("Tmux",await checkTmux(),counts),runCheckSection("Tmux Configs",checkTmuxConfigs(),counts),runCheckSection("Worker Profiles",await checkWorkerProfiles(),counts),runCheckSection("Pgserve (canonical backbone)",await checkPgserveCanonical(),counts),runCheckSection("Omni Bridge",await checkBridge(),counts),runCheckSection("Agent Config",checkLegacyAgentFrontmatter(),counts),runCheckSection("Genie Specialist",checkGenieAgentTemplate(),counts),printDoctorSummary(counts),counts.errors)process.exit(1)}function printObservabilityReport(report){if(console.log(),console.log("\x1B[1mObservability Health\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),console.log(` partition_health: ${report.partition_health}`),console.log(` partition_count: ${report.partition_count}`),console.log(` next_rotation_at: ${report.next_rotation_at??"n/a"}`),console.log(` oldest_partition: ${report.oldest_partition??"n/a"}`),console.log(` newest_partition: ${report.newest_partition??"n/a"}`),console.log(` GENIE_WIDE_EMIT: ${report.wide_emit_flag}`),report.message)console.log(` note: ${report.message}`);console.log()}async function runObservabilityCheck(json2){let report=await collectObservabilityHealth();if(json2)console.log(JSON.stringify(report,null,2));else printObservabilityReport(report);if(report.partition_health==="fail")process.exit(1)}async function runFixTeamOrphans(opts){let{archiveOrphanTeamConfigs:archiveOrphanTeamConfigs2}=await Promise.resolve().then(() => (init_archive_orphan_team_configs(),exports_archive_orphan_team_configs)),decisions=archiveOrphanTeamConfigs2({dryRun:opts.dryRun});if(opts.json){console.log(JSON.stringify({dryRun:opts.dryRun,decisions},null,2));return}if(decisions.length===0){console.log(" no team config dirs found \u2014 nothing to do");return}for(let d of decisions){let tag=d.classification==="stale"?opts.dryRun?"WOULD ARCHIVE":"ARCHIVED":d.classification.toUpperCase(),tail=d.archivedTo?` \u2192 ${d.archivedTo}`:"";console.log(` [${tag}] ${d.team} \u2014 ${d.reason}${tail}`)}let stale=decisions.filter((d)=>d.classification==="stale").length,active=decisions.filter((d)=>d.classification==="active").length;console.log(`
984
+ `;if(rows.length===0)return{driftPct:null,detail:"no prior backfill row \u2014 first run will seed"};let row=rows[0];if(row.total_bytes<=0)return{driftPct:0,detail:"no JSONL bytes discovered yet"};let pct=Math.max(0,row.total_bytes-row.processed_bytes)/row.total_bytes*100,display=pct.toFixed(1);return{driftPct:pct,detail:`processed ${row.processed_bytes}/${row.total_bytes} bytes (drift ${display}%)`}}catch(err){return{driftPct:null,detail:`drift probe failed: ${err.message}`}}}async function defaultRunBackfillSync(){if(!await isAvailable())return{ranSync:!1,driftPct:null,detail:"pg unavailable \u2014 backfill skipped"};return(async()=>{try{let sql=await getConnection(),{startBackfill:startBackfill2}=await Promise.resolve().then(() => (init_session_backfill(),exports_session_backfill));await startBackfill2(sql)}catch{}})(),{ranSync:!0,driftPct:null,detail:"background convergence kicked \u2014 `genie doctor --fix` to wait"}}async function defaultRunBackfillBlocking(){if(!await isAvailable())return{ranSync:!1,driftPct:null,detail:"pg unavailable \u2014 backfill skipped"};let sql=await getConnection(),{startBackfill:startBackfill2}=await Promise.resolve().then(() => (init_session_backfill(),exports_session_backfill));await startBackfill2(sql);let after=await defaultMeasureBackfillDrift();return{ranSync:!0,driftPct:after.driftPct,detail:after.detail}}async function defaultListOrphanedZombies(){try{let{listExhaustedZombies:listExhaustedZombies2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));return await listExhaustedZombies2()}catch{return[]}}function safeIsDirectory(path2){try{return statSync5(path2).isDirectory()}catch{return!1}}function summarizeInboxes(inboxesDir2){let inboxFiles=[];try{inboxFiles=readdirSync6(inboxesDir2).filter((f)=>f.endsWith(".json"))}catch{return{newestMs:null,hasContent:!1}}let newestMs=null,hasContent=!1;for(let f of inboxFiles)try{let st=statSync5(join24(inboxesDir2,f));if(newestMs===null||st.mtimeMs>newestMs)newestMs=st.mtimeMs;if(st.size>2)hasContent=!0}catch{}return{newestMs,hasContent}}function classifyTeamDir2(name,base,now){let dir=join24(base,name);if(!safeIsDirectory(dir))return null;if(existsSync19(join24(dir,"config.json")))return null;let inboxesDir2=join24(dir,"inboxes");if(!safeIsDirectory(inboxesDir2))return null;let{newestMs,hasContent}=summarizeInboxes(inboxesDir2),orphan={teamName:name,path:dir,newestInboxMs:newestMs,hasContent},active=hasContent&&newestMs!==null&&now-newestMs<ORPHAN_FRESH_WINDOW_MS;return{orphan,active}}function defaultScanTeamConfigOrphans(){let base=teamsBaseDir3(),result2={active:[],stale:[]};if(!existsSync19(base))return result2;let now=Date.now();for(let name of readdirSync6(base)){if(name.startsWith(".")||name==="_archive")continue;let classified=classifyTeamDir2(name,base,now);if(!classified)continue;(classified.active?result2.active:result2.stale).push(classified.orphan)}return result2}function defaultArchiveStaleTeamConfigs(orphans){if(orphans.length===0)return[];let archiveRoot=join24(teamsBaseDir3(),"_archive");mkdirSync9(archiveRoot,{recursive:!0});let ts3=new Date().toISOString().replace(/[:.]/g,"-"),archived=[];for(let o of orphans){let dest=join24(archiveRoot,`${o.teamName}-${ts3}`);try{renameSync4(o.path,dest),archived.push(dest)}catch{}}return archived}async function defaultRecordAudit(eventType,name,details){await recordAuditEvent("command","serve_start",eventType,"serve",{precondition:name,...details})}async function checkPartition(health,autoFix,deps){if(health.partition_health==="ok"||health.partition_health==="warn")return{name:"partition",status:"ok",detail:health.next_rotation_at?`next rotation: ${health.next_rotation_at}`:void 0};if(health.partition_health==="unknown")return{name:"partition",status:"skipped",detail:"pg unavailable \u2014 skipping partition probe"};if(!autoFix)return{name:"partition",status:"refused",detail:"today's partition is missing or rotation is overdue",fixCommand:"genie doctor --observability # then re-run; or `genie serve start` (without --no-fix)"};let result2=await deps.runPartitionMaintenance();return{name:"partition",status:"fixed",detail:`created/present ${result2.createdOrPresent}, dropped ${result2.dropped}; next rotation ${result2.nextRotationAt??"unknown"}`}}async function checkWatchdog(health,autoFix,deps){if(deps.platform!=="linux")return{name:"watchdog",status:"skipped",detail:"watchdog install is Linux/systemd only"};if(process.env.GENIE_WATCHDOG_SKIP==="1")return{name:"watchdog",status:"skipped",detail:"GENIE_WATCHDOG_SKIP=1"};if(health.watchdog==="ok")return{name:"watchdog",status:"ok"};if(!process.env.GENIE_WATCHDOG_INSTALL_CMD&&!resolveWatchdogCliPath())return{name:"watchdog",status:"skipped",detail:"watchdog optional in this install \u2014 set GENIE_WATCHDOG_SKIP=1 to silence, or run from source repo to enable"};if(!autoFix)return{name:"watchdog",status:"refused",detail:health.watchdog_detail??"watchdog units missing",fixCommand:"sudo bun run packages/watchdog/src/cli.ts install"};try{let result2=await deps.installWatchdog();return{name:"watchdog",status:"fixed",detail:`wrote ${result2.filesWritten.length}, skipped ${result2.filesSkipped.length}`}}catch(err){return{name:"watchdog",status:"refused",detail:`auto-install failed: ${err.message}`,fixCommand:"sudo bun run packages/watchdog/src/cli.ts install"}}}async function checkBackfill(autoFix,deps){let drift=await deps.measureBackfillDrift();if(drift.driftPct===null)return{name:"backfill",status:"skipped",detail:drift.detail};if(drift.driftPct<BACKFILL_DRIFT_THRESHOLD_PCT)return{name:"backfill",status:"ok",detail:drift.detail};if(!autoFix)return{name:"backfill",status:"refused",detail:drift.detail,fixCommand:`genie sessions sync # drift ${drift.driftPct.toFixed(1)}% > ${BACKFILL_DRIFT_THRESHOLD_PCT}%`};return{name:"backfill",status:"fixed",detail:(await deps.runBackfillSync()).detail}}async function checkDeadPaneZombies(deps){let orphans=await deps.listOrphanedZombies();if(orphans.length===0)return{name:"dead_pane_zombies",status:"ok"};return{name:"dead_pane_zombies",status:"refused",detail:`${orphans.length} exhausted zombie(s) past TTL; visible in \`genie status\``,fixCommand:"genie prune --zombies # archive eligible rows"}}function checkTeamConfigOrphans(autoFix,deps){let scan=deps.scanTeamConfigOrphans();if(scan.active.length===0&&scan.stale.length===0)return{name:"team_config_orphans",status:"ok"};if(!autoFix){let summary=`active=${scan.active.length} stale=${scan.stale.length}`,firstActive=scan.active[0]?.teamName;return{name:"team_config_orphans",status:"refused",detail:summary,fixCommand:firstActive?`genie team repair ${firstActive} # active orphan; stale dirs archive on auto-fix`:"genie serve start # auto-fix archives stale orphans"}}let archivedPaths=deps.archiveStaleTeamConfigs(scan.stale);if(scan.active.length>0)return{name:"team_config_orphans",status:"refused",detail:`archived ${archivedPaths.length} stale; ${scan.active.length} active orphan(s) need repair`,fixCommand:`genie team repair ${scan.active[0].teamName}`};return{name:"team_config_orphans",status:"fixed",detail:`archived ${archivedPaths.length} stale orphan(s)`}}function bindDefaults(deps){return{collectHealth:deps?.collectHealth??collectObservabilityHealth,runPartitionMaintenance:deps?.runPartitionMaintenance??defaultRunPartitionMaintenance,installWatchdog:deps?.installWatchdog??defaultInstallWatchdog,runBackfillSync:deps?.runBackfillSync??defaultRunBackfillSync,measureBackfillDrift:deps?.measureBackfillDrift??defaultMeasureBackfillDrift,listOrphanedZombies:deps?.listOrphanedZombies??defaultListOrphanedZombies,scanTeamConfigOrphans:deps?.scanTeamConfigOrphans??defaultScanTeamConfigOrphans,archiveStaleTeamConfigs:deps?.archiveStaleTeamConfigs??defaultArchiveStaleTeamConfigs,platform:deps?.platform??process.platform,recordAudit:deps?.recordAudit??defaultRecordAudit,log:deps?.log??((line)=>console.log(line))}}async function ensureServeReady(opts){let deps=bindDefaults(opts.deps),health=await deps.collectHealth(),results=[];results.push(await checkPartition(health,opts.autoFix,deps)),results.push(await checkBackfill(opts.autoFix,deps)),results.push(await checkDeadPaneZombies(deps)),await emitAuditEvents(results,deps);let ok=results.every((r)=>r.status==="ok"||r.status==="fixed"||r.status==="skipped");return printReport(results,deps.log),{ok,results}}function formatDuration(ms){if(ms<1000)return`${ms}ms`;return`${(ms/1000).toFixed(1)}s`}function logMaintenanceStepStart(log,silent,label){if(!silent)log(` ${label}...`);return Date.now()}function logMaintenanceStepDone(log,silent,label,startedAt){if(!silent)log(` done ${label} (${formatDuration(Date.now()-startedAt)})`)}async function runDoctorMaintenance(opts={}){let rawRunBackfillSync=opts.deps?.runBackfillSync??defaultRunBackfillBlocking,deps=bindDefaults({...opts.deps,runBackfillSync:defaultRunBackfillBlocking,log:opts.silent?()=>{}:opts.deps?.log});deps.runBackfillSync=async()=>{let startedAt2=logMaintenanceStepStart(deps.log,opts.silent,"Running session backfill convergence (can take minutes on large transcript history)");try{return await rawRunBackfillSync()}finally{logMaintenanceStepDone(deps.log,opts.silent,"session backfill convergence",startedAt2)}};let startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Collecting observability health"),health=await deps.collectHealth();logMaintenanceStepDone(deps.log,opts.silent,"observability health",startedAt);let results=[];startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking runtime event partitions"),results.push(await checkPartition(health,!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"runtime event partitions",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking watchdog install"),results.push(await checkWatchdog(health,!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"watchdog install",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking session backfill drift"),results.push(await checkBackfill(!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"session backfill drift",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking exhausted zombie rows"),results.push(await checkDeadPaneZombies(deps)),logMaintenanceStepDone(deps.log,opts.silent,"exhausted zombie rows",startedAt),startedAt=logMaintenanceStepStart(deps.log,opts.silent,"Checking Claude team config orphans"),results.push(checkTeamConfigOrphans(!0,deps)),logMaintenanceStepDone(deps.log,opts.silent,"Claude team config orphans",startedAt),await emitAuditEvents(results,deps);let ok=results.every((r)=>r.status==="ok"||r.status==="fixed"||r.status==="skipped");return printReport(results,deps.log),{ok,results}}async function emitAuditEvents(results,deps){for(let result2 of results)if(result2.status==="fixed")await deps.recordAudit("serve.precondition.fixed",result2.name,{detail:result2.detail??null}).catch(()=>{});else if(result2.status==="refused")await deps.recordAudit("serve.precondition.refused",result2.name,{detail:result2.detail??null,fix_command:result2.fixCommand??null}).catch(()=>{})}function printReport(results,log){log(" Preconditions:");for(let r of results){let tag=statusTag(r.status),suffix=r.detail?` \u2014 ${r.detail}`:"";if(log(` ${tag} ${r.name}${suffix}`),r.status==="refused"&&r.fixCommand)log(` \u2192 ${r.fixCommand}`)}}function statusTag(status){switch(status){case"ok":return"[ok]";case"fixed":return"[fix]";case"refused":return"[!!]";case"skipped":return"[--]"}}var BACKFILL_DRIFT_THRESHOLD_PCT=5,ORPHAN_FRESH_WINDOW_MS=86400000;var init_ensure_ready=__esm(()=>{init_observability_health();init_audit();init_db()});var exports_doctor={};__export(exports_doctor,{runPostUpdateMaintenance:()=>runPostUpdateMaintenance,findStaleGenieCandidates:()=>findStaleGenieCandidates,findBundledTmuxConfigDir:()=>findBundledTmuxConfigDir,doctorCommand:()=>doctorCommand,checkTmuxConfigs:()=>checkTmuxConfigs,checkLegacyAgentFrontmatter:()=>checkLegacyAgentFrontmatter,checkGenieAgentTemplate:()=>checkGenieAgentTemplate});import{execFileSync}from"child_process";import{copyFileSync as copyFileSync2,existsSync as existsSync20,mkdirSync as mkdirSync10,readFileSync as readFileSync13,readdirSync as readdirSync7,statSync as statSync6,unlinkSync as unlinkSync6,writeFileSync as writeFileSync7}from"fs";import{homedir as homedir20}from"os";import{dirname as dirname8,join as join25,resolve as resolve3}from"path";import{fileURLToPath as fileURLToPath3}from"url";var{$:$3}=globalThis.Bun;function printSectionHeader(title){console.log(),console.log(`\x1B[1m${title}:\x1B[0m`)}function printCheckResult(result2){let icon={pass:"\x1B[32m\u2713\x1B[0m",fail:"\x1B[31m\u2717\x1B[0m",warn:"\x1B[33m!\x1B[0m"}[result2.status],message=result2.message?` ${result2.message}`:"";if(console.log(` ${icon} ${result2.name}${message}`),result2.suggestion)console.log(` \x1B[2m${result2.suggestion}\x1B[0m`)}async function checkPrerequisites(){let results=[],tmuxCheck=await checkCommand("tmux");if(tmuxCheck.exists)results.push({name:"tmux",status:"pass",message:tmuxCheck.version||""});else results.push({name:"tmux",status:"fail",suggestion:"Install with: brew install tmux (or apt install tmux)"});let jqCheck=await checkCommand("jq");if(jqCheck.exists)results.push({name:"jq",status:"pass",message:jqCheck.version||""});else results.push({name:"jq",status:"fail",suggestion:"Install with: brew install jq (or apt install jq)"});let bunCheck=await checkCommand("bun");if(bunCheck.exists)results.push({name:"bun",status:"pass",message:bunCheck.version||""});else results.push({name:"bun",status:"fail",suggestion:"Install with: curl -fsSL https://bun.sh/install | bash"});let claudeCheck=await checkCommand("claude");if(claudeCheck.exists)results.push({name:"Claude Code",status:"pass",message:claudeCheck.version||""});else results.push({name:"Claude Code",status:"warn",suggestion:"Install with: npm install -g @anthropic-ai/claude-code"});let codexCheck=await checkCommand("codex");if(codexCheck.exists)results.push({name:"Codex CLI",status:"pass",message:codexCheck.version||""});else results.push({name:"Codex CLI",status:"warn",suggestion:"Install via OpenAI account; codex is optional unless using --provider codex"});let requiredForSpawn=["genie","bun","node","npm","git","claude","codex"];for(let bin of requiredForSpawn){let interactivePath=await resolveBinaryInteractive(bin),nonInteractivePath=await resolveBinaryNonInteractive(bin);if(interactivePath&&nonInteractivePath)results.push({name:`Non-interactive PATH: ${bin}`,status:"pass",message:nonInteractivePath});else if(interactivePath&&!nonInteractivePath)results.push({name:`Non-interactive PATH: ${bin}`,status:"warn",message:"interactive-only",suggestion:`Move PATH export from ~/.bashrc to ~/.profile so spawn-scripts can resolve ${bin}. (Or use a stable symlink in ~/.local/bin.)`});else if(!interactivePath&&bin!=="codex"){if(bin==="genie"||bin==="node"||bin==="npm"||bin==="git")results.push({name:`Non-interactive PATH: ${bin}`,status:"warn",message:"not in non-interactive PATH",suggestion:`Add ${bin} to ~/.profile (not just ~/.bashrc). Some flows (e.g. genie update) shell out to bare '${bin}' from non-interactive subprocesses.`})}}return results}async function resolveBinaryInteractive(bin){try{return(await $3`command -v ${bin}`.quiet().text()).trim()||null}catch{return null}}async function resolveBinaryNonInteractive(bin){try{return(await $3`sh -c "command -v ${bin}"`.quiet().text()).trim()||null}catch{return null}}async function checkConfiguration(){let results=[];if(genieConfigExists())results.push({name:"Genie config exists",status:"pass",message:contractClaudePath(getGenieConfigPath())});else results.push({name:"Genie config exists",status:"warn",message:"not found",suggestion:"Run: genie setup"});if(isSetupComplete())results.push({name:"Setup complete",status:"pass"});else results.push({name:"Setup complete",status:"warn",message:"not completed",suggestion:"Run: genie setup"});let claudeSettingsPath=getClaudeSettingsPath();if(existsSync20(claudeSettingsPath))results.push({name:"Claude settings exists",status:"pass",message:contractClaudePath(claudeSettingsPath)});else results.push({name:"Claude settings exists",status:"warn",message:"not found",suggestion:"Claude Code creates this on first run"});return results}async function checkTmux(){let results=[];try{if((await $3`${tmuxBin()} -L genie list-sessions 2>/dev/null`.quiet()).exitCode===0)results.push({name:"Server running",status:"pass"});else return results.push({name:"Server running",status:"warn",message:"no sessions",suggestion:"Start with: tmux new-session -d -s genie"}),results}catch{return results.push({name:"Server running",status:"warn",message:"could not check"}),results}let sessionName=(await loadGenieConfig()).session.name;try{if((await $3`${tmuxBin()} -L genie has-session -t ${`=${sessionName}`} 2>/dev/null`.quiet()).exitCode===0)results.push({name:`Session '${sessionName}' exists`,status:"pass"});else results.push({name:`Session '${sessionName}' exists`,status:"warn",suggestion:`Start with: tmux new-session -d -s ${sessionName}`})}catch{results.push({name:`Session '${sessionName}' exists`,status:"warn",message:"could not check"})}return results}async function checkWorkerProfiles(){let results=[];if(!genieConfigExists())return results.push({name:"Worker profiles",status:"warn",message:"no genie config",suggestion:"Run: genie setup"}),results;let config=await loadGenieConfig(),profiles=config.workerProfiles;if(!profiles||Object.keys(profiles).length===0)return results.push({name:"Worker profiles",status:"pass",message:"none configured (using defaults)"}),results;let totalProfiles=Object.keys(profiles).length;results.push({name:"Profiles configured",status:"pass",message:`${totalProfiles} profile${totalProfiles===1?"":"s"}`});for(let name of Object.keys(profiles))results.push({name:`Profile '${name}'`,status:"pass",message:"claude (direct)"});if(config.defaultWorkerProfile)if(profiles[config.defaultWorkerProfile])results.push({name:"Default profile",status:"pass",message:config.defaultWorkerProfile});else results.push({name:"Default profile",status:"warn",message:`'${config.defaultWorkerProfile}' not found`,suggestion:"Run: genie profiles default <profile>"});return results}async function checkBridge(){let results=[];try{let{getBridgeStatus:getBridgeStatus2,removeBridgePidfile:removeBridgePidfile2}=await Promise.resolve().then(() => (init_bridge_status(),exports_bridge_status)),res=await getBridgeStatus2(void 0,{});if(res.state==="stopped")return results.push({name:"Bridge",status:"warn",message:"stopped (no pidfile)",suggestion:"Start the bridge with: genie serve"}),results;if(res.state==="stale"){if(res.pidfile)removeBridgePidfile2();return results.push({name:"Bridge",status:"fail",message:`stale: ${res.detail}`,suggestion:"Restart the bridge with: genie serve restart"}),results}let{pong,pidfile}=res;if(!pong||!pidfile)return results.push({name:"Bridge",status:"warn",message:"running state missing pong/pidfile metadata"}),results;let uptimeSec=Math.round(pong.uptimeMs/1000);results.push({name:"Bridge running",status:"pass",message:`running (pid ${pong.pid}, uptime ${uptimeSec}s)`}),results.push({name:"NATS ping",status:"pass",message:`pong in ${res.latencyMs??0}ms (${pidfile.natsUrl})`}),results.push({name:"Subjects",status:"pass",message:pong.subjects.join(", ")})}catch(err){let detail=err instanceof Error?err.message:String(err);results.push({name:"Bridge module",status:"warn",message:`could not probe bridge: ${detail}`})}return results}function checkGenieAgentTemplate(workspaceRoot){let root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let genieDir=join25(root,"agents","genie");if(!existsSync20(genieDir))return[];let agentsMd=join25(genieDir,"AGENTS.md"),agentYaml=join25(genieDir,"agent.yaml"),issues=[];if(existsSync20(agentsMd))try{if(readFileSync13(agentsMd,"utf-8").includes(STALE_GENIE_AGENTS_MD_MARKER))issues.push("AGENTS.md uses generic placeholder template")}catch{}if(existsSync20(agentYaml))try{let text=readFileSync13(agentYaml,"utf-8");if(!STALE_GENIE_AGENT_YAML_MISSING_MODEL_REGEX.test(text))issues.push("agent.yaml missing model field (TUI falls back to gray)")}catch{}if(issues.length===0)return[{name:"agents/genie scaffold up to date",status:"pass"}];return[{name:"agents/genie stale scaffold",status:"warn",message:issues.join("; "),suggestion:"Run: genie doctor --fix (re-emits genie specialist templates, preserves user edits)"}]}function findBundledTmuxConfigDir(){try{let moduleDir=dirname8(fileURLToPath3(import.meta.url));for(let i2=0;i2<6;i2+=1){let candidate=resolve3(moduleDir,"../".repeat(i2+1),"scripts","tmux");if(existsSync20(join25(candidate,"tui-tmux.conf"))&&existsSync20(join25(candidate,"genie.tmux.conf")))return candidate}}catch{}return null}function checkTmuxConfigs(){if(!findBundledTmuxConfigDir())return[{name:"tmux configs",status:"pass",message:"bundled configs unavailable (skipped)"}];let home=join25(homedir20(),".genie"),stale=[],expectedSnippet="unbind -n MouseDown3Pane";for(let file of["tui-tmux.conf","tmux.conf"]){let installedPath=join25(home,file);if(!existsSync20(installedPath))continue;try{if(!readFileSync13(installedPath,"utf-8").includes(expectedSnippet))stale.push(file)}catch{stale.push(file)}}if(stale.length===0)return[{name:"~/.genie tmux configs up to date",status:"pass"}];return[{name:"~/.genie tmux configs stale",status:"warn",message:`missing right-click unbind in: ${stale.join(", ")}`,suggestion:"Run: genie doctor --fix (refreshes ~/.genie tmux configs from bundled scripts/tmux/)"}]}function isAgentDirectory(path2){try{return statSync6(path2).isDirectory()}catch{return!1}}function hasLegacyFrontmatter(agentDir){let yamlPath=join25(agentDir,"agent.yaml"),agentsMdPath=join25(agentDir,"AGENTS.md");if(!existsSync20(yamlPath)||!existsSync20(agentsMdPath))return!1;try{return readFileSync13(agentsMdPath,"utf-8").slice(0,4).startsWith("---")}catch{return!1}}function checkLegacyAgentFrontmatter(workspaceRoot){let results=[],root=workspaceRoot??findWorkspace()?.root;if(!root)return[];let agentsDir=join25(root,"agents");if(!existsSync20(agentsDir))return[];let entries;try{entries=readdirSync7(agentsDir)}catch{return[]}for(let name of entries){let agentDir=join25(agentsDir,name);if(!isAgentDirectory(agentDir))continue;if(!hasLegacyFrontmatter(agentDir))continue;results.push({name:`agents/${name}/AGENTS.md`,status:"warn",message:"legacy frontmatter detected (ignored by sync)",suggestion:`Move config into agents/${name}/agent.yaml \u2014 AGENTS.md is prompt-only post-migration.`})}if(results.length===0)results.push({name:"No legacy frontmatter in agents/*/AGENTS.md",status:"pass"});return results}async function checkPgserveCanonical(){let results=[],canonicalPort=null;try{let out=execFileSync("pgserve",["port"],{encoding:"utf8",timeout:3000,stdio:["ignore","pipe","ignore"]}),parsed=Number.parseInt(out.trim(),10);if(Number.isFinite(parsed)&&parsed>0&&parsed<=65535)canonicalPort=parsed}catch{}if(canonicalPort===null)return results.push({name:"pgserve binary",status:"warn",message:"not on PATH (or `pgserve port` failed)",suggestion:"Install canonical pgserve: bun add -g pgserve@^2.1.0 (then run `pgserve install` to register under pm2)"}),results;results.push({name:"pgserve binary",status:"pass",message:`canonical port ${canonicalPort}`});try{let status=execFileSync("pgserve",["status","--json"],{encoding:"utf8",timeout:3000,stdio:["ignore","pipe","ignore"]}),parsed=JSON.parse(status);if(parsed.installed===!0&&parsed.status==="online")results.push({name:"pgserve under pm2",status:"pass",message:`online \u2014 shared backbone for genie-serve + omni-api on :${canonicalPort}`});else if(parsed.installed===!0)if(await isAvailable())results.push({name:"pgserve under pm2",status:"pass",message:`pm2 entry status=${parsed.status??"unknown"} but runtime PG reachable (consumer-only)`,suggestion:"Optional cleanup: pm2 delete pgserve (the embedded backbone is the source of truth)"});else results.push({name:"pgserve under pm2",status:"warn",message:`registered but status=${parsed.status??"unknown"}; runtime PG also unreachable`,suggestion:"Recover with: pm2 restart pgserve (logs: ~/.pgserve/logs/)"});else results.push({name:"pgserve under pm2",status:"warn",message:"binary present but not registered under pm2",suggestion:"Register canonical pgserve: pgserve install"})}catch{results.push({name:"pgserve under pm2",status:"warn",message:"`pgserve status` failed (pm2 unreachable?)",suggestion:"Verify pm2: pm2 list | Re-register: pgserve install"})}return results}function runCheckSection(label,results,counts){printSectionHeader(label);for(let result2 of results){if(printCheckResult(result2),result2.status==="fail")counts.errors=!0;if(result2.status==="warn")counts.warnings=!0}}async function doctorCommand(options){if(options?.fix){await doctorFix();return}if(options?.fixTeamOrphans){await runFixTeamOrphans({dryRun:Boolean(options.dryRun),json:Boolean(options.json)});return}if(options?.observability){await runObservabilityCheck(Boolean(options.json));return}if(options?.perf){let{runPerfCheck:runPerfCheck2}=await Promise.resolve().then(() => (init_perf_check(),exports_perf_check));await runPerfCheck2(Boolean(options.json));return}console.log(),console.log("\x1B[1mGenie Doctor\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`);let counts={errors:!1,warnings:!1};if(runCheckSection("Prerequisites",await checkPrerequisites(),counts),runCheckSection("Installer Resolution",await collectInstallerResolution(),counts),runCheckSection("Configuration",await checkConfiguration(),counts),runCheckSection("Tmux",await checkTmux(),counts),runCheckSection("Tmux Configs",checkTmuxConfigs(),counts),runCheckSection("Worker Profiles",await checkWorkerProfiles(),counts),runCheckSection("Pgserve (canonical backbone)",await checkPgserveCanonical(),counts),runCheckSection("Omni Bridge",await checkBridge(),counts),runCheckSection("Agent Config",checkLegacyAgentFrontmatter(),counts),runCheckSection("Genie Specialist",checkGenieAgentTemplate(),counts),printDoctorSummary(counts),counts.errors)process.exit(1)}function printObservabilityReport(report){if(console.log(),console.log("\x1B[1mObservability Health\x1B[0m"),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),console.log(` partition_health: ${report.partition_health}`),console.log(` partition_count: ${report.partition_count}`),console.log(` next_rotation_at: ${report.next_rotation_at??"n/a"}`),console.log(` oldest_partition: ${report.oldest_partition??"n/a"}`),console.log(` newest_partition: ${report.newest_partition??"n/a"}`),console.log(` GENIE_WIDE_EMIT: ${report.wide_emit_flag}`),report.message)console.log(` note: ${report.message}`);console.log()}async function runObservabilityCheck(json2){let report=await collectObservabilityHealth();if(json2)console.log(JSON.stringify(report,null,2));else printObservabilityReport(report);if(report.partition_health==="fail")process.exit(1)}async function runFixTeamOrphans(opts){let{archiveOrphanTeamConfigs:archiveOrphanTeamConfigs2}=await Promise.resolve().then(() => (init_archive_orphan_team_configs(),exports_archive_orphan_team_configs)),decisions=archiveOrphanTeamConfigs2({dryRun:opts.dryRun});if(opts.json){console.log(JSON.stringify({dryRun:opts.dryRun,decisions},null,2));return}if(decisions.length===0){console.log(" no team config dirs found \u2014 nothing to do");return}for(let d of decisions){let tag=d.classification==="stale"?opts.dryRun?"WOULD ARCHIVE":"ARCHIVED":d.classification.toUpperCase(),tail=d.archivedTo?` \u2192 ${d.archivedTo}`:"";console.log(` [${tag}] ${d.team} \u2014 ${d.reason}${tail}`)}let stale=decisions.filter((d)=>d.classification==="stale").length,active=decisions.filter((d)=>d.classification==="active").length;console.log(`
985
985
  ${decisions.length} dirs inspected, ${stale} archived, ${active} flagged active.`)}function printDoctorSummary(counts){if(console.log(),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m`),counts.errors)console.log("\x1B[31mSome checks failed.\x1B[0m Run \x1B[36mgenie setup\x1B[0m to fix.");else if(counts.warnings)console.log("\x1B[33mSome warnings detected.\x1B[0m Everything should still work.");else console.log("\x1B[32mAll checks passed!\x1B[0m");console.log()}function legacyPgserveRepairEnabled(){return process.env.GENIE_PG_FORCE_TCP==="1"||process.env.GENIE_DOCTOR_FIX_LEGACY_PGSERVE==="1"}function printPgserveRecoveryHint(){console.log(" \x1B[33m[!!] pgserve unreachable \u2014 canonical daemon may not be running.\x1B[0m"),console.log(" Recovery (run as the operator, not the doctor):"),console.log(" pm2 status # is pgserve registered?"),console.log(" pm2 restart pgserve # OR: autopg restart"),console.log(" pgserve install # if not registered yet"),console.log(" See https://github.com/automagik-dev/genie/blob/main/docs/install.md")}async function cleanSharedMemory(){console.log(" Cleaning shared memory...");try{let{execSync:execSync3}=await import("child_process");if(process.platform==="darwin")execSync3("ipcs -m 2>/dev/null | awk '/^m/ {print $2}' | xargs -I{} ipcrm -m {} 2>/dev/null || true",{stdio:"ignore",timeout:5000});else execSync3("ipcs -m 2>/dev/null | awk '$6 == 0 {print $2}' | xargs -I{} ipcrm -m {} 2>/dev/null || true",{stdio:"ignore",timeout:5000});console.log(" \x1B[32m\u2713\x1B[0m Shared memory cleaned")}catch{console.log(" \x1B[32m\u2713\x1B[0m No stale shared memory")}}async function stopExistingDaemon(pidFile){try{let{readFileSync:readFileSync14}=await import("fs"),pid=Number.parseInt(readFileSync14(pidFile,"utf-8").trim(),10);if(!Number.isNaN(pid)&&pid>0)try{process.kill(pid,"SIGTERM"),console.log(` \x1B[32m\u2713\x1B[0m Stopped existing daemon (PID ${pid})`),await new Promise((r)=>setTimeout(r,1000))}catch{}}catch{}}function removeStaleFiles(genieHome3,pidFile){let files=[pidFile];if(legacyPgserveRepairEnabled())files.push(join25(genieHome3,"pgserve.port"),join25(genieHome3,"data","pgserve","postmaster.pid"));else console.log(" Leaving legacy pgserve v1 port/data files untouched (v1/v2 coexistence)");for(let file of files)if(existsSync20(file))try{unlinkSync6(file),console.log(` \x1B[32m\u2713\x1B[0m Removed ${file}`)}catch{console.log(` \x1B[33m!\x1B[0m Could not remove ${file}`)}}async function restartDaemon(){console.log(" Restarting daemon...");try{let{spawn:spawn2}=await import("child_process"),bunPath=process.execPath??"bun",genieBin=process.argv[1]??"genie";spawn2(bunPath,[genieBin,"daemon","start"],{detached:!0,stdio:"ignore"}).unref(),await new Promise((resolve4)=>setTimeout(resolve4,2000)),console.log(" \x1B[32m\u2713\x1B[0m Daemon restart initiated")}catch{console.log(" \x1B[33m!\x1B[0m Could not restart daemon \u2014 run: genie daemon start")}}function isAgentsMdUserEdited(target,fresh){if(!existsSync20(target))return!1;try{let current=readFileSync13(target,"utf-8");if(current.trim().length===0)return!1;if(current.includes(STALE_GENIE_AGENTS_MD_MARKER))return!1;return current!==fresh}catch{return!1}}function writeGenieTemplate(targetDir,name,content){let target=join25(targetDir,name),userEdited=name==="AGENTS.md"&&isAgentsMdUserEdited(target,content),writeTo=userEdited?`${target}.new`:target;try{writeFileSync7(writeTo,content);let marker=userEdited?`wrote ${name}.new (user edits preserved \u2014 merge manually)`:`wrote ${name}`;console.log(` \x1B[32m\u2713\x1B[0m ${marker}`)}catch(err){let detail=err instanceof Error?err.message:String(err);console.log(` \x1B[31m\u2717\x1B[0m ${name}: ${detail}`)}}function fixGenieAgentTemplate(workspaceRoot){let root=workspaceRoot??findWorkspace()?.root;if(!root){console.log(" \x1B[33m!\x1B[0m No workspace detected \u2014 skipping genie-template repair");return}let genieDir=join25(root,"agents","genie");if(!existsSync20(genieDir)){console.log(" \x1B[2m\xB7\x1B[0m No agents/genie directory \u2014 skipping");return}console.log(" Refreshing agents/genie scaffold..."),writeGenieTemplate(genieDir,"AGENTS.md",GENIE_AGENTS_TEMPLATE),writeGenieTemplate(genieDir,"SOUL.md",GENIE_SOUL_TEMPLATE),writeGenieTemplate(genieDir,"HEARTBEAT.md",GENIE_HEARTBEAT_TEMPLATE)}function ensureGenieHomeDir(home){if(existsSync20(home))return!0;try{return mkdirSync10(home,{recursive:!0}),!0}catch{return console.log(` \x1B[31m\u2717\x1B[0m Could not create ${home}`),!1}}function refreshTmuxConfFile(bundledDir,home,srcFile,dstFile){let src=join25(bundledDir,srcFile),dst=join25(home,dstFile);if(!existsSync20(src))return;if(existsSync20(dst))try{copyFileSync2(dst,`${dst}.bak`)}catch{}try{copyFileSync2(src,dst),console.log(` \x1B[32m\u2713\x1B[0m wrote ${dstFile} (previous saved as ${dstFile}.bak)`)}catch(err){let detail=err instanceof Error?err.message:String(err);console.log(` \x1B[31m\u2717\x1B[0m ${dstFile}: ${detail}`)}}function fixTmuxConfigs(){let bundledDir=findBundledTmuxConfigDir();if(!bundledDir){console.log(" \x1B[33m!\x1B[0m Bundled tmux configs not found \u2014 skipping");return}let home=join25(homedir20(),".genie");if(!ensureGenieHomeDir(home))return;console.log(" Refreshing ~/.genie tmux configs..."),refreshTmuxConfFile(bundledDir,home,"tui-tmux.conf","tui-tmux.conf"),refreshTmuxConfFile(bundledDir,home,"genie.tmux.conf","tmux.conf")}async function runMaintenancePreconditions(silent=!1,log){try{let{runDoctorMaintenance:runDoctorMaintenance2}=await Promise.resolve().then(() => (init_ensure_ready(),exports_ensure_ready));await runDoctorMaintenance2({silent,deps:log?{log}:void 0})}catch(err){let msg=err instanceof Error?err.message:String(err);if(!silent)console.warn(` Maintenance preconditions skipped: ${msg}`)}}async function doctorFix(){console.log(`
986
986
  \x1B[1mGenie Doctor \u2014 Auto Fix\x1B[0m`),console.log(`\x1B[2m${"\u2500".repeat(40)}\x1B[0m
987
987
  `);let genieHome3=process.env.GENIE_HOME??join25(homedir20(),".genie");printPgserveRecoveryHint(),await cleanSharedMemory();let pidFile=join25(genieHome3,"scheduler.pid");await stopExistingDaemon(pidFile),removeStaleFiles(genieHome3,pidFile),fixGenieAgentTemplate(),fixTmuxConfigs(),await runMaintenancePreconditions(),await restartDaemon(),console.log(`
988
988
  \x1B[2m${"\u2500".repeat(40)}\x1B[0m`),console.log(`\x1B[32mFix complete.\x1B[0m Run \x1B[36mgenie doctor\x1B[0m to verify.
989
- `)}async function runPostUpdateMaintenance(options={}){await reapStaleGenieProcessesSafe(options),await runMaintenancePreconditions(options.silent??!1,options.log)}function getParentChain(pid){let chain=new Set,current=pid;while(current>1&&!chain.has(current)){chain.add(current);try{let match=readFileSync13(`/proc/${current}/status`,"utf-8").match(/^PPid:\s+(\d+)/m);if(!match)break;let next=Number.parseInt(match[1],10);if(!Number.isFinite(next)||next<=0)break;current=next}catch{break}}return chain}function findStaleGenieCandidates(exclude){if(process.platform!=="linux")return[];let entries=[];try{entries=readdirSync7("/proc")}catch{return[]}let candidates=[];for(let entry2 of entries){let pid=Number.parseInt(entry2,10);if(!Number.isFinite(pid)||pid<=1)continue;if(exclude.has(pid))continue;let cmdline="";try{cmdline=readFileSync13(`/proc/${pid}/cmdline`,"utf-8")}catch{continue}if(!cmdline.includes("dist/genie.js"))continue;candidates.push(pid)}return candidates}function safePm2List(){try{let out=execFileSync("pm2",["jlist"],{encoding:"utf-8",timeout:5000,stdio:["ignore","pipe","ignore"]}),parsed=JSON.parse(out);return Array.isArray(parsed)?parsed:[]}catch{return[]}}function safePm2Delete(name){try{return execFileSync("pm2",["delete",name],{timeout:5000,stdio:"ignore"}),!0}catch{return!1}}function cleanupStalePm2Entries(log){let entries=safePm2List();if(entries.length===0)return;let stale=[];for(let entry2 of entries){if(!entry2.name)continue;if(entry2.name==="genie-serve.ecosystem")stale.push({name:entry2.name,reason:"legacy broken filename pattern"})}for(let{name,reason}of stale)if(log(` [fix] pm2 delete ${name} (${reason})`),!safePm2Delete(name))log(` [!!] pm2 delete ${name} failed (non-blocking)`)}async function reapStaleGenieProcesses(opts={}){let log=opts.log??((line)=>console.log(line));if(process.env.GENIE_UPDATE_NO_REAP==="1"){log(" [--] Stale genie reap skipped (GENIE_UPDATE_NO_REAP=1)");return}if(process.platform!=="linux"){log(" [--] Stale genie reap: Linux-only (procfs); skipping on this platform");return}let exclude=getParentChain(process.pid),candidates=findStaleGenieCandidates(exclude);if(candidates.length===0)log(" [ok] No stale genie processes to reap");else{log(` [fix] Reaping ${candidates.length} stale genie process(es) (incl. serve daemon): ${candidates.join(", ")}`);for(let pid of candidates)try{process.kill(pid,"SIGTERM")}catch{}await new Promise((r)=>setTimeout(r,2000));let stragglers=[];for(let pid of candidates)try{process.kill(pid,0),stragglers.push(pid)}catch{}if(stragglers.length>0){log(` [fix] SIGKILL stragglers: ${stragglers.join(", ")}`);for(let pid of stragglers)try{process.kill(pid,"SIGKILL")}catch{}}try{let home=process.env.GENIE_HOME??join25(homedir20(),".genie"),servePidPath=join25(home,"serve.pid");if(existsSync20(servePidPath))unlinkSync6(servePidPath)}catch{}}cleanupStalePm2Entries(log),log(" [ok] Stale genie reap complete")}async function reapStaleGenieProcessesSafe(opts){try{await reapStaleGenieProcesses({log:opts.log})}catch(err){let msg=err instanceof Error?err.message:String(err);(opts.log??((line)=>console.log(line)))(` [!!] Stale genie reap failed (non-blocking): ${msg}`)}}var init_doctor=__esm(()=>{init_claude_settings();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();init_templates();init_installer_resolution();init_observability_health()});var isUpKey=(key,keybindings=[])=>key.name==="up"||keybindings.includes("vim")&&key.name==="k"||keybindings.includes("emacs")&&key.ctrl&&key.name==="p",isDownKey=(key,keybindings=[])=>key.name==="down"||keybindings.includes("vim")&&key.name==="j"||keybindings.includes("emacs")&&key.ctrl&&key.name==="n",isSpaceKey=(key)=>key.name==="space",isBackspaceKey=(key)=>key.name==="backspace",isTabKey=(key)=>key.name==="tab",isNumberKey=(key)=>"1234567890".includes(key.name),isEnterKey=(key)=>key.name==="enter"||key.name==="return";var AbortPromptError,CancelPromptError,ExitPromptError,HookError,ValidationError;var init_errors3=__esm(()=>{AbortPromptError=class AbortPromptError extends Error{name="AbortPromptError";message="Prompt was aborted";constructor(options){super();this.cause=options?.cause}};CancelPromptError=class CancelPromptError extends Error{name="CancelPromptError";message="Prompt was canceled"};ExitPromptError=class ExitPromptError extends Error{name="ExitPromptError"};HookError=class HookError extends Error{name="HookError"};ValidationError=class ValidationError extends Error{name="ValidationError"}});import{AsyncLocalStorage,AsyncResource}from"async_hooks";function createStore(rl){return{rl,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function withHooks(rl,cb){let store=createStore(rl);return hookStorage.run(store,()=>{function cycle(render){store.handleChange=()=>{store.index=0,render()},store.handleChange()}return cb(cycle)})}function getStore(){let store=hookStorage.getStore();if(!store)throw new HookError("[Inquirer] Hook functions can only be called from within a prompt");return store}function readline(){return getStore().rl}function withUpdates(fn){let wrapped=(...args)=>{let store=getStore(),shouldUpdate=!1,oldHandleChange=store.handleChange;store.handleChange=()=>{shouldUpdate=!0};let returnValue=fn(...args);if(shouldUpdate)oldHandleChange();return store.handleChange=oldHandleChange,returnValue};return AsyncResource.bind(wrapped)}function withPointer(cb){let store=getStore(),{index}=store,pointer={get(){return store.hooks[index]},set(value){store.hooks[index]=value},initialized:index in store.hooks},returnValue=cb(pointer);return store.index++,returnValue}function handleChange(){getStore().handleChange()}var hookStorage,effectScheduler;var init_hook_engine=__esm(()=>{init_errors3();hookStorage=new AsyncLocalStorage;effectScheduler={queue(cb){let store=getStore(),{index}=store;store.hooksEffect.push(()=>{store.hooksCleanup[index]?.();let cleanFn=cb(readline());if(cleanFn!=null&&typeof cleanFn!=="function")throw new ValidationError("useEffect return value must be a cleanup function or nothing.");store.hooksCleanup[index]=cleanFn})},run(){let store=getStore();withUpdates(()=>{store.hooksEffect.forEach((effect)=>{effect()}),store.hooksEffect.length=0})()},clearAll(){let store=getStore();store.hooksCleanup.forEach((cleanFn)=>{cleanFn?.()}),store.hooksEffect.length=0,store.hooksCleanup.length=0}}});import{AsyncResource as AsyncResource2}from"async_hooks";function useState(defaultValue){return withPointer((pointer)=>{let setState=AsyncResource2.bind(function(newValue){if(pointer.get()!==newValue)pointer.set(newValue),handleChange()});if(pointer.initialized)return[pointer.get(),setState];let value=typeof defaultValue==="function"?defaultValue():defaultValue;return pointer.set(value),[value,setState]})}var init_use_state=__esm(()=>{init_hook_engine()});function useEffect(cb,depArray){withPointer((pointer)=>{let oldDeps=pointer.get();if(!Array.isArray(oldDeps)||depArray.some((dep,i2)=>!Object.is(dep,oldDeps[i2])))effectScheduler.queue(cb);pointer.set(depArray)})}var init_use_effect=__esm(()=>{init_hook_engine()});var require_yoctocolors_cjs=__commonJS((exports,module)=>{var tty=__require("tty"),hasColors=tty?.WriteStream?.prototype?.hasColors?.()??!1,format=(open4,close)=>{if(!hasColors)return(input)=>input;let openCode=`\x1B[${open4}m`,closeCode=`\x1B[${close}m`;return(input)=>{let string=input+"",index=string.indexOf(closeCode);if(index===-1)return openCode+string+closeCode;let result2=openCode,lastIndex=0,replaceCode=(close===22?closeCode:"")+openCode;while(index!==-1)result2+=string.slice(lastIndex,index)+replaceCode,lastIndex=index+closeCode.length,index=string.indexOf(closeCode,lastIndex);return result2+=string.slice(lastIndex)+closeCode,result2}},colors={};colors.reset=format(0,0);colors.bold=format(1,22);colors.dim=format(2,22);colors.italic=format(3,23);colors.underline=format(4,24);colors.overline=format(53,55);colors.inverse=format(7,27);colors.hidden=format(8,28);colors.strikethrough=format(9,29);colors.black=format(30,39);colors.red=format(31,39);colors.green=format(32,39);colors.yellow=format(33,39);colors.blue=format(34,39);colors.magenta=format(35,39);colors.cyan=format(36,39);colors.white=format(37,39);colors.gray=format(90,39);colors.bgBlack=format(40,49);colors.bgRed=format(41,49);colors.bgGreen=format(42,49);colors.bgYellow=format(43,49);colors.bgBlue=format(44,49);colors.bgMagenta=format(45,49);colors.bgCyan=format(46,49);colors.bgWhite=format(47,49);colors.bgGray=format(100,49);colors.redBright=format(91,39);colors.greenBright=format(92,39);colors.yellowBright=format(93,39);colors.blueBright=format(94,39);colors.magentaBright=format(95,39);colors.cyanBright=format(96,39);colors.whiteBright=format(97,39);colors.bgRedBright=format(101,49);colors.bgGreenBright=format(102,49);colors.bgYellowBright=format(103,49);colors.bgBlueBright=format(104,49);colors.bgMagentaBright=format(105,49);colors.bgCyanBright=format(106,49);colors.bgWhiteBright=format(107,49);module.exports=colors});import process2 from"process";function isUnicodeSupported(){if(process2.platform!=="win32")return process2.env.TERM!=="linux";return Boolean(process2.env.WT_SESSION)||Boolean(process2.env.TERMINUS_SUBLIME)||process2.env.ConEmuTask==="{cmd::Cmder}"||process2.env.TERM_PROGRAM==="Terminus-Sublime"||process2.env.TERM_PROGRAM==="vscode"||process2.env.TERM==="xterm-256color"||process2.env.TERM==="alacritty"||process2.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var common2,specialMainSymbols,specialFallbackSymbols,mainSymbols,fallbackSymbols,shouldUseMain,figures,esm_default,replacements;var init_esm=__esm(()=>{common2={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},specialMainSymbols={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},specialFallbackSymbols={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},mainSymbols={...common2,...specialMainSymbols},fallbackSymbols={...common2,...specialFallbackSymbols},shouldUseMain=isUnicodeSupported(),figures=shouldUseMain?mainSymbols:fallbackSymbols,esm_default=figures,replacements=Object.entries(specialMainSymbols)});var import_yoctocolors_cjs,defaultTheme;var init_theme=__esm(()=>{init_esm();import_yoctocolors_cjs=__toESM(require_yoctocolors_cjs(),1),defaultTheme={prefix:{idle:import_yoctocolors_cjs.default.blue("?"),done:import_yoctocolors_cjs.default.green(esm_default.tick)},spinner:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"].map((frame)=>import_yoctocolors_cjs.default.yellow(frame))},style:{answer:import_yoctocolors_cjs.default.cyan,message:import_yoctocolors_cjs.default.bold,error:(text)=>import_yoctocolors_cjs.default.red(`> ${text}`),defaultAnswer:(text)=>import_yoctocolors_cjs.default.dim(`(${text})`),help:import_yoctocolors_cjs.default.dim,highlight:import_yoctocolors_cjs.default.cyan,key:(text)=>import_yoctocolors_cjs.default.cyan(import_yoctocolors_cjs.default.bold(`<${text}>`))}}});function isPlainObject(value){if(typeof value!=="object"||value===null)return!1;let proto=value;while(Object.getPrototypeOf(proto)!==null)proto=Object.getPrototypeOf(proto);return Object.getPrototypeOf(value)===proto}function deepMerge(...objects){let output={};for(let obj of objects)for(let[key,value]of Object.entries(obj)){let prevValue=output[key];output[key]=isPlainObject(prevValue)&&isPlainObject(value)?deepMerge(prevValue,value):value}return output}function makeTheme(...themes){let themesToMerge=[defaultTheme,...themes.filter((theme)=>theme!=null)];return deepMerge(...themesToMerge)}var init_make_theme=__esm(()=>{init_theme()});function usePrefix({status:status2="idle",theme}){let[showLoader,setShowLoader]=useState(!1),[tick,setTick]=useState(0),{prefix,spinner}=makeTheme(theme);if(useEffect(()=>{if(status2==="loading"){let tickInterval,inc=-1,delayTimeout=setTimeout(()=>{setShowLoader(!0),tickInterval=setInterval(()=>{inc=inc+1,setTick(inc%spinner.frames.length)},spinner.interval)},300);return()=>{clearTimeout(delayTimeout),clearInterval(tickInterval)}}else setShowLoader(!1)},[status2]),showLoader)return spinner.frames[tick];return typeof prefix==="string"?prefix:prefix[status2==="loading"?"idle":status2]??prefix.idle}var init_use_prefix=__esm(()=>{init_use_state();init_use_effect();init_make_theme()});function useMemo(fn,dependencies){return withPointer((pointer)=>{let prev=pointer.get();if(!prev||prev.dependencies.length!==dependencies.length||prev.dependencies.some((dep,i2)=>dep!==dependencies[i2])){let value=fn();return pointer.set({value,dependencies}),value}return prev.value})}var init_use_memo=__esm(()=>{init_hook_engine()});function useRef(val){return useState({current:val})[0]}var init_use_ref=__esm(()=>{init_use_state()});function useKeypress(userHandler){let signal=useRef(userHandler);signal.current=userHandler,useEffect((rl)=>{let ignore=!1,handler=withUpdates((_input,event)=>{if(ignore)return;signal.current(event,rl)});return rl.input.on("keypress",handler),()=>{ignore=!0,rl.input.removeListener("keypress",handler)}},[])}var init_use_keypress=__esm(()=>{init_use_ref();init_use_effect();init_hook_engine()});var require_cli_width=__commonJS((exports,module)=>{module.exports=cliWidth;function normalizeOpts(options){let defaultOpts={defaultWidth:0,output:process.stdout,tty:__require("tty")};if(!options)return defaultOpts;return Object.keys(defaultOpts).forEach(function(key){if(!options[key])options[key]=defaultOpts[key]}),options}function cliWidth(options){let opts=normalizeOpts(options);if(opts.output.getWindowSize)return opts.output.getWindowSize()[0]||opts.defaultWidth;if(opts.tty.getWindowSize)return opts.tty.getWindowSize()[1]||opts.defaultWidth;if(opts.output.columns)return opts.output.columns;if(process.env.CLI_WIDTH){let width=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(width)&&width!==0)return width}return opts.defaultWidth}});var require_ansi_regex=__commonJS((exports,module)=>{module.exports=({onlyFirst=!1}={})=>{let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}});var require_strip_ansi=__commonJS((exports,module)=>{var ansiRegex=require_ansi_regex();module.exports=(string)=>typeof string==="string"?string.replace(ansiRegex(),""):string});var require_is_fullwidth_code_point=__commonJS((exports,module)=>{var isFullwidthCodePoint=(codePoint)=>{if(Number.isNaN(codePoint))return!1;if(codePoint>=4352&&(codePoint<=4447||codePoint===9001||codePoint===9002||11904<=codePoint&&codePoint<=12871&&codePoint!==12351||12880<=codePoint&&codePoint<=19903||19968<=codePoint&&codePoint<=42182||43360<=codePoint&&codePoint<=43388||44032<=codePoint&&codePoint<=55203||63744<=codePoint&&codePoint<=64255||65040<=codePoint&&codePoint<=65049||65072<=codePoint&&codePoint<=65131||65281<=codePoint&&codePoint<=65376||65504<=codePoint&&codePoint<=65510||110592<=codePoint&&codePoint<=110593||127488<=codePoint&&codePoint<=127569||131072<=codePoint&&codePoint<=262141))return!0;return!1};module.exports=isFullwidthCodePoint;module.exports.default=isFullwidthCodePoint});var require_emoji_regex=__commonJS((exports,module)=>{module.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var require_string_width=__commonJS((exports,module)=>{var stripAnsi=require_strip_ansi(),isFullwidthCodePoint=require_is_fullwidth_code_point(),emojiRegex2=require_emoji_regex(),stringWidth=(string)=>{if(typeof string!=="string"||string.length===0)return 0;if(string=stripAnsi(string),string.length===0)return 0;string=string.replace(emojiRegex2()," ");let width=0;for(let i2=0;i2<string.length;i2++){let code=string.codePointAt(i2);if(code<=31||code>=127&&code<=159)continue;if(code>=768&&code<=879)continue;if(code>65535)i2++;width+=isFullwidthCodePoint(code)?2:1}return width};module.exports=stringWidth;module.exports.default=stringWidth});var require_color_name=__commonJS((exports,module)=>{module.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var require_conversions=__commonJS((exports,module)=>{var cssKeywords=require_color_name(),reverseKeywords={};for(let key of Object.keys(cssKeywords))reverseKeywords[cssKeywords[key]]=key;var convert={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};module.exports=convert;for(let model of Object.keys(convert)){if(!("channels"in convert[model]))throw Error("missing channels property: "+model);if(!("labels"in convert[model]))throw Error("missing channel labels property: "+model);if(convert[model].labels.length!==convert[model].channels)throw Error("channel and label counts mismatch: "+model);let{channels,labels}=convert[model];delete convert[model].channels,delete convert[model].labels,Object.defineProperty(convert[model],"channels",{value:channels}),Object.defineProperty(convert[model],"labels",{value:labels})}convert.rgb.hsl=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,min=Math.min(r,g,b2),max=Math.max(r,g,b2),delta=max-min,h,s;if(max===min)h=0;else if(r===max)h=(g-b2)/delta;else if(g===max)h=2+(b2-r)/delta;else if(b2===max)h=4+(r-g)/delta;if(h=Math.min(h*60,360),h<0)h+=360;let l=(min+max)/2;if(max===min)s=0;else if(l<=0.5)s=delta/(max+min);else s=delta/(2-max-min);return[h,s*100,l*100]};convert.rgb.hsv=function(rgb){let rdif,gdif,bdif,h,s,r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,v=Math.max(r,g,b2),diff=v-Math.min(r,g,b2),diffc=function(c){return(v-c)/6/diff+0.5};if(diff===0)h=0,s=0;else{if(s=diff/v,rdif=diffc(r),gdif=diffc(g),bdif=diffc(b2),r===v)h=bdif-gdif;else if(g===v)h=0.3333333333333333+rdif-bdif;else if(b2===v)h=0.6666666666666666+gdif-rdif;if(h<0)h+=1;else if(h>1)h-=1}return[h*360,s*100,v*100]};convert.rgb.hwb=function(rgb){let r=rgb[0],g=rgb[1],b2=rgb[2],h=convert.rgb.hsl(rgb)[0],w=0.00392156862745098*Math.min(r,Math.min(g,b2));return b2=1-0.00392156862745098*Math.max(r,Math.max(g,b2)),[h,w*100,b2*100]};convert.rgb.cmyk=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,k=Math.min(1-r,1-g,1-b2),c=(1-r-k)/(1-k)||0,m=(1-g-k)/(1-k)||0,y=(1-b2-k)/(1-k)||0;return[c*100,m*100,y*100,k*100]};function comparativeDistance(x,y){return(x[0]-y[0])**2+(x[1]-y[1])**2+(x[2]-y[2])**2}convert.rgb.keyword=function(rgb){let reversed=reverseKeywords[rgb];if(reversed)return reversed;let currentClosestDistance=1/0,currentClosestKeyword;for(let keyword of Object.keys(cssKeywords)){let value=cssKeywords[keyword],distance=comparativeDistance(rgb,value);if(distance<currentClosestDistance)currentClosestDistance=distance,currentClosestKeyword=keyword}return currentClosestKeyword};convert.keyword.rgb=function(keyword){return cssKeywords[keyword]};convert.rgb.xyz=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255;r=r>0.04045?((r+0.055)/1.055)**2.4:r/12.92,g=g>0.04045?((g+0.055)/1.055)**2.4:g/12.92,b2=b2>0.04045?((b2+0.055)/1.055)**2.4:b2/12.92;let x=r*0.4124+g*0.3576+b2*0.1805,y=r*0.2126+g*0.7152+b2*0.0722,z=r*0.0193+g*0.1192+b2*0.9505;return[x*100,y*100,z*100]};convert.rgb.lab=function(rgb){let xyz=convert.rgb.xyz(rgb),x=xyz[0],y=xyz[1],z=xyz[2];x/=95.047,y/=100,z/=108.883,x=x>0.008856?x**0.3333333333333333:7.787*x+0.13793103448275862,y=y>0.008856?y**0.3333333333333333:7.787*y+0.13793103448275862,z=z>0.008856?z**0.3333333333333333:7.787*z+0.13793103448275862;let l=116*y-16,a=500*(x-y),b2=200*(y-z);return[l,a,b2]};convert.hsl.rgb=function(hsl){let h=hsl[0]/360,s=hsl[1]/100,l=hsl[2]/100,t2,t3,val;if(s===0)return val=l*255,[val,val,val];if(l<0.5)t2=l*(1+s);else t2=l+s-l*s;let t1=2*l-t2,rgb=[0,0,0];for(let i2=0;i2<3;i2++){if(t3=h+0.3333333333333333*-(i2-1),t3<0)t3++;if(t3>1)t3--;if(6*t3<1)val=t1+(t2-t1)*6*t3;else if(2*t3<1)val=t2;else if(3*t3<2)val=t1+(t2-t1)*(0.6666666666666666-t3)*6;else val=t1;rgb[i2]=val*255}return rgb};convert.hsl.hsv=function(hsl){let h=hsl[0],s=hsl[1]/100,l=hsl[2]/100,smin=s,lmin=Math.max(l,0.01);l*=2,s*=l<=1?l:2-l,smin*=lmin<=1?lmin:2-lmin;let v=(l+s)/2,sv=l===0?2*smin/(lmin+smin):2*s/(l+s);return[h,sv*100,v*100]};convert.hsv.rgb=function(hsv){let h=hsv[0]/60,s=hsv[1]/100,v=hsv[2]/100,hi=Math.floor(h)%6,f=h-Math.floor(h),p=255*v*(1-s),q=255*v*(1-s*f),t=255*v*(1-s*(1-f));switch(v*=255,hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q]}};convert.hsv.hsl=function(hsv){let h=hsv[0],s=hsv[1]/100,v=hsv[2]/100,vmin=Math.max(v,0.01),sl,l;l=(2-s)*v;let lmin=(2-s)*vmin;return sl=s*vmin,sl/=lmin<=1?lmin:2-lmin,sl=sl||0,l/=2,[h,sl*100,l*100]};convert.hwb.rgb=function(hwb){let h=hwb[0]/360,wh=hwb[1]/100,bl=hwb[2]/100,ratio=wh+bl,f;if(ratio>1)wh/=ratio,bl/=ratio;let i2=Math.floor(6*h),v=1-bl;if(f=6*h-i2,(i2&1)!==0)f=1-f;let n=wh+f*(v-wh),r,g,b2;switch(i2){default:case 6:case 0:r=v,g=n,b2=wh;break;case 1:r=n,g=v,b2=wh;break;case 2:r=wh,g=v,b2=n;break;case 3:r=wh,g=n,b2=v;break;case 4:r=n,g=wh,b2=v;break;case 5:r=v,g=wh,b2=n;break}return[r*255,g*255,b2*255]};convert.cmyk.rgb=function(cmyk){let c=cmyk[0]/100,m=cmyk[1]/100,y=cmyk[2]/100,k=cmyk[3]/100,r=1-Math.min(1,c*(1-k)+k),g=1-Math.min(1,m*(1-k)+k),b2=1-Math.min(1,y*(1-k)+k);return[r*255,g*255,b2*255]};convert.xyz.rgb=function(xyz){let x=xyz[0]/100,y=xyz[1]/100,z=xyz[2]/100,r,g,b2;return r=x*3.2406+y*-1.5372+z*-0.4986,g=x*-0.9689+y*1.8758+z*0.0415,b2=x*0.0557+y*-0.204+z*1.057,r=r>0.0031308?1.055*r**0.4166666666666667-0.055:r*12.92,g=g>0.0031308?1.055*g**0.4166666666666667-0.055:g*12.92,b2=b2>0.0031308?1.055*b2**0.4166666666666667-0.055:b2*12.92,r=Math.min(Math.max(0,r),1),g=Math.min(Math.max(0,g),1),b2=Math.min(Math.max(0,b2),1),[r*255,g*255,b2*255]};convert.xyz.lab=function(xyz){let x=xyz[0],y=xyz[1],z=xyz[2];x/=95.047,y/=100,z/=108.883,x=x>0.008856?x**0.3333333333333333:7.787*x+0.13793103448275862,y=y>0.008856?y**0.3333333333333333:7.787*y+0.13793103448275862,z=z>0.008856?z**0.3333333333333333:7.787*z+0.13793103448275862;let l=116*y-16,a=500*(x-y),b2=200*(y-z);return[l,a,b2]};convert.lab.xyz=function(lab){let l=lab[0],a=lab[1],b2=lab[2],x,y,z;y=(l+16)/116,x=a/500+y,z=y-b2/200;let y2=y**3,x2=x**3,z2=z**3;return y=y2>0.008856?y2:(y-0.13793103448275862)/7.787,x=x2>0.008856?x2:(x-0.13793103448275862)/7.787,z=z2>0.008856?z2:(z-0.13793103448275862)/7.787,x*=95.047,y*=100,z*=108.883,[x,y,z]};convert.lab.lch=function(lab){let l=lab[0],a=lab[1],b2=lab[2],h;if(h=Math.atan2(b2,a)*360/2/Math.PI,h<0)h+=360;let c=Math.sqrt(a*a+b2*b2);return[l,c,h]};convert.lch.lab=function(lch){let l=lch[0],c=lch[1],hr=lch[2]/360*2*Math.PI,a=c*Math.cos(hr),b2=c*Math.sin(hr);return[l,a,b2]};convert.rgb.ansi16=function(args,saturation=null){let[r,g,b2]=args,value=saturation===null?convert.rgb.hsv(args)[2]:saturation;if(value=Math.round(value/50),value===0)return 30;let ansi=30+(Math.round(b2/255)<<2|Math.round(g/255)<<1|Math.round(r/255));if(value===2)ansi+=60;return ansi};convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2])};convert.rgb.ansi256=function(args){let r=args[0],g=args[1],b2=args[2];if(r===g&&g===b2){if(r<8)return 16;if(r>248)return 231;return Math.round((r-8)/247*24)+232}return 16+36*Math.round(r/255*5)+6*Math.round(g/255*5)+Math.round(b2/255*5)};convert.ansi16.rgb=function(args){let color=args%10;if(color===0||color===7){if(args>50)color+=3.5;return color=color/10.5*255,[color,color,color]}let mult=(~~(args>50)+1)*0.5,r=(color&1)*mult*255,g=(color>>1&1)*mult*255,b2=(color>>2&1)*mult*255;return[r,g,b2]};convert.ansi256.rgb=function(args){if(args>=232){let c=(args-232)*10+8;return[c,c,c]}args-=16;let rem,r=Math.floor(args/36)/5*255,g=Math.floor((rem=args%36)/6)/5*255,b2=rem%6/5*255;return[r,g,b2]};convert.rgb.hex=function(args){let string=(((Math.round(args[0])&255)<<16)+((Math.round(args[1])&255)<<8)+(Math.round(args[2])&255)).toString(16).toUpperCase();return"000000".substring(string.length)+string};convert.hex.rgb=function(args){let match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match)return[0,0,0];let colorString=match[0];if(match[0].length===3)colorString=colorString.split("").map((char)=>{return char+char}).join("");let integer=parseInt(colorString,16),r=integer>>16&255,g=integer>>8&255,b2=integer&255;return[r,g,b2]};convert.rgb.hcg=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,max=Math.max(Math.max(r,g),b2),min=Math.min(Math.min(r,g),b2),chroma=max-min,grayscale,hue;if(chroma<1)grayscale=min/(1-chroma);else grayscale=0;if(chroma<=0)hue=0;else if(max===r)hue=(g-b2)/chroma%6;else if(max===g)hue=2+(b2-r)/chroma;else hue=4+(r-g)/chroma;return hue/=6,hue%=1,[hue*360,chroma*100,grayscale*100]};convert.hsl.hcg=function(hsl){let s=hsl[1]/100,l=hsl[2]/100,c=l<0.5?2*s*l:2*s*(1-l),f=0;if(c<1)f=(l-0.5*c)/(1-c);return[hsl[0],c*100,f*100]};convert.hsv.hcg=function(hsv){let s=hsv[1]/100,v=hsv[2]/100,c=s*v,f=0;if(c<1)f=(v-c)/(1-c);return[hsv[0],c*100,f*100]};convert.hcg.rgb=function(hcg){let h=hcg[0]/360,c=hcg[1]/100,g=hcg[2]/100;if(c===0)return[g*255,g*255,g*255];let pure=[0,0,0],hi=h%1*6,v=hi%1,w=1-v,mg=0;switch(Math.floor(hi)){case 0:pure[0]=1,pure[1]=v,pure[2]=0;break;case 1:pure[0]=w,pure[1]=1,pure[2]=0;break;case 2:pure[0]=0,pure[1]=1,pure[2]=v;break;case 3:pure[0]=0,pure[1]=w,pure[2]=1;break;case 4:pure[0]=v,pure[1]=0,pure[2]=1;break;default:pure[0]=1,pure[1]=0,pure[2]=w}return mg=(1-c)*g,[(c*pure[0]+mg)*255,(c*pure[1]+mg)*255,(c*pure[2]+mg)*255]};convert.hcg.hsv=function(hcg){let c=hcg[1]/100,g=hcg[2]/100,v=c+g*(1-c),f=0;if(v>0)f=c/v;return[hcg[0],f*100,v*100]};convert.hcg.hsl=function(hcg){let c=hcg[1]/100,l=hcg[2]/100*(1-c)+0.5*c,s=0;if(l>0&&l<0.5)s=c/(2*l);else if(l>=0.5&&l<1)s=c/(2*(1-l));return[hcg[0],s*100,l*100]};convert.hcg.hwb=function(hcg){let c=hcg[1]/100,g=hcg[2]/100,v=c+g*(1-c);return[hcg[0],(v-c)*100,(1-v)*100]};convert.hwb.hcg=function(hwb){let w=hwb[1]/100,v=1-hwb[2]/100,c=v-w,g=0;if(c<1)g=(v-c)/(1-c);return[hwb[0],c*100,g*100]};convert.apple.rgb=function(apple){return[apple[0]/65535*255,apple[1]/65535*255,apple[2]/65535*255]};convert.rgb.apple=function(rgb){return[rgb[0]/255*65535,rgb[1]/255*65535,rgb[2]/255*65535]};convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255]};convert.gray.hsl=function(args){return[0,0,args[0]]};convert.gray.hsv=convert.gray.hsl;convert.gray.hwb=function(gray){return[0,100,gray[0]]};convert.gray.cmyk=function(gray){return[0,0,0,gray[0]]};convert.gray.lab=function(gray){return[gray[0],0,0]};convert.gray.hex=function(gray){let val=Math.round(gray[0]/100*255)&255,string=((val<<16)+(val<<8)+val).toString(16).toUpperCase();return"000000".substring(string.length)+string};convert.rgb.gray=function(rgb){return[(rgb[0]+rgb[1]+rgb[2])/3/255*100]}});var require_route=__commonJS((exports,module)=>{var conversions=require_conversions();function buildGraph(){let graph={},models=Object.keys(conversions);for(let len=models.length,i2=0;i2<len;i2++)graph[models[i2]]={distance:-1,parent:null};return graph}function deriveBFS(fromModel){let graph=buildGraph(),queue2=[fromModel];graph[fromModel].distance=0;while(queue2.length){let current=queue2.pop(),adjacents=Object.keys(conversions[current]);for(let len=adjacents.length,i2=0;i2<len;i2++){let adjacent=adjacents[i2],node=graph[adjacent];if(node.distance===-1)node.distance=graph[current].distance+1,node.parent=current,queue2.unshift(adjacent)}}return graph}function link(from,to){return function(args){return to(from(args))}}function wrapConversion(toModel,graph){let path2=[graph[toModel].parent,toModel],fn=conversions[graph[toModel].parent][toModel],cur=graph[toModel].parent;while(graph[cur].parent)path2.unshift(graph[cur].parent),fn=link(conversions[graph[cur].parent][cur],fn),cur=graph[cur].parent;return fn.conversion=path2,fn}module.exports=function(fromModel){let graph=deriveBFS(fromModel),conversion={},models=Object.keys(graph);for(let len=models.length,i2=0;i2<len;i2++){let toModel=models[i2];if(graph[toModel].parent===null)continue;conversion[toModel]=wrapConversion(toModel,graph)}return conversion}});var require_color_convert=__commonJS((exports,module)=>{var conversions=require_conversions(),route=require_route(),convert={},models=Object.keys(conversions);function wrapRaw(fn){let wrappedFn=function(...args){let arg0=args[0];if(arg0===void 0||arg0===null)return arg0;if(arg0.length>1)args=arg0;return fn(args)};if("conversion"in fn)wrappedFn.conversion=fn.conversion;return wrappedFn}function wrapRounded(fn){let wrappedFn=function(...args){let arg0=args[0];if(arg0===void 0||arg0===null)return arg0;if(arg0.length>1)args=arg0;let result2=fn(args);if(typeof result2==="object")for(let len=result2.length,i2=0;i2<len;i2++)result2[i2]=Math.round(result2[i2]);return result2};if("conversion"in fn)wrappedFn.conversion=fn.conversion;return wrappedFn}models.forEach((fromModel)=>{convert[fromModel]={},Object.defineProperty(convert[fromModel],"channels",{value:conversions[fromModel].channels}),Object.defineProperty(convert[fromModel],"labels",{value:conversions[fromModel].labels});let routes=route(fromModel);Object.keys(routes).forEach((toModel)=>{let fn=routes[toModel];convert[fromModel][toModel]=wrapRounded(fn),convert[fromModel][toModel].raw=wrapRaw(fn)})});module.exports=convert});var require_ansi_styles=__commonJS((exports,module)=>{var wrapAnsi16=(fn,offset)=>(...args)=>{return`\x1B[${fn(...args)+offset}m`},wrapAnsi256=(fn,offset)=>(...args)=>{let code=fn(...args);return`\x1B[${38+offset};5;${code}m`},wrapAnsi16m=(fn,offset)=>(...args)=>{let rgb=fn(...args);return`\x1B[${38+offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`},ansi2ansi=(n)=>n,rgb2rgb=(r,g,b2)=>[r,g,b2],setLazyProperty=(object,property,get2)=>{Object.defineProperty(object,property,{get:()=>{let value=get2();return Object.defineProperty(object,property,{value,enumerable:!0,configurable:!0}),value},enumerable:!0,configurable:!0})},colorConvert,makeDynamicStyles=(wrap,targetSpace,identity,isBackground)=>{if(colorConvert===void 0)colorConvert=require_color_convert();let offset=isBackground?10:0,styles={};for(let[sourceSpace,suite]of Object.entries(colorConvert)){let name=sourceSpace==="ansi16"?"ansi":sourceSpace;if(sourceSpace===targetSpace)styles[name]=wrap(identity,offset);else if(typeof suite==="object")styles[name]=wrap(suite[targetSpace],offset)}return styles};function assembleStyles(){let codes=new Map,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};styles.color.gray=styles.color.blackBright,styles.bgColor.bgGray=styles.bgColor.bgBlackBright,styles.color.grey=styles.color.blackBright,styles.bgColor.bgGrey=styles.bgColor.bgBlackBright;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",setLazyProperty(styles.color,"ansi",()=>makeDynamicStyles(wrapAnsi16,"ansi16",ansi2ansi,!1)),setLazyProperty(styles.color,"ansi256",()=>makeDynamicStyles(wrapAnsi256,"ansi256",ansi2ansi,!1)),setLazyProperty(styles.color,"ansi16m",()=>makeDynamicStyles(wrapAnsi16m,"rgb",rgb2rgb,!1)),setLazyProperty(styles.bgColor,"ansi",()=>makeDynamicStyles(wrapAnsi16,"ansi16",ansi2ansi,!0)),setLazyProperty(styles.bgColor,"ansi256",()=>makeDynamicStyles(wrapAnsi256,"ansi256",ansi2ansi,!0)),setLazyProperty(styles.bgColor,"ansi16m",()=>makeDynamicStyles(wrapAnsi16m,"rgb",rgb2rgb,!0)),styles}Object.defineProperty(module,"exports",{enumerable:!0,get:assembleStyles})});var require_wrap_ansi=__commonJS((exports,module)=>{var stringWidth=require_string_width(),stripAnsi=require_strip_ansi(),ansiStyles=require_ansi_styles(),ESCAPES=new Set(["\x1B","\x9B"]),wrapAnsi=(code)=>`${ESCAPES.values().next().value}[${code}m`,wordLengths=(string)=>string.split(" ").map((character)=>stringWidth(character)),wrapWord=(rows,word,columns)=>{let characters=[...word],isInsideEscape=!1,visible=stringWidth(stripAnsi(rows[rows.length-1]));for(let[index,character]of characters.entries()){let characterLength=stringWidth(character);if(visible+characterLength<=columns)rows[rows.length-1]+=character;else rows.push(character),visible=0;if(ESCAPES.has(character))isInsideEscape=!0;else if(isInsideEscape&&character==="m"){isInsideEscape=!1;continue}if(isInsideEscape)continue;if(visible+=characterLength,visible===columns&&index<characters.length-1)rows.push(""),visible=0}if(!visible&&rows[rows.length-1].length>0&&rows.length>1)rows[rows.length-2]+=rows.pop()},stringVisibleTrimSpacesRight=(str2)=>{let words=str2.split(" "),last=words.length;while(last>0){if(stringWidth(words[last-1])>0)break;last--}if(last===words.length)return str2;return words.slice(0,last).join(" ")+words.slice(last).join("")},exec2=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return"";let pre="",ret="",escapeCode,lengths=wordLengths(string),rows=[""];for(let[index,word]of string.split(" ").entries()){if(options.trim!==!1)rows[rows.length-1]=rows[rows.length-1].trimLeft();let rowLength=stringWidth(rows[rows.length-1]);if(index!==0){if(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1))rows.push(""),rowLength=0;if(rowLength>0||options.trim===!1)rows[rows.length-1]+=" ",rowLength++}if(options.hard&&lengths[index]>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((lengths[index]-remainingColumns-1)/columns);if(Math.floor((lengths[index]-1)/columns)<breaksStartingThisLine)rows.push("");wrapWord(rows,word,columns);continue}if(rowLength+lengths[index]>columns&&rowLength>0&&lengths[index]>0){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns);continue}rows.push("")}if(rowLength+lengths[index]>columns&&options.wordWrap===!1){wrapWord(rows,word,columns);continue}rows[rows.length-1]+=word}if(options.trim!==!1)rows=rows.map(stringVisibleTrimSpacesRight);pre=rows.join(`
989
+ `)}async function runPostUpdateMaintenance(options={}){await reapStaleGenieProcessesSafe(options),await runMaintenancePreconditions(options.silent??!1,options.log)}function getParentChain(pid){let chain=new Set,current=pid;while(current>1&&!chain.has(current)){chain.add(current);try{let match=readFileSync13(`/proc/${current}/status`,"utf-8").match(/^PPid:\s+(\d+)/m);if(!match)break;let next=Number.parseInt(match[1],10);if(!Number.isFinite(next)||next<=0)break;current=next}catch{break}}return chain}function findStaleGenieCandidates(exclude){if(process.platform!=="linux")return[];let entries=[];try{entries=readdirSync7("/proc")}catch{return[]}let candidates=[];for(let entry2 of entries){let pid=Number.parseInt(entry2,10);if(!Number.isFinite(pid)||pid<=1)continue;if(exclude.has(pid))continue;let cmdline="";try{cmdline=readFileSync13(`/proc/${pid}/cmdline`,"utf-8")}catch{continue}if(!cmdline.includes("dist/genie.js"))continue;candidates.push(pid)}return candidates}function safePm2List(){try{let out=execFileSync("pm2",["jlist"],{encoding:"utf-8",timeout:5000,stdio:["ignore","pipe","ignore"]}),parsed=JSON.parse(out);return Array.isArray(parsed)?parsed:[]}catch{return[]}}function safePm2Delete(name){try{return execFileSync("pm2",["delete",name],{timeout:5000,stdio:"ignore"}),!0}catch{return!1}}function cleanupStalePm2Entries(log){let entries=safePm2List();if(entries.length===0)return;let stale=[];for(let entry2 of entries){if(!entry2.name)continue;if(entry2.name==="genie-serve.ecosystem")stale.push({name:entry2.name,reason:"legacy broken filename pattern"})}for(let{name,reason}of stale)if(log(` [fix] pm2 delete ${name} (${reason})`),!safePm2Delete(name))log(` [!!] pm2 delete ${name} failed (non-blocking)`)}async function reapStaleGenieProcesses(opts={}){let log=opts.log??((line)=>console.log(line));if(process.env.GENIE_UPDATE_NO_REAP==="1"){log(" [--] Stale genie reap skipped (GENIE_UPDATE_NO_REAP=1)");return}if(process.platform!=="linux"){log(" [--] Stale genie reap: Linux-only (procfs); skipping on this platform");return}let exclude=getParentChain(process.pid),candidates=findStaleGenieCandidates(exclude);if(candidates.length===0)log(" [ok] No stale genie processes to reap");else{log(` [fix] Reaping ${candidates.length} stale genie process(es) (incl. serve daemon): ${candidates.join(", ")}`);for(let pid of candidates)try{process.kill(pid,"SIGTERM")}catch{}await new Promise((r)=>setTimeout(r,2000));let stragglers=[];for(let pid of candidates)try{process.kill(pid,0),stragglers.push(pid)}catch{}if(stragglers.length>0){log(` [fix] SIGKILL stragglers: ${stragglers.join(", ")}`);for(let pid of stragglers)try{process.kill(pid,"SIGKILL")}catch{}}try{let home=process.env.GENIE_HOME??join25(homedir20(),".genie"),servePidPath=join25(home,"serve.pid");if(existsSync20(servePidPath))unlinkSync6(servePidPath)}catch{}}cleanupStalePm2Entries(log),log(" [ok] Stale genie reap complete")}async function reapStaleGenieProcessesSafe(opts){try{await reapStaleGenieProcesses({log:opts.log})}catch(err){let msg=err instanceof Error?err.message:String(err);(opts.log??((line)=>console.log(line)))(` [!!] Stale genie reap failed (non-blocking): ${msg}`)}}var init_doctor=__esm(()=>{init_claude_settings();init_db();init_ensure_tmux();init_genie_config2();init_system_detect();init_workspace();init_templates();init_installer_resolution();init_observability_health()});var isUpKey=(key,keybindings=[])=>key.name==="up"||keybindings.includes("vim")&&key.name==="k"||keybindings.includes("emacs")&&key.ctrl&&key.name==="p",isDownKey=(key,keybindings=[])=>key.name==="down"||keybindings.includes("vim")&&key.name==="j"||keybindings.includes("emacs")&&key.ctrl&&key.name==="n",isSpaceKey=(key)=>key.name==="space",isBackspaceKey=(key)=>key.name==="backspace",isTabKey=(key)=>key.name==="tab",isNumberKey=(key)=>"1234567890".includes(key.name),isEnterKey=(key)=>key.name==="enter"||key.name==="return";var AbortPromptError,CancelPromptError,ExitPromptError,HookError,ValidationError;var init_errors3=__esm(()=>{AbortPromptError=class AbortPromptError extends Error{name="AbortPromptError";message="Prompt was aborted";constructor(options){super();this.cause=options?.cause}};CancelPromptError=class CancelPromptError extends Error{name="CancelPromptError";message="Prompt was canceled"};ExitPromptError=class ExitPromptError extends Error{name="ExitPromptError"};HookError=class HookError extends Error{name="HookError"};ValidationError=class ValidationError extends Error{name="ValidationError"}});import{AsyncLocalStorage,AsyncResource}from"async_hooks";function createStore(rl){return{rl,hooks:[],hooksCleanup:[],hooksEffect:[],index:0,handleChange(){}}}function withHooks(rl,cb){let store=createStore(rl);return hookStorage.run(store,()=>{function cycle(render){store.handleChange=()=>{store.index=0,render()},store.handleChange()}return cb(cycle)})}function getStore(){let store=hookStorage.getStore();if(!store)throw new HookError("[Inquirer] Hook functions can only be called from within a prompt");return store}function readline(){return getStore().rl}function withUpdates(fn){let wrapped=(...args)=>{let store=getStore(),shouldUpdate=!1,oldHandleChange=store.handleChange;store.handleChange=()=>{shouldUpdate=!0};let returnValue=fn(...args);if(shouldUpdate)oldHandleChange();return store.handleChange=oldHandleChange,returnValue};return AsyncResource.bind(wrapped)}function withPointer(cb){let store=getStore(),{index}=store,pointer={get(){return store.hooks[index]},set(value){store.hooks[index]=value},initialized:index in store.hooks},returnValue=cb(pointer);return store.index++,returnValue}function handleChange(){getStore().handleChange()}var hookStorage,effectScheduler;var init_hook_engine=__esm(()=>{init_errors3();hookStorage=new AsyncLocalStorage;effectScheduler={queue(cb){let store=getStore(),{index}=store;store.hooksEffect.push(()=>{store.hooksCleanup[index]?.();let cleanFn=cb(readline());if(cleanFn!=null&&typeof cleanFn!=="function")throw new ValidationError("useEffect return value must be a cleanup function or nothing.");store.hooksCleanup[index]=cleanFn})},run(){let store=getStore();withUpdates(()=>{store.hooksEffect.forEach((effect)=>{effect()}),store.hooksEffect.length=0})()},clearAll(){let store=getStore();store.hooksCleanup.forEach((cleanFn)=>{cleanFn?.()}),store.hooksEffect.length=0,store.hooksCleanup.length=0}}});import{AsyncResource as AsyncResource2}from"async_hooks";function useState(defaultValue){return withPointer((pointer)=>{let setState=AsyncResource2.bind(function(newValue){if(pointer.get()!==newValue)pointer.set(newValue),handleChange()});if(pointer.initialized)return[pointer.get(),setState];let value=typeof defaultValue==="function"?defaultValue():defaultValue;return pointer.set(value),[value,setState]})}var init_use_state=__esm(()=>{init_hook_engine()});function useEffect(cb,depArray){withPointer((pointer)=>{let oldDeps=pointer.get();if(!Array.isArray(oldDeps)||depArray.some((dep,i2)=>!Object.is(dep,oldDeps[i2])))effectScheduler.queue(cb);pointer.set(depArray)})}var init_use_effect=__esm(()=>{init_hook_engine()});var require_yoctocolors_cjs=__commonJS((exports,module)=>{var tty=__require("tty"),hasColors=tty?.WriteStream?.prototype?.hasColors?.()??!1,format=(open4,close)=>{if(!hasColors)return(input)=>input;let openCode=`\x1B[${open4}m`,closeCode=`\x1B[${close}m`;return(input)=>{let string=input+"",index=string.indexOf(closeCode);if(index===-1)return openCode+string+closeCode;let result2=openCode,lastIndex=0,replaceCode=(close===22?closeCode:"")+openCode;while(index!==-1)result2+=string.slice(lastIndex,index)+replaceCode,lastIndex=index+closeCode.length,index=string.indexOf(closeCode,lastIndex);return result2+=string.slice(lastIndex)+closeCode,result2}},colors={};colors.reset=format(0,0);colors.bold=format(1,22);colors.dim=format(2,22);colors.italic=format(3,23);colors.underline=format(4,24);colors.overline=format(53,55);colors.inverse=format(7,27);colors.hidden=format(8,28);colors.strikethrough=format(9,29);colors.black=format(30,39);colors.red=format(31,39);colors.green=format(32,39);colors.yellow=format(33,39);colors.blue=format(34,39);colors.magenta=format(35,39);colors.cyan=format(36,39);colors.white=format(37,39);colors.gray=format(90,39);colors.bgBlack=format(40,49);colors.bgRed=format(41,49);colors.bgGreen=format(42,49);colors.bgYellow=format(43,49);colors.bgBlue=format(44,49);colors.bgMagenta=format(45,49);colors.bgCyan=format(46,49);colors.bgWhite=format(47,49);colors.bgGray=format(100,49);colors.redBright=format(91,39);colors.greenBright=format(92,39);colors.yellowBright=format(93,39);colors.blueBright=format(94,39);colors.magentaBright=format(95,39);colors.cyanBright=format(96,39);colors.whiteBright=format(97,39);colors.bgRedBright=format(101,49);colors.bgGreenBright=format(102,49);colors.bgYellowBright=format(103,49);colors.bgBlueBright=format(104,49);colors.bgMagentaBright=format(105,49);colors.bgCyanBright=format(106,49);colors.bgWhiteBright=format(107,49);module.exports=colors});import process2 from"process";function isUnicodeSupported(){if(process2.platform!=="win32")return process2.env.TERM!=="linux";return Boolean(process2.env.WT_SESSION)||Boolean(process2.env.TERMINUS_SUBLIME)||process2.env.ConEmuTask==="{cmd::Cmder}"||process2.env.TERM_PROGRAM==="Terminus-Sublime"||process2.env.TERM_PROGRAM==="vscode"||process2.env.TERM==="xterm-256color"||process2.env.TERM==="alacritty"||process2.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var common2,specialMainSymbols,specialFallbackSymbols,mainSymbols,fallbackSymbols,shouldUseMain,figures,esm_default,replacements;var init_esm=__esm(()=>{common2={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},specialMainSymbols={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},specialFallbackSymbols={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},mainSymbols={...common2,...specialMainSymbols},fallbackSymbols={...common2,...specialFallbackSymbols},shouldUseMain=isUnicodeSupported(),figures=shouldUseMain?mainSymbols:fallbackSymbols,esm_default=figures,replacements=Object.entries(specialMainSymbols)});var import_yoctocolors_cjs,defaultTheme;var init_theme=__esm(()=>{init_esm();import_yoctocolors_cjs=__toESM(require_yoctocolors_cjs(),1),defaultTheme={prefix:{idle:import_yoctocolors_cjs.default.blue("?"),done:import_yoctocolors_cjs.default.green(esm_default.tick)},spinner:{interval:80,frames:["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"].map((frame)=>import_yoctocolors_cjs.default.yellow(frame))},style:{answer:import_yoctocolors_cjs.default.cyan,message:import_yoctocolors_cjs.default.bold,error:(text)=>import_yoctocolors_cjs.default.red(`> ${text}`),defaultAnswer:(text)=>import_yoctocolors_cjs.default.dim(`(${text})`),help:import_yoctocolors_cjs.default.dim,highlight:import_yoctocolors_cjs.default.cyan,key:(text)=>import_yoctocolors_cjs.default.cyan(import_yoctocolors_cjs.default.bold(`<${text}>`))}}});function isPlainObject(value){if(typeof value!=="object"||value===null)return!1;let proto=value;while(Object.getPrototypeOf(proto)!==null)proto=Object.getPrototypeOf(proto);return Object.getPrototypeOf(value)===proto}function deepMerge(...objects){let output={};for(let obj of objects)for(let[key,value]of Object.entries(obj)){let prevValue=output[key];output[key]=isPlainObject(prevValue)&&isPlainObject(value)?deepMerge(prevValue,value):value}return output}function makeTheme(...themes){let themesToMerge=[defaultTheme,...themes.filter((theme)=>theme!=null)];return deepMerge(...themesToMerge)}var init_make_theme=__esm(()=>{init_theme()});function usePrefix({status:status2="idle",theme}){let[showLoader,setShowLoader]=useState(!1),[tick,setTick]=useState(0),{prefix,spinner}=makeTheme(theme);if(useEffect(()=>{if(status2==="loading"){let tickInterval,inc=-1,delayTimeout=setTimeout(()=>{setShowLoader(!0),tickInterval=setInterval(()=>{inc=inc+1,setTick(inc%spinner.frames.length)},spinner.interval)},300);return()=>{clearTimeout(delayTimeout),clearInterval(tickInterval)}}else setShowLoader(!1)},[status2]),showLoader)return spinner.frames[tick];return typeof prefix==="string"?prefix:prefix[status2==="loading"?"idle":status2]??prefix.idle}var init_use_prefix=__esm(()=>{init_use_state();init_use_effect();init_make_theme()});function useMemo(fn,dependencies){return withPointer((pointer)=>{let prev=pointer.get();if(!prev||prev.dependencies.length!==dependencies.length||prev.dependencies.some((dep,i2)=>dep!==dependencies[i2])){let value=fn();return pointer.set({value,dependencies}),value}return prev.value})}var init_use_memo=__esm(()=>{init_hook_engine()});function useRef(val){return useState({current:val})[0]}var init_use_ref=__esm(()=>{init_use_state()});function useKeypress(userHandler){let signal=useRef(userHandler);signal.current=userHandler,useEffect((rl)=>{let ignore=!1,handler=withUpdates((_input,event)=>{if(ignore)return;signal.current(event,rl)});return rl.input.on("keypress",handler),()=>{ignore=!0,rl.input.removeListener("keypress",handler)}},[])}var init_use_keypress=__esm(()=>{init_use_ref();init_use_effect();init_hook_engine()});var require_cli_width=__commonJS((exports,module)=>{module.exports=cliWidth;function normalizeOpts(options){let defaultOpts={defaultWidth:0,output:process.stdout,tty:__require("tty")};if(!options)return defaultOpts;return Object.keys(defaultOpts).forEach(function(key){if(!options[key])options[key]=defaultOpts[key]}),options}function cliWidth(options){let opts=normalizeOpts(options);if(opts.output.getWindowSize)return opts.output.getWindowSize()[0]||opts.defaultWidth;if(opts.tty.getWindowSize)return opts.tty.getWindowSize()[1]||opts.defaultWidth;if(opts.output.columns)return opts.output.columns;if(process.env.CLI_WIDTH){let width=parseInt(process.env.CLI_WIDTH,10);if(!isNaN(width)&&width!==0)return width}return opts.defaultWidth}});var require_ansi_regex=__commonJS((exports,module)=>{module.exports=({onlyFirst=!1}={})=>{let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}});var require_strip_ansi=__commonJS((exports,module)=>{var ansiRegex=require_ansi_regex();module.exports=(string)=>typeof string==="string"?string.replace(ansiRegex(),""):string});var require_is_fullwidth_code_point=__commonJS((exports,module)=>{var isFullwidthCodePoint=(codePoint)=>{if(Number.isNaN(codePoint))return!1;if(codePoint>=4352&&(codePoint<=4447||codePoint===9001||codePoint===9002||11904<=codePoint&&codePoint<=12871&&codePoint!==12351||12880<=codePoint&&codePoint<=19903||19968<=codePoint&&codePoint<=42182||43360<=codePoint&&codePoint<=43388||44032<=codePoint&&codePoint<=55203||63744<=codePoint&&codePoint<=64255||65040<=codePoint&&codePoint<=65049||65072<=codePoint&&codePoint<=65131||65281<=codePoint&&codePoint<=65376||65504<=codePoint&&codePoint<=65510||110592<=codePoint&&codePoint<=110593||127488<=codePoint&&codePoint<=127569||131072<=codePoint&&codePoint<=262141))return!0;return!1};module.exports=isFullwidthCodePoint;module.exports.default=isFullwidthCodePoint});var require_emoji_regex=__commonJS((exports,module)=>{module.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var require_string_width=__commonJS((exports,module)=>{var stripAnsi=require_strip_ansi(),isFullwidthCodePoint=require_is_fullwidth_code_point(),emojiRegex2=require_emoji_regex(),stringWidth=(string)=>{if(typeof string!=="string"||string.length===0)return 0;if(string=stripAnsi(string),string.length===0)return 0;string=string.replace(emojiRegex2()," ");let width=0;for(let i2=0;i2<string.length;i2++){let code=string.codePointAt(i2);if(code<=31||code>=127&&code<=159)continue;if(code>=768&&code<=879)continue;if(code>65535)i2++;width+=isFullwidthCodePoint(code)?2:1}return width};module.exports=stringWidth;module.exports.default=stringWidth});var require_color_name=__commonJS((exports,module)=>{module.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var require_conversions=__commonJS((exports,module)=>{var cssKeywords=require_color_name(),reverseKeywords={};for(let key of Object.keys(cssKeywords))reverseKeywords[cssKeywords[key]]=key;var convert={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};module.exports=convert;for(let model of Object.keys(convert)){if(!("channels"in convert[model]))throw Error("missing channels property: "+model);if(!("labels"in convert[model]))throw Error("missing channel labels property: "+model);if(convert[model].labels.length!==convert[model].channels)throw Error("channel and label counts mismatch: "+model);let{channels,labels}=convert[model];delete convert[model].channels,delete convert[model].labels,Object.defineProperty(convert[model],"channels",{value:channels}),Object.defineProperty(convert[model],"labels",{value:labels})}convert.rgb.hsl=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,min=Math.min(r,g,b2),max=Math.max(r,g,b2),delta=max-min,h,s;if(max===min)h=0;else if(r===max)h=(g-b2)/delta;else if(g===max)h=2+(b2-r)/delta;else if(b2===max)h=4+(r-g)/delta;if(h=Math.min(h*60,360),h<0)h+=360;let l=(min+max)/2;if(max===min)s=0;else if(l<=0.5)s=delta/(max+min);else s=delta/(2-max-min);return[h,s*100,l*100]};convert.rgb.hsv=function(rgb){let rdif,gdif,bdif,h,s,r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,v=Math.max(r,g,b2),diff=v-Math.min(r,g,b2),diffc=function(c){return(v-c)/6/diff+0.5};if(diff===0)h=0,s=0;else{if(s=diff/v,rdif=diffc(r),gdif=diffc(g),bdif=diffc(b2),r===v)h=bdif-gdif;else if(g===v)h=0.3333333333333333+rdif-bdif;else if(b2===v)h=0.6666666666666666+gdif-rdif;if(h<0)h+=1;else if(h>1)h-=1}return[h*360,s*100,v*100]};convert.rgb.hwb=function(rgb){let r=rgb[0],g=rgb[1],b2=rgb[2],h=convert.rgb.hsl(rgb)[0],w=0.00392156862745098*Math.min(r,Math.min(g,b2));return b2=1-0.00392156862745098*Math.max(r,Math.max(g,b2)),[h,w*100,b2*100]};convert.rgb.cmyk=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,k=Math.min(1-r,1-g,1-b2),c=(1-r-k)/(1-k)||0,m=(1-g-k)/(1-k)||0,y=(1-b2-k)/(1-k)||0;return[c*100,m*100,y*100,k*100]};function comparativeDistance(x,y){return(x[0]-y[0])**2+(x[1]-y[1])**2+(x[2]-y[2])**2}convert.rgb.keyword=function(rgb){let reversed=reverseKeywords[rgb];if(reversed)return reversed;let currentClosestDistance=1/0,currentClosestKeyword;for(let keyword of Object.keys(cssKeywords)){let value=cssKeywords[keyword],distance=comparativeDistance(rgb,value);if(distance<currentClosestDistance)currentClosestDistance=distance,currentClosestKeyword=keyword}return currentClosestKeyword};convert.keyword.rgb=function(keyword){return cssKeywords[keyword]};convert.rgb.xyz=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255;r=r>0.04045?((r+0.055)/1.055)**2.4:r/12.92,g=g>0.04045?((g+0.055)/1.055)**2.4:g/12.92,b2=b2>0.04045?((b2+0.055)/1.055)**2.4:b2/12.92;let x=r*0.4124+g*0.3576+b2*0.1805,y=r*0.2126+g*0.7152+b2*0.0722,z=r*0.0193+g*0.1192+b2*0.9505;return[x*100,y*100,z*100]};convert.rgb.lab=function(rgb){let xyz=convert.rgb.xyz(rgb),x=xyz[0],y=xyz[1],z=xyz[2];x/=95.047,y/=100,z/=108.883,x=x>0.008856?x**0.3333333333333333:7.787*x+0.13793103448275862,y=y>0.008856?y**0.3333333333333333:7.787*y+0.13793103448275862,z=z>0.008856?z**0.3333333333333333:7.787*z+0.13793103448275862;let l=116*y-16,a=500*(x-y),b2=200*(y-z);return[l,a,b2]};convert.hsl.rgb=function(hsl){let h=hsl[0]/360,s=hsl[1]/100,l=hsl[2]/100,t2,t3,val;if(s===0)return val=l*255,[val,val,val];if(l<0.5)t2=l*(1+s);else t2=l+s-l*s;let t1=2*l-t2,rgb=[0,0,0];for(let i2=0;i2<3;i2++){if(t3=h+0.3333333333333333*-(i2-1),t3<0)t3++;if(t3>1)t3--;if(6*t3<1)val=t1+(t2-t1)*6*t3;else if(2*t3<1)val=t2;else if(3*t3<2)val=t1+(t2-t1)*(0.6666666666666666-t3)*6;else val=t1;rgb[i2]=val*255}return rgb};convert.hsl.hsv=function(hsl){let h=hsl[0],s=hsl[1]/100,l=hsl[2]/100,smin=s,lmin=Math.max(l,0.01);l*=2,s*=l<=1?l:2-l,smin*=lmin<=1?lmin:2-lmin;let v=(l+s)/2,sv=l===0?2*smin/(lmin+smin):2*s/(l+s);return[h,sv*100,v*100]};convert.hsv.rgb=function(hsv){let h=hsv[0]/60,s=hsv[1]/100,v=hsv[2]/100,hi=Math.floor(h)%6,f=h-Math.floor(h),p=255*v*(1-s),q=255*v*(1-s*f),t=255*v*(1-s*(1-f));switch(v*=255,hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q]}};convert.hsv.hsl=function(hsv){let h=hsv[0],s=hsv[1]/100,v=hsv[2]/100,vmin=Math.max(v,0.01),sl,l;l=(2-s)*v;let lmin=(2-s)*vmin;return sl=s*vmin,sl/=lmin<=1?lmin:2-lmin,sl=sl||0,l/=2,[h,sl*100,l*100]};convert.hwb.rgb=function(hwb){let h=hwb[0]/360,wh=hwb[1]/100,bl=hwb[2]/100,ratio=wh+bl,f;if(ratio>1)wh/=ratio,bl/=ratio;let i2=Math.floor(6*h),v=1-bl;if(f=6*h-i2,(i2&1)!==0)f=1-f;let n=wh+f*(v-wh),r,g,b2;switch(i2){default:case 6:case 0:r=v,g=n,b2=wh;break;case 1:r=n,g=v,b2=wh;break;case 2:r=wh,g=v,b2=n;break;case 3:r=wh,g=n,b2=v;break;case 4:r=n,g=wh,b2=v;break;case 5:r=v,g=wh,b2=n;break}return[r*255,g*255,b2*255]};convert.cmyk.rgb=function(cmyk){let c=cmyk[0]/100,m=cmyk[1]/100,y=cmyk[2]/100,k=cmyk[3]/100,r=1-Math.min(1,c*(1-k)+k),g=1-Math.min(1,m*(1-k)+k),b2=1-Math.min(1,y*(1-k)+k);return[r*255,g*255,b2*255]};convert.xyz.rgb=function(xyz){let x=xyz[0]/100,y=xyz[1]/100,z=xyz[2]/100,r,g,b2;return r=x*3.2406+y*-1.5372+z*-0.4986,g=x*-0.9689+y*1.8758+z*0.0415,b2=x*0.0557+y*-0.204+z*1.057,r=r>0.0031308?1.055*r**0.4166666666666667-0.055:r*12.92,g=g>0.0031308?1.055*g**0.4166666666666667-0.055:g*12.92,b2=b2>0.0031308?1.055*b2**0.4166666666666667-0.055:b2*12.92,r=Math.min(Math.max(0,r),1),g=Math.min(Math.max(0,g),1),b2=Math.min(Math.max(0,b2),1),[r*255,g*255,b2*255]};convert.xyz.lab=function(xyz){let x=xyz[0],y=xyz[1],z=xyz[2];x/=95.047,y/=100,z/=108.883,x=x>0.008856?x**0.3333333333333333:7.787*x+0.13793103448275862,y=y>0.008856?y**0.3333333333333333:7.787*y+0.13793103448275862,z=z>0.008856?z**0.3333333333333333:7.787*z+0.13793103448275862;let l=116*y-16,a=500*(x-y),b2=200*(y-z);return[l,a,b2]};convert.lab.xyz=function(lab){let l=lab[0],a=lab[1],b2=lab[2],x,y,z;y=(l+16)/116,x=a/500+y,z=y-b2/200;let y2=y**3,x2=x**3,z2=z**3;return y=y2>0.008856?y2:(y-0.13793103448275862)/7.787,x=x2>0.008856?x2:(x-0.13793103448275862)/7.787,z=z2>0.008856?z2:(z-0.13793103448275862)/7.787,x*=95.047,y*=100,z*=108.883,[x,y,z]};convert.lab.lch=function(lab){let l=lab[0],a=lab[1],b2=lab[2],h;if(h=Math.atan2(b2,a)*360/2/Math.PI,h<0)h+=360;let c=Math.sqrt(a*a+b2*b2);return[l,c,h]};convert.lch.lab=function(lch){let l=lch[0],c=lch[1],hr=lch[2]/360*2*Math.PI,a=c*Math.cos(hr),b2=c*Math.sin(hr);return[l,a,b2]};convert.rgb.ansi16=function(args,saturation=null){let[r,g,b2]=args,value=saturation===null?convert.rgb.hsv(args)[2]:saturation;if(value=Math.round(value/50),value===0)return 30;let ansi=30+(Math.round(b2/255)<<2|Math.round(g/255)<<1|Math.round(r/255));if(value===2)ansi+=60;return ansi};convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2])};convert.rgb.ansi256=function(args){let r=args[0],g=args[1],b2=args[2];if(r===g&&g===b2){if(r<8)return 16;if(r>248)return 231;return Math.round((r-8)/247*24)+232}return 16+36*Math.round(r/255*5)+6*Math.round(g/255*5)+Math.round(b2/255*5)};convert.ansi16.rgb=function(args){let color=args%10;if(color===0||color===7){if(args>50)color+=3.5;return color=color/10.5*255,[color,color,color]}let mult=(~~(args>50)+1)*0.5,r=(color&1)*mult*255,g=(color>>1&1)*mult*255,b2=(color>>2&1)*mult*255;return[r,g,b2]};convert.ansi256.rgb=function(args){if(args>=232){let c=(args-232)*10+8;return[c,c,c]}args-=16;let rem,r=Math.floor(args/36)/5*255,g=Math.floor((rem=args%36)/6)/5*255,b2=rem%6/5*255;return[r,g,b2]};convert.rgb.hex=function(args){let string=(((Math.round(args[0])&255)<<16)+((Math.round(args[1])&255)<<8)+(Math.round(args[2])&255)).toString(16).toUpperCase();return"000000".substring(string.length)+string};convert.hex.rgb=function(args){let match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match)return[0,0,0];let colorString=match[0];if(match[0].length===3)colorString=colorString.split("").map((char)=>{return char+char}).join("");let integer=parseInt(colorString,16),r=integer>>16&255,g=integer>>8&255,b2=integer&255;return[r,g,b2]};convert.rgb.hcg=function(rgb){let r=rgb[0]/255,g=rgb[1]/255,b2=rgb[2]/255,max=Math.max(Math.max(r,g),b2),min=Math.min(Math.min(r,g),b2),chroma=max-min,grayscale,hue;if(chroma<1)grayscale=min/(1-chroma);else grayscale=0;if(chroma<=0)hue=0;else if(max===r)hue=(g-b2)/chroma%6;else if(max===g)hue=2+(b2-r)/chroma;else hue=4+(r-g)/chroma;return hue/=6,hue%=1,[hue*360,chroma*100,grayscale*100]};convert.hsl.hcg=function(hsl){let s=hsl[1]/100,l=hsl[2]/100,c=l<0.5?2*s*l:2*s*(1-l),f=0;if(c<1)f=(l-0.5*c)/(1-c);return[hsl[0],c*100,f*100]};convert.hsv.hcg=function(hsv){let s=hsv[1]/100,v=hsv[2]/100,c=s*v,f=0;if(c<1)f=(v-c)/(1-c);return[hsv[0],c*100,f*100]};convert.hcg.rgb=function(hcg){let h=hcg[0]/360,c=hcg[1]/100,g=hcg[2]/100;if(c===0)return[g*255,g*255,g*255];let pure=[0,0,0],hi=h%1*6,v=hi%1,w=1-v,mg=0;switch(Math.floor(hi)){case 0:pure[0]=1,pure[1]=v,pure[2]=0;break;case 1:pure[0]=w,pure[1]=1,pure[2]=0;break;case 2:pure[0]=0,pure[1]=1,pure[2]=v;break;case 3:pure[0]=0,pure[1]=w,pure[2]=1;break;case 4:pure[0]=v,pure[1]=0,pure[2]=1;break;default:pure[0]=1,pure[1]=0,pure[2]=w}return mg=(1-c)*g,[(c*pure[0]+mg)*255,(c*pure[1]+mg)*255,(c*pure[2]+mg)*255]};convert.hcg.hsv=function(hcg){let c=hcg[1]/100,g=hcg[2]/100,v=c+g*(1-c),f=0;if(v>0)f=c/v;return[hcg[0],f*100,v*100]};convert.hcg.hsl=function(hcg){let c=hcg[1]/100,l=hcg[2]/100*(1-c)+0.5*c,s=0;if(l>0&&l<0.5)s=c/(2*l);else if(l>=0.5&&l<1)s=c/(2*(1-l));return[hcg[0],s*100,l*100]};convert.hcg.hwb=function(hcg){let c=hcg[1]/100,g=hcg[2]/100,v=c+g*(1-c);return[hcg[0],(v-c)*100,(1-v)*100]};convert.hwb.hcg=function(hwb){let w=hwb[1]/100,v=1-hwb[2]/100,c=v-w,g=0;if(c<1)g=(v-c)/(1-c);return[hwb[0],c*100,g*100]};convert.apple.rgb=function(apple){return[apple[0]/65535*255,apple[1]/65535*255,apple[2]/65535*255]};convert.rgb.apple=function(rgb){return[rgb[0]/255*65535,rgb[1]/255*65535,rgb[2]/255*65535]};convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255]};convert.gray.hsl=function(args){return[0,0,args[0]]};convert.gray.hsv=convert.gray.hsl;convert.gray.hwb=function(gray){return[0,100,gray[0]]};convert.gray.cmyk=function(gray){return[0,0,0,gray[0]]};convert.gray.lab=function(gray){return[gray[0],0,0]};convert.gray.hex=function(gray){let val=Math.round(gray[0]/100*255)&255,string=((val<<16)+(val<<8)+val).toString(16).toUpperCase();return"000000".substring(string.length)+string};convert.rgb.gray=function(rgb){return[(rgb[0]+rgb[1]+rgb[2])/3/255*100]}});var require_route=__commonJS((exports,module)=>{var conversions=require_conversions();function buildGraph(){let graph={},models=Object.keys(conversions);for(let len=models.length,i2=0;i2<len;i2++)graph[models[i2]]={distance:-1,parent:null};return graph}function deriveBFS(fromModel){let graph=buildGraph(),queue2=[fromModel];graph[fromModel].distance=0;while(queue2.length){let current=queue2.pop(),adjacents=Object.keys(conversions[current]);for(let len=adjacents.length,i2=0;i2<len;i2++){let adjacent=adjacents[i2],node=graph[adjacent];if(node.distance===-1)node.distance=graph[current].distance+1,node.parent=current,queue2.unshift(adjacent)}}return graph}function link(from,to){return function(args){return to(from(args))}}function wrapConversion(toModel,graph){let path2=[graph[toModel].parent,toModel],fn=conversions[graph[toModel].parent][toModel],cur=graph[toModel].parent;while(graph[cur].parent)path2.unshift(graph[cur].parent),fn=link(conversions[graph[cur].parent][cur],fn),cur=graph[cur].parent;return fn.conversion=path2,fn}module.exports=function(fromModel){let graph=deriveBFS(fromModel),conversion={},models=Object.keys(graph);for(let len=models.length,i2=0;i2<len;i2++){let toModel=models[i2];if(graph[toModel].parent===null)continue;conversion[toModel]=wrapConversion(toModel,graph)}return conversion}});var require_color_convert=__commonJS((exports,module)=>{var conversions=require_conversions(),route=require_route(),convert={},models=Object.keys(conversions);function wrapRaw(fn){let wrappedFn=function(...args){let arg0=args[0];if(arg0===void 0||arg0===null)return arg0;if(arg0.length>1)args=arg0;return fn(args)};if("conversion"in fn)wrappedFn.conversion=fn.conversion;return wrappedFn}function wrapRounded(fn){let wrappedFn=function(...args){let arg0=args[0];if(arg0===void 0||arg0===null)return arg0;if(arg0.length>1)args=arg0;let result2=fn(args);if(typeof result2==="object")for(let len=result2.length,i2=0;i2<len;i2++)result2[i2]=Math.round(result2[i2]);return result2};if("conversion"in fn)wrappedFn.conversion=fn.conversion;return wrappedFn}models.forEach((fromModel)=>{convert[fromModel]={},Object.defineProperty(convert[fromModel],"channels",{value:conversions[fromModel].channels}),Object.defineProperty(convert[fromModel],"labels",{value:conversions[fromModel].labels});let routes=route(fromModel);Object.keys(routes).forEach((toModel)=>{let fn=routes[toModel];convert[fromModel][toModel]=wrapRounded(fn),convert[fromModel][toModel].raw=wrapRaw(fn)})});module.exports=convert});var require_ansi_styles=__commonJS((exports,module)=>{var wrapAnsi16=(fn,offset)=>(...args)=>{return`\x1B[${fn(...args)+offset}m`},wrapAnsi256=(fn,offset)=>(...args)=>{let code=fn(...args);return`\x1B[${38+offset};5;${code}m`},wrapAnsi16m=(fn,offset)=>(...args)=>{let rgb=fn(...args);return`\x1B[${38+offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`},ansi2ansi=(n)=>n,rgb2rgb=(r,g,b2)=>[r,g,b2],setLazyProperty=(object,property,get2)=>{Object.defineProperty(object,property,{get:()=>{let value=get2();return Object.defineProperty(object,property,{value,enumerable:!0,configurable:!0}),value},enumerable:!0,configurable:!0})},colorConvert,makeDynamicStyles=(wrap,targetSpace,identity,isBackground)=>{if(colorConvert===void 0)colorConvert=require_color_convert();let offset=isBackground?10:0,styles={};for(let[sourceSpace,suite]of Object.entries(colorConvert)){let name=sourceSpace==="ansi16"?"ansi":sourceSpace;if(sourceSpace===targetSpace)styles[name]=wrap(identity,offset);else if(typeof suite==="object")styles[name]=wrap(suite[targetSpace],offset)}return styles};function assembleStyles(){let codes=new Map,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};styles.color.gray=styles.color.blackBright,styles.bgColor.bgGray=styles.bgColor.bgBlackBright,styles.color.grey=styles.color.blackBright,styles.bgColor.bgGrey=styles.bgColor.bgBlackBright;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",setLazyProperty(styles.color,"ansi",()=>makeDynamicStyles(wrapAnsi16,"ansi16",ansi2ansi,!1)),setLazyProperty(styles.color,"ansi256",()=>makeDynamicStyles(wrapAnsi256,"ansi256",ansi2ansi,!1)),setLazyProperty(styles.color,"ansi16m",()=>makeDynamicStyles(wrapAnsi16m,"rgb",rgb2rgb,!1)),setLazyProperty(styles.bgColor,"ansi",()=>makeDynamicStyles(wrapAnsi16,"ansi16",ansi2ansi,!0)),setLazyProperty(styles.bgColor,"ansi256",()=>makeDynamicStyles(wrapAnsi256,"ansi256",ansi2ansi,!0)),setLazyProperty(styles.bgColor,"ansi16m",()=>makeDynamicStyles(wrapAnsi16m,"rgb",rgb2rgb,!0)),styles}Object.defineProperty(module,"exports",{enumerable:!0,get:assembleStyles})});var require_wrap_ansi=__commonJS((exports,module)=>{var stringWidth=require_string_width(),stripAnsi=require_strip_ansi(),ansiStyles=require_ansi_styles(),ESCAPES=new Set(["\x1B","\x9B"]),wrapAnsi=(code)=>`${ESCAPES.values().next().value}[${code}m`,wordLengths=(string)=>string.split(" ").map((character)=>stringWidth(character)),wrapWord=(rows,word,columns)=>{let characters=[...word],isInsideEscape=!1,visible=stringWidth(stripAnsi(rows[rows.length-1]));for(let[index,character]of characters.entries()){let characterLength=stringWidth(character);if(visible+characterLength<=columns)rows[rows.length-1]+=character;else rows.push(character),visible=0;if(ESCAPES.has(character))isInsideEscape=!0;else if(isInsideEscape&&character==="m"){isInsideEscape=!1;continue}if(isInsideEscape)continue;if(visible+=characterLength,visible===columns&&index<characters.length-1)rows.push(""),visible=0}if(!visible&&rows[rows.length-1].length>0&&rows.length>1)rows[rows.length-2]+=rows.pop()},stringVisibleTrimSpacesRight=(str2)=>{let words=str2.split(" "),last=words.length;while(last>0){if(stringWidth(words[last-1])>0)break;last--}if(last===words.length)return str2;return words.slice(0,last).join(" ")+words.slice(last).join("")},exec2=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return"";let pre="",ret="",escapeCode,lengths=wordLengths(string),rows=[""];for(let[index,word]of string.split(" ").entries()){if(options.trim!==!1)rows[rows.length-1]=rows[rows.length-1].trimLeft();let rowLength=stringWidth(rows[rows.length-1]);if(index!==0){if(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1))rows.push(""),rowLength=0;if(rowLength>0||options.trim===!1)rows[rows.length-1]+=" ",rowLength++}if(options.hard&&lengths[index]>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((lengths[index]-remainingColumns-1)/columns);if(Math.floor((lengths[index]-1)/columns)<breaksStartingThisLine)rows.push("");wrapWord(rows,word,columns);continue}if(rowLength+lengths[index]>columns&&rowLength>0&&lengths[index]>0){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns);continue}rows.push("")}if(rowLength+lengths[index]>columns&&options.wordWrap===!1){wrapWord(rows,word,columns);continue}rows[rows.length-1]+=word}if(options.trim!==!1)rows=rows.map(stringVisibleTrimSpacesRight);pre=rows.join(`
990
990
  `);for(let[index,character]of[...pre].entries()){if(ret+=character,ESCAPES.has(character)){let code2=parseFloat(/\d[^m]*/.exec(pre.slice(index,index+4)));escapeCode=code2===39?null:code2}let code=ansiStyles.codes.get(Number(escapeCode));if(escapeCode&&code){if(pre[index+1]===`
991
991
  `)ret+=wrapAnsi(code);else if(character===`
992
992
  `)ret+=wrapAnsi(escapeCode)}}return ret};module.exports=(string,columns,options)=>{return String(string).normalize().replace(/\r\n/g,`
@@ -3961,7 +3961,7 @@ Bus `);for(let i2=1;i2<parts.length;i2++){let usb2=parseLinuxUsb(parts[i2]);resu
3961
3961
  `);if(util4.getValue(lines,"class",":",!0).toLowerCase().indexOf("audio")>=0){let audio2=parseLinuxAudioPciMM(lines,audioPCI);result2.push(audio2)}})}if(callback)callback(result2);resolve21(result2)});if(_darwin)exec3("system_profiler SPAudioDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPAudioDataType&&outObj.SPAudioDataType.length&&outObj.SPAudioDataType[0]&&outObj.SPAudioDataType[0]._items&&outObj.SPAudioDataType[0]._items.length)for(let i2=0;i2<outObj.SPAudioDataType[0]._items.length;i2++){let audio2=parseDarwinAudio(outObj.SPAudioDataType[0]._items[i2],i2);result2.push(audio2)}}catch{util4.noop()}if(callback)callback(result2);resolve21(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_SoundDevice | select DeviceID,StatusInfo,Name,Manufacturer | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((element)=>{let lines=element.split(`
3962
3962
  `);if(util4.getValue(lines,"name",":"))result2.push(parseWindowsAudio(lines))});if(callback)callback(result2);resolve21(result2)});if(_sunos)resolve21(null)})})}exports.audio=audio});var require_bluetoothVendors=__commonJS((exports,module2)=>{module2.exports={0:"Ericsson Technology Licensing",1:"Nokia Mobile Phones",2:"Intel Corp.",3:"IBM Corp.",4:"Toshiba Corp.",5:"3Com",6:"Microsoft",7:"Lucent",8:"Motorola",9:"Infineon Technologies AG",10:"Cambridge Silicon Radio",11:"Silicon Wave",12:"Digianswer A/S",13:"Texas Instruments Inc.",14:"Ceva, Inc. (formerly Parthus Technologies, Inc.)",15:"Broadcom Corporation",16:"Mitel Semiconductor",17:"Widcomm, Inc",18:"Zeevo, Inc.",19:"Atmel Corporation",20:"Mitsubishi Electric Corporation",21:"RTX Telecom A/S",22:"KC Technology Inc.",23:"NewLogic",24:"Transilica, Inc.",25:"Rohde & Schwarz GmbH & Co. KG",26:"TTPCom Limited",27:"Signia Technologies, Inc.",28:"Conexant Systems Inc.",29:"Qualcomm",30:"Inventel",31:"AVM Berlin",32:"BandSpeed, Inc.",33:"Mansella Ltd",34:"NEC Corporation",35:"WavePlus Technology Co., Ltd.",36:"Alcatel",37:"NXP Semiconductors (formerly Philips Semiconductors)",38:"C Technologies",39:"Open Interface",40:"R F Micro Devices",41:"Hitachi Ltd",42:"Symbol Technologies, Inc.",43:"Tenovis",44:"Macronix International Co. Ltd.",45:"GCT Semiconductor",46:"Norwood Systems",47:"MewTel Technology Inc.",48:"ST Microelectronics",49:"Synopsis",50:"Red-M (Communications) Ltd",51:"Commil Ltd",52:"Computer Access Technology Corporation (CATC)",53:"Eclipse (HQ Espana) S.L.",54:"Renesas Electronics Corporation",55:"Mobilian Corporation",56:"Terax",57:"Integrated System Solution Corp.",58:"Matsushita Electric Industrial Co., Ltd.",59:"Gennum Corporation",60:"BlackBerry Limited (formerly Research In Motion)",61:"IPextreme, Inc.",62:"Systems and Chips, Inc.",63:"Bluetooth SIG, Inc.",64:"Seiko Epson Corporation",65:"Integrated Silicon Solution Taiwan, Inc.",66:"CONWISE Technology Corporation Ltd",67:"PARROT SA",68:"Socket Mobile",69:"Atheros Communications, Inc.",70:"MediaTek, Inc.",71:"Bluegiga",72:"Marvell Technology Group Ltd.",73:"3DSP Corporation",74:"Accel Semiconductor Ltd.",75:"Continental Automotive Systems",76:"Apple, Inc.",77:"Staccato Communications, Inc.",78:"Avago Technologies",79:"APT Licensing Ltd.",80:"SiRF Technology",81:"Tzero Technologies, Inc.",82:"J&M Corporation",83:"Free2move AB",84:"3DiJoy Corporation",85:"Plantronics, Inc.",86:"Sony Ericsson Mobile Communications",87:"Harman International Industries, Inc.",88:"Vizio, Inc.",89:"Nordic Semiconductor ASA",90:"EM Microelectronic-Marin SA",91:"Ralink Technology Corporation",92:"Belkin International, Inc.",93:"Realtek Semiconductor Corporation",94:"Stonestreet One, LLC",95:"Wicentric, Inc.",96:"RivieraWaves S.A.S",97:"RDA Microelectronics",98:"Gibson Guitars",99:"MiCommand Inc.",100:"Band XI International, LLC",101:"Hewlett-Packard Company",102:"9Solutions Oy",103:"GN Netcom A/S",104:"General Motors",105:"A&D Engineering, Inc.",106:"MindTree Ltd.",107:"Polar Electro OY",108:"Beautiful Enterprise Co., Ltd.",109:"BriarTek, Inc.",110:"Summit Data Communications, Inc.",111:"Sound ID",112:"Monster, LLC",113:"connectBlue AB",114:"ShangHai Super Smart Electronics Co. Ltd.",115:"Group Sense Ltd.",116:"Zomm, LLC",117:"Samsung Electronics Co. Ltd.",118:"Creative Technology Ltd.",119:"Laird Technologies",120:"Nike, Inc.",121:"lesswire AG",122:"MStar Semiconductor, Inc.",123:"Hanlynn Technologies",124:"A & R Cambridge",125:"Seers Technology Co. Ltd",126:"Sports Tracking Technologies Ltd.",127:"Autonet Mobile",128:"DeLorme Publishing Company, Inc.",129:"WuXi Vimicro",130:"Sennheiser Communications A/S",131:"TimeKeeping Systems, Inc.",132:"Ludus Helsinki Ltd.",133:"BlueRadios, Inc.",134:"equinox AG",135:"Garmin International, Inc.",136:"Ecotest",137:"GN ReSound A/S",138:"Jawbone",139:"Topcorn Positioning Systems, LLC",140:"Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)",141:"Zscan Software",142:"Quintic Corp.",143:"Stollman E+V GmbH",144:"Funai Electric Co., Ltd.",145:"Advanced PANMOBIL Systems GmbH & Co. KG",146:"ThinkOptics, Inc.",147:"Universal Electronics, Inc.",148:"Airoha Technology Corp.",149:"NEC Lighting, Ltd.",150:"ODM Technology, Inc.",151:"ConnecteDevice Ltd.",152:"zer01.tv GmbH",153:"i.Tech Dynamic Global Distribution Ltd.",154:"Alpwise",155:"Jiangsu Toppower Automotive Electronics Co., Ltd.",156:"Colorfy, Inc.",157:"Geoforce Inc.",158:"Bose Corporation",159:"Suunto Oy",160:"Kensington Computer Products Group",161:"SR-Medizinelektronik",162:"Vertu Corporation Limited",163:"Meta Watch Ltd.",164:"LINAK A/S",165:"OTL Dynamics LLC",166:"Panda Ocean Inc.",167:"Visteon Corporation",168:"ARP Devices Limited",169:"Magneti Marelli S.p.A",170:"CAEN RFID srl",171:"Ingenieur-Systemgruppe Zahn GmbH",172:"Green Throttle Games",173:"Peter Systemtechnik GmbH",174:"Omegawave Oy",175:"Cinetix",176:"Passif Semiconductor Corp",177:"Saris Cycling Group, Inc",178:"Bekey A/S",179:"Clarinox Technologies Pty. Ltd.",180:"BDE Technology Co., Ltd.",181:"Swirl Networks",182:"Meso international",183:"TreLab Ltd",184:"Qualcomm Innovation Center, Inc. (QuIC)",185:"Johnson Controls, Inc.",186:"Starkey Laboratories Inc.",187:"S-Power Electronics Limited",188:"Ace Sensor Inc",189:"Aplix Corporation",190:"AAMP of America",191:"Stalmart Technology Limited",192:"AMICCOM Electronics Corporation",193:"Shenzhen Excelsecu Data Technology Co.,Ltd",194:"Geneq Inc.",195:"adidas AG",196:"LG Electronics",197:"Onset Computer Corporation",198:"Selfly BV",199:"Quuppa Oy.",200:"GeLo Inc",201:"Evluma",202:"MC10",203:"Binauric SE",204:"Beats Electronics",205:"Microchip Technology Inc.",206:"Elgato Systems GmbH",207:"ARCHOS SA",208:"Dexcom, Inc.",209:"Polar Electro Europe B.V.",210:"Dialog Semiconductor B.V.",211:"Taixingbang\xA0Technology (HK) Co,. LTD.",212:"Kawantech",213:"Austco Communication Systems",214:"Timex Group USA, Inc.",215:"Qualcomm Technologies, Inc.",216:"Qualcomm Connected Experiences, Inc.",217:"Voyetra Turtle Beach",218:"txtr GmbH",219:"Biosentronics",220:"Procter & Gamble",221:"Hosiden Corporation",222:"Muzik LLC",223:"Misfit Wearables Corp",224:"Google",225:"Danlers Ltd",226:"Semilink Inc",227:"inMusic Brands, Inc",228:"L.S. Research Inc.",229:"Eden Software Consultants Ltd.",230:"Freshtemp",231:"KS Technologies",232:"ACTS Technologies",233:"Vtrack Systems",234:"Nielsen-Kellerman Company",235:"Server Technology, Inc.",236:"BioResearch Associates",237:"Jolly Logic, LLC",238:"Above Average Outcomes, Inc.",239:"Bitsplitters GmbH",240:"PayPal, Inc.",241:"Witron Technology Limited",242:"Aether Things\xA0Inc. (formerly Morse Project Inc.)",243:"Kent Displays Inc.",244:"Nautilus Inc.",245:"Smartifier Oy",246:"Elcometer Limited",247:"VSN Technologies Inc.",248:"AceUni Corp., Ltd.",249:"StickNFind",250:"Crystal Code AB",251:"KOUKAAM a.s.",252:"Delphi Corporation",253:"ValenceTech Limited",254:"Reserved",255:"Typo Products, LLC",256:"TomTom International BV",257:"Fugoo, Inc",258:"Keiser Corporation",259:"Bang & Olufsen A/S",260:"PLUS Locations Systems Pty Ltd",261:"Ubiquitous Computing Technology Corporation",262:"Innovative Yachtter Solutions",263:"William Demant Holding A/S",264:"Chicony Electronics Co., Ltd.",265:"Atus BV",266:"Codegate Ltd.",267:"ERi, Inc.",268:"Transducers Direct, LLC",269:"Fujitsu Ten Limited",270:"Audi AG",271:"HiSilicon Technologies Co., Ltd.",272:"Nippon Seiki Co., Ltd.",273:"Steelseries ApS",274:"vyzybl Inc.",275:"Openbrain Technologies, Co., Ltd.",276:"Xensr",277:"e.solutions",278:"1OAK Technologies",279:"Wimoto Technologies Inc",280:"Radius Networks, Inc.",281:"Wize Technology Co., Ltd.",282:"Qualcomm Labs, Inc.",283:"Aruba Networks",284:"Baidu",285:"Arendi AG",286:"Skoda Auto a.s.",287:"Volkswagon AG",288:"Porsche AG",289:"Sino Wealth Electronic Ltd.",290:"AirTurn, Inc.",291:"Kinsa, Inc.",292:"HID Global",293:"SEAT es",294:"Promethean Ltd.",295:"Salutica Allied Solutions",296:"GPSI Group Pty Ltd",297:"Nimble Devices Oy",298:"Changzhou Yongse Infotech Co., Ltd",299:"SportIQ",300:"TEMEC Instruments B.V.",301:"Sony Corporation",302:"ASSA ABLOY",303:"Clarion Co., Ltd.",304:"Warehouse Innovations",305:"Cypress Semiconductor Corporation",306:"MADS Inc",307:"Blue Maestro Limited",308:"Resolution Products, Inc.",309:"Airewear LLC",310:"Seed Labs, Inc. (formerly ETC sp. z.o.o.)",311:"Prestigio Plaza Ltd.",312:"NTEO Inc.",313:"Focus Systems Corporation",314:"Tencent Holdings Limited",315:"Allegion",316:"Murata Manufacuring Co., Ltd.",318:"Nod, Inc.",319:"B&B Manufacturing Company",320:"Alpine\xA0Electronics\xA0(China)\xA0Co.,\xA0Ltd",321:"FedEx Services",322:"Grape Systems Inc.",323:"Bkon Connect",324:"Lintech GmbH",325:"Novatel Wireless",326:"Ciright",327:"Mighty Cast, Inc.",328:"Ambimat Electronics",329:"Perytons Ltd.",330:"Tivoli Audio, LLC",331:"Master Lock",332:"Mesh-Net Ltd",333:"Huizhou Desay SV Automotive CO., LTD.",334:"Tangerine, Inc.",335:"B&W Group Ltd.",336:"Pioneer Corporation",337:"OnBeep",338:"Vernier Software & Technology",339:"ROL Ergo",340:"Pebble Technology",341:"NETATMO",342:"Accumulate AB",343:"Anhui Huami Information Technology Co., Ltd.",344:"Inmite s.r.o.",345:"ChefSteps, Inc.",346:"micas AG",347:"Biomedical Research Ltd.",348:"Pitius Tec S.L.",349:"Estimote, Inc.",350:"Unikey Technologies, Inc.",351:"Timer Cap Co.",352:"AwoX",353:"yikes",354:"MADSGlobal NZ Ltd.",355:"PCH International",356:"Qingdao Yeelink Information Technology Co., Ltd.",357:"Milwaukee Tool (formerly Milwaukee Electric Tools)",358:"MISHIK Pte Ltd",359:"Bayer HealthCare",360:"Spicebox LLC",361:"emberlight",362:"Cooper-Atkins Corporation",363:"Qblinks",364:"MYSPHERA",365:"LifeScan Inc",366:"Volantic AB",367:"Podo Labs, Inc",368:"Roche Diabetes Care AG",369:"Amazon Fulfillment Service",370:"Connovate Technology Private Limited",371:"Kocomojo, LLC",372:"Everykey LLC",373:"Dynamic Controls",374:"SentriLock",375:"I-SYST inc.",376:"CASIO COMPUTER CO., LTD.",377:"LAPIS Semiconductor Co., Ltd.",378:"Telemonitor, Inc.",379:"taskit GmbH",380:"Daimler AG",381:"BatAndCat",382:"BluDotz Ltd",383:"XTel ApS",384:"Gigaset Communications GmbH",385:"Gecko Health Innovations, Inc.",386:"HOP Ubiquitous",387:"To Be Assigned",388:"Nectar",389:"bel\u2019apps LLC",390:"CORE Lighting Ltd",391:"Seraphim Sense Ltd",392:"Unico RBC",393:"Physical Enterprises Inc.",394:"Able Trend Technology Limited",395:"Konica Minolta, Inc.",396:"Wilo SE",397:"Extron Design Services",398:"Fitbit, Inc.",399:"Fireflies Systems",400:"Intelletto Technologies Inc.",401:"FDK CORPORATION",402:"Cloudleaf, Inc",403:"Maveric Automation LLC",404:"Acoustic Stream Corporation",405:"Zuli",406:"Paxton Access Ltd",407:"WiSilica Inc",408:"Vengit Limited",409:"SALTO SYSTEMS S.L.",410:"TRON Forum (formerly T-Engine Forum)",411:"CUBETECH s.r.o.",412:"Cokiya Incorporated",413:"CVS Health",414:"Ceruus",415:"Strainstall Ltd",416:"Channel Enterprises (HK) Ltd.",417:"FIAMM",418:"GIGALANE.CO.,LTD",419:"EROAD",420:"Mine Safety Appliances",421:"Icon Health and Fitness",422:"Asandoo GmbH",423:"ENERGOUS CORPORATION",424:"Taobao",425:"Canon Inc.",426:"Geophysical Technology Inc.",427:"Facebook, Inc.",428:"Nipro Diagnostics, Inc.",429:"FlightSafety International",430:"Earlens Corporation",431:"Sunrise Micro Devices, Inc.",432:"Star Micronics Co., Ltd.",433:"Netizens Sp. z o.o.",434:"Nymi Inc.",435:"Nytec, Inc.",436:"Trineo Sp. z o.o.",437:"Nest Labs Inc.",438:"LM Technologies Ltd",439:"General Electric Company",440:"i+D3 S.L.",441:"HANA Micron",442:"Stages Cycling LLC",443:"Cochlear Bone Anchored Solutions AB",444:"SenionLab AB",445:"Syszone Co., Ltd",446:"Pulsate Mobile Ltd.",447:"Hong Kong HunterSun Electronic Limited",448:"pironex GmbH",449:"BRADATECH Corp.",450:"Transenergooil AG",451:"Bunch",452:"DME Microelectronics",453:"Bitcraze AB",454:"HASWARE Inc.",455:"Abiogenix Inc.",456:"Poly-Control ApS",457:"Avi-on",458:"Laerdal Medical AS",459:"Fetch My Pet",460:"Sam Labs Ltd.",461:"Chengdu Synwing Technology Ltd",462:"HOUWA SYSTEM DESIGN, k.k.",463:"BSH",464:"Primus Inter Pares Ltd",465:"August",466:"Gill Electronics",467:"Sky Wave Design",468:"Newlab S.r.l.",469:"ELAD srl",470:"G-wearables inc.",471:"Squadrone Systems Inc.",472:"Code Corporation",473:"Savant Systems LLC",474:"Logitech International SA",475:"Innblue Consulting",476:"iParking Ltd.",477:"Koninklijke Philips Electronics N.V.",478:"Minelab Electronics Pty Limited",479:"Bison Group Ltd.",480:"Widex A/S",481:"Jolla Ltd",482:"Lectronix, Inc.",483:"Caterpillar Inc",484:"Freedom Innovations",485:"Dynamic Devices Ltd",486:"Technology Solutions (UK) Ltd",487:"IPS Group Inc.",488:"STIR",489:"Sano, Inc",490:"Advanced Application Design, Inc.",491:"AutoMap LLC",492:"Spreadtrum Communications Shanghai Ltd",493:"CuteCircuit LTD",494:"Valeo Service",495:"Fullpower Technologies, Inc.",496:"KloudNation",497:"Zebra Technologies Corporation",498:"Itron, Inc.",499:"The University of Tokyo",500:"UTC Fire and Security",501:"Cool Webthings Limited",502:"DJO Global",503:"Gelliner Limited",504:"Anyka (Guangzhou) Microelectronics Technology Co, LTD",505:"Medtronic, Inc.",506:"Gozio, Inc.",507:"Form Lifting, LLC",508:"Wahoo Fitness, LLC",509:"Kontakt Micro-Location Sp. z o.o.",510:"Radio System Corporation",511:"Freescale Semiconductor, Inc.",512:"Verifone Systems PTe Ltd. Taiwan Branch",513:"AR Timing",514:"Rigado LLC",515:"Kemppi Oy",516:"Tapcentive Inc.",517:"Smartbotics Inc.",518:"Otter Products, LLC",519:"STEMP Inc.",520:"LumiGeek LLC",521:"InvisionHeart Inc.",522:"Macnica Inc. ",523:"Jaguar Land Rover Limited",524:"CoroWare Technologies, Inc",525:"Simplo Technology Co., LTD",526:"Omron Healthcare Co., LTD",527:"Comodule GMBH",528:"ikeGPS",529:"Telink Semiconductor Co. Ltd",530:"Interplan Co., Ltd",531:"Wyler AG",532:"IK Multimedia Production srl",533:"Lukoton Experience Oy",534:"MTI Ltd",535:"Tech4home, Lda",536:"Hiotech AB",537:"DOTT Limited",538:"Blue Speck Labs, LLC",539:"Cisco Systems, Inc",540:"Mobicomm Inc",541:"Edamic",542:"Goodnet, Ltd",543:"Luster Leaf Products Inc",544:"Manus Machina BV",545:"Mobiquity Networks Inc",546:"Praxis Dynamics",547:"Philip Morris Products S.A.",548:"Comarch SA",549:"Nestl Nespresso S.A.",550:"Merlinia A/S",551:"LifeBEAM Technologies",552:"Twocanoes Labs, LLC",553:"Muoverti Limited",554:"Stamer Musikanlagen GMBH",555:"Tesla Motors",556:"Pharynks Corporation",557:"Lupine",558:"Siemens AG",559:"Huami (Shanghai) Culture Communication CO., LTD",560:"Foster Electric Company, Ltd",561:"ETA SA",562:"x-Senso Solutions Kft",563:"Shenzhen SuLong Communication Ltd",564:"FengFan (BeiJing) Technology Co, Ltd",565:"Qrio Inc",566:"Pitpatpet Ltd",567:"MSHeli s.r.l.",568:"Trakm8 Ltd",569:"JIN CO, Ltd",570:"Alatech Tehnology",571:"Beijing CarePulse Electronic Technology Co, Ltd",572:"Awarepoint",573:"ViCentra B.V.",574:"Raven Industries",575:"WaveWare Technologies Inc.",576:"Argenox Technologies",577:"Bragi GmbH",578:"16Lab Inc",579:"Masimo Corp",580:"Iotera Inc",581:"Endress+Hauser",582:"ACKme Networks, Inc.",583:"FiftyThree Inc.",584:"Parker Hannifin Corp",585:"Transcranial Ltd",586:"Uwatec AG",587:"Orlan LLC",588:"Blue Clover Devices",589:"M-Way Solutions GmbH",590:"Microtronics Engineering GmbH",591:"Schneider Schreibgerte GmbH",592:"Sapphire Circuits LLC",593:"Lumo Bodytech Inc.",594:"UKC Technosolution",595:"Xicato Inc.",596:"Playbrush",597:"Dai Nippon Printing Co., Ltd.",598:"G24 Power Limited",599:"AdBabble Local Commerce Inc.",600:"Devialet SA",601:"ALTYOR",602:"University of Applied Sciences Valais/Haute Ecole Valaisanne",603:"Five Interactive, LLC dba Zendo",604:"NetEaseHangzhouNetwork co.Ltd.",605:"Lexmark International Inc.",606:"Fluke Corporation",607:"Yardarm Technologies",608:"SensaRx",609:"SECVRE GmbH",610:"Glacial Ridge Technologies",611:"Identiv, Inc.",612:"DDS, Inc.",613:"SMK Corporation",614:"Schawbel Technologies LLC",615:"XMI Systems SA",616:"Cerevo",617:"Torrox GmbH & Co KG",618:"Gemalto",619:"DEKA Research & Development Corp.",620:"Domster Tadeusz Szydlowski",621:"Technogym SPA",622:"FLEURBAEY BVBA",623:"Aptcode Solutions",624:"LSI ADL Technology",625:"Animas Corp",626:"Alps Electric Co., Ltd.",627:"OCEASOFT",628:"Motsai Research",629:"Geotab",630:"E.G.O. Elektro-Gertebau GmbH",631:"bewhere inc",632:"Johnson Outdoors Inc",633:"steute Schaltgerate GmbH & Co. KG",634:"Ekomini inc.",635:"DEFA AS",636:"Aseptika Ltd",637:"HUAWEI Technologies Co., Ltd. ( )",638:"HabitAware, LLC",639:"ruwido austria gmbh",640:"ITEC corporation",641:"StoneL",642:"Sonova AG",643:"Maven Machines, Inc.",644:"Synapse Electronics",645:"Standard Innovation Inc.",646:"RF Code, Inc.",647:"Wally Ventures S.L.",648:"Willowbank Electronics Ltd",649:"SK Telecom",650:"Jetro AS",651:"Code Gears LTD",652:"NANOLINK APS",653:"IF, LLC",654:"RF Digital Corp",655:"Church & Dwight Co., Inc",656:"Multibit Oy",657:"CliniCloud Inc",658:"SwiftSensors",659:"Blue Bite",660:"ELIAS GmbH",661:"Sivantos GmbH",662:"Petzl",663:"storm power ltd",664:"EISST Ltd",665:"Inexess Technology Simma KG",666:"Currant, Inc.",667:"C2 Development, Inc.",668:"Blue Sky Scientific, LLC",669:"ALOTTAZS LABS, LLC",670:"Kupson spol. s r.o.",671:"Areus Engineering GmbH",672:"Impossible Camera GmbH",673:"InventureTrack Systems",674:"LockedUp",675:"Itude",676:"Pacific Lock Company",677:"Tendyron Corporation ( )",678:"Robert Bosch GmbH",679:"Illuxtron international B.V.",680:"miSport Ltd.",681:"Chargelib",682:"Doppler Lab",683:"BBPOS Limited",684:"RTB Elektronik GmbH & Co. KG",685:"Rx Networks, Inc.",686:"WeatherFlow, Inc.",687:"Technicolor USA Inc.",688:"Bestechnic(Shanghai),Ltd",689:"Raden Inc",690:"JouZen Oy",691:"CLABER S.P.A.",692:"Hyginex, Inc.",693:"HANSHIN ELECTRIC RAILWAY CO.,LTD.",694:"Schneider Electric",695:"Oort Technologies LLC",696:"Chrono Therapeutics",697:"Rinnai Corporation",698:"Swissprime Technologies AG",699:"Koha.,Co.Ltd",700:"Genevac Ltd",701:"Chemtronics",702:"Seguro Technology Sp. z o.o.",703:"Redbird Flight Simulations",704:"Dash Robotics",705:"LINE Corporation",706:"Guillemot Corporation",707:"Techtronic Power Tools Technology Limited",708:"Wilson Sporting Goods",709:"Lenovo (Singapore) Pte Ltd. ( )",710:"Ayatan Sensors",711:"Electronics Tomorrow Limited",712:"VASCO Data Security International, Inc.",713:"PayRange Inc.",714:"ABOV Semiconductor",715:"AINA-Wireless Inc.",716:"Eijkelkamp Soil & Water",717:"BMA ergonomics b.v.",718:"Teva Branded Pharmaceutical Products R&D, Inc.",719:"Anima",720:"3M",721:"Empatica Srl",722:"Afero, Inc.",723:"Powercast Corporation",724:"Secuyou ApS",725:"OMRON Corporation",726:"Send Solutions",727:"NIPPON SYSTEMWARE CO.,LTD.",728:"Neosfar",729:"Fliegl Agrartechnik GmbH",730:"Gilvader",731:"Digi International Inc (R)",732:"DeWalch Technologies, Inc.",733:"Flint Rehabilitation Devices, LLC",734:"Samsung SDS Co., Ltd.",735:"Blur Product Development",736:"University of Michigan",737:"Victron Energy BV",738:"NTT docomo",739:"Carmanah Technologies Corp.",740:"Bytestorm Ltd.",741:"Espressif Incorporated ( () )",742:"Unwire",743:"Connected Yard, Inc.",744:"American Music Environments",745:"Sensogram Technologies, Inc.",746:"Fujitsu Limited",747:"Ardic Technology",748:"Delta Systems, Inc",749:"HTC Corporation",750:"Citizen Holdings Co., Ltd.",751:"SMART-INNOVATION.inc",752:"Blackrat Software",753:"The Idea Cave, LLC",754:"GoPro, Inc.",755:"AuthAir, Inc",756:"Vensi, Inc.",757:"Indagem Tech LLC",758:"Intemo Technologies",759:"DreamVisions co., Ltd.",760:"Runteq Oy Ltd",761:"IMAGINATION TECHNOLOGIES LTD",762:"CoSTAR TEchnologies",763:"Clarius Mobile Health Corp.",764:"Shanghai Frequen Microelectronics Co., Ltd.",765:"Uwanna, Inc.",766:"Lierda Science & Technology Group Co., Ltd.",767:"Silicon Laboratories",768:"World Moto Inc.",769:"Giatec Scientific Inc.",770:"Loop Devices, Inc",771:"IACA electronique",772:"Martians Inc",773:"Swipp ApS",774:"Life Laboratory Inc.",775:"FUJI INDUSTRIAL CO.,LTD.",776:"Surefire, LLC",777:"Dolby Labs",778:"Ellisys",779:"Magnitude Lighting Converters",780:"Hilti AG",781:"Devdata S.r.l.",782:"Deviceworx",783:"Shortcut Labs",784:"SGL Italia S.r.l.",785:"PEEQ DATA",786:"Ducere Technologies Pvt Ltd",787:"DiveNav, Inc.",788:"RIIG AI Sp. z o.o.",789:"Thermo Fisher Scientific",790:"AG Measurematics Pvt. Ltd.",791:"CHUO Electronics CO., LTD.",792:"Aspenta International",793:"Eugster Frismag AG",794:"Amber wireless GmbH",795:"HQ Inc",796:"Lab Sensor Solutions",797:"Enterlab ApS",798:"Eyefi, Inc.",799:"MetaSystem S.p.A.",800:"SONO ELECTRONICS. CO., LTD",801:"Jewelbots",802:"Compumedics Limited",803:"Rotor Bike Components",804:"Astro, Inc.",805:"Amotus Solutions",806:"Healthwear Technologies (Changzhou)Ltd",807:"Essex Electronics",808:"Grundfos A/S",809:"Eargo, Inc.",810:"Electronic Design Lab",811:"ESYLUX",812:"NIPPON SMT.CO.,Ltd",813:"BM innovations GmbH",814:"indoormap",815:"OttoQ Inc",816:"North Pole Engineering",817:"3flares Technologies Inc.",818:"Electrocompaniet A.S.",819:"Mul-T-Lock",820:"Corentium AS",821:"Enlighted Inc",822:"GISTIC",823:"AJP2 Holdings, LLC",824:"COBI GmbH",825:"Blue Sky Scientific, LLC",826:"Appception, Inc.",827:"Courtney Thorne Limited",828:"Virtuosys",829:"TPV Technology Limited",830:"Monitra SA",831:"Automation Components, Inc.",832:"Letsense s.r.l.",833:"Etesian Technologies LLC",834:"GERTEC BRASIL LTDA.",835:"Drekker Development Pty. Ltd.",836:"Whirl Inc",837:"Locus Positioning",838:"Acuity Brands Lighting, Inc",839:"Prevent Biometrics",840:"Arioneo",841:"VersaMe",842:"Vaddio",843:"Libratone A/S",844:"HM Electronics, Inc.",845:"TASER International, Inc.",846:"SafeTrust Inc.",847:"Heartland Payment Systems",848:"Bitstrata Systems Inc.",849:"Pieps GmbH",850:"iRiding(Xiamen)Technology Co.,Ltd.",851:"Alpha Audiotronics, Inc.",852:"TOPPAN FORMS CO.,LTD.",853:"Sigma Designs, Inc.",854:"Spectrum Brands, Inc.",855:"Polymap Wireless",856:"MagniWare Ltd.",857:"Novotec Medical GmbH",858:"Medicom Innovation Partner a/s",859:"Matrix Inc.",860:"Eaton Corporation",861:"KYS",862:"Naya Health, Inc.",863:"Acromag",864:"Insulet Corporation",865:"Wellinks Inc.",866:"ON Semiconductor",867:"FREELAP SA",868:"Favero Electronics Srl",869:"BioMech Sensor LLC",870:"BOLTT Sports technologies Private limited",871:"Saphe International",872:"Metormote AB",873:"littleBits",874:"SetPoint Medical",875:"BRControls Products BV",876:"Zipcar",877:"AirBolt Pty Ltd",878:"KeepTruckin Inc",879:"Motiv, Inc.",880:"Wazombi Labs O",881:"ORBCOMM",882:"Nixie Labs, Inc.",883:"AppNearMe Ltd",884:"Holman Industries",885:"Expain AS",886:"Electronic Temperature Instruments Ltd",887:"Plejd AB",888:"Propeller Health",889:"Shenzhen iMCO Electronic Technology Co.,Ltd",890:"Algoria",891:"Apption Labs Inc.",892:"Cronologics Corporation",893:"MICRODIA Ltd.",894:"lulabytes S.L.",895:"Nestec S.A.",896:"LLC MEGA - F service",897:"Sharp Corporation",898:"Precision Outcomes Ltd",899:"Kronos Incorporated",900:"OCOSMOS Co., Ltd.",901:"Embedded Electronic Solutions Ltd. dba e2Solutions",902:"Aterica Inc.",903:"BluStor PMC, Inc.",904:"Kapsch TrafficCom AB",905:"ActiveBlu Corporation",906:"Kohler Mira Limited",907:"Noke",908:"Appion Inc.",909:"Resmed Ltd",910:"Crownstone B.V.",911:"Xiaomi Inc.",912:"INFOTECH s.r.o.",913:"Thingsquare AB",914:"T&D",915:"LAVAZZA S.p.A.",916:"Netclearance Systems, Inc.",917:"SDATAWAY",918:"BLOKS GmbH",919:"LEGO System A/S",920:"Thetatronics Ltd",921:"Nikon Corporation",922:"NeST",923:"South Silicon Valley Microelectronics",924:"ALE International",925:"CareView Communications, Inc.",926:"SchoolBoard Limited",927:"Molex Corporation",928:"IVT Wireless Limited",929:"Alpine Labs LLC",930:"Candura Instruments",931:"SmartMovt Technology Co., Ltd",932:"Token Zero Ltd",933:"ACE CAD Enterprise Co., Ltd. (ACECAD)",934:"Medela, Inc",935:"AeroScout",936:"Esrille Inc.",937:"THINKERLY SRL",938:"Exon Sp. z o.o.",939:"Meizu Technology Co., Ltd.",940:"Smablo LTD",941:"XiQ",942:"Allswell Inc.",943:"Comm-N-Sense Corp DBA Verigo",944:"VIBRADORM GmbH",945:"Otodata Wireless Network Inc.",946:"Propagation Systems Limited",947:"Midwest Instruments & Controls",948:"Alpha Nodus, inc.",949:"petPOMM, Inc",950:"Mattel",951:"Airbly Inc.",952:"A-Safe Limited",953:"FREDERIQUE CONSTANT SA",954:"Maxscend Microelectronics Company Limited",955:"Abbott Diabetes Care",956:"ASB Bank Ltd",957:"amadas",958:"Applied Science, Inc.",959:"iLumi Solutions Inc.",960:"Arch Systems Inc.",961:"Ember Technologies, Inc.",962:"Snapchat Inc",963:"Casambi Technologies Oy",964:"Pico Technology Inc.",965:"St. Jude Medical, Inc.",966:"Intricon",967:"Structural Health Systems, Inc.",968:"Avvel International",969:"Gallagher Group",970:"In2things Automation Pvt. Ltd.",971:"SYSDEV Srl",972:"Vonkil Technologies Ltd",973:"Wynd Technologies, Inc.",974:"CONTRINEX S.A.",975:"MIRA, Inc.",976:"Watteam Ltd",977:"Density Inc.",978:"IOT Pot India Private Limited",979:"Sigma Connectivity AB",980:"PEG PEREGO SPA",981:"Wyzelink Systems Inc.",982:"Yota Devices LTD",983:"FINSECUR",984:"Zen-Me Labs Ltd",985:"3IWare Co., Ltd.",986:"EnOcean GmbH",987:"Instabeat, Inc",988:"Nima Labs",989:"Andreas Stihl AG & Co. KG",990:"Nathan Rhoades LLC",991:"Grob Technologies, LLC",992:"Actions (Zhuhai) Technology Co., Limited",993:"SPD Development Company Ltd",994:"Sensoan Oy",995:"Qualcomm Life Inc",996:"Chip-ing AG",997:"ffly4u",998:"IoT Instruments Oy",999:"TRUE Fitness Technology",1000:"Reiner Kartengeraete GmbH & Co. KG.",1001:"SHENZHEN LEMONJOY TECHNOLOGY CO., LTD.",1002:"Hello Inc.",1003:"Evollve Inc.",1004:"Jigowatts Inc.",1005:"BASIC MICRO.COM,INC.",1006:"CUBE TECHNOLOGIES",1007:"foolography GmbH",1008:"CLINK",1009:"Hestan Smart Cooking Inc.",1010:"WindowMaster A/S",1011:"Flowscape AB",1012:"PAL Technologies Ltd",1013:"WHERE, Inc.",1014:"Iton Technology Corp.",1015:"Owl Labs Inc.",1016:"Rockford Corp.",1017:"Becon Technologies Co.,Ltd.",1018:"Vyassoft Technologies Inc",1019:"Nox Medical",1020:"Kimberly-Clark",1021:"Trimble Navigation Ltd.",1022:"Littelfuse",1023:"Withings",1024:"i-developer IT Beratung UG",1026:"Sears Holdings Corporation",1027:"Gantner Electronic GmbH",1028:"Authomate Inc",1029:"Vertex International, Inc.",1030:"Airtago",1031:"Swiss Audio SA",1032:"ToGetHome Inc.",1033:"AXIS",1034:"Openmatics",1035:"Jana Care Inc.",1036:"Senix Corporation",1037:"NorthStar Battery Company, LLC",1038:"SKF (U.K.) Limited",1039:"CO-AX Technology, Inc.",1040:"Fender Musical Instruments",1041:"Luidia Inc",1042:"SEFAM",1043:"Wireless Cables Inc",1044:"Lightning Protection International Pty Ltd",1045:"Uber Technologies Inc",1046:"SODA GmbH",1047:"Fatigue Science",1048:"Alpine Electronics Inc.",1049:"Novalogy LTD",1050:"Friday Labs Limited",1051:"OrthoAccel Technologies",1052:"WaterGuru, Inc.",1053:"Benning Elektrotechnik und Elektronik GmbH & Co. KG",1054:"Dell Computer Corporation",1055:"Kopin Corporation",1056:"TecBakery GmbH",1057:"Backbone Labs, Inc.",1058:"DELSEY SA",1059:"Chargifi Limited",1060:"Trainesense Ltd.",1061:"Unify Software and Solutions GmbH & Co. KG",1062:"Husqvarna AB",1063:"Focus fleet and fuel management inc",1064:"SmallLoop, LLC",1065:"Prolon Inc.",1066:"BD Medical",1067:"iMicroMed Incorporated",1068:"Ticto N.V.",1069:"Meshtech AS",1070:"MemCachier Inc.",1071:"Danfoss A/S",1072:"SnapStyk Inc.",1073:"Amyway Corporation",1074:"Silk Labs, Inc.",1075:"Pillsy Inc.",1076:"Hatch Baby, Inc.",1077:"Blocks Wearables Ltd.",1078:"Drayson Technologies (Europe) Limited",1079:"eBest IOT Inc.",1080:"Helvar Ltd",1081:"Radiance Technologies",1082:"Nuheara Limited",1083:"Appside co., ltd.",1084:"DeLaval",1085:"Coiler Corporation",1086:"Thermomedics, Inc.",1087:"Tentacle Sync GmbH",1088:"Valencell, Inc.",1089:"iProtoXi Oy",1090:"SECOM CO., LTD.",1091:"Tucker International LLC",1092:"Metanate Limited",1093:"Kobian Canada Inc.",1094:"NETGEAR, Inc.",1095:"Fabtronics Australia Pty Ltd",1096:"Grand Centrix GmbH",1097:"1UP USA.com llc",1098:"SHIMANO INC.",1099:"Nain Inc.",1100:"LifeStyle Lock, LLC",1101:"VEGA Grieshaber KG",1102:"Xtrava Inc.",1103:"TTS Tooltechnic Systems AG & Co. KG",1104:"Teenage Engineering AB",1105:"Tunstall Nordic AB",1106:"Svep Design Center AB",1107:"GreenPeak Technologies BV",1108:"Sphinx Electronics GmbH & Co KG",1109:"Atomation",1110:"Nemik Consulting Inc",1111:"RF INNOVATION",1112:"Mini Solution Co., Ltd.",1113:"Lumenetix, Inc",1114:"2048450 Ontario Inc",1115:"SPACEEK LTD",1116:"Delta T Corporation",1117:"Boston Scientific Corporation",1118:"Nuviz, Inc.",1119:"Real Time Automation, Inc.",1120:"Kolibree",1121:"vhf elektronik GmbH",1122:"Bonsai Systems GmbH",1123:"Fathom Systems Inc.",1124:"Bellman & Symfon",1125:"International Forte Group LLC",1126:"CycleLabs Solutions inc.",1127:"Codenex Oy",1128:"Kynesim Ltd",1129:"Palago AB",1130:"INSIGMA INC.",1131:"PMD Solutions",1132:"Qingdao Realtime Technology Co., Ltd.",1133:"BEGA Gantenbrink-Leuchten KG",1134:"Pambor Ltd.",65535:"SPECIAL USE/DEFAULT"}});var require_bluetooth=__commonJS((exports)=>{var exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,path6=__require("path"),util4=require_util3(),bluetoothVendors=require_bluetoothVendors(),fs3=__require("fs"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function parseBluetoothType(str5){let result2="";if(str5.indexOf("keyboard")>=0)result2="Keyboard";if(str5.indexOf("mouse")>=0)result2="Mouse";if(str5.indexOf("trackpad")>=0)result2="Trackpad";if(str5.indexOf("audio")>=0)result2="Audio";if(str5.indexOf("sound")>=0)result2="Audio";if(str5.indexOf("microph")>=0)result2="Microphone";if(str5.indexOf("speaker")>=0)result2="Speaker";if(str5.indexOf("headset")>=0)result2="Headset";if(str5.indexOf("phone")>=0)result2="Phone";if(str5.indexOf("macbook")>=0)result2="Computer";if(str5.indexOf("imac")>=0)result2="Computer";if(str5.indexOf("ipad")>=0)result2="Tablet";if(str5.indexOf("watch")>=0)result2="Watch";if(str5.indexOf("headphone")>=0)result2="Headset";return result2}function parseBluetoothManufacturer(str5){let result2=str5.split(" ")[0];if(str5=str5.toLowerCase(),str5.indexOf("apple")>=0)result2="Apple";if(str5.indexOf("ipad")>=0)result2="Apple";if(str5.indexOf("imac")>=0)result2="Apple";if(str5.indexOf("iphone")>=0)result2="Apple";if(str5.indexOf("magic mouse")>=0)result2="Apple";if(str5.indexOf("magic track")>=0)result2="Apple";if(str5.indexOf("macbook")>=0)result2="Apple";return result2}function parseBluetoothVendor(str5){let id=parseInt(str5);if(!isNaN(id))return bluetoothVendors[id]}function parseLinuxBluetoothInfo(lines,macAddr1,macAddr2){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name","="),result2.manufacturer=null,result2.macDevice=macAddr1,result2.macHost=macAddr2,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=!1,result2}function parseDarwinBluetoothDevices(bluetoothObject,macAddr2){let result2={},typeStr=((bluetoothObject.device_minorClassOfDevice_string||bluetoothObject.device_majorClassOfDevice_string||bluetoothObject.device_minorType||"")+(bluetoothObject.device_name||"")).toLowerCase();return result2.device=bluetoothObject.device_services||"",result2.name=bluetoothObject.device_name||"",result2.manufacturer=bluetoothObject.device_manufacturer||parseBluetoothVendor(bluetoothObject.device_vendorID)||parseBluetoothManufacturer(bluetoothObject.device_name||"")||"",result2.macDevice=(bluetoothObject.device_addr||bluetoothObject.device_address||"").toLowerCase().replace(/-/g,":"),result2.macHost=macAddr2,result2.batteryPercent=bluetoothObject.device_batteryPercent||null,result2.type=parseBluetoothType(typeStr),result2.connected=bluetoothObject.device_isconnected==="attrib_Yes"||!1,result2}function parseWindowsBluetooth(lines){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name",":"),result2.manufacturer=util4.getValue(lines,"manufacturer",":"),result2.macDevice=null,result2.macHost=null,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=null,result2}function bluetoothDevices(callback){return new Promise((resolve21)=>{process.nextTick(()=>{let result2=[];if(_linux){util4.getFilesInPath("/var/lib/bluetooth/").forEach((element)=>{let filename=path6.basename(element),pathParts=element.split("/"),macAddr1=pathParts.length>=6?pathParts[pathParts.length-2]:null,macAddr2=pathParts.length>=7?pathParts[pathParts.length-3]:null;if(filename==="info"){let infoFile=fs3.readFileSync(element,{encoding:"utf8"}).split(`
3963
3963
  `);result2.push(parseLinuxBluetoothInfo(infoFile,macAddr1,macAddr2))}});try{let hdicon=execSync18("hcitool con",util4.execOptsLinux).toString().toLowerCase();for(let i2=0;i2<result2.length;i2++)if(result2[i2].macDevice&&result2[i2].macDevice.length>10&&hdicon.indexOf(result2[i2].macDevice.toLowerCase())>=0)result2[i2].connected=!0}catch{util4.noop()}if(callback)callback(result2);resolve21(result2)}if(_darwin)exec3("system_profiler SPBluetoothDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_title&&outObj.SPBluetoothDataType[0].device_title.length){let macAddr2=null;if(outObj.SPBluetoothDataType[0].local_device_title&&outObj.SPBluetoothDataType[0].local_device_title.general_address)macAddr2=outObj.SPBluetoothDataType[0].local_device_title.general_address.toLowerCase().replace(/-/g,":");outObj.SPBluetoothDataType[0].device_title.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0];let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_connected&&outObj.SPBluetoothDataType[0].device_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_Yes";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_not_connected&&outObj.SPBluetoothDataType[0].device_not_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_not_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_No";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}}catch{util4.noop()}if(callback)callback(result2);resolve21(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_PNPEntity | select PNPClass, Name, Manufacturer, Status, Service, ConfigManagerErrorCode, Present | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((part)=>{let lines=part.split(`
3964
- `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve21(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve21(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve21)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve21(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve21)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve21(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve21)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve21(data)})})})})}function get3(valueObject,callback){return new Promise((resolve21)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve21(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>90)return palette.error;if(percent>70)return palette.warning;return palette.accent}function SystemStatsView({stats:stats2}){if(!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SystemStats(){let[stats2,setStats]=import_react23.useState(null),mountedRef=import_react23.useRef(!0);return import_react23.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),import_jsx_dev_runtime2.jsxDEV(SystemStatsView,{stats:stats2},void 0,!1,void 0,this)}var import_react23,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react23=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react25.useState("name"),[teamName,setTeamName]=import_react25.useState(""),[selected,setSelected]=import_react25.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react25.useState(0),nameError=import_react25.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react25.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react25.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react25.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react25.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react25.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",width:"100%",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.accent:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react25;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react2();import_react25=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.workState){case"in_flight":return"\u25C6";case"paused":return"\u25D0";case"done":return"\u2714";case"stuck":return"\u2718";default:break}switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CC";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CC"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.isClaudeLike)return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.success:palette.textDim;case"window":return node.data.active?palette.info:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.workState){case"in_flight":return palette.accentBright;case"paused":return palette.textDim;case"done":return palette.info;case"stuck":return palette.error;default:break}switch(node.wsAgentState){case"running":return palette.success;case"stopped":return palette.text;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.info;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.isClaudeLike)return palette.info;return palette.textDim}function getAgentSuffix(node){if(node.workState==="stuck")return" [stuck \u2014 press R to retry]";if(node.workState==="paused")return" [paused \u2014 auto-resume off]";if(node.workState==="done")return" [done]";if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";if(node.wsAgentState==="stopped")return" [Enter to start]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}function getNodeSuffix(node){if(node.type==="agent")return getAgentSuffix(node);if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.info;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react26,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react26=__toESM(require_react_development(),1),TreeNodeRow=import_react26.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node),labelColor=selected?palette.accentBright:node.type==="agent"&&node.kind==="subagent"?palette.textDim:palette.text;return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.accentDim:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:labelColor,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,process.env.GENIE_TUI_DEBUG==="1"?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react28.useEffect(()=>{let active=!0,lastErrorMessage=null,lastErrorLoggedAt=0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap),lastErrorMessage=null;let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){let message=err instanceof Error?err.message:String(err),now=Date.now();if(message!==lastErrorMessage||now-lastErrorLoggedAt>30000)console.error("TUI: diagnostics failed:",message),lastErrorMessage=message,lastErrorLoggedAt=now}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react28.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors,workStates:diagnostics.workStates})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react28.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react28.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react28.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react28.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function renderAlertBadge(alertCount){if(alertCount<=0)return null;return import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:[" ","\u25CF ",alertCount," alert",alertCount===1?"":"s"]},void 0,!0,void 0,this)}function countAgents(nodes,predicate){let count=0;for(let n of nodes){if(n.type==="agent"&&predicate(n))count++;if(n.children.length>0)count+=countAgents(n.children,predicate)}return count}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot){let agentCount=countAgents(sessionTree,()=>!0);if(agentCount>0)return{agentCount,runningCount:countAgents(sessionTree,(n)=>n.wsAgentState==="running")}}let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react28.useState(null),[sessionTree,setSessionTree]=import_react28.useState([]),[selectedIndex,setSelectedIndex]=import_react28.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react28.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react28.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react28.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react28.useState(null),lastTarget=import_react28.useRef(null),selectedNodeId=import_react28.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react28.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react28.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react28.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react28.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react28.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react28.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react28.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react28.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react28.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react28.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react28.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react28.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react28.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions",alertCount=diagnostics?.alertCount??0;return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null,renderAlertBadge(alertCount)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("ascii-font",{text:"GENIE",font:"tiny",color:palette.accent},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react28.useState(!1),pendingTeamNameRef=import_react28.useRef(null),handleOpenTeamCreate=import_react28.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react28.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react28.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react28.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect,spawn5=spawnAgent){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawn5(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers.handleEnter();else if(n==="r")handlers.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join93,resolve:resolve21}=__require("path"),{existsSync:existsSync76,mkdirSync:mkdirSync35,openSync:openSync6}=__require("fs"),{homedir:homedir51}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve21(join93(wsRoot,"agents",parentName));if(existsSync76(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join93(homedir51(),".genie","logs","tui-spawn");try{mkdirSync35(logDir,{recursive:!0})}catch{}let logPath=join93(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync6(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve21,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve21(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react28;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_session_tree();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react28=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react2()});import{execSync as execSync18}from"child_process";import{readFileSync as readFileSync49}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let renderer=useRenderer(),[showQuit,setShowQuit]=import_react32.useState(!1),[showHelp,setShowHelp]=import_react32.useState(!1),[activeSession,setActiveSession]=import_react32.useState(null);import_react32.useEffect(()=>{let title=activeSession?`${BASE_TERMINAL_TITLE} \u2014 ${activeSession}`:BASE_TERMINAL_TITLE;try{renderer.setTerminalTitle(title)}catch{}},[renderer,activeSession]);let handleQuit=import_react32.useCallback(()=>{try{let genieHome6=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync49(`${genieHome6}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]);useBindings(()=>({commands:[{name:"app.quit",title:"Quit",desc:"Show quit confirmation; press again to quit",category:"app",run(){if(showQuit)handleQuit();else setShowQuit(!0)}},{name:"app.help.toggle",title:"Toggle help overlay",desc:"Show/hide the keyboard shortcut overlay",category:"app",run(){setShowHelp((prev)=>!prev)}},{name:"app.console.toggle",title:"Toggle console overlay",desc:"Show/hide the OpenTUI console (logs)",category:"app",run(){renderer.console.toggle()}}],bindings:[{key:"ctrl+q",cmd:"app.quit"},{key:"f1",cmd:"app.help.toggle"},{key:"`",cmd:"app.console.toggle"}]}),[renderer,showQuit,handleQuit]);let handleTmuxSessionSelect=import_react32.useCallback((sessionName,windowIndex)=>{if(setActiveSession(sessionName),!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit||showHelp},void 0,!1,void 0,this),showHelp?import_jsx_dev_runtime2.jsxDEV(HelpOverlay,{onClose:()=>setShowHelp(!1)},void 0,!1,void 0,this):null,showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react32,BASE_TERMINAL_TITLE="genie tui";var init_app=__esm(async()=>{init_react();init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_HelpOverlay(),init_Nav(),init_QuitDialog()]);import_react32=__toESM(require_react_development(),1)});function getFocusedTargetIfAvailable(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath(host,focused){let path6=new Set;return forEachActivationTarget(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused(state,host,focused){if(state.activeLayersCacheVersion===state.activeLayersVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;let activeLayers=[],activationPath=getActivationPath(host,focused);for(let layer of state.sortedLayers)if(isLayerActiveForFocused(host,layer,focused,activationPath))activeLayers.push(layer);return state.activeLayersCacheVersion=state.activeLayersVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=activeLayers,activeLayers}function invalidateCachedActiveLayers(state){state.activeLayersCacheVersion=-1,state.activeLayersCacheFocused=void 0,state.activeLayersCache=[]}function isLayerActiveForFocused(host,layer,focused,activationPath=getActivationPath(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function normalizeBindingTokenName(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke(input){return{name:normalizeKeyName(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart(input,options){let stroke=cloneKeyStroke(normalizeKeyStroke(input));return{stroke,display:options?.display??stringifyCanonicalStroke(stroke),match:options?.match??createKeyMatch(stroke),tokenName:options?.tokenName?normalizeBindingTokenName(options.tokenName):void 0}}function cloneKeySequencePart(part){return{stroke:cloneKeyStroke(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName}}function cloneKeySequence(parts){return parts.map((part)=>cloneKeySequencePart(part))}function resolveKeyMatch(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch(input.stroke);return createKeyMatch(input)}function createKeyMatch(input){return`key:${buildKeyMatchId(normalizeKeyStroke(input))}`}function createTextKeyMatch(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke(input.stroke)}return stringifyCanonicalStroke(normalizeKeyStroke(input))}function stringifyKeySequence(input,options){return input.map((part)=>stringifyKeyStroke(part,options)).join("")}function stringifyCanonicalStroke(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getLiveHost(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function isSamePendingSequence(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.node!==right.node)return!1}return!0}class ActivationService{state;host;hooks;notify;conditions;catalog;options;constructor(state,host,hooks,notify,conditions,catalog,options={}){this.state=state,this.host=host,this.hooks=hooks,this.notify=notify,this.conditions=conditions,this.catalog=catalog,this.options=options}getFocusedTarget(){return getLiveHost(this.host).getFocusedTarget()}getFocusedTargetIfAvailable(){return getFocusedTargetIfAvailable(this.host)}setPendingSequence(next){let previous=this.state.projection.pendingSequence;if(isSamePendingSequence(previous,next))return;this.state.projection.pendingSequence=next,this.options.onPendingSequenceChanged?.(previous,next),this.invalidateCaches(),this.notifyPendingSequenceChange(),this.notify.queueStateChange()}ensureValidPendingSequence(){let pending=this.state.projection.pendingSequence;if(!pending)return;let focused=this.getFocusedTarget(),captures=pending.captures.filter((capture2)=>{return this.state.layers.layers.has(capture2.layer)&&this.isLayerActiveForFocused(capture2.layer,focused)&&this.conditions.layerMatchesRuntimeState(capture2.layer)&&this.nodeHasReachableBindings(capture2.node,focused)});if(captures.length===0){this.setPendingSequence(null);return}if(captures.length!==pending.captures.length)this.setPendingSequence({captures});return this.state.projection.pendingSequence??void 0}revalidatePendingSequenceIfNeeded(){if(this.host.isDestroyed||!this.state.projection.pendingSequence)return;this.ensureValidPendingSequence()}hasPendingSequenceState(){return!this.host.isDestroyed&&this.state.projection.pendingSequence!==null}getPendingSequence(){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion;if(projections.pendingSequenceCacheVersion===derivedStateVersion)return projections.pendingSequenceCache;let pending=this.ensureValidPendingSequence(),canUseCache=!pending||pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)),sequence=pending?this.collectSequencePartsFromPending(pending):[];if(canUseCache)projections.pendingSequenceCacheVersion=derivedStateVersion,projections.pendingSequenceCache=sequence;return sequence}popPendingSequence(){let pending=this.ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.node.depth<=1)return this.setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let parent=capture2.node.parent;if(!parent||!parent.stroke)continue;nextCaptures.push({layer:capture2.layer,node:parent})}if(nextCaptures.length===0)return this.setPendingSequence(null),!0;return this.setPendingSequence({captures:nextCaptures}),!0}getActiveKeys(options){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion,includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0;if(includeBindings){if(includeMetadata){if(projections.activeKeysBindingsAndMetadataCacheVersion===derivedStateVersion)return projections.activeKeysBindingsAndMetadataCache}else if(projections.activeKeysBindingsCacheVersion===derivedStateVersion)return projections.activeKeysBindingsCache}else if(includeMetadata){if(projections.activeKeysMetadataCacheVersion===derivedStateVersion)return projections.activeKeysMetadataCache}else if(projections.activeKeysPlainCacheVersion===derivedStateVersion)return projections.activeKeysPlainCache;let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),pending=this.ensureValidPendingSequence(),activeLayers=pending?[]:this.getActiveLayers(focused),canUseCache=pending?pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)):this.activeLayersCanCacheActiveKeys(activeLayers),activeKeys=pending?this.collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):this.collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(!canUseCache)return activeKeys;if(includeBindings)if(includeMetadata)projections.activeKeysBindingsAndMetadataCacheVersion=derivedStateVersion,projections.activeKeysBindingsAndMetadataCache=activeKeys;else projections.activeKeysBindingsCacheVersion=derivedStateVersion,projections.activeKeysBindingsCache=activeKeys;else if(includeMetadata)projections.activeKeysMetadataCacheVersion=derivedStateVersion,projections.activeKeysMetadataCache=activeKeys;else projections.activeKeysPlainCacheVersion=derivedStateVersion,projections.activeKeysPlainCache=activeKeys;return activeKeys}getActiveKeysForCaptures(captures,options){let includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0,focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused);return this.collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)}nodeHasReachableBindings(node,focused){return this.hasMatchingBindings(node.reachableBindings,focused,this.catalog.getActiveCommandView(focused))}getActiveLayers(focused){return getActiveLayersForFocused(this.state.layers,this.host,focused)}refreshActiveLayers(focused=this.getFocusedTargetIfAvailable()){getActiveLayersForFocused(this.state.layers,this.host,focused)}invalidateActiveLayers(){invalidateCachedActiveLayers(this.state.layers)}isLayerActiveForFocused(layer,focused){return isLayerActiveForFocused(this.host,layer,focused)}layerCanCacheActiveKeys(layer){return!layer.hasUnkeyedMatchers&&!layer.hasUnkeyedCommands&&!layer.hasUnkeyedBindings}activeLayersCanCacheActiveKeys(activeLayers){for(let layer of activeLayers)if(!this.layerCanCacheActiveKeys(layer))return!1;return!0}collectNodesFromNode(node){let nodes=[],current=node;while(current&&current.stroke)nodes.push(current),current=current.parent;return nodes.reverse(),nodes}collectSequencePartsFromPending(pending){let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),paths=pending.captures.map((capture2)=>this.collectNodesFromNode(capture2.node)),firstPath=paths[0];if(!firstPath||firstPath.length===0)return[];let parts=[];for(let index=0;index<firstPath.length;index+=1){let firstNode=firstPath[index];if(!firstNode?.stroke||firstNode.match===null)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let path6 of paths){let node=path6[index];if(!node)continue;let presentation=this.getNodePresentation(node,focused,activeView);if(display===void 0){display=presentation.display,tokenName=presentation.tokenName;continue}if(!hasDisplayConflict&&display!==presentation.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==presentation.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(firstNode.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart(firstNode.stroke,{display,match:firstNode.match,tokenName}))}return parts}collectMatchingBindings(bindings,focused,activeView){let matches=[];for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches}hasMatchingBindings(bindings,focused,activeView){for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))return!0;return!1}getNodePresentation(node,focused,activeView,reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView)){if(!node.stroke)return{display:""};let partIndex=node.depth-1,display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of reachableBindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(node.stroke);if(hasTokenConflict)tokenName=void 0;return{display,tokenName}}toActiveBinding(binding,focused,activeView){return{sequence:binding.sequence,command:binding.command,commandAttrs:this.catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}}collectActiveBindings(bindings,focused,activeView){return bindings.map((binding)=>this.toActiveBinding(binding,focused,activeView))}collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set,hasLayerConditions=this.state.layers.layersWithConditions>0;for(let layer of activeLayers){if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let[bindingKey,child]of layer.root.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set;for(let capture2 of captures)for(let[bindingKey,child]of capture2.node.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}selectActiveKey(node,includeBindings,focused,activeView){return node.children.size>0?this.selectPrefixActiveKey(node,includeBindings,focused,activeView):this.selectExactActiveKey(node,includeBindings,focused,activeView)}selectPrefixActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let prefixBindings=this.selectActiveBindings(node.bindings,focused,activeView);return{...this.getNodePresentation(node,focused,activeView,reachableBindings),continues:!0,firstBinding:prefixBindings?.bindings[0],commandBinding:prefixBindings?.commandBinding,bindings:includeBindings&&prefixBindings&&prefixBindings.bindings.length>0?[...prefixBindings.bindings]:void 0,stop:!0}}selectExactActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let selected=this.selectActiveBindings(node.bindings,focused,activeView);if(!selected)return;let display,tokenName;if(selected.bindings.length===1){let part=selected.bindings[0]?.sequence[node.depth-1];display=part?.display??stringifyKeyStroke(node.stroke),tokenName=part?.tokenName}else{let presentation=this.getNodePresentation(node,focused,activeView,selected.bindings);display=presentation.display,tokenName=presentation.tokenName}return{display,tokenName,continues:!1,firstBinding:selected.bindings[0],commandBinding:selected.commandBinding,bindings:includeBindings?[...selected.bindings]:void 0,stop:selected.stop}}selectActiveBindings(bindings,focused,activeView){let selected=[],commandBinding;for(let binding of bindings){if(!this.conditions.matchesConditions(binding)||!this.catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}}createActiveKeyState(stroke,selection,includeBindings){return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}}updateActiveKeyState(state,selection,includeBindings){if(!state.firstBinding&&selection.firstBinding)state.firstBinding=selection.firstBinding;if(!state.commandBinding&&selection.commandBinding)state.commandBinding=selection.commandBinding;if(selection.continues)state.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state.bindings){state.bindings=[...selection.bindings];return}state.bindings.push(...selection.bindings)}materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView){if(!state.commandBinding&&!state.continues)return;let activeKey={stroke:cloneKeyStroke(state.stroke),display:state.display,continues:state.continues};if(state.tokenName)activeKey.tokenName=state.tokenName;if(state.commandBinding)activeKey.command=state.commandBinding.command;if(includeBindings&&state.bindings&&state.bindings.length>0)activeKey.bindings=state.bindings.length===1?[this.toActiveBinding(state.bindings[0],focused,activeView)]:this.collectActiveBindings(state.bindings,focused,activeView);if(includeMetadata){if(state.firstBinding?.attrs)activeKey.bindingAttrs=state.firstBinding.attrs;let commandAttrs=state.commandBinding?this.catalog.getBindingCommandAttrs(state.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey}invalidateCaches(){this.state.projection.pendingSequenceCacheVersion=-1,this.state.projection.activeKeysPlainCacheVersion=-1,this.state.projection.activeKeysBindingsCacheVersion=-1,this.state.projection.activeKeysMetadataCacheVersion=-1,this.state.projection.activeKeysBindingsAndMetadataCacheVersion=-1}notifyPendingSequenceChange(){if(!this.hooks.has("pendingSequence"))return;this.hooks.emit("pendingSequence",this.state.projection.pendingSequence?this.collectSequencePartsFromPending(this.state.projection.pendingSequence):[])}}function mergeRequirement(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function isPlainObject2(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject2(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandChainCacheState(){return{resolvedWithoutRecordChains:new Map,resolvedWithRecordChains:new Map,fallbackWithoutRecord:new Map,fallbackWithRecord:new Map,fallbackWithoutRecordErrors:new Set,fallbackWithRecordErrors:new Set}}function normalizeBindingCommand(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}class CommandCatalogService{state;host;notify;conditions;options;constructor(state,host,notify,conditions,options){this.state=state,this.host=host,this.notify=notify,this.conditions=conditions,this.options=options}normalizeCommands(commands){return normalizeRegisteredCommands({commands,commandFields:this.state.environment.commandFields,conditions:this.conditions,onError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}prependCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.prepend(resolver),resolver)}appendCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.append(resolver),resolver)}clearCommandResolvers(){if(!this.state.commands.commandResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.commands.commandResolvers.clear(),this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}getCommands(query2){return this.getFilteredCommandEntries(query2).map((entry2)=>getRegisteredCommandRecord(entry2.command))}getCommandEntries(query2){let context=this.getCommandQueryContext(query2),filteredEntries=this.getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getRegisteredCommandRecord(entry2.command),bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)this.collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))}getResolvedCommandChain(command,focused,includeRecord){let view=this.getActiveCommandView(focused),entries=this.getResolvedCommandChainFromView(view,command,focused,includeRecord,"active",view.chainsByName.get(command)),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{entries,hadError}}getRegisteredResolvedEntries(command,includeRecord){let view=this.getRegisteredCommandView(),cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let chain=view.chainsByName.get(command);if(!chain||chain.length===0){cache.set(command,[]);return}let resolved=[];for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand(entry2.command,{includeRecord})});return cache.set(command,resolved),resolved}getRegisteredResolverFallback(command,includeRecord){let view=this.getRegisteredCommandView(),fallback=this.getFallbackResolvedCommand(view,command,null,includeRecord,"registered"),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{resolved:fallback?.resolved,hadError}}getCommandAttrs(command,focused){return this.getTopResolvedCommand(command,focused,!1)?.resolved.attrs}getTopCommandRecord(command,focused){return this.getTopResolvedCommand(command,focused,!0)?.resolved.record}getTopRegisteredCommandRecord(command){let top=this.getTopRegisteredCommand(command);return top?getRegisteredCommandRecord(top.command):void 0}getDispatchUnavailableCommandState(command,focused,includeRecord){let chain=this.getRegisteredCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused(this.host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!this.conditions.layerMatchesRuntimeState(entry2.layer)||!this.conditions.matchesConditions(entry2.command))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeRecord?getRegisteredCommandRecord(unavailableEntry.command):void 0}}getActiveCommandView(focused){let currentFocused=getFocusedTargetIfAvailable(this.host),derivedStateVersion=this.state.notify.derivedStateVersion;if(focused===currentFocused&&this.state.commands.activeCommandViewVersion===derivedStateVersion&&this.state.commands.activeCommandView?.cacheable)return this.state.commands.activeCommandView;let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map,cacheable=!0;if(this.state.layers.layersWithCommands>0)for(let layer of getActiveLayersForFocused(this.state.layers,this.host,focused)){if(layer.commands.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;if(layer.hasUnkeyedMatchers)cacheable=!1;for(let command of layer.commands){if(command.hasUnkeyedMatchers)cacheable=!1;if(!this.conditions.matchesConditions(command))continue;let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2]);if(!reachableByName.has(command.name))reachableByName.set(command.name,entry2),reachable.push(entry2)}}let view={cacheable,entries,reachable,reachableByName,chainsByName,...createCommandChainCacheState()};if(focused===currentFocused&&view.cacheable)this.state.commands.activeCommandViewVersion=derivedStateVersion,this.state.commands.activeCommandView=view;return view}getRegisteredCommandView(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandViewVersion===cacheVersion&&this.state.commands.registeredCommandView)return this.state.commands.registeredCommandView;let entries=[],chainsByName=new Map;for(let layer of this.state.layers.sortedLayers){if(layer.commands.length===0)continue;for(let command of layer.commands){let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2])}}let view={entries,chainsByName,...createCommandChainCacheState()};return this.state.commands.registeredCommandViewVersion=cacheVersion,this.state.commands.registeredCommandView=view,view}isBindingVisible(binding,focused,activeView){if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView.reachableByName.has(binding.command))return!0;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")!==void 0}getBindingCommandAttrs(binding,focused,activeView){if(typeof binding.command!=="string")return;let active=activeView.reachableByName.get(binding.command);if(active)return active.command.attrs;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")?.resolved.attrs}getCommandResolutionStatus(command,layerCommands){if(layerCommands?.has(command)||this.state.commands.registeredNames.has(command))return"resolved";let lookup=this.resolveCommandWithResolvers(command,getFocusedTargetIfAvailable(this.host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"}mutateCommandResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let off=register2();return this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange(),()=>{this.notify.runWithStateChangeBatch(()=>{if(off(),this.state.commands.commandResolvers.values().includes(resolver))return;this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}})}getTopResolvedCommand(command,focused,includeRecord){let activeView=this.getActiveCommandView(focused),active=activeView.reachableByName.get(command);if(active)return{target:active.layer.target,resolved:resolveRegisteredCommand(active.command,{includeRecord})};return this.getFallbackResolvedCommand(activeView,command,focused,includeRecord,"active")}getTopRegisteredCommand(command){return this.getRegisteredCommandView().chainsByName.get(command)?.[0]}getFallbackResolvedCommand(view,command,focused,includeRecord,mode){let cache=includeRecord?view.fallbackWithRecord:view.fallbackWithoutRecord,errorCache=includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors;if(cache.has(command)){let cached=cache.get(command);return cached?{resolved:cached}:void 0}let lookup=this.resolveCommandWithResolvers(command,focused,{includeRecord,mode});if(cache.set(command,lookup.resolved??null),lookup.hadError)errorCache.add(command);if(!lookup.resolved)return;return{resolved:lookup.resolved}}getResolvedCommandChainFromView(view,command,focused,includeRecord,mode,activeChain){let cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let resolved=[],chain=activeChain;if(chain)for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand(entry2.command,{includeRecord})});let fallback=this.getFallbackResolvedCommand(view,command,focused,includeRecord,mode);if(fallback)resolved.push(fallback);return cache.set(command,resolved),resolved.length>0?resolved:void 0}getRegisteredLayerCommandEntries(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandEntriesCacheVersion===cacheVersion)return this.state.commands.registeredCommandEntriesCache;let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);let entries=[];for(let layer of layers)for(let command of layer.commands)entries.push({layer,command});return this.state.commands.registeredCommandEntriesCacheVersion=cacheVersion,this.state.commands.registeredCommandEntriesCache=entries,entries}getCommandQueryContext(query2){let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable(this.host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:this.getActiveCommandView(focused)}}getFilteredCommandEntries(query2,context=this.getCommandQueryContext(query2)){let entries;if(context.visibility==="registered")entries=this.getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries({entries,query:query2,getCommandRecord:(command)=>getRegisteredCommandRecord(command),onFilterError:(error2)=>{this.notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})}collectCommandEntryBindings(grouped,indexesByName,context){if(context.visibility==="registered"){let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);for(let layer of layers)for(let binding of layer.compiledBindings)this.collectBindingForCommandEntries(grouped,indexesByName,binding);return}let activeView=context.activeView;if(!activeView)return;for(let layer of getActiveLayersForFocused(this.state.layers,this.host,context.focused)){if(layer.compiledBindings.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;for(let binding of layer.compiledBindings){if(!this.conditions.matchesConditions(binding)||!this.isBindingVisible(binding,context.focused,activeView))continue;this.collectBindingForCommandEntries(grouped,indexesByName,binding)}}}collectBindingForCommandEntries(grouped,indexesByName,binding){if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push({sequence:binding.sequence,command:binding.command,commandAttrs:item.command.attrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough})}}resolveCommandWithResolvers(command,focused,options){let includeRecord=options?.includeRecord===!0,context=this.createCommandResolverContext(includeRecord,focused,options?.mode??"active");return resolveCommandWithResolvers(command,this.state.commands.commandResolvers.values(),context,(error2)=>{this.notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)})}createCommandResolverContext(includeRecord,focused,mode){return{getCommandAttrs:(name)=>{if(mode==="registered")return this.getTopRegisteredCommand(name)?.command.attrs;return this.getCommandAttrs(name,focused)},getCommandRecord:(name)=>{if(!includeRecord)return;if(mode==="registered")return this.getTopRegisteredCommandRecord(name);return this.getTopCommandRecord(name,focused)}}}}function getRegisteredCommandRecord(command){if(command.record)return command.record;let fields=EMPTY_COMMAND_FIELDS;if(command.fields!==EMPTY_COMMAND_FIELDS&&Object.keys(command.fields).length>0)fields=snapshotDataValue(command.fields,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS);let record=command.attrs?Object.freeze({name:command.name,fields,attrs:snapshotDataValue(command.attrs,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS)}):Object.freeze({name:command.name,fields});return command.record=record,record}function resolveRegisteredCommand(command,options){if(options?.includeRecord===!0){let existing2=command.resolvedWithRecord;if(existing2)return existing2;let resolved2={run:createRegisteredCommandRunner(command)};if(command.attrs)resolved2.attrs=command.attrs;return resolved2.record=getRegisteredCommandRecord(command),command.resolvedWithRecord=resolved2,resolved2}let existing=command.resolved;if(existing)return existing;let resolved={run:createRegisteredCommandRunner(command)};if(command.attrs)resolved.attrs=command.attrs;return command.resolved=resolved,resolved}function normalizeRegisteredCommands(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands){let normalizedCommand;try{let mergedAttrs={},mergedFields={},mergedRequires={},matchers=[],conditionKeys=new Set,hasUnkeyedMatchers=!1,normalizedName=normalizeCommandName(command.name);if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}for(let[fieldName,value]of Object.entries(command)){if(RESERVED_COMMAND_FIELDS.has(fieldName)||value===void 0)continue;mergedFields[fieldName]=snapshotDataValue(value,SNAPSHOT_COMMAND_METADATA_OPTIONS);let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createCommandFieldContext(mergedAttrs,mergedRequires,conditionKeys,matchers,options.conditions,fieldName,{onUnkeyedMatcher(){hasUnkeyedMatchers=!0}}))}let attrs=Object.keys(mergedAttrs).length===0?void 0:Object.freeze(mergedAttrs),fields=Object.keys(mergedFields).length===0?EMPTY_COMMAND_FIELDS:Object.freeze(mergedFields);if(normalizedCommand={name:normalizedName,fields,run:command.run,requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,matchCacheDirty:!0},attrs)normalizedCommand.attrs=attrs}catch(error2){options.onError("register-command-failed",error2,getErrorMessage(error2,`Failed to register keymap command "${String(command.name)}"`));continue}seen.add(normalizedCommand.name),normalizedCommands.push(normalizedCommand)}return normalizedCommands}function createCommandFieldContext(mergedAttrs,mergedRequires,conditionKeys,matchers,conditions,fieldName,options){return{require(name,requiredValue){mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},attr(name,attributeValue){mergeAttribute(mergedAttrs,name,snapshotDataValue(attributeValue,SNAPSHOT_COMMAND_METADATA_OPTIONS),`field ${fieldName}`)},activeWhen(matcher){let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)options.onUnkeyedMatcher();matchers.push(runtimeMatcher)}}}function createRegisteredCommandRunner(command){if(command.runner)return command.runner;let runner=(ctx)=>{return command.run({...ctx,command:getRegisteredCommandRecord(command)})};return command.runner=runner,runner}function resolveCommandWithResolvers(command,resolvers,context,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolved;try{resolved=resolver(command,context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolved)return{hadError,resolved}}return{hadError}}function queryLayerCommandEntries(options){let namespace=options.query?.namespace,normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate;if(typeof filter==="function")filterPredicate=filter;else if(filter)filterEntries2=Object.entries(filter);let results=[];for(let entry2 of options.entries){let command=entry2.command;if(!commandMatchesNamespace(command,namespace))continue;if(!commandMatchesSearch(command,normalizedSearch,searchKeys))continue;if(!commandMatchesFilters(command,filterEntries2,options))continue;let record=options.getCommandRecord(command);if(filterPredicate){let matches=!1;try{matches=filterPredicate(record)}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}results.push(entry2)}return results}function commandMatchesSearch(command,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch(command,key,search))return!0;return!1}function commandMatchesNamespace(command,namespace){if(namespace===void 0)return!0;if(!Object.prototype.hasOwnProperty.call(command.fields,"namespace"))return!1;return commandValueMatchesFilter(command.fields.namespace,namespace)}function commandMatchesFilters(command,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery(command,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch(command,key,search){if(key==="name"&&commandValueMatchesSearch(command.name,search))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesSearch(command.fields[key],search))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesSearch(command.attrs[key],search);return!1}function commandKeyMatchesQuery(command,key,matcher,options){if(typeof matcher==="function"){let record,getRecord=()=>{if(!record)record=options.getCommandRecord(command);return record},foundValue=!1;if(key==="name"){foundValue=!0;try{if(matcher(command.name,getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(Object.prototype.hasOwnProperty.call(command.fields,key)){foundValue=!0;try{if(matcher(command.fields[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key)){foundValue=!0;try{if(matcher(command.attrs[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(!foundValue)try{return matcher(void 0,getRecord())}catch(error2){return options.onFilterError(error2),!1}return!1}return commandKeyMatchesExact(command,key,matcher)}function commandKeyMatchesExact(command,key,matcher){if(key==="name"&&commandValueMatchesFilter(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesFilter(command.fields[key],matcher))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesFilter(command.attrs[key],matcher);return!1}function commandValueMatchesFilter(value,matcher){if(Array.isArray(matcher)){for(let expected of matcher)if(commandValueMatchesExact(value,expected))return!0;return!1}return commandValueMatchesExact(value,matcher)}function commandValueMatchesExact(value,expected){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesExact(entry2,expected))return!0;return!1}return Object.is(value,expected)}function commandValueMatchesSearch(value,search){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesSearch(entry2,search))return!0;return!1}if(typeof value==="string")return value.toLowerCase().includes(search);if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase().includes(search);return!1}class CommandExecutorService{notify;runtime;activation;catalog;options;constructor(notify,runtime,activation,catalog,options){this.notify=notify,this.runtime=runtime,this.activation=activation,this.catalog=catalog,this.options=options}runCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chain=this.catalog.getRegisteredResolvedEntries(normalized,includeRecord),rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}let fallback=this.catalog.getRegisteredResolverFallback(normalized,includeRecord);if(fallback.resolved){let execution=this.executeResolvedCommand(normalized,fallback.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(fallback.hadError)return{ok:!1,reason:"error"};return rejectedResult??{ok:!1,reason:"not-found"}}dispatchCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chainLookup=this.catalog.getResolvedCommandChain(normalized,focused,includeRecord),chain=chainLookup.entries,rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(chainLookup.hadError)return{ok:!1,reason:"error"};let unavailable=this.catalog.getDispatchUnavailableCommandState(normalized,focused,includeRecord);if(unavailable)return unavailable.command?{ok:!1,reason:unavailable.reason,command:unavailable.command}:{ok:!1,reason:unavailable.reason};return rejectedResult??{ok:!1,reason:"not-found"}}runBinding(bindingLayer,binding,event,focused){let data=this.runtime.getReadonlyData();if(binding.run){if(this.executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",{run:binding.run},{keymap:this.options.keymap,event,focused,target:bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=this.catalog.getResolvedCommandChain(binding.command,focused,!1).entries;if(chain?.length===1){let[entry2]=chain;if(entry2){if(this.executeResolvedCommand(binding.command,entry2.resolved,{keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data};if(this.executeResolvedCommand(binding.command,entry2.resolved,context).status==="rejected")continue;return applyBindingEventEffects(binding,event),!0}return!1}executeResolvedCommand(commandName,resolved,context){let command=resolved.record,result2;try{result2=resolved.run(context)}catch(error2){return this.notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:{ok:!1,reason:"error",command}}}if(isPromiseLike(result2))return result2.catch((error2)=>{this.notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:{ok:!0,command}};if(result2===!1){if(resolved.rejectedResult)return{status:"rejected",result:resolved.rejectedResult};return{status:"rejected",result:{ok:!1,reason:"rejected",command}}}return{status:"handled",result:{ok:!0,command}}}}function applyBindingEventEffects(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function normalizeBindingInputs(bindings){if(Array.isArray(bindings))return bindings;let normalized=[];for(let[key,cmd]of Object.entries(bindings)){if(typeof cmd!=="string"&&typeof cmd!=="function")throw Error(`Invalid keymap binding for "${key}": shorthand bindings must map to string or function commands`);normalized.push({key,cmd})}return normalized}function snapshotBindingInputs(bindings){return normalizeBindingInputs(bindings).map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBindingInput(binding){return{...binding,sequence:cloneKeySequence(binding.sequence)}}function createSequenceNode(parent,stroke,match){return{parent,depth:parent?parent.depth+1:0,stroke,match,children:new Map,bindings:[],reachableBindings:[]}}function snapshotAttributes(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue(attrs,{freeze:!0})}class CompilerService{state;notify;conditions;options;constructor(state,notify,conditions,options){this.state=state,this.notify=notify,this.conditions=conditions,this.options=options}parseTokenKey(key){return parseSingleKeyPartWithParsers(key,this.state.environment.bindingParsers.values(),{tokens:this.state.environment.tokens,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})}compileBindings(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields){let root=createSequenceNode(null,null,null),compiledBindings=[],hasTokenBindings=!1,bindingExpanders=this.state.environment.bindingExpanders.values(),bindingParsers=this.state.environment.bindingParsers.values(),bindingFieldCompilers=this.state.environment.bindingFields,allowExactPrefixAmbiguity=this.state.dispatch.disambiguationResolvers.has(),warnUnknownField=this.options.warnUnknownField,warnUnknownToken=this.options.warnUnknownToken,conditions=this.conditions;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingInputWithExpanders(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){this.notify.emitError("binding-expand-error",error2,getErrorMessage(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let parsed;try{parsed=typeof expandedBindingKey==="string"?parseBindingSequenceWithParsers(expandedBindingKey,bindingParsers,{tokens:tokens2,layer:compileFields,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)}):{parts:[this.parseObjectKeyPart(expandedBindingKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1}}catch(error2){this.notify.emitError("binding-parse-error",error2,getErrorMessage(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedBindingKey==="string"?expandedBindingKey:String(expandedBindingKey.name));for(let compiledInput of this.applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=this.normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires,mergedAttrs,matchers,conditionKeys,hasUnkeyedMatchers=!1;for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,{require(name,requiredValue){if(!mergedRequires)mergedRequires={};if(mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),!conditionKeys)conditionKeys=new Set;conditionKeys.add(name)},attr(name,attributeValue){if(!mergedAttrs)mergedAttrs={};mergeAttribute(mergedAttrs,name,attributeValue,`field ${fieldName}`)},activeWhen:(matcher)=>{let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;if(!matchers)matchers=[];matchers.push(runtimeMatcher)}})}let attrs=mergedAttrs?snapshotAttributes(mergedAttrs):void 0,command=normalizeBindingCommand(compiledInput.cmd),compiledBinding={sequence:compiledSequence,command,event,sourceBinding:snapshotParsedBindingInput(compiledInput),sourceTarget,sourceLayerOrder,sourceBindingIndex:bindingIndex,requires:mergedRequires?Object.entries(mergedRequires):EMPTY_REQUIRES,matchers:matchers??EMPTY_MATCHERS,conditionKeys:conditionKeys?[...conditionKeys]:EMPTY_CONDITION_KEYS,hasUnkeyedMatchers,matchCacheDirty:!0,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");if(event==="press")this.insertBinding(root,compiledBinding,allowExactPrefixAmbiguity);compiledBindings.push(compiledBinding)}catch(error2){this.notify.emitError("binding-compile-error",error2,getErrorMessage(error2,"Failed to compile keymap binding"))}}}return{root,bindings:compiledBindings,hasTokenBindings}}parseObjectKeyPart(key,options){return createKeySequencePart(key,options)}normalizeBindingEvent(event){if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)}applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields){let bindingTransformers=this.state.environment.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers(key,bindingParsers,{tokens:tokens2,layer,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBindingInput(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){this.notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]}insertBinding(root,binding,allowExactPrefixAmbiguity){let node=root,touchedNodes=[],createdNodes=[];try{for(let part of binding.sequence){if(!allowExactPrefixAmbiguity&&node.bindings.some((candidate)=>candidate.command!==void 0))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");let bindingKey=part.match,child=node.children.get(bindingKey);if(!child)child=createSequenceNode(node,cloneKeySequencePart(part).stroke,part.match),node.children.set(bindingKey,child),createdNodes.push({parent:node,key:bindingKey});child.reachableBindings.push(binding),touchedNodes.push(child),node=child}if(!allowExactPrefixAmbiguity&&binding.command!==void 0&&node.children.size>0)throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");node.bindings=[...node.bindings,binding]}catch(error2){for(let index=touchedNodes.length-1;index>=0;index-=1){let touchedNode=touchedNodes[index];if(!touchedNode)continue;if(touchedNode.reachableBindings.at(-1)===binding){touchedNode.reachableBindings.pop();continue}touchedNode.reachableBindings=touchedNode.reachableBindings.filter((candidate)=>candidate!==binding)}for(let index=createdNodes.length-1;index>=0;index-=1){let createdNode=createdNodes[index];if(!createdNode)continue;let child=createdNode.parent.children.get(createdNode.key);if(!child)continue;if(child.children.size>0||child.reachableBindings.length>0||child.bindings.length>0)continue;createdNode.parent.children.delete(createdNode.key)}throw error2}}}function expandBindingInputWithExpanders(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[key];let layer=options?.layer??EMPTY_COMPILE_FIELDS,candidates=[key];for(let expander of expanders){let nextCandidates=[];for(let input of candidates){let result2=expander({input,layer});if(!result2){nextCandidates.push(input);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${input}"`);for(let expandedInput of result2){if(typeof expandedInput!=="string")throw Error(`Keymap binding expander must return string key sequences for "${input}"`);nextCandidates.push(expandedInput)}}candidates=nextCandidates}return candidates}function parseBindingSequenceWithParsers(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,normalizeTokenName:normalizeBindingTokenName,createMatch:createTextKeyMatch,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}class ConditionService{state;notify;constructor(state,notify){this.state=state,this.notify=notify}buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher,cacheable:!1};if(isReactiveMatcher(matcher))return{source,match:()=>matcher.get(),cacheable:!0,subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)}hasNoConditions(target){return target.requires.length===0&&target.matchers.length===0}indexRuntimeMatchable(target){if(target.conditionKeys.length>0)for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(dependents){dependents.add(target);continue}this.state.conditions.runtimeKeyDependents.set(key,new Set([target]))}if(!target.hasUnkeyedMatchers)target.matchCacheDirty=!0}unindexRuntimeMatchable(target){if(target.conditionKeys.length===0)return;for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(!dependents)continue;if(dependents.delete(target),dependents.size===0)this.state.conditions.runtimeKeyDependents.delete(key)}}invalidateRuntimeConditionKey(name){let dependents=this.state.conditions.runtimeKeyDependents.get(name);if(!dependents)return;for(let target of dependents)target.matchCacheDirty=!0}matchesConditions(target){if(this.hasNoConditions(target))return!0;if(this.hasFreshConditionCache(target))return target.matchCache===!0;let matched=this.matchRequirements(target.requires)&&this.matchesRuntimeMatchers(target);return this.updateConditionCache(target,matched),matched}layerMatchesRuntimeState(layer){if(this.state.layers.layersWithConditions===0||this.hasNoConditions(layer))return!0;return this.matchesConditions(layer)}matchRequirements(requires){if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(this.state.runtime.data[name],value))return!1;return!0}hasFreshConditionCache(target){if(target.hasUnkeyedMatchers)return!1;return target.matchCacheDirty!==!0&&target.matchCache!==void 0}updateConditionCache(target,matched){if(target.hasUnkeyedMatchers)return;target.matchCacheDirty=!1,target.matchCache=matched}matchesRuntimeMatcher(matcher){try{return matcher.match()}catch(error2){return this.notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}}matchesRuntimeMatchers(target){if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?this.matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!this.matchesRuntimeMatcher(matcher))return!1;return!0}}function createSyncDecision(action,handler){return{[KEY_DISAMBIGUATION_DECISION]:!0,action,handler}}function createDeferredDecision(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION]:!0,action}}function isSyncDecision(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION]===!0}function isDeferredDecision(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION]===!0}class DispatchService{state;notify;runtime;activation;conditions;executor;compiler;catalog;layers;eventMatchResolverContext;pendingDisambiguation=null;nextPendingDisambiguationId=0;constructor(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers){this.state=state,this.notify=notify,this.runtime=runtime,this.activation=activation,this.conditions=conditions,this.executor=executor,this.compiler=compiler,this.catalog=catalog,this.layers=layers,this.eventMatchResolverContext={resolveKey:(key)=>{return this.compiler.parseTokenKey(key).match}}}intercept(name,fn,options){if(name==="key"){let keyOptions=options;return this.state.dispatch.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return this.state.dispatch.rawHooks.register(fn,{priority:rawOptions?.priority??0})}prependEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.prepend(resolver)}appendEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.append(resolver)}clearEventMatchResolvers(){this.state.dispatch.eventMatchResolvers.clear()}prependDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.prepend(resolver),resolver)}appendDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.append(resolver),resolver)}clearDisambiguationResolvers(){if(!this.state.dispatch.disambiguationResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.dispatch.disambiguationResolvers.clear(),this.layers.recompileBindings()})}handlePendingSequenceChange(_previous,_next){if(!this.pendingDisambiguation)return;this.cancelPendingDisambiguation()}handleRawSequence(sequence){let hooks=this.state.dispatch.rawHooks.entries();if(hooks.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks){try{hook.listener(context)}catch(error2){this.notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}handleKeyEvent(event,release){if(!release)this.cancelPendingDisambiguation();let hooks=this.state.dispatch.keyHooks.entries(),context={event,setData:(name,value)=>{this.runtime.setData(name,value)},getData:(name)=>{return this.runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){this.notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped)return}if(release){this.dispatchReleaseLayers(event);return}this.dispatchLayers(event)}mutateDisambiguationResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let hadResolvers=this.state.dispatch.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings();return()=>{this.notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=this.state.dispatch.disambiguationResolvers.has();if(off(),this.state.dispatch.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings()})}})}dispatchReleaseLayers(event){let focused=this.activation.getFocusedTarget(),activeLayers=this.activation.getActiveLayers(focused),hasLayerConditions=this.state.layers.layersWithConditions>0,matchKeys=this.resolveEventMatchKeys(event);layerLoop:for(let layer of activeLayers){if(layer.compiledBindings.length===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=this.runReleaseBindings(layer,strokeKey,event,focused);if(!result2.handled)continue;if(result2.stop)return;continue layerLoop}}}dispatchLayers(event){let focused=this.activation.getFocusedTarget(),pending=this.activation.ensureValidPendingSequence(),matchKeys=this.resolveEventMatchKeys(event);if(pending){this.dispatchPendingSequence(pending,matchKeys,event,focused);return}let activeLayers=this.activation.getActiveLayers(focused);this.dispatchFromRoot(activeLayers,matchKeys,event,focused)}dispatchPendingSequence(pending,matchKeys,event,focused){let advancedCaptures=[];for(let capture2 of pending.captures){let nextNode=this.getReachableChild(capture2.node,matchKeys,focused);if(!nextNode)continue;advancedCaptures.push({layer:capture2.layer,node:nextNode})}if(advancedCaptures.length===0){this.activation.setPendingSequence(null);return}this.dispatchPendingCapturesFromIndex(advancedCaptures,0,!1,event,focused)}dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2)continue;if(capture2.node.children.size>0){if(hasHandledExact)continue;let continuationCaptures=this.collectPendingCapturesFromAdvanced(advancedCaptures,index);if(this.tryResolvePendingAmbiguity(advancedCaptures,index,continuationCaptures,capture2,event,focused,hasHandledExact))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(!result2.handled)continue;if(hasHandledExact=!0,result2.stop){this.activation.setPendingSequence(null);return}}this.activation.setPendingSequence(null)}dispatchFromRoot(activeLayers,matchKeys,event,focused){this.dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode)continue;if(nextNode.children.size>0){let continuationCaptures=this.collectPendingCapturesFromRoot(activeLayers,index,matchKeys,focused);if(this.tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,layer,nextNode,event,focused))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(layer,nextNode.bindings,event,focused);if(!result2.handled)continue;if(result2.stop)return}}tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,layer,node,event,focused){let applyExact=()=>{if(this.activation.setPendingSequence(null),!this.runBindings(layer,node.bindings,event,focused).stop)this.dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:node.bindings,runExact:applyExact})}tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,capture2,event,focused,handledExact){let applyExact=()=>{this.activation.setPendingSequence(null);let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(result2.stop)return;this.dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:capture2.node.bindings,runExact:applyExact})}tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,runExact}=options;if(!this.state.dispatch.disambiguationResolvers.has()||continuationCaptures.length===0)return!1;let activeView=this.catalog.getActiveCommandView(focused),exactBindings=this.activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return!1;let continueSequence=()=>{this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation()},clear=()=>{this.activation.setPendingSequence(null),event.preventDefault(),event.stopPropagation()},sequence,getSequence=()=>{return sequence??=this.activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=this.resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return this.warnUnresolvedAmbiguity(getSequence()),continueSequence(),!0;return this.applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact(),!0;if(decision.action==="continue-sequence")return continueSequence(),!0;if(decision.action==="clear")return clear(),!0;return continueSequence(),this.scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),!0}resolveDisambiguation(options){let activation=this.activation,runtime=this.runtime,sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision("run-exact"),continueSequence:()=>createSyncDecision("continue-sequence"),clear:()=>createSyncDecision("clear"),defer:(run)=>createSyncDecision("defer",run)};for(let resolver of this.state.dispatch.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){this.notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike(result2)){this.notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision(result2)){this.notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){this.cancelPendingDisambiguation();let controller=new AbortController,pending={id:this.nextPendingDisambiguationId++,controller,captures,apply};this.pendingDisambiguation=pending,queueMicrotask(()=>{this.executeDeferredDisambiguation(pending,handler,focused,sequence)})}executeDeferredDisambiguation(pending,handler,focused,sequence){if(!this.isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence(sequence),focused,sleep:(ms)=>{return this.sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision("run-exact"),continueSequence:()=>createDeferredDecision("continue-sequence"),clear:()=>createDeferredDecision("clear")},result2;try{result2=handler(ctx)}catch(error2){if(this.isPendingDisambiguationCurrent(pending))this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending);return}if(isPromiseLike(result2)){result2.then((resolved)=>{this.applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!this.isPendingDisambiguationCurrent(pending))return;this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending)});return}this.applyDeferredDisambiguationResult(pending,result2)}applyDeferredDisambiguationResult(pending,result2){if(!this.isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision(result2)){this.notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),this.finishPendingDisambiguation(pending);return}this.finishPendingDisambiguation(pending),pending.apply(result2)}finishPendingDisambiguation(pending){if(!this.isPendingDisambiguationCurrent(pending))return;this.pendingDisambiguation=null}cancelPendingDisambiguation(){let pending=this.pendingDisambiguation;if(!pending)return;this.pendingDisambiguation=null,pending.controller.abort()}isPendingDisambiguationCurrent(pending){return this.pendingDisambiguation===pending}sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve21)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve21(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve21(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence(sequence,{preferDisplay:!0});this.notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,focused){let captures=[],hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer||layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode||nextNode.children.size===0)continue;captures.push({layer,node:nextNode})}return captures}collectPendingCapturesFromAdvanced(advancedCaptures,startIndex){return advancedCaptures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&candidate.node.children.size>0})}resolveEventMatchKeys(event){let resolvers=this.state.dispatch.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys(resolvers[0],event,this.eventMatchResolverContext,this.notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,this.eventMatchResolverContext)}catch(error2){this.notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){this.notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}runReleaseBindings(layer,strokeKey,event,focused){let handled=!1;for(let binding of layer.compiledBindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}getReachableChild(node,matchKeys,focused){for(let strokeKey of matchKeys){let child=node.children.get(strokeKey);if(!child||!this.activation.nodeHasReachableBindings(child,focused))continue;return child}return}runBindings(layer,bindings,event,focused){let handled=!1;for(let binding of bindings){if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}}function resolveSingleEventMatchKeys(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function registerFieldCompilers(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name))emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`)}for(let[name,compiler]of entries){if(reservedFields.has(name)||registeredFields.has(name))continue;registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}class EnvironmentService{state;notify;compiler;layers;constructor(state,notify,compiler,layers){this.state=state,this.notify=notify,this.compiler=compiler,this.layers=layers}prependBindingTransformer(transformer){return this.state.environment.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.state.environment.bindingTransformers.append(transformer)}clearBindingTransformers(){this.state.environment.bindingTransformers.clear()}prependBindingParser(parser){return this.state.environment.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.state.environment.bindingParsers.append(parser)}clearBindingParsers(){this.state.environment.bindingParsers.clear()}registerToken(token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName(token.name)}catch(error2){return this.notify.emitError("token-name-normalize-error",error2,getErrorMessage(error2,"Failed to register keymap token")),NOOP}if(this.state.environment.tokens.has(normalizedToken))return this.notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP;let parsedToken;try{parsedToken=this.compiler.parseTokenKey(token.key)}catch(error2){return this.notify.emitError("token-parse-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(this.state.environment.tokens);nextTokens.set(normalizedToken,registeredToken);try{this.layers.applyTokenState(nextTokens)}catch(error2){return this.notify.emitError("token-register-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}return()=>{if(this.state.environment.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(this.state.environment.tokens);nextTokens2.delete(normalizedToken);try{this.layers.applyTokenState(nextTokens2)}catch(error2){this.notify.emitError("token-unregister-error",error2,getErrorMessage(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}prependBindingExpander(expander){return this.state.environment.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.state.environment.bindingExpanders.append(expander)}clearBindingExpanders(){this.state.environment.bindingExpanders.clear()}registerLayerFields(fields){return registerFieldCompilers(fields,{kind:"layer",reservedFields:RESERVED_LAYER_FIELDS,registeredFields:this.state.environment.layerFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerBindingFields(fields){return registerFieldCompilers(fields,{kind:"binding",reservedFields:RESERVED_BINDING_FIELDS,registeredFields:this.state.environment.bindingFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerCommandFields(fields){return registerFieldCompilers(fields,{kind:"command",reservedFields:RESERVED_COMMAND_FIELDS,registeredFields:this.state.environment.commandFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}}function sortLayers(layers){return[...layers].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return right.order-left.order})}function createCommandLookup(commands){if(commands.length===0)return;let lookup=new Map;for(let command of commands)lookup.set(command.name,command);return lookup}function addRegisteredCommandNames(target,commands){for(let command of commands)target.set(command.name,(target.get(command.name)??0)+1)}function removeRegisteredCommandNames(target,commands){for(let command of commands){let count=target.get(command.name);if(!count||count<=1){target.delete(command.name);continue}target.set(command.name,count-1)}}function getSequenceNode(root,sequence){let node=root;for(let part of sequence)if(node=node.children.get(part.match),!node)return;return node}function buildLayerBindingAnalyses(root,compiledBindings){return compiledBindings.map((binding)=>{let node=binding.event==="press"?getSequenceNode(root,binding.sequence):void 0;return{sequence:cloneKeySequence(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceBinding:snapshotParsedBindingInput(binding.sourceBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,sourceBindingIndex:binding.sourceBindingIndex,hasCommandAtSequence:node?node.bindings.some((candidate)=>candidate.command!==void 0):!1,hasContinuations:node?node.children.size>0:!1}})}class LayerService{state;notify;conditions;activation;options;constructor(state,notify,conditions,activation,options){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation,this.options=options}registerLayer(layer){return this.notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&this.options.host.isTargetDestroyed(target))return this.notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP2;let bindingInputs,requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields,commands,commandLookup,targetMode;try{targetMode=this.normalizeTargetMode(layer),bindingInputs=snapshotBindingInputs(layer.bindings??[]),commands=!layer.commands||layer.commands.length===0?[]:this.options.commands.normalizeCommands(layer.commands),commandLookup=createCommandLookup(commands),{requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields}=this.compileLayerRuntimeState(layer)}catch(error2){return this.notify.emitError("register-layer-failed",error2,getErrorMessage(error2,"Failed to register keymap layer")),NOOP2}let order=this.state.core.order++,compiledBindings=this.options.compiler.compileBindings(bindingInputs,this.state.environment.tokens,target,order,compileFields);if(compiledBindings.bindings.length===0&&!compiledBindings.hasTokenBindings&&commands.length===0)return NOOP2;this.runLayerAnalyzers({target,order,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,root:compiledBindings.root,hasTokenBindings:compiledBindings.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,conditionKeys,hasUnkeyedMatchers,matchCacheDirty:!0,compileFields,commands,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,hasUnkeyedCommands:commands.some((command)=>command.hasUnkeyedMatchers),hasUnkeyedBindings:compiledBindings.bindings.some((binding)=>binding.hasUnkeyedMatchers),hasTokenBindings:compiledBindings.hasTokenBindings,root:compiledBindings.root};if(this.state.layers.layers.add(registeredLayer),registeredLayer.commands.length>0)this.state.layers.layersWithCommands+=1,this.state.commands.commandMetadataVersion+=1,addRegisteredCommandNames(this.state.commands.registeredNames,registeredLayer.commands);if(registeredLayer.requires.length>0||registeredLayer.matchers.length>0)this.state.layers.layersWithConditions+=1;this.connectRuntimeMatchable(registeredLayer);for(let command of registeredLayer.commands)this.connectRuntimeMatchable(command);for(let binding of registeredLayer.compiledBindings)this.connectRuntimeMatchable(binding);if(this.indexLayer(registeredLayer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),target){let onTargetDestroy=()=>{this.unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=this.options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)this.activation.ensureValidPendingSequence();return this.notify.queueStateChange(),()=>{this.unregisterLayer(registeredLayer)}})}applyTokenState(nextTokens){this.notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of this.state.layers.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,this.compileLayerBindings(layer,nextTokens))}this.state.environment.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;if(shouldClearPending)this.activation.setPendingSequence(null);if(nextCompilations.size>0)this.notify.queueStateChange()})}recompileBindings(){this.notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of this.state.layers.layers){if(layer.bindingInputs.length===0)continue;let compilation=this.compileLayerBindings(layer,this.state.environment.tokens);if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)this.activation.setPendingSequence(null);if(recompiledLayers>0)this.notify.queueStateChange()})}prependLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.prepend(analyzer)}appendLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.append(analyzer)}clearLayerAnalyzers(){this.state.layers.layerAnalyzers.clear()}cleanup(){for(let layer of this.state.layers.layers){this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}}normalizeTargetMode(layer){if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0}runLayerAnalyzers(options){let analyzers=this.state.layers.layerAnalyzers.values();if(analyzers.length===0)return;let bindings=buildLayerBindingAnalyses(options.root,options.compiledBindings),ctx={target:options.target,order:options.order,bindingInputs:options.bindingInputs,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution:(command)=>{return this.options.commands.getCommandResolutionStatus(command,options.commandLookup)},warn:(code,warning,message)=>{this.notify.emitWarning(code,warning,message)},warnOnce:(key,code,warning,message)=>{this.notify.warnOnce(key,code,warning,message)},error:(code,error2,message)=>{this.notify.emitError(code,error2,message)}};for(let analyzer of analyzers)try{analyzer(ctx)}catch(error2){this.notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}compileLayerRuntimeState(layer){let mergedRequires={},matchers=[],compileFields=Object.create(null),conditionKeys=new Set,hasUnkeyedMatchers=!1;for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS.has(fieldName))continue;if(value===void 0)continue;compileFields[fieldName]=snapshotDataValue(value);let compiler=this.state.environment.layerFields.get(fieldName);if(!compiler){this.options.warnUnknownField("layer",fieldName);continue}compiler(value,{require:(name,requiredValue)=>{mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},activeWhen:(matcher)=>{let runtimeMatcher=this.conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;matchers.push(runtimeMatcher)}})}return{requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,compileFields:Object.keys(compileFields).length>0?Object.freeze(compileFields):void 0}}compileLayerBindings(layer,tokens2){return this.options.compiler.compileBindings(layer.bindingInputs,tokens2,layer.target,layer.order,layer.compileFields)}applyCompiledBindings(layer,compilation){this.runLayerAnalyzers({target:layer.target,order:layer.order,commandLookup:layer.commandLookup,bindingInputs:layer.bindingInputs,compiledBindings:compilation.bindings,root:compilation.root,hasTokenBindings:compilation.hasTokenBindings});for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.root=compilation.root,layer.compiledBindings=compilation.bindings,layer.hasUnkeyedBindings=compilation.bindings.some((binding)=>binding.hasUnkeyedMatchers),layer.hasTokenBindings=compilation.hasTokenBindings;for(let binding of layer.compiledBindings)this.connectRuntimeMatchable(binding);return this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer)??!1}indexLayer(layer){this.state.layers.sortedLayers=sortLayers([...this.state.layers.sortedLayers,layer]),this.state.layers.activeLayersVersion+=1}removeLayerFromIndex(layer){this.state.layers.sortedLayers=this.state.layers.sortedLayers.filter((candidate)=>candidate!==layer),this.state.layers.activeLayersVersion+=1}unregisterLayer(layer){this.notify.runWithStateChangeBatch(()=>{if(!this.state.layers.layers.delete(layer))return;if(layer.requires.length>0||layer.matchers.length>0)this.state.layers.layersWithConditions-=1;if(layer.commands.length>0)this.state.layers.layersWithCommands-=1,this.state.commands.commandMetadataVersion+=1,removeRegisteredCommandNames(this.state.commands.registeredNames,layer.commands);this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);if(this.removeLayerFromIndex(layer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer))this.activation.setPendingSequence(null);else if(layer.commands.length>0&&!this.options.host.isDestroyed)this.activation.ensureValidPendingSequence();this.notify.queueStateChange()})}connectRuntimeMatchable(target){this.attachReactiveMatchers(target),this.conditions.indexRuntimeMatchable(target)}disconnectRuntimeMatchable(target){this.detachReactiveMatchers(target),this.conditions.unindexRuntimeMatchable(target)}attachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(target.matchCacheDirty=!0,!this.activation.hasPendingSequenceState()){this.notify.queueStateChange();return}this.notify.runWithStateChangeBatch(()=>{this.activation.revalidatePendingSequenceIfNeeded(),this.notify.queueStateChange()})})}catch(error2){this.notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}}detachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){this.notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}}}class Emitter2{onError;listeners=Object.create(null);constructor(onError){this.onError=onError}hook(name,listener){let current=this.listeners[name]??[];return this.listeners[name]=[...current,listener],()=>{let current2=this.listeners[name];if(!current2||current2.length===0)return;let next=current2.filter((candidate)=>candidate!==listener);if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}}has(name){return(this.listeners[name]?.length??0)>0}off(name,listener){let current=this.listeners[name];if(!current||current.length===0)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===current.length)return;if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}clear(){this.listeners=Object.create(null)}emit(name,...args){let listeners2=this.listeners[name];if(!listeners2||listeners2.length===0)return;for(let listener of listeners2)try{if(args.length===0)listener();else listener(args[0])}catch(error2){this.onError(name,error2)}}}class NotificationService{state;events;hooks;constructor(state,events,hooks){this.state=state,this.events=events,this.hooks=hooks}runWithStateChangeBatch(fn){this.state.notify.stateChangeDepth+=1;try{return fn()}finally{if(this.state.notify.stateChangeDepth-=1,this.state.notify.stateChangeDepth===0)this.flushStateChange()}}queueStateChange(){if(this.state.notify.derivedStateVersion+=1,!this.hooks.has("state"))return;if(this.state.notify.stateChangePending=!0,this.state.notify.stateChangeDepth===0&&!this.state.notify.flushingStateChange)this.flushStateChange()}emitWarning(code,warning,message){if(!this.events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}this.events.emit("warning",{code,message,warning})}emitError(code,error2,message){if(!this.events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}this.events.emit("error",{code,message,error:error2})}reportListenerError(name,error2){if(name==="state"){this.emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){this.emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}}warnOnce(key,code,warning,message){if(this.state.notify.usedWarningKeys.has(key))return;this.state.notify.usedWarningKeys.add(key),this.emitWarning(code,warning,message)}flushStateChange(){if(!this.state.notify.stateChangePending||this.state.notify.stateChangeDepth>0||this.state.notify.flushingStateChange)return;this.state.notify.flushingStateChange=!0;try{let iterations=0;while(this.state.notify.stateChangePending&&this.state.notify.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS){this.state.notify.stateChangePending=!1,this.emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS} iterations; pending state notifications were dropped`);break}iterations+=1,this.state.notify.stateChangePending=!1,this.hooks.emit("state")}}finally{this.state.notify.flushingStateChange=!1}}}class RuntimeService{state;notify;conditions;activation;constructor(state,notify,conditions,activation){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation}getData(name){return this.state.runtime.data[name]}setData(name,value){this.notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in this.state.runtime.data))return;delete this.state.runtime.data[name],this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange();return}if(Object.is(this.state.runtime.data[name],value))return;this.state.runtime.data[name]=value,this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange()})}getReadonlyData(){if(this.state.runtime.readonlyDataVersion===this.state.runtime.dataVersion)return this.state.runtime.readonlyData;return this.state.runtime.readonlyData=Object.freeze({...this.state.runtime.data}),this.state.runtime.readonlyDataVersion=this.state.runtime.dataVersion,this.state.runtime.readonlyData}}class CopyOnWriteRegistry{items=[];getItems(){return this.items}setItems(items){this.items=items}removeItem(value){let current=this.items;if(current.length===0)return!1;let next=current.filter((candidate)=>candidate!==value);if(next.length===current.length)return!1;return this.items=next,!0}has(){return this.items.length>0}clear(){this.items=[]}}function createKeymapState(){return{core:{order:0},environment:{tokens:new Map,layerFields:new Map,bindingExpanders:new OrderedRegistry,bindingParsers:new OrderedRegistry,bindingTransformers:new OrderedRegistry,bindingFields:new Map,commandFields:new Map},dispatch:{eventMatchResolvers:new OrderedRegistry,disambiguationResolvers:new OrderedRegistry,keyHooks:new PriorityRegistry,rawHooks:new PriorityRegistry},layers:{layers:new Set,sortedLayers:[],activeLayersVersion:0,activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],layersWithConditions:0,layersWithCommands:0,layerAnalyzers:new OrderedRegistry},commands:{commandMetadataVersion:0,registeredNames:new Map,commandResolvers:new OrderedRegistry,activeCommandViewVersion:-1,activeCommandView:void 0,registeredCommandViewVersion:-1,registeredCommandView:void 0,registeredCommandEntriesCacheVersion:-1,registeredCommandEntriesCache:[]},projection:{pendingSequence:null,pendingSequenceCacheVersion:-1,pendingSequenceCache:[],activeKeysPlainCacheVersion:-1,activeKeysPlainCache:[],activeKeysBindingsCacheVersion:-1,activeKeysBindingsCache:[],activeKeysMetadataCacheVersion:-1,activeKeysMetadataCache:[],activeKeysBindingsAndMetadataCacheVersion:-1,activeKeysBindingsAndMetadataCache:[]},conditions:{runtimeKeyDependents:new Map},runtime:{data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA},notify:{derivedStateVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}}function getKeyMatchKey(input){return resolveKeyMatch(input)}class Keymap{host;state=createKeymapState();cleanedUp=!1;resources=new Map;cleanupListeners=[];events=new Emitter2(()=>{});hooks;notify;activation;runtime;conditions;catalog;executor;compiler;dispatch;layers;environment;keypressListener;keyreleaseListener;rawListener;focusedTargetListener;constructor(host){if(this.host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.hooks=new Emitter2((name,error2)=>{this.notify.reportListenerError(name,error2)}),this.notify=new NotificationService(this.state,this.events,this.hooks),this.conditions=new ConditionService(this.state,this.notify),this.catalog=new CommandCatalogService(this.state,this.host,this.notify,this.conditions,{onCommandResolversChanged:()=>{this.activation.ensureValidPendingSequence()}}),this.activation=new ActivationService(this.state,this.host,this.hooks,this.notify,this.conditions,this.catalog,{onPendingSequenceChanged:(previous,next)=>{this.dispatch?.handlePendingSequenceChange(previous,next)}}),this.runtime=new RuntimeService(this.state,this.notify,this.conditions,this.activation),this.executor=new CommandExecutorService(this.notify,this.runtime,this.activation,this.catalog,{keymap:this,createCommandEvent:()=>this.host.createCommandEvent()}),this.compiler=new CompilerService(this.state,this.notify,this.conditions,{warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.warnUnknownToken(token,sequence)}}),this.layers=new LayerService(this.state,this.notify,this.conditions,this.activation,{compiler:this.compiler,commands:this.catalog,host:this.host,warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)}}),this.environment=new EnvironmentService(this.state,this.notify,this.compiler,this.layers),this.dispatch=new DispatchService(this.state,this.notify,this.runtime,this.activation,this.conditions,this.executor,this.compiler,this.catalog,this.layers),this.keypressListener=(event)=>{this.dispatch.handleKeyEvent(event,!1)},this.keyreleaseListener=(event)=>{this.dispatch.handleKeyEvent(event,!0)},this.rawListener=(sequence)=>{return this.dispatch.handleRawSequence(sequence)},this.focusedTargetListener=(focused)=>{this.handleFocusedTargetChange(focused)},this.cleanupListeners.push(this.host.onKeyPress(this.keypressListener)),this.cleanupListeners.push(this.host.onKeyRelease(this.keyreleaseListener)),this.host.onRawInput)this.cleanupListeners.push(this.host.onRawInput(this.rawListener));if(this.cleanupListeners.push(this.host.onFocusChange(this.focusedTargetListener)),this.host.onDestroy)this.cleanupListeners.push(this.host.onDestroy(()=>{this.cleanup()}))}cleanup(){if(this.cleanedUp)return;this.cleanedUp=!0,this.activation.setPendingSequence(null);for(let resource of this.resources.values())resource.dispose();this.resources.clear(),this.layers.cleanup();for(let cleanupListener of this.cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.runtime.setData(name,value)}getData(name){return this.runtime.getData(name)}hasPendingSequence(){return this.activation.ensureValidPendingSequence()!==void 0}getPendingSequence(){return this.activation.getPendingSequence()}createKeyMatcher(key){let match=this.compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey(input)===match}}clearPendingSequence(){this.activation.setPendingSequence(null)}popPendingSequence(){return this.activation.popPendingSequence()}getActiveKeys(options){return this.activation.getActiveKeys(options)}getCommands(query2){return this.catalog.getCommands(query2)}getCommandEntries(query2){return this.catalog.getCommandEntries(query2)}normalizeCommandName(name){return normalizeCommandName(name)}normalizeBindings(bindings){return normalizeBindingInputs(bindings)}acquireResource(key,setup){if(this.cleanedUp||this.host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.resources.get(key);if(existing)return existing.count+=1,()=>{this.releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.resources.set(key,resource),()=>{this.releaseResource(key,resource)}}runCommand(cmd,options){return this.executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.events.hook(name,fn);if(name==="error")return this.events.hook(name,fn);return this.hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.dispatch.intercept(name,fn,options);return this.dispatch.intercept(name,fn,options)}registerLayer(layer){return this.layers.registerLayer(layer)}registerLayerFields(fields){return this.environment.registerLayerFields(fields)}prependBindingTransformer(transformer){return this.environment.prependBindingTransformer(transformer)}appendBindingTransformer(transformer){return this.environment.appendBindingTransformer(transformer)}clearBindingTransformers(){this.environment.clearBindingTransformers()}prependBindingParser(parser){return this.environment.prependBindingParser(parser)}appendBindingParser(parser){return this.environment.appendBindingParser(parser)}clearBindingParsers(){this.environment.clearBindingParsers()}registerToken(token){return this.environment.registerToken(token)}prependBindingExpander(expander){return this.environment.prependBindingExpander(expander)}appendBindingExpander(expander){return this.environment.appendBindingExpander(expander)}clearBindingExpanders(){this.environment.clearBindingExpanders()}registerBindingFields(fields){return this.environment.registerBindingFields(fields)}registerCommandFields(fields){return this.environment.registerCommandFields(fields)}prependCommandResolver(resolver){return this.catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.layers.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.layers.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.layers.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.dispatch.clearDisambiguationResolvers()}handleFocusedTargetChange(_focused){this.notify.runWithStateChangeBatch(()=>{this.activation.setPendingSequence(null),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(_focused),this.notify.queueStateChange()})}warnUnknownField(kind,fieldName){this.notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}warnUnknownToken(token,sequence){this.notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}releaseResource(key,resource){if(this.resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.resources.delete(key)}}function registerEscapeClearsPendingSequence(keymap,options){let shouldPreventDefault=options?.preventDefault??!0;return keymap.intercept("key",({event,consume})=>{if(event.name!=="escape")return;if(!keymap.hasPendingSequence())return;if(keymap.clearPendingSequence(),shouldPreventDefault)consume()},{priority:options?.priority??0})}function registerLeader(keymap,options){return keymap.registerToken({name:options.name??"<leader>",key:options.trigger})}var RESERVED_COMMAND_FIELDS,RESERVED_BINDING_FIELDS,RESERVED_LAYER_FIELDS,DEFAULT_COMMAND_SEARCH_FIELDS,SNAPSHOT_COMMAND_METADATA_OPTIONS,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS,EMPTY_COMMAND_FIELDS,EMPTY_COMPILE_FIELDS,EMPTY_REQUIRES,EMPTY_MATCHERS,EMPTY_CONDITION_KEYS,KEY_DISAMBIGUATION_DECISION,KEY_DEFERRED_DISAMBIGUATION_DECISION,NOOP=()=>{},NOOP2=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS=1000,OrderedRegistry,PriorityRegistry,EMPTY_DATA,EMPTY_FIELDS;var init_addons=__esm(()=>{RESERVED_COMMAND_FIELDS=new Set(["name","run"]),RESERVED_BINDING_FIELDS=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS=["name"],SNAPSHOT_COMMAND_METADATA_OPTIONS=Object.freeze({deep:!0,preserveNonPlainObjects:!0}),SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS=Object.freeze({deep:!0,freeze:!0,preserveNonPlainObjects:!0}),EMPTY_COMMAND_FIELDS=Object.freeze({});EMPTY_COMPILE_FIELDS=Object.freeze({}),EMPTY_REQUIRES=[],EMPTY_MATCHERS=[],EMPTY_CONDITION_KEYS=[];KEY_DISAMBIGUATION_DECISION=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION=Symbol("keymap-deferred-disambiguation-decision");OrderedRegistry=class OrderedRegistry extends CopyOnWriteRegistry{append(value){return this.setItems([...this.getItems(),value]),()=>{this.remove(value)}}prepend(value){return this.setItems([value,...this.getItems()]),()=>{this.remove(value)}}remove(value){return this.removeItem(value)}values(){return this.getItems()}};PriorityRegistry=class PriorityRegistry extends CopyOnWriteRegistry{order=0;register(listener,options){let registered={...options,listener,order:this.order++};return this.setItems([...this.getItems(),registered].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return left.order-right.order})),()=>{this.removeItem(registered)}}entries(){return this.getItems()}};EMPTY_DATA=Object.freeze({});EMPTY_FIELDS=Object.freeze({})});function getFocusedTargetIfAvailable2(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget2(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath2(host,focused){let path6=new Set;return forEachActivationTarget2(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused2(state,host,focused){if(state.activeLayersCacheVersion===state.activeLayersVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;let activeLayers=[],activationPath=getActivationPath2(host,focused);for(let layer of state.sortedLayers)if(isLayerActiveForFocused2(host,layer,focused,activationPath))activeLayers.push(layer);return state.activeLayersCacheVersion=state.activeLayersVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=activeLayers,activeLayers}function invalidateCachedActiveLayers2(state){state.activeLayersCacheVersion=-1,state.activeLayersCacheFocused=void 0,state.activeLayersCache=[]}function isLayerActiveForFocused2(host,layer,focused,activationPath=getActivationPath2(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function normalizeBindingTokenName2(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName2(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke2(input){return{name:normalizeKeyName2(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke2(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart2(input,options){let stroke=cloneKeyStroke2(normalizeKeyStroke2(input));return{stroke,display:options?.display??stringifyCanonicalStroke2(stroke),match:options?.match??createKeyMatch2(stroke),tokenName:options?.tokenName?normalizeBindingTokenName2(options.tokenName):void 0}}function cloneKeySequencePart2(part){return{stroke:cloneKeyStroke2(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName}}function cloneKeySequence2(parts){return parts.map((part)=>cloneKeySequencePart2(part))}function resolveKeyMatch2(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch2(input.stroke);return createKeyMatch2(input)}function createKeyMatch2(input){return`key:${buildKeyMatchId2(normalizeKeyStroke2(input))}`}function createTextKeyMatch2(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke2(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke2(input.stroke)}return stringifyCanonicalStroke2(normalizeKeyStroke2(input))}function stringifyKeySequence2(input,options){return input.map((part)=>stringifyKeyStroke2(part,options)).join("")}function stringifyCanonicalStroke2(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId2(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getLiveHost2(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function isSamePendingSequence2(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.node!==right.node)return!1}return!0}class ActivationService2{state;host;hooks;notify;conditions;catalog;options;constructor(state,host,hooks,notify,conditions,catalog,options={}){this.state=state,this.host=host,this.hooks=hooks,this.notify=notify,this.conditions=conditions,this.catalog=catalog,this.options=options}getFocusedTarget(){return getLiveHost2(this.host).getFocusedTarget()}getFocusedTargetIfAvailable(){return getFocusedTargetIfAvailable2(this.host)}setPendingSequence(next){let previous=this.state.projection.pendingSequence;if(isSamePendingSequence2(previous,next))return;this.state.projection.pendingSequence=next,this.options.onPendingSequenceChanged?.(previous,next),this.invalidateCaches(),this.notifyPendingSequenceChange(),this.notify.queueStateChange()}ensureValidPendingSequence(){let pending=this.state.projection.pendingSequence;if(!pending)return;let focused=this.getFocusedTarget(),captures=pending.captures.filter((capture2)=>{return this.state.layers.layers.has(capture2.layer)&&this.isLayerActiveForFocused(capture2.layer,focused)&&this.conditions.layerMatchesRuntimeState(capture2.layer)&&this.nodeHasReachableBindings(capture2.node,focused)});if(captures.length===0){this.setPendingSequence(null);return}if(captures.length!==pending.captures.length)this.setPendingSequence({captures});return this.state.projection.pendingSequence??void 0}revalidatePendingSequenceIfNeeded(){if(this.host.isDestroyed||!this.state.projection.pendingSequence)return;this.ensureValidPendingSequence()}hasPendingSequenceState(){return!this.host.isDestroyed&&this.state.projection.pendingSequence!==null}getPendingSequence(){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion;if(projections.pendingSequenceCacheVersion===derivedStateVersion)return projections.pendingSequenceCache;let pending=this.ensureValidPendingSequence(),canUseCache=!pending||pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)),sequence=pending?this.collectSequencePartsFromPending(pending):[];if(canUseCache)projections.pendingSequenceCacheVersion=derivedStateVersion,projections.pendingSequenceCache=sequence;return sequence}popPendingSequence(){let pending=this.ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.node.depth<=1)return this.setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let parent=capture2.node.parent;if(!parent||!parent.stroke)continue;nextCaptures.push({layer:capture2.layer,node:parent})}if(nextCaptures.length===0)return this.setPendingSequence(null),!0;return this.setPendingSequence({captures:nextCaptures}),!0}getActiveKeys(options){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion,includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0;if(includeBindings){if(includeMetadata){if(projections.activeKeysBindingsAndMetadataCacheVersion===derivedStateVersion)return projections.activeKeysBindingsAndMetadataCache}else if(projections.activeKeysBindingsCacheVersion===derivedStateVersion)return projections.activeKeysBindingsCache}else if(includeMetadata){if(projections.activeKeysMetadataCacheVersion===derivedStateVersion)return projections.activeKeysMetadataCache}else if(projections.activeKeysPlainCacheVersion===derivedStateVersion)return projections.activeKeysPlainCache;let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),pending=this.ensureValidPendingSequence(),activeLayers=pending?[]:this.getActiveLayers(focused),canUseCache=pending?pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)):this.activeLayersCanCacheActiveKeys(activeLayers),activeKeys=pending?this.collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):this.collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(!canUseCache)return activeKeys;if(includeBindings)if(includeMetadata)projections.activeKeysBindingsAndMetadataCacheVersion=derivedStateVersion,projections.activeKeysBindingsAndMetadataCache=activeKeys;else projections.activeKeysBindingsCacheVersion=derivedStateVersion,projections.activeKeysBindingsCache=activeKeys;else if(includeMetadata)projections.activeKeysMetadataCacheVersion=derivedStateVersion,projections.activeKeysMetadataCache=activeKeys;else projections.activeKeysPlainCacheVersion=derivedStateVersion,projections.activeKeysPlainCache=activeKeys;return activeKeys}getActiveKeysForCaptures(captures,options){let includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0,focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused);return this.collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)}nodeHasReachableBindings(node,focused){return this.hasMatchingBindings(node.reachableBindings,focused,this.catalog.getActiveCommandView(focused))}getActiveLayers(focused){return getActiveLayersForFocused2(this.state.layers,this.host,focused)}refreshActiveLayers(focused=this.getFocusedTargetIfAvailable()){getActiveLayersForFocused2(this.state.layers,this.host,focused)}invalidateActiveLayers(){invalidateCachedActiveLayers2(this.state.layers)}isLayerActiveForFocused(layer,focused){return isLayerActiveForFocused2(this.host,layer,focused)}layerCanCacheActiveKeys(layer){return!layer.hasUnkeyedMatchers&&!layer.hasUnkeyedCommands&&!layer.hasUnkeyedBindings}activeLayersCanCacheActiveKeys(activeLayers){for(let layer of activeLayers)if(!this.layerCanCacheActiveKeys(layer))return!1;return!0}collectNodesFromNode(node){let nodes=[],current=node;while(current&&current.stroke)nodes.push(current),current=current.parent;return nodes.reverse(),nodes}collectSequencePartsFromPending(pending){let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),paths=pending.captures.map((capture2)=>this.collectNodesFromNode(capture2.node)),firstPath=paths[0];if(!firstPath||firstPath.length===0)return[];let parts=[];for(let index=0;index<firstPath.length;index+=1){let firstNode=firstPath[index];if(!firstNode?.stroke||firstNode.match===null)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let path6 of paths){let node=path6[index];if(!node)continue;let presentation=this.getNodePresentation(node,focused,activeView);if(display===void 0){display=presentation.display,tokenName=presentation.tokenName;continue}if(!hasDisplayConflict&&display!==presentation.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==presentation.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke2(firstNode.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart2(firstNode.stroke,{display,match:firstNode.match,tokenName}))}return parts}collectMatchingBindings(bindings,focused,activeView){let matches=[];for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches}hasMatchingBindings(bindings,focused,activeView){for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))return!0;return!1}getNodePresentation(node,focused,activeView,reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView)){if(!node.stroke)return{display:""};let partIndex=node.depth-1,display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of reachableBindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke2(node.stroke);if(hasTokenConflict)tokenName=void 0;return{display,tokenName}}toActiveBinding(binding,focused,activeView){return{sequence:binding.sequence,command:binding.command,commandAttrs:this.catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}}collectActiveBindings(bindings,focused,activeView){return bindings.map((binding)=>this.toActiveBinding(binding,focused,activeView))}collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set,hasLayerConditions=this.state.layers.layersWithConditions>0;for(let layer of activeLayers){if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let[bindingKey,child]of layer.root.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set;for(let capture2 of captures)for(let[bindingKey,child]of capture2.node.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}selectActiveKey(node,includeBindings,focused,activeView){return node.children.size>0?this.selectPrefixActiveKey(node,includeBindings,focused,activeView):this.selectExactActiveKey(node,includeBindings,focused,activeView)}selectPrefixActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let prefixBindings=this.selectActiveBindings(node.bindings,focused,activeView);return{...this.getNodePresentation(node,focused,activeView,reachableBindings),continues:!0,firstBinding:prefixBindings?.bindings[0],commandBinding:prefixBindings?.commandBinding,bindings:includeBindings&&prefixBindings&&prefixBindings.bindings.length>0?[...prefixBindings.bindings]:void 0,stop:!0}}selectExactActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let selected=this.selectActiveBindings(node.bindings,focused,activeView);if(!selected)return;let display,tokenName;if(selected.bindings.length===1){let part=selected.bindings[0]?.sequence[node.depth-1];display=part?.display??stringifyKeyStroke2(node.stroke),tokenName=part?.tokenName}else{let presentation=this.getNodePresentation(node,focused,activeView,selected.bindings);display=presentation.display,tokenName=presentation.tokenName}return{display,tokenName,continues:!1,firstBinding:selected.bindings[0],commandBinding:selected.commandBinding,bindings:includeBindings?[...selected.bindings]:void 0,stop:selected.stop}}selectActiveBindings(bindings,focused,activeView){let selected=[],commandBinding;for(let binding of bindings){if(!this.conditions.matchesConditions(binding)||!this.catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}}createActiveKeyState(stroke,selection,includeBindings){return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}}updateActiveKeyState(state,selection,includeBindings){if(!state.firstBinding&&selection.firstBinding)state.firstBinding=selection.firstBinding;if(!state.commandBinding&&selection.commandBinding)state.commandBinding=selection.commandBinding;if(selection.continues)state.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state.bindings){state.bindings=[...selection.bindings];return}state.bindings.push(...selection.bindings)}materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView){if(!state.commandBinding&&!state.continues)return;let activeKey={stroke:cloneKeyStroke2(state.stroke),display:state.display,continues:state.continues};if(state.tokenName)activeKey.tokenName=state.tokenName;if(state.commandBinding)activeKey.command=state.commandBinding.command;if(includeBindings&&state.bindings&&state.bindings.length>0)activeKey.bindings=state.bindings.length===1?[this.toActiveBinding(state.bindings[0],focused,activeView)]:this.collectActiveBindings(state.bindings,focused,activeView);if(includeMetadata){if(state.firstBinding?.attrs)activeKey.bindingAttrs=state.firstBinding.attrs;let commandAttrs=state.commandBinding?this.catalog.getBindingCommandAttrs(state.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey}invalidateCaches(){this.state.projection.pendingSequenceCacheVersion=-1,this.state.projection.activeKeysPlainCacheVersion=-1,this.state.projection.activeKeysBindingsCacheVersion=-1,this.state.projection.activeKeysMetadataCacheVersion=-1,this.state.projection.activeKeysBindingsAndMetadataCacheVersion=-1}notifyPendingSequenceChange(){if(!this.hooks.has("pendingSequence"))return;this.hooks.emit("pendingSequence",this.state.projection.pendingSequence?this.collectSequencePartsFromPending(this.state.projection.pendingSequence):[])}}function mergeRequirement2(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute2(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function isPlainObject3(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage2(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike2(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue2(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue2(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject3(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue2(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandChainCacheState2(){return{resolvedWithoutRecordChains:new Map,resolvedWithRecordChains:new Map,fallbackWithoutRecord:new Map,fallbackWithRecord:new Map,fallbackWithoutRecordErrors:new Set,fallbackWithRecordErrors:new Set}}function normalizeBindingCommand2(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName2(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}class CommandCatalogService2{state;host;notify;conditions;options;constructor(state,host,notify,conditions,options){this.state=state,this.host=host,this.notify=notify,this.conditions=conditions,this.options=options}normalizeCommands(commands){return normalizeRegisteredCommands2({commands,commandFields:this.state.environment.commandFields,conditions:this.conditions,onError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}prependCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.prepend(resolver),resolver)}appendCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.append(resolver),resolver)}clearCommandResolvers(){if(!this.state.commands.commandResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.commands.commandResolvers.clear(),this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}getCommands(query2){return this.getFilteredCommandEntries(query2).map((entry2)=>getRegisteredCommandRecord2(entry2.command))}getCommandEntries(query2){let context=this.getCommandQueryContext(query2),filteredEntries=this.getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getRegisteredCommandRecord2(entry2.command),bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)this.collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))}getResolvedCommandChain(command,focused,includeRecord){let view=this.getActiveCommandView(focused),entries=this.getResolvedCommandChainFromView(view,command,focused,includeRecord,"active",view.chainsByName.get(command)),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{entries,hadError}}getRegisteredResolvedEntries(command,includeRecord){let view=this.getRegisteredCommandView(),cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let chain=view.chainsByName.get(command);if(!chain||chain.length===0){cache.set(command,[]);return}let resolved=[];for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand2(entry2.command,{includeRecord})});return cache.set(command,resolved),resolved}getRegisteredResolverFallback(command,includeRecord){let view=this.getRegisteredCommandView(),fallback=this.getFallbackResolvedCommand(view,command,null,includeRecord,"registered"),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{resolved:fallback?.resolved,hadError}}getCommandAttrs(command,focused){return this.getTopResolvedCommand(command,focused,!1)?.resolved.attrs}getTopCommandRecord(command,focused){return this.getTopResolvedCommand(command,focused,!0)?.resolved.record}getTopRegisteredCommandRecord(command){let top=this.getTopRegisteredCommand(command);return top?getRegisteredCommandRecord2(top.command):void 0}getDispatchUnavailableCommandState(command,focused,includeRecord){let chain=this.getRegisteredCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused2(this.host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!this.conditions.layerMatchesRuntimeState(entry2.layer)||!this.conditions.matchesConditions(entry2.command))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeRecord?getRegisteredCommandRecord2(unavailableEntry.command):void 0}}getActiveCommandView(focused){let currentFocused=getFocusedTargetIfAvailable2(this.host),derivedStateVersion=this.state.notify.derivedStateVersion;if(focused===currentFocused&&this.state.commands.activeCommandViewVersion===derivedStateVersion&&this.state.commands.activeCommandView?.cacheable)return this.state.commands.activeCommandView;let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map,cacheable=!0;if(this.state.layers.layersWithCommands>0)for(let layer of getActiveLayersForFocused2(this.state.layers,this.host,focused)){if(layer.commands.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;if(layer.hasUnkeyedMatchers)cacheable=!1;for(let command of layer.commands){if(command.hasUnkeyedMatchers)cacheable=!1;if(!this.conditions.matchesConditions(command))continue;let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2]);if(!reachableByName.has(command.name))reachableByName.set(command.name,entry2),reachable.push(entry2)}}let view={cacheable,entries,reachable,reachableByName,chainsByName,...createCommandChainCacheState2()};if(focused===currentFocused&&view.cacheable)this.state.commands.activeCommandViewVersion=derivedStateVersion,this.state.commands.activeCommandView=view;return view}getRegisteredCommandView(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandViewVersion===cacheVersion&&this.state.commands.registeredCommandView)return this.state.commands.registeredCommandView;let entries=[],chainsByName=new Map;for(let layer of this.state.layers.sortedLayers){if(layer.commands.length===0)continue;for(let command of layer.commands){let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2])}}let view={entries,chainsByName,...createCommandChainCacheState2()};return this.state.commands.registeredCommandViewVersion=cacheVersion,this.state.commands.registeredCommandView=view,view}isBindingVisible(binding,focused,activeView){if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView.reachableByName.has(binding.command))return!0;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")!==void 0}getBindingCommandAttrs(binding,focused,activeView){if(typeof binding.command!=="string")return;let active=activeView.reachableByName.get(binding.command);if(active)return active.command.attrs;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")?.resolved.attrs}getCommandResolutionStatus(command,layerCommands){if(layerCommands?.has(command)||this.state.commands.registeredNames.has(command))return"resolved";let lookup=this.resolveCommandWithResolvers(command,getFocusedTargetIfAvailable2(this.host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"}mutateCommandResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let off=register2();return this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange(),()=>{this.notify.runWithStateChangeBatch(()=>{if(off(),this.state.commands.commandResolvers.values().includes(resolver))return;this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}})}getTopResolvedCommand(command,focused,includeRecord){let activeView=this.getActiveCommandView(focused),active=activeView.reachableByName.get(command);if(active)return{target:active.layer.target,resolved:resolveRegisteredCommand2(active.command,{includeRecord})};return this.getFallbackResolvedCommand(activeView,command,focused,includeRecord,"active")}getTopRegisteredCommand(command){return this.getRegisteredCommandView().chainsByName.get(command)?.[0]}getFallbackResolvedCommand(view,command,focused,includeRecord,mode){let cache=includeRecord?view.fallbackWithRecord:view.fallbackWithoutRecord,errorCache=includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors;if(cache.has(command)){let cached=cache.get(command);return cached?{resolved:cached}:void 0}let lookup=this.resolveCommandWithResolvers(command,focused,{includeRecord,mode});if(cache.set(command,lookup.resolved??null),lookup.hadError)errorCache.add(command);if(!lookup.resolved)return;return{resolved:lookup.resolved}}getResolvedCommandChainFromView(view,command,focused,includeRecord,mode,activeChain){let cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let resolved=[],chain=activeChain;if(chain)for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand2(entry2.command,{includeRecord})});let fallback=this.getFallbackResolvedCommand(view,command,focused,includeRecord,mode);if(fallback)resolved.push(fallback);return cache.set(command,resolved),resolved.length>0?resolved:void 0}getRegisteredLayerCommandEntries(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandEntriesCacheVersion===cacheVersion)return this.state.commands.registeredCommandEntriesCache;let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);let entries=[];for(let layer of layers)for(let command of layer.commands)entries.push({layer,command});return this.state.commands.registeredCommandEntriesCacheVersion=cacheVersion,this.state.commands.registeredCommandEntriesCache=entries,entries}getCommandQueryContext(query2){let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable2(this.host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:this.getActiveCommandView(focused)}}getFilteredCommandEntries(query2,context=this.getCommandQueryContext(query2)){let entries;if(context.visibility==="registered")entries=this.getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries2({entries,query:query2,getCommandRecord:(command)=>getRegisteredCommandRecord2(command),onFilterError:(error2)=>{this.notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})}collectCommandEntryBindings(grouped,indexesByName,context){if(context.visibility==="registered"){let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);for(let layer of layers)for(let binding of layer.compiledBindings)this.collectBindingForCommandEntries(grouped,indexesByName,binding);return}let activeView=context.activeView;if(!activeView)return;for(let layer of getActiveLayersForFocused2(this.state.layers,this.host,context.focused)){if(layer.compiledBindings.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;for(let binding of layer.compiledBindings){if(!this.conditions.matchesConditions(binding)||!this.isBindingVisible(binding,context.focused,activeView))continue;this.collectBindingForCommandEntries(grouped,indexesByName,binding)}}}collectBindingForCommandEntries(grouped,indexesByName,binding){if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push({sequence:binding.sequence,command:binding.command,commandAttrs:item.command.attrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough})}}resolveCommandWithResolvers(command,focused,options){let includeRecord=options?.includeRecord===!0,context=this.createCommandResolverContext(includeRecord,focused,options?.mode??"active");return resolveCommandWithResolvers2(command,this.state.commands.commandResolvers.values(),context,(error2)=>{this.notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)})}createCommandResolverContext(includeRecord,focused,mode){return{getCommandAttrs:(name)=>{if(mode==="registered")return this.getTopRegisteredCommand(name)?.command.attrs;return this.getCommandAttrs(name,focused)},getCommandRecord:(name)=>{if(!includeRecord)return;if(mode==="registered")return this.getTopRegisteredCommandRecord(name);return this.getTopCommandRecord(name,focused)}}}}function getRegisteredCommandRecord2(command){if(command.record)return command.record;let fields=EMPTY_COMMAND_FIELDS2;if(command.fields!==EMPTY_COMMAND_FIELDS2&&Object.keys(command.fields).length>0)fields=snapshotDataValue2(command.fields,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2);let record=command.attrs?Object.freeze({name:command.name,fields,attrs:snapshotDataValue2(command.attrs,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2)}):Object.freeze({name:command.name,fields});return command.record=record,record}function resolveRegisteredCommand2(command,options){if(options?.includeRecord===!0){let existing2=command.resolvedWithRecord;if(existing2)return existing2;let resolved2={run:createRegisteredCommandRunner2(command)};if(command.attrs)resolved2.attrs=command.attrs;return resolved2.record=getRegisteredCommandRecord2(command),command.resolvedWithRecord=resolved2,resolved2}let existing=command.resolved;if(existing)return existing;let resolved={run:createRegisteredCommandRunner2(command)};if(command.attrs)resolved.attrs=command.attrs;return command.resolved=resolved,resolved}function normalizeRegisteredCommands2(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands){let normalizedCommand;try{let mergedAttrs={},mergedFields={},mergedRequires={},matchers=[],conditionKeys=new Set,hasUnkeyedMatchers=!1,normalizedName=normalizeCommandName2(command.name);if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}for(let[fieldName,value]of Object.entries(command)){if(RESERVED_COMMAND_FIELDS2.has(fieldName)||value===void 0)continue;mergedFields[fieldName]=snapshotDataValue2(value,SNAPSHOT_COMMAND_METADATA_OPTIONS2);let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createCommandFieldContext2(mergedAttrs,mergedRequires,conditionKeys,matchers,options.conditions,fieldName,{onUnkeyedMatcher(){hasUnkeyedMatchers=!0}}))}let attrs=Object.keys(mergedAttrs).length===0?void 0:Object.freeze(mergedAttrs),fields=Object.keys(mergedFields).length===0?EMPTY_COMMAND_FIELDS2:Object.freeze(mergedFields);if(normalizedCommand={name:normalizedName,fields,run:command.run,requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,matchCacheDirty:!0},attrs)normalizedCommand.attrs=attrs}catch(error2){options.onError("register-command-failed",error2,getErrorMessage2(error2,`Failed to register keymap command "${String(command.name)}"`));continue}seen.add(normalizedCommand.name),normalizedCommands.push(normalizedCommand)}return normalizedCommands}function createCommandFieldContext2(mergedAttrs,mergedRequires,conditionKeys,matchers,conditions,fieldName,options){return{require(name,requiredValue){mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},attr(name,attributeValue){mergeAttribute2(mergedAttrs,name,snapshotDataValue2(attributeValue,SNAPSHOT_COMMAND_METADATA_OPTIONS2),`field ${fieldName}`)},activeWhen(matcher){let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)options.onUnkeyedMatcher();matchers.push(runtimeMatcher)}}}function createRegisteredCommandRunner2(command){if(command.runner)return command.runner;let runner=(ctx)=>{return command.run({...ctx,command:getRegisteredCommandRecord2(command)})};return command.runner=runner,runner}function resolveCommandWithResolvers2(command,resolvers,context,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolved;try{resolved=resolver(command,context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolved)return{hadError,resolved}}return{hadError}}function queryLayerCommandEntries2(options){let namespace=options.query?.namespace,normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS2;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate;if(typeof filter==="function")filterPredicate=filter;else if(filter)filterEntries2=Object.entries(filter);let results=[];for(let entry2 of options.entries){let command=entry2.command;if(!commandMatchesNamespace2(command,namespace))continue;if(!commandMatchesSearch2(command,normalizedSearch,searchKeys))continue;if(!commandMatchesFilters2(command,filterEntries2,options))continue;let record=options.getCommandRecord(command);if(filterPredicate){let matches=!1;try{matches=filterPredicate(record)}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}results.push(entry2)}return results}function commandMatchesSearch2(command,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch2(command,key,search))return!0;return!1}function commandMatchesNamespace2(command,namespace){if(namespace===void 0)return!0;if(!Object.prototype.hasOwnProperty.call(command.fields,"namespace"))return!1;return commandValueMatchesFilter2(command.fields.namespace,namespace)}function commandMatchesFilters2(command,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery2(command,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch2(command,key,search){if(key==="name"&&commandValueMatchesSearch2(command.name,search))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesSearch2(command.fields[key],search))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesSearch2(command.attrs[key],search);return!1}function commandKeyMatchesQuery2(command,key,matcher,options){if(typeof matcher==="function"){let record,getRecord=()=>{if(!record)record=options.getCommandRecord(command);return record},foundValue=!1;if(key==="name"){foundValue=!0;try{if(matcher(command.name,getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(Object.prototype.hasOwnProperty.call(command.fields,key)){foundValue=!0;try{if(matcher(command.fields[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key)){foundValue=!0;try{if(matcher(command.attrs[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(!foundValue)try{return matcher(void 0,getRecord())}catch(error2){return options.onFilterError(error2),!1}return!1}return commandKeyMatchesExact2(command,key,matcher)}function commandKeyMatchesExact2(command,key,matcher){if(key==="name"&&commandValueMatchesFilter2(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesFilter2(command.fields[key],matcher))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesFilter2(command.attrs[key],matcher);return!1}function commandValueMatchesFilter2(value,matcher){if(Array.isArray(matcher)){for(let expected of matcher)if(commandValueMatchesExact2(value,expected))return!0;return!1}return commandValueMatchesExact2(value,matcher)}function commandValueMatchesExact2(value,expected){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesExact2(entry2,expected))return!0;return!1}return Object.is(value,expected)}function commandValueMatchesSearch2(value,search){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesSearch2(entry2,search))return!0;return!1}if(typeof value==="string")return value.toLowerCase().includes(search);if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase().includes(search);return!1}class CommandExecutorService2{notify;runtime;activation;catalog;options;constructor(notify,runtime,activation,catalog,options){this.notify=notify,this.runtime=runtime,this.activation=activation,this.catalog=catalog,this.options=options}runCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand2(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chain=this.catalog.getRegisteredResolvedEntries(normalized,includeRecord),rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}let fallback=this.catalog.getRegisteredResolverFallback(normalized,includeRecord);if(fallback.resolved){let execution=this.executeResolvedCommand(normalized,fallback.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(fallback.hadError)return{ok:!1,reason:"error"};return rejectedResult??{ok:!1,reason:"not-found"}}dispatchCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand2(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chainLookup=this.catalog.getResolvedCommandChain(normalized,focused,includeRecord),chain=chainLookup.entries,rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(chainLookup.hadError)return{ok:!1,reason:"error"};let unavailable=this.catalog.getDispatchUnavailableCommandState(normalized,focused,includeRecord);if(unavailable)return unavailable.command?{ok:!1,reason:unavailable.reason,command:unavailable.command}:{ok:!1,reason:unavailable.reason};return rejectedResult??{ok:!1,reason:"not-found"}}runBinding(bindingLayer,binding,event,focused){let data=this.runtime.getReadonlyData();if(binding.run){if(this.executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",{run:binding.run},{keymap:this.options.keymap,event,focused,target:bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects2(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=this.catalog.getResolvedCommandChain(binding.command,focused,!1).entries;if(chain?.length===1){let[entry2]=chain;if(entry2){if(this.executeResolvedCommand(binding.command,entry2.resolved,{keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects2(binding,event),!0}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data};if(this.executeResolvedCommand(binding.command,entry2.resolved,context).status==="rejected")continue;return applyBindingEventEffects2(binding,event),!0}return!1}executeResolvedCommand(commandName,resolved,context){let command=resolved.record,result2;try{result2=resolved.run(context)}catch(error2){return this.notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:{ok:!1,reason:"error",command}}}if(isPromiseLike2(result2))return result2.catch((error2)=>{this.notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:{ok:!0,command}};if(result2===!1){if(resolved.rejectedResult)return{status:"rejected",result:resolved.rejectedResult};return{status:"rejected",result:{ok:!1,reason:"rejected",command}}}return{status:"handled",result:{ok:!0,command}}}}function applyBindingEventEffects2(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function normalizeBindingInputs2(bindings){if(Array.isArray(bindings))return bindings;let normalized=[];for(let[key,cmd]of Object.entries(bindings)){if(typeof cmd!=="string"&&typeof cmd!=="function")throw Error(`Invalid keymap binding for "${key}": shorthand bindings must map to string or function commands`);normalized.push({key,cmd})}return normalized}function snapshotBindingInputs2(bindings){return normalizeBindingInputs2(bindings).map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBindingInput2(binding){return{...binding,sequence:cloneKeySequence2(binding.sequence)}}function createSequenceNode2(parent,stroke,match){return{parent,depth:parent?parent.depth+1:0,stroke,match,children:new Map,bindings:[],reachableBindings:[]}}function snapshotAttributes2(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue2(attrs,{freeze:!0})}class CompilerService2{state;notify;conditions;options;constructor(state,notify,conditions,options){this.state=state,this.notify=notify,this.conditions=conditions,this.options=options}parseTokenKey(key){return parseSingleKeyPartWithParsers2(key,this.state.environment.bindingParsers.values(),{tokens:this.state.environment.tokens,layer:EMPTY_COMPILE_FIELDS2,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})}compileBindings(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields){let root=createSequenceNode2(null,null,null),compiledBindings=[],hasTokenBindings=!1,bindingExpanders=this.state.environment.bindingExpanders.values(),bindingParsers=this.state.environment.bindingParsers.values(),bindingFieldCompilers=this.state.environment.bindingFields,allowExactPrefixAmbiguity=this.state.dispatch.disambiguationResolvers.has(),warnUnknownField=this.options.warnUnknownField,warnUnknownToken=this.options.warnUnknownToken,conditions=this.conditions;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingInputWithExpanders2(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){this.notify.emitError("binding-expand-error",error2,getErrorMessage2(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let parsed;try{parsed=typeof expandedBindingKey==="string"?parseBindingSequenceWithParsers2(expandedBindingKey,bindingParsers,{tokens:tokens2,layer:compileFields,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)}):{parts:[this.parseObjectKeyPart(expandedBindingKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1}}catch(error2){this.notify.emitError("binding-parse-error",error2,getErrorMessage2(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedBindingKey==="string"?expandedBindingKey:String(expandedBindingKey.name));for(let compiledInput of this.applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=this.normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires,mergedAttrs,matchers,conditionKeys,hasUnkeyedMatchers=!1;for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS2.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,{require(name,requiredValue){if(!mergedRequires)mergedRequires={};if(mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),!conditionKeys)conditionKeys=new Set;conditionKeys.add(name)},attr(name,attributeValue){if(!mergedAttrs)mergedAttrs={};mergeAttribute2(mergedAttrs,name,attributeValue,`field ${fieldName}`)},activeWhen:(matcher)=>{let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;if(!matchers)matchers=[];matchers.push(runtimeMatcher)}})}let attrs=mergedAttrs?snapshotAttributes2(mergedAttrs):void 0,command=normalizeBindingCommand2(compiledInput.cmd),compiledBinding={sequence:compiledSequence,command,event,sourceBinding:snapshotParsedBindingInput2(compiledInput),sourceTarget,sourceLayerOrder,sourceBindingIndex:bindingIndex,requires:mergedRequires?Object.entries(mergedRequires):EMPTY_REQUIRES2,matchers:matchers??EMPTY_MATCHERS2,conditionKeys:conditionKeys?[...conditionKeys]:EMPTY_CONDITION_KEYS2,hasUnkeyedMatchers,matchCacheDirty:!0,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");if(event==="press")this.insertBinding(root,compiledBinding,allowExactPrefixAmbiguity);compiledBindings.push(compiledBinding)}catch(error2){this.notify.emitError("binding-compile-error",error2,getErrorMessage2(error2,"Failed to compile keymap binding"))}}}return{root,bindings:compiledBindings,hasTokenBindings}}parseObjectKeyPart(key,options){return createKeySequencePart2(key,options)}normalizeBindingEvent(event){if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)}applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields){let bindingTransformers=this.state.environment.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence2(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence2(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS2;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers2(key,bindingParsers,{tokens:tokens2,layer,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBindingInput2(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){this.notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]}insertBinding(root,binding,allowExactPrefixAmbiguity){let node=root,touchedNodes=[],createdNodes=[];try{for(let part of binding.sequence){if(!allowExactPrefixAmbiguity&&node.bindings.some((candidate)=>candidate.command!==void 0))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");let bindingKey=part.match,child=node.children.get(bindingKey);if(!child)child=createSequenceNode2(node,cloneKeySequencePart2(part).stroke,part.match),node.children.set(bindingKey,child),createdNodes.push({parent:node,key:bindingKey});child.reachableBindings.push(binding),touchedNodes.push(child),node=child}if(!allowExactPrefixAmbiguity&&binding.command!==void 0&&node.children.size>0)throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");node.bindings=[...node.bindings,binding]}catch(error2){for(let index=touchedNodes.length-1;index>=0;index-=1){let touchedNode=touchedNodes[index];if(!touchedNode)continue;if(touchedNode.reachableBindings.at(-1)===binding){touchedNode.reachableBindings.pop();continue}touchedNode.reachableBindings=touchedNode.reachableBindings.filter((candidate)=>candidate!==binding)}for(let index=createdNodes.length-1;index>=0;index-=1){let createdNode=createdNodes[index];if(!createdNode)continue;let child=createdNode.parent.children.get(createdNode.key);if(!child)continue;if(child.children.size>0||child.reachableBindings.length>0||child.bindings.length>0)continue;createdNode.parent.children.delete(createdNode.key)}throw error2}}}function expandBindingInputWithExpanders2(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[key];let layer=options?.layer??EMPTY_COMPILE_FIELDS2,candidates=[key];for(let expander of expanders){let nextCandidates=[];for(let input of candidates){let result2=expander({input,layer});if(!result2){nextCandidates.push(input);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${input}"`);for(let expandedInput of result2){if(typeof expandedInput!=="string")throw Error(`Keymap binding expander must return string key sequences for "${input}"`);nextCandidates.push(expandedInput)}}candidates=nextCandidates}return candidates}function parseBindingSequenceWithParsers2(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS2,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,normalizeTokenName:normalizeBindingTokenName2,createMatch:createTextKeyMatch2,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers2(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers2(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher2(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}class ConditionService2{state;notify;constructor(state,notify){this.state=state,this.notify=notify}buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher,cacheable:!1};if(isReactiveMatcher2(matcher))return{source,match:()=>matcher.get(),cacheable:!0,subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)}hasNoConditions(target){return target.requires.length===0&&target.matchers.length===0}indexRuntimeMatchable(target){if(target.conditionKeys.length>0)for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(dependents){dependents.add(target);continue}this.state.conditions.runtimeKeyDependents.set(key,new Set([target]))}if(!target.hasUnkeyedMatchers)target.matchCacheDirty=!0}unindexRuntimeMatchable(target){if(target.conditionKeys.length===0)return;for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(!dependents)continue;if(dependents.delete(target),dependents.size===0)this.state.conditions.runtimeKeyDependents.delete(key)}}invalidateRuntimeConditionKey(name){let dependents=this.state.conditions.runtimeKeyDependents.get(name);if(!dependents)return;for(let target of dependents)target.matchCacheDirty=!0}matchesConditions(target){if(this.hasNoConditions(target))return!0;if(this.hasFreshConditionCache(target))return target.matchCache===!0;let matched=this.matchRequirements(target.requires)&&this.matchesRuntimeMatchers(target);return this.updateConditionCache(target,matched),matched}layerMatchesRuntimeState(layer){if(this.state.layers.layersWithConditions===0||this.hasNoConditions(layer))return!0;return this.matchesConditions(layer)}matchRequirements(requires){if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(this.state.runtime.data[name],value))return!1;return!0}hasFreshConditionCache(target){if(target.hasUnkeyedMatchers)return!1;return target.matchCacheDirty!==!0&&target.matchCache!==void 0}updateConditionCache(target,matched){if(target.hasUnkeyedMatchers)return;target.matchCacheDirty=!1,target.matchCache=matched}matchesRuntimeMatcher(matcher){try{return matcher.match()}catch(error2){return this.notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}}matchesRuntimeMatchers(target){if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?this.matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!this.matchesRuntimeMatcher(matcher))return!1;return!0}}function createSyncDecision2(action,handler){return{[KEY_DISAMBIGUATION_DECISION2]:!0,action,handler}}function createDeferredDecision2(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION2]:!0,action}}function isSyncDecision2(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION2]===!0}function isDeferredDecision2(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION2]===!0}class DispatchService2{state;notify;runtime;activation;conditions;executor;compiler;catalog;layers;eventMatchResolverContext;pendingDisambiguation=null;nextPendingDisambiguationId=0;constructor(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers){this.state=state,this.notify=notify,this.runtime=runtime,this.activation=activation,this.conditions=conditions,this.executor=executor,this.compiler=compiler,this.catalog=catalog,this.layers=layers,this.eventMatchResolverContext={resolveKey:(key)=>{return this.compiler.parseTokenKey(key).match}}}intercept(name,fn,options){if(name==="key"){let keyOptions=options;return this.state.dispatch.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return this.state.dispatch.rawHooks.register(fn,{priority:rawOptions?.priority??0})}prependEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.prepend(resolver)}appendEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.append(resolver)}clearEventMatchResolvers(){this.state.dispatch.eventMatchResolvers.clear()}prependDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.prepend(resolver),resolver)}appendDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.append(resolver),resolver)}clearDisambiguationResolvers(){if(!this.state.dispatch.disambiguationResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.dispatch.disambiguationResolvers.clear(),this.layers.recompileBindings()})}handlePendingSequenceChange(_previous,_next){if(!this.pendingDisambiguation)return;this.cancelPendingDisambiguation()}handleRawSequence(sequence){let hooks=this.state.dispatch.rawHooks.entries();if(hooks.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks){try{hook.listener(context)}catch(error2){this.notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}handleKeyEvent(event,release){if(!release)this.cancelPendingDisambiguation();let hooks=this.state.dispatch.keyHooks.entries(),context={event,setData:(name,value)=>{this.runtime.setData(name,value)},getData:(name)=>{return this.runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){this.notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped)return}if(release){this.dispatchReleaseLayers(event);return}this.dispatchLayers(event)}mutateDisambiguationResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let hadResolvers=this.state.dispatch.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings();return()=>{this.notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=this.state.dispatch.disambiguationResolvers.has();if(off(),this.state.dispatch.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings()})}})}dispatchReleaseLayers(event){let focused=this.activation.getFocusedTarget(),activeLayers=this.activation.getActiveLayers(focused),hasLayerConditions=this.state.layers.layersWithConditions>0,matchKeys=this.resolveEventMatchKeys(event);layerLoop:for(let layer of activeLayers){if(layer.compiledBindings.length===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=this.runReleaseBindings(layer,strokeKey,event,focused);if(!result2.handled)continue;if(result2.stop)return;continue layerLoop}}}dispatchLayers(event){let focused=this.activation.getFocusedTarget(),pending=this.activation.ensureValidPendingSequence(),matchKeys=this.resolveEventMatchKeys(event);if(pending){this.dispatchPendingSequence(pending,matchKeys,event,focused);return}let activeLayers=this.activation.getActiveLayers(focused);this.dispatchFromRoot(activeLayers,matchKeys,event,focused)}dispatchPendingSequence(pending,matchKeys,event,focused){let advancedCaptures=[];for(let capture2 of pending.captures){let nextNode=this.getReachableChild(capture2.node,matchKeys,focused);if(!nextNode)continue;advancedCaptures.push({layer:capture2.layer,node:nextNode})}if(advancedCaptures.length===0){this.activation.setPendingSequence(null);return}this.dispatchPendingCapturesFromIndex(advancedCaptures,0,!1,event,focused)}dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2)continue;if(capture2.node.children.size>0){if(hasHandledExact)continue;let continuationCaptures=this.collectPendingCapturesFromAdvanced(advancedCaptures,index);if(this.tryResolvePendingAmbiguity(advancedCaptures,index,continuationCaptures,capture2,event,focused,hasHandledExact))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(!result2.handled)continue;if(hasHandledExact=!0,result2.stop){this.activation.setPendingSequence(null);return}}this.activation.setPendingSequence(null)}dispatchFromRoot(activeLayers,matchKeys,event,focused){this.dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode)continue;if(nextNode.children.size>0){let continuationCaptures=this.collectPendingCapturesFromRoot(activeLayers,index,matchKeys,focused);if(this.tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,layer,nextNode,event,focused))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(layer,nextNode.bindings,event,focused);if(!result2.handled)continue;if(result2.stop)return}}tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,layer,node,event,focused){let applyExact=()=>{if(this.activation.setPendingSequence(null),!this.runBindings(layer,node.bindings,event,focused).stop)this.dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:node.bindings,runExact:applyExact})}tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,capture2,event,focused,handledExact){let applyExact=()=>{this.activation.setPendingSequence(null);let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(result2.stop)return;this.dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:capture2.node.bindings,runExact:applyExact})}tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,runExact}=options;if(!this.state.dispatch.disambiguationResolvers.has()||continuationCaptures.length===0)return!1;let activeView=this.catalog.getActiveCommandView(focused),exactBindings=this.activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return!1;let continueSequence=()=>{this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation()},clear=()=>{this.activation.setPendingSequence(null),event.preventDefault(),event.stopPropagation()},sequence,getSequence=()=>{return sequence??=this.activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=this.resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return this.warnUnresolvedAmbiguity(getSequence()),continueSequence(),!0;return this.applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact(),!0;if(decision.action==="continue-sequence")return continueSequence(),!0;if(decision.action==="clear")return clear(),!0;return continueSequence(),this.scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),!0}resolveDisambiguation(options){let activation=this.activation,runtime=this.runtime,sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence2(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke2(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence2(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision2("run-exact"),continueSequence:()=>createSyncDecision2("continue-sequence"),clear:()=>createSyncDecision2("clear"),defer:(run)=>createSyncDecision2("defer",run)};for(let resolver of this.state.dispatch.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){this.notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike2(result2)){this.notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision2(result2)){this.notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){this.cancelPendingDisambiguation();let controller=new AbortController,pending={id:this.nextPendingDisambiguationId++,controller,captures,apply};this.pendingDisambiguation=pending,queueMicrotask(()=>{this.executeDeferredDisambiguation(pending,handler,focused,sequence)})}executeDeferredDisambiguation(pending,handler,focused,sequence){if(!this.isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence2(sequence),focused,sleep:(ms)=>{return this.sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision2("run-exact"),continueSequence:()=>createDeferredDecision2("continue-sequence"),clear:()=>createDeferredDecision2("clear")},result2;try{result2=handler(ctx)}catch(error2){if(this.isPendingDisambiguationCurrent(pending))this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending);return}if(isPromiseLike2(result2)){result2.then((resolved)=>{this.applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!this.isPendingDisambiguationCurrent(pending))return;this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending)});return}this.applyDeferredDisambiguationResult(pending,result2)}applyDeferredDisambiguationResult(pending,result2){if(!this.isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision2(result2)){this.notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),this.finishPendingDisambiguation(pending);return}this.finishPendingDisambiguation(pending),pending.apply(result2)}finishPendingDisambiguation(pending){if(!this.isPendingDisambiguationCurrent(pending))return;this.pendingDisambiguation=null}cancelPendingDisambiguation(){let pending=this.pendingDisambiguation;if(!pending)return;this.pendingDisambiguation=null,pending.controller.abort()}isPendingDisambiguationCurrent(pending){return this.pendingDisambiguation===pending}sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve21)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve21(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve21(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence2(sequence,{preferDisplay:!0});this.notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,focused){let captures=[],hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer||layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode||nextNode.children.size===0)continue;captures.push({layer,node:nextNode})}return captures}collectPendingCapturesFromAdvanced(advancedCaptures,startIndex){return advancedCaptures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&candidate.node.children.size>0})}resolveEventMatchKeys(event){let resolvers=this.state.dispatch.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys2(resolvers[0],event,this.eventMatchResolverContext,this.notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,this.eventMatchResolverContext)}catch(error2){this.notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){this.notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}runReleaseBindings(layer,strokeKey,event,focused){let handled=!1;for(let binding of layer.compiledBindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}getReachableChild(node,matchKeys,focused){for(let strokeKey of matchKeys){let child=node.children.get(strokeKey);if(!child||!this.activation.nodeHasReachableBindings(child,focused))continue;return child}return}runBindings(layer,bindings,event,focused){let handled=!1;for(let binding of bindings){if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}}function resolveSingleEventMatchKeys2(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function registerFieldCompilers2(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name))emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`)}for(let[name,compiler]of entries){if(reservedFields.has(name)||registeredFields.has(name))continue;registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}class EnvironmentService2{state;notify;compiler;layers;constructor(state,notify,compiler,layers){this.state=state,this.notify=notify,this.compiler=compiler,this.layers=layers}prependBindingTransformer(transformer){return this.state.environment.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.state.environment.bindingTransformers.append(transformer)}clearBindingTransformers(){this.state.environment.bindingTransformers.clear()}prependBindingParser(parser){return this.state.environment.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.state.environment.bindingParsers.append(parser)}clearBindingParsers(){this.state.environment.bindingParsers.clear()}registerToken(token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName2(token.name)}catch(error2){return this.notify.emitError("token-name-normalize-error",error2,getErrorMessage2(error2,"Failed to register keymap token")),NOOP3}if(this.state.environment.tokens.has(normalizedToken))return this.notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP3;let parsedToken;try{parsedToken=this.compiler.parseTokenKey(token.key)}catch(error2){return this.notify.emitError("token-parse-error",error2,getErrorMessage2(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP3}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(this.state.environment.tokens);nextTokens.set(normalizedToken,registeredToken);try{this.layers.applyTokenState(nextTokens)}catch(error2){return this.notify.emitError("token-register-error",error2,getErrorMessage2(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP3}return()=>{if(this.state.environment.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(this.state.environment.tokens);nextTokens2.delete(normalizedToken);try{this.layers.applyTokenState(nextTokens2)}catch(error2){this.notify.emitError("token-unregister-error",error2,getErrorMessage2(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}prependBindingExpander(expander){return this.state.environment.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.state.environment.bindingExpanders.append(expander)}clearBindingExpanders(){this.state.environment.bindingExpanders.clear()}registerLayerFields(fields){return registerFieldCompilers2(fields,{kind:"layer",reservedFields:RESERVED_LAYER_FIELDS2,registeredFields:this.state.environment.layerFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerBindingFields(fields){return registerFieldCompilers2(fields,{kind:"binding",reservedFields:RESERVED_BINDING_FIELDS2,registeredFields:this.state.environment.bindingFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerCommandFields(fields){return registerFieldCompilers2(fields,{kind:"command",reservedFields:RESERVED_COMMAND_FIELDS2,registeredFields:this.state.environment.commandFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}}function sortLayers2(layers){return[...layers].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return right.order-left.order})}function createCommandLookup2(commands){if(commands.length===0)return;let lookup=new Map;for(let command of commands)lookup.set(command.name,command);return lookup}function addRegisteredCommandNames2(target,commands){for(let command of commands)target.set(command.name,(target.get(command.name)??0)+1)}function removeRegisteredCommandNames2(target,commands){for(let command of commands){let count=target.get(command.name);if(!count||count<=1){target.delete(command.name);continue}target.set(command.name,count-1)}}function getSequenceNode2(root,sequence){let node=root;for(let part of sequence)if(node=node.children.get(part.match),!node)return;return node}function buildLayerBindingAnalyses2(root,compiledBindings){return compiledBindings.map((binding)=>{let node=binding.event==="press"?getSequenceNode2(root,binding.sequence):void 0;return{sequence:cloneKeySequence2(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceBinding:snapshotParsedBindingInput2(binding.sourceBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,sourceBindingIndex:binding.sourceBindingIndex,hasCommandAtSequence:node?node.bindings.some((candidate)=>candidate.command!==void 0):!1,hasContinuations:node?node.children.size>0:!1}})}class LayerService2{state;notify;conditions;activation;options;constructor(state,notify,conditions,activation,options){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation,this.options=options}registerLayer(layer){return this.notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&this.options.host.isTargetDestroyed(target))return this.notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP22;let bindingInputs,requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields,commands,commandLookup,targetMode;try{targetMode=this.normalizeTargetMode(layer),bindingInputs=snapshotBindingInputs2(layer.bindings??[]),commands=!layer.commands||layer.commands.length===0?[]:this.options.commands.normalizeCommands(layer.commands),commandLookup=createCommandLookup2(commands),{requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields}=this.compileLayerRuntimeState(layer)}catch(error2){return this.notify.emitError("register-layer-failed",error2,getErrorMessage2(error2,"Failed to register keymap layer")),NOOP22}let order=this.state.core.order++,compiledBindings=this.options.compiler.compileBindings(bindingInputs,this.state.environment.tokens,target,order,compileFields);if(compiledBindings.bindings.length===0&&!compiledBindings.hasTokenBindings&&commands.length===0)return NOOP22;this.runLayerAnalyzers({target,order,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,root:compiledBindings.root,hasTokenBindings:compiledBindings.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,conditionKeys,hasUnkeyedMatchers,matchCacheDirty:!0,compileFields,commands,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,hasUnkeyedCommands:commands.some((command)=>command.hasUnkeyedMatchers),hasUnkeyedBindings:compiledBindings.bindings.some((binding)=>binding.hasUnkeyedMatchers),hasTokenBindings:compiledBindings.hasTokenBindings,root:compiledBindings.root};if(this.state.layers.layers.add(registeredLayer),registeredLayer.commands.length>0)this.state.layers.layersWithCommands+=1,this.state.commands.commandMetadataVersion+=1,addRegisteredCommandNames2(this.state.commands.registeredNames,registeredLayer.commands);if(registeredLayer.requires.length>0||registeredLayer.matchers.length>0)this.state.layers.layersWithConditions+=1;this.connectRuntimeMatchable(registeredLayer);for(let command of registeredLayer.commands)this.connectRuntimeMatchable(command);for(let binding of registeredLayer.compiledBindings)this.connectRuntimeMatchable(binding);if(this.indexLayer(registeredLayer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),target){let onTargetDestroy=()=>{this.unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=this.options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)this.activation.ensureValidPendingSequence();return this.notify.queueStateChange(),()=>{this.unregisterLayer(registeredLayer)}})}applyTokenState(nextTokens){this.notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of this.state.layers.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,this.compileLayerBindings(layer,nextTokens))}this.state.environment.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;if(shouldClearPending)this.activation.setPendingSequence(null);if(nextCompilations.size>0)this.notify.queueStateChange()})}recompileBindings(){this.notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of this.state.layers.layers){if(layer.bindingInputs.length===0)continue;let compilation=this.compileLayerBindings(layer,this.state.environment.tokens);if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)this.activation.setPendingSequence(null);if(recompiledLayers>0)this.notify.queueStateChange()})}prependLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.prepend(analyzer)}appendLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.append(analyzer)}clearLayerAnalyzers(){this.state.layers.layerAnalyzers.clear()}cleanup(){for(let layer of this.state.layers.layers){this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}}normalizeTargetMode(layer){if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0}runLayerAnalyzers(options){let analyzers=this.state.layers.layerAnalyzers.values();if(analyzers.length===0)return;let bindings=buildLayerBindingAnalyses2(options.root,options.compiledBindings),ctx={target:options.target,order:options.order,bindingInputs:options.bindingInputs,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution:(command)=>{return this.options.commands.getCommandResolutionStatus(command,options.commandLookup)},warn:(code,warning,message)=>{this.notify.emitWarning(code,warning,message)},warnOnce:(key,code,warning,message)=>{this.notify.warnOnce(key,code,warning,message)},error:(code,error2,message)=>{this.notify.emitError(code,error2,message)}};for(let analyzer of analyzers)try{analyzer(ctx)}catch(error2){this.notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}compileLayerRuntimeState(layer){let mergedRequires={},matchers=[],compileFields=Object.create(null),conditionKeys=new Set,hasUnkeyedMatchers=!1;for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS2.has(fieldName))continue;if(value===void 0)continue;compileFields[fieldName]=snapshotDataValue2(value);let compiler=this.state.environment.layerFields.get(fieldName);if(!compiler){this.options.warnUnknownField("layer",fieldName);continue}compiler(value,{require:(name,requiredValue)=>{mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},activeWhen:(matcher)=>{let runtimeMatcher=this.conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;matchers.push(runtimeMatcher)}})}return{requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,compileFields:Object.keys(compileFields).length>0?Object.freeze(compileFields):void 0}}compileLayerBindings(layer,tokens2){return this.options.compiler.compileBindings(layer.bindingInputs,tokens2,layer.target,layer.order,layer.compileFields)}applyCompiledBindings(layer,compilation){this.runLayerAnalyzers({target:layer.target,order:layer.order,commandLookup:layer.commandLookup,bindingInputs:layer.bindingInputs,compiledBindings:compilation.bindings,root:compilation.root,hasTokenBindings:compilation.hasTokenBindings});for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.root=compilation.root,layer.compiledBindings=compilation.bindings,layer.hasUnkeyedBindings=compilation.bindings.some((binding)=>binding.hasUnkeyedMatchers),layer.hasTokenBindings=compilation.hasTokenBindings;for(let binding of layer.compiledBindings)this.connectRuntimeMatchable(binding);return this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer)??!1}indexLayer(layer){this.state.layers.sortedLayers=sortLayers2([...this.state.layers.sortedLayers,layer]),this.state.layers.activeLayersVersion+=1}removeLayerFromIndex(layer){this.state.layers.sortedLayers=this.state.layers.sortedLayers.filter((candidate)=>candidate!==layer),this.state.layers.activeLayersVersion+=1}unregisterLayer(layer){this.notify.runWithStateChangeBatch(()=>{if(!this.state.layers.layers.delete(layer))return;if(layer.requires.length>0||layer.matchers.length>0)this.state.layers.layersWithConditions-=1;if(layer.commands.length>0)this.state.layers.layersWithCommands-=1,this.state.commands.commandMetadataVersion+=1,removeRegisteredCommandNames2(this.state.commands.registeredNames,layer.commands);this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);if(this.removeLayerFromIndex(layer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer))this.activation.setPendingSequence(null);else if(layer.commands.length>0&&!this.options.host.isDestroyed)this.activation.ensureValidPendingSequence();this.notify.queueStateChange()})}connectRuntimeMatchable(target){this.attachReactiveMatchers(target),this.conditions.indexRuntimeMatchable(target)}disconnectRuntimeMatchable(target){this.detachReactiveMatchers(target),this.conditions.unindexRuntimeMatchable(target)}attachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(target.matchCacheDirty=!0,!this.activation.hasPendingSequenceState()){this.notify.queueStateChange();return}this.notify.runWithStateChangeBatch(()=>{this.activation.revalidatePendingSequenceIfNeeded(),this.notify.queueStateChange()})})}catch(error2){this.notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage2(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}}detachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){this.notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage2(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}}}class Emitter3{onError;listeners=Object.create(null);constructor(onError){this.onError=onError}hook(name,listener){let current=this.listeners[name]??[];return this.listeners[name]=[...current,listener],()=>{let current2=this.listeners[name];if(!current2||current2.length===0)return;let next=current2.filter((candidate)=>candidate!==listener);if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}}has(name){return(this.listeners[name]?.length??0)>0}off(name,listener){let current=this.listeners[name];if(!current||current.length===0)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===current.length)return;if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}clear(){this.listeners=Object.create(null)}emit(name,...args){let listeners2=this.listeners[name];if(!listeners2||listeners2.length===0)return;for(let listener of listeners2)try{if(args.length===0)listener();else listener(args[0])}catch(error2){this.onError(name,error2)}}}class NotificationService2{state;events;hooks;constructor(state,events,hooks){this.state=state,this.events=events,this.hooks=hooks}runWithStateChangeBatch(fn){this.state.notify.stateChangeDepth+=1;try{return fn()}finally{if(this.state.notify.stateChangeDepth-=1,this.state.notify.stateChangeDepth===0)this.flushStateChange()}}queueStateChange(){if(this.state.notify.derivedStateVersion+=1,!this.hooks.has("state"))return;if(this.state.notify.stateChangePending=!0,this.state.notify.stateChangeDepth===0&&!this.state.notify.flushingStateChange)this.flushStateChange()}emitWarning(code,warning,message){if(!this.events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}this.events.emit("warning",{code,message,warning})}emitError(code,error2,message){if(!this.events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}this.events.emit("error",{code,message,error:error2})}reportListenerError(name,error2){if(name==="state"){this.emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){this.emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}}warnOnce(key,code,warning,message){if(this.state.notify.usedWarningKeys.has(key))return;this.state.notify.usedWarningKeys.add(key),this.emitWarning(code,warning,message)}flushStateChange(){if(!this.state.notify.stateChangePending||this.state.notify.stateChangeDepth>0||this.state.notify.flushingStateChange)return;this.state.notify.flushingStateChange=!0;try{let iterations=0;while(this.state.notify.stateChangePending&&this.state.notify.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS2){this.state.notify.stateChangePending=!1,this.emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS2},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS2} iterations; pending state notifications were dropped`);break}iterations+=1,this.state.notify.stateChangePending=!1,this.hooks.emit("state")}}finally{this.state.notify.flushingStateChange=!1}}}class RuntimeService2{state;notify;conditions;activation;constructor(state,notify,conditions,activation){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation}getData(name){return this.state.runtime.data[name]}setData(name,value){this.notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in this.state.runtime.data))return;delete this.state.runtime.data[name],this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange();return}if(Object.is(this.state.runtime.data[name],value))return;this.state.runtime.data[name]=value,this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange()})}getReadonlyData(){if(this.state.runtime.readonlyDataVersion===this.state.runtime.dataVersion)return this.state.runtime.readonlyData;return this.state.runtime.readonlyData=Object.freeze({...this.state.runtime.data}),this.state.runtime.readonlyDataVersion=this.state.runtime.dataVersion,this.state.runtime.readonlyData}}class CopyOnWriteRegistry2{items=[];getItems(){return this.items}setItems(items){this.items=items}removeItem(value){let current=this.items;if(current.length===0)return!1;let next=current.filter((candidate)=>candidate!==value);if(next.length===current.length)return!1;return this.items=next,!0}has(){return this.items.length>0}clear(){this.items=[]}}function createKeymapState2(){return{core:{order:0},environment:{tokens:new Map,layerFields:new Map,bindingExpanders:new OrderedRegistry2,bindingParsers:new OrderedRegistry2,bindingTransformers:new OrderedRegistry2,bindingFields:new Map,commandFields:new Map},dispatch:{eventMatchResolvers:new OrderedRegistry2,disambiguationResolvers:new OrderedRegistry2,keyHooks:new PriorityRegistry2,rawHooks:new PriorityRegistry2},layers:{layers:new Set,sortedLayers:[],activeLayersVersion:0,activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],layersWithConditions:0,layersWithCommands:0,layerAnalyzers:new OrderedRegistry2},commands:{commandMetadataVersion:0,registeredNames:new Map,commandResolvers:new OrderedRegistry2,activeCommandViewVersion:-1,activeCommandView:void 0,registeredCommandViewVersion:-1,registeredCommandView:void 0,registeredCommandEntriesCacheVersion:-1,registeredCommandEntriesCache:[]},projection:{pendingSequence:null,pendingSequenceCacheVersion:-1,pendingSequenceCache:[],activeKeysPlainCacheVersion:-1,activeKeysPlainCache:[],activeKeysBindingsCacheVersion:-1,activeKeysBindingsCache:[],activeKeysMetadataCacheVersion:-1,activeKeysMetadataCache:[],activeKeysBindingsAndMetadataCacheVersion:-1,activeKeysBindingsAndMetadataCache:[]},conditions:{runtimeKeyDependents:new Map},runtime:{data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA2},notify:{derivedStateVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}}function getKeyMatchKey2(input){return resolveKeyMatch2(input)}class Keymap2{host;state=createKeymapState2();cleanedUp=!1;resources=new Map;cleanupListeners=[];events=new Emitter3(()=>{});hooks;notify;activation;runtime;conditions;catalog;executor;compiler;dispatch;layers;environment;keypressListener;keyreleaseListener;rawListener;focusedTargetListener;constructor(host){if(this.host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.hooks=new Emitter3((name,error2)=>{this.notify.reportListenerError(name,error2)}),this.notify=new NotificationService2(this.state,this.events,this.hooks),this.conditions=new ConditionService2(this.state,this.notify),this.catalog=new CommandCatalogService2(this.state,this.host,this.notify,this.conditions,{onCommandResolversChanged:()=>{this.activation.ensureValidPendingSequence()}}),this.activation=new ActivationService2(this.state,this.host,this.hooks,this.notify,this.conditions,this.catalog,{onPendingSequenceChanged:(previous,next)=>{this.dispatch?.handlePendingSequenceChange(previous,next)}}),this.runtime=new RuntimeService2(this.state,this.notify,this.conditions,this.activation),this.executor=new CommandExecutorService2(this.notify,this.runtime,this.activation,this.catalog,{keymap:this,createCommandEvent:()=>this.host.createCommandEvent()}),this.compiler=new CompilerService2(this.state,this.notify,this.conditions,{warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.warnUnknownToken(token,sequence)}}),this.layers=new LayerService2(this.state,this.notify,this.conditions,this.activation,{compiler:this.compiler,commands:this.catalog,host:this.host,warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)}}),this.environment=new EnvironmentService2(this.state,this.notify,this.compiler,this.layers),this.dispatch=new DispatchService2(this.state,this.notify,this.runtime,this.activation,this.conditions,this.executor,this.compiler,this.catalog,this.layers),this.keypressListener=(event)=>{this.dispatch.handleKeyEvent(event,!1)},this.keyreleaseListener=(event)=>{this.dispatch.handleKeyEvent(event,!0)},this.rawListener=(sequence)=>{return this.dispatch.handleRawSequence(sequence)},this.focusedTargetListener=(focused)=>{this.handleFocusedTargetChange(focused)},this.cleanupListeners.push(this.host.onKeyPress(this.keypressListener)),this.cleanupListeners.push(this.host.onKeyRelease(this.keyreleaseListener)),this.host.onRawInput)this.cleanupListeners.push(this.host.onRawInput(this.rawListener));if(this.cleanupListeners.push(this.host.onFocusChange(this.focusedTargetListener)),this.host.onDestroy)this.cleanupListeners.push(this.host.onDestroy(()=>{this.cleanup()}))}cleanup(){if(this.cleanedUp)return;this.cleanedUp=!0,this.activation.setPendingSequence(null);for(let resource of this.resources.values())resource.dispose();this.resources.clear(),this.layers.cleanup();for(let cleanupListener of this.cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.runtime.setData(name,value)}getData(name){return this.runtime.getData(name)}hasPendingSequence(){return this.activation.ensureValidPendingSequence()!==void 0}getPendingSequence(){return this.activation.getPendingSequence()}createKeyMatcher(key){let match=this.compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey2(input)===match}}clearPendingSequence(){this.activation.setPendingSequence(null)}popPendingSequence(){return this.activation.popPendingSequence()}getActiveKeys(options){return this.activation.getActiveKeys(options)}getCommands(query2){return this.catalog.getCommands(query2)}getCommandEntries(query2){return this.catalog.getCommandEntries(query2)}normalizeCommandName(name){return normalizeCommandName2(name)}normalizeBindings(bindings){return normalizeBindingInputs2(bindings)}acquireResource(key,setup){if(this.cleanedUp||this.host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.resources.get(key);if(existing)return existing.count+=1,()=>{this.releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.resources.set(key,resource),()=>{this.releaseResource(key,resource)}}runCommand(cmd,options){return this.executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.events.hook(name,fn);if(name==="error")return this.events.hook(name,fn);return this.hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.dispatch.intercept(name,fn,options);return this.dispatch.intercept(name,fn,options)}registerLayer(layer){return this.layers.registerLayer(layer)}registerLayerFields(fields){return this.environment.registerLayerFields(fields)}prependBindingTransformer(transformer){return this.environment.prependBindingTransformer(transformer)}appendBindingTransformer(transformer){return this.environment.appendBindingTransformer(transformer)}clearBindingTransformers(){this.environment.clearBindingTransformers()}prependBindingParser(parser){return this.environment.prependBindingParser(parser)}appendBindingParser(parser){return this.environment.appendBindingParser(parser)}clearBindingParsers(){this.environment.clearBindingParsers()}registerToken(token){return this.environment.registerToken(token)}prependBindingExpander(expander){return this.environment.prependBindingExpander(expander)}appendBindingExpander(expander){return this.environment.appendBindingExpander(expander)}clearBindingExpanders(){this.environment.clearBindingExpanders()}registerBindingFields(fields){return this.environment.registerBindingFields(fields)}registerCommandFields(fields){return this.environment.registerCommandFields(fields)}prependCommandResolver(resolver){return this.catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.layers.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.layers.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.layers.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.dispatch.clearDisambiguationResolvers()}handleFocusedTargetChange(_focused){this.notify.runWithStateChangeBatch(()=>{this.activation.setPendingSequence(null),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(_focused),this.notify.queueStateChange()})}warnUnknownField(kind,fieldName){this.notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}warnUnknownToken(token,sequence){this.notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}releaseResource(key,resource){if(this.resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.resources.delete(key)}}function parseObjectKeyInput(ctx,key,display,match,tokenName){return ctx.parseObjectKey(key,{display,match,tokenName})}function isNamedSingleStrokeKey(input,extraNames){let normalized=input.trim().toLowerCase();if(!normalized)return!1;if(namedSingleStrokeKeys.has(normalized))return!0;if(extraNames?.has(normalized))return!0;return/^f\d{1,2}$/i.test(normalized)}function isSingleStrokeString(input,tokens2,normalizeTokenName,extraNames){if(input===" "||input==="+")return!0;if(input.length===1)return!0;if(tokens2.has(normalizeTokenName(input)))return!0;if(input.includes("+"))return!0;return isNamedSingleStrokeKey(input,extraNames)}function parseStringKeyPart(input,ctx){if(input===" ")return ctx.parseObjectKey({name:"space"},{display:"space"});if(input==="+")return ctx.parseObjectKey({name:"+"},{display:"+"});let parts=input.split("+"),name="",displayName="",ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;for(let rawPart of parts){let part=rawPart.trim();if(!part)continue;let lowered=part.toLowerCase();if(lowered==="ctrl"||lowered==="control"){ctrl=!0;continue}if(lowered==="shift"){shift=!0;continue}if(lowered==="meta"||lowered==="alt"||lowered==="option"){meta=!0;continue}if(lowered==="super"){superKey=!0;continue}if(lowered==="hyper"){hyper=!0;continue}if(name)throw Error(`Invalid key "${input}": multiple key names are not supported`);name=part,displayName=lowered}if(!name)throw Error(`Invalid key "${input}": missing key name`);let displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),ctx.parseObjectKey({name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")})}function registerDefaultBindingParser(keymap){return keymap.appendBindingParser(defaultBindingParser)}function registerDefaultEventMatchResolver(keymap){return keymap.appendEventMatchResolver(defaultEventMatchResolver)}function registerDefaultKeys(keymap){let offParser=registerDefaultBindingParser(keymap),offResolver=registerDefaultEventMatchResolver(keymap);return()=>{offResolver(),offParser()}}function isReactiveMatcher22(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function normalizeEnabledValue(fieldName,value){if(typeof value==="boolean")return value;if(typeof value==="function")return value;if(isReactiveMatcher22(value))return value;throw Error(`Keymap enabled field "${fieldName}" must be a boolean, a function, or a reactive matcher`)}function registerEnabledFields(keymap){let offLayerFields=keymap.registerLayerFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}}),offCommandFields=keymap.registerCommandFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}});return()=>{offCommandFields(),offLayerFields()}}function normalizeMetadataText(fieldName,value){if(typeof value!=="string")throw Error(`Keymap metadata field "${fieldName}" must be a string`);let trimmed=value.trim();if(!trimmed)throw Error(`Keymap metadata field "${fieldName}" cannot be empty`);return trimmed}function registerMetadataFields(keymap){let offBindingFields=keymap.registerBindingFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},group(value,ctx){ctx.attr("group",normalizeMetadataText("group",value))}}),offCommandFields=keymap.registerCommandFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},title(value,ctx){ctx.attr("title",normalizeMetadataText("title",value))},category(value,ctx){ctx.attr("category",normalizeMetadataText("category",value))}});return()=>{offCommandFields(),offBindingFields()}}function createSyntheticCommandEvent(){return new KeyEvent({name:"command",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:"",number:!1,raw:"",eventType:"press",source:"raw"})}function createOpenTuiKeymapHost(renderer){return{rootTarget:renderer.root,get isDestroyed(){return renderer.isDestroyed},getFocusedTarget(){let focused=renderer.currentFocusedRenderable;if(!focused||focused.isDestroyed||!focused.focused)return null;return focused},getParentTarget(target){return target.parent},isTargetDestroyed(target){return target.isDestroyed},onKeyPress(listener){return renderer.keyInput.prependListener("keypress",listener),()=>{renderer.keyInput.off("keypress",listener)}},onKeyRelease(listener){return renderer.keyInput.prependListener("keyrelease",listener),()=>{renderer.keyInput.off("keyrelease",listener)}},onFocusChange(listener){return renderer.on(CliRenderEvents.FOCUSED_RENDERABLE,listener),()=>{renderer.off(CliRenderEvents.FOCUSED_RENDERABLE,listener)}},onDestroy(listener){return renderer.once(CliRenderEvents.DESTROY,listener),()=>{renderer.off(CliRenderEvents.DESTROY,listener)}},onTargetDestroy(target,listener){return target.once(RenderableEvents.DESTROYED,listener),()=>{target.off(RenderableEvents.DESTROYED,listener)}},onRawInput(listener){return renderer.prependInputHandler(listener),()=>{renderer.removeInputHandler(listener)}},createCommandEvent(){return createSyntheticCommandEvent()}}}function createOpenTuiKeymap(renderer){if(renderer.isDestroyed)throw Error("Cannot create a keymap for a destroyed renderer");return new Keymap2(createOpenTuiKeymapHost(renderer))}function createDefaultOpenTuiKeymap(renderer){let keymap=createOpenTuiKeymap(renderer);return registerDefaultKeys(keymap),registerEnabledFields(keymap),registerMetadataFields(keymap),keymap}var RESERVED_COMMAND_FIELDS2,RESERVED_BINDING_FIELDS2,RESERVED_LAYER_FIELDS2,DEFAULT_COMMAND_SEARCH_FIELDS2,SNAPSHOT_COMMAND_METADATA_OPTIONS2,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2,EMPTY_COMMAND_FIELDS2,EMPTY_COMPILE_FIELDS2,EMPTY_REQUIRES2,EMPTY_MATCHERS2,EMPTY_CONDITION_KEYS2,KEY_DISAMBIGUATION_DECISION2,KEY_DEFERRED_DISAMBIGUATION_DECISION2,NOOP3=()=>{},NOOP22=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS2=1000,OrderedRegistry2,PriorityRegistry2,EMPTY_DATA2,namedSingleStrokeKeys,defaultBindingParser=(ctx)=>{let{input,index,tokens:tokens2,normalizeTokenName}=ctx;if(index===0&&isSingleStrokeString(input,tokens2,normalizeTokenName)){if(input===" "||input==="+")return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length};let normalizedToken=normalizeTokenName(input),token=tokens2.get(normalizedToken);if(token)return{parts:[parseObjectKeyInput(ctx,token.stroke,normalizedToken,token.match,normalizedToken)],nextIndex:input.length,usedTokens:[normalizedToken]};return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length}}let char=input[index];if(char===void 0)return;if(char==="<"){let end=input.indexOf(">",index);if(end===-1)throw Error(`Invalid key sequence "${input}": unterminated token`);let tokenName=normalizeTokenName(input.slice(index,end+1)),token=tokens2.get(tokenName);if(!token)return{parts:[],nextIndex:end+1,unknownTokens:[tokenName]};return{parts:[parseObjectKeyInput(ctx,token.stroke,tokenName,token.match,tokenName)],nextIndex:end+1,usedTokens:[tokenName]}}return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1}},defaultEventMatchResolver=(event,ctx)=>{return[ctx.resolveKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0})]};var init_opentui=__esm(async()=>{await init_core();RESERVED_COMMAND_FIELDS2=new Set(["name","run"]),RESERVED_BINDING_FIELDS2=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS2=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS2=["name"],SNAPSHOT_COMMAND_METADATA_OPTIONS2=Object.freeze({deep:!0,preserveNonPlainObjects:!0}),SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2=Object.freeze({deep:!0,freeze:!0,preserveNonPlainObjects:!0}),EMPTY_COMMAND_FIELDS2=Object.freeze({});EMPTY_COMPILE_FIELDS2=Object.freeze({}),EMPTY_REQUIRES2=[],EMPTY_MATCHERS2=[],EMPTY_CONDITION_KEYS2=[];KEY_DISAMBIGUATION_DECISION2=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION2=Symbol("keymap-deferred-disambiguation-decision");OrderedRegistry2=class OrderedRegistry2 extends CopyOnWriteRegistry2{append(value){return this.setItems([...this.getItems(),value]),()=>{this.remove(value)}}prepend(value){return this.setItems([value,...this.getItems()]),()=>{this.remove(value)}}remove(value){return this.removeItem(value)}values(){return this.getItems()}};PriorityRegistry2=class PriorityRegistry2 extends CopyOnWriteRegistry2{order=0;register(listener,options){let registered={...options,listener,order:this.order++};return this.setItems([...this.getItems(),registered].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return left.order-right.order})),()=>{this.removeItem(registered)}}entries(){return this.getItems()}};EMPTY_DATA2=Object.freeze({});namedSingleStrokeKeys=new Set(["up","down","left","right","clear","escape","return","linefeed","enter","tab","backspace","delete","insert","home","end","pageup","pagedown","space","lt","gt","plus","minus","equal","comma","period","slash","backslash","semicolon","quote","backquote","leftbracket","rightbracket","capslock","numlock","scrolllock","printscreen","pause","menu","apps","kp0","kp1","kp2","kp3","kp4","kp5","kp6","kp7","kp8","kp9","kpdecimal","kpdivide","kpmultiply","kpminus","kpplus","kpenter","kpequal","kpseparator","kpleft","kpright","kpup","kpdown","kppageup","kppagedown","kphome","kpend","kpinsert","kpdelete","mediaplay","mediapause","mediaplaypause","mediareverse","mediastop","mediafastforward","mediarewind","medianext","mediaprev","mediarecord","volumedown","volumeup","mute","leftshift","leftctrl","leftalt","leftsuper","lefthyper","leftmeta","rightshift","rightctrl","rightalt","rightsuper","righthyper","rightmeta","iso_level3_shift","iso_level5_shift","option","alt","meta","super","hyper","control","ctrl","shift"])});function createTuiKeymap(renderer){let keymap=createDefaultOpenTuiKeymap(renderer);return registerLeader(keymap,{trigger:{name:"space"}}),registerEscapeClearsPendingSequence(keymap),keymap}var init_keymap=__esm(async()=>{init_addons();await init_opentui()});import{spawnSync as spawnSync10}from"child_process";import{existsSync as existsSync76}from"fs";function resolveTuiTmuxConf(){let tuiConf=`${process.env.GENIE_HOME??`${process.env.HOME}/.genie`}/tui-tmux.conf`;return existsSync76(tuiConf)?tuiConf:"/dev/null"}function safeHex(value,fallback){if(!value)return fallback;let trimmed=value.trim();return HEX_COLOR_RE.test(trimmed)?trimmed:fallback}function resolveThemePalette(snapshot){if(snapshot.mode==="dark")return{bg:palette.bg,bgRaised:palette.bgRaised,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,warning:palette.warning,info:palette.info};return{...lightPalette,bg:safeHex(snapshot.terminalBackground,lightPalette.bg),text:safeHex(snapshot.terminalForeground,lightPalette.text)}}function flattenTmuxCommands(commands){let args=[];return commands.forEach((command,index)=>{if(index>0)args.push(";");args.push(...command)}),args}function buildTuiTmuxThemeCommands(snapshot){let theme=resolveThemePalette(snapshot),terminalForeground=safeHex(snapshot.terminalForeground,theme.text),terminalBackground=safeHex(snapshot.terminalBackground,theme.bg);return flattenTmuxCommands([["set-environment","-g","GENIE_TUI_THEME_MODE",snapshot.mode],["set-environment","-g","GENIE_TUI_TERMINAL_FG",terminalForeground],["set-environment","-g","GENIE_TUI_TERMINAL_BG",terminalBackground],["set-environment","-g","GENIE_TUI_TMUX_BG",theme.bg],["set-environment","-g","GENIE_TUI_TMUX_TEXT",theme.text],["set-environment","-g","GENIE_TUI_TMUX_ACCENT",theme.accent],["set-option","-g","pane-border-style",`fg=${theme.border}`],["set-option","-g","pane-active-border-style",`fg=${theme.accent}`],["set-option","-g","message-style",`bg=${theme.bgRaised},fg=${theme.info}`],["set-option","-g","message-command-style",`bg=${theme.bgRaised},fg=${theme.warning}`],["set-option","-g","status-style",`bg=${theme.bg},fg=${theme.text}`],["set-window-option","-g","mode-style",`bg=${theme.accent},fg=${theme.bg}`],["set-window-option","-g","clock-mode-colour",theme.accent]])}function syncTuiTmuxTheme(snapshot,deps={}){let run=deps.spawnSync??spawnSync10,tmux=deps.tmuxBin??tmuxBin(),socketName=deps.socketName??TUI_TMUX_SOCKET,configPath2=deps.configPath??resolveTuiTmuxConf(),timeoutMs=deps.timeoutMs??DEFAULT_TMUX_SYNC_TIMEOUT_MS;return run(tmux,["-L",socketName,"-f",configPath2,...buildTuiTmuxThemeCommands(snapshot)],{stdio:"ignore",timeout:timeoutMs}).status===0}var TUI_TMUX_SOCKET="genie-tui",DEFAULT_TMUX_SYNC_TIMEOUT_MS=300,HEX_COLOR_RE,lightPalette;var init_tmux_theme_sync=__esm(()=>{init_ensure_tmux();init_theme2();HEX_COLOR_RE=/^#[0-9a-f]{6}$/i,lightPalette={bg:"#f5efe4",bgRaised:"#ebe3d7",text:"#24323a",textDim:"#56656d",textMuted:"#718087",border:"#c8bdae",accent:"#2f7a62",accentDim:"#3e9277",accentBright:"#17694f",warning:"#9a651e",info:"#406f8b"}});function readBool(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY3.has(normalized))return!0;if(FALSY.has(normalized))return!1;return fallback}function readPositiveInt(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:fallback}function inferThemeMode(background){if(!background||!/^#[0-9a-f]{6}$/i.test(background))return null;let r=Number.parseInt(background.slice(1,3),16),g2=Number.parseInt(background.slice(3,5),16),b3=Number.parseInt(background.slice(5,7),16);return(0.2126*r+0.7152*g2+0.0722*b3)/255>=0.5?"light":"dark"}function snapshotKey(snapshot){return[snapshot.mode,snapshot.terminalForeground??"",snapshot.terminalBackground??""].join("|")}function buildSnapshot(mode,colors8){let resolvedMode=mode??inferThemeMode(colors8?.defaultBackground);if(!resolvedMode)return null;return{mode:resolvedMode,terminalForeground:colors8?.defaultForeground,terminalBackground:colors8?.defaultBackground}}function installOpenTui20Bridge(renderer,options={}){let env2=options.env??process.env;if(!readBool(env2,"GENIE_TUI_TMUX_THEME_SYNC",!0))return()=>{};let syncTheme=options.syncTheme??syncTuiTmuxTheme,themeQueryTimeoutMs=readPositiveInt(env2,"GENIE_TUI_THEME_QUERY_TIMEOUT_MS",DEFAULT_THEME_QUERY_TIMEOUT_MS),tmuxApplyTimeoutMs=readPositiveInt(env2,"GENIE_TUI_TMUX_THEME_SYNC_TIMEOUT_MS",DEFAULT_TMUX_APPLY_TIMEOUT_MS),disposed=!1,lastSnapshot="",syncSnapshot=(snapshot)=>{if(disposed||!snapshot)return;let key=snapshotKey(snapshot);if(key===lastSnapshot)return;lastSnapshot=key;try{syncTheme(snapshot,{timeoutMs:tmuxApplyTimeoutMs})}catch{}},syncFromMode=(mode,colors8)=>{syncSnapshot(buildSnapshot(mode,colors8))},onThemeMode=(mode)=>syncFromMode(mode);renderer.on("theme_mode",onThemeMode),syncFromMode(renderer.themeMode),renderer.waitForThemeMode(themeQueryTimeoutMs).then((mode)=>syncFromMode(mode)).catch(()=>{});let paletteOptions={size:OPEN_TUI_02_PALETTE_SIZE,timeout:themeQueryTimeoutMs};return renderer.getPalette(paletteOptions).then((colors8)=>syncFromMode(renderer.themeMode,colors8)).catch(()=>{}),()=>{disposed=!0,renderer.off("theme_mode",onThemeMode)}}var TRUTHY3,FALSY,DEFAULT_THEME_QUERY_TIMEOUT_MS=700,DEFAULT_TMUX_APPLY_TIMEOUT_MS=300,OPEN_TUI_02_PALETTE_SIZE=16;var init_opentui_bridge=__esm(()=>{init_tmux_theme_sync();TRUTHY3=new Set(["1","true","yes","on"]),FALSY=new Set(["0","false","no","off"])});var exports_render={};__export(exports_render,{resolveTuiRendererConfig:()=>resolveTuiRendererConfig,renderNav:()=>renderNav});function readBool2(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY4.has(normalized))return!0;if(FALSY2.has(normalized))return!1;return fallback}function readPositiveInt2(env2,name){let raw=env2[name];if(!raw)return;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:void 0}function resolveTuiRendererConfig(env2=process.env,platform2=process.platform){let isDarwin=platform2==="darwin",targetFps=readPositiveInt2(env2,"GENIE_TUI_TARGET_FPS")??(isDarwin?8:30),configuredMaxFps=readPositiveInt2(env2,"GENIE_TUI_MAX_FPS")??(isDarwin?12:60),maxFps=Math.max(configuredMaxFps,targetFps),useMouse=readBool2(env2,"GENIE_TUI_MOUSE",!0),enableMouseMovement=useMouse&&readBool2(env2,"GENIE_TUI_MOUSE_MOVEMENT",!isDarwin),consoleEnabled=readBool2(env2,"GENIE_TUI_CONSOLE",!0),kittyKeyboardOptIn=readBool2(env2,"GENIE_TUI_KITTY_KEYBOARD",!isDarwin);return{exitOnCtrlC:!1,useThread:!isDarwin,targetFps,maxFps,useMouse,enableMouseMovement,useKittyKeyboard:kittyKeyboardOptIn?void 0:null,consoleMode:consoleEnabled?void 0:"disabled",openConsoleOnError:consoleEnabled&&!isDarwin}}async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer(resolveTuiRendererConfig()),disposeOpenTui20Bridge=installOpenTui20Bridge(renderer),keymap=createTuiKeymap(renderer);createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(KeymapProvider,{keymap,children:import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)},void 0,!1,void 0,this)),await new Promise((resolve21)=>{renderer.once("destroy",()=>{disposeOpenTui20Bridge(),resolve21()})})}var TRUTHY4,FALSY2;var init_render=__esm(async()=>{init_react();init_opentui_bridge();init_jsx_dev_runtime();await __promiseAll([init_core(),init_react2(),init_app(),init_keymap()]);TRUTHY4=new Set(["1","true","yes","on"]),FALSY2=new Set(["0","false","no","off"])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});import{appendFileSync as appendFileSync5,closeSync as closeSync6,mkdirSync as mkdirSync35,openSync as openSync6,readSync as readSync3,statSync as statSync16}from"fs";import{homedir as homedir51}from"os";import{join as join93}from"path";function genieHome6(){return process.env.GENIE_HOME??join93(homedir51(),".genie")}function extractPreviousRunCrashOutput(logPath){let fd=null;try{let size=statSync16(logPath).size;if(size===0)return"";let readSize=Math.min(size,TUI_CRASH_LOG_RECOVERY_MAX_BYTES);fd=openSync6(logPath,"r");let buffer2=Buffer.alloc(readSize);readSync3(fd,buffer2,0,readSize,size-readSize);let text=buffer2.toString("utf-8"),lastBannerIndex=text.lastIndexOf(TUI_CRASH_LOG_BANNER_PREFIX);if(lastBannerIndex<0)return"";let afterBannerNewline=text.indexOf(`
3964
+ `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve21(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve21(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve21)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve21(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve21)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve21(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve21)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve21(data)})})})})}function get3(valueObject,callback){return new Promise((resolve21)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve21(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>90)return palette.error;if(percent>70)return palette.warning;return palette.accent}function SystemStatsView({stats:stats2}){if(!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SystemStats(){let[stats2,setStats]=import_react23.useState(null),mountedRef=import_react23.useRef(!0);return import_react23.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),import_jsx_dev_runtime2.jsxDEV(SystemStatsView,{stats:stats2},void 0,!1,void 0,this)}var import_react23,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react23=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react25.useState("name"),[teamName,setTeamName]=import_react25.useState(""),[selected,setSelected]=import_react25.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react25.useState(0),nameError=import_react25.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react25.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react25.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react25.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react25.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react25.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",width:"100%",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.accent:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react25;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react2();import_react25=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.workState){case"in_flight":return"\u25C6";case"paused":return"\u25D0";case"done":return"\u2714";case"stuck":return"\u2718";default:break}switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CC";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CC"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.isClaudeLike)return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.success:palette.textDim;case"window":return node.data.active?palette.info:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.workState){case"in_flight":return palette.accentBright;case"paused":return palette.textDim;case"done":return palette.info;case"stuck":return palette.error;default:break}switch(node.wsAgentState){case"running":return palette.success;case"stopped":return palette.text;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.info;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.isClaudeLike)return palette.info;return palette.textDim}function getAgentSuffix(node){if(node.workState==="stuck")return" [stuck \u2014 press R to retry]";if(node.workState==="paused")return" [paused \u2014 auto-resume off]";if(node.workState==="done")return" [done]";if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";if(node.wsAgentState==="stopped")return" [Enter to start]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}function getNodeSuffix(node){if(node.type==="agent")return getAgentSuffix(node);if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.info;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react26,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react26=__toESM(require_react_development(),1),TreeNodeRow=import_react26.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix=getNodeSuffix(node),labelColor=selected?palette.accentBright:node.type==="agent"&&node.kind==="subagent"?palette.textDim:palette.text;return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.accentDim:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:labelColor,children:node.label},void 0,!1,void 0,this),suffix?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,process.env.GENIE_TUI_DEBUG==="1"?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react28.useEffect(()=>{let active=!0,lastErrorMessage=null,lastErrorLoggedAt=0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap),lastErrorMessage=null;let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){let message=err instanceof Error?err.message:String(err),now=Date.now();if(message!==lastErrorMessage||now-lastErrorLoggedAt>30000)console.error("TUI: diagnostics failed:",message),lastErrorMessage=message,lastErrorLoggedAt=now}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react28.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents2(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors,workStates:diagnostics.workStates})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react28.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react28.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react28.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react28.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function renderAlertBadge(alertCount){if(alertCount<=0)return null;return import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:[" ","\u25CF ",alertCount," alert",alertCount===1?"":"s"]},void 0,!0,void 0,this)}function countAgents(nodes,predicate){let count=0;for(let n of nodes){if(n.type==="agent"&&predicate(n))count++;if(n.children.length>0)count+=countAgents(n.children,predicate)}return count}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot){let agentCount=countAgents(sessionTree,()=>!0);if(agentCount>0)return{agentCount,runningCount:countAgents(sessionTree,(n)=>n.wsAgentState==="running")}}let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react28.useState(null),[sessionTree,setSessionTree]=import_react28.useState([]),[selectedIndex,setSelectedIndex]=import_react28.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react28.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react28.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react28.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react28.useState(null),lastTarget=import_react28.useRef(null),selectedNodeId=import_react28.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react28.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react28.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react28.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react28.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react28.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react28.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react28.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react28.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react28.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react28.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react28.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react28.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react28.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions",alertCount=diagnostics?.alertCount??0;return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null,renderAlertBadge(alertCount)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("ascii-font",{text:"GENIE",font:"tiny",color:palette.accent},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents2(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react28.useState(!1),pendingTeamNameRef=import_react28.useRef(null),handleOpenTeamCreate=import_react28.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react28.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react28.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react28.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect,spawn5=spawnAgent){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawn5(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix=Date.now()%1e4,role=`${agentFullName}-${suffix}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers.handleEnter();else if(n==="r")handlers.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join93,resolve:resolve21}=__require("path"),{existsSync:existsSync76,mkdirSync:mkdirSync35,openSync:openSync6}=__require("fs"),{homedir:homedir51}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve21(join93(wsRoot,"agents",parentName));if(existsSync76(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_IS_DAEMON:_d,...cleanEnv}=process.env,logDir=join93(homedir51(),".genie","logs","tui-spawn");try{mkdirSync35(logDir,{recursive:!0})}catch{}let logPath=join93(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync6(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve21,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve21(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react28;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_session_tree();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react28=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"Quit genie?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to quit "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Hint: Ctrl+D to detach (keep running)"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react2()});import{execSync as execSync18}from"child_process";import{readFileSync as readFileSync49}from"fs";function App({rightPane,workspaceRoot,initialAgent}){let renderer=useRenderer(),[showQuit,setShowQuit]=import_react32.useState(!1),[showHelp,setShowHelp]=import_react32.useState(!1),[activeSession,setActiveSession]=import_react32.useState(null);import_react32.useEffect(()=>{let title=activeSession?`${BASE_TERMINAL_TITLE} \u2014 ${activeSession}`:BASE_TERMINAL_TITLE;try{renderer.setTerminalTitle(title)}catch{}},[renderer,activeSession]);let handleQuit=import_react32.useCallback(()=>{try{let genieHome6=process.env.GENIE_HOME??`${process.env.HOME}/.genie`,pid=readFileSync49(`${genieHome6}/serve.pid`,"utf-8").trim();process.kill(Number.parseInt(pid,10),"SIGTERM")}catch{}try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]);useBindings(()=>({commands:[{name:"app.quit",title:"Quit",desc:"Show quit confirmation; press again to quit",category:"app",run(){if(showQuit)handleQuit();else setShowQuit(!0)}},{name:"app.help.toggle",title:"Toggle help overlay",desc:"Show/hide the keyboard shortcut overlay",category:"app",run(){setShowHelp((prev)=>!prev)}},{name:"app.console.toggle",title:"Toggle console overlay",desc:"Show/hide the OpenTUI console (logs)",category:"app",run(){renderer.console.toggle()}}],bindings:[{key:"ctrl+q",cmd:"app.quit"},{key:"f1",cmd:"app.help.toggle"},{key:"`",cmd:"app.console.toggle"}]}),[renderer,showQuit,handleQuit]);let handleTmuxSessionSelect=import_react32.useCallback((sessionName,windowIndex)=>{if(setActiveSession(sessionName),!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit||showHelp},void 0,!1,void 0,this),showHelp?import_jsx_dev_runtime2.jsxDEV(HelpOverlay,{onClose:()=>setShowHelp(!1)},void 0,!1,void 0,this):null,showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react32,BASE_TERMINAL_TITLE="genie tui";var init_app=__esm(async()=>{init_react();init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_HelpOverlay(),init_Nav(),init_QuitDialog()]);import_react32=__toESM(require_react_development(),1)});function getFocusedTargetIfAvailable(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath(host,focused){let path6=new Set;return forEachActivationTarget(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused(state,host,focused){if(state.activeLayersCacheVersion===state.activeLayersVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;let activeLayers=[],activationPath=getActivationPath(host,focused);for(let layer of state.sortedLayers)if(isLayerActiveForFocused(host,layer,focused,activationPath))activeLayers.push(layer);return state.activeLayersCacheVersion=state.activeLayersVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=activeLayers,activeLayers}function invalidateCachedActiveLayers(state){state.activeLayersCacheVersion=-1,state.activeLayersCacheFocused=void 0,state.activeLayersCache=[]}function isLayerActiveForFocused(host,layer,focused,activationPath=getActivationPath(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function normalizeBindingTokenName(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke(input){return{name:normalizeKeyName(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart(input,options){let stroke=cloneKeyStroke(normalizeKeyStroke(input));return{stroke,display:options?.display??stringifyCanonicalStroke(stroke),match:options?.match??createKeyMatch(stroke),tokenName:options?.tokenName?normalizeBindingTokenName(options.tokenName):void 0}}function cloneKeySequencePart(part){return{stroke:cloneKeyStroke(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName}}function cloneKeySequence(parts){return parts.map((part)=>cloneKeySequencePart(part))}function resolveKeyMatch(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch(input.stroke);return createKeyMatch(input)}function createKeyMatch(input){return`key:${buildKeyMatchId(normalizeKeyStroke(input))}`}function createTextKeyMatch(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke(input.stroke)}return stringifyCanonicalStroke(normalizeKeyStroke(input))}function stringifyKeySequence(input,options){return input.map((part)=>stringifyKeyStroke(part,options)).join("")}function stringifyCanonicalStroke(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getLiveHost(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function isSamePendingSequence(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.node!==right.node)return!1}return!0}class ActivationService{state;host;hooks;notify;conditions;catalog;options;constructor(state,host,hooks,notify,conditions,catalog,options={}){this.state=state,this.host=host,this.hooks=hooks,this.notify=notify,this.conditions=conditions,this.catalog=catalog,this.options=options}getFocusedTarget(){return getLiveHost(this.host).getFocusedTarget()}getFocusedTargetIfAvailable(){return getFocusedTargetIfAvailable(this.host)}setPendingSequence(next){let previous=this.state.projection.pendingSequence;if(isSamePendingSequence(previous,next))return;this.state.projection.pendingSequence=next,this.options.onPendingSequenceChanged?.(previous,next),this.invalidateCaches(),this.notifyPendingSequenceChange(),this.notify.queueStateChange()}ensureValidPendingSequence(){let pending=this.state.projection.pendingSequence;if(!pending)return;let focused=this.getFocusedTarget(),captures=pending.captures.filter((capture2)=>{return this.state.layers.layers.has(capture2.layer)&&this.isLayerActiveForFocused(capture2.layer,focused)&&this.conditions.layerMatchesRuntimeState(capture2.layer)&&this.nodeHasReachableBindings(capture2.node,focused)});if(captures.length===0){this.setPendingSequence(null);return}if(captures.length!==pending.captures.length)this.setPendingSequence({captures});return this.state.projection.pendingSequence??void 0}revalidatePendingSequenceIfNeeded(){if(this.host.isDestroyed||!this.state.projection.pendingSequence)return;this.ensureValidPendingSequence()}hasPendingSequenceState(){return!this.host.isDestroyed&&this.state.projection.pendingSequence!==null}getPendingSequence(){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion;if(projections.pendingSequenceCacheVersion===derivedStateVersion)return projections.pendingSequenceCache;let pending=this.ensureValidPendingSequence(),canUseCache=!pending||pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)),sequence=pending?this.collectSequencePartsFromPending(pending):[];if(canUseCache)projections.pendingSequenceCacheVersion=derivedStateVersion,projections.pendingSequenceCache=sequence;return sequence}popPendingSequence(){let pending=this.ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.node.depth<=1)return this.setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let parent=capture2.node.parent;if(!parent||!parent.stroke)continue;nextCaptures.push({layer:capture2.layer,node:parent})}if(nextCaptures.length===0)return this.setPendingSequence(null),!0;return this.setPendingSequence({captures:nextCaptures}),!0}getActiveKeys(options){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion,includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0;if(includeBindings){if(includeMetadata){if(projections.activeKeysBindingsAndMetadataCacheVersion===derivedStateVersion)return projections.activeKeysBindingsAndMetadataCache}else if(projections.activeKeysBindingsCacheVersion===derivedStateVersion)return projections.activeKeysBindingsCache}else if(includeMetadata){if(projections.activeKeysMetadataCacheVersion===derivedStateVersion)return projections.activeKeysMetadataCache}else if(projections.activeKeysPlainCacheVersion===derivedStateVersion)return projections.activeKeysPlainCache;let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),pending=this.ensureValidPendingSequence(),activeLayers=pending?[]:this.getActiveLayers(focused),canUseCache=pending?pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)):this.activeLayersCanCacheActiveKeys(activeLayers),activeKeys=pending?this.collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):this.collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(!canUseCache)return activeKeys;if(includeBindings)if(includeMetadata)projections.activeKeysBindingsAndMetadataCacheVersion=derivedStateVersion,projections.activeKeysBindingsAndMetadataCache=activeKeys;else projections.activeKeysBindingsCacheVersion=derivedStateVersion,projections.activeKeysBindingsCache=activeKeys;else if(includeMetadata)projections.activeKeysMetadataCacheVersion=derivedStateVersion,projections.activeKeysMetadataCache=activeKeys;else projections.activeKeysPlainCacheVersion=derivedStateVersion,projections.activeKeysPlainCache=activeKeys;return activeKeys}getActiveKeysForCaptures(captures,options){let includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0,focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused);return this.collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)}nodeHasReachableBindings(node,focused){return this.hasMatchingBindings(node.reachableBindings,focused,this.catalog.getActiveCommandView(focused))}getActiveLayers(focused){return getActiveLayersForFocused(this.state.layers,this.host,focused)}refreshActiveLayers(focused=this.getFocusedTargetIfAvailable()){getActiveLayersForFocused(this.state.layers,this.host,focused)}invalidateActiveLayers(){invalidateCachedActiveLayers(this.state.layers)}isLayerActiveForFocused(layer,focused){return isLayerActiveForFocused(this.host,layer,focused)}layerCanCacheActiveKeys(layer){return!layer.hasUnkeyedMatchers&&!layer.hasUnkeyedCommands&&!layer.hasUnkeyedBindings}activeLayersCanCacheActiveKeys(activeLayers){for(let layer of activeLayers)if(!this.layerCanCacheActiveKeys(layer))return!1;return!0}collectNodesFromNode(node){let nodes=[],current=node;while(current&&current.stroke)nodes.push(current),current=current.parent;return nodes.reverse(),nodes}collectSequencePartsFromPending(pending){let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),paths=pending.captures.map((capture2)=>this.collectNodesFromNode(capture2.node)),firstPath=paths[0];if(!firstPath||firstPath.length===0)return[];let parts=[];for(let index=0;index<firstPath.length;index+=1){let firstNode=firstPath[index];if(!firstNode?.stroke||firstNode.match===null)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let path6 of paths){let node=path6[index];if(!node)continue;let presentation=this.getNodePresentation(node,focused,activeView);if(display===void 0){display=presentation.display,tokenName=presentation.tokenName;continue}if(!hasDisplayConflict&&display!==presentation.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==presentation.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(firstNode.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart(firstNode.stroke,{display,match:firstNode.match,tokenName}))}return parts}collectMatchingBindings(bindings,focused,activeView){let matches=[];for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches}hasMatchingBindings(bindings,focused,activeView){for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))return!0;return!1}getNodePresentation(node,focused,activeView,reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView)){if(!node.stroke)return{display:""};let partIndex=node.depth-1,display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of reachableBindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(node.stroke);if(hasTokenConflict)tokenName=void 0;return{display,tokenName}}toActiveBinding(binding,focused,activeView){return{sequence:binding.sequence,command:binding.command,commandAttrs:this.catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}}collectActiveBindings(bindings,focused,activeView){return bindings.map((binding)=>this.toActiveBinding(binding,focused,activeView))}collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set,hasLayerConditions=this.state.layers.layersWithConditions>0;for(let layer of activeLayers){if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let[bindingKey,child]of layer.root.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set;for(let capture2 of captures)for(let[bindingKey,child]of capture2.node.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}selectActiveKey(node,includeBindings,focused,activeView){return node.children.size>0?this.selectPrefixActiveKey(node,includeBindings,focused,activeView):this.selectExactActiveKey(node,includeBindings,focused,activeView)}selectPrefixActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let prefixBindings=this.selectActiveBindings(node.bindings,focused,activeView);return{...this.getNodePresentation(node,focused,activeView,reachableBindings),continues:!0,firstBinding:prefixBindings?.bindings[0],commandBinding:prefixBindings?.commandBinding,bindings:includeBindings&&prefixBindings&&prefixBindings.bindings.length>0?[...prefixBindings.bindings]:void 0,stop:!0}}selectExactActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let selected=this.selectActiveBindings(node.bindings,focused,activeView);if(!selected)return;let display,tokenName;if(selected.bindings.length===1){let part=selected.bindings[0]?.sequence[node.depth-1];display=part?.display??stringifyKeyStroke(node.stroke),tokenName=part?.tokenName}else{let presentation=this.getNodePresentation(node,focused,activeView,selected.bindings);display=presentation.display,tokenName=presentation.tokenName}return{display,tokenName,continues:!1,firstBinding:selected.bindings[0],commandBinding:selected.commandBinding,bindings:includeBindings?[...selected.bindings]:void 0,stop:selected.stop}}selectActiveBindings(bindings,focused,activeView){let selected=[],commandBinding;for(let binding of bindings){if(!this.conditions.matchesConditions(binding)||!this.catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}}createActiveKeyState(stroke,selection,includeBindings){return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}}updateActiveKeyState(state,selection,includeBindings){if(!state.firstBinding&&selection.firstBinding)state.firstBinding=selection.firstBinding;if(!state.commandBinding&&selection.commandBinding)state.commandBinding=selection.commandBinding;if(selection.continues)state.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state.bindings){state.bindings=[...selection.bindings];return}state.bindings.push(...selection.bindings)}materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView){if(!state.commandBinding&&!state.continues)return;let activeKey={stroke:cloneKeyStroke(state.stroke),display:state.display,continues:state.continues};if(state.tokenName)activeKey.tokenName=state.tokenName;if(state.commandBinding)activeKey.command=state.commandBinding.command;if(includeBindings&&state.bindings&&state.bindings.length>0)activeKey.bindings=state.bindings.length===1?[this.toActiveBinding(state.bindings[0],focused,activeView)]:this.collectActiveBindings(state.bindings,focused,activeView);if(includeMetadata){if(state.firstBinding?.attrs)activeKey.bindingAttrs=state.firstBinding.attrs;let commandAttrs=state.commandBinding?this.catalog.getBindingCommandAttrs(state.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey}invalidateCaches(){this.state.projection.pendingSequenceCacheVersion=-1,this.state.projection.activeKeysPlainCacheVersion=-1,this.state.projection.activeKeysBindingsCacheVersion=-1,this.state.projection.activeKeysMetadataCacheVersion=-1,this.state.projection.activeKeysBindingsAndMetadataCacheVersion=-1}notifyPendingSequenceChange(){if(!this.hooks.has("pendingSequence"))return;this.hooks.emit("pendingSequence",this.state.projection.pendingSequence?this.collectSequencePartsFromPending(this.state.projection.pendingSequence):[])}}function mergeRequirement(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function isPlainObject2(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject2(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandChainCacheState(){return{resolvedWithoutRecordChains:new Map,resolvedWithRecordChains:new Map,fallbackWithoutRecord:new Map,fallbackWithRecord:new Map,fallbackWithoutRecordErrors:new Set,fallbackWithRecordErrors:new Set}}function normalizeBindingCommand(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}class CommandCatalogService{state;host;notify;conditions;options;constructor(state,host,notify,conditions,options){this.state=state,this.host=host,this.notify=notify,this.conditions=conditions,this.options=options}normalizeCommands(commands){return normalizeRegisteredCommands({commands,commandFields:this.state.environment.commandFields,conditions:this.conditions,onError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}prependCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.prepend(resolver),resolver)}appendCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.append(resolver),resolver)}clearCommandResolvers(){if(!this.state.commands.commandResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.commands.commandResolvers.clear(),this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}getCommands(query2){return this.getFilteredCommandEntries(query2).map((entry2)=>getRegisteredCommandRecord(entry2.command))}getCommandEntries(query2){let context=this.getCommandQueryContext(query2),filteredEntries=this.getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getRegisteredCommandRecord(entry2.command),bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)this.collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))}getResolvedCommandChain(command,focused,includeRecord){let view=this.getActiveCommandView(focused),entries=this.getResolvedCommandChainFromView(view,command,focused,includeRecord,"active",view.chainsByName.get(command)),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{entries,hadError}}getRegisteredResolvedEntries(command,includeRecord){let view=this.getRegisteredCommandView(),cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let chain=view.chainsByName.get(command);if(!chain||chain.length===0){cache.set(command,[]);return}let resolved=[];for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand(entry2.command,{includeRecord})});return cache.set(command,resolved),resolved}getRegisteredResolverFallback(command,includeRecord){let view=this.getRegisteredCommandView(),fallback=this.getFallbackResolvedCommand(view,command,null,includeRecord,"registered"),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{resolved:fallback?.resolved,hadError}}getCommandAttrs(command,focused){return this.getTopResolvedCommand(command,focused,!1)?.resolved.attrs}getTopCommandRecord(command,focused){return this.getTopResolvedCommand(command,focused,!0)?.resolved.record}getTopRegisteredCommandRecord(command){let top=this.getTopRegisteredCommand(command);return top?getRegisteredCommandRecord(top.command):void 0}getDispatchUnavailableCommandState(command,focused,includeRecord){let chain=this.getRegisteredCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused(this.host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!this.conditions.layerMatchesRuntimeState(entry2.layer)||!this.conditions.matchesConditions(entry2.command))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeRecord?getRegisteredCommandRecord(unavailableEntry.command):void 0}}getActiveCommandView(focused){let currentFocused=getFocusedTargetIfAvailable(this.host),derivedStateVersion=this.state.notify.derivedStateVersion;if(focused===currentFocused&&this.state.commands.activeCommandViewVersion===derivedStateVersion&&this.state.commands.activeCommandView?.cacheable)return this.state.commands.activeCommandView;let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map,cacheable=!0;if(this.state.layers.layersWithCommands>0)for(let layer of getActiveLayersForFocused(this.state.layers,this.host,focused)){if(layer.commands.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;if(layer.hasUnkeyedMatchers)cacheable=!1;for(let command of layer.commands){if(command.hasUnkeyedMatchers)cacheable=!1;if(!this.conditions.matchesConditions(command))continue;let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2]);if(!reachableByName.has(command.name))reachableByName.set(command.name,entry2),reachable.push(entry2)}}let view={cacheable,entries,reachable,reachableByName,chainsByName,...createCommandChainCacheState()};if(focused===currentFocused&&view.cacheable)this.state.commands.activeCommandViewVersion=derivedStateVersion,this.state.commands.activeCommandView=view;return view}getRegisteredCommandView(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandViewVersion===cacheVersion&&this.state.commands.registeredCommandView)return this.state.commands.registeredCommandView;let entries=[],chainsByName=new Map;for(let layer of this.state.layers.sortedLayers){if(layer.commands.length===0)continue;for(let command of layer.commands){let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2])}}let view={entries,chainsByName,...createCommandChainCacheState()};return this.state.commands.registeredCommandViewVersion=cacheVersion,this.state.commands.registeredCommandView=view,view}isBindingVisible(binding,focused,activeView){if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView.reachableByName.has(binding.command))return!0;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")!==void 0}getBindingCommandAttrs(binding,focused,activeView){if(typeof binding.command!=="string")return;let active=activeView.reachableByName.get(binding.command);if(active)return active.command.attrs;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")?.resolved.attrs}getCommandResolutionStatus(command,layerCommands){if(layerCommands?.has(command)||this.state.commands.registeredNames.has(command))return"resolved";let lookup=this.resolveCommandWithResolvers(command,getFocusedTargetIfAvailable(this.host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"}mutateCommandResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let off=register2();return this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange(),()=>{this.notify.runWithStateChangeBatch(()=>{if(off(),this.state.commands.commandResolvers.values().includes(resolver))return;this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}})}getTopResolvedCommand(command,focused,includeRecord){let activeView=this.getActiveCommandView(focused),active=activeView.reachableByName.get(command);if(active)return{target:active.layer.target,resolved:resolveRegisteredCommand(active.command,{includeRecord})};return this.getFallbackResolvedCommand(activeView,command,focused,includeRecord,"active")}getTopRegisteredCommand(command){return this.getRegisteredCommandView().chainsByName.get(command)?.[0]}getFallbackResolvedCommand(view,command,focused,includeRecord,mode){let cache=includeRecord?view.fallbackWithRecord:view.fallbackWithoutRecord,errorCache=includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors;if(cache.has(command)){let cached=cache.get(command);return cached?{resolved:cached}:void 0}let lookup=this.resolveCommandWithResolvers(command,focused,{includeRecord,mode});if(cache.set(command,lookup.resolved??null),lookup.hadError)errorCache.add(command);if(!lookup.resolved)return;return{resolved:lookup.resolved}}getResolvedCommandChainFromView(view,command,focused,includeRecord,mode,activeChain){let cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let resolved=[],chain=activeChain;if(chain)for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand(entry2.command,{includeRecord})});let fallback=this.getFallbackResolvedCommand(view,command,focused,includeRecord,mode);if(fallback)resolved.push(fallback);return cache.set(command,resolved),resolved.length>0?resolved:void 0}getRegisteredLayerCommandEntries(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandEntriesCacheVersion===cacheVersion)return this.state.commands.registeredCommandEntriesCache;let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);let entries=[];for(let layer of layers)for(let command of layer.commands)entries.push({layer,command});return this.state.commands.registeredCommandEntriesCacheVersion=cacheVersion,this.state.commands.registeredCommandEntriesCache=entries,entries}getCommandQueryContext(query2){let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable(this.host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:this.getActiveCommandView(focused)}}getFilteredCommandEntries(query2,context=this.getCommandQueryContext(query2)){let entries;if(context.visibility==="registered")entries=this.getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries({entries,query:query2,getCommandRecord:(command)=>getRegisteredCommandRecord(command),onFilterError:(error2)=>{this.notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})}collectCommandEntryBindings(grouped,indexesByName,context){if(context.visibility==="registered"){let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);for(let layer of layers)for(let binding of layer.compiledBindings)this.collectBindingForCommandEntries(grouped,indexesByName,binding);return}let activeView=context.activeView;if(!activeView)return;for(let layer of getActiveLayersForFocused(this.state.layers,this.host,context.focused)){if(layer.compiledBindings.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;for(let binding of layer.compiledBindings){if(!this.conditions.matchesConditions(binding)||!this.isBindingVisible(binding,context.focused,activeView))continue;this.collectBindingForCommandEntries(grouped,indexesByName,binding)}}}collectBindingForCommandEntries(grouped,indexesByName,binding){if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push({sequence:binding.sequence,command:binding.command,commandAttrs:item.command.attrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough})}}resolveCommandWithResolvers(command,focused,options){let includeRecord=options?.includeRecord===!0,context=this.createCommandResolverContext(includeRecord,focused,options?.mode??"active");return resolveCommandWithResolvers(command,this.state.commands.commandResolvers.values(),context,(error2)=>{this.notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)})}createCommandResolverContext(includeRecord,focused,mode){return{getCommandAttrs:(name)=>{if(mode==="registered")return this.getTopRegisteredCommand(name)?.command.attrs;return this.getCommandAttrs(name,focused)},getCommandRecord:(name)=>{if(!includeRecord)return;if(mode==="registered")return this.getTopRegisteredCommandRecord(name);return this.getTopCommandRecord(name,focused)}}}}function getRegisteredCommandRecord(command){if(command.record)return command.record;let fields=EMPTY_COMMAND_FIELDS;if(command.fields!==EMPTY_COMMAND_FIELDS&&Object.keys(command.fields).length>0)fields=snapshotDataValue(command.fields,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS);let record=command.attrs?Object.freeze({name:command.name,fields,attrs:snapshotDataValue(command.attrs,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS)}):Object.freeze({name:command.name,fields});return command.record=record,record}function resolveRegisteredCommand(command,options){if(options?.includeRecord===!0){let existing2=command.resolvedWithRecord;if(existing2)return existing2;let resolved2={run:createRegisteredCommandRunner(command)};if(command.attrs)resolved2.attrs=command.attrs;return resolved2.record=getRegisteredCommandRecord(command),command.resolvedWithRecord=resolved2,resolved2}let existing=command.resolved;if(existing)return existing;let resolved={run:createRegisteredCommandRunner(command)};if(command.attrs)resolved.attrs=command.attrs;return command.resolved=resolved,resolved}function normalizeRegisteredCommands(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands){let normalizedCommand;try{let mergedAttrs={},mergedFields={},mergedRequires={},matchers=[],conditionKeys=new Set,hasUnkeyedMatchers=!1,normalizedName=normalizeCommandName(command.name);if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}for(let[fieldName,value]of Object.entries(command)){if(RESERVED_COMMAND_FIELDS.has(fieldName)||value===void 0)continue;mergedFields[fieldName]=snapshotDataValue(value,SNAPSHOT_COMMAND_METADATA_OPTIONS);let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createCommandFieldContext(mergedAttrs,mergedRequires,conditionKeys,matchers,options.conditions,fieldName,{onUnkeyedMatcher(){hasUnkeyedMatchers=!0}}))}let attrs=Object.keys(mergedAttrs).length===0?void 0:Object.freeze(mergedAttrs),fields=Object.keys(mergedFields).length===0?EMPTY_COMMAND_FIELDS:Object.freeze(mergedFields);if(normalizedCommand={name:normalizedName,fields,run:command.run,requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,matchCacheDirty:!0},attrs)normalizedCommand.attrs=attrs}catch(error2){options.onError("register-command-failed",error2,getErrorMessage(error2,`Failed to register keymap command "${String(command.name)}"`));continue}seen.add(normalizedCommand.name),normalizedCommands.push(normalizedCommand)}return normalizedCommands}function createCommandFieldContext(mergedAttrs,mergedRequires,conditionKeys,matchers,conditions,fieldName,options){return{require(name,requiredValue){mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},attr(name,attributeValue){mergeAttribute(mergedAttrs,name,snapshotDataValue(attributeValue,SNAPSHOT_COMMAND_METADATA_OPTIONS),`field ${fieldName}`)},activeWhen(matcher){let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)options.onUnkeyedMatcher();matchers.push(runtimeMatcher)}}}function createRegisteredCommandRunner(command){if(command.runner)return command.runner;let runner=(ctx)=>{return command.run({...ctx,command:getRegisteredCommandRecord(command)})};return command.runner=runner,runner}function resolveCommandWithResolvers(command,resolvers,context,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolved;try{resolved=resolver(command,context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolved)return{hadError,resolved}}return{hadError}}function queryLayerCommandEntries(options){let namespace=options.query?.namespace,normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate;if(typeof filter==="function")filterPredicate=filter;else if(filter)filterEntries2=Object.entries(filter);let results=[];for(let entry2 of options.entries){let command=entry2.command;if(!commandMatchesNamespace(command,namespace))continue;if(!commandMatchesSearch(command,normalizedSearch,searchKeys))continue;if(!commandMatchesFilters(command,filterEntries2,options))continue;let record=options.getCommandRecord(command);if(filterPredicate){let matches=!1;try{matches=filterPredicate(record)}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}results.push(entry2)}return results}function commandMatchesSearch(command,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch(command,key,search))return!0;return!1}function commandMatchesNamespace(command,namespace){if(namespace===void 0)return!0;if(!Object.prototype.hasOwnProperty.call(command.fields,"namespace"))return!1;return commandValueMatchesFilter(command.fields.namespace,namespace)}function commandMatchesFilters(command,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery(command,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch(command,key,search){if(key==="name"&&commandValueMatchesSearch(command.name,search))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesSearch(command.fields[key],search))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesSearch(command.attrs[key],search);return!1}function commandKeyMatchesQuery(command,key,matcher,options){if(typeof matcher==="function"){let record,getRecord=()=>{if(!record)record=options.getCommandRecord(command);return record},foundValue=!1;if(key==="name"){foundValue=!0;try{if(matcher(command.name,getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(Object.prototype.hasOwnProperty.call(command.fields,key)){foundValue=!0;try{if(matcher(command.fields[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key)){foundValue=!0;try{if(matcher(command.attrs[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(!foundValue)try{return matcher(void 0,getRecord())}catch(error2){return options.onFilterError(error2),!1}return!1}return commandKeyMatchesExact(command,key,matcher)}function commandKeyMatchesExact(command,key,matcher){if(key==="name"&&commandValueMatchesFilter(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesFilter(command.fields[key],matcher))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesFilter(command.attrs[key],matcher);return!1}function commandValueMatchesFilter(value,matcher){if(Array.isArray(matcher)){for(let expected of matcher)if(commandValueMatchesExact(value,expected))return!0;return!1}return commandValueMatchesExact(value,matcher)}function commandValueMatchesExact(value,expected){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesExact(entry2,expected))return!0;return!1}return Object.is(value,expected)}function commandValueMatchesSearch(value,search){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesSearch(entry2,search))return!0;return!1}if(typeof value==="string")return value.toLowerCase().includes(search);if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase().includes(search);return!1}class CommandExecutorService{notify;runtime;activation;catalog;options;constructor(notify,runtime,activation,catalog,options){this.notify=notify,this.runtime=runtime,this.activation=activation,this.catalog=catalog,this.options=options}runCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chain=this.catalog.getRegisteredResolvedEntries(normalized,includeRecord),rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}let fallback=this.catalog.getRegisteredResolverFallback(normalized,includeRecord);if(fallback.resolved){let execution=this.executeResolvedCommand(normalized,fallback.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(fallback.hadError)return{ok:!1,reason:"error"};return rejectedResult??{ok:!1,reason:"not-found"}}dispatchCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chainLookup=this.catalog.getResolvedCommandChain(normalized,focused,includeRecord),chain=chainLookup.entries,rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(chainLookup.hadError)return{ok:!1,reason:"error"};let unavailable=this.catalog.getDispatchUnavailableCommandState(normalized,focused,includeRecord);if(unavailable)return unavailable.command?{ok:!1,reason:unavailable.reason,command:unavailable.command}:{ok:!1,reason:unavailable.reason};return rejectedResult??{ok:!1,reason:"not-found"}}runBinding(bindingLayer,binding,event,focused){let data=this.runtime.getReadonlyData();if(binding.run){if(this.executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",{run:binding.run},{keymap:this.options.keymap,event,focused,target:bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=this.catalog.getResolvedCommandChain(binding.command,focused,!1).entries;if(chain?.length===1){let[entry2]=chain;if(entry2){if(this.executeResolvedCommand(binding.command,entry2.resolved,{keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data};if(this.executeResolvedCommand(binding.command,entry2.resolved,context).status==="rejected")continue;return applyBindingEventEffects(binding,event),!0}return!1}executeResolvedCommand(commandName,resolved,context){let command=resolved.record,result2;try{result2=resolved.run(context)}catch(error2){return this.notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:{ok:!1,reason:"error",command}}}if(isPromiseLike(result2))return result2.catch((error2)=>{this.notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:{ok:!0,command}};if(result2===!1){if(resolved.rejectedResult)return{status:"rejected",result:resolved.rejectedResult};return{status:"rejected",result:{ok:!1,reason:"rejected",command}}}return{status:"handled",result:{ok:!0,command}}}}function applyBindingEventEffects(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function normalizeBindingInputs(bindings){if(Array.isArray(bindings))return bindings;let normalized=[];for(let[key,cmd]of Object.entries(bindings)){if(typeof cmd!=="string"&&typeof cmd!=="function")throw Error(`Invalid keymap binding for "${key}": shorthand bindings must map to string or function commands`);normalized.push({key,cmd})}return normalized}function snapshotBindingInputs(bindings){return normalizeBindingInputs(bindings).map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBindingInput(binding){return{...binding,sequence:cloneKeySequence(binding.sequence)}}function createSequenceNode(parent,stroke,match){return{parent,depth:parent?parent.depth+1:0,stroke,match,children:new Map,bindings:[],reachableBindings:[]}}function snapshotAttributes(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue(attrs,{freeze:!0})}class CompilerService{state;notify;conditions;options;constructor(state,notify,conditions,options){this.state=state,this.notify=notify,this.conditions=conditions,this.options=options}parseTokenKey(key){return parseSingleKeyPartWithParsers(key,this.state.environment.bindingParsers.values(),{tokens:this.state.environment.tokens,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})}compileBindings(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields){let root=createSequenceNode(null,null,null),compiledBindings=[],hasTokenBindings=!1,bindingExpanders=this.state.environment.bindingExpanders.values(),bindingParsers=this.state.environment.bindingParsers.values(),bindingFieldCompilers=this.state.environment.bindingFields,allowExactPrefixAmbiguity=this.state.dispatch.disambiguationResolvers.has(),warnUnknownField=this.options.warnUnknownField,warnUnknownToken=this.options.warnUnknownToken,conditions=this.conditions;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingInputWithExpanders(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){this.notify.emitError("binding-expand-error",error2,getErrorMessage(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let parsed;try{parsed=typeof expandedBindingKey==="string"?parseBindingSequenceWithParsers(expandedBindingKey,bindingParsers,{tokens:tokens2,layer:compileFields,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)}):{parts:[this.parseObjectKeyPart(expandedBindingKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1}}catch(error2){this.notify.emitError("binding-parse-error",error2,getErrorMessage(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedBindingKey==="string"?expandedBindingKey:String(expandedBindingKey.name));for(let compiledInput of this.applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=this.normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires,mergedAttrs,matchers,conditionKeys,hasUnkeyedMatchers=!1;for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,{require(name,requiredValue){if(!mergedRequires)mergedRequires={};if(mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),!conditionKeys)conditionKeys=new Set;conditionKeys.add(name)},attr(name,attributeValue){if(!mergedAttrs)mergedAttrs={};mergeAttribute(mergedAttrs,name,attributeValue,`field ${fieldName}`)},activeWhen:(matcher)=>{let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;if(!matchers)matchers=[];matchers.push(runtimeMatcher)}})}let attrs=mergedAttrs?snapshotAttributes(mergedAttrs):void 0,command=normalizeBindingCommand(compiledInput.cmd),compiledBinding={sequence:compiledSequence,command,event,sourceBinding:snapshotParsedBindingInput(compiledInput),sourceTarget,sourceLayerOrder,sourceBindingIndex:bindingIndex,requires:mergedRequires?Object.entries(mergedRequires):EMPTY_REQUIRES,matchers:matchers??EMPTY_MATCHERS,conditionKeys:conditionKeys?[...conditionKeys]:EMPTY_CONDITION_KEYS,hasUnkeyedMatchers,matchCacheDirty:!0,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");if(event==="press")this.insertBinding(root,compiledBinding,allowExactPrefixAmbiguity);compiledBindings.push(compiledBinding)}catch(error2){this.notify.emitError("binding-compile-error",error2,getErrorMessage(error2,"Failed to compile keymap binding"))}}}return{root,bindings:compiledBindings,hasTokenBindings}}parseObjectKeyPart(key,options){return createKeySequencePart(key,options)}normalizeBindingEvent(event){if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)}applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields){let bindingTransformers=this.state.environment.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers(key,bindingParsers,{tokens:tokens2,layer,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBindingInput(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){this.notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]}insertBinding(root,binding,allowExactPrefixAmbiguity){let node=root,touchedNodes=[],createdNodes=[];try{for(let part of binding.sequence){if(!allowExactPrefixAmbiguity&&node.bindings.some((candidate)=>candidate.command!==void 0))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");let bindingKey=part.match,child=node.children.get(bindingKey);if(!child)child=createSequenceNode(node,cloneKeySequencePart(part).stroke,part.match),node.children.set(bindingKey,child),createdNodes.push({parent:node,key:bindingKey});child.reachableBindings.push(binding),touchedNodes.push(child),node=child}if(!allowExactPrefixAmbiguity&&binding.command!==void 0&&node.children.size>0)throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");node.bindings=[...node.bindings,binding]}catch(error2){for(let index=touchedNodes.length-1;index>=0;index-=1){let touchedNode=touchedNodes[index];if(!touchedNode)continue;if(touchedNode.reachableBindings.at(-1)===binding){touchedNode.reachableBindings.pop();continue}touchedNode.reachableBindings=touchedNode.reachableBindings.filter((candidate)=>candidate!==binding)}for(let index=createdNodes.length-1;index>=0;index-=1){let createdNode=createdNodes[index];if(!createdNode)continue;let child=createdNode.parent.children.get(createdNode.key);if(!child)continue;if(child.children.size>0||child.reachableBindings.length>0||child.bindings.length>0)continue;createdNode.parent.children.delete(createdNode.key)}throw error2}}}function expandBindingInputWithExpanders(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[key];let layer=options?.layer??EMPTY_COMPILE_FIELDS,candidates=[key];for(let expander of expanders){let nextCandidates=[];for(let input of candidates){let result2=expander({input,layer});if(!result2){nextCandidates.push(input);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${input}"`);for(let expandedInput of result2){if(typeof expandedInput!=="string")throw Error(`Keymap binding expander must return string key sequences for "${input}"`);nextCandidates.push(expandedInput)}}candidates=nextCandidates}return candidates}function parseBindingSequenceWithParsers(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,normalizeTokenName:normalizeBindingTokenName,createMatch:createTextKeyMatch,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}class ConditionService{state;notify;constructor(state,notify){this.state=state,this.notify=notify}buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher,cacheable:!1};if(isReactiveMatcher(matcher))return{source,match:()=>matcher.get(),cacheable:!0,subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)}hasNoConditions(target){return target.requires.length===0&&target.matchers.length===0}indexRuntimeMatchable(target){if(target.conditionKeys.length>0)for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(dependents){dependents.add(target);continue}this.state.conditions.runtimeKeyDependents.set(key,new Set([target]))}if(!target.hasUnkeyedMatchers)target.matchCacheDirty=!0}unindexRuntimeMatchable(target){if(target.conditionKeys.length===0)return;for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(!dependents)continue;if(dependents.delete(target),dependents.size===0)this.state.conditions.runtimeKeyDependents.delete(key)}}invalidateRuntimeConditionKey(name){let dependents=this.state.conditions.runtimeKeyDependents.get(name);if(!dependents)return;for(let target of dependents)target.matchCacheDirty=!0}matchesConditions(target){if(this.hasNoConditions(target))return!0;if(this.hasFreshConditionCache(target))return target.matchCache===!0;let matched=this.matchRequirements(target.requires)&&this.matchesRuntimeMatchers(target);return this.updateConditionCache(target,matched),matched}layerMatchesRuntimeState(layer){if(this.state.layers.layersWithConditions===0||this.hasNoConditions(layer))return!0;return this.matchesConditions(layer)}matchRequirements(requires){if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(this.state.runtime.data[name],value))return!1;return!0}hasFreshConditionCache(target){if(target.hasUnkeyedMatchers)return!1;return target.matchCacheDirty!==!0&&target.matchCache!==void 0}updateConditionCache(target,matched){if(target.hasUnkeyedMatchers)return;target.matchCacheDirty=!1,target.matchCache=matched}matchesRuntimeMatcher(matcher){try{return matcher.match()}catch(error2){return this.notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}}matchesRuntimeMatchers(target){if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?this.matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!this.matchesRuntimeMatcher(matcher))return!1;return!0}}function createSyncDecision(action,handler){return{[KEY_DISAMBIGUATION_DECISION]:!0,action,handler}}function createDeferredDecision(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION]:!0,action}}function isSyncDecision(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION]===!0}function isDeferredDecision(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION]===!0}class DispatchService{state;notify;runtime;activation;conditions;executor;compiler;catalog;layers;eventMatchResolverContext;pendingDisambiguation=null;nextPendingDisambiguationId=0;constructor(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers){this.state=state,this.notify=notify,this.runtime=runtime,this.activation=activation,this.conditions=conditions,this.executor=executor,this.compiler=compiler,this.catalog=catalog,this.layers=layers,this.eventMatchResolverContext={resolveKey:(key)=>{return this.compiler.parseTokenKey(key).match}}}intercept(name,fn,options){if(name==="key"){let keyOptions=options;return this.state.dispatch.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return this.state.dispatch.rawHooks.register(fn,{priority:rawOptions?.priority??0})}prependEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.prepend(resolver)}appendEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.append(resolver)}clearEventMatchResolvers(){this.state.dispatch.eventMatchResolvers.clear()}prependDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.prepend(resolver),resolver)}appendDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.append(resolver),resolver)}clearDisambiguationResolvers(){if(!this.state.dispatch.disambiguationResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.dispatch.disambiguationResolvers.clear(),this.layers.recompileBindings()})}handlePendingSequenceChange(_previous,_next){if(!this.pendingDisambiguation)return;this.cancelPendingDisambiguation()}handleRawSequence(sequence){let hooks=this.state.dispatch.rawHooks.entries();if(hooks.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks){try{hook.listener(context)}catch(error2){this.notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}handleKeyEvent(event,release){if(!release)this.cancelPendingDisambiguation();let hooks=this.state.dispatch.keyHooks.entries(),context={event,setData:(name,value)=>{this.runtime.setData(name,value)},getData:(name)=>{return this.runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){this.notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped)return}if(release){this.dispatchReleaseLayers(event);return}this.dispatchLayers(event)}mutateDisambiguationResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let hadResolvers=this.state.dispatch.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings();return()=>{this.notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=this.state.dispatch.disambiguationResolvers.has();if(off(),this.state.dispatch.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings()})}})}dispatchReleaseLayers(event){let focused=this.activation.getFocusedTarget(),activeLayers=this.activation.getActiveLayers(focused),hasLayerConditions=this.state.layers.layersWithConditions>0,matchKeys=this.resolveEventMatchKeys(event);layerLoop:for(let layer of activeLayers){if(layer.compiledBindings.length===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=this.runReleaseBindings(layer,strokeKey,event,focused);if(!result2.handled)continue;if(result2.stop)return;continue layerLoop}}}dispatchLayers(event){let focused=this.activation.getFocusedTarget(),pending=this.activation.ensureValidPendingSequence(),matchKeys=this.resolveEventMatchKeys(event);if(pending){this.dispatchPendingSequence(pending,matchKeys,event,focused);return}let activeLayers=this.activation.getActiveLayers(focused);this.dispatchFromRoot(activeLayers,matchKeys,event,focused)}dispatchPendingSequence(pending,matchKeys,event,focused){let advancedCaptures=[];for(let capture2 of pending.captures){let nextNode=this.getReachableChild(capture2.node,matchKeys,focused);if(!nextNode)continue;advancedCaptures.push({layer:capture2.layer,node:nextNode})}if(advancedCaptures.length===0){this.activation.setPendingSequence(null);return}this.dispatchPendingCapturesFromIndex(advancedCaptures,0,!1,event,focused)}dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2)continue;if(capture2.node.children.size>0){if(hasHandledExact)continue;let continuationCaptures=this.collectPendingCapturesFromAdvanced(advancedCaptures,index);if(this.tryResolvePendingAmbiguity(advancedCaptures,index,continuationCaptures,capture2,event,focused,hasHandledExact))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(!result2.handled)continue;if(hasHandledExact=!0,result2.stop){this.activation.setPendingSequence(null);return}}this.activation.setPendingSequence(null)}dispatchFromRoot(activeLayers,matchKeys,event,focused){this.dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode)continue;if(nextNode.children.size>0){let continuationCaptures=this.collectPendingCapturesFromRoot(activeLayers,index,matchKeys,focused);if(this.tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,layer,nextNode,event,focused))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(layer,nextNode.bindings,event,focused);if(!result2.handled)continue;if(result2.stop)return}}tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,layer,node,event,focused){let applyExact=()=>{if(this.activation.setPendingSequence(null),!this.runBindings(layer,node.bindings,event,focused).stop)this.dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:node.bindings,runExact:applyExact})}tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,capture2,event,focused,handledExact){let applyExact=()=>{this.activation.setPendingSequence(null);let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(result2.stop)return;this.dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:capture2.node.bindings,runExact:applyExact})}tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,runExact}=options;if(!this.state.dispatch.disambiguationResolvers.has()||continuationCaptures.length===0)return!1;let activeView=this.catalog.getActiveCommandView(focused),exactBindings=this.activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return!1;let continueSequence=()=>{this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation()},clear=()=>{this.activation.setPendingSequence(null),event.preventDefault(),event.stopPropagation()},sequence,getSequence=()=>{return sequence??=this.activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=this.resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return this.warnUnresolvedAmbiguity(getSequence()),continueSequence(),!0;return this.applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact(),!0;if(decision.action==="continue-sequence")return continueSequence(),!0;if(decision.action==="clear")return clear(),!0;return continueSequence(),this.scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),!0}resolveDisambiguation(options){let activation=this.activation,runtime=this.runtime,sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision("run-exact"),continueSequence:()=>createSyncDecision("continue-sequence"),clear:()=>createSyncDecision("clear"),defer:(run)=>createSyncDecision("defer",run)};for(let resolver of this.state.dispatch.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){this.notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike(result2)){this.notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision(result2)){this.notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){this.cancelPendingDisambiguation();let controller=new AbortController,pending={id:this.nextPendingDisambiguationId++,controller,captures,apply};this.pendingDisambiguation=pending,queueMicrotask(()=>{this.executeDeferredDisambiguation(pending,handler,focused,sequence)})}executeDeferredDisambiguation(pending,handler,focused,sequence){if(!this.isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence(sequence),focused,sleep:(ms)=>{return this.sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision("run-exact"),continueSequence:()=>createDeferredDecision("continue-sequence"),clear:()=>createDeferredDecision("clear")},result2;try{result2=handler(ctx)}catch(error2){if(this.isPendingDisambiguationCurrent(pending))this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending);return}if(isPromiseLike(result2)){result2.then((resolved)=>{this.applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!this.isPendingDisambiguationCurrent(pending))return;this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending)});return}this.applyDeferredDisambiguationResult(pending,result2)}applyDeferredDisambiguationResult(pending,result2){if(!this.isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision(result2)){this.notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),this.finishPendingDisambiguation(pending);return}this.finishPendingDisambiguation(pending),pending.apply(result2)}finishPendingDisambiguation(pending){if(!this.isPendingDisambiguationCurrent(pending))return;this.pendingDisambiguation=null}cancelPendingDisambiguation(){let pending=this.pendingDisambiguation;if(!pending)return;this.pendingDisambiguation=null,pending.controller.abort()}isPendingDisambiguationCurrent(pending){return this.pendingDisambiguation===pending}sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve21)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve21(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve21(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence(sequence,{preferDisplay:!0});this.notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,focused){let captures=[],hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer||layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode||nextNode.children.size===0)continue;captures.push({layer,node:nextNode})}return captures}collectPendingCapturesFromAdvanced(advancedCaptures,startIndex){return advancedCaptures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&candidate.node.children.size>0})}resolveEventMatchKeys(event){let resolvers=this.state.dispatch.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys(resolvers[0],event,this.eventMatchResolverContext,this.notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,this.eventMatchResolverContext)}catch(error2){this.notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){this.notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}runReleaseBindings(layer,strokeKey,event,focused){let handled=!1;for(let binding of layer.compiledBindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}getReachableChild(node,matchKeys,focused){for(let strokeKey of matchKeys){let child=node.children.get(strokeKey);if(!child||!this.activation.nodeHasReachableBindings(child,focused))continue;return child}return}runBindings(layer,bindings,event,focused){let handled=!1;for(let binding of bindings){if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}}function resolveSingleEventMatchKeys(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function registerFieldCompilers(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name))emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`)}for(let[name,compiler]of entries){if(reservedFields.has(name)||registeredFields.has(name))continue;registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}class EnvironmentService{state;notify;compiler;layers;constructor(state,notify,compiler,layers){this.state=state,this.notify=notify,this.compiler=compiler,this.layers=layers}prependBindingTransformer(transformer){return this.state.environment.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.state.environment.bindingTransformers.append(transformer)}clearBindingTransformers(){this.state.environment.bindingTransformers.clear()}prependBindingParser(parser){return this.state.environment.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.state.environment.bindingParsers.append(parser)}clearBindingParsers(){this.state.environment.bindingParsers.clear()}registerToken(token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName(token.name)}catch(error2){return this.notify.emitError("token-name-normalize-error",error2,getErrorMessage(error2,"Failed to register keymap token")),NOOP}if(this.state.environment.tokens.has(normalizedToken))return this.notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP;let parsedToken;try{parsedToken=this.compiler.parseTokenKey(token.key)}catch(error2){return this.notify.emitError("token-parse-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(this.state.environment.tokens);nextTokens.set(normalizedToken,registeredToken);try{this.layers.applyTokenState(nextTokens)}catch(error2){return this.notify.emitError("token-register-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}return()=>{if(this.state.environment.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(this.state.environment.tokens);nextTokens2.delete(normalizedToken);try{this.layers.applyTokenState(nextTokens2)}catch(error2){this.notify.emitError("token-unregister-error",error2,getErrorMessage(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}prependBindingExpander(expander){return this.state.environment.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.state.environment.bindingExpanders.append(expander)}clearBindingExpanders(){this.state.environment.bindingExpanders.clear()}registerLayerFields(fields){return registerFieldCompilers(fields,{kind:"layer",reservedFields:RESERVED_LAYER_FIELDS,registeredFields:this.state.environment.layerFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerBindingFields(fields){return registerFieldCompilers(fields,{kind:"binding",reservedFields:RESERVED_BINDING_FIELDS,registeredFields:this.state.environment.bindingFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerCommandFields(fields){return registerFieldCompilers(fields,{kind:"command",reservedFields:RESERVED_COMMAND_FIELDS,registeredFields:this.state.environment.commandFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}}function sortLayers(layers){return[...layers].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return right.order-left.order})}function createCommandLookup(commands){if(commands.length===0)return;let lookup=new Map;for(let command of commands)lookup.set(command.name,command);return lookup}function addRegisteredCommandNames(target,commands){for(let command of commands)target.set(command.name,(target.get(command.name)??0)+1)}function removeRegisteredCommandNames(target,commands){for(let command of commands){let count=target.get(command.name);if(!count||count<=1){target.delete(command.name);continue}target.set(command.name,count-1)}}function getSequenceNode(root,sequence){let node=root;for(let part of sequence)if(node=node.children.get(part.match),!node)return;return node}function buildLayerBindingAnalyses(root,compiledBindings){return compiledBindings.map((binding)=>{let node=binding.event==="press"?getSequenceNode(root,binding.sequence):void 0;return{sequence:cloneKeySequence(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceBinding:snapshotParsedBindingInput(binding.sourceBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,sourceBindingIndex:binding.sourceBindingIndex,hasCommandAtSequence:node?node.bindings.some((candidate)=>candidate.command!==void 0):!1,hasContinuations:node?node.children.size>0:!1}})}class LayerService{state;notify;conditions;activation;options;constructor(state,notify,conditions,activation,options){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation,this.options=options}registerLayer(layer){return this.notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&this.options.host.isTargetDestroyed(target))return this.notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP2;let bindingInputs,requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields,commands,commandLookup,targetMode;try{targetMode=this.normalizeTargetMode(layer),bindingInputs=snapshotBindingInputs(layer.bindings??[]),commands=!layer.commands||layer.commands.length===0?[]:this.options.commands.normalizeCommands(layer.commands),commandLookup=createCommandLookup(commands),{requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields}=this.compileLayerRuntimeState(layer)}catch(error2){return this.notify.emitError("register-layer-failed",error2,getErrorMessage(error2,"Failed to register keymap layer")),NOOP2}let order=this.state.core.order++,compiledBindings=this.options.compiler.compileBindings(bindingInputs,this.state.environment.tokens,target,order,compileFields);if(compiledBindings.bindings.length===0&&!compiledBindings.hasTokenBindings&&commands.length===0)return NOOP2;this.runLayerAnalyzers({target,order,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,root:compiledBindings.root,hasTokenBindings:compiledBindings.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,conditionKeys,hasUnkeyedMatchers,matchCacheDirty:!0,compileFields,commands,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,hasUnkeyedCommands:commands.some((command)=>command.hasUnkeyedMatchers),hasUnkeyedBindings:compiledBindings.bindings.some((binding)=>binding.hasUnkeyedMatchers),hasTokenBindings:compiledBindings.hasTokenBindings,root:compiledBindings.root};if(this.state.layers.layers.add(registeredLayer),registeredLayer.commands.length>0)this.state.layers.layersWithCommands+=1,this.state.commands.commandMetadataVersion+=1,addRegisteredCommandNames(this.state.commands.registeredNames,registeredLayer.commands);if(registeredLayer.requires.length>0||registeredLayer.matchers.length>0)this.state.layers.layersWithConditions+=1;this.connectRuntimeMatchable(registeredLayer);for(let command of registeredLayer.commands)this.connectRuntimeMatchable(command);for(let binding of registeredLayer.compiledBindings)this.connectRuntimeMatchable(binding);if(this.indexLayer(registeredLayer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),target){let onTargetDestroy=()=>{this.unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=this.options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)this.activation.ensureValidPendingSequence();return this.notify.queueStateChange(),()=>{this.unregisterLayer(registeredLayer)}})}applyTokenState(nextTokens){this.notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of this.state.layers.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,this.compileLayerBindings(layer,nextTokens))}this.state.environment.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;if(shouldClearPending)this.activation.setPendingSequence(null);if(nextCompilations.size>0)this.notify.queueStateChange()})}recompileBindings(){this.notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of this.state.layers.layers){if(layer.bindingInputs.length===0)continue;let compilation=this.compileLayerBindings(layer,this.state.environment.tokens);if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)this.activation.setPendingSequence(null);if(recompiledLayers>0)this.notify.queueStateChange()})}prependLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.prepend(analyzer)}appendLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.append(analyzer)}clearLayerAnalyzers(){this.state.layers.layerAnalyzers.clear()}cleanup(){for(let layer of this.state.layers.layers){this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}}normalizeTargetMode(layer){if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0}runLayerAnalyzers(options){let analyzers=this.state.layers.layerAnalyzers.values();if(analyzers.length===0)return;let bindings=buildLayerBindingAnalyses(options.root,options.compiledBindings),ctx={target:options.target,order:options.order,bindingInputs:options.bindingInputs,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution:(command)=>{return this.options.commands.getCommandResolutionStatus(command,options.commandLookup)},warn:(code,warning,message)=>{this.notify.emitWarning(code,warning,message)},warnOnce:(key,code,warning,message)=>{this.notify.warnOnce(key,code,warning,message)},error:(code,error2,message)=>{this.notify.emitError(code,error2,message)}};for(let analyzer of analyzers)try{analyzer(ctx)}catch(error2){this.notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}compileLayerRuntimeState(layer){let mergedRequires={},matchers=[],compileFields=Object.create(null),conditionKeys=new Set,hasUnkeyedMatchers=!1;for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS.has(fieldName))continue;if(value===void 0)continue;compileFields[fieldName]=snapshotDataValue(value);let compiler=this.state.environment.layerFields.get(fieldName);if(!compiler){this.options.warnUnknownField("layer",fieldName);continue}compiler(value,{require:(name,requiredValue)=>{mergeRequirement(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},activeWhen:(matcher)=>{let runtimeMatcher=this.conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;matchers.push(runtimeMatcher)}})}return{requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,compileFields:Object.keys(compileFields).length>0?Object.freeze(compileFields):void 0}}compileLayerBindings(layer,tokens2){return this.options.compiler.compileBindings(layer.bindingInputs,tokens2,layer.target,layer.order,layer.compileFields)}applyCompiledBindings(layer,compilation){this.runLayerAnalyzers({target:layer.target,order:layer.order,commandLookup:layer.commandLookup,bindingInputs:layer.bindingInputs,compiledBindings:compilation.bindings,root:compilation.root,hasTokenBindings:compilation.hasTokenBindings});for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.root=compilation.root,layer.compiledBindings=compilation.bindings,layer.hasUnkeyedBindings=compilation.bindings.some((binding)=>binding.hasUnkeyedMatchers),layer.hasTokenBindings=compilation.hasTokenBindings;for(let binding of layer.compiledBindings)this.connectRuntimeMatchable(binding);return this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer)??!1}indexLayer(layer){this.state.layers.sortedLayers=sortLayers([...this.state.layers.sortedLayers,layer]),this.state.layers.activeLayersVersion+=1}removeLayerFromIndex(layer){this.state.layers.sortedLayers=this.state.layers.sortedLayers.filter((candidate)=>candidate!==layer),this.state.layers.activeLayersVersion+=1}unregisterLayer(layer){this.notify.runWithStateChangeBatch(()=>{if(!this.state.layers.layers.delete(layer))return;if(layer.requires.length>0||layer.matchers.length>0)this.state.layers.layersWithConditions-=1;if(layer.commands.length>0)this.state.layers.layersWithCommands-=1,this.state.commands.commandMetadataVersion+=1,removeRegisteredCommandNames(this.state.commands.registeredNames,layer.commands);this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);if(this.removeLayerFromIndex(layer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer))this.activation.setPendingSequence(null);else if(layer.commands.length>0&&!this.options.host.isDestroyed)this.activation.ensureValidPendingSequence();this.notify.queueStateChange()})}connectRuntimeMatchable(target){this.attachReactiveMatchers(target),this.conditions.indexRuntimeMatchable(target)}disconnectRuntimeMatchable(target){this.detachReactiveMatchers(target),this.conditions.unindexRuntimeMatchable(target)}attachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(target.matchCacheDirty=!0,!this.activation.hasPendingSequenceState()){this.notify.queueStateChange();return}this.notify.runWithStateChangeBatch(()=>{this.activation.revalidatePendingSequenceIfNeeded(),this.notify.queueStateChange()})})}catch(error2){this.notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}}detachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){this.notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}}}class Emitter2{onError;listeners=Object.create(null);constructor(onError){this.onError=onError}hook(name,listener){let current=this.listeners[name]??[];return this.listeners[name]=[...current,listener],()=>{let current2=this.listeners[name];if(!current2||current2.length===0)return;let next=current2.filter((candidate)=>candidate!==listener);if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}}has(name){return(this.listeners[name]?.length??0)>0}off(name,listener){let current=this.listeners[name];if(!current||current.length===0)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===current.length)return;if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}clear(){this.listeners=Object.create(null)}emit(name,...args){let listeners2=this.listeners[name];if(!listeners2||listeners2.length===0)return;for(let listener of listeners2)try{if(args.length===0)listener();else listener(args[0])}catch(error2){this.onError(name,error2)}}}class NotificationService{state;events;hooks;constructor(state,events,hooks){this.state=state,this.events=events,this.hooks=hooks}runWithStateChangeBatch(fn){this.state.notify.stateChangeDepth+=1;try{return fn()}finally{if(this.state.notify.stateChangeDepth-=1,this.state.notify.stateChangeDepth===0)this.flushStateChange()}}queueStateChange(){if(this.state.notify.derivedStateVersion+=1,!this.hooks.has("state"))return;if(this.state.notify.stateChangePending=!0,this.state.notify.stateChangeDepth===0&&!this.state.notify.flushingStateChange)this.flushStateChange()}emitWarning(code,warning,message){if(!this.events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}this.events.emit("warning",{code,message,warning})}emitError(code,error2,message){if(!this.events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}this.events.emit("error",{code,message,error:error2})}reportListenerError(name,error2){if(name==="state"){this.emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){this.emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}}warnOnce(key,code,warning,message){if(this.state.notify.usedWarningKeys.has(key))return;this.state.notify.usedWarningKeys.add(key),this.emitWarning(code,warning,message)}flushStateChange(){if(!this.state.notify.stateChangePending||this.state.notify.stateChangeDepth>0||this.state.notify.flushingStateChange)return;this.state.notify.flushingStateChange=!0;try{let iterations=0;while(this.state.notify.stateChangePending&&this.state.notify.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS){this.state.notify.stateChangePending=!1,this.emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS} iterations; pending state notifications were dropped`);break}iterations+=1,this.state.notify.stateChangePending=!1,this.hooks.emit("state")}}finally{this.state.notify.flushingStateChange=!1}}}class RuntimeService{state;notify;conditions;activation;constructor(state,notify,conditions,activation){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation}getData(name){return this.state.runtime.data[name]}setData(name,value){this.notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in this.state.runtime.data))return;delete this.state.runtime.data[name],this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange();return}if(Object.is(this.state.runtime.data[name],value))return;this.state.runtime.data[name]=value,this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange()})}getReadonlyData(){if(this.state.runtime.readonlyDataVersion===this.state.runtime.dataVersion)return this.state.runtime.readonlyData;return this.state.runtime.readonlyData=Object.freeze({...this.state.runtime.data}),this.state.runtime.readonlyDataVersion=this.state.runtime.dataVersion,this.state.runtime.readonlyData}}class CopyOnWriteRegistry{items=[];getItems(){return this.items}setItems(items){this.items=items}removeItem(value){let current=this.items;if(current.length===0)return!1;let next=current.filter((candidate)=>candidate!==value);if(next.length===current.length)return!1;return this.items=next,!0}has(){return this.items.length>0}clear(){this.items=[]}}function createKeymapState(){return{core:{order:0},environment:{tokens:new Map,layerFields:new Map,bindingExpanders:new OrderedRegistry,bindingParsers:new OrderedRegistry,bindingTransformers:new OrderedRegistry,bindingFields:new Map,commandFields:new Map},dispatch:{eventMatchResolvers:new OrderedRegistry,disambiguationResolvers:new OrderedRegistry,keyHooks:new PriorityRegistry,rawHooks:new PriorityRegistry},layers:{layers:new Set,sortedLayers:[],activeLayersVersion:0,activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],layersWithConditions:0,layersWithCommands:0,layerAnalyzers:new OrderedRegistry},commands:{commandMetadataVersion:0,registeredNames:new Map,commandResolvers:new OrderedRegistry,activeCommandViewVersion:-1,activeCommandView:void 0,registeredCommandViewVersion:-1,registeredCommandView:void 0,registeredCommandEntriesCacheVersion:-1,registeredCommandEntriesCache:[]},projection:{pendingSequence:null,pendingSequenceCacheVersion:-1,pendingSequenceCache:[],activeKeysPlainCacheVersion:-1,activeKeysPlainCache:[],activeKeysBindingsCacheVersion:-1,activeKeysBindingsCache:[],activeKeysMetadataCacheVersion:-1,activeKeysMetadataCache:[],activeKeysBindingsAndMetadataCacheVersion:-1,activeKeysBindingsAndMetadataCache:[]},conditions:{runtimeKeyDependents:new Map},runtime:{data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA},notify:{derivedStateVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}}function getKeyMatchKey(input){return resolveKeyMatch(input)}class Keymap{host;state=createKeymapState();cleanedUp=!1;resources=new Map;cleanupListeners=[];events=new Emitter2(()=>{});hooks;notify;activation;runtime;conditions;catalog;executor;compiler;dispatch;layers;environment;keypressListener;keyreleaseListener;rawListener;focusedTargetListener;constructor(host){if(this.host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.hooks=new Emitter2((name,error2)=>{this.notify.reportListenerError(name,error2)}),this.notify=new NotificationService(this.state,this.events,this.hooks),this.conditions=new ConditionService(this.state,this.notify),this.catalog=new CommandCatalogService(this.state,this.host,this.notify,this.conditions,{onCommandResolversChanged:()=>{this.activation.ensureValidPendingSequence()}}),this.activation=new ActivationService(this.state,this.host,this.hooks,this.notify,this.conditions,this.catalog,{onPendingSequenceChanged:(previous,next)=>{this.dispatch?.handlePendingSequenceChange(previous,next)}}),this.runtime=new RuntimeService(this.state,this.notify,this.conditions,this.activation),this.executor=new CommandExecutorService(this.notify,this.runtime,this.activation,this.catalog,{keymap:this,createCommandEvent:()=>this.host.createCommandEvent()}),this.compiler=new CompilerService(this.state,this.notify,this.conditions,{warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.warnUnknownToken(token,sequence)}}),this.layers=new LayerService(this.state,this.notify,this.conditions,this.activation,{compiler:this.compiler,commands:this.catalog,host:this.host,warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)}}),this.environment=new EnvironmentService(this.state,this.notify,this.compiler,this.layers),this.dispatch=new DispatchService(this.state,this.notify,this.runtime,this.activation,this.conditions,this.executor,this.compiler,this.catalog,this.layers),this.keypressListener=(event)=>{this.dispatch.handleKeyEvent(event,!1)},this.keyreleaseListener=(event)=>{this.dispatch.handleKeyEvent(event,!0)},this.rawListener=(sequence)=>{return this.dispatch.handleRawSequence(sequence)},this.focusedTargetListener=(focused)=>{this.handleFocusedTargetChange(focused)},this.cleanupListeners.push(this.host.onKeyPress(this.keypressListener)),this.cleanupListeners.push(this.host.onKeyRelease(this.keyreleaseListener)),this.host.onRawInput)this.cleanupListeners.push(this.host.onRawInput(this.rawListener));if(this.cleanupListeners.push(this.host.onFocusChange(this.focusedTargetListener)),this.host.onDestroy)this.cleanupListeners.push(this.host.onDestroy(()=>{this.cleanup()}))}cleanup(){if(this.cleanedUp)return;this.cleanedUp=!0,this.activation.setPendingSequence(null);for(let resource of this.resources.values())resource.dispose();this.resources.clear(),this.layers.cleanup();for(let cleanupListener of this.cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.runtime.setData(name,value)}getData(name){return this.runtime.getData(name)}hasPendingSequence(){return this.activation.ensureValidPendingSequence()!==void 0}getPendingSequence(){return this.activation.getPendingSequence()}createKeyMatcher(key){let match=this.compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey(input)===match}}clearPendingSequence(){this.activation.setPendingSequence(null)}popPendingSequence(){return this.activation.popPendingSequence()}getActiveKeys(options){return this.activation.getActiveKeys(options)}getCommands(query2){return this.catalog.getCommands(query2)}getCommandEntries(query2){return this.catalog.getCommandEntries(query2)}normalizeCommandName(name){return normalizeCommandName(name)}normalizeBindings(bindings){return normalizeBindingInputs(bindings)}acquireResource(key,setup){if(this.cleanedUp||this.host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.resources.get(key);if(existing)return existing.count+=1,()=>{this.releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.resources.set(key,resource),()=>{this.releaseResource(key,resource)}}runCommand(cmd,options){return this.executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.events.hook(name,fn);if(name==="error")return this.events.hook(name,fn);return this.hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.dispatch.intercept(name,fn,options);return this.dispatch.intercept(name,fn,options)}registerLayer(layer){return this.layers.registerLayer(layer)}registerLayerFields(fields){return this.environment.registerLayerFields(fields)}prependBindingTransformer(transformer){return this.environment.prependBindingTransformer(transformer)}appendBindingTransformer(transformer){return this.environment.appendBindingTransformer(transformer)}clearBindingTransformers(){this.environment.clearBindingTransformers()}prependBindingParser(parser){return this.environment.prependBindingParser(parser)}appendBindingParser(parser){return this.environment.appendBindingParser(parser)}clearBindingParsers(){this.environment.clearBindingParsers()}registerToken(token){return this.environment.registerToken(token)}prependBindingExpander(expander){return this.environment.prependBindingExpander(expander)}appendBindingExpander(expander){return this.environment.appendBindingExpander(expander)}clearBindingExpanders(){this.environment.clearBindingExpanders()}registerBindingFields(fields){return this.environment.registerBindingFields(fields)}registerCommandFields(fields){return this.environment.registerCommandFields(fields)}prependCommandResolver(resolver){return this.catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.layers.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.layers.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.layers.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.dispatch.clearDisambiguationResolvers()}handleFocusedTargetChange(_focused){this.notify.runWithStateChangeBatch(()=>{this.activation.setPendingSequence(null),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(_focused),this.notify.queueStateChange()})}warnUnknownField(kind,fieldName){this.notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}warnUnknownToken(token,sequence){this.notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}releaseResource(key,resource){if(this.resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.resources.delete(key)}}function registerEscapeClearsPendingSequence(keymap,options){let shouldPreventDefault=options?.preventDefault??!0;return keymap.intercept("key",({event,consume})=>{if(event.name!=="escape")return;if(!keymap.hasPendingSequence())return;if(keymap.clearPendingSequence(),shouldPreventDefault)consume()},{priority:options?.priority??0})}function registerLeader(keymap,options){return keymap.registerToken({name:options.name??"<leader>",key:options.trigger})}var RESERVED_COMMAND_FIELDS,RESERVED_BINDING_FIELDS,RESERVED_LAYER_FIELDS,DEFAULT_COMMAND_SEARCH_FIELDS,SNAPSHOT_COMMAND_METADATA_OPTIONS,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS,EMPTY_COMMAND_FIELDS,EMPTY_COMPILE_FIELDS,EMPTY_REQUIRES,EMPTY_MATCHERS,EMPTY_CONDITION_KEYS,KEY_DISAMBIGUATION_DECISION,KEY_DEFERRED_DISAMBIGUATION_DECISION,NOOP=()=>{},NOOP2=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS=1000,OrderedRegistry,PriorityRegistry,EMPTY_DATA,EMPTY_FIELDS;var init_addons=__esm(()=>{RESERVED_COMMAND_FIELDS=new Set(["name","run"]),RESERVED_BINDING_FIELDS=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS=["name"],SNAPSHOT_COMMAND_METADATA_OPTIONS=Object.freeze({deep:!0,preserveNonPlainObjects:!0}),SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS=Object.freeze({deep:!0,freeze:!0,preserveNonPlainObjects:!0}),EMPTY_COMMAND_FIELDS=Object.freeze({});EMPTY_COMPILE_FIELDS=Object.freeze({}),EMPTY_REQUIRES=[],EMPTY_MATCHERS=[],EMPTY_CONDITION_KEYS=[];KEY_DISAMBIGUATION_DECISION=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION=Symbol("keymap-deferred-disambiguation-decision");OrderedRegistry=class OrderedRegistry extends CopyOnWriteRegistry{append(value){return this.setItems([...this.getItems(),value]),()=>{this.remove(value)}}prepend(value){return this.setItems([value,...this.getItems()]),()=>{this.remove(value)}}remove(value){return this.removeItem(value)}values(){return this.getItems()}};PriorityRegistry=class PriorityRegistry extends CopyOnWriteRegistry{order=0;register(listener,options){let registered={...options,listener,order:this.order++};return this.setItems([...this.getItems(),registered].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return left.order-right.order})),()=>{this.removeItem(registered)}}entries(){return this.getItems()}};EMPTY_DATA=Object.freeze({});EMPTY_FIELDS=Object.freeze({})});function getFocusedTargetIfAvailable2(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget2(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath2(host,focused){let path6=new Set;return forEachActivationTarget2(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused2(state,host,focused){if(state.activeLayersCacheVersion===state.activeLayersVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;let activeLayers=[],activationPath=getActivationPath2(host,focused);for(let layer of state.sortedLayers)if(isLayerActiveForFocused2(host,layer,focused,activationPath))activeLayers.push(layer);return state.activeLayersCacheVersion=state.activeLayersVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=activeLayers,activeLayers}function invalidateCachedActiveLayers2(state){state.activeLayersCacheVersion=-1,state.activeLayersCacheFocused=void 0,state.activeLayersCache=[]}function isLayerActiveForFocused2(host,layer,focused,activationPath=getActivationPath2(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function normalizeBindingTokenName2(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName2(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke2(input){return{name:normalizeKeyName2(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke2(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart2(input,options){let stroke=cloneKeyStroke2(normalizeKeyStroke2(input));return{stroke,display:options?.display??stringifyCanonicalStroke2(stroke),match:options?.match??createKeyMatch2(stroke),tokenName:options?.tokenName?normalizeBindingTokenName2(options.tokenName):void 0}}function cloneKeySequencePart2(part){return{stroke:cloneKeyStroke2(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName}}function cloneKeySequence2(parts){return parts.map((part)=>cloneKeySequencePart2(part))}function resolveKeyMatch2(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch2(input.stroke);return createKeyMatch2(input)}function createKeyMatch2(input){return`key:${buildKeyMatchId2(normalizeKeyStroke2(input))}`}function createTextKeyMatch2(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke2(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke2(input.stroke)}return stringifyCanonicalStroke2(normalizeKeyStroke2(input))}function stringifyKeySequence2(input,options){return input.map((part)=>stringifyKeyStroke2(part,options)).join("")}function stringifyCanonicalStroke2(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId2(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getLiveHost2(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function isSamePendingSequence2(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.node!==right.node)return!1}return!0}class ActivationService2{state;host;hooks;notify;conditions;catalog;options;constructor(state,host,hooks,notify,conditions,catalog,options={}){this.state=state,this.host=host,this.hooks=hooks,this.notify=notify,this.conditions=conditions,this.catalog=catalog,this.options=options}getFocusedTarget(){return getLiveHost2(this.host).getFocusedTarget()}getFocusedTargetIfAvailable(){return getFocusedTargetIfAvailable2(this.host)}setPendingSequence(next){let previous=this.state.projection.pendingSequence;if(isSamePendingSequence2(previous,next))return;this.state.projection.pendingSequence=next,this.options.onPendingSequenceChanged?.(previous,next),this.invalidateCaches(),this.notifyPendingSequenceChange(),this.notify.queueStateChange()}ensureValidPendingSequence(){let pending=this.state.projection.pendingSequence;if(!pending)return;let focused=this.getFocusedTarget(),captures=pending.captures.filter((capture2)=>{return this.state.layers.layers.has(capture2.layer)&&this.isLayerActiveForFocused(capture2.layer,focused)&&this.conditions.layerMatchesRuntimeState(capture2.layer)&&this.nodeHasReachableBindings(capture2.node,focused)});if(captures.length===0){this.setPendingSequence(null);return}if(captures.length!==pending.captures.length)this.setPendingSequence({captures});return this.state.projection.pendingSequence??void 0}revalidatePendingSequenceIfNeeded(){if(this.host.isDestroyed||!this.state.projection.pendingSequence)return;this.ensureValidPendingSequence()}hasPendingSequenceState(){return!this.host.isDestroyed&&this.state.projection.pendingSequence!==null}getPendingSequence(){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion;if(projections.pendingSequenceCacheVersion===derivedStateVersion)return projections.pendingSequenceCache;let pending=this.ensureValidPendingSequence(),canUseCache=!pending||pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)),sequence=pending?this.collectSequencePartsFromPending(pending):[];if(canUseCache)projections.pendingSequenceCacheVersion=derivedStateVersion,projections.pendingSequenceCache=sequence;return sequence}popPendingSequence(){let pending=this.ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.node.depth<=1)return this.setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let parent=capture2.node.parent;if(!parent||!parent.stroke)continue;nextCaptures.push({layer:capture2.layer,node:parent})}if(nextCaptures.length===0)return this.setPendingSequence(null),!0;return this.setPendingSequence({captures:nextCaptures}),!0}getActiveKeys(options){let projections=this.state.projection,derivedStateVersion=this.state.notify.derivedStateVersion,includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0;if(includeBindings){if(includeMetadata){if(projections.activeKeysBindingsAndMetadataCacheVersion===derivedStateVersion)return projections.activeKeysBindingsAndMetadataCache}else if(projections.activeKeysBindingsCacheVersion===derivedStateVersion)return projections.activeKeysBindingsCache}else if(includeMetadata){if(projections.activeKeysMetadataCacheVersion===derivedStateVersion)return projections.activeKeysMetadataCache}else if(projections.activeKeysPlainCacheVersion===derivedStateVersion)return projections.activeKeysPlainCache;let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),pending=this.ensureValidPendingSequence(),activeLayers=pending?[]:this.getActiveLayers(focused),canUseCache=pending?pending.captures.every((capture2)=>this.layerCanCacheActiveKeys(capture2.layer)):this.activeLayersCanCacheActiveKeys(activeLayers),activeKeys=pending?this.collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):this.collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(!canUseCache)return activeKeys;if(includeBindings)if(includeMetadata)projections.activeKeysBindingsAndMetadataCacheVersion=derivedStateVersion,projections.activeKeysBindingsAndMetadataCache=activeKeys;else projections.activeKeysBindingsCacheVersion=derivedStateVersion,projections.activeKeysBindingsCache=activeKeys;else if(includeMetadata)projections.activeKeysMetadataCacheVersion=derivedStateVersion,projections.activeKeysMetadataCache=activeKeys;else projections.activeKeysPlainCacheVersion=derivedStateVersion,projections.activeKeysPlainCache=activeKeys;return activeKeys}getActiveKeysForCaptures(captures,options){let includeBindings=options?.includeBindings===!0,includeMetadata=options?.includeMetadata===!0,focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused);return this.collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)}nodeHasReachableBindings(node,focused){return this.hasMatchingBindings(node.reachableBindings,focused,this.catalog.getActiveCommandView(focused))}getActiveLayers(focused){return getActiveLayersForFocused2(this.state.layers,this.host,focused)}refreshActiveLayers(focused=this.getFocusedTargetIfAvailable()){getActiveLayersForFocused2(this.state.layers,this.host,focused)}invalidateActiveLayers(){invalidateCachedActiveLayers2(this.state.layers)}isLayerActiveForFocused(layer,focused){return isLayerActiveForFocused2(this.host,layer,focused)}layerCanCacheActiveKeys(layer){return!layer.hasUnkeyedMatchers&&!layer.hasUnkeyedCommands&&!layer.hasUnkeyedBindings}activeLayersCanCacheActiveKeys(activeLayers){for(let layer of activeLayers)if(!this.layerCanCacheActiveKeys(layer))return!1;return!0}collectNodesFromNode(node){let nodes=[],current=node;while(current&&current.stroke)nodes.push(current),current=current.parent;return nodes.reverse(),nodes}collectSequencePartsFromPending(pending){let focused=this.getFocusedTarget(),activeView=this.catalog.getActiveCommandView(focused),paths=pending.captures.map((capture2)=>this.collectNodesFromNode(capture2.node)),firstPath=paths[0];if(!firstPath||firstPath.length===0)return[];let parts=[];for(let index=0;index<firstPath.length;index+=1){let firstNode=firstPath[index];if(!firstNode?.stroke||firstNode.match===null)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let path6 of paths){let node=path6[index];if(!node)continue;let presentation=this.getNodePresentation(node,focused,activeView);if(display===void 0){display=presentation.display,tokenName=presentation.tokenName;continue}if(!hasDisplayConflict&&display!==presentation.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==presentation.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke2(firstNode.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart2(firstNode.stroke,{display,match:firstNode.match,tokenName}))}return parts}collectMatchingBindings(bindings,focused,activeView){let matches=[];for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches}hasMatchingBindings(bindings,focused,activeView){for(let binding of bindings)if(this.conditions.matchesConditions(binding)&&this.catalog.isBindingVisible(binding,focused,activeView))return!0;return!1}getNodePresentation(node,focused,activeView,reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView)){if(!node.stroke)return{display:""};let partIndex=node.depth-1,display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of reachableBindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke2(node.stroke);if(hasTokenConflict)tokenName=void 0;return{display,tokenName}}toActiveBinding(binding,focused,activeView){return{sequence:binding.sequence,command:binding.command,commandAttrs:this.catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}}collectActiveBindings(bindings,focused,activeView){return bindings.map((binding)=>this.toActiveBinding(binding,focused,activeView))}collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set,hasLayerConditions=this.state.layers.layersWithConditions>0;for(let layer of activeLayers){if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let[bindingKey,child]of layer.root.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView){let activeKeys=new Map,stopped=new Set;for(let capture2 of captures)for(let[bindingKey,child]of capture2.node.children){if(stopped.has(bindingKey))continue;let selection=this.selectActiveKey(child,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,this.createActiveKeyState(child.stroke,selection,includeBindings));else this.updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}let materialized=[];for(let state of activeKeys.values()){let activeKey=this.materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized}selectActiveKey(node,includeBindings,focused,activeView){return node.children.size>0?this.selectPrefixActiveKey(node,includeBindings,focused,activeView):this.selectExactActiveKey(node,includeBindings,focused,activeView)}selectPrefixActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let reachableBindings=this.collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let prefixBindings=this.selectActiveBindings(node.bindings,focused,activeView);return{...this.getNodePresentation(node,focused,activeView,reachableBindings),continues:!0,firstBinding:prefixBindings?.bindings[0],commandBinding:prefixBindings?.commandBinding,bindings:includeBindings&&prefixBindings&&prefixBindings.bindings.length>0?[...prefixBindings.bindings]:void 0,stop:!0}}selectExactActiveKey(node,includeBindings,focused,activeView){if(!node.stroke)return;let selected=this.selectActiveBindings(node.bindings,focused,activeView);if(!selected)return;let display,tokenName;if(selected.bindings.length===1){let part=selected.bindings[0]?.sequence[node.depth-1];display=part?.display??stringifyKeyStroke2(node.stroke),tokenName=part?.tokenName}else{let presentation=this.getNodePresentation(node,focused,activeView,selected.bindings);display=presentation.display,tokenName=presentation.tokenName}return{display,tokenName,continues:!1,firstBinding:selected.bindings[0],commandBinding:selected.commandBinding,bindings:includeBindings?[...selected.bindings]:void 0,stop:selected.stop}}selectActiveBindings(bindings,focused,activeView){let selected=[],commandBinding;for(let binding of bindings){if(!this.conditions.matchesConditions(binding)||!this.catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}}createActiveKeyState(stroke,selection,includeBindings){return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}}updateActiveKeyState(state,selection,includeBindings){if(!state.firstBinding&&selection.firstBinding)state.firstBinding=selection.firstBinding;if(!state.commandBinding&&selection.commandBinding)state.commandBinding=selection.commandBinding;if(selection.continues)state.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state.bindings){state.bindings=[...selection.bindings];return}state.bindings.push(...selection.bindings)}materializeActiveKey(state,includeBindings,includeMetadata,focused,activeView){if(!state.commandBinding&&!state.continues)return;let activeKey={stroke:cloneKeyStroke2(state.stroke),display:state.display,continues:state.continues};if(state.tokenName)activeKey.tokenName=state.tokenName;if(state.commandBinding)activeKey.command=state.commandBinding.command;if(includeBindings&&state.bindings&&state.bindings.length>0)activeKey.bindings=state.bindings.length===1?[this.toActiveBinding(state.bindings[0],focused,activeView)]:this.collectActiveBindings(state.bindings,focused,activeView);if(includeMetadata){if(state.firstBinding?.attrs)activeKey.bindingAttrs=state.firstBinding.attrs;let commandAttrs=state.commandBinding?this.catalog.getBindingCommandAttrs(state.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey}invalidateCaches(){this.state.projection.pendingSequenceCacheVersion=-1,this.state.projection.activeKeysPlainCacheVersion=-1,this.state.projection.activeKeysBindingsCacheVersion=-1,this.state.projection.activeKeysMetadataCacheVersion=-1,this.state.projection.activeKeysBindingsAndMetadataCacheVersion=-1}notifyPendingSequenceChange(){if(!this.hooks.has("pendingSequence"))return;this.hooks.emit("pendingSequence",this.state.projection.pendingSequence?this.collectSequencePartsFromPending(this.state.projection.pendingSequence):[])}}function mergeRequirement2(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute2(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function isPlainObject3(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage2(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike2(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue2(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue2(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject3(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue2(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandChainCacheState2(){return{resolvedWithoutRecordChains:new Map,resolvedWithRecordChains:new Map,fallbackWithoutRecord:new Map,fallbackWithRecord:new Map,fallbackWithoutRecordErrors:new Set,fallbackWithRecordErrors:new Set}}function normalizeBindingCommand2(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName2(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}class CommandCatalogService2{state;host;notify;conditions;options;constructor(state,host,notify,conditions,options){this.state=state,this.host=host,this.notify=notify,this.conditions=conditions,this.options=options}normalizeCommands(commands){return normalizeRegisteredCommands2({commands,commandFields:this.state.environment.commandFields,conditions:this.conditions,onError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}prependCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.prepend(resolver),resolver)}appendCommandResolver(resolver){return this.mutateCommandResolvers(()=>this.state.commands.commandResolvers.append(resolver),resolver)}clearCommandResolvers(){if(!this.state.commands.commandResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.commands.commandResolvers.clear(),this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}getCommands(query2){return this.getFilteredCommandEntries(query2).map((entry2)=>getRegisteredCommandRecord2(entry2.command))}getCommandEntries(query2){let context=this.getCommandQueryContext(query2),filteredEntries=this.getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getRegisteredCommandRecord2(entry2.command),bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)this.collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))}getResolvedCommandChain(command,focused,includeRecord){let view=this.getActiveCommandView(focused),entries=this.getResolvedCommandChainFromView(view,command,focused,includeRecord,"active",view.chainsByName.get(command)),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{entries,hadError}}getRegisteredResolvedEntries(command,includeRecord){let view=this.getRegisteredCommandView(),cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let chain=view.chainsByName.get(command);if(!chain||chain.length===0){cache.set(command,[]);return}let resolved=[];for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand2(entry2.command,{includeRecord})});return cache.set(command,resolved),resolved}getRegisteredResolverFallback(command,includeRecord){let view=this.getRegisteredCommandView(),fallback=this.getFallbackResolvedCommand(view,command,null,includeRecord,"registered"),hadError=(includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors).has(command);return{resolved:fallback?.resolved,hadError}}getCommandAttrs(command,focused){return this.getTopResolvedCommand(command,focused,!1)?.resolved.attrs}getTopCommandRecord(command,focused){return this.getTopResolvedCommand(command,focused,!0)?.resolved.record}getTopRegisteredCommandRecord(command){let top=this.getTopRegisteredCommand(command);return top?getRegisteredCommandRecord2(top.command):void 0}getDispatchUnavailableCommandState(command,focused,includeRecord){let chain=this.getRegisteredCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused2(this.host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!this.conditions.layerMatchesRuntimeState(entry2.layer)||!this.conditions.matchesConditions(entry2.command))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeRecord?getRegisteredCommandRecord2(unavailableEntry.command):void 0}}getActiveCommandView(focused){let currentFocused=getFocusedTargetIfAvailable2(this.host),derivedStateVersion=this.state.notify.derivedStateVersion;if(focused===currentFocused&&this.state.commands.activeCommandViewVersion===derivedStateVersion&&this.state.commands.activeCommandView?.cacheable)return this.state.commands.activeCommandView;let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map,cacheable=!0;if(this.state.layers.layersWithCommands>0)for(let layer of getActiveLayersForFocused2(this.state.layers,this.host,focused)){if(layer.commands.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;if(layer.hasUnkeyedMatchers)cacheable=!1;for(let command of layer.commands){if(command.hasUnkeyedMatchers)cacheable=!1;if(!this.conditions.matchesConditions(command))continue;let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2]);if(!reachableByName.has(command.name))reachableByName.set(command.name,entry2),reachable.push(entry2)}}let view={cacheable,entries,reachable,reachableByName,chainsByName,...createCommandChainCacheState2()};if(focused===currentFocused&&view.cacheable)this.state.commands.activeCommandViewVersion=derivedStateVersion,this.state.commands.activeCommandView=view;return view}getRegisteredCommandView(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandViewVersion===cacheVersion&&this.state.commands.registeredCommandView)return this.state.commands.registeredCommandView;let entries=[],chainsByName=new Map;for(let layer of this.state.layers.sortedLayers){if(layer.commands.length===0)continue;for(let command of layer.commands){let entry2={layer,command};entries.push(entry2);let existing=chainsByName.get(command.name);if(existing)existing.push(entry2);else chainsByName.set(command.name,[entry2])}}let view={entries,chainsByName,...createCommandChainCacheState2()};return this.state.commands.registeredCommandViewVersion=cacheVersion,this.state.commands.registeredCommandView=view,view}isBindingVisible(binding,focused,activeView){if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView.reachableByName.has(binding.command))return!0;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")!==void 0}getBindingCommandAttrs(binding,focused,activeView){if(typeof binding.command!=="string")return;let active=activeView.reachableByName.get(binding.command);if(active)return active.command.attrs;return this.getFallbackResolvedCommand(activeView,binding.command,focused,!1,"active")?.resolved.attrs}getCommandResolutionStatus(command,layerCommands){if(layerCommands?.has(command)||this.state.commands.registeredNames.has(command))return"resolved";let lookup=this.resolveCommandWithResolvers(command,getFocusedTargetIfAvailable2(this.host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"}mutateCommandResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let off=register2();return this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange(),()=>{this.notify.runWithStateChangeBatch(()=>{if(off(),this.state.commands.commandResolvers.values().includes(resolver))return;this.state.commands.commandMetadataVersion+=1,this.options.onCommandResolversChanged(),this.notify.queueStateChange()})}})}getTopResolvedCommand(command,focused,includeRecord){let activeView=this.getActiveCommandView(focused),active=activeView.reachableByName.get(command);if(active)return{target:active.layer.target,resolved:resolveRegisteredCommand2(active.command,{includeRecord})};return this.getFallbackResolvedCommand(activeView,command,focused,includeRecord,"active")}getTopRegisteredCommand(command){return this.getRegisteredCommandView().chainsByName.get(command)?.[0]}getFallbackResolvedCommand(view,command,focused,includeRecord,mode){let cache=includeRecord?view.fallbackWithRecord:view.fallbackWithoutRecord,errorCache=includeRecord?view.fallbackWithRecordErrors:view.fallbackWithoutRecordErrors;if(cache.has(command)){let cached=cache.get(command);return cached?{resolved:cached}:void 0}let lookup=this.resolveCommandWithResolvers(command,focused,{includeRecord,mode});if(cache.set(command,lookup.resolved??null),lookup.hadError)errorCache.add(command);if(!lookup.resolved)return;return{resolved:lookup.resolved}}getResolvedCommandChainFromView(view,command,focused,includeRecord,mode,activeChain){let cache=includeRecord?view.resolvedWithRecordChains:view.resolvedWithoutRecordChains,cached=cache.get(command);if(cached)return cached.length>0?cached:void 0;let resolved=[],chain=activeChain;if(chain)for(let entry2 of chain)resolved.push({target:entry2.layer.target,resolved:resolveRegisteredCommand2(entry2.command,{includeRecord})});let fallback=this.getFallbackResolvedCommand(view,command,focused,includeRecord,mode);if(fallback)resolved.push(fallback);return cache.set(command,resolved),resolved.length>0?resolved:void 0}getRegisteredLayerCommandEntries(){let cacheVersion=this.state.commands.commandMetadataVersion;if(this.state.commands.registeredCommandEntriesCacheVersion===cacheVersion)return this.state.commands.registeredCommandEntriesCache;let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);let entries=[];for(let layer of layers)for(let command of layer.commands)entries.push({layer,command});return this.state.commands.registeredCommandEntriesCacheVersion=cacheVersion,this.state.commands.registeredCommandEntriesCache=entries,entries}getCommandQueryContext(query2){let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable2(this.host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:this.getActiveCommandView(focused)}}getFilteredCommandEntries(query2,context=this.getCommandQueryContext(query2)){let entries;if(context.visibility==="registered")entries=this.getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries2({entries,query:query2,getCommandRecord:(command)=>getRegisteredCommandRecord2(command),onFilterError:(error2)=>{this.notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})}collectCommandEntryBindings(grouped,indexesByName,context){if(context.visibility==="registered"){let layers=[...this.state.layers.layers];layers.sort((left,right)=>left.order-right.order);for(let layer of layers)for(let binding of layer.compiledBindings)this.collectBindingForCommandEntries(grouped,indexesByName,binding);return}let activeView=context.activeView;if(!activeView)return;for(let layer of getActiveLayersForFocused2(this.state.layers,this.host,context.focused)){if(layer.compiledBindings.length===0||!this.conditions.layerMatchesRuntimeState(layer))continue;for(let binding of layer.compiledBindings){if(!this.conditions.matchesConditions(binding)||!this.isBindingVisible(binding,context.focused,activeView))continue;this.collectBindingForCommandEntries(grouped,indexesByName,binding)}}}collectBindingForCommandEntries(grouped,indexesByName,binding){if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push({sequence:binding.sequence,command:binding.command,commandAttrs:item.command.attrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough})}}resolveCommandWithResolvers(command,focused,options){let includeRecord=options?.includeRecord===!0,context=this.createCommandResolverContext(includeRecord,focused,options?.mode??"active");return resolveCommandWithResolvers2(command,this.state.commands.commandResolvers.values(),context,(error2)=>{this.notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)})}createCommandResolverContext(includeRecord,focused,mode){return{getCommandAttrs:(name)=>{if(mode==="registered")return this.getTopRegisteredCommand(name)?.command.attrs;return this.getCommandAttrs(name,focused)},getCommandRecord:(name)=>{if(!includeRecord)return;if(mode==="registered")return this.getTopRegisteredCommandRecord(name);return this.getTopCommandRecord(name,focused)}}}}function getRegisteredCommandRecord2(command){if(command.record)return command.record;let fields=EMPTY_COMMAND_FIELDS2;if(command.fields!==EMPTY_COMMAND_FIELDS2&&Object.keys(command.fields).length>0)fields=snapshotDataValue2(command.fields,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2);let record=command.attrs?Object.freeze({name:command.name,fields,attrs:snapshotDataValue2(command.attrs,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2)}):Object.freeze({name:command.name,fields});return command.record=record,record}function resolveRegisteredCommand2(command,options){if(options?.includeRecord===!0){let existing2=command.resolvedWithRecord;if(existing2)return existing2;let resolved2={run:createRegisteredCommandRunner2(command)};if(command.attrs)resolved2.attrs=command.attrs;return resolved2.record=getRegisteredCommandRecord2(command),command.resolvedWithRecord=resolved2,resolved2}let existing=command.resolved;if(existing)return existing;let resolved={run:createRegisteredCommandRunner2(command)};if(command.attrs)resolved.attrs=command.attrs;return command.resolved=resolved,resolved}function normalizeRegisteredCommands2(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands){let normalizedCommand;try{let mergedAttrs={},mergedFields={},mergedRequires={},matchers=[],conditionKeys=new Set,hasUnkeyedMatchers=!1,normalizedName=normalizeCommandName2(command.name);if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}for(let[fieldName,value]of Object.entries(command)){if(RESERVED_COMMAND_FIELDS2.has(fieldName)||value===void 0)continue;mergedFields[fieldName]=snapshotDataValue2(value,SNAPSHOT_COMMAND_METADATA_OPTIONS2);let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createCommandFieldContext2(mergedAttrs,mergedRequires,conditionKeys,matchers,options.conditions,fieldName,{onUnkeyedMatcher(){hasUnkeyedMatchers=!0}}))}let attrs=Object.keys(mergedAttrs).length===0?void 0:Object.freeze(mergedAttrs),fields=Object.keys(mergedFields).length===0?EMPTY_COMMAND_FIELDS2:Object.freeze(mergedFields);if(normalizedCommand={name:normalizedName,fields,run:command.run,requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,matchCacheDirty:!0},attrs)normalizedCommand.attrs=attrs}catch(error2){options.onError("register-command-failed",error2,getErrorMessage2(error2,`Failed to register keymap command "${String(command.name)}"`));continue}seen.add(normalizedCommand.name),normalizedCommands.push(normalizedCommand)}return normalizedCommands}function createCommandFieldContext2(mergedAttrs,mergedRequires,conditionKeys,matchers,conditions,fieldName,options){return{require(name,requiredValue){mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},attr(name,attributeValue){mergeAttribute2(mergedAttrs,name,snapshotDataValue2(attributeValue,SNAPSHOT_COMMAND_METADATA_OPTIONS2),`field ${fieldName}`)},activeWhen(matcher){let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)options.onUnkeyedMatcher();matchers.push(runtimeMatcher)}}}function createRegisteredCommandRunner2(command){if(command.runner)return command.runner;let runner=(ctx)=>{return command.run({...ctx,command:getRegisteredCommandRecord2(command)})};return command.runner=runner,runner}function resolveCommandWithResolvers2(command,resolvers,context,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolved;try{resolved=resolver(command,context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolved)return{hadError,resolved}}return{hadError}}function queryLayerCommandEntries2(options){let namespace=options.query?.namespace,normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS2;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate;if(typeof filter==="function")filterPredicate=filter;else if(filter)filterEntries2=Object.entries(filter);let results=[];for(let entry2 of options.entries){let command=entry2.command;if(!commandMatchesNamespace2(command,namespace))continue;if(!commandMatchesSearch2(command,normalizedSearch,searchKeys))continue;if(!commandMatchesFilters2(command,filterEntries2,options))continue;let record=options.getCommandRecord(command);if(filterPredicate){let matches=!1;try{matches=filterPredicate(record)}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}results.push(entry2)}return results}function commandMatchesSearch2(command,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch2(command,key,search))return!0;return!1}function commandMatchesNamespace2(command,namespace){if(namespace===void 0)return!0;if(!Object.prototype.hasOwnProperty.call(command.fields,"namespace"))return!1;return commandValueMatchesFilter2(command.fields.namespace,namespace)}function commandMatchesFilters2(command,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery2(command,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch2(command,key,search){if(key==="name"&&commandValueMatchesSearch2(command.name,search))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesSearch2(command.fields[key],search))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesSearch2(command.attrs[key],search);return!1}function commandKeyMatchesQuery2(command,key,matcher,options){if(typeof matcher==="function"){let record,getRecord=()=>{if(!record)record=options.getCommandRecord(command);return record},foundValue=!1;if(key==="name"){foundValue=!0;try{if(matcher(command.name,getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(Object.prototype.hasOwnProperty.call(command.fields,key)){foundValue=!0;try{if(matcher(command.fields[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key)){foundValue=!0;try{if(matcher(command.attrs[key],getRecord()))return!0}catch(error2){return options.onFilterError(error2),!1}}if(!foundValue)try{return matcher(void 0,getRecord())}catch(error2){return options.onFilterError(error2),!1}return!1}return commandKeyMatchesExact2(command,key,matcher)}function commandKeyMatchesExact2(command,key,matcher){if(key==="name"&&commandValueMatchesFilter2(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(command.fields,key)&&commandValueMatchesFilter2(command.fields[key],matcher))return!0;if(command.attrs&&Object.prototype.hasOwnProperty.call(command.attrs,key))return commandValueMatchesFilter2(command.attrs[key],matcher);return!1}function commandValueMatchesFilter2(value,matcher){if(Array.isArray(matcher)){for(let expected of matcher)if(commandValueMatchesExact2(value,expected))return!0;return!1}return commandValueMatchesExact2(value,matcher)}function commandValueMatchesExact2(value,expected){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesExact2(entry2,expected))return!0;return!1}return Object.is(value,expected)}function commandValueMatchesSearch2(value,search){if(Array.isArray(value)){for(let entry2 of value)if(commandValueMatchesSearch2(entry2,search))return!0;return!1}if(typeof value==="string")return value.toLowerCase().includes(search);if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase().includes(search);return!1}class CommandExecutorService2{notify;runtime;activation;catalog;options;constructor(notify,runtime,activation,catalog,options){this.notify=notify,this.runtime=runtime,this.activation=activation,this.catalog=catalog,this.options=options}runCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand2(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chain=this.catalog.getRegisteredResolvedEntries(normalized,includeRecord),rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}let fallback=this.catalog.getRegisteredResolverFallback(normalized,includeRecord);if(fallback.resolved){let execution=this.executeResolvedCommand(normalized,fallback.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(fallback.hadError)return{ok:!1,reason:"error"};return rejectedResult??{ok:!1,reason:"not-found"}}dispatchCommand(cmd,options){let normalized;try{normalized=normalizeBindingCommand2(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeRecord=options?.includeCommand===!0,focused=options?.focused??this.activation.getFocusedTargetIfAvailable(),event=options?.event??this.options.createCommandEvent(),data=this.runtime.getReadonlyData(),chainLookup=this.catalog.getResolvedCommandChain(normalized,focused,includeRecord),chain=chainLookup.entries,rejectedResult;if(chain?.length===1){let[entry2]=chain;if(entry2){let execution=this.executeResolvedCommand(normalized,entry2.resolved,{keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data});if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:options?.target??entry2.target??null,data},execution=this.executeResolvedCommand(normalized,entry2.resolved,context);if(execution.status==="handled"||execution.status==="error")return execution.result;rejectedResult=execution.result}if(chainLookup.hadError)return{ok:!1,reason:"error"};let unavailable=this.catalog.getDispatchUnavailableCommandState(normalized,focused,includeRecord);if(unavailable)return unavailable.command?{ok:!1,reason:unavailable.reason,command:unavailable.command}:{ok:!1,reason:unavailable.reason};return rejectedResult??{ok:!1,reason:"not-found"}}runBinding(bindingLayer,binding,event,focused){let data=this.runtime.getReadonlyData();if(binding.run){if(this.executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",{run:binding.run},{keymap:this.options.keymap,event,focused,target:bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects2(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=this.catalog.getResolvedCommandChain(binding.command,focused,!1).entries;if(chain?.length===1){let[entry2]=chain;if(entry2){if(this.executeResolvedCommand(binding.command,entry2.resolved,{keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data}).status==="rejected")return!1;return applyBindingEventEffects2(binding,event),!0}}else if(chain)for(let entry2 of chain){let context={keymap:this.options.keymap,event,focused,target:entry2.target??bindingLayer.target??null,data};if(this.executeResolvedCommand(binding.command,entry2.resolved,context).status==="rejected")continue;return applyBindingEventEffects2(binding,event),!0}return!1}executeResolvedCommand(commandName,resolved,context){let command=resolved.record,result2;try{result2=resolved.run(context)}catch(error2){return this.notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:{ok:!1,reason:"error",command}}}if(isPromiseLike2(result2))return result2.catch((error2)=>{this.notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:{ok:!0,command}};if(result2===!1){if(resolved.rejectedResult)return{status:"rejected",result:resolved.rejectedResult};return{status:"rejected",result:{ok:!1,reason:"rejected",command}}}return{status:"handled",result:{ok:!0,command}}}}function applyBindingEventEffects2(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function normalizeBindingInputs2(bindings){if(Array.isArray(bindings))return bindings;let normalized=[];for(let[key,cmd]of Object.entries(bindings)){if(typeof cmd!=="string"&&typeof cmd!=="function")throw Error(`Invalid keymap binding for "${key}": shorthand bindings must map to string or function commands`);normalized.push({key,cmd})}return normalized}function snapshotBindingInputs2(bindings){return normalizeBindingInputs2(bindings).map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBindingInput2(binding){return{...binding,sequence:cloneKeySequence2(binding.sequence)}}function createSequenceNode2(parent,stroke,match){return{parent,depth:parent?parent.depth+1:0,stroke,match,children:new Map,bindings:[],reachableBindings:[]}}function snapshotAttributes2(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue2(attrs,{freeze:!0})}class CompilerService2{state;notify;conditions;options;constructor(state,notify,conditions,options){this.state=state,this.notify=notify,this.conditions=conditions,this.options=options}parseTokenKey(key){return parseSingleKeyPartWithParsers2(key,this.state.environment.bindingParsers.values(),{tokens:this.state.environment.tokens,layer:EMPTY_COMPILE_FIELDS2,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})}compileBindings(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields){let root=createSequenceNode2(null,null,null),compiledBindings=[],hasTokenBindings=!1,bindingExpanders=this.state.environment.bindingExpanders.values(),bindingParsers=this.state.environment.bindingParsers.values(),bindingFieldCompilers=this.state.environment.bindingFields,allowExactPrefixAmbiguity=this.state.dispatch.disambiguationResolvers.has(),warnUnknownField=this.options.warnUnknownField,warnUnknownToken=this.options.warnUnknownToken,conditions=this.conditions;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingInputWithExpanders2(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){this.notify.emitError("binding-expand-error",error2,getErrorMessage2(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let parsed;try{parsed=typeof expandedBindingKey==="string"?parseBindingSequenceWithParsers2(expandedBindingKey,bindingParsers,{tokens:tokens2,layer:compileFields,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)}):{parts:[this.parseObjectKeyPart(expandedBindingKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1}}catch(error2){this.notify.emitError("binding-parse-error",error2,getErrorMessage2(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedBindingKey==="string"?expandedBindingKey:String(expandedBindingKey.name));for(let compiledInput of this.applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=this.normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires,mergedAttrs,matchers,conditionKeys,hasUnkeyedMatchers=!1;for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS2.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,{require(name,requiredValue){if(!mergedRequires)mergedRequires={};if(mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),!conditionKeys)conditionKeys=new Set;conditionKeys.add(name)},attr(name,attributeValue){if(!mergedAttrs)mergedAttrs={};mergeAttribute2(mergedAttrs,name,attributeValue,`field ${fieldName}`)},activeWhen:(matcher)=>{let runtimeMatcher=conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;if(!matchers)matchers=[];matchers.push(runtimeMatcher)}})}let attrs=mergedAttrs?snapshotAttributes2(mergedAttrs):void 0,command=normalizeBindingCommand2(compiledInput.cmd),compiledBinding={sequence:compiledSequence,command,event,sourceBinding:snapshotParsedBindingInput2(compiledInput),sourceTarget,sourceLayerOrder,sourceBindingIndex:bindingIndex,requires:mergedRequires?Object.entries(mergedRequires):EMPTY_REQUIRES2,matchers:matchers??EMPTY_MATCHERS2,conditionKeys:conditionKeys?[...conditionKeys]:EMPTY_CONDITION_KEYS2,hasUnkeyedMatchers,matchCacheDirty:!0,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");if(event==="press")this.insertBinding(root,compiledBinding,allowExactPrefixAmbiguity);compiledBindings.push(compiledBinding)}catch(error2){this.notify.emitError("binding-compile-error",error2,getErrorMessage2(error2,"Failed to compile keymap binding"))}}}return{root,bindings:compiledBindings,hasTokenBindings}}parseObjectKeyPart(key,options){return createKeySequencePart2(key,options)}normalizeBindingEvent(event){if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)}applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields){let bindingTransformers=this.state.environment.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence2(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence2(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS2;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers2(key,bindingParsers,{tokens:tokens2,layer,parseObjectKey:(value,options)=>this.parseObjectKeyPart(value,options)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBindingInput2(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){this.notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]}insertBinding(root,binding,allowExactPrefixAmbiguity){let node=root,touchedNodes=[],createdNodes=[];try{for(let part of binding.sequence){if(!allowExactPrefixAmbiguity&&node.bindings.some((candidate)=>candidate.command!==void 0))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");let bindingKey=part.match,child=node.children.get(bindingKey);if(!child)child=createSequenceNode2(node,cloneKeySequencePart2(part).stroke,part.match),node.children.set(bindingKey,child),createdNodes.push({parent:node,key:bindingKey});child.reachableBindings.push(binding),touchedNodes.push(child),node=child}if(!allowExactPrefixAmbiguity&&binding.command!==void 0&&node.children.size>0)throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer");node.bindings=[...node.bindings,binding]}catch(error2){for(let index=touchedNodes.length-1;index>=0;index-=1){let touchedNode=touchedNodes[index];if(!touchedNode)continue;if(touchedNode.reachableBindings.at(-1)===binding){touchedNode.reachableBindings.pop();continue}touchedNode.reachableBindings=touchedNode.reachableBindings.filter((candidate)=>candidate!==binding)}for(let index=createdNodes.length-1;index>=0;index-=1){let createdNode=createdNodes[index];if(!createdNode)continue;let child=createdNode.parent.children.get(createdNode.key);if(!child)continue;if(child.children.size>0||child.reachableBindings.length>0||child.bindings.length>0)continue;createdNode.parent.children.delete(createdNode.key)}throw error2}}}function expandBindingInputWithExpanders2(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[key];let layer=options?.layer??EMPTY_COMPILE_FIELDS2,candidates=[key];for(let expander of expanders){let nextCandidates=[];for(let input of candidates){let result2=expander({input,layer});if(!result2){nextCandidates.push(input);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${input}"`);for(let expandedInput of result2){if(typeof expandedInput!=="string")throw Error(`Keymap binding expander must return string key sequences for "${input}"`);nextCandidates.push(expandedInput)}}candidates=nextCandidates}return candidates}function parseBindingSequenceWithParsers2(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS2,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,normalizeTokenName:normalizeBindingTokenName2,createMatch:createTextKeyMatch2,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers2(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers2(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher2(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}class ConditionService2{state;notify;constructor(state,notify){this.state=state,this.notify=notify}buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher,cacheable:!1};if(isReactiveMatcher2(matcher))return{source,match:()=>matcher.get(),cacheable:!0,subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)}hasNoConditions(target){return target.requires.length===0&&target.matchers.length===0}indexRuntimeMatchable(target){if(target.conditionKeys.length>0)for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(dependents){dependents.add(target);continue}this.state.conditions.runtimeKeyDependents.set(key,new Set([target]))}if(!target.hasUnkeyedMatchers)target.matchCacheDirty=!0}unindexRuntimeMatchable(target){if(target.conditionKeys.length===0)return;for(let key of target.conditionKeys){let dependents=this.state.conditions.runtimeKeyDependents.get(key);if(!dependents)continue;if(dependents.delete(target),dependents.size===0)this.state.conditions.runtimeKeyDependents.delete(key)}}invalidateRuntimeConditionKey(name){let dependents=this.state.conditions.runtimeKeyDependents.get(name);if(!dependents)return;for(let target of dependents)target.matchCacheDirty=!0}matchesConditions(target){if(this.hasNoConditions(target))return!0;if(this.hasFreshConditionCache(target))return target.matchCache===!0;let matched=this.matchRequirements(target.requires)&&this.matchesRuntimeMatchers(target);return this.updateConditionCache(target,matched),matched}layerMatchesRuntimeState(layer){if(this.state.layers.layersWithConditions===0||this.hasNoConditions(layer))return!0;return this.matchesConditions(layer)}matchRequirements(requires){if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(this.state.runtime.data[name],value))return!1;return!0}hasFreshConditionCache(target){if(target.hasUnkeyedMatchers)return!1;return target.matchCacheDirty!==!0&&target.matchCache!==void 0}updateConditionCache(target,matched){if(target.hasUnkeyedMatchers)return;target.matchCacheDirty=!1,target.matchCache=matched}matchesRuntimeMatcher(matcher){try{return matcher.match()}catch(error2){return this.notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}}matchesRuntimeMatchers(target){if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?this.matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!this.matchesRuntimeMatcher(matcher))return!1;return!0}}function createSyncDecision2(action,handler){return{[KEY_DISAMBIGUATION_DECISION2]:!0,action,handler}}function createDeferredDecision2(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION2]:!0,action}}function isSyncDecision2(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION2]===!0}function isDeferredDecision2(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION2]===!0}class DispatchService2{state;notify;runtime;activation;conditions;executor;compiler;catalog;layers;eventMatchResolverContext;pendingDisambiguation=null;nextPendingDisambiguationId=0;constructor(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers){this.state=state,this.notify=notify,this.runtime=runtime,this.activation=activation,this.conditions=conditions,this.executor=executor,this.compiler=compiler,this.catalog=catalog,this.layers=layers,this.eventMatchResolverContext={resolveKey:(key)=>{return this.compiler.parseTokenKey(key).match}}}intercept(name,fn,options){if(name==="key"){let keyOptions=options;return this.state.dispatch.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return this.state.dispatch.rawHooks.register(fn,{priority:rawOptions?.priority??0})}prependEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.prepend(resolver)}appendEventMatchResolver(resolver){return this.state.dispatch.eventMatchResolvers.append(resolver)}clearEventMatchResolvers(){this.state.dispatch.eventMatchResolvers.clear()}prependDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.prepend(resolver),resolver)}appendDisambiguationResolver(resolver){return this.mutateDisambiguationResolvers(()=>this.state.dispatch.disambiguationResolvers.append(resolver),resolver)}clearDisambiguationResolvers(){if(!this.state.dispatch.disambiguationResolvers.has())return;this.notify.runWithStateChangeBatch(()=>{this.state.dispatch.disambiguationResolvers.clear(),this.layers.recompileBindings()})}handlePendingSequenceChange(_previous,_next){if(!this.pendingDisambiguation)return;this.cancelPendingDisambiguation()}handleRawSequence(sequence){let hooks=this.state.dispatch.rawHooks.entries();if(hooks.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks){try{hook.listener(context)}catch(error2){this.notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}handleKeyEvent(event,release){if(!release)this.cancelPendingDisambiguation();let hooks=this.state.dispatch.keyHooks.entries(),context={event,setData:(name,value)=>{this.runtime.setData(name,value)},getData:(name)=>{return this.runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){this.notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped)return}if(release){this.dispatchReleaseLayers(event);return}this.dispatchLayers(event)}mutateDisambiguationResolvers(register2,resolver){return this.notify.runWithStateChangeBatch(()=>{let hadResolvers=this.state.dispatch.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings();return()=>{this.notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=this.state.dispatch.disambiguationResolvers.has();if(off(),this.state.dispatch.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!this.state.dispatch.disambiguationResolvers.has())this.layers.recompileBindings()})}})}dispatchReleaseLayers(event){let focused=this.activation.getFocusedTarget(),activeLayers=this.activation.getActiveLayers(focused),hasLayerConditions=this.state.layers.layersWithConditions>0,matchKeys=this.resolveEventMatchKeys(event);layerLoop:for(let layer of activeLayers){if(layer.compiledBindings.length===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=this.runReleaseBindings(layer,strokeKey,event,focused);if(!result2.handled)continue;if(result2.stop)return;continue layerLoop}}}dispatchLayers(event){let focused=this.activation.getFocusedTarget(),pending=this.activation.ensureValidPendingSequence(),matchKeys=this.resolveEventMatchKeys(event);if(pending){this.dispatchPendingSequence(pending,matchKeys,event,focused);return}let activeLayers=this.activation.getActiveLayers(focused);this.dispatchFromRoot(activeLayers,matchKeys,event,focused)}dispatchPendingSequence(pending,matchKeys,event,focused){let advancedCaptures=[];for(let capture2 of pending.captures){let nextNode=this.getReachableChild(capture2.node,matchKeys,focused);if(!nextNode)continue;advancedCaptures.push({layer:capture2.layer,node:nextNode})}if(advancedCaptures.length===0){this.activation.setPendingSequence(null);return}this.dispatchPendingCapturesFromIndex(advancedCaptures,0,!1,event,focused)}dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2)continue;if(capture2.node.children.size>0){if(hasHandledExact)continue;let continuationCaptures=this.collectPendingCapturesFromAdvanced(advancedCaptures,index);if(this.tryResolvePendingAmbiguity(advancedCaptures,index,continuationCaptures,capture2,event,focused,hasHandledExact))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(!result2.handled)continue;if(hasHandledExact=!0,result2.stop){this.activation.setPendingSequence(null);return}}this.activation.setPendingSequence(null)}dispatchFromRoot(activeLayers,matchKeys,event,focused){this.dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode)continue;if(nextNode.children.size>0){let continuationCaptures=this.collectPendingCapturesFromRoot(activeLayers,index,matchKeys,focused);if(this.tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,layer,nextNode,event,focused))return;this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation();return}let result2=this.runBindings(layer,nextNode.bindings,event,focused);if(!result2.handled)continue;if(result2.stop)return}}tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,layer,node,event,focused){let applyExact=()=>{if(this.activation.setPendingSequence(null),!this.runBindings(layer,node.bindings,event,focused).stop)this.dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:node.bindings,runExact:applyExact})}tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,capture2,event,focused,handledExact){let applyExact=()=>{this.activation.setPendingSequence(null);let result2=this.runBindings(capture2.layer,capture2.node.bindings,event,focused);if(result2.stop)return;this.dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused)};return this.tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:capture2.node.bindings,runExact:applyExact})}tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,runExact}=options;if(!this.state.dispatch.disambiguationResolvers.has()||continuationCaptures.length===0)return!1;let activeView=this.catalog.getActiveCommandView(focused),exactBindings=this.activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return!1;let continueSequence=()=>{this.activation.setPendingSequence({captures:continuationCaptures}),event.preventDefault(),event.stopPropagation()},clear=()=>{this.activation.setPendingSequence(null),event.preventDefault(),event.stopPropagation()},sequence,getSequence=()=>{return sequence??=this.activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=this.resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return this.warnUnresolvedAmbiguity(getSequence()),continueSequence(),!0;return this.applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact(),!0;if(decision.action==="continue-sequence")return continueSequence(),!0;if(decision.action==="clear")return clear(),!0;return continueSequence(),this.scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),!0}resolveDisambiguation(options){let activation=this.activation,runtime=this.runtime,sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence2(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke2(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence2(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision2("run-exact"),continueSequence:()=>createSyncDecision2("continue-sequence"),clear:()=>createSyncDecision2("clear"),defer:(run)=>createSyncDecision2("defer",run)};for(let resolver of this.state.dispatch.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){this.notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike2(result2)){this.notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision2(result2)){this.notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){this.cancelPendingDisambiguation();let controller=new AbortController,pending={id:this.nextPendingDisambiguationId++,controller,captures,apply};this.pendingDisambiguation=pending,queueMicrotask(()=>{this.executeDeferredDisambiguation(pending,handler,focused,sequence)})}executeDeferredDisambiguation(pending,handler,focused,sequence){if(!this.isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence2(sequence),focused,sleep:(ms)=>{return this.sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision2("run-exact"),continueSequence:()=>createDeferredDecision2("continue-sequence"),clear:()=>createDeferredDecision2("clear")},result2;try{result2=handler(ctx)}catch(error2){if(this.isPendingDisambiguationCurrent(pending))this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending);return}if(isPromiseLike2(result2)){result2.then((resolved)=>{this.applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!this.isPendingDisambiguationCurrent(pending))return;this.notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),this.finishPendingDisambiguation(pending)});return}this.applyDeferredDisambiguationResult(pending,result2)}applyDeferredDisambiguationResult(pending,result2){if(!this.isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision2(result2)){this.notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),this.finishPendingDisambiguation(pending);return}this.finishPendingDisambiguation(pending),pending.apply(result2)}finishPendingDisambiguation(pending){if(!this.isPendingDisambiguationCurrent(pending))return;this.pendingDisambiguation=null}cancelPendingDisambiguation(){let pending=this.pendingDisambiguation;if(!pending)return;this.pendingDisambiguation=null,pending.controller.abort()}isPendingDisambiguationCurrent(pending){return this.pendingDisambiguation===pending}sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve21)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve21(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve21(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence2(sequence,{preferDisplay:!0});this.notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,focused){let captures=[],hasLayerConditions=this.state.layers.layersWithConditions>0;for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer||layer.root.children.size===0)continue;if(hasLayerConditions&&!this.conditions.hasNoConditions(layer)&&!this.conditions.matchesConditions(layer))continue;let nextNode=this.getReachableChild(layer.root,matchKeys,focused);if(!nextNode||nextNode.children.size===0)continue;captures.push({layer,node:nextNode})}return captures}collectPendingCapturesFromAdvanced(advancedCaptures,startIndex){return advancedCaptures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&candidate.node.children.size>0})}resolveEventMatchKeys(event){let resolvers=this.state.dispatch.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys2(resolvers[0],event,this.eventMatchResolverContext,this.notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,this.eventMatchResolverContext)}catch(error2){this.notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){this.notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}runReleaseBindings(layer,strokeKey,event,focused){let handled=!1;for(let binding of layer.compiledBindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}getReachableChild(node,matchKeys,focused){for(let strokeKey of matchKeys){let child=node.children.get(strokeKey);if(!child||!this.activation.nodeHasReachableBindings(child,focused))continue;return child}return}runBindings(layer,bindings,event,focused){let handled=!1;for(let binding of bindings){if(!this.conditions.matchesConditions(binding))continue;if(!this.executor.runBinding(layer,binding,event,focused))continue;if(handled=!0,!binding.fallthrough)return{handled:!0,stop:!0}}return{handled,stop:!1}}}function resolveSingleEventMatchKeys2(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function registerFieldCompilers2(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name))emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`)}for(let[name,compiler]of entries){if(reservedFields.has(name)||registeredFields.has(name))continue;registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}class EnvironmentService2{state;notify;compiler;layers;constructor(state,notify,compiler,layers){this.state=state,this.notify=notify,this.compiler=compiler,this.layers=layers}prependBindingTransformer(transformer){return this.state.environment.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.state.environment.bindingTransformers.append(transformer)}clearBindingTransformers(){this.state.environment.bindingTransformers.clear()}prependBindingParser(parser){return this.state.environment.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.state.environment.bindingParsers.append(parser)}clearBindingParsers(){this.state.environment.bindingParsers.clear()}registerToken(token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName2(token.name)}catch(error2){return this.notify.emitError("token-name-normalize-error",error2,getErrorMessage2(error2,"Failed to register keymap token")),NOOP3}if(this.state.environment.tokens.has(normalizedToken))return this.notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP3;let parsedToken;try{parsedToken=this.compiler.parseTokenKey(token.key)}catch(error2){return this.notify.emitError("token-parse-error",error2,getErrorMessage2(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP3}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(this.state.environment.tokens);nextTokens.set(normalizedToken,registeredToken);try{this.layers.applyTokenState(nextTokens)}catch(error2){return this.notify.emitError("token-register-error",error2,getErrorMessage2(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP3}return()=>{if(this.state.environment.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(this.state.environment.tokens);nextTokens2.delete(normalizedToken);try{this.layers.applyTokenState(nextTokens2)}catch(error2){this.notify.emitError("token-unregister-error",error2,getErrorMessage2(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}prependBindingExpander(expander){return this.state.environment.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.state.environment.bindingExpanders.append(expander)}clearBindingExpanders(){this.state.environment.bindingExpanders.clear()}registerLayerFields(fields){return registerFieldCompilers2(fields,{kind:"layer",reservedFields:RESERVED_LAYER_FIELDS2,registeredFields:this.state.environment.layerFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerBindingFields(fields){return registerFieldCompilers2(fields,{kind:"binding",reservedFields:RESERVED_BINDING_FIELDS2,registeredFields:this.state.environment.bindingFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}registerCommandFields(fields){return registerFieldCompilers2(fields,{kind:"command",reservedFields:RESERVED_COMMAND_FIELDS2,registeredFields:this.state.environment.commandFields,emitError:(code,error2,message)=>{this.notify.emitError(code,error2,message)}})}}function sortLayers2(layers){return[...layers].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return right.order-left.order})}function createCommandLookup2(commands){if(commands.length===0)return;let lookup=new Map;for(let command of commands)lookup.set(command.name,command);return lookup}function addRegisteredCommandNames2(target,commands){for(let command of commands)target.set(command.name,(target.get(command.name)??0)+1)}function removeRegisteredCommandNames2(target,commands){for(let command of commands){let count=target.get(command.name);if(!count||count<=1){target.delete(command.name);continue}target.set(command.name,count-1)}}function getSequenceNode2(root,sequence){let node=root;for(let part of sequence)if(node=node.children.get(part.match),!node)return;return node}function buildLayerBindingAnalyses2(root,compiledBindings){return compiledBindings.map((binding)=>{let node=binding.event==="press"?getSequenceNode2(root,binding.sequence):void 0;return{sequence:cloneKeySequence2(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceBinding:snapshotParsedBindingInput2(binding.sourceBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,sourceBindingIndex:binding.sourceBindingIndex,hasCommandAtSequence:node?node.bindings.some((candidate)=>candidate.command!==void 0):!1,hasContinuations:node?node.children.size>0:!1}})}class LayerService2{state;notify;conditions;activation;options;constructor(state,notify,conditions,activation,options){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation,this.options=options}registerLayer(layer){return this.notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&this.options.host.isTargetDestroyed(target))return this.notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP22;let bindingInputs,requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields,commands,commandLookup,targetMode;try{targetMode=this.normalizeTargetMode(layer),bindingInputs=snapshotBindingInputs2(layer.bindings??[]),commands=!layer.commands||layer.commands.length===0?[]:this.options.commands.normalizeCommands(layer.commands),commandLookup=createCommandLookup2(commands),{requires,matchers,conditionKeys,hasUnkeyedMatchers,compileFields}=this.compileLayerRuntimeState(layer)}catch(error2){return this.notify.emitError("register-layer-failed",error2,getErrorMessage2(error2,"Failed to register keymap layer")),NOOP22}let order=this.state.core.order++,compiledBindings=this.options.compiler.compileBindings(bindingInputs,this.state.environment.tokens,target,order,compileFields);if(compiledBindings.bindings.length===0&&!compiledBindings.hasTokenBindings&&commands.length===0)return NOOP22;this.runLayerAnalyzers({target,order,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,root:compiledBindings.root,hasTokenBindings:compiledBindings.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,conditionKeys,hasUnkeyedMatchers,matchCacheDirty:!0,compileFields,commands,commandLookup,bindingInputs,compiledBindings:compiledBindings.bindings,hasUnkeyedCommands:commands.some((command)=>command.hasUnkeyedMatchers),hasUnkeyedBindings:compiledBindings.bindings.some((binding)=>binding.hasUnkeyedMatchers),hasTokenBindings:compiledBindings.hasTokenBindings,root:compiledBindings.root};if(this.state.layers.layers.add(registeredLayer),registeredLayer.commands.length>0)this.state.layers.layersWithCommands+=1,this.state.commands.commandMetadataVersion+=1,addRegisteredCommandNames2(this.state.commands.registeredNames,registeredLayer.commands);if(registeredLayer.requires.length>0||registeredLayer.matchers.length>0)this.state.layers.layersWithConditions+=1;this.connectRuntimeMatchable(registeredLayer);for(let command of registeredLayer.commands)this.connectRuntimeMatchable(command);for(let binding of registeredLayer.compiledBindings)this.connectRuntimeMatchable(binding);if(this.indexLayer(registeredLayer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),target){let onTargetDestroy=()=>{this.unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=this.options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)this.activation.ensureValidPendingSequence();return this.notify.queueStateChange(),()=>{this.unregisterLayer(registeredLayer)}})}applyTokenState(nextTokens){this.notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of this.state.layers.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,this.compileLayerBindings(layer,nextTokens))}this.state.environment.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;if(shouldClearPending)this.activation.setPendingSequence(null);if(nextCompilations.size>0)this.notify.queueStateChange()})}recompileBindings(){this.notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of this.state.layers.layers){if(layer.bindingInputs.length===0)continue;let compilation=this.compileLayerBindings(layer,this.state.environment.tokens);if(this.applyCompiledBindings(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)this.activation.setPendingSequence(null);if(recompiledLayers>0)this.notify.queueStateChange()})}prependLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.prepend(analyzer)}appendLayerAnalyzer(analyzer){return this.state.layers.layerAnalyzers.append(analyzer)}clearLayerAnalyzers(){this.state.layers.layerAnalyzers.clear()}cleanup(){for(let layer of this.state.layers.layers){this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}}normalizeTargetMode(layer){if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0}runLayerAnalyzers(options){let analyzers=this.state.layers.layerAnalyzers.values();if(analyzers.length===0)return;let bindings=buildLayerBindingAnalyses2(options.root,options.compiledBindings),ctx={target:options.target,order:options.order,bindingInputs:options.bindingInputs,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution:(command)=>{return this.options.commands.getCommandResolutionStatus(command,options.commandLookup)},warn:(code,warning,message)=>{this.notify.emitWarning(code,warning,message)},warnOnce:(key,code,warning,message)=>{this.notify.warnOnce(key,code,warning,message)},error:(code,error2,message)=>{this.notify.emitError(code,error2,message)}};for(let analyzer of analyzers)try{analyzer(ctx)}catch(error2){this.notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}compileLayerRuntimeState(layer){let mergedRequires={},matchers=[],compileFields=Object.create(null),conditionKeys=new Set,hasUnkeyedMatchers=!1;for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS2.has(fieldName))continue;if(value===void 0)continue;compileFields[fieldName]=snapshotDataValue2(value);let compiler=this.state.environment.layerFields.get(fieldName);if(!compiler){this.options.warnUnknownField("layer",fieldName);continue}compiler(value,{require:(name,requiredValue)=>{mergeRequirement2(mergedRequires,name,requiredValue,`field ${fieldName}`),conditionKeys.add(name)},activeWhen:(matcher)=>{let runtimeMatcher=this.conditions.buildRuntimeMatcher(matcher,`field ${fieldName}`);if(!runtimeMatcher.cacheable)hasUnkeyedMatchers=!0;matchers.push(runtimeMatcher)}})}return{requires:Object.entries(mergedRequires),matchers,conditionKeys:[...conditionKeys],hasUnkeyedMatchers,compileFields:Object.keys(compileFields).length>0?Object.freeze(compileFields):void 0}}compileLayerBindings(layer,tokens2){return this.options.compiler.compileBindings(layer.bindingInputs,tokens2,layer.target,layer.order,layer.compileFields)}applyCompiledBindings(layer,compilation){this.runLayerAnalyzers({target:layer.target,order:layer.order,commandLookup:layer.commandLookup,bindingInputs:layer.bindingInputs,compiledBindings:compilation.bindings,root:compilation.root,hasTokenBindings:compilation.hasTokenBindings});for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);layer.root=compilation.root,layer.compiledBindings=compilation.bindings,layer.hasUnkeyedBindings=compilation.bindings.some((binding)=>binding.hasUnkeyedMatchers),layer.hasTokenBindings=compilation.hasTokenBindings;for(let binding of layer.compiledBindings)this.connectRuntimeMatchable(binding);return this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer)??!1}indexLayer(layer){this.state.layers.sortedLayers=sortLayers2([...this.state.layers.sortedLayers,layer]),this.state.layers.activeLayersVersion+=1}removeLayerFromIndex(layer){this.state.layers.sortedLayers=this.state.layers.sortedLayers.filter((candidate)=>candidate!==layer),this.state.layers.activeLayersVersion+=1}unregisterLayer(layer){this.notify.runWithStateChangeBatch(()=>{if(!this.state.layers.layers.delete(layer))return;if(layer.requires.length>0||layer.matchers.length>0)this.state.layers.layersWithConditions-=1;if(layer.commands.length>0)this.state.layers.layersWithCommands-=1,this.state.commands.commandMetadataVersion+=1,removeRegisteredCommandNames2(this.state.commands.registeredNames,layer.commands);this.disconnectRuntimeMatchable(layer);for(let command of layer.commands)this.disconnectRuntimeMatchable(command);for(let binding of layer.compiledBindings)this.disconnectRuntimeMatchable(binding);if(this.removeLayerFromIndex(layer),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(),layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,this.state.projection.pendingSequence?.captures.some((capture2)=>capture2.layer===layer))this.activation.setPendingSequence(null);else if(layer.commands.length>0&&!this.options.host.isDestroyed)this.activation.ensureValidPendingSequence();this.notify.queueStateChange()})}connectRuntimeMatchable(target){this.attachReactiveMatchers(target),this.conditions.indexRuntimeMatchable(target)}disconnectRuntimeMatchable(target){this.detachReactiveMatchers(target),this.conditions.unindexRuntimeMatchable(target)}attachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(target.matchCacheDirty=!0,!this.activation.hasPendingSequenceState()){this.notify.queueStateChange();return}this.notify.runWithStateChangeBatch(()=>{this.activation.revalidatePendingSequenceIfNeeded(),this.notify.queueStateChange()})})}catch(error2){this.notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage2(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}}detachReactiveMatchers(target){for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){this.notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage2(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}}}class Emitter3{onError;listeners=Object.create(null);constructor(onError){this.onError=onError}hook(name,listener){let current=this.listeners[name]??[];return this.listeners[name]=[...current,listener],()=>{let current2=this.listeners[name];if(!current2||current2.length===0)return;let next=current2.filter((candidate)=>candidate!==listener);if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}}has(name){return(this.listeners[name]?.length??0)>0}off(name,listener){let current=this.listeners[name];if(!current||current.length===0)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===current.length)return;if(next.length===0){delete this.listeners[name];return}this.listeners[name]=next}clear(){this.listeners=Object.create(null)}emit(name,...args){let listeners2=this.listeners[name];if(!listeners2||listeners2.length===0)return;for(let listener of listeners2)try{if(args.length===0)listener();else listener(args[0])}catch(error2){this.onError(name,error2)}}}class NotificationService2{state;events;hooks;constructor(state,events,hooks){this.state=state,this.events=events,this.hooks=hooks}runWithStateChangeBatch(fn){this.state.notify.stateChangeDepth+=1;try{return fn()}finally{if(this.state.notify.stateChangeDepth-=1,this.state.notify.stateChangeDepth===0)this.flushStateChange()}}queueStateChange(){if(this.state.notify.derivedStateVersion+=1,!this.hooks.has("state"))return;if(this.state.notify.stateChangePending=!0,this.state.notify.stateChangeDepth===0&&!this.state.notify.flushingStateChange)this.flushStateChange()}emitWarning(code,warning,message){if(!this.events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}this.events.emit("warning",{code,message,warning})}emitError(code,error2,message){if(!this.events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}this.events.emit("error",{code,message,error:error2})}reportListenerError(name,error2){if(name==="state"){this.emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){this.emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}}warnOnce(key,code,warning,message){if(this.state.notify.usedWarningKeys.has(key))return;this.state.notify.usedWarningKeys.add(key),this.emitWarning(code,warning,message)}flushStateChange(){if(!this.state.notify.stateChangePending||this.state.notify.stateChangeDepth>0||this.state.notify.flushingStateChange)return;this.state.notify.flushingStateChange=!0;try{let iterations=0;while(this.state.notify.stateChangePending&&this.state.notify.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS2){this.state.notify.stateChangePending=!1,this.emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS2},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS2} iterations; pending state notifications were dropped`);break}iterations+=1,this.state.notify.stateChangePending=!1,this.hooks.emit("state")}}finally{this.state.notify.flushingStateChange=!1}}}class RuntimeService2{state;notify;conditions;activation;constructor(state,notify,conditions,activation){this.state=state,this.notify=notify,this.conditions=conditions,this.activation=activation}getData(name){return this.state.runtime.data[name]}setData(name,value){this.notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in this.state.runtime.data))return;delete this.state.runtime.data[name],this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange();return}if(Object.is(this.state.runtime.data[name],value))return;this.state.runtime.data[name]=value,this.state.runtime.dataVersion+=1,this.conditions.invalidateRuntimeConditionKey(name),this.activation.ensureValidPendingSequence(),this.notify.queueStateChange()})}getReadonlyData(){if(this.state.runtime.readonlyDataVersion===this.state.runtime.dataVersion)return this.state.runtime.readonlyData;return this.state.runtime.readonlyData=Object.freeze({...this.state.runtime.data}),this.state.runtime.readonlyDataVersion=this.state.runtime.dataVersion,this.state.runtime.readonlyData}}class CopyOnWriteRegistry2{items=[];getItems(){return this.items}setItems(items){this.items=items}removeItem(value){let current=this.items;if(current.length===0)return!1;let next=current.filter((candidate)=>candidate!==value);if(next.length===current.length)return!1;return this.items=next,!0}has(){return this.items.length>0}clear(){this.items=[]}}function createKeymapState2(){return{core:{order:0},environment:{tokens:new Map,layerFields:new Map,bindingExpanders:new OrderedRegistry2,bindingParsers:new OrderedRegistry2,bindingTransformers:new OrderedRegistry2,bindingFields:new Map,commandFields:new Map},dispatch:{eventMatchResolvers:new OrderedRegistry2,disambiguationResolvers:new OrderedRegistry2,keyHooks:new PriorityRegistry2,rawHooks:new PriorityRegistry2},layers:{layers:new Set,sortedLayers:[],activeLayersVersion:0,activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],layersWithConditions:0,layersWithCommands:0,layerAnalyzers:new OrderedRegistry2},commands:{commandMetadataVersion:0,registeredNames:new Map,commandResolvers:new OrderedRegistry2,activeCommandViewVersion:-1,activeCommandView:void 0,registeredCommandViewVersion:-1,registeredCommandView:void 0,registeredCommandEntriesCacheVersion:-1,registeredCommandEntriesCache:[]},projection:{pendingSequence:null,pendingSequenceCacheVersion:-1,pendingSequenceCache:[],activeKeysPlainCacheVersion:-1,activeKeysPlainCache:[],activeKeysBindingsCacheVersion:-1,activeKeysBindingsCache:[],activeKeysMetadataCacheVersion:-1,activeKeysMetadataCache:[],activeKeysBindingsAndMetadataCacheVersion:-1,activeKeysBindingsAndMetadataCache:[]},conditions:{runtimeKeyDependents:new Map},runtime:{data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA2},notify:{derivedStateVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}}function getKeyMatchKey2(input){return resolveKeyMatch2(input)}class Keymap2{host;state=createKeymapState2();cleanedUp=!1;resources=new Map;cleanupListeners=[];events=new Emitter3(()=>{});hooks;notify;activation;runtime;conditions;catalog;executor;compiler;dispatch;layers;environment;keypressListener;keyreleaseListener;rawListener;focusedTargetListener;constructor(host){if(this.host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.hooks=new Emitter3((name,error2)=>{this.notify.reportListenerError(name,error2)}),this.notify=new NotificationService2(this.state,this.events,this.hooks),this.conditions=new ConditionService2(this.state,this.notify),this.catalog=new CommandCatalogService2(this.state,this.host,this.notify,this.conditions,{onCommandResolversChanged:()=>{this.activation.ensureValidPendingSequence()}}),this.activation=new ActivationService2(this.state,this.host,this.hooks,this.notify,this.conditions,this.catalog,{onPendingSequenceChanged:(previous,next)=>{this.dispatch?.handlePendingSequenceChange(previous,next)}}),this.runtime=new RuntimeService2(this.state,this.notify,this.conditions,this.activation),this.executor=new CommandExecutorService2(this.notify,this.runtime,this.activation,this.catalog,{keymap:this,createCommandEvent:()=>this.host.createCommandEvent()}),this.compiler=new CompilerService2(this.state,this.notify,this.conditions,{warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.warnUnknownToken(token,sequence)}}),this.layers=new LayerService2(this.state,this.notify,this.conditions,this.activation,{compiler:this.compiler,commands:this.catalog,host:this.host,warnUnknownField:(kind,fieldName)=>{this.warnUnknownField(kind,fieldName)}}),this.environment=new EnvironmentService2(this.state,this.notify,this.compiler,this.layers),this.dispatch=new DispatchService2(this.state,this.notify,this.runtime,this.activation,this.conditions,this.executor,this.compiler,this.catalog,this.layers),this.keypressListener=(event)=>{this.dispatch.handleKeyEvent(event,!1)},this.keyreleaseListener=(event)=>{this.dispatch.handleKeyEvent(event,!0)},this.rawListener=(sequence)=>{return this.dispatch.handleRawSequence(sequence)},this.focusedTargetListener=(focused)=>{this.handleFocusedTargetChange(focused)},this.cleanupListeners.push(this.host.onKeyPress(this.keypressListener)),this.cleanupListeners.push(this.host.onKeyRelease(this.keyreleaseListener)),this.host.onRawInput)this.cleanupListeners.push(this.host.onRawInput(this.rawListener));if(this.cleanupListeners.push(this.host.onFocusChange(this.focusedTargetListener)),this.host.onDestroy)this.cleanupListeners.push(this.host.onDestroy(()=>{this.cleanup()}))}cleanup(){if(this.cleanedUp)return;this.cleanedUp=!0,this.activation.setPendingSequence(null);for(let resource of this.resources.values())resource.dispose();this.resources.clear(),this.layers.cleanup();for(let cleanupListener of this.cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.runtime.setData(name,value)}getData(name){return this.runtime.getData(name)}hasPendingSequence(){return this.activation.ensureValidPendingSequence()!==void 0}getPendingSequence(){return this.activation.getPendingSequence()}createKeyMatcher(key){let match=this.compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey2(input)===match}}clearPendingSequence(){this.activation.setPendingSequence(null)}popPendingSequence(){return this.activation.popPendingSequence()}getActiveKeys(options){return this.activation.getActiveKeys(options)}getCommands(query2){return this.catalog.getCommands(query2)}getCommandEntries(query2){return this.catalog.getCommandEntries(query2)}normalizeCommandName(name){return normalizeCommandName2(name)}normalizeBindings(bindings){return normalizeBindingInputs2(bindings)}acquireResource(key,setup){if(this.cleanedUp||this.host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.resources.get(key);if(existing)return existing.count+=1,()=>{this.releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.resources.set(key,resource),()=>{this.releaseResource(key,resource)}}runCommand(cmd,options){return this.executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.events.hook(name,fn);if(name==="error")return this.events.hook(name,fn);return this.hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.dispatch.intercept(name,fn,options);return this.dispatch.intercept(name,fn,options)}registerLayer(layer){return this.layers.registerLayer(layer)}registerLayerFields(fields){return this.environment.registerLayerFields(fields)}prependBindingTransformer(transformer){return this.environment.prependBindingTransformer(transformer)}appendBindingTransformer(transformer){return this.environment.appendBindingTransformer(transformer)}clearBindingTransformers(){this.environment.clearBindingTransformers()}prependBindingParser(parser){return this.environment.prependBindingParser(parser)}appendBindingParser(parser){return this.environment.appendBindingParser(parser)}clearBindingParsers(){this.environment.clearBindingParsers()}registerToken(token){return this.environment.registerToken(token)}prependBindingExpander(expander){return this.environment.prependBindingExpander(expander)}appendBindingExpander(expander){return this.environment.appendBindingExpander(expander)}clearBindingExpanders(){this.environment.clearBindingExpanders()}registerBindingFields(fields){return this.environment.registerBindingFields(fields)}registerCommandFields(fields){return this.environment.registerCommandFields(fields)}prependCommandResolver(resolver){return this.catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.layers.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.layers.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.layers.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.dispatch.clearDisambiguationResolvers()}handleFocusedTargetChange(_focused){this.notify.runWithStateChangeBatch(()=>{this.activation.setPendingSequence(null),this.activation.invalidateActiveLayers(),this.activation.refreshActiveLayers(_focused),this.notify.queueStateChange()})}warnUnknownField(kind,fieldName){this.notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}warnUnknownToken(token,sequence){this.notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}releaseResource(key,resource){if(this.resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.resources.delete(key)}}function parseObjectKeyInput(ctx,key,display,match,tokenName){return ctx.parseObjectKey(key,{display,match,tokenName})}function isNamedSingleStrokeKey(input,extraNames){let normalized=input.trim().toLowerCase();if(!normalized)return!1;if(namedSingleStrokeKeys.has(normalized))return!0;if(extraNames?.has(normalized))return!0;return/^f\d{1,2}$/i.test(normalized)}function isSingleStrokeString(input,tokens2,normalizeTokenName,extraNames){if(input===" "||input==="+")return!0;if(input.length===1)return!0;if(tokens2.has(normalizeTokenName(input)))return!0;if(input.includes("+"))return!0;return isNamedSingleStrokeKey(input,extraNames)}function parseStringKeyPart(input,ctx){if(input===" ")return ctx.parseObjectKey({name:"space"},{display:"space"});if(input==="+")return ctx.parseObjectKey({name:"+"},{display:"+"});let parts=input.split("+"),name="",displayName="",ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;for(let rawPart of parts){let part=rawPart.trim();if(!part)continue;let lowered=part.toLowerCase();if(lowered==="ctrl"||lowered==="control"){ctrl=!0;continue}if(lowered==="shift"){shift=!0;continue}if(lowered==="meta"||lowered==="alt"||lowered==="option"){meta=!0;continue}if(lowered==="super"){superKey=!0;continue}if(lowered==="hyper"){hyper=!0;continue}if(name)throw Error(`Invalid key "${input}": multiple key names are not supported`);name=part,displayName=lowered}if(!name)throw Error(`Invalid key "${input}": missing key name`);let displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),ctx.parseObjectKey({name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")})}function registerDefaultBindingParser(keymap){return keymap.appendBindingParser(defaultBindingParser)}function registerDefaultEventMatchResolver(keymap){return keymap.appendEventMatchResolver(defaultEventMatchResolver)}function registerDefaultKeys(keymap){let offParser=registerDefaultBindingParser(keymap),offResolver=registerDefaultEventMatchResolver(keymap);return()=>{offResolver(),offParser()}}function isReactiveMatcher22(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function normalizeEnabledValue(fieldName,value){if(typeof value==="boolean")return value;if(typeof value==="function")return value;if(isReactiveMatcher22(value))return value;throw Error(`Keymap enabled field "${fieldName}" must be a boolean, a function, or a reactive matcher`)}function registerEnabledFields(keymap){let offLayerFields=keymap.registerLayerFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}}),offCommandFields=keymap.registerCommandFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}});return()=>{offCommandFields(),offLayerFields()}}function normalizeMetadataText(fieldName,value){if(typeof value!=="string")throw Error(`Keymap metadata field "${fieldName}" must be a string`);let trimmed=value.trim();if(!trimmed)throw Error(`Keymap metadata field "${fieldName}" cannot be empty`);return trimmed}function registerMetadataFields(keymap){let offBindingFields=keymap.registerBindingFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},group(value,ctx){ctx.attr("group",normalizeMetadataText("group",value))}}),offCommandFields=keymap.registerCommandFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},title(value,ctx){ctx.attr("title",normalizeMetadataText("title",value))},category(value,ctx){ctx.attr("category",normalizeMetadataText("category",value))}});return()=>{offCommandFields(),offBindingFields()}}function createSyntheticCommandEvent(){return new KeyEvent({name:"command",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:"",number:!1,raw:"",eventType:"press",source:"raw"})}function createOpenTuiKeymapHost(renderer){return{rootTarget:renderer.root,get isDestroyed(){return renderer.isDestroyed},getFocusedTarget(){let focused=renderer.currentFocusedRenderable;if(!focused||focused.isDestroyed||!focused.focused)return null;return focused},getParentTarget(target){return target.parent},isTargetDestroyed(target){return target.isDestroyed},onKeyPress(listener){return renderer.keyInput.prependListener("keypress",listener),()=>{renderer.keyInput.off("keypress",listener)}},onKeyRelease(listener){return renderer.keyInput.prependListener("keyrelease",listener),()=>{renderer.keyInput.off("keyrelease",listener)}},onFocusChange(listener){return renderer.on(CliRenderEvents.FOCUSED_RENDERABLE,listener),()=>{renderer.off(CliRenderEvents.FOCUSED_RENDERABLE,listener)}},onDestroy(listener){return renderer.once(CliRenderEvents.DESTROY,listener),()=>{renderer.off(CliRenderEvents.DESTROY,listener)}},onTargetDestroy(target,listener){return target.once(RenderableEvents.DESTROYED,listener),()=>{target.off(RenderableEvents.DESTROYED,listener)}},onRawInput(listener){return renderer.prependInputHandler(listener),()=>{renderer.removeInputHandler(listener)}},createCommandEvent(){return createSyntheticCommandEvent()}}}function createOpenTuiKeymap(renderer){if(renderer.isDestroyed)throw Error("Cannot create a keymap for a destroyed renderer");return new Keymap2(createOpenTuiKeymapHost(renderer))}function createDefaultOpenTuiKeymap(renderer){let keymap=createOpenTuiKeymap(renderer);return registerDefaultKeys(keymap),registerEnabledFields(keymap),registerMetadataFields(keymap),keymap}var RESERVED_COMMAND_FIELDS2,RESERVED_BINDING_FIELDS2,RESERVED_LAYER_FIELDS2,DEFAULT_COMMAND_SEARCH_FIELDS2,SNAPSHOT_COMMAND_METADATA_OPTIONS2,SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2,EMPTY_COMMAND_FIELDS2,EMPTY_COMPILE_FIELDS2,EMPTY_REQUIRES2,EMPTY_MATCHERS2,EMPTY_CONDITION_KEYS2,KEY_DISAMBIGUATION_DECISION2,KEY_DEFERRED_DISAMBIGUATION_DECISION2,NOOP3=()=>{},NOOP22=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS2=1000,OrderedRegistry2,PriorityRegistry2,EMPTY_DATA2,namedSingleStrokeKeys,defaultBindingParser=(ctx)=>{let{input,index,tokens:tokens2,normalizeTokenName}=ctx;if(index===0&&isSingleStrokeString(input,tokens2,normalizeTokenName)){if(input===" "||input==="+")return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length};let normalizedToken=normalizeTokenName(input),token=tokens2.get(normalizedToken);if(token)return{parts:[parseObjectKeyInput(ctx,token.stroke,normalizedToken,token.match,normalizedToken)],nextIndex:input.length,usedTokens:[normalizedToken]};return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length}}let char=input[index];if(char===void 0)return;if(char==="<"){let end=input.indexOf(">",index);if(end===-1)throw Error(`Invalid key sequence "${input}": unterminated token`);let tokenName=normalizeTokenName(input.slice(index,end+1)),token=tokens2.get(tokenName);if(!token)return{parts:[],nextIndex:end+1,unknownTokens:[tokenName]};return{parts:[parseObjectKeyInput(ctx,token.stroke,tokenName,token.match,tokenName)],nextIndex:end+1,usedTokens:[tokenName]}}return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1}},defaultEventMatchResolver=(event,ctx)=>{return[ctx.resolveKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0})]};var init_opentui=__esm(async()=>{await init_core();RESERVED_COMMAND_FIELDS2=new Set(["name","run"]),RESERVED_BINDING_FIELDS2=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS2=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS2=["name"],SNAPSHOT_COMMAND_METADATA_OPTIONS2=Object.freeze({deep:!0,preserveNonPlainObjects:!0}),SNAPSHOT_FROZEN_COMMAND_METADATA_OPTIONS2=Object.freeze({deep:!0,freeze:!0,preserveNonPlainObjects:!0}),EMPTY_COMMAND_FIELDS2=Object.freeze({});EMPTY_COMPILE_FIELDS2=Object.freeze({}),EMPTY_REQUIRES2=[],EMPTY_MATCHERS2=[],EMPTY_CONDITION_KEYS2=[];KEY_DISAMBIGUATION_DECISION2=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION2=Symbol("keymap-deferred-disambiguation-decision");OrderedRegistry2=class OrderedRegistry2 extends CopyOnWriteRegistry2{append(value){return this.setItems([...this.getItems(),value]),()=>{this.remove(value)}}prepend(value){return this.setItems([value,...this.getItems()]),()=>{this.remove(value)}}remove(value){return this.removeItem(value)}values(){return this.getItems()}};PriorityRegistry2=class PriorityRegistry2 extends CopyOnWriteRegistry2{order=0;register(listener,options){let registered={...options,listener,order:this.order++};return this.setItems([...this.getItems(),registered].sort((left,right)=>{let priorityDiff=right.priority-left.priority;if(priorityDiff!==0)return priorityDiff;return left.order-right.order})),()=>{this.removeItem(registered)}}entries(){return this.getItems()}};EMPTY_DATA2=Object.freeze({});namedSingleStrokeKeys=new Set(["up","down","left","right","clear","escape","return","linefeed","enter","tab","backspace","delete","insert","home","end","pageup","pagedown","space","lt","gt","plus","minus","equal","comma","period","slash","backslash","semicolon","quote","backquote","leftbracket","rightbracket","capslock","numlock","scrolllock","printscreen","pause","menu","apps","kp0","kp1","kp2","kp3","kp4","kp5","kp6","kp7","kp8","kp9","kpdecimal","kpdivide","kpmultiply","kpminus","kpplus","kpenter","kpequal","kpseparator","kpleft","kpright","kpup","kpdown","kppageup","kppagedown","kphome","kpend","kpinsert","kpdelete","mediaplay","mediapause","mediaplaypause","mediareverse","mediastop","mediafastforward","mediarewind","medianext","mediaprev","mediarecord","volumedown","volumeup","mute","leftshift","leftctrl","leftalt","leftsuper","lefthyper","leftmeta","rightshift","rightctrl","rightalt","rightsuper","righthyper","rightmeta","iso_level3_shift","iso_level5_shift","option","alt","meta","super","hyper","control","ctrl","shift"])});function createTuiKeymap(renderer){let keymap=createDefaultOpenTuiKeymap(renderer);return registerLeader(keymap,{trigger:{name:"space"}}),registerEscapeClearsPendingSequence(keymap),keymap}var init_keymap=__esm(async()=>{init_addons();await init_opentui()});import{spawnSync as spawnSync10}from"child_process";import{existsSync as existsSync76}from"fs";function resolveTuiTmuxConf(){let tuiConf=`${process.env.GENIE_HOME??`${process.env.HOME}/.genie`}/tui-tmux.conf`;return existsSync76(tuiConf)?tuiConf:"/dev/null"}function safeHex(value,fallback){if(!value)return fallback;let trimmed=value.trim();return HEX_COLOR_RE.test(trimmed)?trimmed:fallback}function resolveThemePalette(snapshot){if(snapshot.mode==="dark")return{bg:palette.bg,bgRaised:palette.bgRaised,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,warning:palette.warning,info:palette.info};return{...lightPalette,bg:safeHex(snapshot.terminalBackground,lightPalette.bg),text:safeHex(snapshot.terminalForeground,lightPalette.text)}}function flattenTmuxCommands(commands){let args=[];return commands.forEach((command,index)=>{if(index>0)args.push(";");args.push(...command)}),args}function buildTuiTmuxThemeCommands(snapshot){let theme=resolveThemePalette(snapshot),terminalForeground=safeHex(snapshot.terminalForeground,theme.text),terminalBackground=safeHex(snapshot.terminalBackground,theme.bg);return flattenTmuxCommands([["set-environment","-g","GENIE_TUI_THEME_MODE",snapshot.mode],["set-environment","-g","GENIE_TUI_TERMINAL_FG",terminalForeground],["set-environment","-g","GENIE_TUI_TERMINAL_BG",terminalBackground],["set-environment","-g","GENIE_TUI_TMUX_BG",theme.bg],["set-environment","-g","GENIE_TUI_TMUX_TEXT",theme.text],["set-environment","-g","GENIE_TUI_TMUX_ACCENT",theme.accent],["set-option","-g","pane-border-style",`fg=${theme.border}`],["set-option","-g","pane-active-border-style",`fg=${theme.accent}`],["set-option","-g","message-style",`bg=${theme.bgRaised},fg=${theme.info}`],["set-option","-g","message-command-style",`bg=${theme.bgRaised},fg=${theme.warning}`],["set-option","-g","status-style",`bg=${theme.bg},fg=${theme.text}`],["set-window-option","-g","mode-style",`bg=${theme.accent},fg=${theme.bg}`],["set-window-option","-g","clock-mode-colour",theme.accent]])}function syncTuiTmuxTheme(snapshot,deps={}){let run=deps.spawnSync??spawnSync10,tmux=deps.tmuxBin??tmuxBin(),socketName=deps.socketName??TUI_TMUX_SOCKET,configPath2=deps.configPath??resolveTuiTmuxConf(),timeoutMs=deps.timeoutMs??DEFAULT_TMUX_SYNC_TIMEOUT_MS;return run(tmux,["-L",socketName,"-f",configPath2,...buildTuiTmuxThemeCommands(snapshot)],{stdio:"ignore",timeout:timeoutMs}).status===0}var TUI_TMUX_SOCKET="genie-tui",DEFAULT_TMUX_SYNC_TIMEOUT_MS=300,HEX_COLOR_RE,lightPalette;var init_tmux_theme_sync=__esm(()=>{init_ensure_tmux();init_theme2();HEX_COLOR_RE=/^#[0-9a-f]{6}$/i,lightPalette={bg:"#f5efe4",bgRaised:"#ebe3d7",text:"#24323a",textDim:"#56656d",textMuted:"#718087",border:"#c8bdae",accent:"#2f7a62",accentDim:"#3e9277",accentBright:"#17694f",warning:"#9a651e",info:"#406f8b"}});function readBool(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY3.has(normalized))return!0;if(FALSY.has(normalized))return!1;return fallback}function readPositiveInt(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:fallback}function inferThemeMode(background){if(!background||!/^#[0-9a-f]{6}$/i.test(background))return null;let r=Number.parseInt(background.slice(1,3),16),g2=Number.parseInt(background.slice(3,5),16),b3=Number.parseInt(background.slice(5,7),16);return(0.2126*r+0.7152*g2+0.0722*b3)/255>=0.5?"light":"dark"}function snapshotKey(snapshot){return[snapshot.mode,snapshot.terminalForeground??"",snapshot.terminalBackground??""].join("|")}function buildSnapshot(mode,colors8){let resolvedMode=mode??inferThemeMode(colors8?.defaultBackground);if(!resolvedMode)return null;return{mode:resolvedMode,terminalForeground:colors8?.defaultForeground,terminalBackground:colors8?.defaultBackground}}function installOpenTui20Bridge(renderer,options={}){let env2=options.env??process.env;if(!readBool(env2,"GENIE_TUI_TMUX_THEME_SYNC",!0))return()=>{};let syncTheme=options.syncTheme??syncTuiTmuxTheme,themeQueryTimeoutMs=readPositiveInt(env2,"GENIE_TUI_THEME_QUERY_TIMEOUT_MS",DEFAULT_THEME_QUERY_TIMEOUT_MS),tmuxApplyTimeoutMs=readPositiveInt(env2,"GENIE_TUI_TMUX_THEME_SYNC_TIMEOUT_MS",DEFAULT_TMUX_APPLY_TIMEOUT_MS),disposed=!1,lastSnapshot="",syncSnapshot=(snapshot)=>{if(disposed||!snapshot)return;let key=snapshotKey(snapshot);if(key===lastSnapshot)return;lastSnapshot=key;try{syncTheme(snapshot,{timeoutMs:tmuxApplyTimeoutMs})}catch{}},syncFromMode=(mode,colors8)=>{syncSnapshot(buildSnapshot(mode,colors8))},onThemeMode=(mode)=>syncFromMode(mode);renderer.on("theme_mode",onThemeMode),syncFromMode(renderer.themeMode),renderer.waitForThemeMode(themeQueryTimeoutMs).then((mode)=>syncFromMode(mode)).catch(()=>{});let paletteOptions={size:OPEN_TUI_02_PALETTE_SIZE,timeout:themeQueryTimeoutMs};return renderer.getPalette(paletteOptions).then((colors8)=>syncFromMode(renderer.themeMode,colors8)).catch(()=>{}),()=>{disposed=!0,renderer.off("theme_mode",onThemeMode)}}var TRUTHY3,FALSY,DEFAULT_THEME_QUERY_TIMEOUT_MS=700,DEFAULT_TMUX_APPLY_TIMEOUT_MS=300,OPEN_TUI_02_PALETTE_SIZE=16;var init_opentui_bridge=__esm(()=>{init_tmux_theme_sync();TRUTHY3=new Set(["1","true","yes","on"]),FALSY=new Set(["0","false","no","off"])});var exports_render={};__export(exports_render,{resolveTuiRendererConfig:()=>resolveTuiRendererConfig,renderNav:()=>renderNav});function readBool2(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY4.has(normalized))return!0;if(FALSY2.has(normalized))return!1;return fallback}function readPositiveInt2(env2,name){let raw=env2[name];if(!raw)return;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:void 0}function resolveTuiRendererConfig(env2=process.env,platform2=process.platform){let isDarwin=platform2==="darwin",targetFps=readPositiveInt2(env2,"GENIE_TUI_TARGET_FPS")??(isDarwin?8:30),configuredMaxFps=readPositiveInt2(env2,"GENIE_TUI_MAX_FPS")??(isDarwin?12:60),maxFps=Math.max(configuredMaxFps,targetFps),useMouse=readBool2(env2,"GENIE_TUI_MOUSE",!0),enableMouseMovement=useMouse&&readBool2(env2,"GENIE_TUI_MOUSE_MOVEMENT",!isDarwin),consoleEnabled=readBool2(env2,"GENIE_TUI_CONSOLE",!0),kittyKeyboardOptIn=readBool2(env2,"GENIE_TUI_KITTY_KEYBOARD",!isDarwin);return{exitOnCtrlC:!1,useThread:!isDarwin,targetFps,maxFps,useMouse,enableMouseMovement,useKittyKeyboard:kittyKeyboardOptIn?void 0:null,consoleMode:consoleEnabled?void 0:"disabled",openConsoleOnError:consoleEnabled&&!isDarwin}}async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer(resolveTuiRendererConfig()),disposeOpenTui20Bridge=installOpenTui20Bridge(renderer),keymap=createTuiKeymap(renderer);createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(KeymapProvider,{keymap,children:import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)},void 0,!1,void 0,this)),await new Promise((resolve21)=>{renderer.once("destroy",()=>{disposeOpenTui20Bridge(),resolve21()})})}var TRUTHY4,FALSY2;var init_render=__esm(async()=>{init_react();init_opentui_bridge();init_jsx_dev_runtime();await __promiseAll([init_core(),init_react2(),init_app(),init_keymap()]);TRUTHY4=new Set(["1","true","yes","on"]),FALSY2=new Set(["0","false","no","off"])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});import{appendFileSync as appendFileSync5,closeSync as closeSync6,mkdirSync as mkdirSync35,openSync as openSync6,readSync as readSync3,statSync as statSync16}from"fs";import{homedir as homedir51}from"os";import{join as join93}from"path";function genieHome6(){return process.env.GENIE_HOME??join93(homedir51(),".genie")}function extractPreviousRunCrashOutput(logPath){let fd=null;try{let size=statSync16(logPath).size;if(size===0)return"";let readSize=Math.min(size,TUI_CRASH_LOG_RECOVERY_MAX_BYTES);fd=openSync6(logPath,"r");let buffer2=Buffer.alloc(readSize);readSync3(fd,buffer2,0,readSize,size-readSize);let text=buffer2.toString("utf-8"),lastBannerIndex=text.lastIndexOf(TUI_CRASH_LOG_BANNER_PREFIX);if(lastBannerIndex<0)return"";let afterBannerNewline=text.indexOf(`
3965
3965
  `,lastBannerIndex);if(afterBannerNewline<0)return"";return text.slice(afterBannerNewline+1).trim()}catch{return""}finally{if(fd!==null)try{closeSync6(fd)}catch{}}}async function ingestPreviousRunCrash(logPath){let body=extractPreviousRunCrashOutput(logPath);if(!body)return;let truncated=body.length>TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS?`${body.slice(0,TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS)}
3966
3966
  \u2026[truncated]`:body;try{let{emitEvent:emitEvent2}=await Promise.resolve().then(() => (init_emit(),exports_emit));emitEvent2("error.raised",{error_class:"TuiCrash",message:truncated,subsystem:"tui",severity:"error",retryable:!0})}catch{}}async function recordTuiLaunchBreadcrumb(){try{let logsDir=join93(genieHome6(),"logs");mkdirSync35(logsDir,{recursive:!0});let logPath=join93(logsDir,"tui-crash.log");await ingestPreviousRunCrash(logPath);let ts3=new Date().toISOString(),line=`${TUI_CRASH_LOG_BANNER_PREFIX}${ts3} pid=${process.pid} platform=${process.platform} arch=${process.arch} ---
3967
3967
  `;appendFileSync5(logPath,line,{mode:420})}catch{}}function installTuiExitSignals(){let exitOnSignal=(signal)=>{process.exit(signal==="SIGHUP"?0:128+(signal==="SIGINT"?2:15))};process.on("SIGHUP",exitOnSignal),process.on("SIGINT",exitOnSignal),process.on("SIGTERM",exitOnSignal)}async function launchTui(){installTuiExitSignals(),await recordTuiLaunchBreadcrumb();let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var TUI_CRASH_LOG_BANNER_PREFIX="--- tui-launch ",TUI_CRASH_LOG_RECOVERY_MAX_BYTES=65536,TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS=3000;var init_tui=()=>{};var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync77}from"fs";import{basename as basename16,dirname as dirname34,join as join94,relative as relative10,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative10(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync77(join94(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative10(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&&current!==dirname34(current)){if(existsSync77(join94(current,"AGENTS.md")))return{agent:basename16(current),source:"parent"};current=dirname34(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join94(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_doctor();import{execFileSync as execFileSync2,spawnSync as spawnSync2}from"child_process";import{existsSync as existsSync21,mkdirSync as mkdirSync11,writeFileSync as writeFileSync8}from"fs";import{homedir as homedir21}from"os";import{join as join26}from"path";var PM2_PROCESS_NAME="genie-serve",HARDENED_DEFAULTS={maxRestarts:50,minUptimeMs:1e4,restartDelayMs:4000,expBackoffRestartDelayMs:100,maxMemory:process.env.GENIE_SERVE_MAX_MEMORY||"4G",killTimeoutMs:60000,logDateFormat:"YYYY-MM-DD HH:mm:ss.SSS"};function getLogsDir(){return join26(homedir21(),".genie","logs")}function ok(msg){process.stdout.write(`genie install: ${msg}
@@ -3981,7 +3981,7 @@ module.exports = {
3981
3981
  `);for(let r of rows){let id=r.id.padEnd(31),st=r.status.padEnd(10),at=(r.appliedAt||"-").padEnd(24),from=r.appliedFrom||"-";process.stdout.write(`${id} ${st} ${at} ${from}
3982
3982
  `)}return}let result2=await migrate({quiet:options.quiet,dryRun:options.dryRun});process.exit(result2.ok?0:1)}init_setup();init_shortcuts();import{existsSync as existsSync26}from"fs";import{homedir as homedir26}from"os";import{join as join32}from"path";async function shortcutsShowCommand(){displayShortcuts();let home=homedir26(),tmuxConf=join32(home,".tmux.conf"),zshrc=join32(home,".zshrc"),bashrc=join32(home,".bashrc");if(console.log("Installation status:"),isShortcutsInstalled(tmuxConf))console.log(" \x1B[32m\u2713\x1B[0m tmux.conf");else console.log(" \x1B[33m-\x1B[0m tmux.conf");let shellRc=existsSync26(zshrc)?zshrc:bashrc;if(isShortcutsInstalled(shellRc))console.log(` \x1B[32m\u2713\x1B[0m ${shellRc.replace(home,"~")}`);else console.log(` \x1B[33m-\x1B[0m ${shellRc.replace(home,"~")}`);console.log(),console.log("Run \x1B[36mgenie shortcuts install\x1B[0m to install shortcuts."),console.log("Run \x1B[36mgenie shortcuts uninstall\x1B[0m to remove shortcuts."),console.log()}async function shortcutsInstallCommand(){await installShortcuts()}async function shortcutsUninstallCommand(){await uninstallShortcuts()}init_esm14();init_claude_settings();init_genie_config2();import{existsSync as existsSync27,lstatSync,rmSync as rmSync2,unlinkSync as unlinkSync8}from"fs";import{homedir as homedir27}from"os";import{join as join33}from"path";var ORCHESTRATION_RULES_PATH=join33(homedir27(),".claude","rules","genie-orchestration.md"),LOCAL_BIN=join33(homedir27(),".local","bin"),SYMLINKS=["genie","term"];function isGenieSymlink(path3){try{if(!existsSync27(path3))return!1;if(!lstatSync(path3).isSymbolicLink())return!1;return!0}catch{return!1}}function removeSymlinks(){let removed=[];for(let name of SYMLINKS){let symlinkPath=join33(LOCAL_BIN,name);if(isGenieSymlink(symlinkPath))try{unlinkSync8(symlinkPath),removed.push(name)}catch{}}return removed}function tryRemoveStep(label,successMsg,fn){console.log(`\x1B[2m${label}\x1B[0m`);try{fn(),console.log(` \x1B[32m+\x1B[0m ${successMsg}`)}catch(error){let message=error instanceof Error?error.message:String(error);console.log(` \x1B[33m!\x1B[0m ${label.replace("...","")} failed: ${message}`)}}function performUninstall(hasHookScript,existingSymlinks,genieDir,hasGenieDir){if(hasHookScript)tryRemoveStep("Removing hook script...","Hook script removed",()=>removeHookScript());if(existingSymlinks.length>0){console.log("\x1B[2mRemoving symlinks...\x1B[0m");let removed=removeSymlinks();if(removed.length>0)console.log(` \x1B[32m+\x1B[0m Removed: ${removed.join(", ")}`)}if(existsSync27(ORCHESTRATION_RULES_PATH))tryRemoveStep("Removing orchestration rules...","Orchestration rules removed (~/.claude/rules/genie-orchestration.md)",()=>unlinkSync8(ORCHESTRATION_RULES_PATH));if(hasGenieDir)tryRemoveStep("Removing genie directory...","Directory removed",()=>rmSync2(genieDir,{recursive:!0,force:!0}))}async function uninstallCommand(){console.log(),console.log("\x1B[1m\x1B[33m Uninstall Genie CLI\x1B[0m"),console.log();let genieDir=getGenieDir(),hasGenieDir=existsSync27(genieDir),hasHookScript=hookScriptExists(),hasOrchestrationRules=existsSync27(ORCHESTRATION_RULES_PATH),existingSymlinks=SYMLINKS.filter((name)=>isGenieSymlink(join33(LOCAL_BIN,name)));if(console.log("\x1B[2mThis will remove:\x1B[0m"),hasHookScript)console.log(" \x1B[31m-\x1B[0m Hook script (~/.claude/hooks/genie-bash-hook.sh)");if(hasOrchestrationRules)console.log(" \x1B[31m-\x1B[0m Orchestration rules (~/.claude/rules/genie-orchestration.md)");if(hasGenieDir)console.log(` \x1B[31m-\x1B[0m Genie directory (${contractPath(genieDir)})`);if(existingSymlinks.length>0)console.log(` \x1B[31m-\x1B[0m Symlinks from ~/.local/bin: ${existingSymlinks.join(", ")}`);if(console.log(),!hasGenieDir&&!hasHookScript&&!hasOrchestrationRules&&existingSymlinks.length===0){console.log("\x1B[33mNothing to uninstall.\x1B[0m"),console.log();return}if(!await esm_default4({message:"Are you sure you want to uninstall Genie CLI?",default:!1})){console.log(),console.log("\x1B[2mUninstall cancelled.\x1B[0m"),console.log();return}console.log(),performUninstall(hasHookScript,existingSymlinks,genieDir,hasGenieDir),console.log(),console.log("\x1B[32m+\x1B[0m Genie CLI uninstalled."),console.log(),console.log("\x1B[2mNote: If you installed via npm/bun, also run:\x1B[0m"),console.log(" \x1B[36mbun remove -g @automagik/genie\x1B[0m"),console.log(" \x1B[2mor\x1B[0m"),console.log(" \x1B[36mnpm uninstall -g @automagik/genie\x1B[0m"),console.log()}init_genie_config2();import{execSync as execSync3,spawn as spawn3}from"child_process";import{chmodSync as chmodSync2,closeSync as closeSync3,copyFileSync as copyFileSync3,existsSync as existsSync28,mkdirSync as mkdirSync15,openSync as openSync3,readFileSync as readFileSync19,readSync as readSync2,readdirSync as readdirSync9,rmSync as rmSync3,statSync as statSync7,writeFileSync as writeFileSync13}from"fs";import{chmod,copyFile,mkdir as mkdir5,unlink as unlink2}from"fs/promises";import{homedir as homedir28}from"os";import{join as join34}from"path";var GENIE_HOME2=process.env.GENIE_HOME||join34(homedir28(),".genie"),GENIE_SRC=join34(GENIE_HOME2,"src"),GENIE_BIN=join34(GENIE_HOME2,"bin"),LOCAL_BIN2=join34(homedir28(),".local","bin"),TRUTHY=new Set(["1","true","yes","on"]),UPDATE_DIAGNOSTIC_SCHEMA_VERSION=1;function log(message){console.log(`\x1B[32m\u25B8\x1B[0m ${message}`)}function success(message){console.log(`\x1B[32m\u2714\x1B[0m ${message}`)}function error(message){console.log(`\x1B[31m\u2716\x1B[0m ${message}`)}function formatDuration2(ms){if(ms<1000)return`${ms}ms`;return`${(ms/1000).toFixed(1)}s`}function isTruthyEnv(value){return value!==void 0&&TRUTHY.has(value.trim().toLowerCase())}async function withTemporaryEnv(key,value,fn){let previous=process.env[key];process.env[key]=value;try{return await fn()}finally{if(previous===void 0)delete process.env[key];else process.env[key]=previous}}function safeExec(command,timeoutMs=1500){try{return execSync3(command,{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:timeoutMs}).trim()}catch(err){let stdout=err.stdout;if(typeof stdout==="string"&&stdout.trim())return stdout.trim();return""}}function safeRead(path3,maxChars=4000){try{let value=readFileSync19(path3,"utf-8");if(value.length<=maxChars)return value;return value.slice(value.length-maxChars)}catch{return null}}function tailLines(path3,maxBytes=64000,maxLines=200){let fd=null;try{let stat4=statSync7(path3),bytesToRead=Math.min(stat4.size,maxBytes),buffer2=Buffer.alloc(bytesToRead);return fd=openSync3(path3,"r"),readSync2(fd,buffer2,0,bytesToRead,Math.max(0,stat4.size-bytesToRead)),buffer2.toString("utf-8").split(/\r?\n/).map((line)=>line.trim()).filter(Boolean).slice(-maxLines)}catch{return[]}finally{if(fd!==null)try{closeSync3(fd)}catch{}}}function summarizeJsonlSignals(path3){let signals2=new Map;for(let line of tailLines(path3))try{let event=JSON.parse(line),level=typeof event.level==="string"?event.level:"unknown";if(level!=="error"&&level!=="warn")continue;let name=typeof event.event==="string"?event.event:"unknown",key=`${level}:${name}`,existing=signals2.get(key)??{level,event:name,count:0};if(existing.count++,typeof event.timestamp==="string")existing.lastTimestamp=event.timestamp;if(typeof event.error==="string")existing.lastError=event.error;signals2.set(key,existing)}catch{}return[...signals2.values()].sort((a,b2)=>b2.count-a.count).slice(0,10)}async function collectUpdateDiagnostics(ctx,maintenance){let logsDir=join34(GENIE_HOME2,"logs");mkdirSync15(logsDir,{recursive:!0});let generatedAt=new Date().toISOString(),safeStamp=generatedAt.replace(/[:.]/g,"-"),path3=join34(logsDir,`update-diagnostics-${safeStamp}.json`),schedulerLog=join34(logsDir,"scheduler.log"),tuiCrashLog=join34(logsDir,"tui-crash.log"),signals2=summarizeJsonlSignals(schedulerLog),diagnostics={schemaVersion:UPDATE_DIAGNOSTIC_SCHEMA_VERSION,generatedAt,update:ctx,runtime:{platform:process.platform,arch:process.arch,cwd:process.cwd(),node:process.version,bun:(await runCommandSilent("bun",["--version"])).output.trim()||null,npm:(await runCommandSilent("npm",["--version"])).output.trim()||null,genie:{which:(await runCommandSilent("which",["genie"])).output.trim()||null,tuiDisabled:isTruthyEnv(process.env.GENIE_TUI_DISABLE),updateSkipMaintenance:isTruthyEnv(process.env.GENIE_UPDATE_SKIP_MAINTENANCE)}},paths:{genieHome:GENIE_HOME2,logsDir,servePid:safeRead(join34(GENIE_HOME2,"serve.pid"),200),pgservePort:safeRead(join34(GENIE_HOME2,"pgserve.port"),200),schedulerLog,tuiCrashLog},processSnapshot:{genie:safeExec("ps -axo pid,ppid,pgid,stat,pcpu,pmem,etime,command -r | rg -i 'dist/genie.js|/src/genie.ts|pgserve|postgres -D .*\\.genie/data/pgserve|tmux -L genie-tui|bun' || true",2000)||null,tuiTmux:safeExec("tmux -L genie-tui ls 2>/dev/null || true",1000)||null},maintenance:{...maintenance,pgAutostartDisabled:!0,legend:{"[ok]":"healthy","[fix]":"fixed during maintenance","[--]":"skipped/non-blocking","[!!]":"operator action needed; update still completed"}},recentLogSignals:{scheduler:signals2,schedulerTail:tailLines(schedulerLog,32000,80),tuiCrashTail:tailLines(tuiCrashLog,32000,80)}};return writeFileSync13(path3,`${JSON.stringify(diagnostics,null,2)}
3983
3983
  `),{path:path3,signals:signals2}}async function runCommand(command,args,cwd){return new Promise((resolve4)=>{let output=[],child=spawn3(command,args,{cwd,stdio:["inherit","pipe","pipe"],env:{...process.env,FORCE_COLOR:"1"}});child.stdout?.on("data",(data)=>{let str2=data.toString();output.push(str2),process.stdout.write(str2)}),child.stderr?.on("data",(data)=>{let str2=data.toString();output.push(str2),process.stderr.write(str2)}),child.on("close",(code)=>{resolve4({success:code===0,output:output.join("")})}),child.on("error",(err)=>{error(err.message),resolve4({success:!1,output:err.message})})})}async function getGitInfo(cwd){try{let branchResult=await runCommandSilent("git",["rev-parse","--abbrev-ref","HEAD"],cwd),commitResult=await runCommandSilent("git",["rev-parse","--short","HEAD"],cwd),dateResult=await runCommandSilent("git",["log","-1","--format=%ci"],cwd);if(branchResult.success&&commitResult.success&&dateResult.success)return{branch:branchResult.output.trim(),commit:commitResult.output.trim(),commitDate:dateResult.output.trim().split(" ")[0]}}catch{}return null}async function runCommandSilent(command,args,cwd,timeoutMs=4000){return new Promise((resolve4)=>{let output=[],settled=!1,child=spawn3(command,args,{cwd,stdio:["inherit","pipe","pipe"]}),timer2=setTimeout(()=>{if(settled)return;settled=!0,child.kill("SIGTERM"),resolve4({success:!1,output:`Timed out after ${timeoutMs}ms`})},timeoutMs);child.stdout?.on("data",(data)=>{output.push(data.toString())}),child.stderr?.on("data",(data)=>{output.push(data.toString())}),child.on("close",(code)=>{if(settled)return;settled=!0,clearTimeout(timer2),resolve4({success:code===0,output:output.join("")})}),child.on("error",(err)=>{if(settled)return;settled=!0,clearTimeout(timer2),resolve4({success:!1,output:err.message})})})}function detectFromBinaryPath(path3){let resolved=path3;try{resolved=__require("fs").realpathSync(path3)}catch{}if(resolved.includes(".bun"))return"bun";if(resolved.includes("node_modules"))return"npm";if(path3===join34(LOCAL_BIN2,"genie")||resolved.startsWith(GENIE_BIN))return"source";return null}async function detectInstallationType(){let whichResult=await runCommandSilent("which",["genie"]);if(whichResult.success){let detected=detectFromBinaryPath(whichResult.output.trim());if(detected)return detected}if(genieConfigExists())try{let config=await loadGenieConfig();if(config.installMethod)return config.installMethod}catch{}if(existsSync28(join34(GENIE_SRC,".git")))return"source";return(await runCommandSilent("which",["bun"])).success?"bun":"npm"}async function updateViaBun(channel){try{__require("fs").unlinkSync(join34(homedir28(),".bun","install","global","bun.lock"))}catch{}if(log(`Updating via bun (channel: ${channel})...`),!(await runCommand("bun",["add","-g",`@automagik/genie@${channel}`])).success)return error("Failed to update via bun"),!1;return console.log(),success(`Genie CLI updated via bun (${channel})!`),!0}async function updateViaNpm(channel){if(log(`Updating via npm (channel: ${channel})...`),!(await runCommand("npm",["install","-g",`@automagik/genie@${channel}`])).success)return error("Failed to update via npm"),!1;return console.log(),success(`Genie CLI updated via npm (${channel})!`),!0}async function detectGlobalInstalls(){let found=new Set,[npmResult,bunResult]=await Promise.all([runCommandSilent("npm",["list","-g","@automagik/genie"]),runCommandSilent("bun",["pm","ls","-g"])]);if(npmResult.success&&!npmResult.output.includes("(empty)"))found.add("npm");if(bunResult.success&&bunResult.output.includes("@automagik/genie"))found.add("bun");return found}async function updateSource(){if(!existsSync28(GENIE_SRC))error(`Source install path not found: ${GENIE_SRC}`),console.error(" Detection picked the source-install path, but the directory does not exist."),console.error(" This usually means a stale install hint (config or ~/.genie/src/.git) is"),console.error(" pointing somewhere genuine. Either:"),console.error(` 1. Re-clone the source: git clone https://github.com/automagik-dev/genie ${GENIE_SRC}`),console.error(" 2. Update via package manager instead: genie update --next --via bun"),console.error(" 3. Inspect detection: genie doctor --update-detection"),process.exit(1);if(!existsSync28(join34(GENIE_SRC,".git")))error(`Source install path is not a git checkout: ${GENIE_SRC}`),console.error(` ${GENIE_SRC} exists but has no .git/. Cannot run \`git fetch\` from it.`),console.error(` Either delete ${GENIE_SRC} and re-clone, or update via package manager:`),console.error(" genie update --next --via bun"),process.exit(1);let beforeInfo=await getGitInfo(GENIE_SRC);if(beforeInfo)console.log(`Current: \x1B[2m${beforeInfo.branch}@${beforeInfo.commit} (${beforeInfo.commitDate})\x1B[0m`),console.log();if(log("Fetching latest changes..."),!(await runCommand("git",["fetch","origin"],GENIE_SRC)).success)error("Failed to fetch from origin"),process.exit(1);if(log("Resetting to origin/main..."),!(await runCommand("git",["reset","--hard","origin/main"],GENIE_SRC)).success)error("Failed to reset to origin/main"),process.exit(1);console.log();let afterInfo=await getGitInfo(GENIE_SRC);if(beforeInfo&&afterInfo&&beforeInfo.commit===afterInfo.commit){success("Already up to date!"),console.log();return}if(log("Installing dependencies..."),!(await runCommand("bun",["install"],GENIE_SRC)).success)error("Failed to install dependencies"),process.exit(1);if(console.log(),log("Building..."),!(await runCommand("bun",["run","build"],GENIE_SRC)).success)error("Failed to build"),process.exit(1);console.log(),log("Installing binaries...");try{await mkdir5(GENIE_BIN,{recursive:!0}),await mkdir5(LOCAL_BIN2,{recursive:!0});let binaries=["genie.js","term.js"],names=["genie","term"];for(let i2=0;i2<binaries.length;i2++){let src=join34(GENIE_SRC,"dist",binaries[i2]),binDest=join34(GENIE_BIN,binaries[i2]),linkDest=join34(LOCAL_BIN2,names[i2]);await copyFile(src,binDest),await chmod(binDest,493),await symlinkOrCopy(binDest,linkDest)}for(let legacy of["claudio.js","claudio"]){let legacyBin=join34(GENIE_BIN,legacy),legacyLink=join34(LOCAL_BIN2,legacy);try{await unlink2(legacyBin)}catch{}try{await unlink2(legacyLink)}catch{}}success("Binaries installed")}catch(err){error(`Failed to install binaries: ${err}`),process.exit(1)}if(console.log(),console.log("\x1B[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1B[0m"),success("Genie CLI updated successfully!"),console.log(),afterInfo)console.log(`Version: \x1B[36m${afterInfo.branch}@${afterInfo.commit}\x1B[0m (${afterInfo.commitDate})`),console.log()}async function symlinkOrCopy(src,dest){let{symlink:symlink2,unlink:unlink3}=await import("fs/promises");try{if(existsSync28(dest))await unlink3(dest);await symlink2(src,dest)}catch{await copyFile(src,dest)}}function copyDirSync(src,dest){mkdirSync15(dest,{recursive:!0});for(let entry2 of readdirSync9(src,{withFileTypes:!0})){let srcPath=join34(src,entry2.name),destPath=join34(dest,entry2.name);if(entry2.isDirectory())copyDirSync(srcPath,destPath);else copyFileSync3(srcPath,destPath)}}async function resolveGlobalPkgDir(installType){if(installType==="bun"){let bunPath=join34(homedir28(),".bun","install","global","node_modules","@automagik","genie");if(existsSync28(bunPath))return bunPath}if(installType==="npm"){let npmRootResult=await runCommandSilent("npm",["root","-g"]);if(npmRootResult.success){let npmPath=join34(npmRootResult.output.trim(),"@automagik","genie");if(existsSync28(npmPath))return npmPath}}let bunFallback=join34(homedir28(),".bun","install","global","node_modules","@automagik","genie");if(existsSync28(bunFallback))return bunFallback;let npmRootFallback=await runCommandSilent("npm",["root","-g"]);if(npmRootFallback.success){let npmPath=join34(npmRootFallback.output.trim(),"@automagik","genie");if(existsSync28(npmPath))return npmPath}return null}function updatePluginRegistry(claudePlugins,cacheDir,version){let registryPath=join34(claudePlugins,"installed_plugins.json");try{if(!existsSync28(registryPath))return;let registry=JSON.parse(readFileSync19(registryPath,"utf-8")),entries=registry.plugins?.["genie@automagik"];if(!Array.isArray(entries))return;for(let entry2 of entries)if(entry2.scope==="user")entry2.installPath=cacheDir,entry2.version=version,entry2.lastUpdated=new Date().toISOString();writeFileSync13(registryPath,JSON.stringify(registry,null,2))}catch(err){log(`Registry update failed (non-fatal): ${err}`)}}function syncTmuxConf(tmuxScriptsSrc){mkdirSync15(GENIE_HOME2,{recursive:!0});let tmuxConfSrc=join34(tmuxScriptsSrc,"genie.tmux.conf"),tmuxConfDest=join34(GENIE_HOME2,"tmux.conf");if(existsSync28(tmuxConfSrc))try{copyFileSync3(tmuxConfSrc,tmuxConfDest),success(`Installed tmux config to ${tmuxConfDest}`);try{let{tmuxBin:tmuxBin2}=(init_ensure_tmux(),__toCommonJS(exports_ensure_tmux));execSync3(`${tmuxBin2()} -L genie source-file '${tmuxConfDest}'`,{stdio:"ignore"}),success("Reloaded genie tmux server configuration")}catch{}}catch{}let tuiConfSrc=join34(tmuxScriptsSrc,"tui-tmux.conf"),tuiConfDest=join34(GENIE_HOME2,"tui-tmux.conf");if(existsSync28(tuiConfSrc))try{copyFileSync3(tuiConfSrc,tuiConfDest),success(`Installed TUI tmux config to ${tuiConfDest}`)}catch{}let themeSrc=join34(tmuxScriptsSrc,".generated.theme.conf"),themeDest=join34(GENIE_HOME2,".generated.theme.conf");if(existsSync28(themeSrc))try{copyFileSync3(themeSrc,themeDest),success(`Installed tmux theme to ${themeDest}`)}catch{}let osc52Src=join34(tmuxScriptsSrc,"osc52-copy.sh"),osc52Dest=join34(GENIE_HOME2,"scripts","osc52-copy.sh");if(existsSync28(osc52Src))try{copyFileSync3(osc52Src,osc52Dest),chmodSync2(osc52Dest,493),success(`Installed OSC 52 clipboard helper to ${osc52Dest}`)}catch{}}function syncTmuxScripts(globalPkgDir){let tmuxScriptsSrc=join34(globalPkgDir,"scripts","tmux");if(!existsSync28(tmuxScriptsSrc))return;let scriptsDir=join34(GENIE_HOME2,"scripts");mkdirSync15(scriptsDir,{recursive:!0});let scriptCount=0;for(let entry2 of readdirSync9(tmuxScriptsSrc))if(entry2.endsWith(".sh")||entry2==="genie.tmux.conf"||entry2==="tui-tmux.conf"||entry2===".generated.theme.conf"){let src=join34(tmuxScriptsSrc,entry2),dest=join34(scriptsDir,entry2);copyFileSync3(src,dest);try{chmodSync2(dest,entry2.endsWith(".sh")?493:420)}catch{}scriptCount++}if(scriptCount>0)success(`Refreshed ${scriptCount} tmux scripts at ${scriptsDir}`);syncTmuxConf(tmuxScriptsSrc)}function syncMarketplaceVersion(claudePlugins,version){let marketplacePath=join34(claudePlugins,"marketplaces","automagik",".claude-plugin","marketplace.json");try{if(!existsSync28(marketplacePath))return;let data=JSON.parse(readFileSync19(marketplacePath,"utf-8"));if(Array.isArray(data.plugins)){for(let plugin of data.plugins)if(plugin.name==="genie")plugin.version=version}writeFileSync13(marketplacePath,JSON.stringify(data,null,2)),success(`Updated marketplace.json to v${version}`)}catch(err){log(`Marketplace version update failed (non-fatal): ${err}`)}}function syncPluginPackageVersion(claudePlugins,version){let pkgPath=join34(claudePlugins,"marketplaces","automagik","plugins","genie","package.json");try{if(!existsSync28(pkgPath))return;let data=JSON.parse(readFileSync19(pkgPath,"utf-8"));data.version=version,writeFileSync13(pkgPath,JSON.stringify(data,null,2)),success(`Updated plugin package.json to v${version}`)}catch(err){log(`Plugin package.json update failed (non-fatal): ${err}`)}}function syncSkillsSymlink(claudePlugins,version){let skillsLink=join34(claudePlugins,"marketplaces","automagik","plugins","genie","skills"),cacheSkills=join34("..","..","..","..","cache","automagik","genie",version,"skills");try{let{symlinkSync,unlinkSync:unlinkSync9,lstatSync:lstatSync2}=__require("fs");try{lstatSync2(skillsLink),unlinkSync9(skillsLink)}catch{}symlinkSync(cacheSkills,skillsLink),success(`Skills symlink \u2192 cache/${version}/skills`)}catch(err){log(`Skills symlink update failed (non-fatal): ${err}`)}}async function syncPlugin(installType){log("Syncing Claude Code plugin...");let globalPkgDir=await resolveGlobalPkgDir(installType);if(!globalPkgDir)return log("Could not find installed package \u2014 skipping plugin sync"),{skippedReason:"installed package not found"};let pluginSrc=join34(globalPkgDir,"plugins","genie");if(!existsSync28(pluginSrc))return log("Plugin source not found in package \u2014 skipping plugin sync"),{globalPkgDir,skippedReason:"plugin source not found in package"};let version;try{version=JSON.parse(readFileSync19(join34(globalPkgDir,"package.json"),"utf-8")).version}catch{return log("Could not read package version \u2014 skipping plugin sync"),{globalPkgDir,skippedReason:"could not read package version"}}let claudePlugins=join34(homedir28(),".claude","plugins"),cacheDir=join34(claudePlugins,"cache","automagik","genie",version);try{if(existsSync28(cacheDir))rmSync3(cacheDir,{recursive:!0,force:!0});copyDirSync(pluginSrc,cacheDir);let skillsSrc=join34(globalPkgDir,"skills");if(existsSync28(skillsSrc)&&!existsSync28(join34(cacheDir,"skills")))copyDirSync(skillsSrc,join34(cacheDir,"skills"))}catch(err){return error(`Failed to copy plugin: ${err}`),{version,globalPkgDir,cacheDir,skippedReason:`failed to copy plugin: ${err}`}}return updatePluginRegistry(claudePlugins,cacheDir,version),syncMarketplaceVersion(claudePlugins,version),syncPluginPackageVersion(claudePlugins,version),syncSkillsSymlink(claudePlugins,version),syncTmuxScripts(globalPkgDir),success(`Plugin synced to v${version}`),{version,globalPkgDir,cacheDir}}async function resolveChannel(options){if(options.next)return"next";if(options.stable)return"latest";if(genieConfigExists())try{let config=await loadGenieConfig();if(config.updateChannel)return config.updateChannel}catch{}return"latest"}async function persistChannel(channel){try{let config=await loadGenieConfig();config.updateChannel=channel,await saveGenieConfig(config)}catch{}}async function updateCommand(options={}){console.log(),console.log("\x1B[1m\uD83E\uDDDE Genie CLI Update\x1B[0m"),console.log("\x1B[2m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1B[0m"),console.log();let channel=await resolveChannel(options);if(options.next||options.stable)await persistChannel(channel);let installType=await detectInstallationType();if(log(`Detected installation: ${installType}`),log(`Channel: ${channel}${channel==="next"?" (dev builds)":" (stable)"}`),console.log(),installType==="unknown")error("No Genie CLI installation found"),console.log(),console.log("Install method not configured. Please reinstall genie:"),console.log("\x1B[36m curl -fsSL https://raw.githubusercontent.com/automagik-dev/genie/main/install.sh | bash\x1B[0m"),console.log(),process.exit(1);if(installType==="source"){await updateSource();return}let globalInstalls=await detectGlobalInstalls(),primaryMethod=installType;if(!(primaryMethod==="bun"?await updateViaBun(channel):await updateViaNpm(channel)))process.exit(1);let secondaryMethod=primaryMethod==="bun"?"npm":"bun";if(globalInstalls.has(secondaryMethod)){if(console.log(),log(`Also updating ${secondaryMethod}-global install...`),!(secondaryMethod==="bun"?await updateViaBun(channel):await updateViaNpm(channel)))error(`Secondary update via ${secondaryMethod} failed (non-blocking)`)}let plugin=await syncPlugin(installType);await runPostUpdateMaintenanceSafe(options,{channel,installType,primaryMethod,globalInstalls:[...globalInstalls].sort(),plugin})}function printPostUpdateMaintenanceIntro(){console.log(),log("Running post-update maintenance..."),console.log(" Purpose: make first launch after update fast and collect upgrade health signals."),console.log(" Checks: runtime partitions, watchdog status, session backfill drift, zombie rows, team config orphans."),console.log(" PG policy: read-only; uses an already-running pgserve when available and will not auto-start it."),console.log(" Legend: [ok]=healthy, [fix]=fixed, [--]=skipped/non-blocking, [!!]=operator action needed.")}async function runMaintenanceWithCapturedLines(maintenanceLines){let{runPostUpdateMaintenance:runPostUpdateMaintenance2}=await Promise.resolve().then(() => (init_doctor(),exports_doctor));await withTemporaryEnv("GENIE_PG_NO_AUTOSTART","1",()=>runPostUpdateMaintenance2({log:(line)=>{maintenanceLines.push(line),console.log(line)}}))}function printDiagnosticsSummary(diagnostics){if(log("Post-update diagnostics captured."),console.log(` Report: ${diagnostics.path}`),console.log(" Include this file when opening a GitHub issue; it contains install metadata, step output,"),console.log(" local process state, and recent scheduler/TUI log signals."),diagnostics.signals.length===0)return;console.log(" Recent scheduler signals:");for(let signal of diagnostics.signals.slice(0,3)){let errorDetail=signal.lastError?` \u2014 ${signal.lastError}`:"";console.log(` ${signal.level}:${signal.event} \xD7${signal.count}${errorDetail}`)}}async function capturePostUpdateDiagnostics(diagnosticsCtx,maintenance){if(!diagnosticsCtx)return;try{let diagnostics=await collectUpdateDiagnostics(diagnosticsCtx,maintenance);printDiagnosticsSummary(diagnostics)}catch(err){let msg=err instanceof Error?err.message:String(err);log(`Post-update diagnostics capture failed (non-fatal): ${msg}`)}}async function runPostUpdateMaintenanceSafe(options={},diagnosticsCtx){if(options.skipMaintenance||isTruthyEnv(process.env.GENIE_UPDATE_SKIP_MAINTENANCE)){log("Skipping post-update maintenance (requested).");return}let startedAt=Date.now(),maintenanceLines=[],outcome="completed",maintenanceError;try{printPostUpdateMaintenanceIntro(),await runMaintenanceWithCapturedLines(maintenanceLines),success(`Post-update maintenance complete (${formatDuration2(Date.now()-startedAt)}).`)}catch(err){outcome="failed",maintenanceError=err instanceof Error?err.message:String(err),error(`Post-update maintenance skipped: ${maintenanceError}`)}await capturePostUpdateDiagnostics(diagnosticsCtx,{outcome,durationMs:Date.now()-startedAt,lines:maintenanceLines,error:maintenanceError})}init_version();init_trust();init_trust();init_trust();import{execSync as execSync4}from"child_process";import{existsSync as existsSync31,mkdirSync as mkdirSync16,readFileSync as readFileSync22,renameSync as renameSync6,writeFileSync as writeFileSync14}from"fs";import{dirname as dirname13,isAbsolute,join as join36,resolve as resolve5}from"path";function resolveOriginUrl(repoRoot){try{return execSync4("git config --get remote.origin.url",{cwd:repoRoot,encoding:"utf-8"}).trim()||null}catch{return null}}function findRepoRoot(start){let current=start;while(current!=="/"){if(existsSync31(join36(current,".git")))return current;current=dirname13(current)}return null}function writeTrustFile(path3,file){let dir=dirname13(path3);if(!existsSync31(dir))mkdirSync16(dir,{recursive:!0});let sorted={version:1,entries:[...file.entries].sort((a,b2)=>a.path.localeCompare(b2.path))},serialized=`${JSON.stringify(sorted,null,2)}
3984
- `,tmpPath=`${path3}.tmp.${process.pid}`;writeFileSync14(tmpPath,serialized,"utf-8"),renameSync6(tmpPath,path3)}async function trustAction(target,options){let trustPath=defaultTrustPath();if(!target){let current2=readTrustFile(trustPath);if(current2.entries.length===0){console.log(`(trust file empty: ${trustPath})`);return}console.log(`Trusted hooks (${current2.entries.length}, from ${trustPath}):`);for(let entry2 of current2.entries){let scope2=entry2.scope==="repo"?`repo:${entry2.repoRemoteUrl??"?"}`:entry2.scope;if(console.log(` ${entry2.path}`),console.log(` scope: ${scope2}`),console.log(` sha256: ${entry2.sha256}`),console.log(` trusted: ${entry2.trustedAt}`),entry2.capabilities&&entry2.capabilities.length>0)console.log(` caps: ${entry2.capabilities.join(", ")}`);if(entry2.note)console.log(` note: ${entry2.note}`)}return}let filePath=isAbsolute(target)?target:resolve5(process.cwd(),target);if(!existsSync31(filePath))console.error(`Error: file not found: ${filePath}`),process.exit(1);if(!filePath.endsWith(".ts"))console.error(`Error: trust target must be a .ts file: ${filePath}`),process.exit(1);let scope,repoRemoteUrl;if(options.repo){scope="repo";let repoRoot=findRepoRoot(dirname13(filePath));if(!repoRoot)console.error(`Error: --repo passed but no .git directory found above ${filePath}`),process.exit(1);let remote=resolveOriginUrl(repoRoot);if(!remote)console.error(`Error: --repo passed but ${repoRoot} has no remote.origin.url`),process.exit(1);repoRemoteUrl=remote}else if(options.team)scope="team";else scope="global";let sha=sha256OfFile(filePath),source=readFileSync22(filePath,"utf-8"),capabilities=parseCapabilities(source);if(console.log(`About to trust: ${filePath}`),console.log(` scope: ${scope==="repo"?`repo:${repoRemoteUrl}`:scope}`),console.log(` sha256: ${sha}`),capabilities.length>0)console.log(` caps: ${capabilities.join(", ")}`);if(options.note)console.log(` note: ${options.note}`);if(!options.yes&&process.stdin.isTTY){process.stdout.write("Confirm? (y/N) ");let buf=Buffer.alloc(8),read=0;try{read=(await import("fs")).readSync(0,buf,0,buf.length,null)}catch{console.error("Error: cannot read confirmation; pass --yes to trust non-interactively"),process.exit(1)}let answer=buf.subarray(0,read).toString().trim().toLowerCase();if(answer!=="y"&&answer!=="yes")console.log("Aborted."),process.exit(1)}let current=readTrustFile(trustPath),newEntry={path:filePath,sha256:sha,scope,repoRemoteUrl,trustedAt:new Date().toISOString(),note:options.note,capabilities:capabilities.length>0?capabilities:void 0},next={version:1,entries:[...current.entries.filter((e)=>e.path!==filePath),newEntry]};writeTrustFile(trustPath,next),console.log(`Trusted ${filePath} \u2192 ${trustPath}`)}function registerHookTrustCommand(parent){parent.command("trust [path]").description("Add a .ts hook file to the trust allowlist (or list current entries when [path] is omitted)").option("--repo","Scope to current repo (pinned to remote.origin.url)").option("--global","Scope globally (default)").option("--team <name>","Scope to a specific team directory").option("--note <text>","Free-form note saved with the entry").option("--yes","Skip the interactive confirmation prompt").action(trustAction)}import{appendFileSync as appendFileSync3,mkdirSync as mkdirSync17,statSync as statSync8}from"fs";import{connect as connect2}from"net";import{homedir as homedir30}from"os";import{dirname as dirname14,join as join37}from"path";function defaultSocketPath(){if(process.env.GENIE_HOOK_SOCK)return process.env.GENIE_HOOK_SOCK;let home=process.env.GENIE_HOME??join37(homedir30(),".genie");return join37(home,"hook.sock")}function fallbackLogPath2(){let home=process.env.GENIE_HOME??join37(homedir30(),".genie");return join37(home,"hook-fallback.log")}var MAX_FRAME_BYTES=1048576,FALLBACK_LOG_MAX_BYTES=104857600,DEFAULT_TIMEOUT_MS=5000;function readStdinSync(){let chunks=[],total=0,fd=0,buf=Buffer.alloc(65536);while(!0){let n;try{n=__require("fs").readSync(fd,buf,0,buf.length,null)}catch{break}if(n===0)break;if(chunks.push(Buffer.from(buf.subarray(0,n))),total+=n,total>MAX_FRAME_BYTES)break}return Buffer.concat(chunks,Math.min(total,MAX_FRAME_BYTES))}function summarizePayload(payload){try{let obj=JSON.parse(payload.toString("utf-8")),event=typeof obj.hook_event_name==="string"?obj.hook_event_name:null,tool=typeof obj.tool_name==="string"?obj.tool_name:null,command=null,ti=obj.tool_input;if(ti&&typeof ti.command==="string")command=ti.command.split(`
3984
+ `,tmpPath=`${path3}.tmp.${process.pid}`;writeFileSync14(tmpPath,serialized,"utf-8"),renameSync6(tmpPath,path3)}function runTrustList(trustPath){let current=readTrustFile(trustPath);if(current.entries.length===0){console.log(`(trust file empty: ${trustPath})`);return}console.log(`Trusted hooks (${current.entries.length}, from ${trustPath}):`);for(let entry2 of current.entries){let scope=entry2.scope==="repo"?`repo:${entry2.repoRemoteUrl??"?"}`:entry2.scope;if(console.log(` ${entry2.path}`),console.log(` scope: ${scope}`),console.log(` sha256: ${entry2.sha256}`),console.log(` trusted: ${entry2.trustedAt}`),entry2.capabilities&&entry2.capabilities.length>0)console.log(` caps: ${entry2.capabilities.join(", ")}`);if(entry2.note)console.log(` note: ${entry2.note}`)}}function resolveTrustScope(filePath,options){if(options.repo){let repoRoot=findRepoRoot(dirname13(filePath));if(!repoRoot)console.error(`Error: --repo passed but no .git directory found above ${filePath}`),process.exit(1);let remote=resolveOriginUrl(repoRoot);if(!remote)console.error(`Error: --repo passed but ${repoRoot} has no remote.origin.url`),process.exit(1);return{scope:"repo",repoRemoteUrl:remote}}if(options.team)return{scope:"team"};return{scope:"global"}}async function confirmTrustOrAbort(yes){if(yes||!process.stdin.isTTY)return;process.stdout.write("Confirm? (y/N) ");let buf=Buffer.alloc(8),read=0;try{read=(await import("fs")).readSync(0,buf,0,buf.length,null)}catch{console.error("Error: cannot read confirmation; pass --yes to trust non-interactively"),process.exit(1)}let answer=buf.subarray(0,read).toString().trim().toLowerCase();if(answer!=="y"&&answer!=="yes")console.log("Aborted."),process.exit(1)}async function runTrustAdd(target,options,trustPath){let filePath=isAbsolute(target)?target:resolve5(process.cwd(),target);if(!existsSync31(filePath))console.error(`Error: file not found: ${filePath}`),process.exit(1);if(!filePath.endsWith(".ts"))console.error(`Error: trust target must be a .ts file: ${filePath}`),process.exit(1);let{scope,repoRemoteUrl}=resolveTrustScope(filePath,options),sha=sha256OfFile(filePath),source=readFileSync22(filePath,"utf-8"),capabilities=parseCapabilities(source);if(console.log(`About to trust: ${filePath}`),console.log(` scope: ${scope==="repo"?`repo:${repoRemoteUrl}`:scope}`),console.log(` sha256: ${sha}`),capabilities.length>0)console.log(` caps: ${capabilities.join(", ")}`);if(options.note)console.log(` note: ${options.note}`);await confirmTrustOrAbort(options.yes??!1);let current=readTrustFile(trustPath),newEntry={path:filePath,sha256:sha,scope,repoRemoteUrl,trustedAt:new Date().toISOString(),note:options.note,capabilities:capabilities.length>0?capabilities:void 0},next={version:1,entries:[...current.entries.filter((e)=>e.path!==filePath),newEntry]};writeTrustFile(trustPath,next),console.log(`Trusted ${filePath} \u2192 ${trustPath}`)}async function trustAction(target,options){let trustPath=defaultTrustPath();if(!target)return runTrustList(trustPath);await runTrustAdd(target,options,trustPath)}function registerHookTrustCommand(parent){parent.command("trust [path]").description("Add a .ts hook file to the trust allowlist (or list current entries when [path] is omitted)").option("--repo","Scope to current repo (pinned to remote.origin.url)").option("--global","Scope globally (default)").option("--team <name>","Scope to a specific team directory").option("--note <text>","Free-form note saved with the entry").option("--yes","Skip the interactive confirmation prompt").action(trustAction)}import{appendFileSync as appendFileSync3,mkdirSync as mkdirSync17,statSync as statSync8}from"fs";import{connect as connect2}from"net";import{homedir as homedir30}from"os";import{dirname as dirname14,join as join37}from"path";function defaultSocketPath(){if(process.env.GENIE_HOOK_SOCK)return process.env.GENIE_HOOK_SOCK;let home=process.env.GENIE_HOME??join37(homedir30(),".genie");return join37(home,"hook.sock")}function fallbackLogPath2(){let home=process.env.GENIE_HOME??join37(homedir30(),".genie");return join37(home,"hook-fallback.log")}var MAX_FRAME_BYTES=1048576,FALLBACK_LOG_MAX_BYTES=104857600,DEFAULT_TIMEOUT_MS=5000;function readStdinSync(){let chunks=[],total=0,fd=0,buf=Buffer.alloc(65536);while(!0){let n;try{n=__require("fs").readSync(fd,buf,0,buf.length,null)}catch{break}if(n===0)break;if(chunks.push(Buffer.from(buf.subarray(0,n))),total+=n,total>MAX_FRAME_BYTES)break}return Buffer.concat(chunks,Math.min(total,MAX_FRAME_BYTES))}function summarizePayload(payload){try{let obj=JSON.parse(payload.toString("utf-8")),event=typeof obj.hook_event_name==="string"?obj.hook_event_name:null,tool=typeof obj.tool_name==="string"?obj.tool_name:null,command=null,ti=obj.tool_input;if(ti&&typeof ti.command==="string")command=ti.command.split(`
3985
3985
  `)[0].slice(0,256);return{event,tool,command}}catch{return{event:null,tool:null,command:null}}}function appendFallback(record){let path3=fallbackLogPath2();try{mkdirSync17(dirname14(path3),{recursive:!0});let writeFresh=!1;try{if(statSync8(path3).size>=FALLBACK_LOG_MAX_BYTES)writeFresh=!0}catch{}let line=`${JSON.stringify(record)}
3986
3986
  `;if(writeFresh)__require("fs").writeFileSync(path3,line);else appendFileSync3(path3,line)}catch{}}function buildFrame(payload){let header=Buffer.alloc(4);return header.writeUInt32BE(payload.length,0),Buffer.concat([header,payload])}function parseStep(acc,length){if(length===-1){if(acc.length<4)return{kind:"incomplete",length:-1};let declared=acc.readUInt32BE(0);if(declared>MAX_FRAME_BYTES)return{kind:"error",reason:`oversized frame ${declared}`};if(declared===0)return{kind:"done",body:Buffer.alloc(0)};if(acc.length>=4+declared)return{kind:"done",body:acc.subarray(4,4+declared)};return{kind:"incomplete",length:declared}}if(acc.length>=4+length)return{kind:"done",body:acc.subarray(4,4+length)};return{kind:"incomplete",length}}async function roundtrip(socketPath,payload,timeoutMs){return new Promise((resolve6)=>{let settled=!1,finish=(result2)=>{if(settled)return;settled=!0,resolve6(result2)},timer2=setTimeout(()=>{try{sock.destroy()}catch{}finish({reply:null,reason:`timeout after ${timeoutMs}ms`})},timeoutMs);timer2.unref();let sock=connect2(socketPath);sock.once("connect",()=>{sock.write(buildFrame(payload))});let acc=Buffer.alloc(0),length=-1;sock.on("data",(chunk)=>{acc=acc.length===0?Buffer.from(chunk):Buffer.concat([acc,Buffer.from(chunk)],acc.length+chunk.length);let step=parseStep(acc,length);if(step.kind==="incomplete"){length=step.length;return}clearTimeout(timer2);try{sock.destroy()}catch{}if(step.kind==="done")finish({reply:step.body.toString("utf-8")});else finish({reply:null,reason:step.reason})}),sock.once("error",(err)=>{clearTimeout(timer2);let code=err.code??"unknown";finish({reply:null,reason:`connect error: ${code}`})}),sock.once("end",()=>{if(!settled)clearTimeout(timer2),finish({reply:null,reason:"socket closed before reply"})})})}async function runDispatchClient(){let payload=readStdinSync();if(payload.length===0)return 0;let socketPath=process.env.GENIE_HOOK_SOCK??defaultSocketPath(),timeoutMs=Number.parseInt(process.env.GENIE_HOOK_TIMEOUT_MS??"",10),effectiveTimeout=Number.isFinite(timeoutMs)&&timeoutMs>0?timeoutMs:DEFAULT_TIMEOUT_MS,result2=await roundtrip(socketPath,payload,effectiveTimeout);if(result2.reply!==null){if(result2.reply.length>0)process.stdout.write(result2.reply);return 0}let summary=summarizePayload(payload),agentId=process.env.GENIE_AGENT_ID??process.env.GENIE_AGENT_NAME??null;return appendFallback({ts:new Date().toISOString(),event:summary.event,tool:summary.tool,command:summary.command,agent_id:agentId,reason:result2.reason??"unknown"}),0}init_hooks();async function readStdin(){let chunks=[];for await(let chunk of Bun.stdin.stream())chunks.push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf-8")}async function dispatchAction(){if(process.env.GENIE_SKIP_DB_BOOT="1",process.env.GENIE_HOOK_FORCE_INPROC!=="1"){let code=await runDispatchClient();await drainStdout(),process.exit(code)}let stdin=await readStdin();if(!stdin.trim())process.exit(0);let result2=await dispatch(stdin);if(result2)process.stdout.write(result2);await drainStdout(),process.exit(0)}function drainStdout(){return new Promise((resolve7)=>{process.stdout.write("",()=>resolve7())})}function registerHookNamespace(program2){let hook=program2.command("hook").description("Hook middleware for Claude Code integration");hook.command("dispatch").description("Dispatch a CC hook event (reads JSON from stdin, writes decision to stdout)").action(dispatchAction),registerHookTrustCommand(hook)}init_audit();init_db();init_interactivity();init_otel_receiver();init_target_resolver();init_tmux();init_orchestrator();async function resolveOrcTarget(target){let resolved=await resolveTarget(target);return{paneId:resolved.paneId,session:resolved.session||target,label:formatResolvedLabel(resolved,target)}}async function sendTextChoice(paneId,text){await executeTmux2(`send-keys -t '${paneId}' End`),await sleep2(100),await executeTmux2(`send-keys -t '${paneId}' Enter`),await sleep2(100),await executeTmux2(`send-keys -t '${paneId}' ${shellEscape(text)}`),await sleep2(100),await executeTmux2(`send-keys -t '${paneId}' Enter`)}function findCurrentOption(output){let lines=stripAnsi(output).split(`
3987
3987
  `);for(let line of lines){let match=line.match(/^\s*\u276F\s*(\d+)\./);if(match)return Number.parseInt(match[1],10)}return 1}async function navigateToOption(paneId,targetOption,currentOption){let diff=targetOption-currentOption,key=diff>0?"Down":"Up";for(let i2=0;i2<Math.abs(diff);i2++)await executeTmux2(`send-keys -t '${paneId}' ${key}`),await sleep2(50);await sleep2(100),await executeTmux2(`send-keys -t '${paneId}' Enter`)}async function answerQuestion(target,choice){try{let{paneId,label}=await resolveOrcTarget(target),output=await capturePaneContent(paneId,50),state=detectState(output);if(state.type!=="question"){console.log(`No question pending (state: ${state.type})`);return}if(choice.startsWith("text:")){let text=choice.slice(5);await sendTextChoice(paneId,text),console.log(`Sent feedback: "${text.substring(0,50)}${text.length>50?"...":""}"`)}else if(/^\d+$/.test(choice)){let targetOption=Number.parseInt(choice,10);await navigateToOption(paneId,targetOption,findCurrentOption(output)),console.log(`Selected option ${targetOption} for ${label}`)}else await executeTmux2(`send-keys -t '${paneId}' '${choice}'`),console.log(`Sent '${choice}' to ${label}`)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}}function shellEscape(str2){return`"${str2.replace(/"/g,"\\\"").replace(/\$/g,"\\$")}"`}function sleep2(ms){return new Promise((resolve7)=>setTimeout(resolve7,ms))}function registerAgentAnswer(parent){parent.command("answer <name> <choice>").description('Answer a question for an agent (use "text:..." for text input)').action(async(name,choice)=>{try{await answerQuestion(name,choice)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}var _brief;async function getBrief(){if(!_brief)_brief=await Promise.resolve().then(() => (init_brief(),exports_brief));return _brief}async function handleBrief(options){let team=options.team??process.env.GENIE_TEAM;if(!team)console.error("Error: --team is required (or set GENIE_TEAM)"),process.exit(1);let agent=options.agent??process.env.GENIE_AGENT_NAME,briefService=await getBrief(),brief=await briefService.generateBrief({team,agent,since:options.since,repoPath:process.cwd()});console.log(briefService.formatBrief(brief))}function registerAgentBrief(parent){parent.command("brief").description("Show startup brief \u2014 aggregated context since last session").option("--team <name>","Team name (default: GENIE_TEAM)").option("--agent <name>","Agent name (default: GENIE_AGENT_NAME)").option("--since <iso>","Start timestamp (default: last executor end)").action(async(options)=>{try{await handleBrief(options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_agent_directory();init_agent_sync();init_builtin_agents();init_genie_config2();async function showEntry(name,json2){let resolved=await resolve6(name);if(!resolved)console.error(`Agent "${name}" not found in directory or built-ins.`),process.exit(1);if(json2){console.log(JSON.stringify({...resolved.entry,builtin:resolved.builtin},null,2));return}if(resolved.builtin)console.log(`
@@ -4336,7 +4336,7 @@ __pycache__
4336
4336
  target
4337
4337
  coverage
4338
4338
  .cache
4339
- `;function loadIgnoreRules(ignoreFilePath){let ig=import_ignore.default();if(existsSync66(ignoreFilePath)){let content=readFileSync42(ignoreFilePath,"utf-8");ig.add(content)}return ig}async function*scanForAgents(root,ignoreFilePath){let ig=loadIgnoreRules(ignoreFilePath??join77(root,".genieignore"));ig.add("agents"),yield*walkDir(root,root,ig)}function*walkDir(dir,root,ig){let names;try{names=readdirSync14(dir)}catch{return}for(let name of names){let fullPath=join77(dir,name);try{if(!statSync15(fullPath).isDirectory())continue}catch{continue}let relPath=`${relative5(root,fullPath)}/`;if(ig.ignores(relPath))continue;let agentsMdPath=join77(fullPath,"AGENTS.md");if(existsSync66(agentsMdPath)){let hasSubAgents=hasSubAgentDirs(fullPath);if(yield{path:fullPath,dirName:name,hasSubAgents,isSubAgent:!1},hasSubAgents)yield*scanSubAgents2(fullPath,name)}yield*walkDir(fullPath,root,ig)}}function hasSubAgentDirs(agentDir){let subAgentsDir=join77(agentDir,".genie","agents");if(!existsSync66(subAgentsDir))return!1;try{return readdirSync14(subAgentsDir).some((name)=>{let subPath=join77(subAgentsDir,name);try{return statSync15(subPath).isDirectory()&&existsSync66(join77(subPath,"AGENTS.md"))}catch{return!1}})}catch{return!1}}function*scanSubAgents2(parentDir,parentName){let subAgentsDir=join77(parentDir,".genie","agents");if(!existsSync66(subAgentsDir))return;let names;try{names=readdirSync14(subAgentsDir)}catch{return}for(let name of names){let subDir=join77(subAgentsDir,name);try{if(!statSync15(subDir).isDirectory())continue}catch{continue}if(!existsSync66(join77(subDir,"AGENTS.md")))continue;yield{path:subDir,dirName:name,hasSubAgents:!1,isSubAgent:!0,parentName}}}async function scanForAgentsAll(root,ignoreFilePath){let results=[];for await(let agent of scanForAgents(root,ignoreFilePath))results.push(agent);return results}init_workspace();async function discoverExternalAgents(workspaceRoot){let allScanned=await scanForAgentsAll(workspaceRoot),canonicalNames=new Set(scanAgents(workspaceRoot)),agentsDir=join78(workspaceRoot,"agents"),external2=[];for(let scanned of allScanned){if(scanned.path.startsWith(agentsDir))continue;if(canonicalNames.has(scanned.dirName))continue;external2.push({name:scanned.dirName,path:scanned.path,relativePath:relative6(workspaceRoot,scanned.path),isSubAgent:scanned.isSubAgent,parentName:scanned.parentName})}return external2}function importAgents(workspaceRoot,agents){let agentsDir=join78(workspaceRoot,"agents");mkdirSync31(agentsDir,{recursive:!0});let result2={imported:[],skipped:[],errors:[]};for(let agent of agents){let destName=resolveUniqueName(agentsDir,agent.name),destPath=join78(agentsDir,destName);if(existsSync67(destPath)){result2.skipped.push(agent.name);continue}try{moveDirectory(agent.path,destPath),result2.imported.push(destName)}catch(err){result2.errors.push({name:agent.name,error:err instanceof Error?err.message:String(err)})}}return result2}function moveDirectory(src,dest){try{renameSync12(src,dest)}catch{cpSync(src,dest,{recursive:!0}),rmSync4(src,{recursive:!0,force:!0})}}function resolveUniqueName(agentsDir,name){if(!existsSync67(join78(agentsDir,name)))return name;let suffix=2;while(existsSync67(join78(agentsDir,`${name}-${suffix}`)))suffix++;return`${name}-${suffix}`}init_interactivity();init_defaults();import{readFileSync as readFileSync43,writeFileSync as writeFileSync29}from"fs";import{join as join79}from"path";function formatDefaults(workspaceDefaults){let effective=computeEffectiveDefaults(workspaceDefaults),lines=[];for(let key of Object.keys(BUILTIN_DEFAULTS)){let value=effective[key],source=workspaceDefaults?.[key]!==void 0?"workspace":"built-in";lines.push(` ${key}: ${value} (${source})`)}return lines.join(`
4339
+ `;function loadIgnoreRules(ignoreFilePath){let ig=import_ignore.default();if(existsSync66(ignoreFilePath)){let content=readFileSync42(ignoreFilePath,"utf-8");ig.add(content)}return ig}async function*scanForAgents(root,ignoreFilePath){let ig=loadIgnoreRules(ignoreFilePath??join77(root,".genieignore"));ig.add("agents"),yield*walkDir(root,root,ig)}function*walkDir(dir,root,ig){let names;try{names=readdirSync14(dir)}catch{return}for(let name of names){let fullPath=join77(dir,name);try{if(!statSync15(fullPath).isDirectory())continue}catch{continue}let relPath=`${relative5(root,fullPath)}/`;if(ig.ignores(relPath))continue;let agentsMdPath=join77(fullPath,"AGENTS.md");if(existsSync66(agentsMdPath)){let hasSubAgents=hasSubAgentDirs(fullPath);if(yield{path:fullPath,dirName:name,hasSubAgents,isSubAgent:!1},hasSubAgents)yield*scanSubAgents2(fullPath,name)}yield*walkDir(fullPath,root,ig)}}function hasSubAgentDirs(agentDir){let subAgentsDir=join77(agentDir,".genie","agents");if(!existsSync66(subAgentsDir))return!1;try{return readdirSync14(subAgentsDir).some((name)=>{let subPath=join77(subAgentsDir,name);try{return statSync15(subPath).isDirectory()&&existsSync66(join77(subPath,"AGENTS.md"))}catch{return!1}})}catch{return!1}}function*scanSubAgents2(parentDir,parentName){let subAgentsDir=join77(parentDir,".genie","agents");if(!existsSync66(subAgentsDir))return;let names;try{names=readdirSync14(subAgentsDir)}catch{return}for(let name of names){let subDir=join77(subAgentsDir,name);try{if(!statSync15(subDir).isDirectory())continue}catch{continue}if(!existsSync66(join77(subDir,"AGENTS.md")))continue;yield{path:subDir,dirName:name,hasSubAgents:!1,isSubAgent:!0,parentName}}}async function scanForAgentsAll(root,ignoreFilePath){let results=[];for await(let agent of scanForAgents(root,ignoreFilePath))results.push(agent);return results}init_workspace();async function discoverExternalAgents(workspaceRoot){let allScanned=await scanForAgentsAll(workspaceRoot),canonicalNames=new Set(scanAgents2(workspaceRoot)),agentsDir=join78(workspaceRoot,"agents"),external2=[];for(let scanned of allScanned){if(scanned.path.startsWith(agentsDir))continue;if(canonicalNames.has(scanned.dirName))continue;external2.push({name:scanned.dirName,path:scanned.path,relativePath:relative6(workspaceRoot,scanned.path),isSubAgent:scanned.isSubAgent,parentName:scanned.parentName})}return external2}function importAgents(workspaceRoot,agents){let agentsDir=join78(workspaceRoot,"agents");mkdirSync31(agentsDir,{recursive:!0});let result2={imported:[],skipped:[],errors:[]};for(let agent of agents){let destName=resolveUniqueName(agentsDir,agent.name),destPath=join78(agentsDir,destName);if(existsSync67(destPath)){result2.skipped.push(agent.name);continue}try{moveDirectory(agent.path,destPath),result2.imported.push(destName)}catch(err){result2.errors.push({name:agent.name,error:err instanceof Error?err.message:String(err)})}}return result2}function moveDirectory(src,dest){try{renameSync12(src,dest)}catch{cpSync(src,dest,{recursive:!0}),rmSync4(src,{recursive:!0,force:!0})}}function resolveUniqueName(agentsDir,name){if(!existsSync67(join78(agentsDir,name)))return name;let suffix=2;while(existsSync67(join78(agentsDir,`${name}-${suffix}`)))suffix++;return`${name}-${suffix}`}init_interactivity();init_defaults();import{readFileSync as readFileSync43,writeFileSync as writeFileSync29}from"fs";import{join as join79}from"path";function formatDefaults(workspaceDefaults){let effective=computeEffectiveDefaults(workspaceDefaults),lines=[];for(let key of Object.keys(BUILTIN_DEFAULTS)){let value=effective[key],source=workspaceDefaults?.[key]!==void 0?"workspace":"built-in";lines.push(` ${key}: ${value} (${source})`)}return lines.join(`
4340
4340
  `)}function formatWelcome(ctx){let lines=["",` Workspace: ${ctx.workspaceName}`,` Agents: ${ctx.canonicalAgentCount} registered`];if(ctx.discovered.length>0)lines.push(` Discovered: ${ctx.discovered.length} external agent(s) found`);return lines.push(""),lines.push(" Effective defaults:"),lines.push(formatDefaults(ctx.config.agents?.defaults)),lines.push(""),lines.join(`
4341
4341
  `)}function formatNextSteps(ctx){let lines=[""," Next steps:"];if(ctx.canonicalAgentCount===0)lines.push(" genie init agent <name> Scaffold your first agent");return lines.push(" genie spawn <agent> Launch an agent"),lines.push(" genie team create <name> Create a multi-agent team"),lines.push(" /wizard Full guided onboarding"),lines.push(""),lines.join(`
4342
4342
  `)}var MODEL_CHOICES=[{name:"opus (most capable)",value:"opus"},{name:"sonnet (balanced)",value:"sonnet"},{name:"haiku (fastest)",value:"haiku"}];async function runMiniWizard(ctx){let{confirm:confirm3}=await Promise.resolve().then(() => (init_esm14(),exports_esm));console.log(formatWelcome(ctx));let wantCustomize=await confirm3({message:"Customize workspace defaults?",default:!1}),result2={customized:!1,importedAgents:[],completed:!0};if(wantCustomize){let newDefaults=await customizeDefaults(ctx.config.agents?.defaults);if(newDefaults)result2.customized=!0,result2.defaults=newDefaults,persistDefaults(ctx.workspaceRoot,newDefaults)}if(ctx.pending.length>0){console.log(`
@@ -4346,8 +4346,8 @@ coverage
4346
4346
  `),writeFileSync31(join81(agentDir,"brain","memory","MEMORY.md"),`# Memory Index
4347
4347
 
4348
4348
  _This file is maintained by the auto-memory system. New memories are added automatically._
4349
- `);let reposTarget=join81(workspaceRoot,"repos");if(existsSync69(reposTarget))try{symlinkSync(reposTarget,join81(agentDir,"repos"))}catch{}if(console.log(`Agent scaffolded: agents/${name}/`),console.log(" AGENTS.md, SOUL.md, HEARTBEAT.md"),console.log(" brain/memory/MEMORY.md (seeded)"),console.log(" .claude/settings.local.json (auto-memory enabled)"),existsSync69(join81(agentDir,"repos")))console.log(" repos -> ../repos (symlink)")}async function maybeBootstrapDefaultAgent(workspaceRoot){if(scanAgents(workspaceRoot).length>0)return!1;if(!await esm_default4({message:"No agent found in this workspace. Scaffold the default `genie` agent now?",default:!0}))return console.log(" Skipped default agent bootstrap. Run `genie init agent genie` later."),!1;return scaffoldAgentInWorkspace(workspaceRoot,"genie"),!0}async function syncWorkspaceAgents(workspaceRoot){let agents=scanAgents(workspaceRoot);if(agents.length===0)return;console.log(` Found ${agents.length} agent(s): ${agents.join(", ")}`);try{let{syncAgentDirectory:syncAgentDirectory2}=await Promise.resolve().then(() => (init_agent_sync(),exports_agent_sync)),result2=await syncAgentDirectory2(workspaceRoot);if(result2.registered.length>0)console.log(` Registered: ${result2.registered.join(", ")}`);if(result2.updated.length>0)console.log(` Updated: ${result2.updated.join(", ")}`)}catch{}}async function initWorkspace(){let cwd=process.cwd(),existing=findWorkspace(cwd);if(existing){if(console.log(`Already inside workspace: ${existing.root}`),await maybeBootstrapDefaultAgent(existing.root))await syncWorkspaceAgents(existing.root);return}let genieDir=join81(cwd,".genie");mkdirSync33(genieDir,{recursive:!0});let pgUrl=detectPgUrl(),config={name:basename12(cwd),pgUrl,agents:{defaults:{}},tmux:{socket:"genie"},sdk:{}};writeFileSync31(join81(genieDir,"workspace.json"),`${JSON.stringify(config,null,2)}
4350
- `);let genieignorePath=join81(cwd,".genieignore");if(!existsSync69(genieignorePath))writeFileSync31(genieignorePath,GENIEIGNORE_DEFAULTS,"utf-8"),console.log(" Created .genieignore");if(console.log(`Workspace created: ${cwd}`),pgUrl)console.log(` pgUrl: ${pgUrl}`);await maybeBootstrapDefaultAgent(cwd),await syncWorkspaceAgents(cwd),await runPostInitFlow(cwd,config)}async function runPostInitFlow(workspaceRoot,config){if(!isInteractive())return;let discovered=await discoverExternalAgents(workspaceRoot);refreshPending(workspaceRoot,discovered);let pending=listPending(workspaceRoot),ctx={workspaceRoot,workspaceName:basename12(workspaceRoot),config,discovered,pending,canonicalAgentCount:scanAgents(workspaceRoot).length},result2=await runMiniWizard(ctx);if(result2.importedAgents.length>0){let toImport=pending.filter((p)=>result2.importedAgents.includes(p.name)),discoveredToImport=toImport.map((p)=>({name:p.name,path:p.path,relativePath:p.relativePath,isSubAgent:p.isSubAgent,parentName:p.parentName})),importResult=importAgents(workspaceRoot,discoveredToImport);for(let name of importResult.imported){let agent=toImport.find((a)=>a.name===name);if(agent)removePending(workspaceRoot,agent.path);console.log(` Imported: ${name}`)}for(let err of importResult.errors)console.error(` Import failed (${err.name}): ${err.error}`);await syncWorkspaceAgents(workspaceRoot)}}function resolveAgentsDir(wsRoot,dirOption){if(dirOption)return resolve15(dirOption);let cwd=process.cwd(),rel=relative7(wsRoot,cwd);if(rel.startsWith(".."))return join81(wsRoot,"agents");let segments=rel===""?[]:rel.split(sep2),idx=segments.indexOf("agents");if(idx===-1)return join81(wsRoot,"agents");return join81(wsRoot,...segments.slice(0,idx+1))}async function initAgent(name,options){if(!name||/[\/\\]/.test(name)||name==="."||name===".."||name.includes(".."))console.error("Error: Agent name must not contain path separators or traversal sequences."),process.exit(1);let cwd=process.cwd(),ws=findWorkspace(cwd);if(!ws)console.error("Error: Not in a genie workspace. Run `genie init` first."),process.exit(1);let agentsDir=resolveAgentsDir(ws.root,options.dir);try{scaffoldAgentInWorkspace(ws.root,name,agentsDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}}function registerInitCommands(program2){program2.command("init").description("Initialize a genie workspace").action(async()=>{await ensureSetupCompleteForInit(),await initWorkspace()}).command("agent <name>").description("Scaffold a new agent in the workspace").option("--dir <path>","Target directory for agent (default: CWD if inside agents/, else workspace agents/)").action(async(name,options)=>{await ensureSetupCompleteForInit(),await initAgent(name,options)})}init_db();init_runtime_events();init_term_format();function parseSince4(since){let match=since.match(/^(\d+)([smhd])$/);if(!match)return since;let amount=Number.parseInt(match[1],10),unit=match[2],ms={s:1000,m:60000,h:3600000,d:86400000}[unit]??3600000;return new Date(Date.now()-amount*ms).toISOString()}async function metricsNowCommand(options){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),snapshots=await sql`SELECT * FROM machine_snapshots ORDER BY created_at DESC LIMIT 1`,agentCount=await sql`SELECT count(DISTINCT agent_id)::int as cnt FROM executors WHERE state NOT IN ('done', 'error', 'terminated')`,teamCount=await sql`SELECT count(*)::int as cnt FROM teams WHERE status = 'in_progress'`,snapshot=snapshots[0]??{},throughput=await queryRuntimeEventThroughput(60),data={active_workers:snapshot.active_workers??agentCount[0]?.cnt??0,active_teams:snapshot.active_teams??teamCount[0]?.cnt??0,tmux_sessions:snapshot.tmux_sessions??0,cpu_percent:snapshot.cpu_percent??null,memory_mb:snapshot.memory_mb??null,snapshot_at:snapshot.created_at?new Date(snapshot.created_at).toISOString():null,events_emitted_last_60s:throughput.emitted};if(options.json){console.log(JSON.stringify(data,null,2));return}if(console.log("Machine State:"),console.log(` Workers: ${data.active_workers}`),console.log(` Teams: ${data.active_teams}`),console.log(` Tmux: ${data.tmux_sessions} sessions`),data.cpu_percent!==null)console.log(` CPU: ${data.cpu_percent}%`);if(data.memory_mb!==null)console.log(` Memory: ${data.memory_mb} MB`);if(data.snapshot_at)console.log(` As of: ${formatRelativeTimestamp(data.snapshot_at)}`);console.log(`
4349
+ `);let reposTarget=join81(workspaceRoot,"repos");if(existsSync69(reposTarget))try{symlinkSync(reposTarget,join81(agentDir,"repos"))}catch{}if(console.log(`Agent scaffolded: agents/${name}/`),console.log(" AGENTS.md, SOUL.md, HEARTBEAT.md"),console.log(" brain/memory/MEMORY.md (seeded)"),console.log(" .claude/settings.local.json (auto-memory enabled)"),existsSync69(join81(agentDir,"repos")))console.log(" repos -> ../repos (symlink)")}async function maybeBootstrapDefaultAgent(workspaceRoot){if(scanAgents2(workspaceRoot).length>0)return!1;if(!await esm_default4({message:"No agent found in this workspace. Scaffold the default `genie` agent now?",default:!0}))return console.log(" Skipped default agent bootstrap. Run `genie init agent genie` later."),!1;return scaffoldAgentInWorkspace(workspaceRoot,"genie"),!0}async function syncWorkspaceAgents(workspaceRoot){let agents=scanAgents2(workspaceRoot);if(agents.length===0)return;console.log(` Found ${agents.length} agent(s): ${agents.join(", ")}`);try{let{syncAgentDirectory:syncAgentDirectory2}=await Promise.resolve().then(() => (init_agent_sync(),exports_agent_sync)),result2=await syncAgentDirectory2(workspaceRoot);if(result2.registered.length>0)console.log(` Registered: ${result2.registered.join(", ")}`);if(result2.updated.length>0)console.log(` Updated: ${result2.updated.join(", ")}`)}catch{}}async function initWorkspace(){let cwd=process.cwd(),existing=findWorkspace(cwd);if(existing){if(console.log(`Already inside workspace: ${existing.root}`),await maybeBootstrapDefaultAgent(existing.root))await syncWorkspaceAgents(existing.root);return}let genieDir=join81(cwd,".genie");mkdirSync33(genieDir,{recursive:!0});let pgUrl=detectPgUrl(),config={name:basename12(cwd),pgUrl,agents:{defaults:{}},tmux:{socket:"genie"},sdk:{}};writeFileSync31(join81(genieDir,"workspace.json"),`${JSON.stringify(config,null,2)}
4350
+ `);let genieignorePath=join81(cwd,".genieignore");if(!existsSync69(genieignorePath))writeFileSync31(genieignorePath,GENIEIGNORE_DEFAULTS,"utf-8"),console.log(" Created .genieignore");if(console.log(`Workspace created: ${cwd}`),pgUrl)console.log(` pgUrl: ${pgUrl}`);await maybeBootstrapDefaultAgent(cwd),await syncWorkspaceAgents(cwd),await runPostInitFlow(cwd,config)}async function runPostInitFlow(workspaceRoot,config){if(!isInteractive())return;let discovered=await discoverExternalAgents(workspaceRoot);refreshPending(workspaceRoot,discovered);let pending=listPending(workspaceRoot),ctx={workspaceRoot,workspaceName:basename12(workspaceRoot),config,discovered,pending,canonicalAgentCount:scanAgents2(workspaceRoot).length},result2=await runMiniWizard(ctx);if(result2.importedAgents.length>0){let toImport=pending.filter((p)=>result2.importedAgents.includes(p.name)),discoveredToImport=toImport.map((p)=>({name:p.name,path:p.path,relativePath:p.relativePath,isSubAgent:p.isSubAgent,parentName:p.parentName})),importResult=importAgents(workspaceRoot,discoveredToImport);for(let name of importResult.imported){let agent=toImport.find((a)=>a.name===name);if(agent)removePending(workspaceRoot,agent.path);console.log(` Imported: ${name}`)}for(let err of importResult.errors)console.error(` Import failed (${err.name}): ${err.error}`);await syncWorkspaceAgents(workspaceRoot)}}function resolveAgentsDir(wsRoot,dirOption){if(dirOption)return resolve15(dirOption);let cwd=process.cwd(),rel=relative7(wsRoot,cwd);if(rel.startsWith(".."))return join81(wsRoot,"agents");let segments=rel===""?[]:rel.split(sep2),idx=segments.indexOf("agents");if(idx===-1)return join81(wsRoot,"agents");return join81(wsRoot,...segments.slice(0,idx+1))}async function initAgent(name,options){if(!name||/[\/\\]/.test(name)||name==="."||name===".."||name.includes(".."))console.error("Error: Agent name must not contain path separators or traversal sequences."),process.exit(1);let cwd=process.cwd(),ws=findWorkspace(cwd);if(!ws)console.error("Error: Not in a genie workspace. Run `genie init` first."),process.exit(1);let agentsDir=resolveAgentsDir(ws.root,options.dir);try{scaffoldAgentInWorkspace(ws.root,name,agentsDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}}function registerInitCommands(program2){program2.command("init").description("Initialize a genie workspace").action(async()=>{await ensureSetupCompleteForInit(),await initWorkspace()}).command("agent <name>").description("Scaffold a new agent in the workspace").option("--dir <path>","Target directory for agent (default: CWD if inside agents/, else workspace agents/)").action(async(name,options)=>{await ensureSetupCompleteForInit(),await initAgent(name,options)})}init_db();init_runtime_events();init_term_format();function parseSince4(since){let match=since.match(/^(\d+)([smhd])$/);if(!match)return since;let amount=Number.parseInt(match[1],10),unit=match[2],ms={s:1000,m:60000,h:3600000,d:86400000}[unit]??3600000;return new Date(Date.now()-amount*ms).toISOString()}async function metricsNowCommand(options){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),snapshots=await sql`SELECT * FROM machine_snapshots ORDER BY created_at DESC LIMIT 1`,agentCount=await sql`SELECT count(DISTINCT agent_id)::int as cnt FROM executors WHERE state NOT IN ('done', 'error', 'terminated')`,teamCount=await sql`SELECT count(*)::int as cnt FROM teams WHERE status = 'in_progress'`,snapshot=snapshots[0]??{},throughput=await queryRuntimeEventThroughput(60),data={active_workers:snapshot.active_workers??agentCount[0]?.cnt??0,active_teams:snapshot.active_teams??teamCount[0]?.cnt??0,tmux_sessions:snapshot.tmux_sessions??0,cpu_percent:snapshot.cpu_percent??null,memory_mb:snapshot.memory_mb??null,snapshot_at:snapshot.created_at?new Date(snapshot.created_at).toISOString():null,events_emitted_last_60s:throughput.emitted};if(options.json){console.log(JSON.stringify(data,null,2));return}if(console.log("Machine State:"),console.log(` Workers: ${data.active_workers}`),console.log(` Teams: ${data.active_teams}`),console.log(` Tmux: ${data.tmux_sessions} sessions`),data.cpu_percent!==null)console.log(` CPU: ${data.cpu_percent}%`);if(data.memory_mb!==null)console.log(` Memory: ${data.memory_mb} MB`);if(data.snapshot_at)console.log(` As of: ${formatRelativeTimestamp(data.snapshot_at)}`);console.log(`
4351
4351
  Event Throughput (last 60s):`),console.log(` Emitted: ${data.events_emitted_last_60s}`)}async function metricsHistoryCommand(options){if(!await isAvailable())console.error("Database not available."),process.exit(1);let sql=await getConnection(),sinceTs=parseSince4(options.since??"1h"),rows=await sql`
4352
4352
  SELECT active_workers, active_teams, tmux_sessions, cpu_percent, memory_mb, created_at
4353
4353
  FROM machine_snapshots