herm-tui 1.9.0-dev.28 → 1.9.0-dev.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/index.js +8 -8
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -3273,7 +3273,7 @@ ${inner}
3273
3273
  ${closingIndent}}`}default:return"any"}}function formatFunctionDefinitions(functions){let lines3=["namespace functions {",""];for(let fn of functions){if(fn.description)lines3.push(`// ${fn.description}`);let{parameters}=fn,properties=parameters?.properties;if(!parameters||!properties||Object.keys(properties).length===0)lines3.push(`type ${fn.name} = () => any;`);else{lines3.push(`type ${fn.name} = (_: {`);let formattedProperties=formatObjectProperties(parameters,0,formatFunctionType);if(formattedProperties.length>0)lines3.push(formattedProperties);lines3.push("}) => any;")}lines3.push("")}return lines3.push("} // namespace functions"),lines3.join(`
3274
3274
  `)}function estimateTokensInFunctions(functions,countStringTokens){let formatted=formatFunctionDefinitions(functions),tokens2=countStringTokens(formatted);return tokens2+=exports.FUNCTION_DEFINITION_TOKEN_OVERHEAD,tokens2}function padSystemMessage(message,hasFunctions,isSystemPadded){if(!hasFunctions||isSystemPadded||message.role!=="system")return message;if(!message.content||message.content.endsWith(NEWLINE))return message;return{...message,content:`${message.content}${NEWLINE}`}}function computeChatCompletionTokenCount(request,countStringTokens){let{messages,functions,function_call:functionCall}=request,hasFunctions=Boolean(functions&&functions.length>0),paddedSystem=!1,total=0;for(let message of messages){let messageToCount=padSystemMessage(message,hasFunctions,paddedSystem);if(messageToCount!==message&&message.role==="system")paddedSystem=!0;else if(message.role==="system"&&hasFunctions&&!paddedSystem)paddedSystem=!0;total+=countMessageTokens(messageToCount,countStringTokens)}if(total+=exports.COMPLETION_REQUEST_TOKEN_OVERHEAD,hasFunctions&&functions){if(total+=estimateTokensInFunctions(functions,countStringTokens),messages.some((message)=>message.role==="system"))total-=exports.SYSTEM_FUNCTION_TOKEN_DEDUCTION}if(functionCall&&functionCall!=="auto"){if(functionCall==="none")total+=exports.FUNCTION_CALL_NONE_TOKEN_OVERHEAD;else if(typeof functionCall==="object"&&functionCall.name)total+=countStringTokens(functionCall.name)+exports.FUNCTION_CALL_NAME_TOKEN_OVERHEAD}return total}});var require_modelsChatEnabled_gen=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.chatEnabledModels=void 0;exports.chatEnabledModels=["chatgpt-4o-latest","codex-mini-latest","computer-use-preview","computer-use-preview-2025-03-11","gpt-3.5","gpt-3.5-0301","gpt-3.5-turbo","gpt-3.5-turbo-0125","gpt-3.5-turbo-0613","gpt-3.5-turbo-1106","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-instruct","gpt-4","gpt-4-0125-preview","gpt-4-0314","gpt-4-0613","gpt-4-1106-preview","gpt-4-1106-vision-preview","gpt-4-32k","gpt-4-turbo","gpt-4-turbo-2024-04-09","gpt-4-turbo-preview","gpt-4.1","gpt-4.1-2025-04-14","gpt-4.1-mini","gpt-4.1-mini-2025-04-14","gpt-4.1-nano","gpt-4.1-nano-2025-04-14","gpt-4.5-preview","gpt-4.5-preview-2025-02-27","gpt-4o","gpt-4o-2024-05-13","gpt-4o-2024-08-06","gpt-4o-2024-11-20","gpt-4o-audio-preview","gpt-4o-audio-preview-2024-10-01","gpt-4o-audio-preview-2024-12-17","gpt-4o-audio-preview-2025-06-03","gpt-4o-mini","gpt-4o-mini-2024-07-18","gpt-4o-mini-audio-preview","gpt-4o-mini-audio-preview-2024-12-17","gpt-4o-mini-search-preview","gpt-4o-mini-search-preview-2025-03-11","gpt-4o-search-preview","gpt-4o-search-preview-2025-03-11","gpt-5","gpt-5-2025-08-07","gpt-5-chat-latest","gpt-5-codex","gpt-5-mini","gpt-5-mini-2025-08-07","gpt-5-nano","gpt-5-nano-2025-08-07","gpt-5-pro","gpt-5-pro-2025-10-06","gpt-audio","gpt-audio-2025-08-28","gpt-audio-mini","gpt-audio-mini-2025-10-06","gpt-oss-120b","gpt-oss-20b","o1","o1-2024-12-17","o1-mini","o1-mini-2024-09-12","o1-preview","o1-preview-2024-09-12","o1-pro","o1-pro-2025-03-19","o3","o3-2025-04-16","o3-deep-research","o3-deep-research-2025-06-26","o3-mini","o3-mini-2025-01-31","o3-pro","o3-pro-2025-06-10","o4-mini","o4-mini-2025-04-16","o4-mini-deep-research","o4-mini-deep-research-2025-06-26"]});var require_modelsMap=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.o200k_harmony=exports.o200k_base=exports.cl100k_base=exports.p50k_edit=exports.r50k_base=exports.p50k_base=void 0;exports.p50k_base=["text-davinci-002","text-davinci-003","code-davinci-001","code-davinci-002","davinci-codex","code-cushman-001","code-cushman-002","cushman-codex"];exports.r50k_base=["text-ada-001","text-babbage-001","text-curie-001","text-davinci-001","ada","babbage","curie","davinci","code-search-ada-code-001","code-search-ada-text-001","text-similarity-ada-001","text-search-ada-doc-001","text-search-ada-query-001","text-similarity-babbage-001","text-search-babbage-doc-001","text-search-babbage-query-001","code-search-babbage-code-001","code-search-babbage-text-001","text-similarity-curie-001","text-search-curie-doc-001","text-search-curie-query-001","text-similarity-davinci-001","text-search-davinci-doc-001","text-search-davinci-query-001"];exports.p50k_edit=["code-davinci-edit-001","text-davinci-edit-001"];exports.cl100k_base=["gpt-3.5","gpt-3.5-0301","gpt-3.5-turbo","gpt-3.5-turbo-0125","gpt-3.5-turbo-0613","gpt-3.5-turbo-1106","gpt-3.5-turbo-16k-0613","gpt-3.5-turbo-instruct","gpt-4","gpt-4-0125-preview","gpt-4-0314","gpt-4-0613","gpt-4-1106-preview","gpt-4-1106-vision-preview","gpt-4-32k","gpt-4-turbo","gpt-4-turbo-2024-04-09","gpt-4-turbo-preview","text-embedding-3-large","text-embedding-3-small","text-embedding-ada-002","babbage-002","davinci-002"];exports.o200k_base=[];exports.o200k_harmony=["gpt-oss-20b","gpt-oss-120b"]});var require_specialTokens=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.HarmonyCall=exports.HarmonyConstrain=exports.HarmonyReturn=exports.HarmonyChannel=exports.HarmonyMessage=exports.HarmonyEnd=exports.HarmonyStart=exports.HarmonyStartOfText=exports.EndOfPrompt=exports.ImSep=exports.ImEnd=exports.ImStart=exports.FimSuffix=exports.FimMiddle=exports.FimPrefix=exports.EndOfText=void 0;exports.EndOfText="<|endoftext|>";exports.FimPrefix="<|fim_prefix|>";exports.FimMiddle="<|fim_middle|>";exports.FimSuffix="<|fim_suffix|>";exports.ImStart="<|im_start|>";exports.ImEnd="<|im_end|>";exports.ImSep="<|im_sep|>";exports.EndOfPrompt="<|endofprompt|>";exports.HarmonyStartOfText="<|startoftext|>";exports.HarmonyStart="<|start|>";exports.HarmonyEnd="<|end|>";exports.HarmonyMessage="<|message|>";exports.HarmonyChannel="<|channel|>";exports.HarmonyReturn="<|return|>";exports.HarmonyConstrain="<|constrain|>";exports.HarmonyCall="<|call|>"});var require_mapping=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o,m2,k2,k22){if(k22===void 0)k22=k2;var desc=Object.getOwnPropertyDescriptor(m2,k2);if(!desc||("get"in desc?!m2.__esModule:desc.writable||desc.configurable))desc={enumerable:!0,get:function(){return m2[k2]}};Object.defineProperty(o,k22,desc)}:function(o,m2,k2,k22){if(k22===void 0)k22=k2;o[k22]=m2[k2]}),__setModuleDefault=exports&&exports.__setModuleDefault||(Object.create?function(o,v2){Object.defineProperty(o,"default",{enumerable:!0,value:v2})}:function(o,v2){o.default=v2}),__importStar=exports&&exports.__importStar||function(){var ownKeys=function(o){return ownKeys=Object.getOwnPropertyNames||function(o2){var ar=[];for(var k2 in o2)if(Object.prototype.hasOwnProperty.call(o2,k2))ar[ar.length]=k2;return ar},ownKeys(o)};return function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null){for(var k2=ownKeys(mod),i=0;i<k2.length;i++)if(k2[i]!=="default")__createBinding(result,mod,k2[i])}return __setModuleDefault(result,mod),result}}();Object.defineProperty(exports,"__esModule",{value:!0});exports.chatModelParams=exports.modelToEncodingMap=exports.encodingNames=exports.DEFAULT_ENCODING=exports.o200k_harmony=exports.o200k_base=exports.r50k_base=exports.p50k_edit=exports.p50k_base=exports.cl100k_base=void 0;var modelsChatEnabled_gen_js_1=require_modelsChatEnabled_gen(),encodingsMap=__importStar(require_modelsMap()),specialTokens_js_1=require_specialTokens();exports.cl100k_base="cl100k_base";exports.p50k_base="p50k_base";exports.p50k_edit="p50k_edit";exports.r50k_base="r50k_base";exports.o200k_base="o200k_base";exports.o200k_harmony="o200k_harmony";exports.DEFAULT_ENCODING=exports.o200k_base;exports.encodingNames=[exports.p50k_base,exports.r50k_base,exports.p50k_edit,exports.cl100k_base,exports.o200k_base,exports.o200k_harmony];exports.modelToEncodingMap=Object.fromEntries(Object.entries(encodingsMap).flatMap(([encodingName,models])=>models.map((modelName)=>[modelName,encodingName])));var gpt3params={messageSeparator:`
3275
3275
  `,roleSeparator:`
3276
- `},gpt4params={messageSeparator:"",roleSeparator:specialTokens_js_1.ImSep};exports.chatModelParams=Object.fromEntries(modelsChatEnabled_gen_js_1.chatEnabledModels.flatMap((modelName)=>modelName.startsWith("gpt-3.5")?[[modelName,gpt3params]]:[[modelName,gpt4params]]))});var require_constants2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.O200K_TOKEN_SPLIT_REGEX=exports.CL100K_TOKEN_SPLIT_REGEX=exports.R50K_TOKEN_SPLIT_REGEX=void 0;exports.R50K_TOKEN_SPLIT_REGEX=/'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu;var CONTRACTION_SUFFIX_PATTERN=String.raw`'(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])`,OPTIONAL_CONTRACTION_SUFFIX=String.raw`(?:${CONTRACTION_SUFFIX_PATTERN})?`,CL100K_TOKEN_SPLIT_PATTERN=String.raw`${CONTRACTION_SUFFIX_PATTERN}|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s+$|\s*[\r\n]|\s+(?!\S)|\s`;exports.CL100K_TOKEN_SPLIT_REGEX=new RegExp(CL100K_TOKEN_SPLIT_PATTERN,"gu");var O200K_TOKEN_SPLIT_PATTERN=String.raw`[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]*[\p{Ll}\p{Lm}\p{Lo}\p{M}]+${OPTIONAL_CONTRACTION_SUFFIX}|[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]+[\p{Ll}\p{Lm}\p{Lo}\p{M}]*${OPTIONAL_CONTRACTION_SUFFIX}|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n/]*|\s*[\r\n]+|\s+(?!\S)|\s+`;exports.O200K_TOKEN_SPLIT_REGEX=new RegExp(O200K_TOKEN_SPLIT_PATTERN,"gu")});var require_cl100k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.Cl100KBase=Cl100KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function Cl100KBase(bytePairRankDecoder){let specialTokenMapping=new Map([[specialTokens_js_1.EndOfText,100257],[specialTokens_js_1.FimPrefix,100258],[specialTokens_js_1.FimMiddle,100259],[specialTokens_js_1.FimSuffix,100260],[specialTokens_js_1.ImStart,100264],[specialTokens_js_1.ImEnd,100265],[specialTokens_js_1.ImSep,100266],[specialTokens_js_1.EndOfPrompt,100276]]);return{tokenSplitRegex:constants_js_1.CL100K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:specialTokenMapping}}});var require_o200k_base2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createO200KSpecialTokenMap=void 0;exports.O200KBase=O200KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2(),O200K_BASE_SPECIAL_TOKEN_ENTRIES=[[specialTokens_js_1.EndOfText,199999],[specialTokens_js_1.FimPrefix,200000],[specialTokens_js_1.FimMiddle,200001],[specialTokens_js_1.FimSuffix,200002],[specialTokens_js_1.ImStart,200003],[specialTokens_js_1.ImEnd,200004],[specialTokens_js_1.ImSep,200005],[specialTokens_js_1.EndOfPrompt,200006]],createO200KSpecialTokenMap=()=>new Map(O200K_BASE_SPECIAL_TOKEN_ENTRIES);exports.createO200KSpecialTokenMap=createO200KSpecialTokenMap;function O200KBase(bytePairRankDecoder){return{tokenSplitRegex:constants_js_1.O200K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:exports.createO200KSpecialTokenMap()}}});var require_o200k_harmony=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.O200KHarmony=O200KHarmony;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2(),RESERVED_TOKEN_RANGE_START=200013,RESERVED_TOKEN_RANGE_END=201088,STATIC_SPECIAL_TOKEN_ENTRIES=[[specialTokens_js_1.HarmonyStartOfText,199998],[specialTokens_js_1.EndOfText,199999],["<|reserved_200000|>",200000],["<|reserved_200001|>",200001],[specialTokens_js_1.HarmonyReturn,200002],[specialTokens_js_1.HarmonyConstrain,200003],["<|reserved_200004|>",200004],[specialTokens_js_1.HarmonyChannel,200005],[specialTokens_js_1.HarmonyStart,200006],[specialTokens_js_1.HarmonyEnd,200007],[specialTokens_js_1.HarmonyMessage,200008],["<|reserved_200009|>",200009],["<|reserved_200010|>",200010],["<|reserved_200011|>",200011],[specialTokens_js_1.HarmonyCall,200012]];function O200KHarmony(bytePairRankDecoder){let specialTokensEncoder=new Map(STATIC_SPECIAL_TOKEN_ENTRIES);for(let tokenId=RESERVED_TOKEN_RANGE_START;tokenId<RESERVED_TOKEN_RANGE_END;tokenId+=1)specialTokensEncoder.set(`<|reserved_${tokenId}|>`,tokenId);return specialTokensEncoder.set(specialTokens_js_1.EndOfPrompt,200018),{tokenSplitRegex:constants_js_1.O200K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder,chatFormatter:"harmony"}}});var require_p50k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.P50KBase=P50KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function P50KBase(bytePairRankDecoder){return{expectedVocabularySize:50281,tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:new Map([[specialTokens_js_1.EndOfText,50256]])}}});var require_p50k_edit=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.P50KEdit=P50KEdit;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function P50KEdit(bytePairRankDecoder){let specialTokenMapping=new Map([[specialTokens_js_1.EndOfText,50256],[specialTokens_js_1.FimPrefix,50281],[specialTokens_js_1.FimMiddle,50282],[specialTokens_js_1.FimSuffix,50283]]);return{tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:specialTokenMapping}}});var require_r50k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.R50KBase=R50KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function R50KBase(bytePairRankDecoder){return{expectedVocabularySize:50257,tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:new Map([[specialTokens_js_1.EndOfText,50256]])}}});var require_modelParams=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.getEncodingParams=getEncodingParams;var cl100k_base_js_1=require_cl100k_base(),o200k_base_js_1=require_o200k_base2(),o200k_harmony_js_1=require_o200k_harmony(),p50k_base_js_1=require_p50k_base(),p50k_edit_js_1=require_p50k_edit(),r50k_base_js_1=require_r50k_base();function getEncodingParams(encodingName,getMergeableRanks){let mergeableBytePairRanks=getMergeableRanks(encodingName);switch(encodingName.toLowerCase()){case"r50k_base":return(0,r50k_base_js_1.R50KBase)(mergeableBytePairRanks);case"p50k_base":return(0,p50k_base_js_1.P50KBase)(mergeableBytePairRanks);case"p50k_edit":return(0,p50k_edit_js_1.P50KEdit)(mergeableBytePairRanks);case"cl100k_base":return(0,cl100k_base_js_1.Cl100KBase)(mergeableBytePairRanks);case"o200k_base":return(0,o200k_base_js_1.O200KBase)(mergeableBytePairRanks);case"o200k_harmony":return(0,o200k_harmony_js_1.O200KHarmony)(mergeableBytePairRanks);default:throw Error(`Unknown encoding name: ${encodingName}`)}}});var require_GptEncoding=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.GptEncoding=void 0;var BytePairEncodingCore_js_1=require_BytePairEncodingCore(),constants_js_1=require_constants(),functionCalling_js_1=require_functionCalling(),mapping_js_1=require_mapping(),modelParams_js_1=require_modelParams(),specialTokens_js_1=require_specialTokens(),utfUtil_js_1=require_utfUtil(),util_js_1=require_util();class GptEncoding{static EndOfPrompt=specialTokens_js_1.EndOfPrompt;static EndOfText=specialTokens_js_1.EndOfText;static FimMiddle=specialTokens_js_1.FimMiddle;static FimPrefix=specialTokens_js_1.FimPrefix;static FimSuffix=specialTokens_js_1.FimSuffix;modelName;modelSpec;bytePairEncodingCoreProcessor;specialTokensEncoder;specialTokensSet;allSpecialTokenRegex;defaultSpecialTokenConfig;chatFormatter;countChatCompletionTokens;vocabularySize;constructor({bytePairRankDecoder:mergeableBytePairRanks,specialTokensEncoder,expectedVocabularySize,modelName,modelSpec,chatFormatter,...rest}){this.specialTokensEncoder=specialTokensEncoder,this.specialTokensSet=new Set(this.specialTokensEncoder.keys()),this.allSpecialTokenRegex=(0,util_js_1.getSpecialTokenRegex)(this.specialTokensSet),this.bytePairEncodingCoreProcessor=new BytePairEncodingCore_js_1.BytePairEncodingCore({bytePairRankDecoder:mergeableBytePairRanks,specialTokensEncoder,...rest}),this.defaultSpecialTokenConfig=this.processSpecialTokens();let maxTokenValue=Math.max(mergeableBytePairRanks.length-1,(0,util_js_1.getMaxValueFromMap)(specialTokensEncoder));if(this.vocabularySize=this.bytePairEncodingCoreProcessor.mergeableBytePairRankCount+specialTokensEncoder.size,expectedVocabularySize!==void 0){if(this.vocabularySize!==expectedVocabularySize)throw Error("The number of mergeable tokens and special tokens must be equal to expectedVocabularySize.");if(maxTokenValue!==expectedVocabularySize-1)throw Error(`The model encodings are invalid. The maximum token value must be equal to expectedVocabularySize - 1. Currently ${maxTokenValue}, expected ${expectedVocabularySize-1}`)}if(this.encode=this.encode.bind(this),this.decode=this.decode.bind(this),this.encodeGenerator=this.encodeGenerator.bind(this),this.decodeGenerator=this.decodeGenerator.bind(this),this.decodeAsyncGenerator=this.decodeAsyncGenerator.bind(this),this.decodeAsync=this.decodeAsync.bind(this),this.isWithinTokenLimit=this.isWithinTokenLimit.bind(this),this.encodeChat=this.encodeChat.bind(this),this.encodeChatGenerator=this.encodeChatGenerator.bind(this),this.countTokens=this.countTokens.bind(this),this.setMergeCacheSize=this.setMergeCacheSize.bind(this),this.clearMergeCache=this.clearMergeCache.bind(this),this.estimateCost=this.estimateCost.bind(this),modelSpec?.supported_features?.includes("function_calling"))this.countChatCompletionTokens=this.countChatCompletionTokensInternal.bind(this);this.modelName=modelName,this.modelSpec=modelSpec,this.chatFormatter=chatFormatter??"chatml"}*encodeHarmonyChatGenerator(chat,encodeOptions){let harmonyStart=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyStart),harmonyMessage=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyMessage),harmonyEnd=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyEnd),harmonyReturn=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyReturn),harmonyCall=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyCall),harmonyChannel=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyChannel),harmonyConstrain=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyConstrain);if(harmonyStart===void 0||harmonyMessage===void 0||harmonyEnd===void 0||harmonyReturn===void 0||harmonyCall===void 0||harmonyChannel===void 0||harmonyConstrain===void 0)throw Error("Harmony chat format requires dedicated special tokens.");let encodeHeaderText=(text3)=>text3.length>0?this.encode(text3):[],resolveTerminatorToken=(terminator)=>{switch(terminator){case"<|return|>":return harmonyReturn;case"<|call|>":return harmonyCall;case"<|end|>":default:return harmonyEnd}};for(let message of chat){if(message.content===void 0)throw Error("Content must be defined for all messages.");let roleOrName=message.name??message.role??"user";yield[harmonyStart],yield encodeHeaderText(roleOrName);let recipientInRole=message.recipient&&(message.recipientPlacement==="role"||!message.channel),recipientInChannel=message.recipient&&!recipientInRole;if(recipientInRole)yield encodeHeaderText(` to=${message.recipient}`);if(message.channel){if(yield[harmonyChannel],yield encodeHeaderText(message.channel),recipientInChannel)yield encodeHeaderText(` to=${message.recipient}`)}if(message.constraint)yield[harmonyConstrain],yield encodeHeaderText(message.constraint);yield[harmonyMessage],yield*this.encodeGenerator(message.content,encodeOptions),yield[resolveTerminatorToken(message.terminator)]}let assistantPrime=encodeOptions?.primeWithAssistantResponse??"assistant";if(assistantPrime.length>0)yield[harmonyStart],yield encodeHeaderText(assistantPrime)}static getEncodingApi(encodingName,getMergeableRanks){let modelParams=(0,modelParams_js_1.getEncodingParams)(encodingName,getMergeableRanks);return new GptEncoding(modelParams)}static getEncodingApiForModel(modelName,getMergeableRanks,modelSpec){let encodingName=mapping_js_1.modelToEncodingMap[modelName]??mapping_js_1.DEFAULT_ENCODING,modelParams=(0,modelParams_js_1.getEncodingParams)(encodingName,getMergeableRanks);return new GptEncoding({...modelParams,modelName,modelSpec})}processSpecialTokens({allowedSpecial,disallowedSpecial}={}){let regexPattern;if(allowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS||allowedSpecial?.has(constants_js_1.ALL_SPECIAL_TOKENS)){allowedSpecial=new Set(this.specialTokensSet);let allowedSpecialSet=allowedSpecial;if(disallowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS)throw Error('allowedSpecial and disallowedSpecial cannot both be set to "all".');if(typeof disallowedSpecial==="object")disallowedSpecial.forEach((val)=>allowedSpecialSet.delete(val));else disallowedSpecial=new Set}if(!disallowedSpecial||disallowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS||disallowedSpecial.has(constants_js_1.ALL_SPECIAL_TOKENS)){disallowedSpecial=new Set(this.specialTokensSet);let disallowedSpecialSet=disallowedSpecial;if(allowedSpecial?.size){if(allowedSpecial.forEach((val)=>disallowedSpecialSet.delete(val)),disallowedSpecial.forEach((val)=>allowedSpecial.delete(val)),disallowedSpecial.size>0)regexPattern=(0,util_js_1.getSpecialTokenRegex)(disallowedSpecial)}else regexPattern=this.allSpecialTokenRegex}return{allowedSpecial,regexPattern}}encodeGenerator(lineToEncode,encodeOptions){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=lineToEncode.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.encodeNativeGenerator(lineToEncode,specialTokenConfig.allowedSpecial)}encode(lineToEncode,encodeOptions){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=lineToEncode.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.encodeNative(lineToEncode,specialTokenConfig.allowedSpecial)}*encodeChatGenerator(chat,model=this.modelName,encodeOptions){if(!model)throw Error("Model name must be provided either during initialization or passed in to the method.");let params=mapping_js_1.chatModelParams[model];if(!params)throw Error(`Model '${model}' does not support chat.`);if(this.chatFormatter==="harmony"){yield*this.encodeHarmonyChatGenerator(chat,encodeOptions);return}let chatStartToken=this.specialTokensEncoder.get(specialTokens_js_1.ImStart),chatEndToken=this.specialTokensEncoder.get(specialTokens_js_1.ImEnd);if(chatStartToken===void 0||chatEndToken===void 0)throw Error(`Model '${model}' does not support chat.`);let allowedSpecial=new Set([specialTokens_js_1.ImSep]),{messageSeparator,roleSeparator}=params,encodedMessageSeparator=messageSeparator.length>0?this.encode(messageSeparator):[],encodedRoleSeparator=roleSeparator.length>0?this.encode(roleSeparator,{allowedSpecial}):[],nameCache=new Map;for(let{role="system",name=role,content}of chat){if(content===void 0)throw Error("Content must be defined for all messages.");yield[chatStartToken];let encodedName=nameCache.get(name)??this.encode(name);if(nameCache.set(name,encodedName),yield encodedName,encodedRoleSeparator.length>0)yield encodedRoleSeparator;yield*this.encodeGenerator(content,encodeOptions),yield[chatEndToken],yield encodedMessageSeparator}let assistantPrime=encodeOptions?.primeWithAssistantResponse??"assistant";if(assistantPrime.length>0)yield[chatStartToken],yield*this.encodeGenerator(assistantPrime,encodeOptions);if(encodedRoleSeparator.length>0)yield encodedRoleSeparator}encodeChat(chat,model=this.modelName,encodeOptions){return[...this.encodeChatGenerator(chat,model,encodeOptions)].flat()}isWithinTokenLimit(input,tokenLimit,encodeOptions){let tokenGenerator=typeof input==="string"?this.encodeGenerator(input,encodeOptions):this.encodeChatGenerator(input,void 0,encodeOptions),count2=0;for(let tokens2 of tokenGenerator)if(count2+=tokens2.length,count2>tokenLimit)return!1;return count2}countTokens(input,encodeOptions){if(typeof input==="string"){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=input.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.countNative(input,specialTokenConfig.allowedSpecial)}let tokenGenerator=this.encodeChatGenerator(input,void 0,encodeOptions),count2=0;for(let tokens2 of tokenGenerator)count2+=tokens2.length;return count2}countStringTokens(text3){if(!text3)return 0;return this.bytePairEncodingCoreProcessor.countNative(text3)}countChatCompletionTokensInternal(request){return(0,functionCalling_js_1.computeChatCompletionTokenCount)(request,(text3)=>this.countStringTokens(text3))}setMergeCacheSize(size){this.bytePairEncodingCoreProcessor.setMergeCacheSize(size)}clearMergeCache(){this.bytePairEncodingCoreProcessor.clearMergeCache()}decode(inputTokensToDecode){return this.bytePairEncodingCoreProcessor.decodeNative(inputTokensToDecode)}*decodeGenerator(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeGenerator(inputTokensToDecode),buffer2="";for(let decodedPart of decodedByteGenerator)if(buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0}),buffer2.length===0||(0,utfUtil_js_1.endsWithIncompleteUtfPairSurrogate)(buffer2))continue;else yield buffer2,buffer2="";if(buffer2.length>0)yield buffer2}async*decodeAsyncGenerator(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeAsyncIterable(inputTokensToDecode),buffer2="";for await(let decodedPart of decodedByteGenerator)if(buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0}),buffer2.length===0||(0,utfUtil_js_1.endsWithIncompleteUtfPairSurrogate)(buffer2))continue;else yield buffer2,buffer2="";if(buffer2.length>0)yield buffer2}async decodeAsync(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeAsyncIterable(inputTokensToDecode),buffer2="";for await(let decodedPart of decodedByteGenerator)buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0});return buffer2}estimateCost(tokenCount,modelSpec=this.modelSpec){if(!modelSpec)throw Error("Model spec must be provided either during initialization or passed in to the method.");if(!modelSpec.price_data)throw Error(`No cost information available for model: ${modelSpec.name}`);let priceDataPerMillion=modelSpec.price_data,result={},millionTokens=tokenCount/1e6;if(priceDataPerMillion.main)result.main={input:priceDataPerMillion.main.input&&priceDataPerMillion.main.input*millionTokens,output:priceDataPerMillion.main.output&&priceDataPerMillion.main.output*millionTokens,cached_input:priceDataPerMillion.main.cached_input&&priceDataPerMillion.main.cached_input*millionTokens,cached_output:priceDataPerMillion.main.cached_output&&priceDataPerMillion.main.cached_output*millionTokens};if(priceDataPerMillion.batch)result.batch={input:priceDataPerMillion.batch.input&&priceDataPerMillion.batch.input*millionTokens,output:priceDataPerMillion.batch.output&&priceDataPerMillion.batch.output*millionTokens,cached_input:priceDataPerMillion.batch.cached_input&&priceDataPerMillion.batch.cached_input*millionTokens,cached_output:priceDataPerMillion.batch.cached_output&&priceDataPerMillion.batch.cached_output*millionTokens};return result}}exports.GptEncoding=GptEncoding});var require_o200k_base3=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o,m2,k2,k22){if(k22===void 0)k22=k2;var desc=Object.getOwnPropertyDescriptor(m2,k2);if(!desc||("get"in desc?!m2.__esModule:desc.writable||desc.configurable))desc={enumerable:!0,get:function(){return m2[k2]}};Object.defineProperty(o,k22,desc)}:function(o,m2,k2,k22){if(k22===void 0)k22=k2;o[k22]=m2[k2]}),__exportStar=exports&&exports.__exportStar||function(m2,exports2){for(var p in m2)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m2,p)},__importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.vocabularySize=exports.setMergeCacheSize=exports.isWithinTokenLimit=exports.estimateCost=exports.encodeGenerator=exports.encodeChatGenerator=exports.encodeChat=exports.encode=exports.decodeGenerator=exports.decodeAsyncGenerator=exports.decode=exports.countTokens=exports.clearMergeCache=void 0;var o200k_base_js_1=__importDefault(require_o200k_base()),GptEncoding_js_1=require_GptEncoding();__exportStar(require_constants(),exports);__exportStar(require_specialTokens(),exports);var api=GptEncoding_js_1.GptEncoding.getEncodingApi("o200k_base",()=>o200k_base_js_1.default),{decode:decode2,decodeAsyncGenerator,decodeGenerator,encode,encodeGenerator,isWithinTokenLimit,countTokens,encodeChat,encodeChatGenerator,vocabularySize,setMergeCacheSize,clearMergeCache,estimateCost}=api;exports.decode=decode2;exports.decodeAsyncGenerator=decodeAsyncGenerator;exports.decodeGenerator=decodeGenerator;exports.encode=encode;exports.encodeGenerator=encodeGenerator;exports.isWithinTokenLimit=isWithinTokenLimit;exports.countTokens=countTokens;exports.encodeChat=encodeChat;exports.encodeChatGenerator=encodeChatGenerator;exports.vocabularySize=vocabularySize;exports.setMergeCacheSize=setMergeCacheSize;exports.clearMergeCache=clearMergeCache;exports.estimateCost=estimateCost;exports.default=api});var require_main=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o,m2,k2,k22){if(k22===void 0)k22=k2;var desc=Object.getOwnPropertyDescriptor(m2,k2);if(!desc||("get"in desc?!m2.__esModule:desc.writable||desc.configurable))desc={enumerable:!0,get:function(){return m2[k2]}};Object.defineProperty(o,k22,desc)}:function(o,m2,k2,k22){if(k22===void 0)k22=k2;o[k22]=m2[k2]}),__exportStar=exports&&exports.__exportStar||function(m2,exports2){for(var p in m2)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m2,p)},__importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.default=void 0;var o200k_base_js_1=require_o200k_base3();Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return __importDefault(o200k_base_js_1).default}});__exportStar(require_o200k_base3(),exports)});var exports_sessions_db={};__export(exports_sessions_db,{systemPrompt:()=>systemPrompt,stateDb:()=>stateDb,setHome:()=>setHome,search:()=>search,sdb:()=>exports_sessions_db,roots:()=>roots,resetDb:()=>resetDb,rename:()=>rename,remove:()=>remove,peek:()=>peek4,lineage:()=>lineage,lastReal:()=>lastReal,kind:()=>kind,goalState:()=>goalState,children:()=>children,chainTip:()=>chainTip,byId:()=>byId});import{Database}from"bun:sqlite";import{homedir as homedir3}from"os";function walkUp(sid){let step=q2(`SELECT p.id FROM sessions c
3276
+ `},gpt4params={messageSeparator:"",roleSeparator:specialTokens_js_1.ImSep};exports.chatModelParams=Object.fromEntries(modelsChatEnabled_gen_js_1.chatEnabledModels.flatMap((modelName)=>modelName.startsWith("gpt-3.5")?[[modelName,gpt3params]]:[[modelName,gpt4params]]))});var require_constants2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.O200K_TOKEN_SPLIT_REGEX=exports.CL100K_TOKEN_SPLIT_REGEX=exports.R50K_TOKEN_SPLIT_REGEX=void 0;exports.R50K_TOKEN_SPLIT_REGEX=/'s|'t|'re|'ve|'m|'ll|'d| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+/gu;var CONTRACTION_SUFFIX_PATTERN=String.raw`'(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])`,OPTIONAL_CONTRACTION_SUFFIX=String.raw`(?:${CONTRACTION_SUFFIX_PATTERN})?`,CL100K_TOKEN_SPLIT_PATTERN=String.raw`${CONTRACTION_SUFFIX_PATTERN}|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s+$|\s*[\r\n]|\s+(?!\S)|\s`;exports.CL100K_TOKEN_SPLIT_REGEX=new RegExp(CL100K_TOKEN_SPLIT_PATTERN,"gu");var O200K_TOKEN_SPLIT_PATTERN=String.raw`[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]*[\p{Ll}\p{Lm}\p{Lo}\p{M}]+${OPTIONAL_CONTRACTION_SUFFIX}|[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]+[\p{Ll}\p{Lm}\p{Lo}\p{M}]*${OPTIONAL_CONTRACTION_SUFFIX}|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n/]*|\s*[\r\n]+|\s+(?!\S)|\s+`;exports.O200K_TOKEN_SPLIT_REGEX=new RegExp(O200K_TOKEN_SPLIT_PATTERN,"gu")});var require_cl100k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.Cl100KBase=Cl100KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function Cl100KBase(bytePairRankDecoder){let specialTokenMapping=new Map([[specialTokens_js_1.EndOfText,100257],[specialTokens_js_1.FimPrefix,100258],[specialTokens_js_1.FimMiddle,100259],[specialTokens_js_1.FimSuffix,100260],[specialTokens_js_1.ImStart,100264],[specialTokens_js_1.ImEnd,100265],[specialTokens_js_1.ImSep,100266],[specialTokens_js_1.EndOfPrompt,100276]]);return{tokenSplitRegex:constants_js_1.CL100K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:specialTokenMapping}}});var require_o200k_base2=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.createO200KSpecialTokenMap=void 0;exports.O200KBase=O200KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2(),O200K_BASE_SPECIAL_TOKEN_ENTRIES=[[specialTokens_js_1.EndOfText,199999],[specialTokens_js_1.FimPrefix,200000],[specialTokens_js_1.FimMiddle,200001],[specialTokens_js_1.FimSuffix,200002],[specialTokens_js_1.ImStart,200003],[specialTokens_js_1.ImEnd,200004],[specialTokens_js_1.ImSep,200005],[specialTokens_js_1.EndOfPrompt,200006]],createO200KSpecialTokenMap=()=>new Map(O200K_BASE_SPECIAL_TOKEN_ENTRIES);exports.createO200KSpecialTokenMap=createO200KSpecialTokenMap;function O200KBase(bytePairRankDecoder){return{tokenSplitRegex:constants_js_1.O200K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:exports.createO200KSpecialTokenMap()}}});var require_o200k_harmony=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.O200KHarmony=O200KHarmony;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2(),RESERVED_TOKEN_RANGE_START=200013,RESERVED_TOKEN_RANGE_END=201088,STATIC_SPECIAL_TOKEN_ENTRIES=[[specialTokens_js_1.HarmonyStartOfText,199998],[specialTokens_js_1.EndOfText,199999],["<|reserved_200000|>",200000],["<|reserved_200001|>",200001],[specialTokens_js_1.HarmonyReturn,200002],[specialTokens_js_1.HarmonyConstrain,200003],["<|reserved_200004|>",200004],[specialTokens_js_1.HarmonyChannel,200005],[specialTokens_js_1.HarmonyStart,200006],[specialTokens_js_1.HarmonyEnd,200007],[specialTokens_js_1.HarmonyMessage,200008],["<|reserved_200009|>",200009],["<|reserved_200010|>",200010],["<|reserved_200011|>",200011],[specialTokens_js_1.HarmonyCall,200012]];function O200KHarmony(bytePairRankDecoder){let specialTokensEncoder=new Map(STATIC_SPECIAL_TOKEN_ENTRIES);for(let tokenId=RESERVED_TOKEN_RANGE_START;tokenId<RESERVED_TOKEN_RANGE_END;tokenId+=1)specialTokensEncoder.set(`<|reserved_${tokenId}|>`,tokenId);return specialTokensEncoder.set(specialTokens_js_1.EndOfPrompt,200018),{tokenSplitRegex:constants_js_1.O200K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder,chatFormatter:"harmony"}}});var require_p50k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.P50KBase=P50KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function P50KBase(bytePairRankDecoder){return{expectedVocabularySize:50281,tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:new Map([[specialTokens_js_1.EndOfText,50256]])}}});var require_p50k_edit=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.P50KEdit=P50KEdit;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function P50KEdit(bytePairRankDecoder){let specialTokenMapping=new Map([[specialTokens_js_1.EndOfText,50256],[specialTokens_js_1.FimPrefix,50281],[specialTokens_js_1.FimMiddle,50282],[specialTokens_js_1.FimSuffix,50283]]);return{tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:specialTokenMapping}}});var require_r50k_base=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.R50KBase=R50KBase;var specialTokens_js_1=require_specialTokens(),constants_js_1=require_constants2();function R50KBase(bytePairRankDecoder){return{expectedVocabularySize:50257,tokenSplitRegex:constants_js_1.R50K_TOKEN_SPLIT_REGEX,bytePairRankDecoder,specialTokensEncoder:new Map([[specialTokens_js_1.EndOfText,50256]])}}});var require_modelParams=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.getEncodingParams=getEncodingParams;var cl100k_base_js_1=require_cl100k_base(),o200k_base_js_1=require_o200k_base2(),o200k_harmony_js_1=require_o200k_harmony(),p50k_base_js_1=require_p50k_base(),p50k_edit_js_1=require_p50k_edit(),r50k_base_js_1=require_r50k_base();function getEncodingParams(encodingName,getMergeableRanks){let mergeableBytePairRanks=getMergeableRanks(encodingName);switch(encodingName.toLowerCase()){case"r50k_base":return(0,r50k_base_js_1.R50KBase)(mergeableBytePairRanks);case"p50k_base":return(0,p50k_base_js_1.P50KBase)(mergeableBytePairRanks);case"p50k_edit":return(0,p50k_edit_js_1.P50KEdit)(mergeableBytePairRanks);case"cl100k_base":return(0,cl100k_base_js_1.Cl100KBase)(mergeableBytePairRanks);case"o200k_base":return(0,o200k_base_js_1.O200KBase)(mergeableBytePairRanks);case"o200k_harmony":return(0,o200k_harmony_js_1.O200KHarmony)(mergeableBytePairRanks);default:throw Error(`Unknown encoding name: ${encodingName}`)}}});var require_GptEncoding=__commonJS((exports)=>{Object.defineProperty(exports,"__esModule",{value:!0});exports.GptEncoding=void 0;var BytePairEncodingCore_js_1=require_BytePairEncodingCore(),constants_js_1=require_constants(),functionCalling_js_1=require_functionCalling(),mapping_js_1=require_mapping(),modelParams_js_1=require_modelParams(),specialTokens_js_1=require_specialTokens(),utfUtil_js_1=require_utfUtil(),util_js_1=require_util();class GptEncoding{static EndOfPrompt=specialTokens_js_1.EndOfPrompt;static EndOfText=specialTokens_js_1.EndOfText;static FimMiddle=specialTokens_js_1.FimMiddle;static FimPrefix=specialTokens_js_1.FimPrefix;static FimSuffix=specialTokens_js_1.FimSuffix;modelName;modelSpec;bytePairEncodingCoreProcessor;specialTokensEncoder;specialTokensSet;allSpecialTokenRegex;defaultSpecialTokenConfig;chatFormatter;countChatCompletionTokens;vocabularySize;constructor({bytePairRankDecoder:mergeableBytePairRanks,specialTokensEncoder,expectedVocabularySize,modelName,modelSpec,chatFormatter,...rest}){this.specialTokensEncoder=specialTokensEncoder,this.specialTokensSet=new Set(this.specialTokensEncoder.keys()),this.allSpecialTokenRegex=(0,util_js_1.getSpecialTokenRegex)(this.specialTokensSet),this.bytePairEncodingCoreProcessor=new BytePairEncodingCore_js_1.BytePairEncodingCore({bytePairRankDecoder:mergeableBytePairRanks,specialTokensEncoder,...rest}),this.defaultSpecialTokenConfig=this.processSpecialTokens();let maxTokenValue=Math.max(mergeableBytePairRanks.length-1,(0,util_js_1.getMaxValueFromMap)(specialTokensEncoder));if(this.vocabularySize=this.bytePairEncodingCoreProcessor.mergeableBytePairRankCount+specialTokensEncoder.size,expectedVocabularySize!==void 0){if(this.vocabularySize!==expectedVocabularySize)throw Error("The number of mergeable tokens and special tokens must be equal to expectedVocabularySize.");if(maxTokenValue!==expectedVocabularySize-1)throw Error(`The model encodings are invalid. The maximum token value must be equal to expectedVocabularySize - 1. Currently ${maxTokenValue}, expected ${expectedVocabularySize-1}`)}if(this.encode=this.encode.bind(this),this.decode=this.decode.bind(this),this.encodeGenerator=this.encodeGenerator.bind(this),this.decodeGenerator=this.decodeGenerator.bind(this),this.decodeAsyncGenerator=this.decodeAsyncGenerator.bind(this),this.decodeAsync=this.decodeAsync.bind(this),this.isWithinTokenLimit=this.isWithinTokenLimit.bind(this),this.encodeChat=this.encodeChat.bind(this),this.encodeChatGenerator=this.encodeChatGenerator.bind(this),this.countTokens=this.countTokens.bind(this),this.setMergeCacheSize=this.setMergeCacheSize.bind(this),this.clearMergeCache=this.clearMergeCache.bind(this),this.estimateCost=this.estimateCost.bind(this),modelSpec?.supported_features?.includes("function_calling"))this.countChatCompletionTokens=this.countChatCompletionTokensInternal.bind(this);this.modelName=modelName,this.modelSpec=modelSpec,this.chatFormatter=chatFormatter??"chatml"}*encodeHarmonyChatGenerator(chat,encodeOptions){let harmonyStart=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyStart),harmonyMessage=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyMessage),harmonyEnd=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyEnd),harmonyReturn=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyReturn),harmonyCall=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyCall),harmonyChannel=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyChannel),harmonyConstrain=this.specialTokensEncoder.get(specialTokens_js_1.HarmonyConstrain);if(harmonyStart===void 0||harmonyMessage===void 0||harmonyEnd===void 0||harmonyReturn===void 0||harmonyCall===void 0||harmonyChannel===void 0||harmonyConstrain===void 0)throw Error("Harmony chat format requires dedicated special tokens.");let encodeHeaderText=(text3)=>text3.length>0?this.encode(text3):[],resolveTerminatorToken=(terminator)=>{switch(terminator){case"<|return|>":return harmonyReturn;case"<|call|>":return harmonyCall;case"<|end|>":default:return harmonyEnd}};for(let message of chat){if(message.content===void 0)throw Error("Content must be defined for all messages.");let roleOrName=message.name??message.role??"user";yield[harmonyStart],yield encodeHeaderText(roleOrName);let recipientInRole=message.recipient&&(message.recipientPlacement==="role"||!message.channel),recipientInChannel=message.recipient&&!recipientInRole;if(recipientInRole)yield encodeHeaderText(` to=${message.recipient}`);if(message.channel){if(yield[harmonyChannel],yield encodeHeaderText(message.channel),recipientInChannel)yield encodeHeaderText(` to=${message.recipient}`)}if(message.constraint)yield[harmonyConstrain],yield encodeHeaderText(message.constraint);yield[harmonyMessage],yield*this.encodeGenerator(message.content,encodeOptions),yield[resolveTerminatorToken(message.terminator)]}let assistantPrime=encodeOptions?.primeWithAssistantResponse??"assistant";if(assistantPrime.length>0)yield[harmonyStart],yield encodeHeaderText(assistantPrime)}static getEncodingApi(encodingName,getMergeableRanks){let modelParams=(0,modelParams_js_1.getEncodingParams)(encodingName,getMergeableRanks);return new GptEncoding(modelParams)}static getEncodingApiForModel(modelName,getMergeableRanks,modelSpec){let encodingName=mapping_js_1.modelToEncodingMap[modelName]??mapping_js_1.DEFAULT_ENCODING,modelParams=(0,modelParams_js_1.getEncodingParams)(encodingName,getMergeableRanks);return new GptEncoding({...modelParams,modelName,modelSpec})}processSpecialTokens({allowedSpecial,disallowedSpecial}={}){let regexPattern;if(allowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS||allowedSpecial?.has(constants_js_1.ALL_SPECIAL_TOKENS)){allowedSpecial=new Set(this.specialTokensSet);let allowedSpecialSet=allowedSpecial;if(disallowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS)throw Error('allowedSpecial and disallowedSpecial cannot both be set to "all".');if(typeof disallowedSpecial==="object")disallowedSpecial.forEach((val)=>allowedSpecialSet.delete(val));else disallowedSpecial=new Set}if(!disallowedSpecial||disallowedSpecial===constants_js_1.ALL_SPECIAL_TOKENS||disallowedSpecial.has(constants_js_1.ALL_SPECIAL_TOKENS)){disallowedSpecial=new Set(this.specialTokensSet);let disallowedSpecialSet=disallowedSpecial;if(allowedSpecial?.size){if(allowedSpecial.forEach((val)=>disallowedSpecialSet.delete(val)),disallowedSpecial.forEach((val)=>allowedSpecial.delete(val)),disallowedSpecial.size>0)regexPattern=(0,util_js_1.getSpecialTokenRegex)(disallowedSpecial)}else regexPattern=this.allSpecialTokenRegex}return{allowedSpecial,regexPattern}}encodeGenerator(lineToEncode,encodeOptions){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=lineToEncode.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.encodeNativeGenerator(lineToEncode,specialTokenConfig.allowedSpecial)}encode(lineToEncode,encodeOptions){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=lineToEncode.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.encodeNative(lineToEncode,specialTokenConfig.allowedSpecial)}*encodeChatGenerator(chat,model=this.modelName,encodeOptions){if(!model)throw Error("Model name must be provided either during initialization or passed in to the method.");let params=mapping_js_1.chatModelParams[model];if(!params)throw Error(`Model '${model}' does not support chat.`);if(this.chatFormatter==="harmony"){yield*this.encodeHarmonyChatGenerator(chat,encodeOptions);return}let chatStartToken=this.specialTokensEncoder.get(specialTokens_js_1.ImStart),chatEndToken=this.specialTokensEncoder.get(specialTokens_js_1.ImEnd);if(chatStartToken===void 0||chatEndToken===void 0)throw Error(`Model '${model}' does not support chat.`);let allowedSpecial=new Set([specialTokens_js_1.ImSep]),{messageSeparator,roleSeparator}=params,encodedMessageSeparator=messageSeparator.length>0?this.encode(messageSeparator):[],encodedRoleSeparator=roleSeparator.length>0?this.encode(roleSeparator,{allowedSpecial}):[],nameCache=new Map;for(let{role="system",name=role,content}of chat){if(content===void 0)throw Error("Content must be defined for all messages.");yield[chatStartToken];let encodedName=nameCache.get(name)??this.encode(name);if(nameCache.set(name,encodedName),yield encodedName,encodedRoleSeparator.length>0)yield encodedRoleSeparator;yield*this.encodeGenerator(content,encodeOptions),yield[chatEndToken],yield encodedMessageSeparator}let assistantPrime=encodeOptions?.primeWithAssistantResponse??"assistant";if(assistantPrime.length>0)yield[chatStartToken],yield*this.encodeGenerator(assistantPrime,encodeOptions);if(encodedRoleSeparator.length>0)yield encodedRoleSeparator}encodeChat(chat,model=this.modelName,encodeOptions){return[...this.encodeChatGenerator(chat,model,encodeOptions)].flat()}isWithinTokenLimit(input,tokenLimit,encodeOptions){let tokenGenerator=typeof input==="string"?this.encodeGenerator(input,encodeOptions):this.encodeChatGenerator(input,void 0,encodeOptions),count2=0;for(let tokens2 of tokenGenerator)if(count2+=tokens2.length,count2>tokenLimit)return!1;return count2}countTokens(input,encodeOptions){if(typeof input==="string"){let specialTokenConfig=encodeOptions?this.processSpecialTokens(encodeOptions):this.defaultSpecialTokenConfig;if(specialTokenConfig.regexPattern){let match2=input.match(specialTokenConfig.regexPattern);if(match2!==null)throw Error(`Disallowed special token found: ${match2[0]}`)}return this.bytePairEncodingCoreProcessor.countNative(input,specialTokenConfig.allowedSpecial)}let tokenGenerator=this.encodeChatGenerator(input,void 0,encodeOptions),count2=0;for(let tokens2 of tokenGenerator)count2+=tokens2.length;return count2}countStringTokens(text3){if(!text3)return 0;return this.bytePairEncodingCoreProcessor.countNative(text3)}countChatCompletionTokensInternal(request){return(0,functionCalling_js_1.computeChatCompletionTokenCount)(request,(text3)=>this.countStringTokens(text3))}setMergeCacheSize(size){this.bytePairEncodingCoreProcessor.setMergeCacheSize(size)}clearMergeCache(){this.bytePairEncodingCoreProcessor.clearMergeCache()}decode(inputTokensToDecode){return this.bytePairEncodingCoreProcessor.decodeNative(inputTokensToDecode)}*decodeGenerator(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeGenerator(inputTokensToDecode),buffer2="";for(let decodedPart of decodedByteGenerator)if(buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0}),buffer2.length===0||(0,utfUtil_js_1.endsWithIncompleteUtfPairSurrogate)(buffer2))continue;else yield buffer2,buffer2="";if(buffer2.length>0)yield buffer2}async*decodeAsyncGenerator(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeAsyncIterable(inputTokensToDecode),buffer2="";for await(let decodedPart of decodedByteGenerator)if(buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0}),buffer2.length===0||(0,utfUtil_js_1.endsWithIncompleteUtfPairSurrogate)(buffer2))continue;else yield buffer2,buffer2="";if(buffer2.length>0)yield buffer2}async decodeAsync(inputTokensToDecode){let decodedByteGenerator=this.bytePairEncodingCoreProcessor.decodeNativeAsyncIterable(inputTokensToDecode),buffer2="";for await(let decodedPart of decodedByteGenerator)buffer2+=typeof decodedPart==="string"?decodedPart:BytePairEncodingCore_js_1.decoder.decode(decodedPart,{stream:!0});return buffer2}estimateCost(tokenCount,modelSpec=this.modelSpec){if(!modelSpec)throw Error("Model spec must be provided either during initialization or passed in to the method.");if(!modelSpec.price_data)throw Error(`No cost information available for model: ${modelSpec.name}`);let priceDataPerMillion=modelSpec.price_data,result={},millionTokens=tokenCount/1e6;if(priceDataPerMillion.main)result.main={input:priceDataPerMillion.main.input&&priceDataPerMillion.main.input*millionTokens,output:priceDataPerMillion.main.output&&priceDataPerMillion.main.output*millionTokens,cached_input:priceDataPerMillion.main.cached_input&&priceDataPerMillion.main.cached_input*millionTokens,cached_output:priceDataPerMillion.main.cached_output&&priceDataPerMillion.main.cached_output*millionTokens};if(priceDataPerMillion.batch)result.batch={input:priceDataPerMillion.batch.input&&priceDataPerMillion.batch.input*millionTokens,output:priceDataPerMillion.batch.output&&priceDataPerMillion.batch.output*millionTokens,cached_input:priceDataPerMillion.batch.cached_input&&priceDataPerMillion.batch.cached_input*millionTokens,cached_output:priceDataPerMillion.batch.cached_output&&priceDataPerMillion.batch.cached_output*millionTokens};return result}}exports.GptEncoding=GptEncoding});var require_o200k_base3=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o,m2,k2,k22){if(k22===void 0)k22=k2;var desc=Object.getOwnPropertyDescriptor(m2,k2);if(!desc||("get"in desc?!m2.__esModule:desc.writable||desc.configurable))desc={enumerable:!0,get:function(){return m2[k2]}};Object.defineProperty(o,k22,desc)}:function(o,m2,k2,k22){if(k22===void 0)k22=k2;o[k22]=m2[k2]}),__exportStar=exports&&exports.__exportStar||function(m2,exports2){for(var p in m2)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m2,p)},__importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.vocabularySize=exports.setMergeCacheSize=exports.isWithinTokenLimit=exports.estimateCost=exports.encodeGenerator=exports.encodeChatGenerator=exports.encodeChat=exports.encode=exports.decodeGenerator=exports.decodeAsyncGenerator=exports.decode=exports.countTokens=exports.clearMergeCache=void 0;var o200k_base_js_1=__importDefault(require_o200k_base()),GptEncoding_js_1=require_GptEncoding();__exportStar(require_constants(),exports);__exportStar(require_specialTokens(),exports);var api=GptEncoding_js_1.GptEncoding.getEncodingApi("o200k_base",()=>o200k_base_js_1.default),{decode:decode2,decodeAsyncGenerator,decodeGenerator,encode:encode2,encodeGenerator,isWithinTokenLimit,countTokens,encodeChat,encodeChatGenerator,vocabularySize,setMergeCacheSize,clearMergeCache,estimateCost}=api;exports.decode=decode2;exports.decodeAsyncGenerator=decodeAsyncGenerator;exports.decodeGenerator=decodeGenerator;exports.encode=encode2;exports.encodeGenerator=encodeGenerator;exports.isWithinTokenLimit=isWithinTokenLimit;exports.countTokens=countTokens;exports.encodeChat=encodeChat;exports.encodeChatGenerator=encodeChatGenerator;exports.vocabularySize=vocabularySize;exports.setMergeCacheSize=setMergeCacheSize;exports.clearMergeCache=clearMergeCache;exports.estimateCost=estimateCost;exports.default=api});var require_main=__commonJS((exports)=>{var __createBinding=exports&&exports.__createBinding||(Object.create?function(o,m2,k2,k22){if(k22===void 0)k22=k2;var desc=Object.getOwnPropertyDescriptor(m2,k2);if(!desc||("get"in desc?!m2.__esModule:desc.writable||desc.configurable))desc={enumerable:!0,get:function(){return m2[k2]}};Object.defineProperty(o,k22,desc)}:function(o,m2,k2,k22){if(k22===void 0)k22=k2;o[k22]=m2[k2]}),__exportStar=exports&&exports.__exportStar||function(m2,exports2){for(var p in m2)if(p!=="default"&&!Object.prototype.hasOwnProperty.call(exports2,p))__createBinding(exports2,m2,p)},__importDefault=exports&&exports.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(exports,"__esModule",{value:!0});exports.default=void 0;var o200k_base_js_1=require_o200k_base3();Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return __importDefault(o200k_base_js_1).default}});__exportStar(require_o200k_base3(),exports)});var exports_sessions_db={};__export(exports_sessions_db,{systemPrompt:()=>systemPrompt,stateDb:()=>stateDb,setHome:()=>setHome,search:()=>search,sdb:()=>exports_sessions_db,roots:()=>roots,resetDb:()=>resetDb,rename:()=>rename,remove:()=>remove,peek:()=>peek4,lineage:()=>lineage,lastReal:()=>lastReal,kind:()=>kind,goalState:()=>goalState,children:()=>children,chainTip:()=>chainTip,byId:()=>byId});import{Database}from"bun:sqlite";import{homedir as homedir3}from"os";function walkUp(sid){let step=q2(`SELECT p.id FROM sessions c
3277
3277
  JOIN sessions p ON p.id = c.parent_session_id
3278
3278
  WHERE c.id = ? AND ${CONT("c")}`),cur=sid;for(let i=0;i<100;i++){let prev=step?.get(cur);if(!prev)return cur;cur=prev.id}return cur}function roots(limit=30){let end=mark("io:sessions.roots");try{return(q2(`SELECT ${COLS} FROM sessions s
3279
3279
  WHERE s.parent_session_id IS NULL
@@ -3425,8 +3425,8 @@ ${pointer}
3425
3425
  `+props.comment;else coll.comment=props.comment;offset=props.end;continue}if(!isMap&&ctx.options.strict&&utilContainsNewline.containsNewline(key3))onError(key3,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(i===0){if(props.comma)onError(props.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${fcName}`)}else{if(!props.comma)onError(props.start,"MISSING_CHAR",`Missing , between ${fcName} items`);if(props.comment){let prevItemComment="";loop:for(let st of start)switch(st.type){case"comma":case"space":break;case"comment":prevItemComment=st.source.substring(1);break loop;default:break loop}if(prevItemComment){let prev=coll.items[coll.items.length-1];if(identity.isPair(prev))prev=prev.value??prev.key;if(prev.comment)prev.comment+=`
3426
3426
  `+prevItemComment;else prev.comment=prevItemComment;props.comment=props.comment.substring(prevItemComment.length+1)}}}if(!isMap&&!sep2&&!props.found){let valueNode=value?composeNode(ctx,value,props,onError):composeEmptyNode(ctx,props.end,sep2,null,props,onError);if(coll.items.push(valueNode),offset=valueNode.range[2],isBlock(value))onError(valueNode.range,"BLOCK_IN_FLOW",blockMsg)}else{ctx.atKey=!0;let keyStart=props.end,keyNode=key3?composeNode(ctx,key3,props,onError):composeEmptyNode(ctx,keyStart,start,null,props,onError);if(isBlock(key3))onError(keyNode.range,"BLOCK_IN_FLOW",blockMsg);ctx.atKey=!1;let valueProps=resolveProps.resolveProps(sep2??[],{flow:fcName,indicator:"map-value-ind",next:value,offset:keyNode.range[2],onError,parentIndent:fc.indent,startOnNewline:!1});if(valueProps.found){if(!isMap&&!props.found&&ctx.options.strict){if(sep2)for(let st of sep2){if(st===valueProps.found)break;if(st.type==="newline"){onError(st,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}if(props.start<valueProps.found.offset-1024)onError(valueProps.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else if(value)if("source"in value&&value.source?.[0]===":")onError(value,"MISSING_CHAR",`Missing space after : in ${fcName}`);else onError(valueProps.start,"MISSING_CHAR",`Missing , or : between ${fcName} items`);let valueNode=value?composeNode(ctx,value,valueProps,onError):valueProps.found?composeEmptyNode(ctx,valueProps.end,sep2,null,valueProps,onError):null;if(valueNode){if(isBlock(value))onError(valueNode.range,"BLOCK_IN_FLOW",blockMsg)}else if(valueProps.comment)if(keyNode.comment)keyNode.comment+=`
3427
3427
  `+valueProps.comment;else keyNode.comment=valueProps.comment;let pair=new Pair.Pair(keyNode,valueNode);if(ctx.options.keepSourceTokens)pair.srcToken=collItem;if(isMap){let map=coll;if(utilMapIncludes.mapIncludes(ctx,map.items,keyNode))onError(keyStart,"DUPLICATE_KEY","Map keys must be unique");map.items.push(pair)}else{let map=new YAMLMap.YAMLMap(ctx.schema);map.flow=!0,map.items.push(pair);let endRange=(valueNode??keyNode).range;map.range=[keyNode.range[0],endRange[1],endRange[2]],coll.items.push(map)}offset=valueNode?valueNode.range[2]:valueProps.end}}let expectedEnd=isMap?"}":"]",[ce2,...ee]=fc.end,cePos=offset;if(ce2?.source===expectedEnd)cePos=ce2.offset+ce2.source.length;else{let name=fcName[0].toUpperCase()+fcName.substring(1),msg=atRoot?`${name} must end with a ${expectedEnd}`:`${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;if(onError(offset,atRoot?"MISSING_CHAR":"BAD_INDENT",msg),ce2&&ce2.source.length!==1)ee.unshift(ce2)}if(ee.length>0){let end=resolveEnd.resolveEnd(ee,cePos,ctx.options.strict,onError);if(end.comment)if(coll.comment)coll.comment+=`
3428
- `+end.comment;else coll.comment=end.comment;coll.range=[fc.offset,cePos,end.offset]}else coll.range=[fc.offset,cePos,cePos];return coll}exports.resolveFlowCollection=resolveFlowCollection});var require_compose_collection=__commonJS((exports)=>{var identity=require_identity(),Scalar=require_Scalar(),YAMLMap=require_YAMLMap(),YAMLSeq=require_YAMLSeq(),resolveBlockMap=require_resolve_block_map(),resolveBlockSeq=require_resolve_block_seq(),resolveFlowCollection=require_resolve_flow_collection();function resolveCollection(CN,ctx,token,onError,tagName,tag){let coll=token.type==="block-map"?resolveBlockMap.resolveBlockMap(CN,ctx,token,onError,tag):token.type==="block-seq"?resolveBlockSeq.resolveBlockSeq(CN,ctx,token,onError,tag):resolveFlowCollection.resolveFlowCollection(CN,ctx,token,onError,tag),Coll=coll.constructor;if(tagName==="!"||tagName===Coll.tagName)return coll.tag=Coll.tagName,coll;if(tagName)coll.tag=tagName;return coll}function composeCollection(CN,ctx,token,props,onError){let tagToken=props.tag,tagName=!tagToken?null:ctx.directives.tagName(tagToken.source,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg));if(token.type==="block-seq"){let{anchor,newlineAfterProp:nl}=props,lastProp=anchor&&tagToken?anchor.offset>tagToken.offset?anchor:tagToken:anchor??tagToken;if(lastProp&&(!nl||nl.offset<lastProp.offset))onError(lastProp,"MISSING_CHAR","Missing newline after block sequence props")}let expType=token.type==="block-map"?"map":token.type==="block-seq"?"seq":token.start.source==="{"?"map":"seq";if(!tagToken||!tagName||tagName==="!"||tagName===YAMLMap.YAMLMap.tagName&&expType==="map"||tagName===YAMLSeq.YAMLSeq.tagName&&expType==="seq")return resolveCollection(CN,ctx,token,onError,tagName);let tag=ctx.schema.tags.find((t2)=>t2.tag===tagName&&t2.collection===expType);if(!tag){let kt=ctx.schema.knownTags[tagName];if(kt?.collection===expType)ctx.schema.tags.push(Object.assign({},kt,{default:!1})),tag=kt;else{if(kt)onError(tagToken,"BAD_COLLECTION_TYPE",`${kt.tag} used for ${expType} collection, but expects ${kt.collection??"scalar"}`,!0);else onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,!0);return resolveCollection(CN,ctx,token,onError,tagName)}}let coll=resolveCollection(CN,ctx,token,onError,tagName,tag),res=tag.resolve?.(coll,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg),ctx.options)??coll,node=identity.isNode(res)?res:new Scalar.Scalar(res);if(node.range=coll.range,node.tag=tagName,tag?.format)node.format=tag.format;return node}exports.composeCollection=composeCollection});var require_resolve_block_scalar=__commonJS((exports)=>{var Scalar=require_Scalar();function resolveBlockScalar(ctx,scalar,onError){let start=scalar.offset,header=parseBlockScalarHeader(scalar,ctx.options.strict,onError);if(!header)return{value:"",type:null,comment:"",range:[start,start,start]};let type=header.mode===">"?Scalar.Scalar.BLOCK_FOLDED:Scalar.Scalar.BLOCK_LITERAL,lines3=scalar.source?splitLines(scalar.source):[],chompStart=lines3.length;for(let i=lines3.length-1;i>=0;--i){let content=lines3[i][1];if(content===""||content==="\r")chompStart=i;else break}if(chompStart===0){let value2=header.chomp==="+"&&lines3.length>0?`
3429
- `.repeat(Math.max(1,lines3.length-1)):"",end2=start+header.length;if(scalar.source)end2+=scalar.source.length;return{value:value2,type,comment:header.comment,range:[start,end2,end2]}}let trimIndent=scalar.indent+header.indent,offset=scalar.offset+header.length,contentStart=0;for(let i=0;i<chompStart;++i){let[indent,content]=lines3[i];if(content===""||content==="\r"){if(header.indent===0&&indent.length>trimIndent)trimIndent=indent.length}else{if(indent.length<trimIndent)onError(offset+indent.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(header.indent===0)trimIndent=indent.length;if(contentStart=i,trimIndent===0&&!ctx.atRoot)onError(offset,"BAD_INDENT","Block scalar values in collections must be indented");break}offset+=indent.length+content.length+1}for(let i=lines3.length-1;i>=chompStart;--i)if(lines3[i][0].length>trimIndent)chompStart=i+1;let value="",sep2="",prevMoreIndented=!1;for(let i=0;i<contentStart;++i)value+=lines3[i][0].slice(trimIndent)+`
3428
+ `+end.comment;else coll.comment=end.comment;coll.range=[fc.offset,cePos,end.offset]}else coll.range=[fc.offset,cePos,cePos];return coll}exports.resolveFlowCollection=resolveFlowCollection});var require_compose_collection=__commonJS((exports)=>{var identity=require_identity(),Scalar=require_Scalar(),YAMLMap=require_YAMLMap(),YAMLSeq=require_YAMLSeq(),resolveBlockMap=require_resolve_block_map(),resolveBlockSeq=require_resolve_block_seq(),resolveFlowCollection=require_resolve_flow_collection();function resolveCollection(CN,ctx,token,onError,tagName,tag){let coll=token.type==="block-map"?resolveBlockMap.resolveBlockMap(CN,ctx,token,onError,tag):token.type==="block-seq"?resolveBlockSeq.resolveBlockSeq(CN,ctx,token,onError,tag):resolveFlowCollection.resolveFlowCollection(CN,ctx,token,onError,tag),Coll=coll.constructor;if(tagName==="!"||tagName===Coll.tagName)return coll.tag=Coll.tagName,coll;if(tagName)coll.tag=tagName;return coll}function composeCollection(CN,ctx,token,props,onError){let tagToken=props.tag,tagName=!tagToken?null:ctx.directives.tagName(tagToken.source,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg));if(token.type==="block-seq"){let{anchor,newlineAfterProp:nl}=props,lastProp=anchor&&tagToken?anchor.offset>tagToken.offset?anchor:tagToken:anchor??tagToken;if(lastProp&&(!nl||nl.offset<lastProp.offset))onError(lastProp,"MISSING_CHAR","Missing newline after block sequence props")}let expType=token.type==="block-map"?"map":token.type==="block-seq"?"seq":token.start.source==="{"?"map":"seq";if(!tagToken||!tagName||tagName==="!"||tagName===YAMLMap.YAMLMap.tagName&&expType==="map"||tagName===YAMLSeq.YAMLSeq.tagName&&expType==="seq")return resolveCollection(CN,ctx,token,onError,tagName);let tag=ctx.schema.tags.find((t2)=>t2.tag===tagName&&t2.collection===expType);if(!tag){let kt=ctx.schema.knownTags[tagName];if(kt?.collection===expType)ctx.schema.tags.push(Object.assign({},kt,{default:!1})),tag=kt;else{if(kt)onError(tagToken,"BAD_COLLECTION_TYPE",`${kt.tag} used for ${expType} collection, but expects ${kt.collection??"scalar"}`,!0);else onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,!0);return resolveCollection(CN,ctx,token,onError,tagName)}}let coll=resolveCollection(CN,ctx,token,onError,tagName,tag),res=tag.resolve?.(coll,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg),ctx.options)??coll,node=identity.isNode(res)?res:new Scalar.Scalar(res);if(node.range=coll.range,node.tag=tagName,tag?.format)node.format=tag.format;return node}exports.composeCollection=composeCollection});var require_resolve_block_scalar=__commonJS((exports)=>{var Scalar=require_Scalar();function resolveBlockScalar(ctx,scalar2,onError){let start=scalar2.offset,header=parseBlockScalarHeader(scalar2,ctx.options.strict,onError);if(!header)return{value:"",type:null,comment:"",range:[start,start,start]};let type=header.mode===">"?Scalar.Scalar.BLOCK_FOLDED:Scalar.Scalar.BLOCK_LITERAL,lines3=scalar2.source?splitLines(scalar2.source):[],chompStart=lines3.length;for(let i=lines3.length-1;i>=0;--i){let content=lines3[i][1];if(content===""||content==="\r")chompStart=i;else break}if(chompStart===0){let value2=header.chomp==="+"&&lines3.length>0?`
3429
+ `.repeat(Math.max(1,lines3.length-1)):"",end2=start+header.length;if(scalar2.source)end2+=scalar2.source.length;return{value:value2,type,comment:header.comment,range:[start,end2,end2]}}let trimIndent=scalar2.indent+header.indent,offset=scalar2.offset+header.length,contentStart=0;for(let i=0;i<chompStart;++i){let[indent,content]=lines3[i];if(content===""||content==="\r"){if(header.indent===0&&indent.length>trimIndent)trimIndent=indent.length}else{if(indent.length<trimIndent)onError(offset+indent.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator");if(header.indent===0)trimIndent=indent.length;if(contentStart=i,trimIndent===0&&!ctx.atRoot)onError(offset,"BAD_INDENT","Block scalar values in collections must be indented");break}offset+=indent.length+content.length+1}for(let i=lines3.length-1;i>=chompStart;--i)if(lines3[i][0].length>trimIndent)chompStart=i+1;let value="",sep2="",prevMoreIndented=!1;for(let i=0;i<contentStart;++i)value+=lines3[i][0].slice(trimIndent)+`
3430
3430
  `;for(let i=contentStart;i<chompStart;++i){let[indent,content]=lines3[i];offset+=indent.length+content.length+1;let crlf=content[content.length-1]==="\r";if(crlf)content=content.slice(0,-1);if(content&&indent.length<trimIndent){let message=`Block scalar lines must not be less indented than their ${header.indent?"explicit indentation indicator":"first line"}`;onError(offset-content.length-(crlf?2:1),"BAD_INDENT",message),indent=""}if(type===Scalar.Scalar.BLOCK_LITERAL)value+=sep2+indent.slice(trimIndent)+content,sep2=`
3431
3431
  `;else if(indent.length>trimIndent||content[0]==="\t"){if(sep2===" ")sep2=`
3432
3432
  `;else if(!prevMoreIndented&&sep2===`
@@ -3440,7 +3440,7 @@ ${pointer}
3440
3440
  `+lines3[i][0].slice(trimIndent);if(value[value.length-1]!==`
3441
3441
  `)value+=`
3442
3442
  `;break;default:value+=`
3443
- `}let end=start+header.length+scalar.source.length;return{value,type,comment:header.comment,range:[start,end,end]}}function parseBlockScalarHeader({offset,props},strict,onError){if(props[0].type!=="block-scalar-header")return onError(props[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source}=props[0],mode=source[0],indent=0,chomp="",error=-1;for(let i=1;i<source.length;++i){let ch=source[i];if(!chomp&&(ch==="-"||ch==="+"))chomp=ch;else{let n=Number(ch);if(!indent&&n)indent=n;else if(error===-1)error=offset+i}}if(error!==-1)onError(error,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${source}`);let hasSpace=!1,comment="",length=source.length;for(let i=1;i<props.length;++i){let token=props[i];switch(token.type){case"space":hasSpace=!0;case"newline":length+=token.source.length;break;case"comment":if(strict&&!hasSpace)onError(token,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");length+=token.source.length,comment=token.source.substring(1);break;case"error":onError(token,"UNEXPECTED_TOKEN",token.message),length+=token.source.length;break;default:{let message=`Unexpected token in block scalar header: ${token.type}`;onError(token,"UNEXPECTED_TOKEN",message);let ts=token.source;if(ts&&typeof ts==="string")length+=ts.length}}}return{mode,indent,chomp,comment,length}}function splitLines(source){let split=source.split(/\n( *)/),first=split[0],m2=first.match(/^( *)/),lines3=[m2?.[1]?[m2[1],first.slice(m2[1].length)]:["",first]];for(let i=1;i<split.length;i+=2)lines3.push([split[i],split[i+1]]);return lines3}exports.resolveBlockScalar=resolveBlockScalar});var require_resolve_flow_scalar=__commonJS((exports)=>{var Scalar=require_Scalar(),resolveEnd=require_resolve_end();function resolveFlowScalar(scalar,strict,onError){let{offset,type,source,end}=scalar,_type,value,_onError=(rel2,code,msg)=>onError(offset+rel2,code,msg);switch(type){case"scalar":_type=Scalar.Scalar.PLAIN,value=plainValue(source,_onError);break;case"single-quoted-scalar":_type=Scalar.Scalar.QUOTE_SINGLE,value=singleQuotedValue(source,_onError);break;case"double-quoted-scalar":_type=Scalar.Scalar.QUOTE_DOUBLE,value=doubleQuotedValue(source,_onError);break;default:return onError(scalar,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${type}`),{value:"",type:null,comment:"",range:[offset,offset+source.length,offset+source.length]}}let valueEnd=offset+source.length,re2=resolveEnd.resolveEnd(end,valueEnd,strict,onError);return{value,type:_type,comment:re2.comment,range:[offset,valueEnd,re2.offset]}}function plainValue(source,onError){let badChar="";switch(source[0]){case"\t":badChar="a tab character";break;case",":badChar="flow indicator character ,";break;case"%":badChar="directive indicator character %";break;case"|":case">":{badChar=`block scalar indicator ${source[0]}`;break}case"@":case"`":{badChar=`reserved character ${source[0]}`;break}}if(badChar)onError(0,"BAD_SCALAR_START",`Plain value cannot start with ${badChar}`);return foldLines(source)}function singleQuotedValue(source,onError){if(source[source.length-1]!=="'"||source.length===1)onError(source.length,"MISSING_CHAR","Missing closing 'quote");return foldLines(source.slice(1,-1)).replace(/''/g,"'")}function foldLines(source){let first,line;try{first=new RegExp(`(.*?)(?<![ ])[ ]*\r?
3443
+ `}let end=start+header.length+scalar2.source.length;return{value,type,comment:header.comment,range:[start,end,end]}}function parseBlockScalarHeader({offset,props},strict,onError){if(props[0].type!=="block-scalar-header")return onError(props[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source}=props[0],mode=source[0],indent=0,chomp="",error=-1;for(let i=1;i<source.length;++i){let ch=source[i];if(!chomp&&(ch==="-"||ch==="+"))chomp=ch;else{let n=Number(ch);if(!indent&&n)indent=n;else if(error===-1)error=offset+i}}if(error!==-1)onError(error,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${source}`);let hasSpace=!1,comment="",length=source.length;for(let i=1;i<props.length;++i){let token=props[i];switch(token.type){case"space":hasSpace=!0;case"newline":length+=token.source.length;break;case"comment":if(strict&&!hasSpace)onError(token,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");length+=token.source.length,comment=token.source.substring(1);break;case"error":onError(token,"UNEXPECTED_TOKEN",token.message),length+=token.source.length;break;default:{let message=`Unexpected token in block scalar header: ${token.type}`;onError(token,"UNEXPECTED_TOKEN",message);let ts=token.source;if(ts&&typeof ts==="string")length+=ts.length}}}return{mode,indent,chomp,comment,length}}function splitLines(source){let split=source.split(/\n( *)/),first=split[0],m2=first.match(/^( *)/),lines3=[m2?.[1]?[m2[1],first.slice(m2[1].length)]:["",first]];for(let i=1;i<split.length;i+=2)lines3.push([split[i],split[i+1]]);return lines3}exports.resolveBlockScalar=resolveBlockScalar});var require_resolve_flow_scalar=__commonJS((exports)=>{var Scalar=require_Scalar(),resolveEnd=require_resolve_end();function resolveFlowScalar(scalar2,strict,onError){let{offset,type,source,end}=scalar2,_type,value,_onError=(rel2,code,msg)=>onError(offset+rel2,code,msg);switch(type){case"scalar":_type=Scalar.Scalar.PLAIN,value=plainValue(source,_onError);break;case"single-quoted-scalar":_type=Scalar.Scalar.QUOTE_SINGLE,value=singleQuotedValue(source,_onError);break;case"double-quoted-scalar":_type=Scalar.Scalar.QUOTE_DOUBLE,value=doubleQuotedValue(source,_onError);break;default:return onError(scalar2,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${type}`),{value:"",type:null,comment:"",range:[offset,offset+source.length,offset+source.length]}}let valueEnd=offset+source.length,re2=resolveEnd.resolveEnd(end,valueEnd,strict,onError);return{value,type:_type,comment:re2.comment,range:[offset,valueEnd,re2.offset]}}function plainValue(source,onError){let badChar="";switch(source[0]){case"\t":badChar="a tab character";break;case",":badChar="flow indicator character ,";break;case"%":badChar="directive indicator character %";break;case"|":case">":{badChar=`block scalar indicator ${source[0]}`;break}case"@":case"`":{badChar=`reserved character ${source[0]}`;break}}if(badChar)onError(0,"BAD_SCALAR_START",`Plain value cannot start with ${badChar}`);return foldLines(source)}function singleQuotedValue(source,onError){if(source[source.length-1]!=="'"||source.length===1)onError(source.length,"MISSING_CHAR","Missing closing 'quote");return foldLines(source.slice(1,-1)).replace(/''/g,"'")}function foldLines(source){let first,line;try{first=new RegExp(`(.*?)(?<![ ])[ ]*\r?
3444
3444
  `,"sy"),line=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
3445
3445
  `,"sy")}catch{first=/(.*?)[ \t]*\r?\n/sy,line=/[ \t]*(.*?)[ \t]*\r?\n/sy}let match2=first.exec(source);if(!match2)return source;let res=match2[1],sep2=" ",pos=first.lastIndex;line.lastIndex=pos;while(match2=line.exec(source)){if(match2[1]==="")if(sep2===`
3446
3446
  `)res+=sep2;else sep2=`
@@ -3455,7 +3455,7 @@ ${pointer}
3455
3455
  `)break;if(ch===`
3456
3456
  `)fold+=`
3457
3457
  `;offset+=1,ch=source[offset+1]}if(!fold)fold=" ";return{fold,offset}}var escapeCodes={"0":"\x00",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
3458
- `,r:"\r",t:"\t",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function parseCharCode(source,offset,length,onError){let cc=source.substr(offset,length),code=cc.length===length&&/^[0-9a-fA-F]+$/.test(cc)?parseInt(cc,16):NaN;try{return String.fromCodePoint(code)}catch{let raw=source.substr(offset-2,length+2);return onError(offset-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${raw}`),raw}}exports.resolveFlowScalar=resolveFlowScalar});var require_compose_scalar=__commonJS((exports)=>{var identity=require_identity(),Scalar=require_Scalar(),resolveBlockScalar=require_resolve_block_scalar(),resolveFlowScalar=require_resolve_flow_scalar();function composeScalar(ctx,token,tagToken,onError){let{value,type,comment,range}=token.type==="block-scalar"?resolveBlockScalar.resolveBlockScalar(ctx,token,onError):resolveFlowScalar.resolveFlowScalar(token,ctx.options.strict,onError),tagName=tagToken?ctx.directives.tagName(tagToken.source,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg)):null,tag;if(ctx.options.stringKeys&&ctx.atKey)tag=ctx.schema[identity.SCALAR];else if(tagName)tag=findScalarTagByName(ctx.schema,value,tagName,tagToken,onError);else if(token.type==="scalar")tag=findScalarTagByTest(ctx,value,token,onError);else tag=ctx.schema[identity.SCALAR];let scalar;try{let res=tag.resolve(value,(msg)=>onError(tagToken??token,"TAG_RESOLVE_FAILED",msg),ctx.options);scalar=identity.isScalar(res)?res:new Scalar.Scalar(res)}catch(error){let msg=error instanceof Error?error.message:String(error);onError(tagToken??token,"TAG_RESOLVE_FAILED",msg),scalar=new Scalar.Scalar(value)}if(scalar.range=range,scalar.source=value,type)scalar.type=type;if(tagName)scalar.tag=tagName;if(tag.format)scalar.format=tag.format;if(comment)scalar.comment=comment;return scalar}function findScalarTagByName(schema,value,tagName,tagToken,onError){if(tagName==="!")return schema[identity.SCALAR];let matchWithTest=[];for(let tag of schema.tags)if(!tag.collection&&tag.tag===tagName)if(tag.default&&tag.test)matchWithTest.push(tag);else return tag;for(let tag of matchWithTest)if(tag.test?.test(value))return tag;let kt=schema.knownTags[tagName];if(kt&&!kt.collection)return schema.tags.push(Object.assign({},kt,{default:!1,test:void 0})),kt;return onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,tagName!=="tag:yaml.org,2002:str"),schema[identity.SCALAR]}function findScalarTagByTest({atKey,directives,schema},value,token,onError){let tag=schema.tags.find((tag2)=>(tag2.default===!0||atKey&&tag2.default==="key")&&tag2.test?.test(value))||schema[identity.SCALAR];if(schema.compat){let compat=schema.compat.find((tag2)=>tag2.default&&tag2.test?.test(value))??schema[identity.SCALAR];if(tag.tag!==compat.tag){let ts=directives.tagString(tag.tag),cs=directives.tagString(compat.tag),msg=`Value may be parsed as either ${ts} or ${cs}`;onError(token,"TAG_RESOLVE_FAILED",msg,!0)}}return tag}exports.composeScalar=composeScalar});var require_util_empty_scalar_position=__commonJS((exports)=>{function emptyScalarPosition(offset,before,pos){if(before){pos??(pos=before.length);for(let i=pos-1;i>=0;--i){let st=before[i];switch(st.type){case"space":case"comment":case"newline":offset-=st.source.length;continue}st=before[++i];while(st?.type==="space")offset+=st.source.length,st=before[++i];break}}return offset}exports.emptyScalarPosition=emptyScalarPosition});var require_compose_node=__commonJS((exports)=>{var Alias=require_Alias(),identity=require_identity(),composeCollection=require_compose_collection(),composeScalar=require_compose_scalar(),resolveEnd=require_resolve_end(),utilEmptyScalarPosition=require_util_empty_scalar_position(),CN={composeNode,composeEmptyNode};function composeNode(ctx,token,props,onError){let atKey=ctx.atKey,{spaceBefore,comment,anchor,tag}=props,node,isSrcToken=!0;switch(token.type){case"alias":if(node=composeAlias(ctx,token,onError),anchor||tag)onError(token,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":if(node=composeScalar.composeScalar(ctx,token,tag,onError),anchor)node.anchor=anchor.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(node=composeCollection.composeCollection(CN,ctx,token,props,onError),anchor)node.anchor=anchor.source.substring(1)}catch(error){let message=error instanceof Error?error.message:String(error);onError(token,"RESOURCE_EXHAUSTION",message)}break;default:{let message=token.type==="error"?token.message:`Unsupported token (type: ${token.type})`;onError(token,"UNEXPECTED_TOKEN",message),isSrcToken=!1}}if(node??(node=composeEmptyNode(ctx,token.offset,void 0,null,props,onError)),anchor&&node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string");if(atKey&&ctx.options.stringKeys&&(!identity.isScalar(node)||typeof node.value!=="string"||node.tag&&node.tag!=="tag:yaml.org,2002:str"))onError(tag??token,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(spaceBefore)node.spaceBefore=!0;if(comment)if(token.type==="scalar"&&token.source==="")node.comment=comment;else node.commentBefore=comment;if(ctx.options.keepSourceTokens&&isSrcToken)node.srcToken=token;return node}function composeEmptyNode(ctx,offset,before,pos,{spaceBefore,comment,anchor,tag,end},onError){let token={type:"scalar",offset:utilEmptyScalarPosition.emptyScalarPosition(offset,before,pos),indent:-1,source:""},node=composeScalar.composeScalar(ctx,token,tag,onError);if(anchor){if(node.anchor=anchor.source.substring(1),node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string")}if(spaceBefore)node.spaceBefore=!0;if(comment)node.comment=comment,node.range[2]=end;return node}function composeAlias({options},{offset,source,end},onError){let alias=new Alias.Alias(source.substring(1));if(alias.source==="")onError(offset,"BAD_ALIAS","Alias cannot be an empty string");if(alias.source.endsWith(":"))onError(offset+source.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let valueEnd=offset+source.length,re2=resolveEnd.resolveEnd(end,valueEnd,options.strict,onError);if(alias.range=[offset,valueEnd,re2.offset],re2.comment)alias.comment=re2.comment;return alias}exports.composeEmptyNode=composeEmptyNode;exports.composeNode=composeNode});var require_compose_doc=__commonJS((exports)=>{var Document=require_Document(),composeNode=require_compose_node(),resolveEnd=require_resolve_end(),resolveProps=require_resolve_props();function composeDoc(options,directives,{offset,start,value,end},onError){let opts=Object.assign({_directives:directives},options),doc=new Document.Document(void 0,opts),ctx={atKey:!1,atRoot:!0,directives:doc.directives,options:doc.options,schema:doc.schema},props=resolveProps.resolveProps(start,{indicator:"doc-start",next:value??end?.[0],offset,onError,parentIndent:0,startOnNewline:!0});if(props.found){if(doc.directives.docStart=!0,value&&(value.type==="block-map"||value.type==="block-seq")&&!props.hasNewline)onError(props.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}doc.contents=value?composeNode.composeNode(ctx,value,props,onError):composeNode.composeEmptyNode(ctx,props.end,start,null,props,onError);let contentEnd=doc.contents.range[2],re2=resolveEnd.resolveEnd(end,contentEnd,!1,onError);if(re2.comment)doc.comment=re2.comment;return doc.range=[offset,contentEnd,re2.offset],doc}exports.composeDoc=composeDoc});var require_composer=__commonJS((exports)=>{var node_process=__require("process"),directives=require_directives(),Document=require_Document(),errors=require_errors(),identity=require_identity(),composeDoc=require_compose_doc(),resolveEnd=require_resolve_end();function getErrorPos(src){if(typeof src==="number")return[src,src+1];if(Array.isArray(src))return src.length===2?src:[src[0],src[1]];let{offset,source}=src;return[offset,offset+(typeof source==="string"?source.length:1)]}function parsePrelude(prelude){let comment="",atComment=!1,afterEmptyLine=!1;for(let i=0;i<prelude.length;++i){let source=prelude[i];switch(source[0]){case"#":comment+=(comment===""?"":afterEmptyLine?`
3458
+ `,r:"\r",t:"\t",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\","\t":"\t"};function parseCharCode(source,offset,length,onError){let cc=source.substr(offset,length),code=cc.length===length&&/^[0-9a-fA-F]+$/.test(cc)?parseInt(cc,16):NaN;try{return String.fromCodePoint(code)}catch{let raw=source.substr(offset-2,length+2);return onError(offset-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${raw}`),raw}}exports.resolveFlowScalar=resolveFlowScalar});var require_compose_scalar=__commonJS((exports)=>{var identity=require_identity(),Scalar=require_Scalar(),resolveBlockScalar=require_resolve_block_scalar(),resolveFlowScalar=require_resolve_flow_scalar();function composeScalar(ctx,token,tagToken,onError){let{value,type,comment,range}=token.type==="block-scalar"?resolveBlockScalar.resolveBlockScalar(ctx,token,onError):resolveFlowScalar.resolveFlowScalar(token,ctx.options.strict,onError),tagName=tagToken?ctx.directives.tagName(tagToken.source,(msg)=>onError(tagToken,"TAG_RESOLVE_FAILED",msg)):null,tag;if(ctx.options.stringKeys&&ctx.atKey)tag=ctx.schema[identity.SCALAR];else if(tagName)tag=findScalarTagByName(ctx.schema,value,tagName,tagToken,onError);else if(token.type==="scalar")tag=findScalarTagByTest(ctx,value,token,onError);else tag=ctx.schema[identity.SCALAR];let scalar2;try{let res=tag.resolve(value,(msg)=>onError(tagToken??token,"TAG_RESOLVE_FAILED",msg),ctx.options);scalar2=identity.isScalar(res)?res:new Scalar.Scalar(res)}catch(error){let msg=error instanceof Error?error.message:String(error);onError(tagToken??token,"TAG_RESOLVE_FAILED",msg),scalar2=new Scalar.Scalar(value)}if(scalar2.range=range,scalar2.source=value,type)scalar2.type=type;if(tagName)scalar2.tag=tagName;if(tag.format)scalar2.format=tag.format;if(comment)scalar2.comment=comment;return scalar2}function findScalarTagByName(schema,value,tagName,tagToken,onError){if(tagName==="!")return schema[identity.SCALAR];let matchWithTest=[];for(let tag of schema.tags)if(!tag.collection&&tag.tag===tagName)if(tag.default&&tag.test)matchWithTest.push(tag);else return tag;for(let tag of matchWithTest)if(tag.test?.test(value))return tag;let kt=schema.knownTags[tagName];if(kt&&!kt.collection)return schema.tags.push(Object.assign({},kt,{default:!1,test:void 0})),kt;return onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,tagName!=="tag:yaml.org,2002:str"),schema[identity.SCALAR]}function findScalarTagByTest({atKey,directives,schema},value,token,onError){let tag=schema.tags.find((tag2)=>(tag2.default===!0||atKey&&tag2.default==="key")&&tag2.test?.test(value))||schema[identity.SCALAR];if(schema.compat){let compat=schema.compat.find((tag2)=>tag2.default&&tag2.test?.test(value))??schema[identity.SCALAR];if(tag.tag!==compat.tag){let ts=directives.tagString(tag.tag),cs=directives.tagString(compat.tag),msg=`Value may be parsed as either ${ts} or ${cs}`;onError(token,"TAG_RESOLVE_FAILED",msg,!0)}}return tag}exports.composeScalar=composeScalar});var require_util_empty_scalar_position=__commonJS((exports)=>{function emptyScalarPosition(offset,before,pos){if(before){pos??(pos=before.length);for(let i=pos-1;i>=0;--i){let st=before[i];switch(st.type){case"space":case"comment":case"newline":offset-=st.source.length;continue}st=before[++i];while(st?.type==="space")offset+=st.source.length,st=before[++i];break}}return offset}exports.emptyScalarPosition=emptyScalarPosition});var require_compose_node=__commonJS((exports)=>{var Alias=require_Alias(),identity=require_identity(),composeCollection=require_compose_collection(),composeScalar=require_compose_scalar(),resolveEnd=require_resolve_end(),utilEmptyScalarPosition=require_util_empty_scalar_position(),CN={composeNode,composeEmptyNode};function composeNode(ctx,token,props,onError){let atKey=ctx.atKey,{spaceBefore,comment,anchor,tag}=props,node,isSrcToken=!0;switch(token.type){case"alias":if(node=composeAlias(ctx,token,onError),anchor||tag)onError(token,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":if(node=composeScalar.composeScalar(ctx,token,tag,onError),anchor)node.anchor=anchor.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":try{if(node=composeCollection.composeCollection(CN,ctx,token,props,onError),anchor)node.anchor=anchor.source.substring(1)}catch(error){let message=error instanceof Error?error.message:String(error);onError(token,"RESOURCE_EXHAUSTION",message)}break;default:{let message=token.type==="error"?token.message:`Unsupported token (type: ${token.type})`;onError(token,"UNEXPECTED_TOKEN",message),isSrcToken=!1}}if(node??(node=composeEmptyNode(ctx,token.offset,void 0,null,props,onError)),anchor&&node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string");if(atKey&&ctx.options.stringKeys&&(!identity.isScalar(node)||typeof node.value!=="string"||node.tag&&node.tag!=="tag:yaml.org,2002:str"))onError(tag??token,"NON_STRING_KEY","With stringKeys, all keys must be strings");if(spaceBefore)node.spaceBefore=!0;if(comment)if(token.type==="scalar"&&token.source==="")node.comment=comment;else node.commentBefore=comment;if(ctx.options.keepSourceTokens&&isSrcToken)node.srcToken=token;return node}function composeEmptyNode(ctx,offset,before,pos,{spaceBefore,comment,anchor,tag,end},onError){let token={type:"scalar",offset:utilEmptyScalarPosition.emptyScalarPosition(offset,before,pos),indent:-1,source:""},node=composeScalar.composeScalar(ctx,token,tag,onError);if(anchor){if(node.anchor=anchor.source.substring(1),node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string")}if(spaceBefore)node.spaceBefore=!0;if(comment)node.comment=comment,node.range[2]=end;return node}function composeAlias({options},{offset,source,end},onError){let alias=new Alias.Alias(source.substring(1));if(alias.source==="")onError(offset,"BAD_ALIAS","Alias cannot be an empty string");if(alias.source.endsWith(":"))onError(offset+source.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let valueEnd=offset+source.length,re2=resolveEnd.resolveEnd(end,valueEnd,options.strict,onError);if(alias.range=[offset,valueEnd,re2.offset],re2.comment)alias.comment=re2.comment;return alias}exports.composeEmptyNode=composeEmptyNode;exports.composeNode=composeNode});var require_compose_doc=__commonJS((exports)=>{var Document=require_Document(),composeNode=require_compose_node(),resolveEnd=require_resolve_end(),resolveProps=require_resolve_props();function composeDoc(options,directives,{offset,start,value,end},onError){let opts=Object.assign({_directives:directives},options),doc=new Document.Document(void 0,opts),ctx={atKey:!1,atRoot:!0,directives:doc.directives,options:doc.options,schema:doc.schema},props=resolveProps.resolveProps(start,{indicator:"doc-start",next:value??end?.[0],offset,onError,parentIndent:0,startOnNewline:!0});if(props.found){if(doc.directives.docStart=!0,value&&(value.type==="block-map"||value.type==="block-seq")&&!props.hasNewline)onError(props.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}doc.contents=value?composeNode.composeNode(ctx,value,props,onError):composeNode.composeEmptyNode(ctx,props.end,start,null,props,onError);let contentEnd=doc.contents.range[2],re2=resolveEnd.resolveEnd(end,contentEnd,!1,onError);if(re2.comment)doc.comment=re2.comment;return doc.range=[offset,contentEnd,re2.offset],doc}exports.composeDoc=composeDoc});var require_composer=__commonJS((exports)=>{var node_process=__require("process"),directives=require_directives(),Document=require_Document(),errors=require_errors(),identity=require_identity(),composeDoc=require_compose_doc(),resolveEnd=require_resolve_end();function getErrorPos(src){if(typeof src==="number")return[src,src+1];if(Array.isArray(src))return src.length===2?src:[src[0],src[1]];let{offset,source}=src;return[offset,offset+(typeof source==="string"?source.length:1)]}function parsePrelude(prelude){let comment="",atComment=!1,afterEmptyLine=!1;for(let i=0;i<prelude.length;++i){let source=prelude[i];switch(source[0]){case"#":comment+=(comment===""?"":afterEmptyLine?`
3459
3459
 
3460
3460
  `:`
3461
3461
  `)+(source.substring(1)||" "),atComment=!0,afterEmptyLine=!1;break;case"%":if(prelude[i+1]?.[0]!=="#")i+=1;atComment=!1;break;default:if(!atComment)afterEmptyLine=!0;atComment=!1}}return{comment,afterEmptyLine}}class Composer{constructor(options={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(source,code,message,warning)=>{let pos=getErrorPos(source);if(warning)this.warnings.push(new errors.YAMLWarning(pos,code,message));else this.errors.push(new errors.YAMLParseError(pos,code,message))},this.directives=new directives.Directives({version:options.version||"1.2"}),this.options=options}decorate(doc,afterDoc){let{comment,afterEmptyLine}=parsePrelude(this.prelude);if(comment){let dc=doc.contents;if(afterDoc)doc.comment=doc.comment?`${doc.comment}
@@ -3491,7 +3491,7 @@ ${end.comment}`:end.comment}this.doc.range[2]=end.offset;break}default:this.erro
3491
3491
  `,next=this.buffer[i+1];else end=i;if(next==="#"||inFlow&&flowIndicatorChars.has(next))break;if(ch===`
3492
3492
  `){let cs=this.continueScalar(i+1);if(cs===-1)break;i=Math.max(i,cs-2)}}else{if(inFlow&&flowIndicatorChars.has(ch))break;end=i}if(!ch&&!this.atEnd)return this.setNext("plain-scalar");return yield cst.SCALAR,yield*this.pushToIndex(end+1,!0),inFlow?"flow":"doc"}*pushCount(n){if(n>0)return yield this.buffer.substr(this.pos,n),this.pos+=n,n;return 0}*pushToIndex(i,allowEmpty){let s=this.buffer.slice(this.pos,i);if(s)return yield s,this.pos+=s.length,s.length;else if(allowEmpty)yield"";return 0}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(isNotAnchorChar))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators());case"-":case"?":case":":{let inFlow=this.flowLevel>0,ch1=this.charAt(1);if(isEmpty(ch1)||inFlow&&flowIndicatorChars.has(ch1)){if(!inFlow)this.indentNext=this.indentValue+1;else if(this.flowKey)this.flowKey=!1;return(yield*this.pushCount(1))+(yield*this.pushSpaces(!0))+(yield*this.pushIndicators())}}}return 0}*pushTag(){if(this.charAt(1)==="<"){let i=this.pos+2,ch=this.buffer[i];while(!isEmpty(ch)&&ch!==">")ch=this.buffer[++i];return yield*this.pushToIndex(ch===">"?i+1:i,!1)}else{let i=this.pos+1,ch=this.buffer[i];while(ch)if(tagChars.has(ch))ch=this.buffer[++i];else if(ch==="%"&&hexDigits.has(this.buffer[i+1])&&hexDigits.has(this.buffer[i+2]))ch=this.buffer[i+=3];else break;return yield*this.pushToIndex(i,!1)}}*pushNewline(){let ch=this.buffer[this.pos];if(ch===`
3493
3493
  `)return yield*this.pushCount(1);else if(ch==="\r"&&this.charAt(1)===`
3494
- `)return yield*this.pushCount(2);else return 0}*pushSpaces(allowTabs){let i=this.pos-1,ch;do ch=this.buffer[++i];while(ch===" "||allowTabs&&ch==="\t");let n=i-this.pos;if(n>0)yield this.buffer.substr(this.pos,n),this.pos=i;return n}*pushUntil(test){let i=this.pos,ch=this.buffer[i];while(!test(ch))ch=this.buffer[++i];return yield*this.pushToIndex(i,!1)}}exports.Lexer=Lexer});var require_line_counter=__commonJS((exports)=>{class LineCounter{constructor(){this.lineStarts=[],this.addNewLine=(offset)=>this.lineStarts.push(offset),this.linePos=(offset)=>{let low=0,high=this.lineStarts.length;while(low<high){let mid2=low+high>>1;if(this.lineStarts[mid2]<offset)low=mid2+1;else high=mid2}if(this.lineStarts[low]===offset)return{line:low+1,col:1};if(low===0)return{line:0,col:offset};let start=this.lineStarts[low-1];return{line:low,col:offset-start+1}}}}exports.LineCounter=LineCounter});var require_parser=__commonJS((exports)=>{var node_process=__require("process"),cst=require_cst(),lexer=require_lexer();function includesToken(list2,type){for(let i=0;i<list2.length;++i)if(list2[i].type===type)return!0;return!1}function findNonEmptyIndex(list2){for(let i=0;i<list2.length;++i)switch(list2[i].type){case"space":case"comment":case"newline":break;default:return i}return-1}function isFlowToken(token){switch(token?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function getPrevProps(parent2){switch(parent2.type){case"document":return parent2.start;case"block-map":{let it=parent2.items[parent2.items.length-1];return it.sep??it.start}case"block-seq":return parent2.items[parent2.items.length-1].start;default:return[]}}function getFirstKeyStartProps(prev){if(prev.length===0)return[];let i=prev.length;loop:while(--i>=0)switch(prev[i].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break loop}while(prev[++i]?.type==="space");return prev.splice(i,prev.length)}function fixFlowSeqItems(fc){if(fc.start.type==="flow-seq-start"){for(let it of fc.items)if(it.sep&&!it.value&&!includesToken(it.start,"explicit-key-ind")&&!includesToken(it.sep,"map-value-ind")){if(it.key)it.value=it.key;if(delete it.key,isFlowToken(it.value))if(it.value.end)Array.prototype.push.apply(it.value.end,it.sep);else it.value.end=it.sep;else Array.prototype.push.apply(it.start,it.sep);delete it.sep}}}class Parser{constructor(onNewLine){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new lexer.Lexer,this.onNewLine=onNewLine}*parse(source,incomplete=!1){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(let lexeme of this.lexer.lex(source,incomplete))yield*this.next(lexeme);if(!incomplete)yield*this.end()}*next(source){if(this.source=source,node_process.env.LOG_TOKENS)console.log("|",cst.prettyToken(source));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=source.length;return}let type=cst.tokenType(source);if(!type){let message=`Not a YAML token: ${source}`;yield*this.pop({type:"error",offset:this.offset,message,source}),this.offset+=source.length}else if(type==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=type,yield*this.step(),type){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+source.length);break;case"space":if(this.atNewLine&&source[0]===" ")this.indent+=source.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=source.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=source.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let top=this.peek(1);if(this.type==="doc-end"&&top?.type!=="doc-end"){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!top)return yield*this.stream();switch(top.type){case"document":return yield*this.document(top);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(top);case"block-scalar":return yield*this.blockScalar(top);case"block-map":return yield*this.blockMap(top);case"block-seq":return yield*this.blockSequence(top);case"flow-collection":return yield*this.flowCollection(top);case"doc-end":return yield*this.documentEnd(top)}yield*this.pop()}peek(n){return this.stack[this.stack.length-n]}*pop(error){let token=error??this.stack.pop();if(!token)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield token;else{let top=this.peek(1);if(token.type==="block-scalar")token.indent="indent"in top?top.indent:0;else if(token.type==="flow-collection"&&top.type==="document")token.indent=0;if(token.type==="flow-collection")fixFlowSeqItems(token);switch(top.type){case"document":top.value=token;break;case"block-scalar":top.props.push(token);break;case"block-map":{let it=top.items[top.items.length-1];if(it.value){top.items.push({start:[],key:token,sep:[]}),this.onKeyLine=!0;return}else if(it.sep)it.value=token;else{Object.assign(it,{key:token,sep:[]}),this.onKeyLine=!it.explicitKey;return}break}case"block-seq":{let it=top.items[top.items.length-1];if(it.value)top.items.push({start:[],value:token});else it.value=token;break}case"flow-collection":{let it=top.items[top.items.length-1];if(!it||it.value)top.items.push({start:[],key:token,sep:[]});else if(it.sep)it.value=token;else Object.assign(it,{key:token,sep:[]});return}default:yield*this.pop(),yield*this.pop(token)}if((top.type==="document"||top.type==="block-map"||top.type==="block-seq")&&(token.type==="block-map"||token.type==="block-seq")){let last=token.items[token.items.length-1];if(last&&!last.sep&&!last.value&&last.start.length>0&&findNonEmptyIndex(last.start)===-1&&(token.indent===0||last.start.every((st)=>st.type!=="comment"||st.indent<token.indent))){if(top.type==="document")top.end=last.start;else top.items.push({start:last.start});token.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let doc={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")doc.start.push(this.sourceToken);this.stack.push(doc);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(doc){if(doc.value)return yield*this.lineEnd(doc);switch(this.type){case"doc-start":{if(findNonEmptyIndex(doc.start)!==-1)yield*this.pop(),yield*this.step();else doc.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":doc.start.push(this.sourceToken);return}let bv=this.startBlockValue(doc);if(bv)this.stack.push(bv);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(scalar){if(this.type==="map-value-ind"){let prev=getPrevProps(this.peek(2)),start=getFirstKeyStartProps(prev),sep2;if(scalar.end)sep2=scalar.end,sep2.push(this.sourceToken),delete scalar.end;else sep2=[this.sourceToken];let map={type:"block-map",offset:scalar.offset,indent:scalar.indent,items:[{start,key:scalar,sep:sep2}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=map}else yield*this.lineEnd(scalar)}*blockScalar(scalar){switch(this.type){case"space":case"comment":case"newline":scalar.props.push(this.sourceToken);return;case"scalar":if(scalar.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let nl=this.source.indexOf(`
3494
+ `)return yield*this.pushCount(2);else return 0}*pushSpaces(allowTabs){let i=this.pos-1,ch;do ch=this.buffer[++i];while(ch===" "||allowTabs&&ch==="\t");let n=i-this.pos;if(n>0)yield this.buffer.substr(this.pos,n),this.pos=i;return n}*pushUntil(test){let i=this.pos,ch=this.buffer[i];while(!test(ch))ch=this.buffer[++i];return yield*this.pushToIndex(i,!1)}}exports.Lexer=Lexer});var require_line_counter=__commonJS((exports)=>{class LineCounter{constructor(){this.lineStarts=[],this.addNewLine=(offset)=>this.lineStarts.push(offset),this.linePos=(offset)=>{let low=0,high=this.lineStarts.length;while(low<high){let mid2=low+high>>1;if(this.lineStarts[mid2]<offset)low=mid2+1;else high=mid2}if(this.lineStarts[low]===offset)return{line:low+1,col:1};if(low===0)return{line:0,col:offset};let start=this.lineStarts[low-1];return{line:low,col:offset-start+1}}}}exports.LineCounter=LineCounter});var require_parser=__commonJS((exports)=>{var node_process=__require("process"),cst=require_cst(),lexer=require_lexer();function includesToken(list2,type){for(let i=0;i<list2.length;++i)if(list2[i].type===type)return!0;return!1}function findNonEmptyIndex(list2){for(let i=0;i<list2.length;++i)switch(list2[i].type){case"space":case"comment":case"newline":break;default:return i}return-1}function isFlowToken(token){switch(token?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function getPrevProps(parent2){switch(parent2.type){case"document":return parent2.start;case"block-map":{let it=parent2.items[parent2.items.length-1];return it.sep??it.start}case"block-seq":return parent2.items[parent2.items.length-1].start;default:return[]}}function getFirstKeyStartProps(prev){if(prev.length===0)return[];let i=prev.length;loop:while(--i>=0)switch(prev[i].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break loop}while(prev[++i]?.type==="space");return prev.splice(i,prev.length)}function fixFlowSeqItems(fc){if(fc.start.type==="flow-seq-start"){for(let it of fc.items)if(it.sep&&!it.value&&!includesToken(it.start,"explicit-key-ind")&&!includesToken(it.sep,"map-value-ind")){if(it.key)it.value=it.key;if(delete it.key,isFlowToken(it.value))if(it.value.end)Array.prototype.push.apply(it.value.end,it.sep);else it.value.end=it.sep;else Array.prototype.push.apply(it.start,it.sep);delete it.sep}}}class Parser{constructor(onNewLine){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new lexer.Lexer,this.onNewLine=onNewLine}*parse(source,incomplete=!1){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(let lexeme of this.lexer.lex(source,incomplete))yield*this.next(lexeme);if(!incomplete)yield*this.end()}*next(source){if(this.source=source,node_process.env.LOG_TOKENS)console.log("|",cst.prettyToken(source));if(this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=source.length;return}let type=cst.tokenType(source);if(!type){let message=`Not a YAML token: ${source}`;yield*this.pop({type:"error",offset:this.offset,message,source}),this.offset+=source.length}else if(type==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=type,yield*this.step(),type){case"newline":if(this.atNewLine=!0,this.indent=0,this.onNewLine)this.onNewLine(this.offset+source.length);break;case"space":if(this.atNewLine&&source[0]===" ")this.indent+=source.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=source.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=source.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let top=this.peek(1);if(this.type==="doc-end"&&top?.type!=="doc-end"){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!top)return yield*this.stream();switch(top.type){case"document":return yield*this.document(top);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(top);case"block-scalar":return yield*this.blockScalar(top);case"block-map":return yield*this.blockMap(top);case"block-seq":return yield*this.blockSequence(top);case"flow-collection":return yield*this.flowCollection(top);case"doc-end":return yield*this.documentEnd(top)}yield*this.pop()}peek(n){return this.stack[this.stack.length-n]}*pop(error){let token=error??this.stack.pop();if(!token)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield token;else{let top=this.peek(1);if(token.type==="block-scalar")token.indent="indent"in top?top.indent:0;else if(token.type==="flow-collection"&&top.type==="document")token.indent=0;if(token.type==="flow-collection")fixFlowSeqItems(token);switch(top.type){case"document":top.value=token;break;case"block-scalar":top.props.push(token);break;case"block-map":{let it=top.items[top.items.length-1];if(it.value){top.items.push({start:[],key:token,sep:[]}),this.onKeyLine=!0;return}else if(it.sep)it.value=token;else{Object.assign(it,{key:token,sep:[]}),this.onKeyLine=!it.explicitKey;return}break}case"block-seq":{let it=top.items[top.items.length-1];if(it.value)top.items.push({start:[],value:token});else it.value=token;break}case"flow-collection":{let it=top.items[top.items.length-1];if(!it||it.value)top.items.push({start:[],key:token,sep:[]});else if(it.sep)it.value=token;else Object.assign(it,{key:token,sep:[]});return}default:yield*this.pop(),yield*this.pop(token)}if((top.type==="document"||top.type==="block-map"||top.type==="block-seq")&&(token.type==="block-map"||token.type==="block-seq")){let last=token.items[token.items.length-1];if(last&&!last.sep&&!last.value&&last.start.length>0&&findNonEmptyIndex(last.start)===-1&&(token.indent===0||last.start.every((st)=>st.type!=="comment"||st.indent<token.indent))){if(top.type==="document")top.end=last.start;else top.items.push({start:last.start});token.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let doc={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")doc.start.push(this.sourceToken);this.stack.push(doc);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(doc){if(doc.value)return yield*this.lineEnd(doc);switch(this.type){case"doc-start":{if(findNonEmptyIndex(doc.start)!==-1)yield*this.pop(),yield*this.step();else doc.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":doc.start.push(this.sourceToken);return}let bv=this.startBlockValue(doc);if(bv)this.stack.push(bv);else yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(scalar2){if(this.type==="map-value-ind"){let prev=getPrevProps(this.peek(2)),start=getFirstKeyStartProps(prev),sep2;if(scalar2.end)sep2=scalar2.end,sep2.push(this.sourceToken),delete scalar2.end;else sep2=[this.sourceToken];let map={type:"block-map",offset:scalar2.offset,indent:scalar2.indent,items:[{start,key:scalar2,sep:sep2}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=map}else yield*this.lineEnd(scalar2)}*blockScalar(scalar2){switch(this.type){case"space":case"comment":case"newline":scalar2.props.push(this.sourceToken);return;case"scalar":if(scalar2.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let nl=this.source.indexOf(`
3495
3495
  `)+1;while(nl!==0)this.onNewLine(this.offset+nl),nl=this.source.indexOf(`
3496
3496
  `,nl)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(map){let it=map.items[map.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,it.value){let end="end"in it.value?it.value.end:void 0;if((Array.isArray(end)?end[end.length-1]:void 0)?.type==="comment")end?.push(this.sourceToken);else map.items.push({start:[this.sourceToken]})}else if(it.sep)it.sep.push(this.sourceToken);else it.start.push(this.sourceToken);return;case"space":case"comment":if(it.value)map.items.push({start:[this.sourceToken]});else if(it.sep)it.sep.push(this.sourceToken);else{if(this.atIndentedComment(it.start,map.indent)){let end=map.items[map.items.length-2]?.value?.end;if(Array.isArray(end)){Array.prototype.push.apply(end,it.start),end.push(this.sourceToken),map.items.pop();return}}it.start.push(this.sourceToken)}return}if(this.indent>=map.indent){let atMapIndent=!this.onKeyLine&&this.indent===map.indent,atNextItem=atMapIndent&&(it.sep||it.explicitKey)&&this.type!=="seq-item-ind",start=[];if(atNextItem&&it.sep&&!it.value){let nl=[];for(let i=0;i<it.sep.length;++i){let st=it.sep[i];switch(st.type){case"newline":nl.push(i);break;case"space":break;case"comment":if(st.indent>map.indent)nl.length=0;break;default:nl.length=0}}if(nl.length>=2)start=it.sep.splice(nl[1])}switch(this.type){case"anchor":case"tag":if(atNextItem||it.value)start.push(this.sourceToken),map.items.push({start}),this.onKeyLine=!0;else if(it.sep)it.sep.push(this.sourceToken);else it.start.push(this.sourceToken);return;case"explicit-key-ind":if(!it.sep&&!it.explicitKey)it.start.push(this.sourceToken),it.explicitKey=!0;else if(atNextItem||it.value)start.push(this.sourceToken),map.items.push({start,explicitKey:!0});else this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]});this.onKeyLine=!0;return;case"map-value-ind":if(it.explicitKey)if(!it.sep)if(includesToken(it.start,"newline"))Object.assign(it,{key:null,sep:[this.sourceToken]});else{let start2=getFirstKeyStartProps(it.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:start2,key:null,sep:[this.sourceToken]}]})}else if(it.value)map.items.push({start:[],key:null,sep:[this.sourceToken]});else if(includesToken(it.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start,key:null,sep:[this.sourceToken]}]});else if(isFlowToken(it.key)&&!includesToken(it.sep,"newline")){let start2=getFirstKeyStartProps(it.start),key3=it.key,sep2=it.sep;sep2.push(this.sourceToken),delete it.key,delete it.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:start2,key:key3,sep:sep2}]})}else if(start.length>0)it.sep=it.sep.concat(start,this.sourceToken);else it.sep.push(this.sourceToken);else if(!it.sep)Object.assign(it,{key:null,sep:[this.sourceToken]});else if(it.value||atNextItem)map.items.push({start,key:null,sep:[this.sourceToken]});else if(includesToken(it.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]});else it.sep.push(this.sourceToken);this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let fs7=this.flowScalar(this.type);if(atNextItem||it.value)map.items.push({start,key:fs7,sep:[]}),this.onKeyLine=!0;else if(it.sep)this.stack.push(fs7);else Object.assign(it,{key:fs7,sep:[]}),this.onKeyLine=!0;return}default:{let bv=this.startBlockValue(map);if(bv){if(bv.type==="block-seq"){if(!it.explicitKey&&it.sep&&!includesToken(it.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else if(atMapIndent)map.items.push({start});this.stack.push(bv);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(seq){let it=seq.items[seq.items.length-1];switch(this.type){case"newline":if(it.value){let end="end"in it.value?it.value.end:void 0;if((Array.isArray(end)?end[end.length-1]:void 0)?.type==="comment")end?.push(this.sourceToken);else seq.items.push({start:[this.sourceToken]})}else it.start.push(this.sourceToken);return;case"space":case"comment":if(it.value)seq.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(it.start,seq.indent)){let end=seq.items[seq.items.length-2]?.value?.end;if(Array.isArray(end)){Array.prototype.push.apply(end,it.start),end.push(this.sourceToken),seq.items.pop();return}}it.start.push(this.sourceToken)}return;case"anchor":case"tag":if(it.value||this.indent<=seq.indent)break;it.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==seq.indent)break;if(it.value||includesToken(it.start,"seq-item-ind"))seq.items.push({start:[this.sourceToken]});else it.start.push(this.sourceToken);return}if(this.indent>seq.indent){let bv=this.startBlockValue(seq);if(bv){this.stack.push(bv);return}}yield*this.pop(),yield*this.step()}*flowCollection(fc){let it=fc.items[fc.items.length-1];if(this.type==="flow-error-end"){let top;do yield*this.pop(),top=this.peek(1);while(top?.type==="flow-collection")}else if(fc.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!it||it.sep)fc.items.push({start:[this.sourceToken]});else it.start.push(this.sourceToken);return;case"map-value-ind":if(!it||it.value)fc.items.push({start:[],key:null,sep:[this.sourceToken]});else if(it.sep)it.sep.push(this.sourceToken);else Object.assign(it,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!it||it.value)fc.items.push({start:[this.sourceToken]});else if(it.sep)it.sep.push(this.sourceToken);else it.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let fs7=this.flowScalar(this.type);if(!it||it.value)fc.items.push({start:[],key:fs7,sep:[]});else if(it.sep)this.stack.push(fs7);else Object.assign(it,{key:fs7,sep:[]});return}case"flow-map-end":case"flow-seq-end":fc.end.push(this.sourceToken);return}let bv=this.startBlockValue(fc);if(bv)this.stack.push(bv);else yield*this.pop(),yield*this.step()}else{let parent2=this.peek(2);if(parent2.type==="block-map"&&(this.type==="map-value-ind"&&parent2.indent===fc.indent||this.type==="newline"&&!parent2.items[parent2.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&parent2.type!=="flow-collection"){let prev=getPrevProps(parent2),start=getFirstKeyStartProps(prev);fixFlowSeqItems(fc);let sep2=fc.end.splice(1,fc.end.length);sep2.push(this.sourceToken);let map={type:"block-map",offset:fc.offset,indent:fc.indent,items:[{start,key:fc,sep:sep2}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=map}else yield*this.lineEnd(fc)}}flowScalar(type){if(this.onNewLine){let nl=this.source.indexOf(`
3497
3497
  `)+1;while(nl!==0)this.onNewLine(this.offset+nl),nl=this.source.indexOf(`
@@ -3664,9 +3664,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error
3664
3664
  `));break;default:if("tokens"in token&&Array.isArray(token.tokens))this.renderInlineContent(token.tokens,chunks);else if("text"in token&&typeof token.text==="string")chunks.push(this.createDefaultChunk(token.text));break}}renderInlineTokenWithStyle(token,chunks,styleGroup,link2){switch(token.type){case"text":chunks.push(this.createChunk(token.text,styleGroup,link2));break;case"escape":chunks.push(this.createChunk(token.text,styleGroup,link2));break;case"codespan":if(this._conceal)chunks.push(this.createChunk(token.text,"markup.raw",link2));else chunks.push(this.createChunk("`","markup.raw",link2)),chunks.push(this.createChunk(token.text,"markup.raw",link2)),chunks.push(this.createChunk("`","markup.raw",link2));break;default:this.renderInlineToken(token,chunks);break}}applyMargins(renderable,marginTop,marginBottom){renderable.marginTop=marginTop,renderable.marginBottom=marginBottom}createMarkdownCodeRenderable(content,id,marginBottom=0){return new CodeRenderable(this.ctx,{id,content,filetype:"markdown",syntaxStyle:this._syntaxStyle,fg:this._fg,bg:this._bg,conceal:this._conceal,drawUnstyledText:!1,streaming:!0,onChunks:this._linkifyMarkdownChunks,treeSitterClient:this._treeSitterClient,width:"100%",marginBottom})}createCodeRenderable(token,id,marginBottom=0){return new CodeRenderable(this.ctx,{id,content:token.text,filetype:infoStringToFiletype(token.lang??""),syntaxStyle:this._syntaxStyle,fg:this._fg,bg:this._bg,conceal:this._concealCode,drawUnstyledText:!(this._streaming&&this._concealCode),streaming:this._streaming,treeSitterClient:this._treeSitterClient,width:"100%",marginBottom})}applyMarkdownCodeRenderable(renderable,content,marginBottom){renderable.content=content,renderable.filetype="markdown",renderable.syntaxStyle=this._syntaxStyle,renderable.fg=this._fg,renderable.bg=this._bg,renderable.conceal=this._conceal,renderable.drawUnstyledText=!1,renderable.streaming=!0,renderable.marginBottom=marginBottom}applyCodeBlockRenderable(renderable,token,marginBottom){renderable.content=token.text,renderable.filetype=infoStringToFiletype(token.lang??""),renderable.syntaxStyle=this._syntaxStyle,renderable.fg=this._fg,renderable.bg=this._bg,renderable.conceal=this._concealCode,renderable.drawUnstyledText=!(this._streaming&&this._concealCode),renderable.streaming=this._streaming,renderable.marginBottom=marginBottom}shouldRenderSeparately(token){return token.type==="code"||token.type==="table"||token.type==="blockquote"}getInterBlockMargin(token,hasNextToken){if(!hasNextToken)return 0;return this.shouldRenderSeparately(token)?1:0}createMarkdownBlockToken(raw){return{type:"paragraph",raw,text:raw,tokens:[]}}normalizeMarkdownBlockRaw(raw){return raw.replace(TRAILING_MARKDOWN_BLOCK_BREAKS_RE,`
3665
3665
  `)}normalizeScrollbackMarkdownBlockRaw(raw){return raw.replace(TRAILING_MARKDOWN_BLOCK_NEWLINES_RE,"")}buildRenderableTokens(tokens){if(this._renderNode)return tokens.filter((token)=>token.type!=="space");let renderTokens=[],markdownRaw="",flushMarkdownRaw=()=>{if(markdownRaw.length===0)return;let normalizedRaw=this.normalizeMarkdownBlockRaw(markdownRaw);if(normalizedRaw.length>0)renderTokens.push(this.createMarkdownBlockToken(normalizedRaw));markdownRaw=""};for(let i=0;i<tokens.length;i+=1){let token=tokens[i];if(token.type==="space"){if(markdownRaw.length===0)continue;let nextIndex=i+1;while(nextIndex<tokens.length&&tokens[nextIndex].type==="space")nextIndex+=1;let nextToken=tokens[nextIndex];if(nextToken&&!this.shouldRenderSeparately(nextToken))markdownRaw+=token.raw;continue}if(this.shouldRenderSeparately(token)){flushMarkdownRaw(),renderTokens.push(token);continue}markdownRaw+=token.raw}return flushMarkdownRaw(),renderTokens}buildTopLevelRenderBlocks(tokens){let blocks=[],gapBefore="";for(let i=0;i<tokens.length;i+=1){let token=tokens[i];if(token.type==="space"){gapBefore+=token.raw;continue}let prev=blocks[blocks.length-1],marginTop=prev&&(this.shouldRenderSeparately(prev.token)||TRAILING_MARKDOWN_BLOCK_BREAKS_RE.test(prev.token.raw+gapBefore))?1:0;blocks.push({token,sourceTokenEnd:i+1,marginTop}),gapBefore=""}return blocks}getTableRowsToRender(table){return table.rows}hashString(value,seed){let hash=seed>>>0;for(let i=0;i<value.length;i+=1)hash^=value.charCodeAt(i),hash=Math.imul(hash,16777619);return hash>>>0}hashTableToken(token,seed,depth=0){let hash=this.hashString(token.type,seed);if("raw"in token&&typeof token.raw==="string")return this.hashString(token.raw,hash);if("text"in token&&typeof token.text==="string")hash=this.hashString(token.text,hash);if(depth<2&&"tokens"in token&&Array.isArray(token.tokens))for(let child of token.tokens)hash=this.hashTableToken(child,hash,depth+1);return hash>>>0}getTableCellKey(cell,isHeader){let seed=isHeader?2902232141:1371922141;if(!cell)return seed;if(typeof cell.text==="string")return this.hashString(cell.text,seed);if(Array.isArray(cell.tokens)&&cell.tokens.length>0){let hash=seed^cell.tokens.length;for(let token of cell.tokens)hash=this.hashTableToken(token,hash);return hash>>>0}return(seed^2654435769)>>>0}createTableDataCellChunks(cell){let chunks=[];if(cell)this.renderInlineContent(cell.tokens,chunks);return chunks.length>0?chunks:[this.createDefaultChunk(" ")]}createTableHeaderCellChunks(cell){let chunks=[];this.renderInlineContent(cell.tokens,chunks);let baseChunks=chunks.length>0?chunks:[this.createDefaultChunk(" ")],headingStyle=this.getStyle("markup.heading")||this.getStyle("default");if(!headingStyle)return baseChunks;let headingAttributes=createTextAttributes({bold:headingStyle.bold,italic:headingStyle.italic,underline:headingStyle.underline,dim:headingStyle.dim});return baseChunks.map((chunk)=>({...chunk,fg:headingStyle.fg??chunk.fg,bg:headingStyle.bg??chunk.bg,attributes:headingAttributes}))}buildTableContentCache(table,previous,forceRegenerate=!1){let colCount=table.header.length,rowsToRender=this.getTableRowsToRender(table);if(colCount===0||rowsToRender.length===0)return{cache:null,changed:previous!==void 0};let content=[],cellKeys=[],totalRows=rowsToRender.length+1,changed=forceRegenerate||!previous;for(let rowIndex=0;rowIndex<totalRows;rowIndex+=1){let rowContent=[],rowKeys=new Uint32Array(colCount);for(let colIndex=0;colIndex<colCount;colIndex+=1){let isHeader=rowIndex===0,cell=isHeader?table.header[colIndex]:rowsToRender[rowIndex-1]?.[colIndex],cellKey=this.getTableCellKey(cell,isHeader);rowKeys[colIndex]=cellKey;let previousCellKey=previous?.cellKeys[rowIndex]?.[colIndex],previousCellContent=previous?.content[rowIndex]?.[colIndex];if(!forceRegenerate&&previousCellKey===cellKey&&Array.isArray(previousCellContent)){rowContent.push(previousCellContent);continue}changed=!0,rowContent.push(isHeader?this.createTableHeaderCellChunks(table.header[colIndex]):this.createTableDataCellChunks(cell))}content.push(rowContent),cellKeys.push(rowKeys)}if(previous&&!changed){if(previous.content.length!==content.length)changed=!0;else for(let rowIndex=0;rowIndex<content.length;rowIndex+=1)if((previous.content[rowIndex]?.length??0)!==content[rowIndex].length){changed=!0;break}}return{cache:{content,cellKeys},changed}}resolveTableStyle(options=this._tableOptions){if(options?.style==="columns")return"columns";if(options?.style==="grid")return"grid";return this._internalBlockMode==="top-level"?"columns":"grid"}usesBorderlessColumnSpacing(options=this._tableOptions){let style=this.resolveTableStyle(options),borders=options?.borders??style==="grid";return style==="columns"&&!borders}resolveTableRenderableOptions(){let style=this.resolveTableStyle(),borders=this._tableOptions?.borders??style==="grid";return{columnWidthMode:this._tableOptions?.widthMode??(style==="columns"?"content":"full"),columnFitter:this._tableOptions?.columnFitter??"proportional",wrapMode:this._tableOptions?.wrapMode??"word",cellPadding:this._tableOptions?.cellPadding??0,columnGap:this.usesBorderlessColumnSpacing()?2:0,border:borders,outerBorder:this._tableOptions?.outerBorder??borders,showBorders:borders,borderStyle:this._tableOptions?.borderStyle??"single",borderColor:this._tableOptions?.borderColor??this.getStyle("conceal")?.fg??"#888888",selectable:this._tableOptions?.selectable??!0}}applyTableRenderableOptions(tableRenderable,options){tableRenderable.columnWidthMode=options.columnWidthMode,tableRenderable.columnFitter=options.columnFitter,tableRenderable.wrapMode=options.wrapMode,tableRenderable.cellPadding=options.cellPadding,tableRenderable.columnGap=options.columnGap,tableRenderable.border=options.border,tableRenderable.outerBorder=options.outerBorder,tableRenderable.showBorders=options.showBorders,tableRenderable.borderStyle=options.borderStyle,tableRenderable.borderColor=options.borderColor,tableRenderable.selectable=options.selectable}applyTableOptionsToBlocks(){let options=this.resolveTableRenderableOptions(),updated=!1;for(let state of this._blockStates)if(state.renderable instanceof TextTableRenderable)this.applyTableRenderableOptions(state.renderable,options),updated=!0;if(updated)this.requestRender()}createTextTableRenderable(content,id,marginBottom=0){let options=this.resolveTableRenderableOptions();return new TextTableRenderable(this.ctx,{id,content,width:"100%",marginBottom,columnWidthMode:options.columnWidthMode,columnFitter:options.columnFitter,wrapMode:options.wrapMode,cellPadding:options.cellPadding,columnGap:options.columnGap,border:options.border,outerBorder:options.outerBorder,showBorders:options.showBorders,borderStyle:options.borderStyle,borderColor:options.borderColor,selectable:options.selectable})}createTableBlock(table,id,marginBottom=0,previousCache,forceRegenerate=!1){let{cache}=this.buildTableContentCache(table,previousCache,forceRegenerate);if(!cache)return{renderable:this.createMarkdownCodeRenderable(table.raw,id,marginBottom)};return{renderable:this.createTextTableRenderable(cache.content,id,marginBottom),tableContentCache:cache}}getStableBlockCount(blocks,stableTokenCount){if(this._internalBlockMode!=="top-level")return 0;let stableBlockCount=0;for(let block of blocks){if(block.sourceTokenEnd<=stableTokenCount){stableBlockCount+=1;continue}break}return stableBlockCount}syncTopLevelBlockState(state,block,tableContentCache=state.tableContentCache){state.token=block.token,state.tokenRaw=block.token.raw,state.marginTop=block.marginTop,state.tableContentCache=tableContentCache}getTopLevelBlockRaw(token){if(!token.raw)return;return this.shouldRenderSeparately(token)?token.raw:this.normalizeScrollbackMarkdownBlockRaw(token.raw)}createTopLevelDefaultRenderable(block,index){let{token,marginTop}=block,id=`${this.id}-block-${index}`;if(token.type==="code"){let renderable2=this.createCodeRenderable(token,id);return renderable2.marginTop=marginTop,{renderable:renderable2}}if(token.type==="table"){let next=this.createTableBlock(token,id);return next.renderable.marginTop=marginTop,next}let markdownRaw=this.getTopLevelBlockRaw(token);if(!markdownRaw)return{renderable:void 0};let renderable=this.createMarkdownCodeRenderable(markdownRaw,id);return renderable.marginTop=marginTop,{renderable}}createTopLevelRenderable(block,index){if(!this._renderNode)return this.createTopLevelDefaultRenderable(block,index);let next,context={syntaxStyle:this._syntaxStyle,conceal:this._conceal,concealCode:this._concealCode,treeSitterClient:this._treeSitterClient,defaultRender:()=>{return next=this.createTopLevelDefaultRenderable(block,index),next.renderable??null}},custom=this._renderNode(block.token,context);if(custom)return this.applyMargins(custom,block.marginTop,0),{renderable:custom};return next??this.createTopLevelDefaultRenderable(block,index)}createDefaultRenderable(token,index,hasNextToken=!1){let id=`${this.id}-block-${index}`,marginBottom=this.getInterBlockMargin(token,hasNextToken);if(token.type==="code")return this.createCodeRenderable(token,id,marginBottom);if(token.type==="table")return this.createTableBlock(token,id,marginBottom).renderable;if(token.type==="space")return null;if(!token.raw)return null;return this.createMarkdownCodeRenderable(token.raw,id,marginBottom)}updateBlockRenderable(state,token,index,hasNextToken){let marginBottom=this.getInterBlockMargin(token,hasNextToken);if(token.type==="code"){this.applyCodeBlockRenderable(state.renderable,token,marginBottom);return}if(token.type==="table"){let tableToken=token,{cache,changed}=this.buildTableContentCache(tableToken,state.tableContentCache);if(!cache){if(state.renderable instanceof CodeRenderable){this.applyMarkdownCodeRenderable(state.renderable,tableToken.raw,marginBottom),state.tableContentCache=void 0;return}state.renderable.destroyRecursively();let fallbackRenderable=this.createMarkdownCodeRenderable(tableToken.raw,`${this.id}-block-${index}`,marginBottom);this.add(fallbackRenderable),state.renderable=fallbackRenderable,state.tableContentCache=void 0;return}if(state.renderable instanceof TextTableRenderable){if(changed)state.renderable.content=cache.content;this.applyTableRenderableOptions(state.renderable,this.resolveTableRenderableOptions()),state.renderable.marginBottom=marginBottom,state.tableContentCache=cache;return}state.renderable.destroyRecursively();let tableRenderable=this.createTextTableRenderable(cache.content,`${this.id}-block-${index}`,marginBottom);this.add(tableRenderable),state.renderable=tableRenderable,state.tableContentCache=cache;return}if(state.renderable instanceof CodeRenderable){this.applyMarkdownCodeRenderable(state.renderable,token.raw,marginBottom);return}state.renderable.destroyRecursively();let markdownRenderable=this.createMarkdownCodeRenderable(token.raw,`${this.id}-block-${index}`,marginBottom);this.add(markdownRenderable),state.renderable=markdownRenderable}updateTopLevelBlocks(tokens,forceTableRefresh){let blocks=this.buildTopLevelRenderBlocks(tokens);this._stableBlockCount=this.getStableBlockCount(blocks,this._parseState?.stableTokenCount??0);let blockIndex=0;for(let i=0;i<blocks.length;i+=1){let block=blocks[i],existing=this._blockStates[blockIndex];if(existing&&existing.token===block.token&&!forceTableRefresh){if(existing.marginTop!==block.marginTop)this.applyMargins(existing.renderable,block.marginTop,0);this.syncTopLevelBlockState(existing,block),blockIndex++;continue}if(existing&&existing.tokenRaw===block.token.raw&&existing.token.type===block.token.type&&!forceTableRefresh){if(existing.marginTop!==block.marginTop)this.applyMargins(existing.renderable,block.marginTop,0);this.syncTopLevelBlockState(existing,block),blockIndex++;continue}if(existing)existing.renderable.destroyRecursively();let next=this.createTopLevelRenderable(block,blockIndex);if(next.renderable)this.add(next.renderable),this._blockStates[blockIndex]={token:block.token,tokenRaw:block.token.raw,marginTop:block.marginTop,renderable:next.renderable,tableContentCache:next.tableContentCache};blockIndex++}while(this._blockStates.length>blockIndex)this._blockStates.pop().renderable.destroyRecursively()}updateBlocks(forceTableRefresh=!1){if(this.isDestroyed)return;if(!this._content){this.clearBlockStates(),this._parseState=null,this._stableBlockCount=0;return}let trailingUnstable=this._streaming?2:0;this._parseState=parseMarkdownIncremental(this._content,this._parseState,trailingUnstable);let tokens=this._parseState.tokens;if(tokens.length===0&&this._content.length>0){this.clearBlockStates(),this._stableBlockCount=0;let fallback=this.createMarkdownCodeRenderable(this._content,`${this.id}-fallback`);this.add(fallback),this._blockStates=[{token:{type:"text",raw:this._content,text:this._content},tokenRaw:this._content,marginTop:0,renderable:fallback}];return}if(this._internalBlockMode==="top-level"){this.updateTopLevelBlocks(tokens,forceTableRefresh);return}this._stableBlockCount=0;let blockTokens=this.buildRenderableTokens(tokens),lastBlockIndex=blockTokens.length-1,blockIndex=0;for(let i=0;i<blockTokens.length;i++){let token=blockTokens[i],hasNextToken=i<lastBlockIndex,existing=this._blockStates[blockIndex],shouldForceRefresh=forceTableRefresh;if(existing&&existing.token===token){if(shouldForceRefresh)this.updateBlockRenderable(existing,token,blockIndex,hasNextToken),existing.tokenRaw=token.raw;blockIndex++;continue}if(existing&&existing.tokenRaw===token.raw&&existing.token.type===token.type){if(existing.token=token,shouldForceRefresh)this.updateBlockRenderable(existing,token,blockIndex,hasNextToken),existing.tokenRaw=token.raw;blockIndex++;continue}if(existing&&existing.token.type===token.type){this.updateBlockRenderable(existing,token,blockIndex,hasNextToken),existing.token=token,existing.tokenRaw=token.raw,blockIndex++;continue}if(existing)existing.renderable.destroyRecursively();let renderable,tableContentCache;if(this._renderNode){let context={syntaxStyle:this._syntaxStyle,conceal:this._conceal,concealCode:this._concealCode,treeSitterClient:this._treeSitterClient,defaultRender:()=>this.createDefaultRenderable(token,blockIndex,hasNextToken)},custom=this._renderNode(token,context);if(custom)renderable=custom}if(!renderable)if(token.type==="table"){let tableBlock=this.createTableBlock(token,`${this.id}-block-${blockIndex}`,this.getInterBlockMargin(token,hasNextToken));renderable=tableBlock.renderable,tableContentCache=tableBlock.tableContentCache}else renderable=this.createDefaultRenderable(token,blockIndex,hasNextToken)??void 0;if(token.type==="table"&&!tableContentCache&&renderable instanceof TextTableRenderable){let{cache}=this.buildTableContentCache(token);tableContentCache=cache??void 0}if(renderable)this.add(renderable),this._blockStates[blockIndex]={token,tokenRaw:token.raw,renderable,tableContentCache};blockIndex++}while(this._blockStates.length>blockIndex)this._blockStates.pop().renderable.destroyRecursively()}clearBlockStates(){for(let state of this._blockStates)state.renderable.destroyRecursively();this._blockStates=[],this._stableBlockCount=0}rerenderBlocks(){if(this._internalBlockMode==="top-level"){this.updateBlocks(!0);return}for(let i=0;i<this._blockStates.length;i++){let state=this._blockStates[i],hasNextToken=i<this._blockStates.length-1,marginBottom=this.getInterBlockMargin(state.token,hasNextToken);if(state.token.type==="code"){this.applyCodeBlockRenderable(state.renderable,state.token,marginBottom);continue}if(state.token.type==="table"){let tableToken=state.token,{cache}=this.buildTableContentCache(tableToken,state.tableContentCache,!0);if(!cache){if(state.renderable instanceof CodeRenderable)this.applyMarkdownCodeRenderable(state.renderable,tableToken.raw,marginBottom);else{state.renderable.destroyRecursively();let fallbackRenderable=this.createMarkdownCodeRenderable(tableToken.raw,`${this.id}-block-${i}`,marginBottom);this.add(fallbackRenderable),state.renderable=fallbackRenderable}state.tableContentCache=void 0;continue}if(state.renderable instanceof TextTableRenderable){state.renderable.content=cache.content,this.applyTableRenderableOptions(state.renderable,this.resolveTableRenderableOptions()),state.renderable.marginBottom=marginBottom,state.tableContentCache=cache;continue}state.renderable.destroyRecursively();let tableRenderable=this.createTextTableRenderable(cache.content,`${this.id}-block-${i}`,marginBottom);this.add(tableRenderable),state.renderable=tableRenderable,state.tableContentCache=cache;continue}if(state.renderable instanceof CodeRenderable){this.applyMarkdownCodeRenderable(state.renderable,state.token.raw,marginBottom);continue}state.renderable.destroyRecursively();let markdownRenderable=this.createMarkdownCodeRenderable(state.token.raw,`${this.id}-block-${i}`,marginBottom);this.add(markdownRenderable),state.renderable=markdownRenderable}}clearCache(){this._parseState=null,this.clearBlockStates(),this.updateBlocks(),this.requestRender()}refreshStyles(){this._styleDirty=!1,this.rerenderBlocks(),this.requestRender()}renderSelf(buffer,deltaTime){if(this._styleDirty)this._styleDirty=!1,this.rerenderBlocks();super.renderSelf(buffer,deltaTime)}}var defaultThumbBackgroundColor=RGBA.fromHex("#9a9ea3"),defaultTrackBackgroundColor=RGBA.fromHex("#252527");class SliderRenderable extends Renderable{orientation;_value;_min;_max;_viewPortSize;_backgroundColor;_foregroundColor;_onChange;constructor(ctx,options){super(ctx,{flexShrink:0,...options});this.orientation=options.orientation,this._min=options.min??0,this._max=options.max??100,this._value=options.value??this._min,this._viewPortSize=options.viewPortSize??Math.max(1,(this._max-this._min)*0.1),this._onChange=options.onChange,this._backgroundColor=options.backgroundColor?parseColor(options.backgroundColor):defaultTrackBackgroundColor,this._foregroundColor=options.foregroundColor?parseColor(options.foregroundColor):defaultThumbBackgroundColor,this.setupMouseHandling()}get value(){return this._value}set value(newValue){let clamped=Math.max(this._min,Math.min(this._max,newValue));if(clamped!==this._value)this._value=clamped,this._onChange?.(clamped),this.emit("change",{value:clamped}),this.requestRender()}get min(){return this._min}set min(newMin){if(newMin!==this._min){if(this._min=newMin,this._value<newMin)this.value=newMin;this.requestRender()}}get max(){return this._max}set max(newMax){if(newMax!==this._max){if(this._max=newMax,this._value>newMax)this.value=newMax;this.requestRender()}}set viewPortSize(size){let clampedSize=Math.max(0.01,Math.min(size,this._max-this._min));if(clampedSize!==this._viewPortSize)this._viewPortSize=clampedSize,this.requestRender()}get viewPortSize(){return this._viewPortSize}get backgroundColor(){return this._backgroundColor}set backgroundColor(value){this._backgroundColor=parseColor(value),this.requestRender()}get foregroundColor(){return this._foregroundColor}set foregroundColor(value){this._foregroundColor=parseColor(value),this.requestRender()}calculateDragOffsetVirtual(event){let trackStart=this.orientation==="vertical"?this.y:this.x,mousePos=(this.orientation==="vertical"?event.y:event.x)-trackStart,virtualMousePos=Math.max(0,Math.min((this.orientation==="vertical"?this.height:this.width)*2,mousePos*2)),virtualThumbStart=this.getVirtualThumbStart(),virtualThumbSize=this.getVirtualThumbSize();return Math.max(0,Math.min(virtualThumbSize,virtualMousePos-virtualThumbStart))}setupMouseHandling(){let isDragging=!1,dragOffsetVirtual=0;this.onMouseDown=(event)=>{event.stopPropagation(),event.preventDefault();let thumb=this.getThumbRect();if(event.x>=thumb.x&&event.x<thumb.x+thumb.width&&event.y>=thumb.y&&event.y<thumb.y+thumb.height)isDragging=!0,dragOffsetVirtual=this.calculateDragOffsetVirtual(event);else this.updateValueFromMouseDirect(event),isDragging=!0,dragOffsetVirtual=this.calculateDragOffsetVirtual(event)},this.onMouseDrag=(event)=>{if(!isDragging)return;event.stopPropagation(),this.updateValueFromMouseWithOffset(event,dragOffsetVirtual)},this.onMouseUp=(event)=>{if(isDragging)this.updateValueFromMouseWithOffset(event,dragOffsetVirtual);isDragging=!1}}updateValueFromMouseDirect(event){let trackStart=this.orientation==="vertical"?this.y:this.x,trackSize=this.orientation==="vertical"?this.height:this.width,relativeMousePos=(this.orientation==="vertical"?event.y:event.x)-trackStart,clampedMousePos=Math.max(0,Math.min(trackSize,relativeMousePos)),ratio=trackSize===0?0:clampedMousePos/trackSize,range=this._max-this._min,newValue=this._min+ratio*range;this.value=newValue}updateValueFromMouseWithOffset(event,offsetVirtual){let trackStart=this.orientation==="vertical"?this.y:this.x,trackSize=this.orientation==="vertical"?this.height:this.width,mousePos=this.orientation==="vertical"?event.y:event.x,virtualTrackSize=trackSize*2,relativeMousePos=mousePos-trackStart,virtualMousePos=Math.max(0,Math.min(trackSize,relativeMousePos))*2,virtualThumbSize=this.getVirtualThumbSize(),maxThumbStart=Math.max(0,virtualTrackSize-virtualThumbSize),desiredThumbStart=virtualMousePos-offsetVirtual;desiredThumbStart=Math.max(0,Math.min(maxThumbStart,desiredThumbStart));let ratio=maxThumbStart===0?0:desiredThumbStart/maxThumbStart,range=this._max-this._min,newValue=this._min+ratio*range;this.value=newValue}getThumbRect(){let virtualThumbSize=this.getVirtualThumbSize(),virtualThumbStart=this.getVirtualThumbStart(),realThumbStart=Math.floor(virtualThumbStart/2),realThumbSize=Math.ceil((virtualThumbStart+virtualThumbSize)/2)-realThumbStart;if(this.orientation==="vertical")return{x:this.x,y:this.y+realThumbStart,width:this.width,height:Math.max(1,realThumbSize)};else return{x:this.x+realThumbStart,y:this.y,width:Math.max(1,realThumbSize),height:this.height}}renderSelf(buffer){if(this.orientation==="horizontal")this.renderHorizontal(buffer);else this.renderVertical(buffer)}renderHorizontal(buffer){let virtualThumbSize=this.getVirtualThumbSize(),virtualThumbStart=this.getVirtualThumbStart(),virtualThumbEnd=virtualThumbStart+virtualThumbSize;buffer.fillRect(this.x,this.y,this.width,this.height,this._backgroundColor);let realStartCell=Math.floor(virtualThumbStart/2),realEndCell=Math.ceil(virtualThumbEnd/2)-1,startX=Math.max(0,realStartCell),endX=Math.min(this.width-1,realEndCell);for(let realX=startX;realX<=endX;realX++){let virtualCellStart=realX*2,virtualCellEnd=virtualCellStart+2,thumbStartInCell=Math.max(virtualThumbStart,virtualCellStart),coverage=Math.min(virtualThumbEnd,virtualCellEnd)-thumbStartInCell,char=" ";if(coverage>=2)char="\u2588";else if(thumbStartInCell===virtualCellStart)char="\u258C";else char="\u2590";for(let y2=0;y2<this.height;y2++)buffer.setCellWithAlphaBlending(this.x+realX,this.y+y2,char,this._foregroundColor,this._backgroundColor)}}renderVertical(buffer){let virtualThumbSize=this.getVirtualThumbSize(),virtualThumbStart=this.getVirtualThumbStart(),virtualThumbEnd=virtualThumbStart+virtualThumbSize;buffer.fillRect(this.x,this.y,this.width,this.height,this._backgroundColor);let realStartCell=Math.floor(virtualThumbStart/2),realEndCell=Math.ceil(virtualThumbEnd/2)-1,startY=Math.max(0,realStartCell),endY=Math.min(this.height-1,realEndCell);for(let realY=startY;realY<=endY;realY++){let virtualCellStart=realY*2,virtualCellEnd=virtualCellStart+2,thumbStartInCell=Math.max(virtualThumbStart,virtualCellStart),coverage=Math.min(virtualThumbEnd,virtualCellEnd)-thumbStartInCell,char=" ";if(coverage>=2)char="\u2588";else if(coverage>0)if(thumbStartInCell-virtualCellStart===0)char="\u2580";else char="\u2584";for(let x2=0;x2<this.width;x2++)buffer.setCellWithAlphaBlending(this.x+x2,this.y+realY,char,this._foregroundColor,this._backgroundColor)}}getVirtualThumbSize(){let virtualTrackSize=this.orientation==="vertical"?this.height*2:this.width*2,range=this._max-this._min;if(range===0)return virtualTrackSize;let viewportSize=Math.max(1,this._viewPortSize),contentSize=range+viewportSize;if(contentSize<=viewportSize)return virtualTrackSize;let thumbRatio=viewportSize/contentSize,calculatedSize=Math.floor(virtualTrackSize*thumbRatio);return Math.max(1,Math.min(calculatedSize,virtualTrackSize))}getVirtualThumbStart(){let virtualTrackSize=this.orientation==="vertical"?this.height*2:this.width*2,range=this._max-this._min;if(range===0)return 0;let valueRatio=(this._value-this._min)/range,virtualThumbSize=this.getVirtualThumbSize();return Math.round(valueRatio*(virtualTrackSize-virtualThumbSize))}}class ScrollBarRenderable extends Renderable{slider;startArrow;endArrow;orientation;_focusable=!0;_scrollSize=0;_scrollPosition=0;_viewportSize=0;_showArrows=!1;_manualVisibility=!1;_onChange;scrollStep=null;get visible(){return super.visible}set visible(value){this._manualVisibility=!0,super.visible=value}resetVisibilityControl(){this._manualVisibility=!1,this.recalculateVisibility()}get scrollSize(){return this._scrollSize}get scrollPosition(){return this._scrollPosition}get viewportSize(){return this._viewportSize}set scrollSize(value){if(value===this.scrollSize)return;this._scrollSize=value,this.recalculateVisibility(),this.updateSliderFromScrollState(),this.scrollPosition=this.scrollPosition}set scrollPosition(value){let newPosition=Math.round(Math.min(Math.max(0,value),this.scrollSize-this.viewportSize));if(newPosition!==this._scrollPosition)this._scrollPosition=newPosition,this.updateSliderFromScrollState()}set viewportSize(value){if(value===this.viewportSize)return;this._viewportSize=value,this.slider.viewPortSize=Math.max(1,this._viewportSize),this.recalculateVisibility(),this.updateSliderFromScrollState(),this.scrollPosition=this.scrollPosition}get showArrows(){return this._showArrows}set showArrows(value){if(value===this._showArrows)return;this._showArrows=value,this.startArrow.visible=value,this.endArrow.visible=value}constructor(ctx,{trackOptions,arrowOptions,orientation,showArrows=!1,...options}){super(ctx,{flexDirection:orientation==="vertical"?"column":"row",alignSelf:"stretch",alignItems:"stretch",...options});this._onChange=options.onChange,this.orientation=orientation,this._showArrows=showArrows;let scrollRange=Math.max(0,this._scrollSize-this._viewportSize),defaultStepSize=Math.max(1,this._viewportSize),stepSize=trackOptions?.viewPortSize??defaultStepSize;this.slider=new SliderRenderable(ctx,{orientation,min:0,max:scrollRange,value:this._scrollPosition,viewPortSize:stepSize,onChange:(value)=>{this._scrollPosition=Math.round(value),this._onChange?.(this._scrollPosition),this.emit("change",{position:this._scrollPosition})},...orientation==="vertical"?{width:Math.max(1,Math.min(2,this.width)),height:"100%",marginLeft:"auto"}:{width:"100%",height:1,marginTop:"auto"},flexGrow:1,flexShrink:1,...trackOptions}),this.updateSliderFromScrollState();let arrowOpts=arrowOptions?{foregroundColor:arrowOptions.backgroundColor,backgroundColor:arrowOptions.backgroundColor,attributes:arrowOptions.attributes,...arrowOptions}:{};this.startArrow=new ArrowRenderable(ctx,{alignSelf:"center",visible:this.showArrows,direction:this.orientation==="vertical"?"up":"left",height:this.orientation==="vertical"?1:1,...arrowOpts}),this.endArrow=new ArrowRenderable(ctx,{alignSelf:"center",visible:this.showArrows,direction:this.orientation==="vertical"?"down":"right",height:this.orientation==="vertical"?1:1,...arrowOpts}),this.add(this.startArrow),this.add(this.slider),this.add(this.endArrow);let startArrowMouseTimeout=void 0,endArrowMouseTimeout=void 0;this.startArrow.onMouseDown=(event)=>{event.stopPropagation(),event.preventDefault(),this.scrollBy(-0.5,"viewport"),startArrowMouseTimeout=setTimeout(()=>{this.scrollBy(-0.5,"viewport"),startArrowMouseTimeout=setInterval(()=>{this.scrollBy(-0.2,"viewport")},200)},500)},this.startArrow.onMouseUp=(event)=>{event.stopPropagation(),clearInterval(startArrowMouseTimeout)},this.endArrow.onMouseDown=(event)=>{event.stopPropagation(),event.preventDefault(),this.scrollBy(0.5,"viewport"),endArrowMouseTimeout=setTimeout(()=>{this.scrollBy(0.5,"viewport"),endArrowMouseTimeout=setInterval(()=>{this.scrollBy(0.2,"viewport")},200)},500)},this.endArrow.onMouseUp=(event)=>{event.stopPropagation(),clearInterval(endArrowMouseTimeout)}}set arrowOptions(options){Object.assign(this.startArrow,options),Object.assign(this.endArrow,options),this.requestRender()}set trackOptions(options){Object.assign(this.slider,options),this.requestRender()}updateSliderFromScrollState(){let scrollRange=Math.max(0,this._scrollSize-this._viewportSize);this.slider.min=0,this.slider.max=scrollRange,this.slider.value=Math.min(this._scrollPosition,scrollRange)}scrollBy(delta,unit="absolute"){let resolvedDelta=(unit==="viewport"?this.viewportSize:unit==="content"?this.scrollSize:unit==="step"?this.scrollStep??1:1)*delta;this.scrollPosition+=resolvedDelta}recalculateVisibility(){if(!this._manualVisibility){let sizeRatio=this.scrollSize<=this.viewportSize?1:this.viewportSize/this.scrollSize;super.visible=sizeRatio<1}}handleKeyPress(key){switch(key.name){case"left":case"h":if(this.orientation!=="horizontal")return!1;return this.scrollBy(-0.2,"viewport"),!0;case"right":case"l":if(this.orientation!=="horizontal")return!1;return this.scrollBy(0.2,"viewport"),!0;case"up":case"k":if(this.orientation!=="vertical")return!1;return this.scrollBy(-0.2,"viewport"),!0;case"down":case"j":if(this.orientation!=="vertical")return!1;return this.scrollBy(0.2,"viewport"),!0;case"pageup":return this.scrollBy(-0.5,"viewport"),!0;case"pagedown":return this.scrollBy(0.5,"viewport"),!0;case"home":return this.scrollBy(-1,"content"),!0;case"end":return this.scrollBy(1,"content"),!0}return!1}}class ArrowRenderable extends Renderable{_direction;_foregroundColor;_backgroundColor;_attributes;_arrowChars;constructor(ctx,options){super(ctx,options);if(this._direction=options.direction,this._foregroundColor=options.foregroundColor?parseColor(options.foregroundColor):RGBA.fromValues(1,1,1,1),this._backgroundColor=options.backgroundColor?parseColor(options.backgroundColor):RGBA.fromValues(0,0,0,0),this._attributes=options.attributes??0,this._arrowChars={up:"\u25B2",down:"\u25BC",left:"\u25C0",right:"\u25B6",...options.arrowChars},!options.width)this.width=Bun.stringWidth(this.getArrowChar())}get direction(){return this._direction}set direction(value){if(this._direction!==value)this._direction=value,this.requestRender()}get foregroundColor(){return this._foregroundColor}set foregroundColor(value){if(this._foregroundColor!==value)this._foregroundColor=parseColor(value),this.requestRender()}get backgroundColor(){return this._backgroundColor}set backgroundColor(value){if(this._backgroundColor!==value)this._backgroundColor=parseColor(value),this.requestRender()}get attributes(){return this._attributes}set attributes(value){if(this._attributes!==value)this._attributes=value,this.requestRender()}set arrowChars(value){this._arrowChars={...this._arrowChars,...value},this.requestRender()}renderSelf(buffer){let char=this.getArrowChar();buffer.drawText(char,this.x,this.y,this._foregroundColor,this._backgroundColor,this._attributes)}getArrowChar(){switch(this._direction){case"up":return this._arrowChars.up;case"down":return this._arrowChars.down;case"left":return this._arrowChars.left;case"right":return this._arrowChars.right;default:return"?"}}}class ContentRenderable extends BoxRenderable{viewport;_viewportCulling;constructor(ctx,viewport,viewportCulling,options){super(ctx,options);this.viewport=viewport,this._viewportCulling=viewportCulling}get viewportCulling(){return this._viewportCulling}set viewportCulling(value){this._viewportCulling=value}_hasVisibleChildFilter(){return this._viewportCulling}_getVisibleChildren(){if(this._viewportCulling)return getObjectsInViewport({x:this.viewport.screenX,y:this.viewport.screenY,width:this.viewport.width,height:this.viewport.height},this.getChildrenSortedByPrimaryAxis(),this.primaryAxis,0).map((child)=>child.num);return super._getVisibleChildren()}}var SCROLLBOX_PADDING_KEYS=["padding","paddingX","paddingY","paddingTop","paddingRight","paddingBottom","paddingLeft"];function pickScrollBoxPadding(options){if(!options)return{};let picked={};for(let key of SCROLLBOX_PADDING_KEYS){let value=options[key];if(value!==void 0)picked[key]=value}return picked}function stripScrollBoxPadding(options){let sanitized={...options};for(let key of SCROLLBOX_PADDING_KEYS)delete sanitized[key];return sanitized}class ScrollBoxRenderable extends BoxRenderable{static idCounter=0;internalId=0;wrapper;viewport;content;horizontalScrollBar;verticalScrollBar;_focusable=!0;selectionListener;autoScrollMouseX=0;autoScrollMouseY=0;autoScrollThresholdVertical=3;autoScrollThresholdHorizontal=3;autoScrollSpeedSlow=6;autoScrollSpeedMedium=36;autoScrollSpeedFast=72;isAutoScrolling=!1;cachedAutoScrollSpeed=3;autoScrollAccumulatorX=0;autoScrollAccumulatorY=0;scrollAccumulatorX=0;scrollAccumulatorY=0;_stickyScroll;_stickyScrollTop=!1;_stickyScrollBottom=!1;_stickyScrollLeft=!1;_stickyScrollRight=!1;_stickyStart;_hasManualScroll=!1;_isApplyingStickyScroll=!1;scrollAccel;get stickyScroll(){return this._stickyScroll}set stickyScroll(value){this._stickyScroll=value,this.updateStickyState()}get stickyStart(){return this._stickyStart}set stickyStart(value){this._stickyStart=value,this.updateStickyState()}get scrollTop(){return this.verticalScrollBar.scrollPosition}set scrollTop(value){if(this.verticalScrollBar.scrollPosition=value,!this._isApplyingStickyScroll){let maxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height);if(!this.isAtStickyPosition()&&maxScrollTop>1)this._hasManualScroll=!0}this.updateStickyState()}get scrollLeft(){return this.horizontalScrollBar.scrollPosition}set scrollLeft(value){if(this.horizontalScrollBar.scrollPosition=value,!this._isApplyingStickyScroll){let maxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);if(!this.isAtStickyPosition()&&maxScrollLeft>1)this._hasManualScroll=!0}this.updateStickyState()}get scrollWidth(){return this.horizontalScrollBar.scrollSize}get scrollHeight(){return this.verticalScrollBar.scrollSize}updateStickyState(){if(!this._stickyScroll)return;let maxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height),maxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);if(this.scrollTop<=0){if(this._stickyScrollTop=!0,this._stickyScrollBottom=!1,!this._isApplyingStickyScroll&&(this._stickyStart==="top"||this._stickyStart==="bottom"&&maxScrollTop===0))this._hasManualScroll=!1}else if(this.scrollTop>=maxScrollTop){if(this._stickyScrollTop=!1,this._stickyScrollBottom=!0,!this._isApplyingStickyScroll&&this._stickyStart==="bottom")this._hasManualScroll=!1}else this._stickyScrollTop=!1,this._stickyScrollBottom=!1;if(this.scrollLeft<=0){if(this._stickyScrollLeft=!0,this._stickyScrollRight=!1,!this._isApplyingStickyScroll&&(this._stickyStart==="left"||this._stickyStart==="right"&&maxScrollLeft===0))this._hasManualScroll=!1}else if(this.scrollLeft>=maxScrollLeft){if(this._stickyScrollLeft=!1,this._stickyScrollRight=!0,!this._isApplyingStickyScroll&&this._stickyStart==="right")this._hasManualScroll=!1}else this._stickyScrollLeft=!1,this._stickyScrollRight=!1}applyStickyStart(stickyStart){let wasApplyingStickyScroll=this._isApplyingStickyScroll;this._isApplyingStickyScroll=!0;try{switch(stickyStart){case"top":this._stickyScrollTop=!0,this._stickyScrollBottom=!1,this.verticalScrollBar.scrollPosition=0;break;case"bottom":this._stickyScrollTop=!1,this._stickyScrollBottom=!0,this.verticalScrollBar.scrollPosition=Math.max(0,this.scrollHeight-this.viewport.height);break;case"left":this._stickyScrollLeft=!0,this._stickyScrollRight=!1,this.horizontalScrollBar.scrollPosition=0;break;case"right":this._stickyScrollLeft=!1,this._stickyScrollRight=!0,this.horizontalScrollBar.scrollPosition=Math.max(0,this.scrollWidth-this.viewport.width);break}}finally{this._isApplyingStickyScroll=wasApplyingStickyScroll}}constructor(ctx,options){let{wrapperOptions,viewportOptions,contentOptions,rootOptions,scrollbarOptions,verticalScrollbarOptions,horizontalScrollbarOptions,stickyScroll=!1,stickyStart,scrollX=!1,scrollY=!0,scrollAcceleration,viewportCulling=!0,...rootBoxOptions}=options,forwardedContentPadding={...pickScrollBoxPadding(rootBoxOptions),...pickScrollBoxPadding(rootOptions)},sanitizedRootBoxOptions=stripScrollBoxPadding(rootBoxOptions),sanitizedRootOptions=rootOptions?stripScrollBoxPadding(rootOptions):void 0,mergedContentOptions={...forwardedContentPadding,...contentOptions};super(ctx,{flexDirection:"row",alignItems:"stretch",...sanitizedRootBoxOptions,...sanitizedRootOptions});if(this.internalId=ScrollBoxRenderable.idCounter++,this._stickyScroll=stickyScroll,this._stickyStart=stickyStart,this.scrollAccel=scrollAcceleration??new LinearScrollAccel,this.wrapper=new BoxRenderable(ctx,{flexDirection:"column",flexGrow:1,...wrapperOptions,id:`scroll-box-wrapper-${this.internalId}`}),super.add(this.wrapper),this.viewport=new BoxRenderable(ctx,{flexDirection:"column",flexGrow:1,overflow:"hidden",onSizeChange:()=>{this.recalculateBarProps()},...viewportOptions,id:`scroll-box-viewport-${this.internalId}`}),this.wrapper.add(this.viewport),this.content=new ContentRenderable(ctx,this.viewport,viewportCulling,{alignSelf:"flex-start",flexShrink:0,...scrollX?{minWidth:"100%"}:{minWidth:"100%",maxWidth:"100%"},...scrollY?{minHeight:"100%"}:{minHeight:"100%",maxHeight:"100%"},onSizeChange:()=>{this.recalculateBarProps()},...mergedContentOptions,id:`scroll-box-content-${this.internalId}`}),this.viewport.add(this.content),this.verticalScrollBar=new ScrollBarRenderable(ctx,{...scrollbarOptions,...verticalScrollbarOptions,arrowOptions:{...scrollbarOptions?.arrowOptions,...verticalScrollbarOptions?.arrowOptions},id:`scroll-box-vertical-scrollbar-${this.internalId}`,orientation:"vertical",onChange:(position)=>{if(this.content.translateY=-position,!this._isApplyingStickyScroll){let maxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height);if(!this.isAtStickyPosition()&&maxScrollTop>1)this._hasManualScroll=!0}this.updateStickyState()}}),super.add(this.verticalScrollBar),this.horizontalScrollBar=new ScrollBarRenderable(ctx,{...scrollbarOptions,...horizontalScrollbarOptions,arrowOptions:{...scrollbarOptions?.arrowOptions,...horizontalScrollbarOptions?.arrowOptions},id:`scroll-box-horizontal-scrollbar-${this.internalId}`,orientation:"horizontal",onChange:(position)=>{if(this.content.translateX=-position,!this._isApplyingStickyScroll){let maxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);if(!this.isAtStickyPosition()&&maxScrollLeft>1)this._hasManualScroll=!0}this.updateStickyState()}}),this.wrapper.add(this.horizontalScrollBar),this.recalculateBarProps(),stickyStart&&stickyScroll)this.applyStickyStart(stickyStart);this.selectionListener=()=>{let selection=this._ctx.getSelection();if(!selection||!selection.isDragging)this.stopAutoScroll()},this._ctx.on("selection",this.selectionListener)}onUpdate(deltaTime){this.handleAutoScroll(deltaTime)}scrollBy(delta,unit="absolute"){if(typeof delta==="number")this.verticalScrollBar.scrollBy(delta,unit);else this.verticalScrollBar.scrollBy(delta.y,unit),this.horizontalScrollBar.scrollBy(delta.x,unit)}scrollChildIntoView(childId){let child=this.content.findDescendantById(childId);if(!child)return;let getNearestDelta=(elementStart,elementEnd,viewportStart,viewportEnd)=>{let elementSize=elementEnd-elementStart,viewportSize=viewportEnd-viewportStart,elementStartOutside=elementStart<viewportStart,elementEndOutside=elementEnd>viewportEnd;if(elementStartOutside&&elementEndOutside)return 0;if(elementStartOutside&&elementSize<viewportSize||elementEndOutside&&elementSize>viewportSize)return elementStart-viewportStart;if(elementStartOutside&&elementSize>viewportSize||elementEndOutside&&elementSize<viewportSize)return elementEnd-viewportEnd;return 0},childTop=child.y,childBottom=child.y+child.height,viewportTop=this.viewport.y,viewportBottom=this.viewport.y+this.viewport.height,dy=getNearestDelta(childTop,childBottom,viewportTop,viewportBottom),childLeft=child.x,childRight=child.x+child.width,viewportLeft=this.viewport.x,viewportRight=this.viewport.x+this.viewport.width,dx=getNearestDelta(childLeft,childRight,viewportLeft,viewportRight);if(dx!==0||dy!==0)this.scrollBy({x:dx,y:dy})}scrollTo(position){if(typeof position==="number")this.scrollTop=position;else this.scrollTop=position.y,this.scrollLeft=position.x}isAtStickyPosition(){if(!this._stickyScroll||!this._stickyStart)return!1;let maxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height),maxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);switch(this._stickyStart){case"top":return this.scrollTop===0;case"bottom":return this.scrollTop>=maxScrollTop;case"left":return this.scrollLeft===0;case"right":return this.scrollLeft>=maxScrollLeft;default:return!1}}add(obj,index){return this.content.add(obj,index)}insertBefore(obj,anchor){return this.content.insertBefore(obj,anchor)}remove(id){this.content.remove(id)}getChildren(){return this.content.getChildren()}onMouseEvent(event){if(event.type==="scroll"){let dir=event.scroll?.direction;if(event.modifiers.shift)dir=dir==="up"?"left":dir==="down"?"right":dir==="right"?"down":"up";let baseDelta=event.scroll?.delta??0,now=Date.now(),multiplier=this.scrollAccel.tick(now),scrollAmount=baseDelta*multiplier;if(dir==="up"){this.scrollAccumulatorY-=scrollAmount;let integerScroll=Math.trunc(this.scrollAccumulatorY);if(integerScroll!==0)this.scrollTop+=integerScroll,this.scrollAccumulatorY-=integerScroll}else if(dir==="down"){this.scrollAccumulatorY+=scrollAmount;let integerScroll=Math.trunc(this.scrollAccumulatorY);if(integerScroll!==0)this.scrollTop+=integerScroll,this.scrollAccumulatorY-=integerScroll}else if(dir==="left"){this.scrollAccumulatorX-=scrollAmount;let integerScroll=Math.trunc(this.scrollAccumulatorX);if(integerScroll!==0)this.scrollLeft+=integerScroll,this.scrollAccumulatorX-=integerScroll}else if(dir==="right"){this.scrollAccumulatorX+=scrollAmount;let integerScroll=Math.trunc(this.scrollAccumulatorX);if(integerScroll!==0)this.scrollLeft+=integerScroll,this.scrollAccumulatorX-=integerScroll}let maxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height),maxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);if(maxScrollTop>1||maxScrollLeft>1)this._hasManualScroll=!0}if(event.type==="drag"&&event.isDragging)this.updateAutoScroll(event.x,event.y);else if(event.type==="up")this.stopAutoScroll()}handleKeyPress(key){if(this.verticalScrollBar.handleKeyPress(key))return this._hasManualScroll=!0,this.scrollAccel.reset(),this.resetScrollAccumulators(),!0;if(this.horizontalScrollBar.handleKeyPress(key))return this._hasManualScroll=!0,this.scrollAccel.reset(),this.resetScrollAccumulators(),!0;return!1}resetScrollAccumulators(){this.scrollAccumulatorX=0,this.scrollAccumulatorY=0}startAutoScroll(mouseX,mouseY){if(this.stopAutoScroll(),this.autoScrollMouseX=mouseX,this.autoScrollMouseY=mouseY,this.cachedAutoScrollSpeed=this.getAutoScrollSpeed(mouseX,mouseY),this.isAutoScrolling=!0,!this.live)this.live=!0}updateAutoScroll(mouseX,mouseY){this.autoScrollMouseX=mouseX,this.autoScrollMouseY=mouseY,this.cachedAutoScrollSpeed=this.getAutoScrollSpeed(mouseX,mouseY);let scrollX=this.getAutoScrollDirectionX(mouseX),scrollY=this.getAutoScrollDirectionY(mouseY);if(scrollX===0&&scrollY===0)this.stopAutoScroll();else if(!this.isAutoScrolling)this.startAutoScroll(mouseX,mouseY)}stopAutoScroll(){let wasAutoScrolling=this.isAutoScrolling;if(this.isAutoScrolling=!1,this.autoScrollAccumulatorX=0,this.autoScrollAccumulatorY=0,wasAutoScrolling&&!this.hasOtherLiveReasons())this.live=!1}hasOtherLiveReasons(){return!1}handleAutoScroll(deltaTime){if(!this.isAutoScrolling)return;let scrollX=this.getAutoScrollDirectionX(this.autoScrollMouseX),scrollY=this.getAutoScrollDirectionY(this.autoScrollMouseY),scrollAmount=this.cachedAutoScrollSpeed*(deltaTime/1000),scrolled=!1;if(scrollX!==0){this.autoScrollAccumulatorX+=scrollX*scrollAmount;let integerScrollX=Math.trunc(this.autoScrollAccumulatorX);if(integerScrollX!==0)this.scrollLeft+=integerScrollX,this.autoScrollAccumulatorX-=integerScrollX,scrolled=!0}if(scrollY!==0){this.autoScrollAccumulatorY+=scrollY*scrollAmount;let integerScrollY=Math.trunc(this.autoScrollAccumulatorY);if(integerScrollY!==0)this.scrollTop+=integerScrollY,this.autoScrollAccumulatorY-=integerScrollY,scrolled=!0}if(scrolled)this._ctx.requestSelectionUpdate();if(scrollX===0&&scrollY===0)this.stopAutoScroll()}getAutoScrollDirectionX(mouseX){let relativeX=mouseX-this.x,distToLeft=relativeX,distToRight=this.width-relativeX;if(distToLeft<=this.autoScrollThresholdHorizontal)return this.scrollLeft>0?-1:0;else if(distToRight<=this.autoScrollThresholdHorizontal){let maxScrollLeft=this.scrollWidth-this.viewport.width;return this.scrollLeft<maxScrollLeft?1:0}return 0}getAutoScrollDirectionY(mouseY){let relativeY=mouseY-this.y,distToTop=relativeY,distToBottom=this.height-relativeY;if(distToTop<=this.autoScrollThresholdVertical)return this.scrollTop>0?-1:0;else if(distToBottom<=this.autoScrollThresholdVertical){let maxScrollTop=this.scrollHeight-this.viewport.height;return this.scrollTop<maxScrollTop?1:0}return 0}getAutoScrollSpeed(mouseX,mouseY){let relativeX=mouseX-this.x,relativeY=mouseY-this.y,distToLeft=relativeX,distToRight=this.width-relativeX,distToTop=relativeY,distToBottom=this.height-relativeY,minDistance=Math.min(distToLeft,distToRight,distToTop,distToBottom);if(minDistance<=1)return this.autoScrollSpeedFast;else if(minDistance<=2)return this.autoScrollSpeedMedium;else return this.autoScrollSpeedSlow}recalculateBarProps(){let wasApplyingStickyScroll=this._isApplyingStickyScroll;this._isApplyingStickyScroll=!0;try{if(this.verticalScrollBar.scrollSize=this.content.height,this.verticalScrollBar.viewportSize=this.viewport.height,this.horizontalScrollBar.scrollSize=this.content.width,this.horizontalScrollBar.viewportSize=this.viewport.width,this._stickyScroll){let newMaxScrollTop=Math.max(0,this.scrollHeight-this.viewport.height),newMaxScrollLeft=Math.max(0,this.scrollWidth-this.viewport.width);if(this._stickyStart&&!this._hasManualScroll)this.applyStickyStart(this._stickyStart);else{if(this._stickyScrollTop)this.scrollTop=0;else if(this._stickyScrollBottom&&newMaxScrollTop>0)this.scrollTop=newMaxScrollTop;if(this._stickyScrollLeft)this.scrollLeft=0;else if(this._stickyScrollRight&&newMaxScrollLeft>0)this.scrollLeft=newMaxScrollLeft}}}finally{this._isApplyingStickyScroll=wasApplyingStickyScroll}process.nextTick(()=>{this.requestRender()})}set padding(value){this.content.padding=value,this.requestRender()}set paddingX(value){this.content.paddingX=value,this.requestRender()}set paddingY(value){this.content.paddingY=value,this.requestRender()}set paddingTop(value){this.content.paddingTop=value,this.requestRender()}set paddingRight(value){this.content.paddingRight=value,this.requestRender()}set paddingBottom(value){this.content.paddingBottom=value,this.requestRender()}set paddingLeft(value){this.content.paddingLeft=value,this.requestRender()}set rootOptions(options){Object.assign(this,options),this.requestRender()}set wrapperOptions(options){Object.assign(this.wrapper,options),this.requestRender()}set viewportOptions(options){Object.assign(this.viewport,options),this.requestRender()}set contentOptions(options){Object.assign(this.content,options),this.requestRender()}set scrollbarOptions(options){Object.assign(this.verticalScrollBar,options),Object.assign(this.horizontalScrollBar,options),this.requestRender()}set verticalScrollbarOptions(options){Object.assign(this.verticalScrollBar,options),this.requestRender()}set horizontalScrollbarOptions(options){Object.assign(this.horizontalScrollBar,options),this.requestRender()}get scrollAcceleration(){return this.scrollAccel}set scrollAcceleration(value){this.scrollAccel=value}get viewportCulling(){return this.content.viewportCulling}set viewportCulling(value){this.content.viewportCulling=value,this.requestRender()}destroySelf(){if(this.selectionListener)this._ctx.off("selection",this.selectionListener),this.selectionListener=void 0;super.destroySelf()}}var defaultSelectKeybindings=[{name:"up",action:"move-up"},{name:"k",action:"move-up"},{name:"down",action:"move-down"},{name:"j",action:"move-down"},{name:"up",shift:!0,action:"move-up-fast"},{name:"down",shift:!0,action:"move-down-fast"},{name:"return",action:"select-current"},{name:"linefeed",action:"select-current"}],SelectRenderableEvents;((SelectRenderableEvents2)=>{SelectRenderableEvents2.SELECTION_CHANGED="selectionChanged",SelectRenderableEvents2.ITEM_SELECTED="itemSelected"})(SelectRenderableEvents||={});class SelectRenderable extends Renderable{_focusable=!0;_options=[];_selectedIndex=0;scrollOffset=0;maxVisibleItems;_backgroundColor;_textColor;_focusedBackgroundColor;_focusedTextColor;_selectedBackgroundColor;_selectedTextColor;_descriptionColor;_selectedDescriptionColor;_showScrollIndicator;_wrapSelection;_showDescription;_font;_itemSpacing;linesPerItem;fontHeight;_fastScrollStep;_keyBindingsMap;_keyAliasMap;_keyBindings;_defaultOptions={backgroundColor:"transparent",textColor:"#FFFFFF",focusedBackgroundColor:"#1a1a1a",focusedTextColor:"#FFFFFF",selectedBackgroundColor:"#334455",selectedTextColor:"#FFFF00",selectedIndex:0,descriptionColor:"#888888",selectedDescriptionColor:"#CCCCCC",showScrollIndicator:!1,wrapSelection:!1,showDescription:!0,itemSpacing:0,fastScrollStep:5};constructor(ctx,options){super(ctx,{...options,buffered:!0});this._options=options.options||[];let requestedIndex=options.selectedIndex??this._defaultOptions.selectedIndex;this._selectedIndex=this._options.length>0?Math.min(requestedIndex,this._options.length-1):0,this._backgroundColor=parseColor(options.backgroundColor||this._defaultOptions.backgroundColor),this._textColor=parseColor(options.textColor||this._defaultOptions.textColor),this._focusedBackgroundColor=parseColor(options.focusedBackgroundColor||this._defaultOptions.focusedBackgroundColor),this._focusedTextColor=parseColor(options.focusedTextColor||this._defaultOptions.focusedTextColor),this._showScrollIndicator=options.showScrollIndicator??this._defaultOptions.showScrollIndicator,this._wrapSelection=options.wrapSelection??this._defaultOptions.wrapSelection,this._showDescription=options.showDescription??this._defaultOptions.showDescription,this._font=options.font,this._itemSpacing=options.itemSpacing||this._defaultOptions.itemSpacing,this.fontHeight=this._font?measureText({text:"A",font:this._font}).height:1,this.linesPerItem=this._showDescription?this._font?this.fontHeight+1:2:this._font?this.fontHeight:1,this.linesPerItem+=this._itemSpacing,this.maxVisibleItems=Math.max(1,Math.floor(this.height/this.linesPerItem)),this._selectedBackgroundColor=parseColor(options.selectedBackgroundColor||this._defaultOptions.selectedBackgroundColor),this._selectedTextColor=parseColor(options.selectedTextColor||this._defaultOptions.selectedTextColor),this._descriptionColor=parseColor(options.descriptionColor||this._defaultOptions.descriptionColor),this._selectedDescriptionColor=parseColor(options.selectedDescriptionColor||this._defaultOptions.selectedDescriptionColor),this._fastScrollStep=options.fastScrollStep||this._defaultOptions.fastScrollStep,this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,options.keyAliasMap||{}),this._keyBindings=options.keyBindings||[];let mergedBindings=mergeKeyBindings(defaultSelectKeybindings,this._keyBindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap),this.requestRender()}renderSelf(buffer,deltaTime){if(!this.visible||!this.frameBuffer)return;if(this.isDirty)this.refreshFrameBuffer()}refreshFrameBuffer(){if(!this.frameBuffer)return;let bgColor=this._focused?this._focusedBackgroundColor:this._backgroundColor;if(this.frameBuffer.clear(bgColor),this._options.length===0)return;let contentX=0,contentY=0,contentWidth=this.width,contentHeight=this.height,visibleOptions=this._options.slice(this.scrollOffset,this.scrollOffset+this.maxVisibleItems);for(let i=0;i<visibleOptions.length;i++){let actualIndex=this.scrollOffset+i,option=visibleOptions[i],isSelected=actualIndex===this._selectedIndex,itemY=contentY+i*this.linesPerItem;if(itemY+this.linesPerItem-1>=contentY+contentHeight)break;if(isSelected){let contentHeight2=this.linesPerItem-this._itemSpacing;this.frameBuffer.fillRect(contentX,itemY,contentWidth,contentHeight2,this._selectedBackgroundColor)}let nameContent=`${isSelected?"\u25B6 ":" "}${option.name}`,baseTextColor=this._focused?this._focusedTextColor:this._textColor,nameColor=isSelected?this._selectedTextColor:baseTextColor,descX=contentX+3;if(this._font){let indicator=isSelected?"\u25B6 ":" ";this.frameBuffer.drawText(indicator,contentX+1,itemY,nameColor);let indicatorWidth=2;renderFontToFrameBuffer(this.frameBuffer,{text:option.name,x:contentX+1+indicatorWidth,y:itemY,color:nameColor,backgroundColor:isSelected?this._selectedBackgroundColor:bgColor,font:this._font}),descX=contentX+1+indicatorWidth}else this.frameBuffer.drawText(nameContent,contentX+1,itemY,nameColor);if(this._showDescription&&itemY+this.fontHeight<contentY+contentHeight){let descColor=isSelected?this._selectedDescriptionColor:this._descriptionColor;this.frameBuffer.drawText(option.description,descX,itemY+this.fontHeight,descColor)}}if(this._showScrollIndicator&&this._options.length>this.maxVisibleItems)this.renderScrollIndicatorToFrameBuffer(contentX,contentY,contentWidth,contentHeight)}renderScrollIndicatorToFrameBuffer(contentX,contentY,contentWidth,contentHeight){if(!this.frameBuffer)return;let scrollPercent=this._selectedIndex/Math.max(1,this._options.length-1),indicatorHeight=Math.max(1,contentHeight-2),indicatorY=contentY+1+Math.floor(scrollPercent*indicatorHeight),indicatorX=contentX+contentWidth-1;this.frameBuffer.drawText("\u2588",indicatorX,indicatorY,parseColor("#666666"))}get options(){return this._options}set options(options){this._options=options,this._selectedIndex=Math.min(this._selectedIndex,Math.max(0,options.length-1)),this.updateScrollOffset(),this.requestRender()}getSelectedOption(){return this._options[this._selectedIndex]||null}getSelectedIndex(){return this._selectedIndex}moveUp(steps=1){let newIndex=this._selectedIndex-steps;if(newIndex>=0)this._selectedIndex=newIndex;else if(this._wrapSelection&&this._options.length>0)this._selectedIndex=this._options.length-1;else this._selectedIndex=0;this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this._selectedIndex,this.getSelectedOption())}moveDown(steps=1){let newIndex=this._selectedIndex+steps;if(newIndex<this._options.length)this._selectedIndex=newIndex;else if(this._wrapSelection&&this._options.length>0)this._selectedIndex=0;else this._selectedIndex=this._options.length-1;this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this._selectedIndex,this.getSelectedOption())}selectCurrent(){let selected=this.getSelectedOption();if(selected)this.emit("itemSelected",this._selectedIndex,selected)}setSelectedIndex(index){if(index>=0&&index<this._options.length)this._selectedIndex=index,this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this._selectedIndex,this.getSelectedOption())}updateScrollOffset(){if(!this._options)return;let halfVisible=Math.floor(this.maxVisibleItems/2),newScrollOffset=Math.max(0,Math.min(this._selectedIndex-halfVisible,this._options.length-this.maxVisibleItems));if(newScrollOffset!==this.scrollOffset)this.scrollOffset=newScrollOffset,this.requestRender()}onResize(width,height){this.maxVisibleItems=Math.max(1,Math.floor(height/this.linesPerItem)),this.updateScrollOffset(),this.requestRender()}handleKeyPress(key){let action=getKeyBindingAction(this._keyBindingsMap,key);if(action)switch(action){case"move-up":return this.moveUp(1),!0;case"move-down":return this.moveDown(1),!0;case"move-up-fast":return this.moveUp(this._fastScrollStep),!0;case"move-down-fast":return this.moveDown(this._fastScrollStep),!0;case"select-current":return this.selectCurrent(),!0}return!1}get showScrollIndicator(){return this._showScrollIndicator}set showScrollIndicator(show){this._showScrollIndicator=show,this.requestRender()}get showDescription(){return this._showDescription}set showDescription(show){if(this._showDescription!==show)this._showDescription=show,this.linesPerItem=this._showDescription?this._font?this.fontHeight+1:2:this._font?this.fontHeight:1,this.linesPerItem+=this._itemSpacing,this.maxVisibleItems=Math.max(1,Math.floor(this.height/this.linesPerItem)),this.updateScrollOffset(),this.requestRender()}get wrapSelection(){return this._wrapSelection}set wrapSelection(wrap){this._wrapSelection=wrap}set backgroundColor(value){let newColor=parseColor(value??this._defaultOptions.backgroundColor);if(this._backgroundColor!==newColor)this._backgroundColor=newColor,this.requestRender()}set textColor(value){let newColor=parseColor(value??this._defaultOptions.textColor);if(this._textColor!==newColor)this._textColor=newColor,this.requestRender()}set focusedBackgroundColor(value){let newColor=parseColor(value??this._defaultOptions.focusedBackgroundColor);if(this._focusedBackgroundColor!==newColor)this._focusedBackgroundColor=newColor,this.requestRender()}set focusedTextColor(value){let newColor=parseColor(value??this._defaultOptions.focusedTextColor);if(this._focusedTextColor!==newColor)this._focusedTextColor=newColor,this.requestRender()}set selectedBackgroundColor(value){let newColor=parseColor(value??this._defaultOptions.selectedBackgroundColor);if(this._selectedBackgroundColor!==newColor)this._selectedBackgroundColor=newColor,this.requestRender()}set selectedTextColor(value){let newColor=parseColor(value??this._defaultOptions.selectedTextColor);if(this._selectedTextColor!==newColor)this._selectedTextColor=newColor,this.requestRender()}set descriptionColor(value){let newColor=parseColor(value??this._defaultOptions.descriptionColor);if(this._descriptionColor!==newColor)this._descriptionColor=newColor,this.requestRender()}set selectedDescriptionColor(value){let newColor=parseColor(value??this._defaultOptions.selectedDescriptionColor);if(this._selectedDescriptionColor!==newColor)this._selectedDescriptionColor=newColor,this.requestRender()}set font(font){this._font=font,this.fontHeight=measureText({text:"A",font:this._font}).height,this.linesPerItem=this._showDescription?this._font?this.fontHeight+1:2:this._font?this.fontHeight:1,this.linesPerItem+=this._itemSpacing,this.maxVisibleItems=Math.max(1,Math.floor(this.height/this.linesPerItem)),this.updateScrollOffset(),this.requestRender()}set itemSpacing(spacing){this._itemSpacing=spacing,this.linesPerItem=this._showDescription?this._font?this.fontHeight+1:2:this._font?this.fontHeight:1,this.linesPerItem+=this._itemSpacing,this.maxVisibleItems=Math.max(1,Math.floor(this.height/this.linesPerItem)),this.updateScrollOffset(),this.requestRender()}set fastScrollStep(step){this._fastScrollStep=step}set keyBindings(bindings){this._keyBindings=bindings;let mergedBindings=mergeKeyBindings(defaultSelectKeybindings,bindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap)}set keyAliasMap(aliases){this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,aliases);let mergedBindings=mergeKeyBindings(defaultSelectKeybindings,this._keyBindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap)}set selectedIndex(value){let newIndex=value??this._defaultOptions.selectedIndex,clampedIndex=this._options.length>0?Math.min(Math.max(0,newIndex),this._options.length-1):0;if(this._selectedIndex!==clampedIndex)this._selectedIndex=clampedIndex,this.updateScrollOffset(),this.requestRender()}}var defaultTabSelectKeybindings=[{name:"left",action:"move-left"},{name:"[",action:"move-left"},{name:"right",action:"move-right"},{name:"]",action:"move-right"},{name:"return",action:"select-current"},{name:"linefeed",action:"select-current"}],TabSelectRenderableEvents;((TabSelectRenderableEvents2)=>{TabSelectRenderableEvents2.SELECTION_CHANGED="selectionChanged",TabSelectRenderableEvents2.ITEM_SELECTED="itemSelected"})(TabSelectRenderableEvents||={});function calculateDynamicHeight(showUnderline,showDescription){let height=1;if(showUnderline)height+=1;if(showDescription)height+=1;return height}class TabSelectRenderable extends Renderable{_focusable=!0;_options=[];selectedIndex=0;scrollOffset=0;_tabWidth;maxVisibleTabs;_backgroundColor;_textColor;_focusedBackgroundColor;_focusedTextColor;_selectedBackgroundColor;_selectedTextColor;_selectedDescriptionColor;_showScrollArrows;_showDescription;_showUnderline;_wrapSelection;_keyBindingsMap;_keyAliasMap;_keyBindings;constructor(ctx,options){let calculatedHeight=calculateDynamicHeight(options.showUnderline??!0,options.showDescription??!0);super(ctx,{...options,height:calculatedHeight,buffered:!0});this._backgroundColor=parseColor(options.backgroundColor||"transparent"),this._textColor=parseColor(options.textColor||"#FFFFFF"),this._focusedBackgroundColor=parseColor(options.focusedBackgroundColor||options.backgroundColor||"#1a1a1a"),this._focusedTextColor=parseColor(options.focusedTextColor||options.textColor||"#FFFFFF"),this._options=options.options||[],this._tabWidth=options.tabWidth||20,this._showDescription=options.showDescription??!0,this._showUnderline=options.showUnderline??!0,this._showScrollArrows=options.showScrollArrows??!0,this._wrapSelection=options.wrapSelection??!1,this.maxVisibleTabs=Math.max(1,Math.floor(this.width/this._tabWidth)),this._selectedBackgroundColor=parseColor(options.selectedBackgroundColor||"#334455"),this._selectedTextColor=parseColor(options.selectedTextColor||"#FFFF00"),this._selectedDescriptionColor=parseColor(options.selectedDescriptionColor||"#CCCCCC"),this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,options.keyAliasMap||{}),this._keyBindings=options.keyBindings||[];let mergedBindings=mergeKeyBindings(defaultTabSelectKeybindings,this._keyBindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap)}calculateDynamicHeight(){return calculateDynamicHeight(this._showUnderline,this._showDescription)}renderSelf(buffer,deltaTime){if(!this.visible||!this.frameBuffer)return;if(this.isDirty)this.refreshFrameBuffer()}refreshFrameBuffer(){if(!this.frameBuffer)return;let bgColor=this._focused?this._focusedBackgroundColor:this._backgroundColor;if(this.frameBuffer.clear(bgColor),this._options.length===0)return;let contentX=0,contentY=0,contentWidth=this.width,contentHeight=this.height,visibleOptions=this._options.slice(this.scrollOffset,this.scrollOffset+this.maxVisibleTabs);for(let i=0;i<visibleOptions.length;i++){let actualIndex=this.scrollOffset+i,option=visibleOptions[i],isSelected=actualIndex===this.selectedIndex,tabX=contentX+i*this._tabWidth;if(tabX>=contentX+contentWidth)break;let actualTabWidth=Math.min(this._tabWidth,contentWidth-i*this._tabWidth);if(isSelected)this.frameBuffer.fillRect(tabX,contentY,actualTabWidth,1,this._selectedBackgroundColor);let baseTextColor=this._focused?this._focusedTextColor:this._textColor,nameColor=isSelected?this._selectedTextColor:baseTextColor,nameContent=this.truncateText(option.name,actualTabWidth-2);if(this.frameBuffer.drawText(nameContent,tabX+1,contentY,nameColor),isSelected&&this._showUnderline&&contentHeight>=2){let underlineY=contentY+1,underlineBg=isSelected?this._selectedBackgroundColor:bgColor;this.frameBuffer.drawText("\u25AC".repeat(actualTabWidth),tabX,underlineY,nameColor,underlineBg)}}if(this._showDescription&&contentHeight>=(this._showUnderline?3:2)){let selectedOption=this.getSelectedOption();if(selectedOption){let descriptionY=contentY+(this._showUnderline?2:1),descColor=this._selectedDescriptionColor,descContent=this.truncateText(selectedOption.description,contentWidth-2);this.frameBuffer.drawText(descContent,contentX+1,descriptionY,descColor)}}if(this._showScrollArrows&&this._options.length>this.maxVisibleTabs)this.renderScrollArrowsToFrameBuffer(contentX,contentY,contentWidth,contentHeight)}truncateText(text,maxWidth){if(text.length<=maxWidth)return text;return text.substring(0,Math.max(0,maxWidth-1))+"\u2026"}renderScrollArrowsToFrameBuffer(contentX,contentY,contentWidth,contentHeight){if(!this.frameBuffer)return;let hasMoreLeft=this.scrollOffset>0,hasMoreRight=this.scrollOffset+this.maxVisibleTabs<this._options.length;if(hasMoreLeft)this.frameBuffer.drawText("\u2039",contentX,contentY,parseColor("#AAAAAA"));if(hasMoreRight)this.frameBuffer.drawText("\u203A",contentX+contentWidth-1,contentY,parseColor("#AAAAAA"))}setOptions(options){this._options=options,this.selectedIndex=Math.min(this.selectedIndex,Math.max(0,options.length-1)),this.updateScrollOffset(),this.requestRender()}getSelectedOption(){return this._options[this.selectedIndex]||null}getSelectedIndex(){return this.selectedIndex}moveLeft(){if(this.selectedIndex>0)this.selectedIndex--;else if(this._wrapSelection&&this._options.length>0)this.selectedIndex=this._options.length-1;else return;this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this.selectedIndex,this.getSelectedOption())}moveRight(){if(this.selectedIndex<this._options.length-1)this.selectedIndex++;else if(this._wrapSelection&&this._options.length>0)this.selectedIndex=0;else return;this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this.selectedIndex,this.getSelectedOption())}selectCurrent(){let selected=this.getSelectedOption();if(selected)this.emit("itemSelected",this.selectedIndex,selected)}setSelectedIndex(index){if(index>=0&&index<this._options.length)this.selectedIndex=index,this.updateScrollOffset(),this.requestRender(),this.emit("selectionChanged",this.selectedIndex,this.getSelectedOption())}updateScrollOffset(){let halfVisible=Math.floor(this.maxVisibleTabs/2),newScrollOffset=Math.max(0,Math.min(this.selectedIndex-halfVisible,this._options.length-this.maxVisibleTabs));if(newScrollOffset!==this.scrollOffset)this.scrollOffset=newScrollOffset,this.requestRender()}onResize(width,height){this.maxVisibleTabs=Math.max(1,Math.floor(width/this._tabWidth)),this.updateScrollOffset(),this.requestRender()}setTabWidth(tabWidth){if(this._tabWidth===tabWidth)return;this._tabWidth=tabWidth,this.maxVisibleTabs=Math.max(1,Math.floor(this.width/this._tabWidth)),this.updateScrollOffset(),this.requestRender()}getTabWidth(){return this._tabWidth}handleKeyPress(key){let action=getKeyBindingAction(this._keyBindingsMap,key);if(action)switch(action){case"move-left":return this.moveLeft(),!0;case"move-right":return this.moveRight(),!0;case"select-current":return this.selectCurrent(),!0}return!1}get options(){return this._options}set options(options){this._options=options,this.selectedIndex=Math.min(this.selectedIndex,Math.max(0,options.length-1)),this.updateScrollOffset(),this.requestRender()}set backgroundColor(color){this._backgroundColor=parseColor(color),this.requestRender()}set textColor(color){this._textColor=parseColor(color),this.requestRender()}set focusedBackgroundColor(color){this._focusedBackgroundColor=parseColor(color),this.requestRender()}set focusedTextColor(color){this._focusedTextColor=parseColor(color),this.requestRender()}set selectedBackgroundColor(color){this._selectedBackgroundColor=parseColor(color),this.requestRender()}set selectedTextColor(color){this._selectedTextColor=parseColor(color),this.requestRender()}set selectedDescriptionColor(color){this._selectedDescriptionColor=parseColor(color),this.requestRender()}get showDescription(){return this._showDescription}set showDescription(show){if(this._showDescription!==show){this._showDescription=show;let newHeight=this.calculateDynamicHeight();this.height=newHeight,this.requestRender()}}get showUnderline(){return this._showUnderline}set showUnderline(show){if(this._showUnderline!==show){this._showUnderline=show;let newHeight=this.calculateDynamicHeight();this.height=newHeight,this.requestRender()}}get showScrollArrows(){return this._showScrollArrows}set showScrollArrows(show){if(this._showScrollArrows!==show)this._showScrollArrows=show,this.requestRender()}get wrapSelection(){return this._wrapSelection}set wrapSelection(wrap){this._wrapSelection=wrap}get tabWidth(){return this._tabWidth}set tabWidth(tabWidth){if(this._tabWidth===tabWidth)return;this._tabWidth=tabWidth,this.maxVisibleTabs=Math.max(1,Math.floor(this.width/this._tabWidth)),this.updateScrollOffset(),this.requestRender()}set keyBindings(bindings){this._keyBindings=bindings;let mergedBindings=mergeKeyBindings(defaultTabSelectKeybindings,bindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap)}set keyAliasMap(aliases){this._keyAliasMap=mergeKeyAliases(defaultKeyAliases,aliases);let mergedBindings=mergeKeyBindings(defaultTabSelectKeybindings,this._keyBindings);this._keyBindingsMap=buildKeyBindingsMap(mergedBindings,this._keyAliasMap)}}class TimeToFirstDrawRenderable extends Renderable{_runtimeMs=null;textColor;label;precision;constructor(ctx,options={}){super(ctx,{width:"100%",height:1,flexShrink:0,alignSelf:"center",...options});this.textColor=parseColor(options.fg??"#AAAAAA"),this.label=options.label??"Time to first draw",this.precision=this.normalizePrecision(options.precision??2)}get runtimeMs(){return this._runtimeMs}set fg(value){this.textColor=parseColor(value),this.requestRender()}set color(value){this.fg=value}set textLabel(value){if(value===this.label)return;this.label=value,this.requestRender()}set decimals(value){let nextPrecision=this.normalizePrecision(value);if(nextPrecision===this.precision)return;this.precision=nextPrecision,this.requestRender()}reset(){this._runtimeMs=null,this.requestRender()}renderSelf(buffer){if(this._runtimeMs===null)this._runtimeMs=performance.now();let content=`${this.label}: ${this._runtimeMs.toFixed(this.precision)}ms`,maxWidth=Math.max(this.width,1),visibleContent=content.length>maxWidth?content.slice(0,maxWidth):content,centeredX=this.x+Math.max(0,Math.floor((maxWidth-visibleContent.length)/2));buffer.drawText(visibleContent,centeredX,this.y,this.textColor)}normalizePrecision(value){if(!Number.isFinite(value))return 2;return Math.max(0,Math.floor(value))}}var import_react=__toESM(require_react_production(),1);var import_react2=__toESM(require_react_production(),1),import_react3=__toESM(require_react_production(),1);var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element"),REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");function jsxProd(type,config,maybeKey){var key=null;if(maybeKey!==void 0&&(key=""+maybeKey),config.key!==void 0&&(key=""+config.key),"key"in config){maybeKey={};for(var propName in config)propName!=="key"&&(maybeKey[propName]=config[propName])}else maybeKey=config;return config=maybeKey.ref,{$$typeof:REACT_ELEMENT_TYPE,type,key,ref:config!==void 0?config:null,props:maybeKey}}var $Fragment=REACT_FRAGMENT_TYPE,$jsx=jsxProd,$jsxs=jsxProd;var jsxDEV=$jsx;var import_react_reconciler=__toESM(require_react_reconciler_production(),1);var $ConcurrentRoot=1;var $DefaultEventPriority=32;var $NoEventPriority=0;var import_react4=__toESM(require_react_production(),1);var textNodeKeys=["span","b","strong","i","em","u","br","a"];class SpanRenderable extends TextNodeRenderable{ctx;constructor(ctx,options){super(options);this.ctx=ctx}}class TextModifierRenderable extends SpanRenderable{constructor(options,modifier){super(null,options);if(modifier==="b"||modifier==="strong")this.attributes=(this.attributes||0)|TextAttributes.BOLD;else if(modifier==="i"||modifier==="em")this.attributes=(this.attributes||0)|TextAttributes.ITALIC;else if(modifier==="u")this.attributes=(this.attributes||0)|TextAttributes.UNDERLINE}}class BoldSpanRenderable extends TextModifierRenderable{constructor(_ctx,options){super(options,"b")}}class ItalicSpanRenderable extends TextModifierRenderable{constructor(_ctx,options){super(options,"i")}}class UnderlineSpanRenderable extends TextModifierRenderable{constructor(_ctx,options){super(options,"u")}}class LineBreakRenderable extends SpanRenderable{constructor(_ctx,options){super(null,options);this.add()}add(){return super.add(`
3666
3666
  `)}}class LinkRenderable extends SpanRenderable{constructor(_ctx,options){let linkOptions={...options,link:{url:options.href}};super(null,linkOptions)}}var baseComponents={box:BoxRenderable,text:TextRenderable,code:CodeRenderable,diff:DiffRenderable,markdown:MarkdownRenderable,input:InputRenderable,select:SelectRenderable,textarea:TextareaRenderable,scrollbox:ScrollBoxRenderable,"ascii-font":ASCIIFontRenderable,"tab-select":TabSelectRenderable,"line-number":LineNumberRenderable,span:SpanRenderable,br:LineBreakRenderable,b:BoldSpanRenderable,strong:BoldSpanRenderable,i:ItalicSpanRenderable,em:ItalicSpanRenderable,u:UnderlineSpanRenderable,a:LinkRenderable},componentCatalogue={...baseComponents};function extend(objects){Object.assign(componentCatalogue,objects)}function getComponentCatalogue(){return componentCatalogue}var AppContext=import_react.createContext({keyHandler:null,renderer:null}),useAppContext=()=>{return import_react.useContext(AppContext)};class ErrorBoundary extends import_react3.default.Component{constructor(props){super(props);this.state={hasError:!1,error:null}}static getDerivedStateFromError(error){return{hasError:!0,error}}render(){if(this.state.hasError&&this.state.error)return jsxDEV("box",{style:{flexDirection:"column",padding:2},children:jsxDEV("text",{fg:"red",children:this.state.error.stack||this.state.error.message},void 0,!1,void 0,this)},void 0,!1,void 0,this);return this.props.children}}var package_default={name:"@opentui/react",version:"0.2.2",description:"React renderer for building terminal user interfaces using OpenTUI core",license:"MIT",repository:{type:"git",url:"https://github.com/anomalyco/opentui",directory:"packages/react"},module:"src/index.ts",type:"module",private:!0,main:"src/index.ts",exports:{".":{import:"./src/index.ts",types:"./src/index.ts"},"./test-utils":{import:"./src/test-utils.ts",types:"./src/test-utils.d.ts"},"./runtime-plugin-support":{import:"./scripts/runtime-plugin-support.ts",types:"./scripts/runtime-plugin-support.ts"},"./runtime-plugin-support/configure":{import:"./scripts/runtime-plugin-support-configure.ts",types:"./scripts/runtime-plugin-support-configure.ts"},"./jsx-runtime":{import:"./jsx-runtime.js",types:"./jsx-runtime.d.ts"},"./jsx-dev-runtime":{import:"./jsx-dev-runtime.js",types:"./jsx-dev-runtime.d.ts"}},scripts:{build:"bun run scripts/build.ts","build:examples":"bun examples/build.ts","build:dev":"bun run scripts/build.ts --dev",publish:"bun run scripts/publish.ts",test:"bun test"},devDependencies:{"@opentui/keymap":"workspace:*","@types/bun":"latest","@types/node":"^24.0.0","@types/react":"^19.0.0","@types/react-reconciler":"^0.32.0","@types/ws":"^8.18.1",react:">=19.0.0","react-devtools-core":"^7.0.1",typescript:"^5",ws:"^8.18.0"},peerDependencies:{react:">=19.0.0","react-devtools-core":"^7.0.1",ws:"^8.18.0"},peerDependenciesMeta:{"react-devtools-core":{optional:!0},ws:{optional:!0}},dependencies:{"@opentui/core":"workspace:*","react-reconciler":"^0.32.0"}},idCounter=new Map;function getNextId(type){if(!idCounter.has(type))idCounter.set(type,0);let value=idCounter.get(type)+1;return idCounter.set(type,value),`${type}-${value}`}function initEventListeners(instance,eventName,listener,previousListener){if(previousListener)instance.off(eventName,previousListener);if(listener)instance.on(eventName,listener)}function setStyle(instance,styles,oldStyles){if(oldStyles!=null&&typeof oldStyles==="object"){for(let styleName in oldStyles)if(oldStyles.hasOwnProperty(styleName)){if(styles==null||!styles.hasOwnProperty(styleName))instance[styleName]=null}}if(styles!=null&&typeof styles==="object"){for(let styleName in styles)if(styles.hasOwnProperty(styleName)){let value=styles[styleName],oldValue=oldStyles?.[styleName];if(value!==oldValue)instance[styleName]=value}}}function setProperty(instance,type,propKey,propValue,oldPropValue){switch(propKey){case"onChange":if(instance instanceof InputRenderable)initEventListeners(instance,InputRenderableEvents.CHANGE,propValue,oldPropValue);else if(instance instanceof SelectRenderable)initEventListeners(instance,SelectRenderableEvents.SELECTION_CHANGED,propValue,oldPropValue);else if(instance instanceof TabSelectRenderable)initEventListeners(instance,TabSelectRenderableEvents.SELECTION_CHANGED,propValue,oldPropValue);break;case"onInput":if(instance instanceof InputRenderable)initEventListeners(instance,InputRenderableEvents.INPUT,propValue,oldPropValue);break;case"onSubmit":if(instance instanceof InputRenderable)initEventListeners(instance,InputRenderableEvents.ENTER,propValue,oldPropValue);else if(instance instanceof TextareaRenderable)instance.onSubmit=propValue;break;case"onSelect":if(instance instanceof SelectRenderable)initEventListeners(instance,SelectRenderableEvents.ITEM_SELECTED,propValue,oldPropValue);else if(instance instanceof TabSelectRenderable)initEventListeners(instance,TabSelectRenderableEvents.ITEM_SELECTED,propValue,oldPropValue);break;case"focused":if(isRenderable(instance))if(propValue)instance.focus();else instance.blur();break;case"style":setStyle(instance,propValue,oldPropValue);break;case"children":break;default:instance[propKey]=propValue}}function setInitialProperties(instance,type,props){for(let propKey in props){if(!props.hasOwnProperty(propKey))continue;let propValue=props[propKey];if(propValue==null)continue;setProperty(instance,type,propKey,propValue)}}function updateProperties(instance,type,oldProps,newProps){for(let propKey in oldProps){let oldProp=oldProps[propKey];if(oldProps.hasOwnProperty(propKey)&&oldProp!=null&&!newProps.hasOwnProperty(propKey))setProperty(instance,type,propKey,null,oldProp)}for(let propKey in newProps){let newProp=newProps[propKey],oldProp=oldProps[propKey];if(newProps.hasOwnProperty(propKey)&&newProp!==oldProp&&(newProp!=null||oldProp!=null))setProperty(instance,type,propKey,newProp,oldProp)}}var currentUpdatePriority=$NoEventPriority,hostConfig={supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,createInstance(type,props,rootContainerInstance,hostContext){if(textNodeKeys.includes(type)&&!hostContext.isInsideText)throw Error(`Component of type "${type}" must be created inside of a text node`);let id=getNextId(type),components=getComponentCatalogue();if(!components[type])throw Error(`Unknown component type: ${type}`);return new components[type](rootContainerInstance.ctx,{id,...props})},appendChild(parent,child){parent.add(child)},removeChild(parent,child){parent.remove(child.id)},insertBefore(parent,child,beforeChild){parent.insertBefore(child,beforeChild)},insertInContainerBefore(parent,child,beforeChild){parent.insertBefore(child,beforeChild)},removeChildFromContainer(parent,child){parent.remove(child.id)},prepareForCommit(containerInfo){return null},resetAfterCommit(containerInfo){containerInfo.requestRender()},getRootHostContext(rootContainerInstance){return{isInsideText:!1}},getChildHostContext(parentHostContext,type,rootContainerInstance){let isInsideText=["text",...textNodeKeys].includes(type);return{...parentHostContext,isInsideText}},shouldSetTextContent(type,props){return!1},createTextInstance(text,rootContainerInstance,hostContext){if(!hostContext.isInsideText)throw Error("Text must be created inside of a text node");return TextNodeRenderable.fromString(text)},scheduleTimeout:setTimeout,cancelTimeout:clearTimeout,noTimeout:-1,shouldAttemptEagerTransition(){return!1},finalizeInitialChildren(instance,type,props,rootContainerInstance,hostContext){return setInitialProperties(instance,type,props),!1},commitMount(instance,type,props,internalInstanceHandle){},commitUpdate(instance,type,oldProps,newProps,internalInstanceHandle){updateProperties(instance,type,oldProps,newProps),instance.requestRender()},commitTextUpdate(textInstance,oldText,newText){textInstance.children=[newText],textInstance.requestRender()},appendChildToContainer(container,child){container.add(child)},appendInitialChild(parent,child){parent.add(child)},hideInstance(instance){instance.visible=!1,instance.requestRender()},unhideInstance(instance,props){instance.visible=!0,instance.requestRender()},hideTextInstance(textInstance){textInstance.visible=!1,textInstance.requestRender()},unhideTextInstance(textInstance,text){textInstance.visible=!0,textInstance.requestRender()},clearContainer(container){container.getChildren().forEach((child)=>container.remove(child.id))},setCurrentUpdatePriority(newPriority){currentUpdatePriority=newPriority},getCurrentUpdatePriority:()=>currentUpdatePriority,resolveUpdatePriority(){if(currentUpdatePriority!==$NoEventPriority)return currentUpdatePriority;return $DefaultEventPriority},maySuspendCommit(){return!1},NotPendingTransition:null,HostTransitionContext:import_react4.createContext(null),resetFormInstance(){},requestPostPaintCallback(){},trackSchedulerEvent(){},resolveEventType(){return null},resolveEventTimeStamp(){return-1.1},preloadInstance(){return!0},startSuspendingCommit(){},suspendInstance(){},waitForCommitToBeReady(){return null},detachDeletedInstance(instance){if(!instance.parent)instance.destroyRecursively()},getPublicInstance(instance){return instance},preparePortalMount(containerInfo){},isPrimaryRenderer:!0,getInstanceFromNode(){return null},beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},prepareScopeUpdate(){},getInstanceFromScope(){return null},rendererPackageName:"@opentui/react",rendererVersion:package_default.version},reconciler=import_react_reconciler.default(hostConfig);reconciler.injectIntoDevTools();function _render(element,root){let container=reconciler.createContainer(root,$ConcurrentRoot,null,!1,null,"",console.error,console.error,console.error,console.error,null);return reconciler.updateContainer(element,container,null,()=>{}),container}var _r=reconciler,flushSync=_r.flushSyncFromReconciler??_r.flushSync;function createRoot(renderer){let container=null,cleanup=()=>{if(container)reconciler.updateContainer(null,container,null,()=>{}),reconciler.flushSyncWork(),container=null};return renderer.once(CliRenderEvents.DESTROY,cleanup),{render:(node)=>{engine.attach(renderer),container=_render(import_react2.default.createElement(AppContext.Provider,{value:{keyHandler:renderer.keyInput,renderer}},import_react2.default.createElement(ErrorBoundary,null,node)),renderer.root)},unmount:cleanup}}var import_react5=__toESM(require_react_production(),1),import_react6=__toESM(require_react_production(),1),import_react7=__toESM(require_react_production(),1),import_react8=__toESM(require_react_production(),1);var import_react9=__toESM(require_react_production(),1);var import_react10=__toESM(require_react_production(),1);var import_react11=__toESM(require_react_production(),1),import_react12=__toESM(require_react_production(),1);function useEffectEvent(handler){let handlerRef=import_react6.useRef(handler);return import_react6.useLayoutEffect(()=>{handlerRef.current=handler}),import_react6.useCallback((...args)=>{let fn=handlerRef.current;return fn(...args)},[])}var useKeyboard=(handler,options={release:!1})=>{let{keyHandler}=useAppContext(),stableHandler=useEffectEvent(handler);import_react5.useEffect(()=>{if(keyHandler?.on("keypress",stableHandler),options?.release)keyHandler?.on("keyrelease",stableHandler);return()=>{if(keyHandler?.off("keypress",stableHandler),options?.release)keyHandler?.off("keyrelease",stableHandler)}},[keyHandler,options.release])},useRenderer=()=>{let{renderer}=useAppContext();if(!renderer)throw Error("Renderer not found.");return renderer},useOnResize=(callback)=>{let renderer=useRenderer(),stableCallback=useEffectEvent(callback);return import_react7.useEffect(()=>{return renderer.on("resize",stableCallback),()=>{renderer.off("resize",stableCallback)}},[renderer]),renderer},useTerminalDimensions=()=>{let renderer=useRenderer(),[dimensions,setDimensions]=import_react8.useState({width:renderer.width,height:renderer.height});return useOnResize((width,height)=>{setDimensions({width,height})}),dimensions};function createReactSlotRegistry(renderer,context,options={}){return createSlotRegistry(renderer,"react:slot-registry",context,options)}function renderPluginFailurePlaceholder(registry,pluginFailurePlaceholder,failure,pluginId,slot){if(!pluginFailurePlaceholder)return null;try{return pluginFailurePlaceholder(failure)}catch(error){return registry.reportPluginError({pluginId,slot,phase:"error_placeholder",source:"react",error}),null}}class PluginErrorBoundary extends import_react10.default.Component{constructor(props){super(props);this.state={failure:null}}componentDidCatch(error){let failure=this.props.registry.reportPluginError({pluginId:this.props.pluginId,slot:this.props.slotName,phase:"render",source:"react",error});this.setState({failure})}componentDidUpdate(previousProps){if(previousProps.resetToken!==this.props.resetToken&&this.state.failure)this.setState({failure:null})}render(){if(this.state.failure){let placeholder=renderPluginFailurePlaceholder(this.props.registry,this.props.pluginFailurePlaceholder,this.state.failure,this.props.pluginId,this.props.slotName);if(placeholder===null||placeholder===void 0||placeholder===!1)return this.props.fallbackOnFailure??null;return placeholder}return this.props.children}}function getSlotProps(props){let{children:_children,mode:_mode,name:_name,registry:_registry,pluginFailurePlaceholder:_pluginFailurePlaceholder,...slotProps}=props;return slotProps}function createSlot(registry,options={}){return function(props){return jsxDEV(Slot,{...props,registry,pluginFailurePlaceholder:options.pluginFailurePlaceholder},void 0,!1,void 0,this)}}function Slot(props){let[version,setVersion]=import_react10.useState(0),registry=props.registry,slotName=String(props.name),renderFailuresByPluginRef=import_react10.useRef(new Map),pendingRenderReportsRef=import_react10.useRef(new Map);import_react10.useEffect(()=>{return registry.subscribe(()=>{setVersion((current)=>current+1)})},[registry]),import_react10.useEffect(()=>{if(pendingRenderReportsRef.current.size===0)return;let pendingReports=[...pendingRenderReportsRef.current.values()];pendingRenderReportsRef.current.clear();for(let report of pendingReports){let failure=registry.reportPluginError({pluginId:report.pluginId,slot:report.slot,phase:"render",source:"react",error:report.error});renderFailuresByPluginRef.current.set(`${report.slot}:${report.pluginId}:render`,failure)}});let entries=import_react10.useMemo(()=>registry.resolveEntries(props.name),[registry,props.name,version]),slotProps=getSlotProps(props),renderEntry=(entry,fallbackOnFailure)=>{let key=`${slotName}:${entry.id}`,failureKey=`${slotName}:${entry.id}:render`;try{let rendered=entry.renderer(registry.context,slotProps);return renderFailuresByPluginRef.current.delete(failureKey),pendingRenderReportsRef.current.delete(failureKey),jsxDEV(PluginErrorBoundary,{registry,pluginFailurePlaceholder:props.pluginFailurePlaceholder,pluginId:entry.id,slotName,resetToken:version,fallbackOnFailure,children:rendered},key,!1,void 0,this)}catch(error){let normalizedError=error instanceof Error?error:typeof error==="string"?Error(error):Error(String(error)),lastFailure=renderFailuresByPluginRef.current.get(failureKey),isSameFailure=lastFailure&&lastFailure.error.message===normalizedError.message;if(!isSameFailure){let queued=pendingRenderReportsRef.current.get(failureKey);if(!queued||queued.error.message!==normalizedError.message)pendingRenderReportsRef.current.set(failureKey,{pluginId:entry.id,slot:slotName,error:normalizedError})}let failure=isSameFailure&&lastFailure?lastFailure:{pluginId:entry.id,slot:slotName,phase:"render",source:"react",error:normalizedError,timestamp:Date.now()};renderFailuresByPluginRef.current.set(failureKey,failure);let placeholder=renderPluginFailurePlaceholder(registry,props.pluginFailurePlaceholder,failure,entry.id,slotName);if(placeholder===null||placeholder===void 0||placeholder===!1)return fallbackOnFailure??null;return jsxDEV(import_react10.Fragment,{children:placeholder},key,!1,void 0,this)}};if(entries.length===0)return jsxDEV($Fragment,{children:props.children},void 0,!1,void 0,this);if(props.mode==="single_winner"){let winner=entries[0];if(!winner)return jsxDEV($Fragment,{children:props.children},void 0,!1,void 0,this);let rendered=renderEntry(winner,props.children);if(rendered===null||rendered===void 0||rendered===!1)return jsxDEV($Fragment,{children:props.children},void 0,!1,void 0,this);return jsxDEV($Fragment,{children:rendered},void 0,!1,void 0,this)}if(props.mode==="replace"){if(entries.length===1){let rendered=renderEntry(entries[0],props.children);if(rendered===null||rendered===void 0||rendered===!1)return jsxDEV($Fragment,{children:props.children},void 0,!1,void 0,this);return jsxDEV($Fragment,{children:rendered},void 0,!1,void 0,this)}let renderedEntries=entries.map((entry)=>renderEntry(entry));if(!renderedEntries.some((node)=>node!==null&&node!==void 0&&node!==!1))return jsxDEV($Fragment,{children:props.children},void 0,!1,void 0,this);return jsxDEV($Fragment,{children:renderedEntries},void 0,!1,void 0,this)}return jsxDEV($Fragment,{children:[props.children,entries.map((entry)=>renderEntry(entry))]},void 0,!0,void 0,this)}extend({"time-to-first-draw":TimeToFirstDrawRenderable});init_perf();var import_react152=__toESM(require_react_production(),1);var INTERP_RE=/\{!(.+?)\}/g,hasInterp=(s)=>/\{!.+?\}/.test(s);async function interpolate(gw,text){let hits=[...text.matchAll(INTERP_RE)];if(hits.length===0)return text;let outs=await Promise.all(hits.map((m2)=>gw.request("shell.exec",{command:m2[1]}).then((r)=>[r.stdout,r.stderr].filter(Boolean).join(`
3667
- `).trim()).catch(()=>"(error)"))),out=text;for(let i=hits.length-1;i>=0;i--){let m2=hits[i];out=out.slice(0,m2.index)+outs[i]+out.slice(m2.index+m2[0].length)}return out}var import_react13=__toESM(require_react_production(),1);import{EventEmitter as EventEmitter10}from"events";import{homedir}from"os";import{resolve as resolve5,delimiter}from"path";import{existsSync as existsSync3}from"fs";var LOG_MAX=200,LOG_PREVIEW=240,STARTUP_MS=15000,REQUEST_MS=120000;function hermesAgentRoot(){if(process.env.HERMES_AGENT_ROOT)return process.env.HERMES_AGENT_ROOT;let homePath=`${process.env.HOME||homedir()}/.hermes/hermes-agent`;if(existsSync3(homePath))return homePath;let fhs="/usr/local/lib/hermes-agent";if(existsSync3(fhs))return fhs;return homePath}function python(root,platform=process.platform){let env2=process.env.HERMES_PYTHON?.trim();if(env2)return env2;let venv=process.env.VIRTUAL_ENV?.trim();return(platform==="win32"?[venv&&resolve5(venv,"Scripts","python.exe"),resolve5(root,"venv","Scripts","python.exe"),resolve5(root,".venv","Scripts","python.exe")]:[venv&&resolve5(venv,"bin","python"),venv&&resolve5(venv,"bin","python3"),resolve5(root,"venv","bin","python"),resolve5(root,"venv","bin","python3"),resolve5(root,".venv","bin","python"),resolve5(root,".venv","bin","python3")]).find((p)=>p&&existsSync3(p))||(platform==="win32"?"python":"python3")}function asEvent(v2){if(v2&&typeof v2==="object"&&!Array.isArray(v2)&&typeof v2.type==="string")return v2;return null}async function lines(stream,cb){let reader=stream.getReader(),decoder2=new TextDecoder,buf="";try{while(!0){let{done,value}=await reader.read();if(done)break;buf+=decoder2.decode(value,{stream:!0});let parts=buf.split(`
3667
+ `).trim()).catch(()=>"(error)"))),out=text;for(let i=hits.length-1;i>=0;i--){let m2=hits[i];out=out.slice(0,m2.index)+outs[i]+out.slice(m2.index+m2[0].length)}return out}var import_react13=__toESM(require_react_production(),1);import{EventEmitter as EventEmitter10}from"events";import{homedir}from"os";import{resolve as resolve5,delimiter}from"path";import{existsSync as existsSync3}from"fs";var BAD=/[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDFFF]/g;function scalar(s){let count2=0;return{text:s.replace(BAD,(m2)=>{if(m2.length===2)return m2;return count2+=1,"\uFFFD"}),count:count2}}function encode(v2){let paths=new WeakMap,issues=[];return{text:JSON.stringify(v2,function(key,value){let holder=this&&typeof this==="object"?paths.get(this):void 0,path6=key?`${holder??"$"}.${key}`:"$";if(value&&typeof value==="object")paths.set(value,path6);if(typeof value!=="string")return value;let next=scalar(value);if(next.count>0)issues.push({path:path6,count:next.count});return next.text})??"null",issues}}var LOG_MAX=200,LOG_PREVIEW=240,STARTUP_MS=15000,REQUEST_MS=120000;function hermesAgentRoot(){if(process.env.HERMES_AGENT_ROOT)return process.env.HERMES_AGENT_ROOT;let homePath=`${process.env.HOME||homedir()}/.hermes/hermes-agent`;if(existsSync3(homePath))return homePath;let fhs="/usr/local/lib/hermes-agent";if(existsSync3(fhs))return fhs;return homePath}function python(root,platform=process.platform){let env2=process.env.HERMES_PYTHON?.trim();if(env2)return env2;let venv=process.env.VIRTUAL_ENV?.trim();return(platform==="win32"?[venv&&resolve5(venv,"Scripts","python.exe"),resolve5(root,"venv","Scripts","python.exe"),resolve5(root,".venv","Scripts","python.exe")]:[venv&&resolve5(venv,"bin","python"),venv&&resolve5(venv,"bin","python3"),resolve5(root,"venv","bin","python"),resolve5(root,"venv","bin","python3"),resolve5(root,".venv","bin","python"),resolve5(root,".venv","bin","python3")]).find((p)=>p&&existsSync3(p))||(platform==="win32"?"python":"python3")}function asEvent(v2){if(v2&&typeof v2==="object"&&!Array.isArray(v2)&&typeof v2.type==="string")return v2;return null}async function lines(stream,cb){let reader=stream.getReader(),decoder2=new TextDecoder,buf="";try{while(!0){let{done,value}=await reader.read();if(done)break;buf+=decoder2.decode(value,{stream:!0});let parts=buf.split(`
3668
3668
  `);buf=parts.pop()||"";for(let line of parts)if(line)cb(line)}if(buf.trim())cb(buf)}catch{}}class GatewayClient extends EventEmitter10{proc=null;id=0;logs=[];pending=new Map;buf=[];exit;ok=!1;timer=null;sub=!1;root(){return hermesAgentRoot()}push(ev){if(ev.type==="gateway.ready"){if(this.ok=!0,this.timer)clearTimeout(this.timer),this.timer=null}if(this.sub)return void this.emit("event",ev);this.buf.push(ev)}log(line){if(this.logs.push(line)>LOG_MAX)this.logs.splice(0,this.logs.length-LOG_MAX)}dispatch(msg){let id=msg.id,p=id?this.pending.get(id):void 0;if(p){if(this.pending.delete(id),msg.error){let err=msg.error;p.reject(Error(typeof err?.message==="string"?err.message:"request failed"))}else p.resolve(msg.result);return}if(msg.method==="event"){let ev=asEvent(msg.params);if(ev)this.push(ev)}}fail(err){for(let p of this.pending.values())p.reject(err);this.pending.clear()}start(){let root=this.root(),bin=python(root),cwd=process.env.HERMES_CWD||process.cwd(),env2={...process.env};if(!env2.TERMINAL_CWD)env2.TERMINAL_CWD=cwd;let pp=env2.PYTHONPATH?.trim();if(env2.PYTHONPATH=pp?`${root}${delimiter}${pp}`:root,this.ok=!1,this.buf=[],this.exit=void 0,this.proc)try{this.proc.kill()}catch{}if(this.timer)clearTimeout(this.timer);this.timer=setTimeout(()=>{if(this.ok)return;this.log(`[startup] timed out (python=${bin}, cwd=${cwd})`),this.push({type:"gateway.start_timeout",payload:{cwd,python:bin}})},STARTUP_MS);let proc=Bun.spawn([bin,"-u","-m","tui_gateway.entry"],{cwd,env:env2,stdin:"pipe",stdout:"pipe",stderr:"pipe"});if(this.proc=proc,this.proc.stdout)lines(this.proc.stdout,(raw)=>{try{this.dispatch(JSON.parse(raw))}catch{let preview=raw.trim().slice(0,LOG_PREVIEW)||"(empty)";this.log(`[protocol] malformed: ${preview}`),this.push({type:"gateway.protocol_error",payload:{preview}})}});if(this.proc.stderr)lines(this.proc.stderr,(raw)=>{let line=raw.trim();if(!line)return;this.log(line),this.push({type:"gateway.stderr",payload:{line}})});proc.exited.then((code)=>{if(this.proc!==proc)return;if(this.timer)clearTimeout(this.timer),this.timer=null;if(this.fail(Error(`gateway exited${code===null?"":` (${code})`}`)),this.sub)this.emit("exit",code);else this.exit=code})}drain(){if(this.sub)return;this.sub=!0;for(let ev of this.buf.splice(0))this.emit("event",ev);if(this.exit!==void 0){let code=this.exit;this.exit=void 0,this.emit("exit",code)}}tail(n=20){return this.logs.slice(-Math.max(1,n)).join(`
3669
- `)}sid="";setSession(sid){this.sid=sid}request(method,params={}){if(!this.proc||this.proc.exitCode!==null)this.start();let stdin=this.proc?.stdin;if(!stdin||typeof stdin==="number")return Promise.reject(Error("gateway not running"));let rid=`r${++this.id}`,writer=stdin,merged=this.sid&&params.session_id===void 0?{session_id:this.sid,...params}:params;return new Promise((resolve4,reject)=>{let timeout=setTimeout(()=>{if(this.pending.delete(rid))reject(Error(`timeout: ${method}`))},REQUEST_MS);this.pending.set(rid,{reject:(e)=>{clearTimeout(timeout),reject(e)},resolve:(v2)=>{clearTimeout(timeout),resolve4(v2)}});try{writer.write(JSON.stringify({jsonrpc:"2.0",id:rid,method,params:merged})+`
3669
+ `)}sid="";setSession(sid){this.sid=sid}request(method,params={}){if(!this.proc||this.proc.exitCode!==null)this.start();let stdin=this.proc?.stdin;if(!stdin||typeof stdin==="number")return Promise.reject(Error("gateway not running"));let rid=`r${++this.id}`,writer=stdin,merged=this.sid&&params.session_id===void 0?{session_id:this.sid,...params}:params;return new Promise((resolve4,reject)=>{let timeout=setTimeout(()=>{if(this.pending.delete(rid))reject(Error(`timeout: ${method}`))},REQUEST_MS);this.pending.set(rid,{reject:(e)=>{clearTimeout(timeout),reject(e)},resolve:(v2)=>{clearTimeout(timeout),resolve4(v2)}});try{let frame=encode({jsonrpc:"2.0",id:rid,method,params:merged});if(frame.issues.length){let detail=frame.issues.map((x2)=>`${x2.path}:${x2.count}`).join(", ");this.log(`[wire] sanitized invalid unicode for ${method}: ${detail}`)}writer.write(frame.text+`
3670
3670
  `)}catch(e){clearTimeout(timeout),this.pending.delete(rid),reject(e instanceof Error?e:Error(String(e)))}})}kill(){this.proc?.kill()}get ready(){return this.ok}}var Gw=import_react13.createContext(null),GatewayProvider=({client,children})=>{let ref=import_react13.useRef(null);if(!ref.current)ref.current=client??new GatewayClient;let[ready,setReady]=import_react13.useState(ref.current.ready);import_react13.useEffect(()=>{let c=ref.current,onEvent=(ev)=>{if(ev.type==="gateway.ready"||ev.type==="session.info")setReady(!0)};return c.on("event",onEvent),c.start(),c.drain(),()=>{c.off("event",onEvent),c.removeAllListeners(),c.kill()}},[]);let restart=import_react13.useCallback(()=>{setReady(!1),ref.current.start()},[]),value=import_react13.useMemo(()=>({client:ref.current,ready,restart}),[ready,restart]);return $jsx(Gw.Provider,{value,children})};function useGateway(){let ctx=import_react13.useContext(Gw);if(!ctx)throw Error("useGateway() must be inside <GatewayProvider>");return ctx.client}function useGatewayEvent(handler){let ctx=import_react13.useContext(Gw);if(!ctx)throw Error("useGatewayEvent() must be inside <GatewayProvider>");let ref=import_react13.useRef(handler);ref.current=handler,import_react13.useEffect(()=>{let c=ctx.client,fn=(ev)=>ref.current(ev);return c.on("event",fn),c.drain(),()=>{c.off("event",fn)}},[ctx.client])}function useGatewayReady(){let ctx=import_react13.useContext(Gw);if(!ctx)throw Error("useGatewayReady() must be inside <GatewayProvider>");return ctx.ready}function useGatewayRestart(){let ctx=import_react13.useContext(Gw);if(!ctx)throw Error("useGatewayRestart() must be inside <GatewayProvider>");return ctx.restart}function text(msg){return msg.parts.filter((p)=>p.type==="text").map((p)=>p.content).join("")}function mid(){return`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}var pn=0;function pid(){return`p${++pn}`}var import_react22=__toESM(require_react_production(),1);var import_react21=__toESM(require_react_production(),1);var import_react17=__toESM(require_react_production(),1);var import_react16=__toESM(require_react_production(),1);var import_react14=__toESM(require_react_production(),1);function makeUse(ctx,name){return()=>{let v2=import_react14.useContext(ctx);if(v2===null)throw Error(`${name}() must be used inside its provider`);return v2}}function resolveTheme(theme,mode){let defs=theme.defs??{};function resolve4(c,chain=[]){if(c instanceof RGBA)return c;if(typeof c==="string"){if(c==="transparent"||c==="none")return RGBA.fromInts(0,0,0,0);if(c.startsWith("#"))return RGBA.fromHex(c);if(chain.includes(c))throw Error(`Circular color reference: ${[...chain,c].join(" -> ")}`);let next=defs[c]??theme.theme[c];if(next===void 0)throw Error(`Color reference "${c}" not found in defs or theme`);return resolve4(next,[...chain,c])}if(typeof c==="number")return ansiToRgba(c);return resolve4(c[mode],chain)}let resolved=Object.fromEntries(Object.entries(theme.theme).filter(([key])=>key!=="selectedListItemText"&&key!=="backgroundMenu"&&key!=="thinkingOpacity").map(([key,value])=>[key,resolve4(value)])),hasList=theme.theme.selectedListItemText!==void 0;resolved.selectedListItemText=hasList?resolve4(theme.theme.selectedListItemText):resolved.background,resolved.backgroundMenu=theme.theme.backgroundMenu!==void 0?resolve4(theme.theme.backgroundMenu):resolved.backgroundElement;let base={...resolved,_hasSelectedListItemText:hasList,thinkingOpacity:theme.theme.thinkingOpacity??0.6},herm=resolveHermTokens(resolved.accent);return{...base,...herm}}function resolveHermTokens(accent){return{hermAvatar:accent}}function ansiToRgba(code){if(code<16){let colors=["#000000","#800000","#008000","#808000","#000080","#800080","#008080","#c0c0c0","#808080","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff"];return RGBA.fromHex(colors[code]??"#000000")}if(code<232){let idx=code-16,val=(x2)=>x2===0?0:x2*40+55;return RGBA.fromInts(val(Math.floor(idx/36)),val(Math.floor(idx/6)%6),val(idx%6))}if(code<256){let gray=(code-232)*10+8;return RGBA.fromInts(gray,gray,gray)}return RGBA.fromInts(0,0,0)}var PREVIEW={ares:{primary:"#C7A96B",accent:"#DD4A3A",background:"#2A1212"},aura:{primary:"#a277ff",accent:"#a277ff",background:"#0f0f0f"},ayu:{primary:"#59C2FF",accent:"#E6B450",background:"#0B0E14"},carbonfox:{primary:"#33b1ff",accent:"#ff7eb6",background:"#161616"},"catppuccin-frappe":{primary:"#8da4e2",accent:"#f4b8e4",background:"#303446"},"catppuccin-macchiato":{primary:"#8aadf4",accent:"#f5bde6",background:"#24273a"},catppuccin:{primary:"#89b4fa",accent:"#f5c2e7",background:"#1e1e2e"},charizard:{primary:"#FFD39A",accent:"#F29C38",background:"#2B160E"},cobalt2:{primary:"#0088ff",accent:"#2affdf",background:"#193549"},cursor:{primary:"#88c0d0",accent:"#88c0d0",background:"#181818"},daylight:{primary:"#233662",accent:"#597FE9",background:"#101014"},default:{primary:"#FFD700",accent:"#FFBF00",background:"#1a1a2e"},dracula:{primary:"#bd93f9",accent:"#8be9fd",background:"#282a36"},everforest:{primary:"#a7c080",accent:"#d699b6",background:"#2d353b"},flexoki:{primary:"#DA702C",accent:"#8B7EC8",background:"#100F0F"},github:{primary:"#58a6ff",accent:"#39c5cf",background:"#0d1117"},gruvbox:{primary:"#83a598",accent:"#8ec07c",background:"#282828"},kanagawa:{primary:"#7E9CD8",accent:"#D27E99",background:"#1F1F28"},"lucent-orng":{primary:"#EC5B2B",accent:"#FFF7F1",background:"transparent"},material:{primary:"#82aaff",accent:"#89ddff",background:"#263238"},matrix:{primary:"#2eff6a",accent:"#c770ff",background:"#0a0e0a"},mercury:{primary:"#8da4f5",accent:"#8da4f5",background:"#171721"},mono:{primary:"#e6edf3",accent:"#aaaaaa",background:"#1F1F1F"},monokai:{primary:"#66d9ef",accent:"#a6e22e",background:"#272822"},nightowl:{primary:"#82AAFF",accent:"#c792ea",background:"#011627"},nord:{primary:"#88C0D0",accent:"#8FBCBB",background:"#2E3440"},"one-dark":{primary:"#61afef",accent:"#56b6c2",background:"#282c34"},opencode:{primary:"#fab283",accent:"#9d7cd8",background:"#0a0a0a"},orng:{primary:"#EC5B2B",accent:"#FFF7F1",background:"#0a0a0a"},"osaka-jade":{primary:"#2DD5B7",accent:"#549e6a",background:"#111c18"},palenight:{primary:"#82aaff",accent:"#89ddff",background:"#292d3e"},poseidon:{primary:"#A9DFFF",accent:"#5DB8F5",background:"#0F2440"},rosepine:{primary:"#9ccfd8",accent:"#ebbcba",background:"#191724"},sisyphus:{primary:"#F5F5F5",accent:"#E7E7E7",background:"#202020"},slate:{primary:"#7eb8f6",accent:"#8EA8FF",background:"#151C2F"},solarized:{primary:"#268bd2",accent:"#2aa198",background:"#002b36"},synthwave84:{primary:"#36f9f6",accent:"#b084eb",background:"#262335"},tokyonight:{primary:"#82aaff",accent:"#ff966c",background:"#1a1b26"},vercel:{primary:"#0070F3",accent:"#8E4EC6",background:"#000000"},vesper:{primary:"#FFC799",accent:"#FFC799",background:"#101010"},"warm-lightmode":{primary:"#9D681D",accent:"#CE661C",background:"#101014"},zenburn:{primary:"#8cd0d3",accent:"#93e0e3",background:"#3f3f3f"}},NAMES=Object.keys(PREVIEW).sort();var cache=new Map,pending=new Map;async function load(name){let hit=cache.get(name);if(hit)return hit;let inflight=pending.get(name);if(inflight)return inflight;if(!PREVIEW[name])throw Error(`Unknown theme: ${name}`);let p=import(`./themes/${name}.json`).then((m2)=>{let json=m2.default??m2;return cache.set(name,json),pending.delete(name),json});return pending.set(name,p),p}function get(name){return cache.get(name)}async function prime(name){await load(name).catch(()=>{return})}var DEFAULT_THEME="tokyonight",THEME_NAMES=NAMES;function syntax(theme){return SyntaxStyle.fromTheme(rules(theme))}function rules(theme){return[{scope:["default"],style:{foreground:theme.text}},{scope:["comment","comment.documentation"],style:{foreground:theme.syntaxComment,italic:!0}},{scope:["string","symbol"],style:{foreground:theme.syntaxString}},{scope:["number","boolean"],style:{foreground:theme.syntaxNumber}},{scope:["keyword"],style:{foreground:theme.syntaxKeyword,italic:!0}},{scope:["keyword.return","keyword.conditional","keyword.repeat"],style:{foreground:theme.syntaxKeyword,italic:!0}},{scope:["keyword.type"],style:{foreground:theme.syntaxType,bold:!0}},{scope:["keyword.function","function.method"],style:{foreground:theme.syntaxFunction}},{scope:["function","function.call"],style:{foreground:theme.syntaxFunction}},{scope:["variable","variable.parameter"],style:{foreground:theme.syntaxVariable}},{scope:["type"],style:{foreground:theme.syntaxType}},{scope:["operator"],style:{foreground:theme.syntaxOperator}},{scope:["punctuation","punctuation.bracket","punctuation.delimiter"],style:{foreground:theme.syntaxPunctuation}},{scope:["markup.heading"],style:{foreground:theme.markdownHeading,bold:!0}},{scope:["markup.strong"],style:{foreground:theme.markdownStrong,bold:!0}},{scope:["markup.italic"],style:{foreground:theme.markdownEmph,italic:!0}},{scope:["markup.link"],style:{foreground:theme.markdownLink,underline:!0}},{scope:["markup.raw"],style:{foreground:theme.markdownCode}},{scope:["markup.list"],style:{foreground:theme.markdownListItem}}]}var exports_preferences={};__export(exports_preferences,{usePref:()=>usePref,set:()=>set,reset:()=>reset,reload:()=>reload,prefs:()=>exports_preferences,load:()=>load2,get:()=>get2});var import_react15=__toESM(require_react_production(),1);import{join as join5}from"path";import{existsSync as existsSync6,mkdirSync as mkdirSync2,readFileSync,writeFileSync as writeFileSync2}from"fs";import{homedir as homedir2}from"os";import{join as join4}from"path";import{existsSync as existsSync5,mkdirSync,readdirSync,renameSync}from"fs";var HOME=()=>process.env.HOME||homedir2(),HERMES_HOME=()=>process.env.HERMES_HOME||join4(HOME(),".hermes"),migrated=!1;function configDir(){let dir=process.env.HERM_CONFIG_DIR||join4(HERMES_HOME(),"herm");if(!migrated)migrated=!0,maybeMigrateLegacy(dir);return dir}function maybeMigrateLegacy(target){if(process.env.HERM_CONFIG_DIR)return;let legacy=join4(HOME(),".config","herm");if(!existsSync5(legacy)||legacy===target)return;try{if(existsSync5(target)&&readdirSync(target).length>0)return;mkdirSync(target,{recursive:!0});for(let name of readdirSync(legacy)){let src=join4(legacy,name),dst=join4(target,name);if(existsSync5(dst))continue;try{renameSync(src,dst)}catch{}}}catch{}}var DEFAULTS={mouse:!0,targetFps:30};function configFile(){return join5(configDir(),"tui.json")}var cached=null;function reset(){cached=null}function reload(){cached=null;for(let l of listeners)l()}function load2(){if(cached)return cached;let CONFIG_FILE=configFile();try{if(!existsSync6(CONFIG_FILE)){let prefs2={...DEFAULTS};return cached=prefs2,prefs2}let raw=JSON.parse(readFileSync(CONFIG_FILE,"utf-8"));if(raw.eikonPath&&!raw.eikon)raw.eikon=raw.eikonPath.split("/").pop()?.replace(/\.eikon$/,""),delete raw.eikonPath;let prefs={...DEFAULTS,...raw};return cached=prefs,prefs}catch{let prefs={...DEFAULTS};return cached=prefs,prefs}}function save(partial){let current=load2();if(partial)Object.assign(current,partial);cached=current;try{let CONFIG_DIR=configDir();if(!existsSync6(CONFIG_DIR))mkdirSync2(CONFIG_DIR,{recursive:!0});let json=JSON.stringify(current,null,2)+`
3671
3671
  `;writeFileSync2(configFile(),json,"utf-8")}catch(err){if(process.env.PERF)console.error("[preferences] failed to save:",err)}}function get2(key){return load2()[key]}function set(key,value){if(load2()[key]===value)return;save({[key]:value});for(let l of listeners)l()}var listeners=new Set;function subscribe(l){return listeners.add(l),()=>listeners.delete(l)}function usePref(key){return import_react15.useSyncExternalStore(subscribe,()=>load2()[key])}var Ctx=import_react16.createContext(null),THEMES_SET=new Set(THEME_NAMES),ThemeProvider=({children,initial,mode:initialMode="dark"})=>{let pref=usePref("theme"),modePref=usePref("themeMode"),active=pref??initial??DEFAULT_THEME,mode=modePref==="light"||modePref==="dark"?modePref:initialMode,[tick,force]=import_react16.useState(0);import_react16.useEffect(()=>{if(get(active)&&get(DEFAULT_THEME))return;let cancelled=!1,need=[active,DEFAULT_THEME].filter((n)=>!get(n));return Promise.all(need.map((n)=>load(n).catch(()=>{return}))).then(()=>{if(!cancelled)force((n)=>n+1)}),()=>{cancelled=!0}},[active]);let resolved=import_react16.useMemo(()=>{let json=get(active)??get(DEFAULT_THEME);if(!json)return null;try{return resolveTheme(json,mode)}catch{let fallback=get(DEFAULT_THEME);return fallback?resolveTheme(fallback,mode):null}},[active,mode,tick]),set2=import_react16.useCallback((name)=>{if(!THEMES_SET.has(name))return!1;if(set("theme",name),!get(name))load(name).catch(()=>{});return!0},[]),setMode=import_react16.useCallback((mode2)=>{set("themeMode",mode2)},[]),has=import_react16.useCallback((name)=>THEMES_SET.has(name),[]),syntaxStyle=import_react16.useMemo(()=>resolved?syntax(resolved):null,[resolved]),value=import_react16.useMemo(()=>{if(!resolved||!syntaxStyle)return null;return{theme:resolved,syntaxStyle,name:active,mode,set:set2,setMode,names:THEME_NAMES,has}},[resolved,syntaxStyle,active,mode,set2,setMode,has]);if(!value)return null;return $jsx(Ctx.Provider,{value,children})},useTheme=makeUse(Ctx,"useTheme");var ANSI2=new RegExp(["\\x1B\\[[\\x30-\\x3F]*[\\x20-\\x2F]*[\\x40-\\x7E]","\\x1B\\[[\\x30-\\x3F]*[\\x20-\\x2F]*","\\x1B\\][^\\x07\\x1B]*(?:\\x07|\\x1B\\\\)?","\\x1B[PX^_][^\\x1B]*(?:\\x1B\\\\)?","\\x1B[\\x20-\\x7E]","\\x1B"].join("|"),"g"),CTRL=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/g;function sanitize(s){if(!s)return"";return s.replace(ANSI2,"").replace(CTRL,"")}function isDiff(s){if(!s)return!1;return/^--- a\//m.test(s)||/^@@ /m.test(s)||/^diff --git /m.test(s)}var CAP=80,WORD_CAP=40,tokens=(s)=>s.split(/(\s+)/).filter((t2)=>t2.length>0);function wordDiff(a,b2){let ta=tokens(a),tb=tokens(b2),p=0;while(p<ta.length&&p<tb.length&&ta[p]===tb[p])p++;let s=0;while(s<ta.length-p&&s<tb.length-p&&ta[ta.length-1-s]===tb[tb.length-1-s])s++;let seg=(t2)=>{let mid2=t2.slice(p,t2.length-s).join(""),out=[];if(p)out.push({text:t2.slice(0,p).join(""),hi:!1});if(mid2)out.push({text:mid2,hi:!0});if(s)out.push({text:t2.slice(t2.length-s).join(""),hi:!1});return out};return[seg(ta),seg(tb)]}function intraline(rows){let marks=rows.map(()=>null);if(rows.length>WORD_CAP)return marks;let del=(l)=>l.startsWith("-")&&!l.startsWith("---"),add=(l)=>l.startsWith("+")&&!l.startsWith("+++"),i=0;while(i<rows.length){if(!del(rows[i])){i++;continue}let j2=i;while(j2<rows.length&&del(rows[j2]))j2++;let k2=j2;while(k2<rows.length&&add(rows[k2]))k2++;let n=Math.min(j2-i,k2-j2);for(let d2=0;d2<n;d2++){let[rm,ad]=wordDiff(rows[i+d2].slice(1),rows[j2+d2].slice(1));marks[i+d2]=rm,marks[j2+d2]=ad}i=k2}return marks}var DiffBlock=import_react17.memo(({text:text2})=>{let theme=useTheme().theme,all=sanitize(text2).replace(/\n$/,"").split(`
3672
3672
  `),rows=all.slice(0,CAP),more=all.length-rows.length,marks=intraline(rows),fg2=(l)=>l.startsWith("@@")?theme.accent:l.startsWith("+++")||l.startsWith("---")?theme.textMuted:l.startsWith("+")?theme.success:l.startsWith("-")?theme.error:theme.textMuted;return $jsxs("box",{flexDirection:"column",backgroundColor:theme.backgroundPanel,children:[rows.map((l,i)=>{let segs=marks[i],bg2=l.startsWith("+")?theme.diffAddedBg:theme.diffRemovedBg;return $jsx("box",{height:1,overflow:"hidden",minWidth:0,children:$jsx("text",{fg:fg2(l),children:segs?$jsxs($Fragment,{children:[l[0],segs.map((s,j2)=>s.hi?$jsx("span",{bg:bg2,children:s.text},j2):s.text)]}):l||" "})},i)}),more>0?$jsx("box",{height:1,children:$jsxs("text",{fg:theme.textMuted,children:["\u2026 ",more," more lines"]})}):null]})});var import_react19=__toESM(require_react_production(),1);var import_react18=__toESM(require_react_production(),1);var FRAMES=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],MS=80,subs=new Set,tick=0,timer=null;function sub(fn){if(subs.add(fn),fn(tick),!timer)timer=setInterval(()=>{tick=(tick+1)%FRAMES.length;for(let s of Array.from(subs))s(tick)},MS);return()=>{if(subs.delete(fn),subs.size===0&&timer)clearInterval(timer),timer=null}}function useGlyph(active){let ref=import_react18.useRef(null);return import_react18.useEffect(()=>{if(!active)return;return sub((n)=>{let node=ref.current;if(node)node.children=[FRAMES[n]]})},[active]),ref}var Spinner=import_react18.memo((props)=>{let theme=useTheme().theme,color=props.color??theme.textMuted,on=exports_preferences.get("animations")!==!1,ref=useGlyph(on);return $jsxs("text",{children:[$jsx("span",{ref,fg:color,children:on?FRAMES[tick]:"\u22EF"}),props.label?$jsxs("span",{fg:color,children:[" ",props.label]}):null]})}),SpinGlyph=import_react18.memo((props)=>{let on=(props.active??!0)&&exports_preferences.get("animations")!==!1,ref=useGlyph(on);return $jsx("span",{ref,fg:props.fg,children:on?FRAMES[tick]:"\u22EF"})});function useSpinnerGlyph(active=!0){let on=exports_preferences.get("animations")!==!1&&active,[n,set2]=import_react18.useState(tick);return import_react18.useEffect(()=>on?sub(set2):void 0,[on]),on?FRAMES[n]:"\u22EF"}var SPEC={terminal:{icon:"$",verb:"",pending:"Writing command\u2026"},process:{icon:"\u229A",verb:"Process",pending:"Managing process\u2026"},execute_code:{icon:"\xBB",verb:"Exec",pending:"Writing script\u2026"},read_file:{icon:"\u2192",verb:"Read",pending:"Reading file\u2026"},write_file:{icon:"\u2190",verb:"Write",pending:"Preparing write\u2026"},patch:{icon:"\u2190",verb:"Edit",pending:"Preparing edit\u2026"},search_files:{icon:"\u2731",verb:"Search",pending:"Searching\u2026"},web_search:{icon:"\u25C8",verb:"Web",pending:"Searching web\u2026"},web_extract:{icon:"%",verb:"Fetch",pending:"Fetching page\u2026"},session_search:{icon:"\u21BA",verb:"Recall",pending:"Searching memory\u2026"},browser_navigate:{icon:"%",verb:"Navigate",pending:"Navigating\u2026"},browser_click:{icon:"\xB7",verb:"Click",pending:"Clicking\u2026"},browser_type:{icon:"\u2328",verb:"Type",pending:"Typing\u2026"},browser_snapshot:{icon:"\u2399",verb:"Snapshot",pending:"Capturing\u2026"},browser_vision:{icon:"\u25C9",verb:"Vision",pending:"Looking\u2026"},vision_analyze:{icon:"\u25C9",verb:"Vision",pending:"Analyzing image\u2026"},todo:{icon:"\u2630",verb:"Todo",pending:"Updating todos\u2026"},memory:{icon:"\u2691",verb:"Memory",pending:"Updating memory\u2026"},clarify:{icon:"?",verb:"Ask",pending:"Asking\u2026"},skill_view:{icon:"\u25C6",verb:"Skill",pending:"Loading skill\u2026"},skills_list:{icon:"\u25C6",verb:"Skills",pending:"Listing skills\u2026"},skill_manage:{icon:"\u25C6",verb:"Skill",pending:"Managing skill\u2026"},delegate_task:{icon:"\u2299",verb:"Delegate",pending:"Spawning agent\u2026"},cronjob:{icon:"\u25F7",verb:"Cron",pending:"Managing cron\u2026"},text_to_speech:{icon:"\u266A",verb:"TTS",pending:"Synthesizing\u2026"},image_generate:{icon:"\u2726",verb:"Image",pending:"Generating image\u2026"},video_generate:{icon:"\u2726",verb:"Video",pending:"Generating video\u2026"}},GENERIC={icon:"\u2699",verb:"",pending:"Running\u2026"};function spec(name){if(name.startsWith("subagent"))return{icon:"\u2299",verb:"Subagent",pending:"Running\u2026"};if(name.startsWith("mcp__")||name.startsWith("mcp:"))return{icon:"\u25C7",verb:"MCP",pending:"Calling\u2026"};return SPEC[name]??GENERIC}function ms(d2){if(d2==null)return"";if(d2<1000)return`${Math.round(d2)}ms`;if(d2<60000)return`${(d2/1000).toFixed(1)}s`;return`${Math.floor(d2/60000)}m${Math.round(d2%60000/1000)}s`}var lead=(branch)=>branch==="mid"?"\u251C\u2500 ":"\u2514\u2500 ",rail=(branch)=>branch==="mid"?"\u2502 ":" ",DetailRow=import_react19.memo((p)=>{let theme=useTheme().theme,fg2=p.detail.tone==="error"?theme.error:theme.textMuted,stem=rail(p.branch),fork=p.last?"\u2514\u2500 ":"\u251C\u2500 ",pad=p.last?" ":"\u2502 ",lines2=p.detail.text.replace(/\t/g," ").split(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "herm-tui",
3
- "version": "1.9.0-dev.28",
3
+ "version": "1.9.0-dev.29",
4
4
  "description": "A modern TUI for Hermes Agent",
5
5
  "license": "MIT",
6
6
  "repository": {