@psnext/slingcli 3.3.20260914-1 → 3.3.20260918-1

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 (72) hide show
  1. package/README.md +17 -0
  2. package/bin/sling.js +117 -43
  3. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/chunks/{chunk-BRL3MDQL.js → chunk-VY7PRZDT.js} +1 -1
  4. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/cli.js +1 -1
  5. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/index.js +1 -1
  6. package/node_modules/@earendil-works/pi-coding-agent/dist/bundle/rpc-entry.js +1 -1
  7. package/node_modules/@earendil-works/pi-coding-agent/npm-shrinkwrap.json +2149 -248
  8. package/node_modules/@earendil-works/pi-coding-agent/package.json +1 -0
  9. package/node_modules/@types/node/README.md +1 -1
  10. package/node_modules/@types/node/child_process.d.ts +1 -1
  11. package/node_modules/@types/node/crypto.d.ts +20 -8
  12. package/node_modules/@types/node/ffi.d.ts +14 -0
  13. package/node_modules/@types/node/http2.d.ts +3 -2
  14. package/node_modules/@types/node/net.d.ts +16 -4
  15. package/node_modules/@types/node/package.json +2 -2
  16. package/node_modules/@types/node/process.d.ts +1 -0
  17. package/node_modules/@types/node/quic.d.ts +39 -1
  18. package/node_modules/@types/node/stream/iter.d.ts +9 -12
  19. package/node_modules/@types/node/test/reporters.d.ts +1 -0
  20. package/node_modules/@types/node/test.d.ts +72 -0
  21. package/node_modules/@types/node/tls.d.ts +14 -10
  22. package/node_modules/@types/node/vm.d.ts +2 -1
  23. package/node_modules/@types/node/worker_threads.d.ts +4 -1
  24. package/node_modules/brace-expansion/dist/commonjs/index.d.ts +4 -0
  25. package/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +1 -1
  26. package/node_modules/brace-expansion/dist/commonjs/index.js +69 -25
  27. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  28. package/node_modules/brace-expansion/dist/esm/index.d.ts +4 -0
  29. package/node_modules/brace-expansion/dist/esm/index.d.ts.map +1 -1
  30. package/node_modules/brace-expansion/dist/esm/index.js +68 -24
  31. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  32. package/node_modules/brace-expansion/package.json +2 -1
  33. package/node_modules/fast-uri/index.js +10 -6
  34. package/node_modules/fast-uri/package.json +1 -1
  35. package/node_modules/fast-uri/test/security-normalization.test.js +38 -0
  36. package/node_modules/hono/README.md +1 -1
  37. package/node_modules/hono/dist/adapter/aws-lambda/handler.js +5 -4
  38. package/node_modules/hono/dist/cjs/adapter/aws-lambda/handler.js +5 -4
  39. package/node_modules/hono/dist/cjs/context.js +1 -1
  40. package/node_modules/hono/dist/cjs/helper/accepts/accepts.js +1 -1
  41. package/node_modules/hono/dist/cjs/jsx/dom/render.js +44 -8
  42. package/node_modules/hono/dist/cjs/middleware/language/language.js +4 -1
  43. package/node_modules/hono/dist/cjs/request.js +4 -1
  44. package/node_modules/hono/dist/cjs/utils/accept.js +4 -7
  45. package/node_modules/hono/dist/context.js +1 -1
  46. package/node_modules/hono/dist/helper/accepts/accepts.js +1 -1
  47. package/node_modules/hono/dist/jsx/dom/render.js +44 -8
  48. package/node_modules/hono/dist/middleware/language/language.js +4 -1
  49. package/node_modules/hono/dist/request.js +4 -1
  50. package/node_modules/hono/dist/types/helper/proxy/index.d.ts +1 -1
  51. package/node_modules/hono/dist/types/helper/route/index.d.ts +2 -2
  52. package/node_modules/hono/dist/types/middleware/combine/index.d.ts +3 -1
  53. package/node_modules/hono/dist/types/utils/types.d.ts +1 -1
  54. package/node_modules/hono/dist/utils/accept.js +4 -7
  55. package/node_modules/hono/package.json +1 -1
  56. package/node_modules/ip-address/README.md +114 -114
  57. package/node_modules/ip-address/dist/common.d.ts +5 -0
  58. package/node_modules/ip-address/dist/common.js +12 -0
  59. package/node_modules/ip-address/dist/common.js.map +1 -1
  60. package/node_modules/ip-address/dist/ipv4.d.ts +10 -3
  61. package/node_modules/ip-address/dist/ipv4.js +20 -5
  62. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  63. package/node_modules/ip-address/dist/ipv6.d.ts +5 -1
  64. package/node_modules/ip-address/dist/ipv6.js +18 -3
  65. package/node_modules/ip-address/dist/ipv6.js.map +1 -1
  66. package/node_modules/ip-address/package.json +1 -1
  67. package/node_modules/proxy-addr/HISTORY.md +60 -54
  68. package/node_modules/proxy-addr/README.md +1 -1
  69. package/node_modules/proxy-addr/index.js +32 -0
  70. package/node_modules/proxy-addr/package.json +8 -4
  71. package/package.json +2 -2
  72. package/slingshot/index.js +267 -264
@@ -1247,7 +1247,7 @@ ${body}
1247
1247
 
1248
1248
  ${args}`:skillBlock}catch(err2){return this._extensionRunner.emitError({extensionPath:skill.filePath,event:"skill_expansion",error:err2 instanceof Error?err2.message:String(err2)}),text}}async steer(text,images){text.startsWith("/")&&this._throwIfExtensionCommand(text);let expandedText=this._expandSkillCommand(text);expandedText=expandPromptTemplate(expandedText,[...this.promptTemplates]),await this._queueSteer(expandedText,images)}async followUp(text,images){text.startsWith("/")&&this._throwIfExtensionCommand(text);let expandedText=this._expandSkillCommand(text);expandedText=expandPromptTemplate(expandedText,[...this.promptTemplates]),await this._queueFollowUp(expandedText,images)}async _queueSteer(text,images){this._steeringMessages.push(text),this._emitQueueUpdate();let content=[{type:"text",text}];images&&content.push(...images),this.agent.steer({role:"user",content,timestamp:Date.now()})}async _queueFollowUp(text,images){this._followUpMessages.push(text),this._emitQueueUpdate();let content=[{type:"text",text}];images&&content.push(...images),this.agent.followUp({role:"user",content,timestamp:Date.now()})}_throwIfExtensionCommand(text){let spaceIndex=text.indexOf(" "),commandName=spaceIndex===-1?text.slice(1):text.slice(1,spaceIndex);if(this._extensionRunner.getCommand(commandName))throw new Error(`Extension command "/${commandName}" cannot be queued. Use prompt() or execute the command when not streaming.`)}async sendCustomMessage(message,options){let appMessage={role:"custom",customType:message.customType,content:message.content??[],display:message.display,details:message.details,timestamp:Date.now()};options?.deliverAs==="nextTurn"?this._pendingNextTurnMessages.push(appMessage):this.isStreaming&&options?.triggerTurn!==!1?options?.deliverAs==="followUp"?this.agent.followUp(appMessage):this.agent.steer(appMessage):options?.triggerTurn?await this._runAgentPrompt(appMessage):this.isStreaming?this._pendingCustomMessages.push(appMessage):this._appendCustomMessage(appMessage)}_appendCustomMessage(appMessage){this.agent.state.messages.push(appMessage),this.sessionManager.appendCustomMessageEntry(appMessage.customType,appMessage.content,appMessage.display,appMessage.details),this._emit({type:"message_start",message:appMessage}),this._emit({type:"message_end",message:appMessage})}_flushPendingCustomMessages(){if(this._pendingCustomMessages.length===0)return;let pending=this._pendingCustomMessages;this._pendingCustomMessages=[];for(let appMessage of pending)this._appendCustomMessage(appMessage)}async sendUserMessage(content,options){let text,images;if(typeof content=="string")text=content;else{let textParts=[];images=[];for(let part of content)part.type==="text"?textParts.push(part.text):images.push(part);text=textParts.join(`
1249
1249
  `),images.length===0&&(images=void 0)}await this.prompt(text,{expandPromptTemplates:options?.expandPromptTemplates??!1,streamingBehavior:options?.deliverAs,images,source:"extension"})}clearQueue(){let steering=[...this._steeringMessages],followUp=[...this._followUpMessages];return this._steeringMessages=[],this._followUpMessages=[],this.agent.clearAllQueues(),this._emitQueueUpdate(),{steering,followUp}}get pendingMessageCount(){return this._steeringMessages.length+this._followUpMessages.length}getSteeringMessages(){return this._steeringMessages}getFollowUpMessages(){return this._followUpMessages}get resourceLoader(){return this._resourceLoader}async abort(){this.abortRetry(),this.agent.abort(),await this.waitForIdle()}async waitForIdle(){this.isIdle||await this._getIdleWaitPromise()}async _emitModelSelect(nextModel,previousModel,source){modelsAreEqual(previousModel,nextModel)||await this._extensionRunner.emit({type:"model_select",model:nextModel,previousModel,source})}async setModel(model,options={}){if(!await this._modelRuntime.checkAuth(model.provider))throw new Error(`No API key for ${model.provider}/${model.id}`);let previousModel=this.model,thinkingLevel=this._getThinkingLevelForModelSwitch(model);this.agent.state.model=model,this.sessionManager.appendModelChange(model.provider,model.id),options.persist&&(this.settingsManager.setDefaultModelAndProvider(model.provider,model.id),this._addPersistedDefaultToNonEmptyScope(model)),this.setThinkingLevel(thinkingLevel),await this._emitModelSelect(model,previousModel,"set")}_addPersistedDefaultToNonEmptyScope(model){if(this._scopedModels.length===0||this._scopedModels.some(scoped=>modelsAreEqual(scoped.model,model)))return;this._scopedModels=[...this._scopedModels,{model}];let enabledModels=this.settingsManager.getEnabledModels();if(!enabledModels?.length)return;let modelReference=`${model.provider}/${model.id}`;enabledModels.some(pattern=>pattern.toLowerCase()===modelReference.toLowerCase())||this.settingsManager.setEnabledModels([...enabledModels,modelReference])}async cycleModel(direction="forward",options={}){return this._scopedModels.length>0?this._cycleScopedModel(direction,options):this._cycleAvailableModel(direction,options)}async _cycleScopedModel(direction,options){let availableIds=new Set(this._modelRuntime.getAvailableSnapshot().map(model=>`${model.provider}\0${model.id}`)),scopedModels=this._scopedModels.filter(scoped=>availableIds.has(`${scoped.model.provider}\0${scoped.model.id}`));if(scopedModels.length<=1)return;let currentModel=this.model,currentIndex=scopedModels.findIndex(sm=>modelsAreEqual(sm.model,currentModel));currentIndex===-1&&(currentIndex=0);let len=scopedModels.length,nextIndex=direction==="forward"?(currentIndex+1)%len:(currentIndex-1+len)%len,next=scopedModels[nextIndex],thinkingLevel=this._getThinkingLevelForModelSwitch(next.model,next.thinkingLevel);return this.agent.state.model=next.model,this.sessionManager.appendModelChange(next.model.provider,next.model.id),options.persist&&(this.settingsManager.setDefaultModelAndProvider(next.model.provider,next.model.id),this._addPersistedDefaultToNonEmptyScope(next.model)),this.setThinkingLevel(thinkingLevel),await this._emitModelSelect(next.model,currentModel,"cycle"),{model:next.model,thinkingLevel:this.thinkingLevel,isScoped:!0}}async _cycleAvailableModel(direction,options){let availableModels=this._modelRuntime.getAvailableSnapshot();if(availableModels.length<=1)return;let currentModel=this.model,currentIndex=availableModels.findIndex(m2=>modelsAreEqual(m2,currentModel));currentIndex===-1&&(currentIndex=0);let len=availableModels.length,nextIndex=direction==="forward"?(currentIndex+1)%len:(currentIndex-1+len)%len,nextModel=availableModels[nextIndex],thinkingLevel=this._getThinkingLevelForModelSwitch(nextModel);return this.agent.state.model=nextModel,this.sessionManager.appendModelChange(nextModel.provider,nextModel.id),options.persist&&(this.settingsManager.setDefaultModelAndProvider(nextModel.provider,nextModel.id),this._addPersistedDefaultToNonEmptyScope(nextModel)),this.setThinkingLevel(thinkingLevel),await this._emitModelSelect(nextModel,currentModel,"cycle"),{model:nextModel,thinkingLevel:this.thinkingLevel,isScoped:!1}}setThinkingLevel(level,options={}){let availableLevels=this.getAvailableThinkingLevels(),effectiveLevel=availableLevels.includes(level)?level:this._clampThinkingLevel(level,availableLevels),previousLevel=this.agent.state.thinkingLevel,isChanging=effectiveLevel!==previousLevel;this.agent.state.thinkingLevel=effectiveLevel,options.persist&&this.settingsManager.setDefaultThinkingLevel(level),isChanging&&(this.sessionManager.appendThinkingLevelChange(effectiveLevel),this._emit({type:"thinking_level_changed",level:effectiveLevel}),this._extensionRunner.emit({type:"thinking_level_select",level:effectiveLevel,previousLevel}))}cycleThinkingLevel(options={}){if(!this.supportsThinking())return;let levels=this.getAvailableThinkingLevels(),nextIndex=(levels.indexOf(this.thinkingLevel)+1)%levels.length,nextLevel=levels[nextIndex];return this.setThinkingLevel(nextLevel,options),nextLevel}getAvailableThinkingLevels(){return this.model?getSupportedThinkingLevels(this.model):[...THINKING_LEVEL_OPTIONS]}supportsThinking(){return!!this.model?.reasoning}_getThinkingLevelForModelSwitch(targetModel,explicitLevel){if(explicitLevel!==void 0)return explicitLevel;if(targetModel){let perModel=this.settingsManager.getModelThinkingLevel(targetModel.provider,targetModel.id);if(perModel!==void 0)return perModel}return this.settingsManager.getDefaultThinkingLevel()??this.thinkingLevel??DEFAULT_THINKING_LEVEL}_clampThinkingLevel(level,_availableLevels){return this.model?clampThinkingLevel(this.model,level):"off"}syncQueueModesFromSettings(){this.agent.steeringMode=this.settingsManager.getSteeringMode(),this.agent.followUpMode=this.settingsManager.getFollowUpMode()}setSteeringMode(mode){this.agent.steeringMode=mode,this.settingsManager.setSteeringMode(mode)}setFollowUpMode(mode){this.agent.followUpMode=mode,this.settingsManager.setFollowUpMode(mode)}async _runDefaultCompaction(preparation,requestModel,apiKey,headers,customInstructions,signal,env2,reason){return compact(preparation,requestModel,apiKey,headers,customInstructions,signal,this.thinkingLevel,this.agent.streamFunction,env2,this.settingsManager.getRetrySettings(),this._summarizationRetryCallbacks({source:"compaction",reason}),void 0)}async compact(customInstructions){await this.abort(),this._compactionAbortController=new AbortController,this._emit({type:"compaction_start",reason:"manual"});let fromExtension=!1;try{if(!this.model)throw new Error(formatNoModelSelectedMessage());let{model:requestModel,apiKey,headers,env:env2}=await this._getSummarizationRequestAuth(this.model),pathEntries=this.sessionManager.getBranch(),settings2=this.settingsManager.getCompactionSettings(),preparation=prepareCompaction(pathEntries,settings2);if(!preparation)throw pathEntries[pathEntries.length-1]?.type==="compaction"?new Error("Already compacted"):new Error("Nothing to compact (session too small)");let extensionCompaction;if(this._extensionRunner.hasHandlers("session_before_compact")){let result=await this._extensionRunner.emit({type:"session_before_compact",preparation,branchEntries:pathEntries,customInstructions,reason:"manual",willRetry:!1,signal:this._compactionAbortController.signal});if(result?.cancel)throw new Error("Compaction cancelled");result?.compaction&&(extensionCompaction=result.compaction,fromExtension=!0)}let summary,firstKeptEntryId,tokensBefore,usage,details;if(extensionCompaction)summary=extensionCompaction.summary,firstKeptEntryId=extensionCompaction.firstKeptEntryId,tokensBefore=extensionCompaction.tokensBefore,usage=extensionCompaction.usage,details=extensionCompaction.details;else{let result=await this._runDefaultCompaction(preparation,requestModel,apiKey,headers,customInstructions,this._compactionAbortController.signal,env2,"manual");summary=result.summary,firstKeptEntryId=result.firstKeptEntryId,tokensBefore=result.tokensBefore,usage=result.usage,details=result.details}if(this._compactionAbortController.signal.aborted)throw new Error("Compaction cancelled");this.sessionManager.appendCompaction(summary,firstKeptEntryId,tokensBefore,details,fromExtension,usage);let newEntries=this.sessionManager.getEntries(),sessionContext=this.sessionManager.buildSessionContext();this.agent.state.messages=sessionContext.messages;let estimatedTokensAfter=estimateMessagesTokens(sessionContext.messages),savedCompactionEntry=newEntries.find(e=>e.type==="compaction"&&e.summary===summary);this._extensionRunner&&savedCompactionEntry&&await this._extensionRunner.emit({type:"session_compact",compactionEntry:savedCompactionEntry,fromExtension,reason:"manual",willRetry:!1});let compactionResult={summary,firstKeptEntryId,tokensBefore,estimatedTokensAfter,usage,details};return this._compactionAbortController=void 0,this._emit({type:"compaction_end",reason:"manual",result:compactionResult,aborted:!1,willRetry:!1}),compactionResult}catch(error){let message=error instanceof Error?error.message:String(error),aborted=message==="Compaction cancelled"||error instanceof Error&&error.name==="AbortError",errorMessage2=aborted?void 0:`Compaction failed: ${message}`;throw this._compactionAbortController=void 0,this._emit({type:"compaction_end",reason:"manual",result:void 0,aborted,willRetry:!1,errorMessage:errorMessage2}),await this._emitSessionCompactFailed({reason:"manual",errorMessage:errorMessage2,aborted,willRetry:!1,fromExtension}),error}finally{this._compactionAbortController=void 0}}abortCompaction(){this._compactionAbortController?.abort(),this._autoCompactionAbortController?.abort()}abortBranchSummary(){this._branchSummaryAbortController?.abort()}async _checkCompaction(assistantMessage,skipAbortedCheck=!0){let settings2=this.settingsManager.getCompactionSettings();if(!settings2.enabled||skipAbortedCheck&&assistantMessage.stopReason==="aborted")return!1;let contextWindow=this.model?.contextWindow??0,sameModel=this.model&&assistantMessage.provider===this.model.provider&&assistantMessage.model===this.model.id,compactionEntry=getLatestCompactionEntry(this.sessionManager.getBranch());if(compactionEntry!==null&&assistantMessage.timestamp<=new Date(compactionEntry.timestamp).getTime())return!1;let contextOverflow=sameModel&&isContextOverflow(assistantMessage,contextWindow),recoverableLength=sameModel&&isRecoverableLength(assistantMessage,this.model?.maxTokens??0);if(contextOverflow||recoverableLength){let willRetry=assistantMessage.stopReason!=="stop";if(!willRetry)return await this._runAutoCompaction("overflow",!1);if(this._overflowRecoveryAttempted){let errorMessage2=contextOverflow?"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.":"Truncated response recovery failed after one compact-and-retry attempt.";return this._emit({type:"compaction_end",reason:"overflow",result:void 0,aborted:!1,willRetry:!1,errorMessage:errorMessage2}),await this._emitSessionCompactFailed({reason:"overflow",errorMessage:errorMessage2,aborted:!1,willRetry:!1,fromExtension:!1}),!1}this._overflowRecoveryAttempted=!0;let messages=this.agent.state.messages;return messages.length>0&&messages[messages.length-1].role==="assistant"&&(this.agent.state.messages=messages.slice(0,-1)),await this._runAutoCompaction("overflow",willRetry)}let contextTokens,directContextTokens=assistantMessage.usage?calculateContextTokens(assistantMessage.usage):0;if(assistantMessage.stopReason==="error"||directContextTokens===0){let messages=this.agent.state.messages,estimate=estimateContextTokens(messages);if(estimate.lastUsageIndex!==null){let usageMsg=messages[estimate.lastUsageIndex];if(compactionEntry&&usageMsg.role==="assistant"&&usageMsg.timestamp<=new Date(compactionEntry.timestamp).getTime())return!1}contextTokens=estimate.tokens}else contextTokens=directContextTokens;return shouldCompact(contextTokens,contextWindow,settings2)?await this._runAutoCompaction("threshold",!1):!1}async _runAutoCompaction(reason,willRetry){let settings2=this.settingsManager.getCompactionSettings(),started=!1,fromExtension=!1;try{if(!this.model)return!1;let{model:requestModel,apiKey,headers,env:env2}=await this._getSummarizationRequestAuth(this.model),pathEntries=this.sessionManager.getBranch(),preparation=prepareCompaction(pathEntries,settings2);if(!preparation)return!1;this._emit({type:"compaction_start",reason}),this._autoCompactionAbortController=new AbortController,started=!0;let extensionCompaction;if(this._extensionRunner.hasHandlers("session_before_compact")){let extensionResult=await this._extensionRunner.emit({type:"session_before_compact",preparation,branchEntries:pathEntries,customInstructions:void 0,reason,willRetry,signal:this._autoCompactionAbortController.signal});if(extensionResult?.cancel)return this._emit({type:"compaction_end",reason,result:void 0,aborted:!0,willRetry:!1}),await this._emitSessionCompactFailed({reason,aborted:!0,willRetry:!1,fromExtension:!1}),!1;extensionResult?.compaction&&(extensionCompaction=extensionResult.compaction,fromExtension=!0)}let summary,firstKeptEntryId,tokensBefore,usage,details;if(extensionCompaction)summary=extensionCompaction.summary,firstKeptEntryId=extensionCompaction.firstKeptEntryId,tokensBefore=extensionCompaction.tokensBefore,usage=extensionCompaction.usage,details=extensionCompaction.details;else{let compactResult=await this._runDefaultCompaction(preparation,requestModel,apiKey,headers,void 0,this._autoCompactionAbortController.signal,env2,reason);summary=compactResult.summary,firstKeptEntryId=compactResult.firstKeptEntryId,tokensBefore=compactResult.tokensBefore,usage=compactResult.usage,details=compactResult.details}if(this._autoCompactionAbortController.signal.aborted)return this._emit({type:"compaction_end",reason,result:void 0,aborted:!0,willRetry:!1}),await this._emitSessionCompactFailed({reason,aborted:!0,willRetry:!1,fromExtension}),!1;this.sessionManager.appendCompaction(summary,firstKeptEntryId,tokensBefore,details,fromExtension,usage);let newEntries=this.sessionManager.getEntries(),sessionContext=this.sessionManager.buildSessionContext();this.agent.state.messages=sessionContext.messages;let estimatedTokensAfter=estimateMessagesTokens(sessionContext.messages),savedCompactionEntry=newEntries.find(e=>e.type==="compaction"&&e.summary===summary);this._extensionRunner&&savedCompactionEntry&&await this._extensionRunner.emit({type:"session_compact",compactionEntry:savedCompactionEntry,fromExtension,reason,willRetry});let result={summary,firstKeptEntryId,tokensBefore,estimatedTokensAfter,usage,details};if(this._emit({type:"compaction_end",reason,result,aborted:!1,willRetry}),willRetry){let messages=this.agent.state.messages,lastMsg=messages[messages.length-1];return lastMsg?.role==="assistant"&&(lastMsg.stopReason==="error"||lastMsg.stopReason==="length")&&(this.agent.state.messages=messages.slice(0,-1)),!0}return this.agent.hasQueuedMessages()}catch(error){let errorMessage2=error instanceof Error?error.message:"compaction failed";if(started){let formattedErrorMessage=reason==="overflow"?`Context overflow recovery failed: ${errorMessage2}`:`Auto-compaction failed: ${errorMessage2}`;this._emit({type:"compaction_end",reason,result:void 0,aborted:!1,willRetry:!1,errorMessage:formattedErrorMessage}),await this._emitSessionCompactFailed({reason,errorMessage:formattedErrorMessage,aborted:!1,willRetry:!1,fromExtension})}return!1}finally{this._autoCompactionAbortController=void 0}}setAutoCompactionEnabled(enabled){this.settingsManager.setCompactionEnabled(enabled)}get autoCompactionEnabled(){return this.settingsManager.getCompactionEnabled()}async bindExtensions(bindings){bindings.uiContext!==void 0&&(this._extensionUIContext=bindings.uiContext),bindings.mode!==void 0&&(this._extensionMode=bindings.mode),bindings.commandContextActions!==void 0&&(this._extensionCommandContextActions=bindings.commandContextActions),bindings.abortHandler!==void 0&&(this._extensionAbortHandler=bindings.abortHandler),bindings.shutdownHandler!==void 0&&(this._extensionShutdownHandler=bindings.shutdownHandler),bindings.onError!==void 0&&(this._extensionErrorListener=bindings.onError),this._applyExtensionBindings(this._extensionRunner),await this._extensionRunner.emit(this._sessionStartEvent),await this.extendResourcesFromExtensions(this._sessionStartEvent.reason==="reload"?"reload":"startup")}async extendResourcesFromExtensions(reason){if(!this._extensionRunner.hasHandlers("resources_discover"))return;let{skillPaths,promptPaths,themePaths}=await this._extensionRunner.emitResourcesDiscover(this._cwd,reason);if(skillPaths.length===0&&promptPaths.length===0&&themePaths.length===0)return;let extensionPaths={skillPaths:this.buildExtensionResourcePaths(skillPaths),promptPaths:this.buildExtensionResourcePaths(promptPaths),themePaths:this.buildExtensionResourcePaths(themePaths)};this._resourceLoader.extendResources(extensionPaths),this._baseSystemPrompt=this._rebuildSystemPrompt(this.getActiveToolNames()),this.agent.state.systemPrompt=this._baseSystemPrompt}buildExtensionResourcePaths(entries){return entries.map(entry=>{let source=this.getExtensionSourceLabel(entry.extensionPath),baseDir=entry.extensionPath.startsWith("<")?void 0:dirname12(entry.extensionPath);return{path:entry.path,metadata:{source,scope:"temporary",origin:"top-level",baseDir}}})}getExtensionSourceLabel(extensionPath){return extensionPath.startsWith("<")?`extension:${extensionPath.replace(/[<>]/g,"")}`:`extension:${basename7(extensionPath).replace(/\.(ts|js)$/,"")}`}_applyExtensionBindings(runner){runner.setUIContext(this._extensionUIContext,this._extensionMode),runner.bindCommandContext(this._extensionCommandContextActions),this._extensionErrorUnsubscriber?.(),this._extensionErrorUnsubscriber=this._extensionErrorListener?runner.onError(this._extensionErrorListener):void 0}_refreshCurrentModelFromRegistry(){let currentModel=this.model;if(!currentModel)return;let refreshedModel=this._modelRuntime.getModel(currentModel.provider,currentModel.id);!refreshedModel||refreshedModel===currentModel||(this.agent.state.model=refreshedModel)}_bindExtensionCore(runner){let getCommands=()=>{let extensionCommands=runner.getRegisteredCommands().map(command=>({name:command.invocationName,description:command.description,source:"extension",sourceInfo:command.sourceInfo})),templates=this.promptTemplates.map(template=>({name:template.name,description:template.description,source:"prompt",sourceInfo:template.sourceInfo})),skills=this._resourceLoader.getSkills().skills.map(skill=>({name:`skill:${skill.name}`,description:skill.description,source:"skill",sourceInfo:skill.sourceInfo}));return[...extensionCommands,...templates,...skills]};runner.bindCore({sendMessage:(message,options)=>{this.sendCustomMessage(message,options).catch(err2=>{runner.emitError({extensionPath:"<runtime>",event:"send_message",error:err2 instanceof Error?err2.message:String(err2)})})},sendUserMessage:(content,options)=>{this.sendUserMessage(content,options).catch(err2=>{runner.emitError({extensionPath:"<runtime>",event:"send_user_message",error:err2 instanceof Error?err2.message:String(err2)})})},appendEntry:(customType,data)=>{let entryId=this.sessionManager.appendCustomEntry(customType,data),entry=this.sessionManager.getEntry(entryId);entry&&this._emit({type:"entry_appended",entry})},setSessionName:name=>{this.setSessionName(name)},getSessionName:()=>this.sessionManager.getSessionName(),setLabel:(entryId,label)=>{this.sessionManager.appendLabelChange(entryId,label)},getActiveTools:()=>this.getActiveToolNames(),getAllTools:()=>this.getAllTools(),setActiveTools:toolNames=>this.setActiveToolsByName(toolNames),refreshTools:()=>this._refreshToolRegistry(),getCommands,setModel:async model=>this._modelRuntime.hasConfiguredAuth(model.provider)?(await this.setModel(model),!0):!1,getThinkingLevel:()=>this.thinkingLevel,setThinkingLevel:level=>this.setThinkingLevel(level)},{getModel:()=>this.model,getScopedModels:()=>this._scopedModels,isIdle:()=>this.isIdle,isProjectTrusted:()=>this.settingsManager.isProjectTrusted(),getSignal:()=>this.agent.signal,abort:()=>{if(this._extensionAbortHandler){this._extensionAbortHandler();return}this.abort()},hasPendingMessages:()=>this.pendingMessageCount>0,shutdown:()=>{this._extensionShutdownHandler?.()},getContextUsage:()=>this.getContextUsage(),compact:options=>{(async()=>{try{let result=await this.compact(options?.customInstructions);options?.onComplete?.(result)}catch(error){let err2=error instanceof Error?error:new Error(String(error));options?.onError?.(err2)}})()},getSystemPrompt:()=>this.systemPrompt,getSystemPromptOptions:()=>this._baseSystemPromptOptions},{registerProvider:(name,config)=>{this._modelRuntime.registerProvider(name,config),this._refreshCurrentModelFromRegistry()},registerNativeProvider:provider=>{this._modelRuntime.registerNativeProvider(provider),this._refreshCurrentModelFromRegistry()},unregisterProvider:name=>{this._modelRuntime.unregisterProvider(name),this._refreshCurrentModelFromRegistry()}})}_refreshToolRegistry(options){let previousRegistryNames=new Set(this._toolRegistry.keys()),previousActiveToolNames=this.getActiveToolNames(),allowedToolNames=this._allowedToolNames,excludedToolNames=this._excludedToolNames,isAllowedTool=name=>(!allowedToolNames||allowedToolNames.has(name))&&!excludedToolNames?.has(name),allCustomTools=[...this._extensionRunner.getAllRegisteredTools(),...this._customTools.map(definition=>({definition,sourceInfo:createSyntheticSourceInfo(`<sdk:${definition.name}>`,{source:"sdk"})}))].filter(tool=>isAllowedTool(tool.definition.name)),definitionRegistry=new Map(Array.from(this._baseToolDefinitions.entries()).filter(([name])=>isAllowedTool(name)).map(([name,definition])=>[name,{definition,sourceInfo:createSyntheticSourceInfo(`<builtin:${name}>`,{source:"builtin"})}]));for(let tool of allCustomTools)definitionRegistry.set(tool.definition.name,{definition:tool.definition,sourceInfo:tool.sourceInfo});this._toolDefinitions=definitionRegistry,this._toolPromptSnippets=new Map(Array.from(definitionRegistry.values()).map(({definition})=>{let snippet=this._normalizePromptSnippet(definition.promptSnippet);return snippet?[definition.name,snippet]:void 0}).filter(entry=>entry!==void 0)),this._toolPromptGuidelines=new Map(Array.from(definitionRegistry.values()).map(({definition})=>{let guidelines=this._normalizePromptGuidelines(definition.promptGuidelines);return guidelines.length>0?[definition.name,guidelines]:void 0}).filter(entry=>entry!==void 0));let runner=this._extensionRunner,wrappedExtensionTools=wrapRegisteredTools(allCustomTools,runner),wrappedBuiltInTools=wrapRegisteredTools(Array.from(this._baseToolDefinitions.values()).filter(definition=>isAllowedTool(definition.name)).map(definition=>({definition,sourceInfo:createSyntheticSourceInfo(`<builtin:${definition.name}>`,{source:"builtin"})})),runner),toolRegistry=new Map(wrappedBuiltInTools.map(tool=>[tool.name,tool]));for(let tool of wrappedExtensionTools)toolRegistry.set(tool.name,tool);this._toolRegistry=toolRegistry;let nextActiveToolNames=(options?.activeToolNames?[...options.activeToolNames]:[...previousActiveToolNames]).filter(name=>isAllowedTool(name));if(allowedToolNames)for(let toolName of this._toolRegistry.keys())allowedToolNames.has(toolName)&&nextActiveToolNames.push(toolName);else if(options?.includeAllExtensionTools)for(let tool of wrappedExtensionTools)nextActiveToolNames.push(tool.name);else if(!options?.activeToolNames)for(let toolName of this._toolRegistry.keys())previousRegistryNames.has(toolName)||nextActiveToolNames.push(toolName);this.setActiveToolsByName([...new Set(nextActiveToolNames)])}_buildRuntime(options){let autoResizeImages=this.settingsManager.getImageAutoResize(),shellCommandPrefix=this.settingsManager.getShellCommandPrefix(),shellPath=this.settingsManager.getShellPath(),baseToolDefinitions=this._baseToolsOverride?Object.fromEntries(Object.entries(this._baseToolsOverride).map(([name,tool])=>[name,createToolDefinitionFromAgentTool(tool)])):createAllToolDefinitions(this._cwd,{read:{autoResizeImages},bash:{commandPrefix:shellCommandPrefix,shellPath}});this._baseToolDefinitions=new Map(Object.entries(baseToolDefinitions).map(([name,tool])=>[name,tool]));let extensionsResult=this._resourceLoader.getExtensions();if(options.flagValues)for(let[name,value]of options.flagValues)extensionsResult.runtime.flagValues.set(name,value);this._extensionRunner=new ExtensionRunner(extensionsResult.extensions,extensionsResult.runtime,this._cwd,this.sessionManager,new ModelRegistry(this._modelRuntime)),this._extensionRunnerRef&&(this._extensionRunnerRef.current=this._extensionRunner),this._bindExtensionCore(this._extensionRunner),this._applyExtensionBindings(this._extensionRunner);let defaultActiveToolNames=this._baseToolsOverride?Object.keys(this._baseToolsOverride):["read","bash","edit","write"],baseActiveToolNames=options.activeToolNames??defaultActiveToolNames;this._refreshToolRegistry({activeToolNames:baseActiveToolNames,includeAllExtensionTools:options.includeAllExtensionTools})}async reload(options){let oldRunner=this._extensionRunner,previousFlagValues=oldRunner.getFlagValues();await emitSessionShutdownEvent(oldRunner,{type:"session_shutdown",reason:"reload"}),oldRunner.invalidate(),await this.settingsManager.reload(),this.syncQueueModesFromSettings(),resetApiProviders(),await this._resourceLoader.reload(),this._buildRuntime({activeToolNames:this.getActiveToolNames(),flagValues:previousFlagValues,includeAllExtensionTools:!0}),(this._extensionUIContext||this._extensionCommandContextActions||this._extensionShutdownHandler||this._extensionErrorListener)&&(await options?.beforeSessionStart?.(),await this._extensionRunner.emit({type:"session_start",reason:"reload"}),await this.extendResourcesFromExtensions("reload"))}_isRetryableError(message){return isContextOverflow(message,this.model?.contextWindow??0)?!1:isRetryableAssistantError(message)}_summarizationRetryCallbacks(source){return{onRetryScheduled:(attempt2,maxAttempts,delayMs,errorMessage2)=>{this._emit({type:"summarization_retry_scheduled",attempt:attempt2,maxAttempts,delayMs,errorMessage:errorMessage2})},onRetryAttemptStart:()=>{this._emit({type:"summarization_retry_attempt_start",...source})},onRetryFinished:()=>{this._emit({type:"summarization_retry_finished"})}}}async _prepareRetry(message){let settings2=this.settingsManager.getRetrySettings();if(!settings2.enabled)return!1;if(this._retryAttempt++,this._retryAttempt>settings2.maxRetries)return this._retryAttempt--,!1;let delayMs=settings2.baseDelayMs*2**(this._retryAttempt-1);this._emit({type:"auto_retry_start",attempt:this._retryAttempt,maxAttempts:settings2.maxRetries,delayMs,errorMessage:message.errorMessage||"Unknown error"});let messages=this.agent.state.messages;messages.length>0&&messages[messages.length-1].role==="assistant"&&(this.agent.state.messages=messages.slice(0,-1)),this._retryAbortController=new AbortController;try{await sleep2(delayMs,this._retryAbortController.signal)}catch{let attempt2=this._retryAttempt;return this._retryAttempt=0,this._emit({type:"auto_retry_end",success:!1,attempt:attempt2,finalError:"Retry cancelled"}),!1}finally{this._retryAbortController=void 0}return!0}abortRetry(){this._retryAbortController?.abort()}get isRetrying(){return this._retryAbortController!==void 0}get autoRetryEnabled(){return this.settingsManager.getRetryEnabled()}setAutoRetryEnabled(enabled){this.settingsManager.setRetryEnabled(enabled)}async executeBash(command,onChunk,options){let abortController=new AbortController;this._bashAbortControllers.add(abortController);let prefix=this.settingsManager.getShellCommandPrefix(),shellPath=this.settingsManager.getShellPath(),resolvedCommand=prefix?`${prefix}
1250
- ${command}`:command;try{let result=await executeBashWithOperations(resolvedCommand,this.sessionManager.getCwd(),options?.operations??createLocalBashOperations({shellPath}),{onChunk:delta=>{onChunk?.(delta),this._emit({type:"bash_execution_update",id:options?.id,delta})},signal:abortController.signal});return this.recordBashResult(command,result,options),result}finally{this._bashAbortControllers.delete(abortController)}}recordBashResult(command,result,options){let bashMessage={role:"bashExecution",command,output:result.output,exitCode:result.exitCode,cancelled:result.cancelled,truncated:result.truncated,fullOutputPath:result.fullOutputPath,timestamp:Date.now(),excludeFromContext:options?.excludeFromContext};this.isStreaming?this._pendingBashMessages.push(bashMessage):(this.agent.state.messages.push(bashMessage),this.sessionManager.appendMessage(bashMessage))}abortBash(){for(let abortController of[...this._bashAbortControllers])abortController.abort()}get isBashRunning(){return this._bashAbortControllers.size>0}get hasPendingBashMessages(){return this._pendingBashMessages.length>0}_flushPendingBashMessages(){if(this._pendingBashMessages.length!==0){for(let bashMessage of this._pendingBashMessages)this.agent.state.messages.push(bashMessage),this.sessionManager.appendMessage(bashMessage);this._pendingBashMessages=[]}}setSessionName(name){this.sessionManager.appendSessionInfo(name);let event={type:"session_info_changed",name:this.sessionManager.getSessionName()};this._emit(event),this._extensionRunner.emit(event)}async navigateTree(targetId,options={}){if(this.isStreaming)throw new Error("Wait for the current response to finish before navigating the session tree.");let oldLeafId=this.sessionManager.getLeafId();if(targetId===oldLeafId)return{cancelled:!1};if(options.summarize&&!this.model)throw new Error("No model available for summarization");let targetEntry=this.sessionManager.getEntry(targetId);if(!targetEntry)throw new Error(`Entry ${targetId} not found`);let{entries:entriesToSummarize,commonAncestorId}=collectEntriesForBranchSummary(this.sessionManager,oldLeafId,targetId),customInstructions=options.customInstructions,replaceInstructions=options.replaceInstructions,label=options.label,preparation={targetId,oldLeafId,commonAncestorId,entriesToSummarize,userWantsSummary:options.summarize??!1,customInstructions,replaceInstructions,label};this._branchSummaryAbortController=new AbortController;try{let extensionSummary,fromExtension=!1;if(this._extensionRunner.hasHandlers("session_before_tree")){let result=await this._extensionRunner.emit({type:"session_before_tree",preparation,signal:this._branchSummaryAbortController.signal});if(result?.cancel)return{cancelled:!0};result?.summary&&options.summarize&&(extensionSummary=result.summary,fromExtension=!0),result?.customInstructions!==void 0&&(customInstructions=result.customInstructions),result?.replaceInstructions!==void 0&&(replaceInstructions=result.replaceInstructions),result?.label!==void 0&&(label=result.label)}let summaryText,summaryDetails,summaryUsage;if(options.summarize&&entriesToSummarize.length>0&&!extensionSummary){let model=this.model,{model:requestModel,apiKey,headers,env:env2}=await this._getSummarizationRequestAuth(model),branchSummarySettings=this.settingsManager.getBranchSummarySettings(),result=await generateBranchSummary(entriesToSummarize,{model:requestModel,apiKey,headers,env:env2,signal:this._branchSummaryAbortController.signal,customInstructions,replaceInstructions,reserveTokens:branchSummarySettings.reserveTokens,streamFn:this.agent.streamFunction,retry:this.settingsManager.getRetrySettings(),callbacks:this._summarizationRetryCallbacks({source:"branchSummary"})});if(result.aborted)return{cancelled:!0,aborted:!0};if(result.error)throw new Error(result.error);summaryText=result.summary,summaryUsage=result.usage,summaryDetails={readFiles:result.readFiles||[],modifiedFiles:result.modifiedFiles||[]}}else extensionSummary&&(summaryText=extensionSummary.summary,summaryDetails=extensionSummary.details,summaryUsage=extensionSummary.usage);let newLeafId,editorText;targetEntry.type==="message"&&targetEntry.message.role==="user"?(newLeafId=targetEntry.parentId,editorText=contentText(targetEntry.message.content,"")):targetEntry.type==="custom_message"?(newLeafId=targetEntry.parentId,editorText=contentText(targetEntry.content,"")):newLeafId=targetId;let summaryEntry;if(summaryText){let summaryId=this.sessionManager.branchWithSummary(newLeafId,summaryText,summaryDetails,fromExtension,summaryUsage);summaryEntry=this.sessionManager.getEntry(summaryId),label&&this.sessionManager.appendLabelChange(summaryId,label)}else newLeafId===null?this.sessionManager.resetLeaf():this.sessionManager.branch(newLeafId);label&&!summaryText&&this.sessionManager.appendLabelChange(targetId,label);let sessionContext=this.sessionManager.buildSessionContext();return this.agent.state.messages=sessionContext.messages,await this._extensionRunner.emit({type:"session_tree",newLeafId:this.sessionManager.getLeafId(),oldLeafId,summaryEntry,fromExtension:summaryText?fromExtension:void 0}),{editorText,cancelled:!1,summaryEntry}}finally{this._branchSummaryAbortController=void 0}}getUserMessagesForForking(){let entries=this.sessionManager.getEntries(),result=[];for(let entry of entries){if(entry.type!=="message"||entry.message.role!=="user")continue;let text=contentText(entry.message.content,"");text&&result.push({entryId:entry.id,text})}return result}getSessionStats(){let userMessages=0,assistantMessages=0,toolResults=0,totalMessages=0,toolCalls=0,usageTotals=createUsageTotals();for(let entry of this.sessionManager.getEntries()){if((entry.type==="branch_summary"||entry.type==="compaction")&&entry.usage&&addUsageToTotals(usageTotals,entry.usage),entry.type!=="message")continue;totalMessages++;let message=entry.message;if(message.role==="user")userMessages++;else if(message.role==="toolResult")toolResults++,message.usage&&addUsageToTotals(usageTotals,message.usage);else if(message.role==="assistant"){assistantMessages++;let assistantMsg=message;Array.isArray(assistantMsg.content)&&(toolCalls+=assistantMsg.content.filter(c2=>c2.type==="toolCall").length),addUsageToTotals(usageTotals,assistantMsg.usage)}}return{sessionFile:this.sessionFile,sessionId:this.sessionId,userMessages,assistantMessages,toolCalls,toolResults,totalMessages,tokens:{input:usageTotals.input,output:usageTotals.output,cacheRead:usageTotals.cacheRead,cacheWrite:usageTotals.cacheWrite,total:usageTotals.input+usageTotals.output+usageTotals.cacheRead+usageTotals.cacheWrite},cost:usageTotals.cost,contextUsage:this.getContextUsage()}}getContextUsage(){let model=this.model;if(!model)return;let contextWindow=model.contextWindow??0;if(contextWindow<=0)return;let branchEntries=this.sessionManager.getBranch(),latestCompaction=getLatestCompactionEntry(branchEntries);if(latestCompaction){let compactionIndex=branchEntries.lastIndexOf(latestCompaction),hasPostCompactionUsage=!1;for(let i=branchEntries.length-1;i>compactionIndex;i--){let entry=branchEntries[i];if(entry.type==="message"&&entry.message.role==="assistant"){let assistant=entry.message;if(assistant.stopReason!=="aborted"&&assistant.stopReason!=="error"&&calculateContextTokens(assistant.usage)>0){hasPostCompactionUsage=!0;break}}}if(!hasPostCompactionUsage)return{tokens:null,contextWindow,percent:null}}let estimate=estimateContextTokens(this.messages),percent=estimate.tokens/contextWindow*100;return{tokens:estimate.tokens,contextWindow,percent}}async exportToHtml(outputPath,options={}){let themeName=[options.themeName,this.settingsManager.getTheme()].find(candidate=>candidate!==void 0&&getThemeByName(candidate)!==void 0),toolRenderer=createToolHtmlRenderer({getToolDefinition:name=>this.getToolDefinition(name),theme,cwd:this.sessionManager.getCwd()});return await exportSessionToHtml(this.sessionManager,this.state,{outputPath,themeName,toolRenderer})}exportToJsonl(outputPath){return exportSessionToJsonl(this.sessionManager,outputPath)}getLastAssistantText(){let lastAssistant=this.messages.slice().reverse().find(m2=>{if(m2.role!=="assistant")return!1;let msg=m2;return!(msg.stopReason==="aborted"&&msg.content.length===0)});if(!lastAssistant)return;let text="";for(let content of lastAssistant.content)content.type==="text"&&(text+=content.text);return text.trim()||void 0}createReplacedSessionContext(){let context=Object.defineProperties({},Object.getOwnPropertyDescriptors(this._extensionRunner.createCommandContext()));return context.sendMessage=(message,options)=>this.sendCustomMessage(message,options),context.sendUserMessage=(content,options)=>this.sendUserMessage(content,options),context}hasExtensionHandlers(eventType){return this._extensionRunner.hasHandlers(eventType)}get extensionRunner(){return this._extensionRunner}};var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{existsSync as existsSync11,mkdirSync as mkdirSync5,readFileSync as readFileSync8,writeFileSync as writeFileSync5}from"fs";import{dirname as dirname13,join as join21}from"path";import{setTimeout as sleep3}from"timers/promises";function abortReason(signal){if(signal.reason!==void 0)return signal.reason;let error=new Error("The operation was aborted");return error.name="AbortError",error}function operationSignal(signal){return signal??new AbortController().signal}function raceWithAbortSignal(operation,signal){return signal?signal.aborted?(operation.catch(()=>{}),Promise.reject(abortReason(signal))):new Promise((resolve16,reject)=>{let settled=!1,cleanup=()=>signal.removeEventListener("abort",onAbort),onAbort=()=>{settled||(settled=!0,cleanup(),reject(abortReason(signal)))};signal.addEventListener("abort",onAbort,{once:!0}),operation.then(value=>{settled||(settled=!0,cleanup(),resolve16(value))},error=>{settled||(settled=!0,cleanup(),reject(error))}),signal.aborted&&onAbort()}):operation}var AUTH_FILE_WRITE_OPTIONS={encoding:"utf-8",mode:384},sharedAuthFileReadState,FileAuthStorageBackend=class{authPath;constructor(authPath=join21(getAgentDir(),"auth.json")){this.authPath=normalizePath(authPath)}ensureParentDir(){let dir=dirname13(this.authPath);existsSync11(dir)||mkdirSync5(dir,{recursive:!0,mode:448})}ensureFileExists(){existsSync11(this.authPath)||writeFileSync5(this.authPath,"{}",AUTH_FILE_WRITE_OPTIONS)}acquireLockSyncWithRetry(path14){let lastError;for(let attempt2=1;attempt2<=10;attempt2++)try{return import_proper_lockfile.default.lockSync(path14,{realpath:!1})}catch(error){if((typeof error=="object"&&error!==null&&"code"in error?String(error.code):void 0)!=="ELOCKED"||attempt2===10)throw error;lastError=error;let start=Date.now();for(;Date.now()-start<20;);}throw lastError??new Error("Failed to acquire auth storage lock")}withLock(fn){this.ensureParentDir(),this.ensureFileExists();let release;try{release=this.acquireLockSyncWithRetry(this.authPath);let current=existsSync11(this.authPath)?readFileSync8(this.authPath,"utf-8"):void 0,{result,next}=fn(current);return next!==void 0&&writeFileSync5(this.authPath,next,AUTH_FILE_WRITE_OPTIONS),result}finally{release&&release()}}async acquireLockAsync(signal,onCompromised){let deadline=Date.now()+3e4,retry=0;for(;;){signal?.throwIfAborted();let release;try{release=await import_proper_lockfile.default.lock(this.authPath,{realpath:!1,retries:0,stale:3e4,onCompromised})}catch(error){signal?.throwIfAborted();let code=typeof error=="object"&&error!==null&&"code"in error?String(error.code):void 0,remainingMs=deadline-Date.now();if(code!=="ELOCKED"||remainingMs<=0)throw error;let baseDelayMs=Math.min(10*2**retry,2e3/2);retry++;let delayMs=Math.min(Math.round(baseDelayMs*(1+Math.random())),remainingMs);signal?await sleep3(delayMs,void 0,{signal}):await sleep3(delayMs);continue}return signal?.aborted&&(await release(),signal.throwIfAborted()),release}}async withLockAsync(fn,options){options?.signal?.throwIfAborted(),this.ensureParentDir(),this.ensureFileExists();let release,lockCompromised=!1,lockCompromisedError,throwIfCompromised=()=>{if(lockCompromised)throw lockCompromisedError??new Error("Auth storage lock was compromised")};try{release=await this.acquireLockAsync(options?.signal,error=>{lockCompromised=!0,lockCompromisedError=error}),throwIfCompromised(),options?.signal?.throwIfAborted();let current=existsSync11(this.authPath)?readFileSync8(this.authPath,"utf-8"):void 0,{result,next}=await fn(current);return throwIfCompromised(),options?.signal?.throwIfAborted(),next!==void 0&&writeFileSync5(this.authPath,next,AUTH_FILE_WRITE_OPTIONS),throwIfCompromised(),result}finally{if(release)try{await release()}catch{}}}},ReadOnlyAuthStorage=class{authPath;data;constructor(authPath=join21(getAgentDir(),"auth.json")){this.authPath=normalizePath(authPath)}load(){if(this.data)return this.data;let parsed;try{parsed=JSON.parse(stripBom(readFileSync8(this.authPath,"utf-8")))}catch(error){if(error.code==="ENOENT")return this.data={},this.data;throw new Error(`Failed to read auth.json: ${error instanceof Error?error.message:String(error)}`)}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))throw new Error("Invalid auth.json: expected an object");for(let[providerId,credential]of Object.entries(parsed)){if(typeof credential!="object"||credential===null||Array.isArray(credential))throw new Error(`Invalid auth.json credential for provider "${providerId}"`);let value=credential;if(value.type==="api_key"){let validKey=value.key===void 0||typeof value.key=="string",validEnv=value.env===void 0||typeof value.env=="object"&&value.env!==null&&!Array.isArray(value.env)&&Object.values(value.env).every(entry=>typeof entry=="string");if(validKey&&validEnv)continue}else if(value.type==="oauth"&&typeof value.access=="string"&&typeof value.refresh=="string"&&typeof value.expires=="number"&&Number.isFinite(value.expires))continue;throw new Error(`Invalid auth.json credential for provider "${providerId}"`)}return this.data=parsed,this.data}async read(providerId,options){options?.signal?.throwIfAborted();let credential=this.load()[providerId];if(options?.signal?.throwIfAborted(),!!credential)return credential.type!=="api_key"||!credential.key||isCommandConfigValue(credential.key)?structuredClone(credential):{...credential,key:resolveConfigValue(credential.key,credential.env)}}async list(options){options?.signal?.throwIfAborted();let credentials=Object.entries(this.load()).map(([providerId,credential])=>({providerId,type:credential.type}));return options?.signal?.throwIfAborted(),credentials}async modify(_providerId,_fn,_options){throw new Error("Read-only credential storage cannot modify auth.json")}async delete(_providerId,_options){throw new Error("Read-only credential storage cannot modify auth.json")}},InMemoryAuthStorageBackend=class{value;asyncChain=Promise.resolve();withLock(fn){let{result,next}=fn(this.value);return next!==void 0&&(this.value=next),result}withLockAsync(fn,options){let previous=this.asyncChain,operation=(async()=>{await previous.catch(()=>{}),options?.signal?.throwIfAborted();let{result,next}=await fn(this.value);return options?.signal?.throwIfAborted(),next!==void 0&&(this.value=next),result})();return this.asyncChain=operation.catch(()=>{}),raceWithAbortSignal(operation,options?.signal)}},AuthStorage=class _AuthStorage{storage;authPath;readState;constructor(storage,authPath){if(this.storage=storage,this.authPath=authPath,this.readState=authPath&&sharedAuthFileReadState?.authPath===authPath?sharedAuthFileReadState.readState:{data:{}},authPath&&!sharedAuthFileReadState&&(sharedAuthFileReadState={authPath,readState:this.readState}),authPath){let revision=getFileRevision(authPath);if(revision!==void 0&&revision===this.readState.revision)return}this.reload()}static create(authPath=join21(getAgentDir(),"auth.json")){let normalizedAuthPath=normalizePath(authPath);return new _AuthStorage(new FileAuthStorageBackend(normalizedAuthPath),normalizedAuthPath)}static fromStorage(storage){return new _AuthStorage(storage)}static inMemory(data={}){let storage=new InMemoryAuthStorageBackend;return storage.withLock(()=>({result:void 0,next:JSON.stringify(data,null,2)})),_AuthStorage.fromStorage(storage)}parseStorageData(content){return content?JSON.parse(stripBom(content)):{}}updateReadState(data,revision){this.readState.data=data,this.readState.revision=revision}reload(){let content,revision;try{this.storage.withLock(current=>(content=current,revision=this.authPath?getFileRevision(this.authPath):void 0,{result:void 0})),this.updateReadState(this.parseStorageData(content),revision)}catch{}}async reloadFromStorageAsync(options){return this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content),revision=this.authPath?getFileRevision(this.authPath):void 0;return this.updateReadState(currentData,revision),{result:currentData}},options)}async readLatestData(options){if(options?.signal?.throwIfAborted(),!this.authPath){let reload2=this.reloadFromStorageAsync(options);return options?.signal?reload2:reload2.catch(()=>this.readState.data)}let revision=getFileRevision(this.authPath);if(revision!==void 0&&revision===this.readState.revision)return this.readState.data;if(!this.readState.reload){let controller=new AbortController,reload2={controller,promise:this.reloadFromStorageAsync({signal:controller.signal}),readers:0};this.readState.reload=reload2,reload2.promise.then(()=>{this.readState.reload===reload2&&(this.readState.reload=void 0)},()=>{this.readState.reload===reload2&&(this.readState.reload=void 0)})}let reload=this.readState.reload;reload.readers++;try{let result=raceWithAbortSignal(reload.promise,options?.signal);return options?.signal?await result:await result.catch(()=>this.readState.data)}finally{reload.readers--,reload.readers===0&&this.readState.reload===reload&&(this.readState.reload=void 0,reload.controller.abort())}}async read(provider,options){let credential=(await this.readLatestData(options))[provider];return options?.signal?.throwIfAborted(),credential?.type!=="api_key"||credential.key===void 0?credential:{...credential,key:resolveConfigValue(credential.key,credential.env)}}async modify(provider,fn,options){let latestData=this.readState.data,revision,result=await this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content),next=await fn(currentData[provider]);if(next===void 0)return latestData=currentData,revision=this.authPath?getFileRevision(this.authPath):void 0,{result:currentData[provider]};let merged={...currentData,[provider]:next};return latestData=merged,{result:next,next:JSON.stringify(merged,null,2)}},options);return this.updateReadState(latestData,revision),result}async delete(provider,options){let latestData=this.readState.data;await this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content);return delete currentData[provider],latestData=currentData,{result:void 0,next:JSON.stringify(currentData,null,2)}},options),this.updateReadState(latestData)}async list(options){let entries=Object.entries(await this.readLatestData(options));return options?.signal?.throwIfAborted(),entries.map(([providerId,credential])=>({providerId,type:credential.type}))}};function readStoredCredential(providerId,authPath=join21(getAgentDir(),"auth.json")){try{return JSON.parse(stripBom(readFileSync8(normalizePath(authPath),"utf-8")))[providerId]}catch{return}}var balanced=(a,b2,str2)=>{let ma=a instanceof RegExp?maybeMatch(a,str2):a,mb=b2 instanceof RegExp?maybeMatch(b2,str2):b2,r=ma!==null&&mb!=null&&range(ma,mb,str2);return r&&{start:r[0],end:r[1],pre:str2.slice(0,r[0]),body:str2.slice(r[0]+ma.length,r[1]),post:str2.slice(r[1]+mb.length)}},maybeMatch=(reg,str2)=>{let m2=str2.match(reg);return m2?m2[0]:null},range=(a,b2,str2)=>{let begs,beg,left,right,result,ai=str2.indexOf(a),bi=str2.indexOf(b2,ai+1),i=ai;if(ai>=0&&bi>0){if(a===b2)return[ai,bi];for(begs=[],left=str2.length;i>=0&&!result;){if(i===ai)begs.push(i),ai=str2.indexOf(a,i+1);else if(begs.length===1){let r=begs.pop();r!==void 0&&(result=[r,bi])}else beg=begs.pop(),beg!==void 0&&beg<left&&(left=beg,right=bi),bi=str2.indexOf(b2,i+1);i=ai<bi&&ai>=0?ai:bi}begs.length&&right!==void 0&&(result=[left,right])}return result};var escSlash="\0SLASH"+Math.random()+"\0",escOpen="\0OPEN"+Math.random()+"\0",escClose="\0CLOSE"+Math.random()+"\0",escComma="\0COMMA"+Math.random()+"\0",escPeriod="\0PERIOD"+Math.random()+"\0",escSlashPattern=new RegExp(escSlash,"g"),escOpenPattern=new RegExp(escOpen,"g"),escClosePattern=new RegExp(escClose,"g"),escCommaPattern=new RegExp(escComma,"g"),escPeriodPattern=new RegExp(escPeriod,"g"),slashPattern=/\\\\/g,openPattern=/\\{/g,closePattern=/\\}/g,commaPattern=/\\,/g,periodPattern=/\\\./g,EXPANSION_MAX=1e5;function numeric(str2){return isNaN(str2)?str2.charCodeAt(0):parseInt(str2,10)}function escapeBraces(str2){return str2.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str2){return str2.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function parseCommaParts(str2){if(!str2)return[""];let parts=[],m2=balanced("{","}",str2);if(!m2)return str2.split(",");let{pre,body,post}=m2,p=pre.split(",");p[p.length-1]+="{"+body+"}";let postParts=parseCommaParts(post);return post.length&&(p[p.length-1]+=postParts.shift(),p.push.apply(p,postParts)),parts.push.apply(parts,p),parts}function expand(str2,options={}){if(!str2)return[];let{max=EXPANSION_MAX}=options;return str2.slice(0,2)==="{}"&&(str2="\\{\\}"+str2.slice(2)),expand_(escapeBraces(str2),max,!0).map(unescapeBraces)}function embrace(str2){return"{"+str2+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i,y2){return i<=y2}function gte(i,y2){return i>=y2}function expand_(str2,max,isTop){let expansions=[];for(;;){let m2=balanced("{","}",str2);if(!m2)return[str2];let pre=m2.pre;if(/\$$/.test(m2.pre)){let post2=m2.post.length?expand_(m2.post,max,!1):[""];for(let k=0;k<post2.length&&k<max;k++){let expansion=pre+"{"+m2.body+"}"+post2[k];expansions.push(expansion)}return expansions}let isNumericSequence=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m2.body),isAlphaSequence=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m2.body),isSequence=isNumericSequence||isAlphaSequence,isOptions=m2.body.indexOf(",")>=0;if(!isSequence&&!isOptions){if(m2.post.match(/,(?!,).*\}/)){str2=m2.pre+"{"+m2.body+escClose+m2.post,isTop=!0;continue}return[str2]}let post=m2.post.length?expand_(m2.post,max,!1):[""],n;if(isSequence)n=m2.body.split(/\.\./);else if(n=parseCommaParts(m2.body),n.length===1&&n[0]!==void 0&&(n=expand_(n[0],max,!1).map(embrace),n.length===1))return post.map(p=>m2.pre+n[0]+p);let N2;if(isSequence&&n[0]!==void 0&&n[1]!==void 0){let x2=numeric(n[0]),y2=numeric(n[1]),width=Math.max(n[0].length,n[1].length),incr=n.length===3&&n[2]!==void 0?Math.max(Math.abs(numeric(n[2])),1):1,test=lte;y2<x2&&(incr*=-1,test=gte);let pad=n.some(isPadded);N2=[];for(let i=x2;test(i,y2)&&N2.length<max;i+=incr){let c2;if(isAlphaSequence)c2=String.fromCharCode(i),c2==="\\"&&(c2="");else if(c2=String(i),pad){let need=width-c2.length;if(need>0){let z2=new Array(need+1).join("0");i<0?c2="-"+z2+c2.slice(1):c2=z2+c2}}N2.push(c2)}}else{N2=[];for(let j2=0;j2<n.length;j2++)N2.push.apply(N2,expand_(n[j2],max,!1))}for(let j2=0;j2<N2.length;j2++)for(let k=0;k<post.length&&expansions.length<max;k++){let expansion=pre+N2[j2]+post[k];(!isTop||isSequence||expansion)&&expansions.push(expansion)}return expansions}}var assertValidPattern=pattern=>{if(typeof pattern!="string")throw new TypeError("invalid pattern");if(pattern.length>65536)throw new TypeError("pattern is too long")};var posixClasses={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},braceEscape=s=>s.replace(/[[\]\\-]/g,"\\$&"),regexpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),rangesToString=ranges=>ranges.join(""),parseClass=(glob,position)=>{let pos=position;if(glob.charAt(pos)!=="[")throw new Error("not in a brace expression");let ranges=[],negs=[],i=pos+1,sawStart=!1,uflag=!1,escaping=!1,negate=!1,endPos=pos,rangeStart="";WHILE:for(;i<glob.length;){let c2=glob.charAt(i);if((c2==="!"||c2==="^")&&i===pos+1){negate=!0,i++;continue}if(c2==="]"&&sawStart&&!escaping){endPos=i+1;break}if(sawStart=!0,c2==="\\"&&!escaping){escaping=!0,i++;continue}if(c2==="["&&!escaping){for(let[cls,[unip,u,neg]]of Object.entries(posixClasses))if(glob.startsWith(cls,i)){if(rangeStart)return["$.",!1,glob.length-pos,!0];i+=cls.length,neg?negs.push(unip):ranges.push(unip),uflag=uflag||u;continue WHILE}}if(escaping=!1,rangeStart){c2>rangeStart?ranges.push(braceEscape(rangeStart)+"-"+braceEscape(c2)):c2===rangeStart&&ranges.push(braceEscape(c2)),rangeStart="",i++;continue}if(glob.startsWith("-]",i+1)){ranges.push(braceEscape(c2+"-")),i+=2;continue}if(glob.startsWith("-",i+1)){rangeStart=c2,i+=2;continue}ranges.push(braceEscape(c2)),i++}if(endPos<i)return["",!1,0,!1];if(!ranges.length&&!negs.length)return["$.",!1,glob.length-pos,!0];if(negs.length===0&&ranges.length===1&&/^\\?.$/.test(ranges[0])&&!negate){let r=ranges[0].length===2?ranges[0].slice(-1):ranges[0];return[regexpEscape(r),!1,endPos-pos,!1]}let sranges="["+(negate?"^":"")+rangesToString(ranges)+"]",snegs="["+(negate?"":"^")+rangesToString(negs)+"]";return[ranges.length&&negs.length?"("+sranges+"|"+snegs+")":ranges.length?sranges:snegs,uflag,endPos-pos,!0]};var unescape=(s,{windowsPathsNoEscape=!1,magicalBraces=!0}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/\[([^/\\])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\])\]/g,"$1$2").replace(/\\([^/])/g,"$1"):windowsPathsNoEscape?s.replace(/\[([^/\\{}])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\{}])\]/g,"$1$2").replace(/\\([^/{}])/g,"$1");var _a,types=new Set(["!","?","+","*","@"]),isExtglobType=c2=>types.has(c2),isExtglobAST=c2=>isExtglobType(c2.type),adoptionMap=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]),adoptionWithSpaceMap=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]),adoptionAnyMap=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]),usurpMap=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]),startNoTraversal="(?!(?:^|/)\\.\\.?(?:$|/))",startNoDot="(?!\\.)",addPatternStart=new Set(["[","."]),justDots=new Set(["..","."]),reSpecials=new Set("().*{}+?[]^$\\!"),regExpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),qmark="[^/]",star=qmark+"*?",starNoEmpty=qmark+"+?",ID=0,AST=class{type;#root;#hasMagic;#uflag=!1;#parts=[];#parent;#parentIndex;#negs;#filledNegs=!1;#options;#toString;#emptyExt=!1;id=++ID;get depth(){return(this.#parent?.depth??-1)+1}[Symbol.for("nodejs.util.inspect.custom")](){return{"@@type":"AST",id:this.id,type:this.type,root:this.#root.id,parent:this.#parent?.id,depth:this.depth,partsLength:this.#parts.length,parts:this.#parts}}constructor(type,parent,options={}){this.type=type,type&&(this.#hasMagic=!0),this.#parent=parent,this.#root=this.#parent?this.#parent.#root:this,this.#options=this.#root===this?options:this.#root.#options,this.#negs=this.#root===this?[]:this.#root.#negs,type==="!"&&!this.#root.#filledNegs&&this.#negs.push(this),this.#parentIndex=this.#parent?this.#parent.#parts.length:0}get hasMagic(){if(this.#hasMagic!==void 0)return this.#hasMagic;for(let p of this.#parts)if(typeof p!="string"&&(p.type||p.hasMagic))return this.#hasMagic=!0;return this.#hasMagic}toString(){return this.#toString!==void 0?this.#toString:this.type?this.#toString=this.type+"("+this.#parts.map(p=>String(p)).join("|")+")":this.#toString=this.#parts.map(p=>String(p)).join("")}#fillNegs(){if(this!==this.#root)throw new Error("should only call on root");if(this.#filledNegs)return this;this.toString(),this.#filledNegs=!0;let n;for(;n=this.#negs.pop();){if(n.type!=="!")continue;let p=n,pp=p.#parent;for(;pp;){for(let i=p.#parentIndex+1;!pp.type&&i<pp.#parts.length;i++)for(let part of n.#parts){if(typeof part=="string")throw new Error("string part in extglob AST??");part.copyIn(pp.#parts[i])}p=pp,pp=p.#parent}}return this}push(...parts){for(let p of parts)if(p!==""){if(typeof p!="string"&&!(p instanceof _a&&p.#parent===this))throw new Error("invalid part: "+p);this.#parts.push(p)}}toJSON(){let ret=this.type===null?this.#parts.slice().map(p=>typeof p=="string"?p:p.toJSON()):[this.type,...this.#parts.map(p=>p.toJSON())];return this.isStart()&&!this.type&&ret.unshift([]),this.isEnd()&&(this===this.#root||this.#root.#filledNegs&&this.#parent?.type==="!")&&ret.push({}),ret}isStart(){if(this.#root===this)return!0;if(!this.#parent?.isStart())return!1;if(this.#parentIndex===0)return!0;let p=this.#parent;for(let i=0;i<this.#parentIndex;i++){let pp=p.#parts[i];if(!(pp instanceof _a&&pp.type==="!"))return!1}return!0}isEnd(){if(this.#root===this||this.#parent?.type==="!")return!0;if(!this.#parent?.isEnd())return!1;if(!this.type)return this.#parent?.isEnd();let pl=this.#parent?this.#parent.#parts.length:0;return this.#parentIndex===pl-1}copyIn(part){typeof part=="string"?this.push(part):this.push(part.clone(this))}clone(parent){let c2=new _a(this.type,parent);for(let p of this.#parts)c2.copyIn(p);return c2}static#parseAST(str2,ast,pos,opt,extDepth){let maxDepth=opt.maxExtglobRecursion??2,escaping=!1,inBrace=!1,braceStart=-1,braceNeg=!1;if(ast.type===null){let i2=pos,acc2="";for(;i2<str2.length;){let c2=str2.charAt(i2++);if(escaping||c2==="\\"){escaping=!escaping,acc2+=c2;continue}if(inBrace){i2===braceStart+1?(c2==="^"||c2==="!")&&(braceNeg=!0):c2==="]"&&!(i2===braceStart+2&&braceNeg)&&(inBrace=!1),acc2+=c2;continue}else if(c2==="["){inBrace=!0,braceStart=i2,braceNeg=!1,acc2+=c2;continue}if(!opt.noext&&isExtglobType(c2)&&str2.charAt(i2)==="("&&extDepth<=maxDepth){ast.push(acc2),acc2="";let ext2=new _a(c2,ast);i2=_a.#parseAST(str2,ext2,i2,opt,extDepth+1),ast.push(ext2);continue}acc2+=c2}return ast.push(acc2),i2}let i=pos+1,part=new _a(null,ast),parts=[],acc="";for(;i<str2.length;){let c2=str2.charAt(i++);if(escaping||c2==="\\"){escaping=!escaping,acc+=c2;continue}if(inBrace){i===braceStart+1?(c2==="^"||c2==="!")&&(braceNeg=!0):c2==="]"&&!(i===braceStart+2&&braceNeg)&&(inBrace=!1),acc+=c2;continue}else if(c2==="["){inBrace=!0,braceStart=i,braceNeg=!1,acc+=c2;continue}if(!opt.noext&&isExtglobType(c2)&&str2.charAt(i)==="("&&(extDepth<=maxDepth||ast&&ast.#canAdoptType(c2))){let depthAdd=ast&&ast.#canAdoptType(c2)?0:1;part.push(acc),acc="";let ext2=new _a(c2,part);part.push(ext2),i=_a.#parseAST(str2,ext2,i,opt,extDepth+depthAdd);continue}if(c2==="|"){part.push(acc),acc="",parts.push(part),part=new _a(null,ast);continue}if(c2===")")return acc===""&&ast.#parts.length===0&&(ast.#emptyExt=!0),part.push(acc),acc="",ast.push(...parts,part),i;acc+=c2}return ast.type=null,ast.#hasMagic=void 0,ast.#parts=[str2.substring(pos-1)],i}#canAdoptWithSpace(child){return this.#canAdopt(child,adoptionWithSpaceMap)}#canAdopt(child,map=adoptionMap){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canAdoptType(gc.type,map)}#canAdoptType(c2,map=adoptionAnyMap){return!!map.get(this.type)?.includes(c2)}#adoptWithSpace(child,index3){let gc=child.#parts[0],blank=new _a(null,gc,this.options);blank.#parts.push(""),gc.push(blank),this.#adopt(child,index3)}#adopt(child,index3){let gc=child.#parts[0];this.#parts.splice(index3,1,...gc.#parts);for(let p of gc.#parts)typeof p=="object"&&(p.#parent=this);this.#toString=void 0}#canUsurpType(c2){return!!usurpMap.get(this.type)?.has(c2)}#canUsurp(child){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null||this.#parts.length!==1)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canUsurpType(gc.type)}#usurp(child){let m2=usurpMap.get(this.type),gc=child.#parts[0],nt2=m2?.get(gc.type);if(!nt2)return!1;this.#parts=gc.#parts;for(let p of this.#parts)typeof p=="object"&&(p.#parent=this);this.type=nt2,this.#toString=void 0,this.#emptyExt=!1}static fromGlob(pattern,options={}){let ast=new _a(null,void 0,options);return _a.#parseAST(pattern,ast,0,options,0),ast}toMMPattern(){if(this!==this.#root)return this.#root.toMMPattern();let glob=this.toString(),[re,body,hasMagic,uflag]=this.toRegExpSource();if(!(hasMagic||this.#hasMagic||this.#options.nocase&&!this.#options.nocaseMagicOnly&&glob.toUpperCase()!==glob.toLowerCase()))return body;let flags=(this.#options.nocase?"i":"")+(uflag?"u":"");return Object.assign(new RegExp(`^${re}$`,flags),{_src:re,_glob:glob})}get options(){return this.#options}toRegExpSource(allowDot){let dot=allowDot??!!this.#options.dot;if(this.#root===this&&(this.#flatten(),this.#fillNegs()),!isExtglobAST(this)){let noEmpty=this.isStart()&&this.isEnd()&&!this.#parts.some(s=>typeof s!="string"),src=this.#parts.map(p=>{let[re,_2,hasMagic,uflag]=typeof p=="string"?_a.#parseGlob(p,this.#hasMagic,noEmpty):p.toRegExpSource(allowDot);return this.#hasMagic=this.#hasMagic||hasMagic,this.#uflag=this.#uflag||uflag,re}).join(""),start2="";if(this.isStart()&&typeof this.#parts[0]=="string"&&!(this.#parts.length===1&&justDots.has(this.#parts[0]))){let aps=addPatternStart,needNoTrav=dot&&aps.has(src.charAt(0))||src.startsWith("\\.")&&aps.has(src.charAt(2))||src.startsWith("\\.\\.")&&aps.has(src.charAt(4)),needNoDot=!dot&&!allowDot&&aps.has(src.charAt(0));start2=needNoTrav?startNoTraversal:needNoDot?startNoDot:""}let end="";return this.isEnd()&&this.#root.#filledNegs&&this.#parent?.type==="!"&&(end="(?:$|\\/)"),[start2+src+end,unescape(src),this.#hasMagic=!!this.#hasMagic,this.#uflag]}let repeated=this.type==="*"||this.type==="+",start=this.type==="!"?"(?:(?!(?:":"(?:",body=this.#partsToRegExp(dot);if(this.isStart()&&this.isEnd()&&!body&&this.type!=="!"){let s=this.toString(),me2=this;return me2.#parts=[s],me2.type=null,me2.#hasMagic=void 0,[s,unescape(this.toString()),!1,!1]}let bodyDotAllowed=!repeated||allowDot||dot||!startNoDot?"":this.#partsToRegExp(!0);bodyDotAllowed===body&&(bodyDotAllowed=""),bodyDotAllowed&&(body=`(?:${body})(?:${bodyDotAllowed})*?`);let final="";if(this.type==="!"&&this.#emptyExt)final=(this.isStart()&&!dot?startNoDot:"")+starNoEmpty;else{let close=this.type==="!"?"))"+(this.isStart()&&!dot&&!allowDot?startNoDot:"")+star+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&bodyDotAllowed?")":this.type==="*"&&bodyDotAllowed?")?":`)${this.type}`;final=start+body+close}return[final,unescape(body),this.#hasMagic=!!this.#hasMagic,this.#uflag]}#flatten(){if(isExtglobAST(this)){let iterations=0,done=!1;do{done=!0;for(let i=0;i<this.#parts.length;i++){let c2=this.#parts[i];typeof c2=="object"&&(c2.#flatten(),this.#canAdopt(c2)?(done=!1,this.#adopt(c2,i)):this.#canAdoptWithSpace(c2)?(done=!1,this.#adoptWithSpace(c2,i)):this.#canUsurp(c2)&&(done=!1,this.#usurp(c2)))}}while(!done&&++iterations<10)}else for(let p of this.#parts)typeof p=="object"&&p.#flatten();this.#toString=void 0}#partsToRegExp(dot){return this.#parts.map(p=>{if(typeof p=="string")throw new Error("string type in extglob ast??");let[re,_2,_hasMagic,uflag]=p.toRegExpSource(dot);return this.#uflag=this.#uflag||uflag,re}).filter(p=>!(this.isStart()&&this.isEnd())||!!p).join("|")}static#parseGlob(glob,hasMagic,noEmpty=!1){let escaping=!1,re="",uflag=!1,inStar=!1;for(let i=0;i<glob.length;i++){let c2=glob.charAt(i);if(escaping){escaping=!1,re+=(reSpecials.has(c2)?"\\":"")+c2;continue}if(c2==="*"){if(inStar)continue;inStar=!0,re+=noEmpty&&/^[*]+$/.test(glob)?starNoEmpty:star,hasMagic=!0;continue}else inStar=!1;if(c2==="\\"){i===glob.length-1?re+="\\\\":escaping=!0;continue}if(c2==="["){let[src,needUflag,consumed,magic]=parseClass(glob,i);if(consumed){re+=src,uflag=uflag||needUflag,i+=consumed-1,hasMagic=hasMagic||magic;continue}}if(c2==="?"){re+=qmark,hasMagic=!0;continue}re+=regExpEscape(c2)}return[re,unescape(glob),!!hasMagic,uflag]}};_a=AST;var escape=(s,{windowsPathsNoEscape=!1,magicalBraces=!1}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/[?*()[\]{}]/g,"[$&]"):s.replace(/[?*()[\]\\{}]/g,"\\$&"):windowsPathsNoEscape?s.replace(/[?*()[\]]/g,"[$&]"):s.replace(/[?*()[\]\\]/g,"\\$&");var minimatch=(p,pattern,options={})=>(assertValidPattern(pattern),!options.nocomment&&pattern.charAt(0)==="#"?!1:new Minimatch(pattern,options).match(p)),starDotExtRE=/^\*+([^+@!?*[(]*)$/,starDotExtTest=ext2=>f=>!f.startsWith(".")&&f.endsWith(ext2),starDotExtTestDot=ext2=>f=>f.endsWith(ext2),starDotExtTestNocase=ext2=>(ext2=ext2.toLowerCase(),f=>!f.startsWith(".")&&f.toLowerCase().endsWith(ext2)),starDotExtTestNocaseDot=ext2=>(ext2=ext2.toLowerCase(),f=>f.toLowerCase().endsWith(ext2)),starDotStarRE=/^\*+\.\*+$/,starDotStarTest=f=>!f.startsWith(".")&&f.includes("."),starDotStarTestDot=f=>f!=="."&&f!==".."&&f.includes("."),dotStarRE=/^\.\*+$/,dotStarTest=f=>f!=="."&&f!==".."&&f.startsWith("."),starRE=/^\*+$/,starTest=f=>f.length!==0&&!f.startsWith("."),starTestDot=f=>f.length!==0&&f!=="."&&f!=="..",qmarksRE=/^\?+([^+@!?*[(]*)?$/,qmarksTestNocase=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestNocaseDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTest=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTestNoExt=([$0])=>{let len=$0.length;return f=>f.length===len&&!f.startsWith(".")},qmarksTestNoExtDot=([$0])=>{let len=$0.length;return f=>f.length===len&&f!=="."&&f!==".."},defaultPlatform=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",path10={win32:{sep:"\\"},posix:{sep:"/"}},sep6=defaultPlatform==="win32"?path10.win32.sep:path10.posix.sep;minimatch.sep=sep6;var GLOBSTAR=Symbol("globstar **");minimatch.GLOBSTAR=GLOBSTAR;var qmark2="[^/]",star2=qmark2+"*?",twoStarDot="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",twoStarNoDot="(?:(?!(?:\\/|^)\\.).)*?",filter=(pattern,options={})=>p=>minimatch(p,pattern,options);minimatch.filter=filter;var ext=(a,b2={})=>Object.assign({},a,b2),defaults=def=>{if(!def||typeof def!="object"||!Object.keys(def).length)return minimatch;let orig=minimatch;return Object.assign((p,pattern,options={})=>orig(p,pattern,ext(def,options)),{Minimatch:class extends orig.Minimatch{constructor(pattern,options={}){super(pattern,ext(def,options))}static defaults(options){return orig.defaults(ext(def,options)).Minimatch}},AST:class extends orig.AST{constructor(type,parent,options={}){super(type,parent,ext(def,options))}static fromGlob(pattern,options={}){return orig.AST.fromGlob(pattern,ext(def,options))}},unescape:(s,options={})=>orig.unescape(s,ext(def,options)),escape:(s,options={})=>orig.escape(s,ext(def,options)),filter:(pattern,options={})=>orig.filter(pattern,ext(def,options)),defaults:options=>orig.defaults(ext(def,options)),makeRe:(pattern,options={})=>orig.makeRe(pattern,ext(def,options)),braceExpand:(pattern,options={})=>orig.braceExpand(pattern,ext(def,options)),match:(list,pattern,options={})=>orig.match(list,pattern,ext(def,options)),sep:orig.sep,GLOBSTAR})};minimatch.defaults=defaults;var braceExpand=(pattern,options={})=>(assertValidPattern(pattern),options.nobrace||!/\{(?:(?!\{).)*\}/.test(pattern)?[pattern]:expand(pattern,{max:options.braceExpandMax}));minimatch.braceExpand=braceExpand;var makeRe=(pattern,options={})=>new Minimatch(pattern,options).makeRe();minimatch.makeRe=makeRe;var match=(list,pattern,options={})=>{let mm=new Minimatch(pattern,options);return list=list.filter(f=>mm.match(f)),mm.options.nonull&&!list.length&&list.push(pattern),list};minimatch.match=match;var globMagic=/[?*]|[+@!]\(.*?\)|\[|\]/,regExpEscape2=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Minimatch=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(pattern,options={}){assertValidPattern(pattern),options=options||{},this.options=options,this.maxGlobstarRecursion=options.maxGlobstarRecursion??200,this.pattern=pattern,this.platform=options.platform||defaultPlatform,this.isWindows=this.platform==="win32";let awe="allowWindowsEscape";this.windowsPathsNoEscape=!!options.windowsPathsNoEscape||options[awe]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!options.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!options.nonegate,this.comment=!1,this.empty=!1,this.partial=!!options.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=options.windowsNoMagicRoot!==void 0?options.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let pattern of this.set)for(let part of pattern)if(typeof part!="string")return!0;return!1}debug(..._2){}make(){let pattern=this.pattern,options=this.options;if(!options.nocomment&&pattern.charAt(0)==="#"){this.comment=!0;return}if(!pattern){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],options.debug&&(this.debug=(...args)=>console.error(...args)),this.debug(this.pattern,this.globSet);let rawGlobParts=this.globSet.map(s=>this.slashSplit(s));this.globParts=this.preprocess(rawGlobParts),this.debug(this.pattern,this.globParts);let set=this.globParts.map((s,_2,__)=>{if(this.isWindows&&this.windowsNoMagicRoot){let isUNC=s[0]===""&&s[1]===""&&(s[2]==="?"||!globMagic.test(s[2]))&&!globMagic.test(s[3]),isDrive=/^[a-z]:/i.test(s[0]);if(isUNC)return[...s.slice(0,4),...s.slice(4).map(ss=>this.parse(ss))];if(isDrive)return[s[0],...s.slice(1).map(ss=>this.parse(ss))]}return s.map(ss=>this.parse(ss))});if(this.debug(this.pattern,set),this.set=set.filter(s=>s.indexOf(!1)===-1),this.isWindows)for(let i=0;i<this.set.length;i++){let p=this.set[i];p[0]===""&&p[1]===""&&this.globParts[i][2]==="?"&&typeof p[3]=="string"&&/^[a-z]:$/i.test(p[3])&&(p[2]="?")}this.debug(this.pattern,this.set)}preprocess(globParts){if(this.options.noglobstar)for(let partset of globParts)for(let j2=0;j2<partset.length;j2++)partset[j2]==="**"&&(partset[j2]="*");let{optimizationLevel=1}=this.options;return optimizationLevel>=2?(globParts=this.firstPhasePreProcess(globParts),globParts=this.secondPhasePreProcess(globParts)):optimizationLevel>=1?globParts=this.levelOneOptimize(globParts):globParts=this.adjascentGlobstarOptimize(globParts),globParts}adjascentGlobstarOptimize(globParts){return globParts.map(parts=>{let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let i=gs;for(;parts[i+1]==="**";)i++;i!==gs&&parts.splice(gs,i-gs)}return parts})}levelOneOptimize(globParts){return globParts.map(parts=>(parts=parts.reduce((set,part)=>{let prev=set[set.length-1];return part==="**"&&prev==="**"?set:part===".."&&prev&&prev!==".."&&prev!=="."&&prev!=="**"?(set.pop(),set):(set.push(part),set)},[]),parts.length===0?[""]:parts))}levelTwoFileOptimize(parts){Array.isArray(parts)||(parts=this.slashSplit(parts));let didSomething=!1;do{if(didSomething=!1,!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];p&&p!=="."&&p!==".."&&p!=="**"&&!(this.isWindows&&/^[a-z]:$/i.test(p))&&(didSomething=!0,parts.splice(dd-1,2),dd-=2)}}while(didSomething);return parts.length===0?[""]:parts}firstPhasePreProcess(globParts){let didSomething=!1;do{didSomething=!1;for(let parts of globParts){let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let gss=gs;for(;parts[gss+1]==="**";)gss++;gss>gs&&parts.splice(gs+1,gss-gs);let next=parts[gs+1],p=parts[gs+2],p2=parts[gs+3];if(next!==".."||!p||p==="."||p===".."||!p2||p2==="."||p2==="..")continue;didSomething=!0,parts.splice(gs,1);let other=parts.slice(0);other[gs]="**",globParts.push(other),gs--}if(!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];if(p&&p!=="."&&p!==".."&&p!=="**"){didSomething=!0;let splin=dd===1&&parts[dd+1]==="**"?["."]:[];parts.splice(dd-1,2,...splin),parts.length===0&&parts.push(""),dd-=2}}}}while(didSomething);return globParts}secondPhasePreProcess(globParts){for(let i=0;i<globParts.length-1;i++)for(let j2=i+1;j2<globParts.length;j2++){let matched=this.partsMatch(globParts[i],globParts[j2],!this.preserveMultipleSlashes);if(matched){globParts[i]=[],globParts[j2]=matched;break}}return globParts.filter(gs=>gs.length)}partsMatch(a,b2,emptyGSMatch=!1){let ai=0,bi=0,result=[],which="";for(;ai<a.length&&bi<b2.length;)if(a[ai]===b2[bi])result.push(which==="b"?b2[bi]:a[ai]),ai++,bi++;else if(emptyGSMatch&&a[ai]==="**"&&b2[bi]===a[ai+1])result.push(a[ai]),ai++;else if(emptyGSMatch&&b2[bi]==="**"&&a[ai]===b2[bi+1])result.push(b2[bi]),bi++;else if(a[ai]==="*"&&b2[bi]&&(this.options.dot||!b2[bi].startsWith("."))&&b2[bi]!=="**"){if(which==="b")return!1;which="a",result.push(a[ai]),ai++,bi++}else if(b2[bi]==="*"&&a[ai]&&(this.options.dot||!a[ai].startsWith("."))&&a[ai]!=="**"){if(which==="a")return!1;which="b",result.push(b2[bi]),ai++,bi++}else return!1;return a.length===b2.length&&result}parseNegate(){if(this.nonegate)return;let pattern=this.pattern,negate=!1,negateOffset=0;for(let i=0;i<pattern.length&&pattern.charAt(i)==="!";i++)negate=!negate,negateOffset++;negateOffset&&(this.pattern=pattern.slice(negateOffset)),this.negate=negate}matchOne(file,pattern,partial=!1){let fileStartIndex=0,patternStartIndex=0;if(this.isWindows){let fileDrive=typeof file[0]=="string"&&/^[a-z]:$/i.test(file[0]),fileUNC=!fileDrive&&file[0]===""&&file[1]===""&&file[2]==="?"&&/^[a-z]:$/i.test(file[3]),patternDrive=typeof pattern[0]=="string"&&/^[a-z]:$/i.test(pattern[0]),patternUNC=!patternDrive&&pattern[0]===""&&pattern[1]===""&&pattern[2]==="?"&&typeof pattern[3]=="string"&&/^[a-z]:$/i.test(pattern[3]),fdi=fileUNC?3:fileDrive?0:void 0,pdi=patternUNC?3:patternDrive?0:void 0;if(typeof fdi=="number"&&typeof pdi=="number"){let[fd,pd]=[file[fdi],pattern[pdi]];fd.toLowerCase()===pd.toLowerCase()&&(pattern[pdi]=fd,patternStartIndex=pdi,fileStartIndex=fdi)}}let{optimizationLevel=1}=this.options;return optimizationLevel>=2&&(file=this.levelTwoFileOptimize(file)),pattern.includes(GLOBSTAR)?this.#matchGlobstar(file,pattern,partial,fileStartIndex,patternStartIndex):this.#matchOne(file,pattern,partial,fileStartIndex,patternStartIndex)}#matchGlobstar(file,pattern,partial,fileIndex,patternIndex){let firstgs=pattern.indexOf(GLOBSTAR,patternIndex),lastgs=pattern.lastIndexOf(GLOBSTAR),[head,body,tail]=partial?[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1),[]]:[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1,lastgs),pattern.slice(lastgs+1)];if(head.length){let fileHead=file.slice(fileIndex,fileIndex+head.length);if(!this.#matchOne(fileHead,head,partial,0,0))return!1;fileIndex+=head.length,patternIndex+=head.length}let fileTailMatch=0;if(tail.length){if(tail.length+fileIndex>file.length)return!1;let tailStart=file.length-tail.length;if(this.#matchOne(file,tail,partial,tailStart,0))fileTailMatch=tail.length;else{if(file[file.length-1]!==""||fileIndex+tail.length===file.length||(tailStart--,!this.#matchOne(file,tail,partial,tailStart,0)))return!1;fileTailMatch=tail.length+1}}if(!body.length){let sawSome=!!fileTailMatch;for(let i2=fileIndex;i2<file.length-fileTailMatch;i2++){let f=String(file[i2]);if(sawSome=!0,f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return partial||sawSome}let bodySegments=[[[],0]],currentBody=bodySegments[0],nonGsParts=0,nonGsPartsSums=[0];for(let b2 of body)b2===GLOBSTAR?(nonGsPartsSums.push(nonGsParts),currentBody=[[],0],bodySegments.push(currentBody)):(currentBody[0].push(b2),nonGsParts++);let i=bodySegments.length-1,fileLength=file.length-fileTailMatch;for(let b2 of bodySegments)b2[1]=fileLength-(nonGsPartsSums[i--]+b2[0].length);return!!this.#matchGlobStarBodySections(file,bodySegments,fileIndex,0,partial,0,!!fileTailMatch)}#matchGlobStarBodySections(file,bodySegments,fileIndex,bodyIndex,partial,globStarDepth,sawTail){let bs=bodySegments[bodyIndex];if(!bs){for(let i=fileIndex;i<file.length;i++){sawTail=!0;let f=file[i];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return sawTail}let[body,after]=bs;for(;fileIndex<=after;){if(this.#matchOne(file.slice(0,fileIndex+body.length),body,partial,fileIndex,0)&&globStarDepth<this.maxGlobstarRecursion){let sub=this.#matchGlobStarBodySections(file,bodySegments,fileIndex+body.length,bodyIndex+1,partial,globStarDepth+1,sawTail);if(sub!==!1)return sub}let f=file[fileIndex];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1;fileIndex++}return partial||null}#matchOne(file,pattern,partial,fileIndex,patternIndex){let fi,pi,pl,fl;for(fi=fileIndex,pi=patternIndex,fl=file.length,pl=pattern.length;fi<fl&&pi<pl;fi++,pi++){this.debug("matchOne loop");let p=pattern[pi],f=file[fi];if(this.debug(pattern,p,f),p===!1||p===GLOBSTAR)return!1;let hit;if(typeof p=="string"?(hit=f===p,this.debug("string match",p,f,hit)):(hit=p.test(f),this.debug("pattern match",p,f,hit)),!hit)return!1}if(fi===fl&&pi===pl)return!0;if(fi===fl)return partial;if(pi===pl)return fi===fl-1&&file[fi]==="";throw new Error("wtf?")}braceExpand(){return braceExpand(this.pattern,this.options)}parse(pattern){assertValidPattern(pattern);let options=this.options;if(pattern==="**")return GLOBSTAR;if(pattern==="")return"";let m2,fastTest=null;(m2=pattern.match(starRE))?fastTest=options.dot?starTestDot:starTest:(m2=pattern.match(starDotExtRE))?fastTest=(options.nocase?options.dot?starDotExtTestNocaseDot:starDotExtTestNocase:options.dot?starDotExtTestDot:starDotExtTest)(m2[1]):(m2=pattern.match(qmarksRE))?fastTest=(options.nocase?options.dot?qmarksTestNocaseDot:qmarksTestNocase:options.dot?qmarksTestDot:qmarksTest)(m2):(m2=pattern.match(starDotStarRE))?fastTest=options.dot?starDotStarTestDot:starDotStarTest:(m2=pattern.match(dotStarRE))&&(fastTest=dotStarTest);let re=AST.fromGlob(pattern,this.options).toMMPattern();return fastTest&&typeof re=="object"&&Reflect.defineProperty(re,"test",{value:fastTest}),re}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let set=this.set;if(!set.length)return this.regexp=!1,this.regexp;let options=this.options,twoStar=options.noglobstar?star2:options.dot?twoStarDot:twoStarNoDot,flags=new Set(options.nocase?["i"]:[]),re=set.map(pattern=>{let pp=pattern.map(p=>{if(p instanceof RegExp)for(let f of p.flags.split(""))flags.add(f);return typeof p=="string"?regExpEscape2(p):p===GLOBSTAR?GLOBSTAR:p._src});pp.forEach((p,i)=>{let next=pp[i+1],prev=pp[i-1];p!==GLOBSTAR||prev===GLOBSTAR||(prev===void 0?next!==void 0&&next!==GLOBSTAR?pp[i+1]="(?:\\/|"+twoStar+"\\/)?"+next:pp[i]=twoStar:next===void 0?pp[i-1]=prev+"(?:\\/|\\/"+twoStar+")?":next!==GLOBSTAR&&(pp[i-1]=prev+"(?:\\/|\\/"+twoStar+"\\/)"+next,pp[i+1]=GLOBSTAR))});let filtered=pp.filter(p=>p!==GLOBSTAR);if(this.partial&&filtered.length>=1){let prefixes=[];for(let i=1;i<=filtered.length;i++)prefixes.push(filtered.slice(0,i).join("/"));return"(?:"+prefixes.join("|")+")"}return filtered.join("/")}).join("|"),[open2,close]=set.length>1?["(?:",")"]:["",""];re="^"+open2+re+close+"$",this.partial&&(re="^(?:\\/|"+open2+re.slice(1,-1)+close+")$"),this.negate&&(re="^(?!"+re+").+$");try{this.regexp=new RegExp(re,[...flags].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(p){return this.preserveMultipleSlashes?p.split("/"):this.isWindows&&/^\/\/[^/]+/.test(p)?["",...p.split(/\/+/)]:p.split(/\/+/)}match(f,partial=this.partial){if(this.debug("match",f,this.pattern),this.comment)return!1;if(this.empty)return f==="";if(f==="/"&&partial)return!0;let options=this.options;this.isWindows&&(f=f.split("\\").join("/"));let ff=this.slashSplit(f);this.debug(this.pattern,"split",ff);let set=this.set;this.debug(this.pattern,"set",set);let filename=ff[ff.length-1];if(!filename)for(let i=ff.length-2;!filename&&i>=0;i--)filename=ff[i];for(let pattern of set){let file=ff;if(options.matchBase&&pattern.length===1&&(file=[filename]),this.matchOne(file,pattern,partial))return options.flipNegate?!0:!this.negate}return options.flipNegate?!1:this.negate}static defaults(def){return minimatch.defaults(def).Minimatch}};minimatch.AST=AST;minimatch.Minimatch=Minimatch;minimatch.escape=escape;minimatch.unescape=unescape;var defaultModelPerProvider={"amazon-bedrock":"us.anthropic.claude-opus-4-6-v1","ant-ling":"Ring-2.6-1T",anthropic:"claude-opus-4-8",openai:"gpt-5.5","azure-openai-responses":"gpt-5.4","openai-codex":"gpt-5.5",radius:"auto",nvidia:"nvidia/nemotron-3-super-120b-a12b",deepseek:"deepseek-v4-pro",google:"gemini-3.1-pro-preview","google-vertex":"gemini-3.1-pro-preview","github-copilot":"gpt-5.4",openrouter:"moonshotai/kimi-k2.6","vercel-ai-gateway":"zai/glm-5.1",xai:"grok-4.6",groq:"openai/gpt-oss-120b",cerebras:"gpt-oss-120b",zai:"glm-5.3","zai-coding-cn":"glm-5.3",mistral:"devstral-medium-latest",minimax:"MiniMax-M2.7","minimax-cn":"MiniMax-M2.7",moonshotai:"kimi-k2.6","moonshotai-cn":"kimi-k2.6",huggingface:"moonshotai/Kimi-K2.6",fireworks:"accounts/fireworks/models/kimi-k2p6",together:"moonshotai/Kimi-K2.6",baseten:"zai-org/GLM-5.2",opencode:"kimi-k2.6","opencode-go":"kimi-k2.6","kimi-coding":"kimi-for-coding","cloudflare-workers-ai":"@cf/moonshotai/kimi-k2.6","cloudflare-ai-gateway":"workers-ai/@cf/moonshotai/kimi-k2.6","qwen-token-plan":"qwen3.7-max","qwen-token-plan-cn":"qwen3.7-max","qwen-token-plan-individual":"qwen3.8-max",xiaomi:"mimo-v2.5-pro","xiaomi-token-plan-cn":"mimo-v2.5-pro","xiaomi-token-plan-ams":"mimo-v2.5-pro","xiaomi-token-plan-sgp":"mimo-v2.5-pro"};function isAlias(id){return id.endsWith("-latest")?!0:!/-\d{8}$/.test(id)}function findExactModelReferenceMatch(modelReference,availableModels){let trimmedReference=modelReference.trim();if(!trimmedReference)return;let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels.filter(model=>`${model.provider}/${model.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length===1)return canonicalMatches[0];if(canonicalMatches.length>1)return;let slashIndex=trimmedReference.indexOf("/");if(slashIndex!==-1){let provider=trimmedReference.substring(0,slashIndex).trim(),modelId=trimmedReference.substring(slashIndex+1).trim();if(provider&&modelId){let providerMatches=availableModels.filter(model=>model.provider.toLowerCase()===provider.toLowerCase()&&model.id.toLowerCase()===modelId.toLowerCase());if(providerMatches.length===1)return providerMatches[0];if(providerMatches.length>1)return}}let idMatches=availableModels.filter(model=>model.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches[0]:void 0}function tryMatchModel(modelPattern,availableModels){let exactMatch=findExactModelReferenceMatch(modelPattern,availableModels);if(exactMatch)return exactMatch;let matches=availableModels.filter(m2=>m2.id.toLowerCase().includes(modelPattern.toLowerCase())||m2.name?.toLowerCase().includes(modelPattern.toLowerCase()));if(matches.length===0)return;let aliases=matches.filter(m2=>isAlias(m2.id)),datedVersions=matches.filter(m2=>!isAlias(m2.id));return aliases.length>0?(aliases.sort((a,b2)=>b2.id.localeCompare(a.id)),aliases[0]):(datedVersions.sort((a,b2)=>b2.id.localeCompare(a.id)),datedVersions[0])}function buildFallbackModel(provider,modelId,availableModels){let providerModels=availableModels.filter(m2=>m2.provider===provider);if(providerModels.length===0)return;let defaultId=defaultModelPerProvider[provider];return{...defaultId?providerModels.find(m2=>m2.id===defaultId)??providerModels[0]:providerModels[0],id:modelId,name:modelId}}function parseModelPattern(pattern,availableModels,options){let exactMatch=tryMatchModel(pattern,availableModels);if(exactMatch)return{model:exactMatch,thinkingLevel:void 0,warning:void 0};let lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex===-1)return{model:void 0,thinkingLevel:void 0,warning:void 0};let prefix=pattern.substring(0,lastColonIndex),suffix=pattern.substring(lastColonIndex+1);if(isValidThinkingLevel(suffix)){let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:result.warning?void 0:suffix,warning:result.warning}:result}else{if(!(options?.allowInvalidThinkingLevelFallback??!0))return{model:void 0,thinkingLevel:void 0,warning:void 0};let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:void 0,warning:`Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`}:result}}function resolveModelScopeFromModels(patterns,models){let availableModels=[...models],scopedModels=[],diagnostics=[];for(let pattern of patterns){if(pattern.includes("*")||pattern.includes("?")||pattern.includes("[")){let colonIdx=pattern.lastIndexOf(":"),globPattern=pattern,thinkingLevel2;if(colonIdx!==-1){let suffix=pattern.substring(colonIdx+1);isValidThinkingLevel(suffix)&&(thinkingLevel2=suffix,globPattern=pattern.substring(0,colonIdx))}let exactMatch=findExactModelReferenceMatch(globPattern,availableModels);if(exactMatch){scopedModels.find(sm=>modelsAreEqual(sm.model,exactMatch))||scopedModels.push({model:exactMatch,thinkingLevel:thinkingLevel2});continue}let matchingModels=availableModels.filter(m2=>{let fullId=`${m2.provider}/${m2.id}`;return minimatch(fullId,globPattern,{nocase:!0})||minimatch(m2.id,globPattern,{nocase:!0})});if(matchingModels.length===0){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}for(let model2 of matchingModels)scopedModels.find(sm=>modelsAreEqual(sm.model,model2))||scopedModels.push({model:model2,thinkingLevel:thinkingLevel2});continue}let{model,thinkingLevel,warning}=parseModelPattern(pattern,availableModels);if(warning&&diagnostics.push({type:"warning",code:"invalid-thinking-level",message:warning,pattern}),!model){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}scopedModels.find(sm=>modelsAreEqual(sm.model,model))||scopedModels.push({model,thinkingLevel})}return{scopedModels,diagnostics}}async function resolveModelScopeWithDiagnostics(patterns,modelRuntime,options){return resolveModelScopeFromModels(patterns,await modelRuntime.getAvailable(void 0,options))}async function resolveModelScope(patterns,modelRuntime,options){let{scopedModels,diagnostics}=await resolveModelScopeWithDiagnostics(patterns,modelRuntime,options);for(let diagnostic of diagnostics)console.warn(source_default.yellow(`Warning: ${diagnostic.message}`));return scopedModels}function resolveCliModel(options){let{cliProvider,cliModel,cliThinking,modelRuntime}=options;if(!cliModel)return{model:void 0,warning:void 0,error:void 0};let availableModels=[...modelRuntime.getModels()];if(availableModels.length===0)return{model:void 0,warning:void 0,error:"No models available. Check your installation or add models to models.json."};let providerMap=new Map;for(let m2 of availableModels)providerMap.set(m2.provider.toLowerCase(),m2.provider);let provider=cliProvider?providerMap.get(cliProvider.toLowerCase()):void 0;if(cliProvider&&!provider)return{model:void 0,warning:void 0,error:`Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`};let pattern=cliModel,inferredProvider=!1;if(!provider){let slashIndex=cliModel.indexOf("/");if(slashIndex!==-1){let maybeProvider=cliModel.substring(0,slashIndex),canonical=providerMap.get(maybeProvider.toLowerCase());canonical&&(provider=canonical,pattern=cliModel.substring(slashIndex+1),inferredProvider=!0)}}if(!provider){let lower=cliModel.toLowerCase(),exactMatches=availableModels.filter(m2=>m2.id.toLowerCase()===lower||`${m2.provider}/${m2.id}`.toLowerCase()===lower);if(exactMatches.length===1)return{model:exactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};if(exactMatches.length>1){let authenticatedExactMatches=exactMatches.filter(m2=>modelRuntime.hasConfiguredAuth(m2.provider));if(authenticatedExactMatches.length===1)return{model:authenticatedExactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};let matches=exactMatches.map(m2=>`${m2.provider}/${m2.id}`).sort((a,b2)=>a.localeCompare(b2)).join(", "),authHint=authenticatedExactMatches.length===0?"No matching provider is authenticated.":"More than one matching provider is authenticated.";return{model:void 0,warning:void 0,thinkingLevel:void 0,error:`Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`}}}if(cliProvider&&provider){let prefix=`${provider}/`;cliModel.toLowerCase().startsWith(prefix.toLowerCase())&&(pattern=cliModel.substring(prefix.length))}let candidates=provider?availableModels.filter(m2=>m2.provider===provider):availableModels,{model,thinkingLevel,warning}=parseModelPattern(pattern,candidates,{allowInvalidThinkingLevelFallback:!1});if(model){if(inferredProvider){let rawExactMatches=availableModels.filter(m2=>m2.id.toLowerCase()===cliModel.toLowerCase()&&!modelsAreEqual(m2,model));if(rawExactMatches.length>0&&!modelRuntime.hasConfiguredAuth(model.provider)){let authenticatedRawMatches=rawExactMatches.filter(m2=>modelRuntime.hasConfiguredAuth(m2.provider));if(authenticatedRawMatches.length===1)return{model:authenticatedRawMatches[0],thinkingLevel:void 0,warning:void 0,error:void 0}}}return{model,thinkingLevel,warning,error:void 0}}if(inferredProvider){let lower=cliModel.toLowerCase(),exact=availableModels.find(m2=>m2.id.toLowerCase()===lower||`${m2.provider}/${m2.id}`.toLowerCase()===lower);if(exact)return{model:exact,warning:void 0,thinkingLevel:void 0,error:void 0};let fallback=parseModelPattern(cliModel,availableModels,{allowInvalidThinkingLevelFallback:!1});if(fallback.model)return{model:fallback.model,thinkingLevel:fallback.thinkingLevel,warning:fallback.warning,error:void 0}}if(provider){let fallbackPattern=pattern,fallbackThinking;if(!cliThinking){let lastColon=pattern.lastIndexOf(":");if(lastColon!==-1){let suffix=pattern.substring(lastColon+1);isValidThinkingLevel(suffix)&&(fallbackPattern=pattern.substring(0,lastColon),fallbackThinking=suffix)}}let fallbackModel=buildFallbackModel(provider,fallbackPattern,availableModels);if(fallbackModel){let requestedThinking=cliThinking??fallbackThinking,model2=requestedThinking&&requestedThinking!=="off"?{...fallbackModel,reasoning:!0}:fallbackModel,fallbackWarning=warning?`${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`:`Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;return{model:model2,thinkingLevel:fallbackThinking,warning:fallbackWarning,error:void 0}}}let display=provider?`${provider}/${pattern}`:cliModel;return{model:void 0,thinkingLevel:void 0,warning,error:`Model "${display}" not found. Use --list-models to see available models.`}}async function findInitialModel(options){let{cliProvider,cliModel,scopedModels,isContinuing,defaultProvider,defaultModelId,defaultThinkingLevel,modelThinkingLevels,modelRuntime}=options,model,thinkingLevel=DEFAULT_THINKING_LEVEL;if(cliProvider&&cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error&&(console.error(source_default.red(resolved.error)),process.exit(1)),resolved.model)return{model:resolved.model,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(scopedModels.length>0&&!isContinuing){let scopedModel=scopedModels[0],perModel=modelThinkingLevels?.[`${scopedModel.model.provider}/${scopedModel.model.id}`];return{model:scopedModel.model,thinkingLevel:scopedModel.thinkingLevel??perModel??defaultThinkingLevel??DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(defaultProvider&&defaultModelId){let found=modelRuntime.getModel(defaultProvider,defaultModelId);if(found&&modelRuntime.hasConfiguredAuth(found.provider)){model=found;let perModel=modelThinkingLevels?.[`${defaultProvider}/${defaultModelId}`];return perModel?thinkingLevel=perModel:defaultThinkingLevel&&(thinkingLevel=defaultThinkingLevel),{model,thinkingLevel,fallbackMessage:void 0}}}let availableModels=[...modelRuntime.getAvailableSnapshot()];if(availableModels.length>0){for(let provider of Object.keys(defaultModelPerProvider)){let defaultId=defaultModelPerProvider[provider],match2=availableModels.find(m2=>m2.provider===provider&&m2.id===defaultId);if(match2)return{model:match2,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:availableModels[0],thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:void 0,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}import{dirname as dirname14,join as join23}from"node:path";import{readFile as readFile2}from"node:fs/promises";function stripJsonComments(input){return input.replace(/"(?:\\.|[^"\\])*"|\/\/[^\n]*/g,m2=>m2[0]==='"'?m2:"").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(m2,tail)=>tail??(m2[0]==='"'?m2:""))}var PercentileCutoffsSchema=typebox_exports.Object({p50:typebox_exports.Optional(typebox_exports.Number()),p75:typebox_exports.Optional(typebox_exports.Number()),p90:typebox_exports.Optional(typebox_exports.Number()),p99:typebox_exports.Optional(typebox_exports.Number())}),OpenRouterRoutingSchema=typebox_exports.Object({allow_fallbacks:typebox_exports.Optional(typebox_exports.Boolean()),require_parameters:typebox_exports.Optional(typebox_exports.Boolean()),data_collection:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("deny"),typebox_exports.Literal("allow")])),zdr:typebox_exports.Optional(typebox_exports.Boolean()),enforce_distillable_text:typebox_exports.Optional(typebox_exports.Boolean()),order:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),only:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),ignore:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),quantizations:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),sort:typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Object({by:typebox_exports.Optional(typebox_exports.String()),partition:typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Null()]))})])),max_price:typebox_exports.Optional(typebox_exports.Object({prompt:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),completion:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),image:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),audio:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),request:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()]))})),preferred_min_throughput:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),PercentileCutoffsSchema])),preferred_max_latency:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),PercentileCutoffsSchema]))}),VercelGatewayRoutingSchema=typebox_exports.Object({only:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),order:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String()))}),ThinkingLevelMapValueSchema=typebox_exports.Union([typebox_exports.String(),typebox_exports.Null()]),ThinkingLevelMapSchema=typebox_exports.Object({off:typebox_exports.Optional(ThinkingLevelMapValueSchema),minimal:typebox_exports.Optional(ThinkingLevelMapValueSchema),low:typebox_exports.Optional(ThinkingLevelMapValueSchema),medium:typebox_exports.Optional(ThinkingLevelMapValueSchema),high:typebox_exports.Optional(ThinkingLevelMapValueSchema),xhigh:typebox_exports.Optional(ThinkingLevelMapValueSchema),max:typebox_exports.Optional(ThinkingLevelMapValueSchema)}),ChatTemplateKwargScalarSchema=typebox_exports.Union([typebox_exports.String(),typebox_exports.Number(),typebox_exports.Boolean(),typebox_exports.Null()]),ChatTemplateKwargVariableSchema=typebox_exports.Object({$var:typebox_exports.Union([typebox_exports.Literal("thinking.enabled"),typebox_exports.Literal("thinking.effort")]),omitWhenOff:typebox_exports.Optional(typebox_exports.Boolean())}),ChatTemplateKwargSchema=typebox_exports.Union([ChatTemplateKwargScalarSchema,ChatTemplateKwargVariableSchema]),OpenAICompletionsCompatSchema=typebox_exports.Object({supportsStore:typebox_exports.Optional(typebox_exports.Boolean()),supportsDeveloperRole:typebox_exports.Optional(typebox_exports.Boolean()),supportsReasoningEffort:typebox_exports.Optional(typebox_exports.Boolean()),supportsUsageInStreaming:typebox_exports.Optional(typebox_exports.Boolean()),supportsFinishReason:typebox_exports.Optional(typebox_exports.Boolean()),maxTokensField:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("max_completion_tokens"),typebox_exports.Literal("max_tokens")])),requiresToolResultName:typebox_exports.Optional(typebox_exports.Boolean()),requiresAssistantAfterToolResult:typebox_exports.Optional(typebox_exports.Boolean()),requiresThinkingAsText:typebox_exports.Optional(typebox_exports.Boolean()),requiresReasoningContentOnAssistantMessages:typebox_exports.Optional(typebox_exports.Boolean()),thinkingFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openrouter"),typebox_exports.Literal("together"),typebox_exports.Literal("baseten"),typebox_exports.Literal("deepseek"),typebox_exports.Literal("zai"),typebox_exports.Literal("qwen"),typebox_exports.Literal("chat-template"),typebox_exports.Literal("qwen-chat-template"),typebox_exports.Literal("string-thinking"),typebox_exports.Literal("ant-ling")])),chatTemplateKwargs:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ChatTemplateKwargSchema)),chatTemplateArgs:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ChatTemplateKwargSchema)),cacheControlFormat:typebox_exports.Optional(typebox_exports.Literal("anthropic")),openRouterRouting:typebox_exports.Optional(OpenRouterRoutingSchema),vercelGatewayRouting:typebox_exports.Optional(VercelGatewayRoutingSchema),supportsOpenAIGrammarTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictMode:typebox_exports.Optional(typebox_exports.Boolean()),sendSessionAffinityHeaders:typebox_exports.Optional(typebox_exports.Boolean()),deferredToolsMode:typebox_exports.Optional(typebox_exports.Literal("kimi")),sessionAffinityFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openai-nosession"),typebox_exports.Literal("openrouter")])),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean())}),OpenAIResponsesCompatSchema=typebox_exports.Object({supportsDeveloperRole:typebox_exports.Optional(typebox_exports.Boolean()),sessionAffinityFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openai-nosession"),typebox_exports.Literal("openrouter")])),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictMode:typebox_exports.Optional(typebox_exports.Boolean()),supportsOpenAIGrammarTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsAdditionalTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsToolSearch:typebox_exports.Optional(typebox_exports.Boolean())}),AnthropicMessagesCompatSchema=typebox_exports.Object({supportsEagerToolInputStreaming:typebox_exports.Optional(typebox_exports.Boolean()),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean()),sendSessionAffinityHeaders:typebox_exports.Optional(typebox_exports.Boolean()),supportsCacheControlOnTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsTemperature:typebox_exports.Optional(typebox_exports.Boolean()),forceAdaptiveThinking:typebox_exports.Optional(typebox_exports.Boolean()),allowEmptySignature:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsToolReferences:typebox_exports.Optional(typebox_exports.Boolean())}),ProviderCompatSchema=typebox_exports.Union([OpenAICompletionsCompatSchema,OpenAIResponsesCompatSchema,AnthropicMessagesCompatSchema]),ModelCostRatesSchema={input:typebox_exports.Number(),output:typebox_exports.Number(),cacheRead:typebox_exports.Number(),cacheWrite:typebox_exports.Number()},ModelCostTierSchema=typebox_exports.Object({inputTokensAbove:typebox_exports.Number(),...ModelCostRatesSchema}),ModelCostSchema=typebox_exports.Object({...ModelCostRatesSchema,tiers:typebox_exports.Optional(typebox_exports.Array(ModelCostTierSchema))}),ModelDefinitionSchema=typebox_exports.Object({id:typebox_exports.String({minLength:1}),name:typebox_exports.Optional(typebox_exports.String({minLength:1})),api:typebox_exports.Optional(typebox_exports.String({minLength:1})),baseUrl:typebox_exports.Optional(typebox_exports.String({minLength:1})),reasoning:typebox_exports.Optional(typebox_exports.Boolean()),thinkingLevelMap:typebox_exports.Optional(ThinkingLevelMapSchema),input:typebox_exports.Optional(typebox_exports.Array(typebox_exports.Union([typebox_exports.Literal("text"),typebox_exports.Literal("image")]))),cost:typebox_exports.Optional(ModelCostSchema),contextWindow:typebox_exports.Optional(typebox_exports.Number()),maxTokens:typebox_exports.Optional(typebox_exports.Number()),samplingParams:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.Unknown())),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema)}),ModelOverrideSchema=typebox_exports.Object({name:typebox_exports.Optional(typebox_exports.String({minLength:1})),reasoning:typebox_exports.Optional(typebox_exports.Boolean()),thinkingLevelMap:typebox_exports.Optional(ThinkingLevelMapSchema),input:typebox_exports.Optional(typebox_exports.Array(typebox_exports.Union([typebox_exports.Literal("text"),typebox_exports.Literal("image")]))),cost:typebox_exports.Optional(typebox_exports.Object({input:typebox_exports.Optional(typebox_exports.Number()),output:typebox_exports.Optional(typebox_exports.Number()),cacheRead:typebox_exports.Optional(typebox_exports.Number()),cacheWrite:typebox_exports.Optional(typebox_exports.Number()),tiers:typebox_exports.Optional(typebox_exports.Array(ModelCostTierSchema))})),contextWindow:typebox_exports.Optional(typebox_exports.Number()),maxTokens:typebox_exports.Optional(typebox_exports.Number()),samplingParams:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.Unknown())),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema)}),ProviderConfigSchema=typebox_exports.Object({name:typebox_exports.Optional(typebox_exports.String({minLength:1})),baseUrl:typebox_exports.Optional(typebox_exports.String({minLength:1})),apiKey:typebox_exports.Optional(typebox_exports.String({minLength:1})),api:typebox_exports.Optional(typebox_exports.String({minLength:1})),oauth:typebox_exports.Optional(typebox_exports.Literal("radius")),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema),authHeader:typebox_exports.Optional(typebox_exports.Boolean()),models:typebox_exports.Optional(typebox_exports.Array(ModelDefinitionSchema)),modelOverrides:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ModelOverrideSchema))}),ModelsConfigSchema=typebox_exports.Object({providers:typebox_exports.Record(typebox_exports.String(),ProviderConfigSchema)}),validateModelsConfig=Compile(ModelsConfigSchema);function formatValidationPath2(error){if(error.keyword==="required"){let requiredProperty=error.params.requiredProperties?.[0];if(requiredProperty){let basePath=error.instancePath.replace(/^\//,"").replace(/\//g,".");return basePath?`${basePath}.${requiredProperty}`:requiredProperty}}return error.instancePath.replace(/^\//,"").replace(/\//g,".")||"root"}function deepFreeze(value){if(typeof value!="object"||value===null||Object.isFrozen(value))return value;for(let child of Object.values(value))deepFreeze(child);return Object.freeze(value)}var ModelConfig=class _ModelConfig{providers;error;constructor(providers,error){this.providers=providers,this.error=error}static async load(modelsJsonPath){if(!modelsJsonPath)return new _ModelConfig(new Map);let path14=normalizePath(modelsJsonPath),content;try{content=await readFile2(path14,"utf-8")}catch(error){return error.code==="ENOENT"?new _ModelConfig(new Map):new _ModelConfig(new Map,`Failed to load models.json: ${error instanceof Error?error.message:error}
1250
+ ${command}`:command;try{let result=await executeBashWithOperations(resolvedCommand,this.sessionManager.getCwd(),options?.operations??createLocalBashOperations({shellPath}),{onChunk:delta=>{onChunk?.(delta),this._emit({type:"bash_execution_update",id:options?.id,delta})},signal:abortController.signal});return this.recordBashResult(command,result,options),result}finally{this._bashAbortControllers.delete(abortController)}}recordBashResult(command,result,options){let bashMessage={role:"bashExecution",command,output:result.output,exitCode:result.exitCode,cancelled:result.cancelled,truncated:result.truncated,fullOutputPath:result.fullOutputPath,timestamp:Date.now(),excludeFromContext:options?.excludeFromContext};this.isStreaming?this._pendingBashMessages.push(bashMessage):(this.agent.state.messages.push(bashMessage),this.sessionManager.appendMessage(bashMessage))}abortBash(){for(let abortController of[...this._bashAbortControllers])abortController.abort()}get isBashRunning(){return this._bashAbortControllers.size>0}get hasPendingBashMessages(){return this._pendingBashMessages.length>0}_flushPendingBashMessages(){if(this._pendingBashMessages.length!==0){for(let bashMessage of this._pendingBashMessages)this.agent.state.messages.push(bashMessage),this.sessionManager.appendMessage(bashMessage);this._pendingBashMessages=[]}}setSessionName(name){this.sessionManager.appendSessionInfo(name);let event={type:"session_info_changed",name:this.sessionManager.getSessionName()};this._emit(event),this._extensionRunner.emit(event)}async navigateTree(targetId,options={}){if(this.isStreaming)throw new Error("Wait for the current response to finish before navigating the session tree.");let oldLeafId=this.sessionManager.getLeafId();if(targetId===oldLeafId)return{cancelled:!1};if(options.summarize&&!this.model)throw new Error("No model available for summarization");let targetEntry=this.sessionManager.getEntry(targetId);if(!targetEntry)throw new Error(`Entry ${targetId} not found`);let{entries:entriesToSummarize,commonAncestorId}=collectEntriesForBranchSummary(this.sessionManager,oldLeafId,targetId),customInstructions=options.customInstructions,replaceInstructions=options.replaceInstructions,label=options.label,preparation={targetId,oldLeafId,commonAncestorId,entriesToSummarize,userWantsSummary:options.summarize??!1,customInstructions,replaceInstructions,label};this._branchSummaryAbortController=new AbortController;try{let extensionSummary,fromExtension=!1;if(this._extensionRunner.hasHandlers("session_before_tree")){let result=await this._extensionRunner.emit({type:"session_before_tree",preparation,signal:this._branchSummaryAbortController.signal});if(result?.cancel)return{cancelled:!0};result?.summary&&options.summarize&&(extensionSummary=result.summary,fromExtension=!0),result?.customInstructions!==void 0&&(customInstructions=result.customInstructions),result?.replaceInstructions!==void 0&&(replaceInstructions=result.replaceInstructions),result?.label!==void 0&&(label=result.label)}let summaryText,summaryDetails,summaryUsage;if(options.summarize&&entriesToSummarize.length>0&&!extensionSummary){let model=this.model,{model:requestModel,apiKey,headers,env:env2}=await this._getSummarizationRequestAuth(model),branchSummarySettings=this.settingsManager.getBranchSummarySettings(),result=await generateBranchSummary(entriesToSummarize,{model:requestModel,apiKey,headers,env:env2,signal:this._branchSummaryAbortController.signal,customInstructions,replaceInstructions,reserveTokens:branchSummarySettings.reserveTokens,streamFn:this.agent.streamFunction,retry:this.settingsManager.getRetrySettings(),callbacks:this._summarizationRetryCallbacks({source:"branchSummary"})});if(result.aborted)return{cancelled:!0,aborted:!0};if(result.error)throw new Error(result.error);summaryText=result.summary,summaryUsage=result.usage,summaryDetails={readFiles:result.readFiles||[],modifiedFiles:result.modifiedFiles||[]}}else extensionSummary&&(summaryText=extensionSummary.summary,summaryDetails=extensionSummary.details,summaryUsage=extensionSummary.usage);let newLeafId,editorText;targetEntry.type==="message"&&targetEntry.message.role==="user"?(newLeafId=targetEntry.parentId,editorText=contentText(targetEntry.message.content,"")):targetEntry.type==="custom_message"?(newLeafId=targetEntry.parentId,editorText=contentText(targetEntry.content,"")):newLeafId=targetId;let summaryEntry;if(summaryText){let summaryId=this.sessionManager.branchWithSummary(newLeafId,summaryText,summaryDetails,fromExtension,summaryUsage);summaryEntry=this.sessionManager.getEntry(summaryId),label&&this.sessionManager.appendLabelChange(summaryId,label)}else newLeafId===null?this.sessionManager.resetLeaf():this.sessionManager.branch(newLeafId);label&&!summaryText&&this.sessionManager.appendLabelChange(targetId,label);let sessionContext=this.sessionManager.buildSessionContext();return this.agent.state.messages=sessionContext.messages,await this._extensionRunner.emit({type:"session_tree",newLeafId:this.sessionManager.getLeafId(),oldLeafId,summaryEntry,fromExtension:summaryText?fromExtension:void 0}),{editorText,cancelled:!1,summaryEntry}}finally{this._branchSummaryAbortController=void 0}}getUserMessagesForForking(){let entries=this.sessionManager.getEntries(),result=[];for(let entry of entries){if(entry.type!=="message"||entry.message.role!=="user")continue;let text=contentText(entry.message.content,"");text&&result.push({entryId:entry.id,text})}return result}getSessionStats(){let userMessages=0,assistantMessages=0,toolResults=0,totalMessages=0,toolCalls=0,usageTotals=createUsageTotals();for(let entry of this.sessionManager.getEntries()){if((entry.type==="branch_summary"||entry.type==="compaction")&&entry.usage&&addUsageToTotals(usageTotals,entry.usage),entry.type!=="message")continue;totalMessages++;let message=entry.message;if(message.role==="user")userMessages++;else if(message.role==="toolResult")toolResults++,message.usage&&addUsageToTotals(usageTotals,message.usage);else if(message.role==="assistant"){assistantMessages++;let assistantMsg=message;Array.isArray(assistantMsg.content)&&(toolCalls+=assistantMsg.content.filter(c2=>c2.type==="toolCall").length),addUsageToTotals(usageTotals,assistantMsg.usage)}}return{sessionFile:this.sessionFile,sessionId:this.sessionId,userMessages,assistantMessages,toolCalls,toolResults,totalMessages,tokens:{input:usageTotals.input,output:usageTotals.output,cacheRead:usageTotals.cacheRead,cacheWrite:usageTotals.cacheWrite,total:usageTotals.input+usageTotals.output+usageTotals.cacheRead+usageTotals.cacheWrite},cost:usageTotals.cost,contextUsage:this.getContextUsage()}}getContextUsage(){let model=this.model;if(!model)return;let contextWindow=model.contextWindow??0;if(contextWindow<=0)return;let branchEntries=this.sessionManager.getBranch(),latestCompaction=getLatestCompactionEntry(branchEntries);if(latestCompaction){let compactionIndex=branchEntries.lastIndexOf(latestCompaction),hasPostCompactionUsage=!1;for(let i=branchEntries.length-1;i>compactionIndex;i--){let entry=branchEntries[i];if(entry.type==="message"&&entry.message.role==="assistant"){let assistant=entry.message;if(assistant.stopReason!=="aborted"&&assistant.stopReason!=="error"&&calculateContextTokens(assistant.usage)>0){hasPostCompactionUsage=!0;break}}}if(!hasPostCompactionUsage)return{tokens:null,contextWindow,percent:null}}let estimate=estimateContextTokens(this.messages),percent=estimate.tokens/contextWindow*100;return{tokens:estimate.tokens,contextWindow,percent}}async exportToHtml(outputPath,options={}){let themeName=[options.themeName,this.settingsManager.getTheme()].find(candidate=>candidate!==void 0&&getThemeByName(candidate)!==void 0),toolRenderer=createToolHtmlRenderer({getToolDefinition:name=>this.getToolDefinition(name),theme,cwd:this.sessionManager.getCwd()});return await exportSessionToHtml(this.sessionManager,this.state,{outputPath,themeName,toolRenderer})}exportToJsonl(outputPath){return exportSessionToJsonl(this.sessionManager,outputPath)}getLastAssistantText(){let lastAssistant=this.messages.slice().reverse().find(m2=>{if(m2.role!=="assistant")return!1;let msg=m2;return!(msg.stopReason==="aborted"&&msg.content.length===0)});if(!lastAssistant)return;let text="";for(let content of lastAssistant.content)content.type==="text"&&(text+=content.text);return text.trim()||void 0}createReplacedSessionContext(){let context=Object.defineProperties({},Object.getOwnPropertyDescriptors(this._extensionRunner.createCommandContext()));return context.sendMessage=(message,options)=>this.sendCustomMessage(message,options),context.sendUserMessage=(content,options)=>this.sendUserMessage(content,options),context}hasExtensionHandlers(eventType){return this._extensionRunner.hasHandlers(eventType)}get extensionRunner(){return this._extensionRunner}};var import_proper_lockfile=__toESM(require_proper_lockfile(),1);import{existsSync as existsSync11,mkdirSync as mkdirSync5,readFileSync as readFileSync8,writeFileSync as writeFileSync5}from"fs";import{dirname as dirname13,join as join21}from"path";import{setTimeout as sleep3}from"timers/promises";function abortReason(signal){if(signal.reason!==void 0)return signal.reason;let error=new Error("The operation was aborted");return error.name="AbortError",error}function operationSignal(signal){return signal??new AbortController().signal}function raceWithAbortSignal(operation,signal){return signal?signal.aborted?(operation.catch(()=>{}),Promise.reject(abortReason(signal))):new Promise((resolve16,reject)=>{let settled=!1,cleanup=()=>signal.removeEventListener("abort",onAbort),onAbort=()=>{settled||(settled=!0,cleanup(),reject(abortReason(signal)))};signal.addEventListener("abort",onAbort,{once:!0}),operation.then(value=>{settled||(settled=!0,cleanup(),resolve16(value))},error=>{settled||(settled=!0,cleanup(),reject(error))}),signal.aborted&&onAbort()}):operation}var AUTH_FILE_WRITE_OPTIONS={encoding:"utf-8",mode:384},sharedAuthFileReadState,FileAuthStorageBackend=class{authPath;constructor(authPath=join21(getAgentDir(),"auth.json")){this.authPath=normalizePath(authPath)}ensureParentDir(){let dir=dirname13(this.authPath);existsSync11(dir)||mkdirSync5(dir,{recursive:!0,mode:448})}ensureFileExists(){existsSync11(this.authPath)||writeFileSync5(this.authPath,"{}",AUTH_FILE_WRITE_OPTIONS)}acquireLockSyncWithRetry(path14){let lastError;for(let attempt2=1;attempt2<=10;attempt2++)try{return import_proper_lockfile.default.lockSync(path14,{realpath:!1})}catch(error){if((typeof error=="object"&&error!==null&&"code"in error?String(error.code):void 0)!=="ELOCKED"||attempt2===10)throw error;lastError=error;let start=Date.now();for(;Date.now()-start<20;);}throw lastError??new Error("Failed to acquire auth storage lock")}withLock(fn){this.ensureParentDir(),this.ensureFileExists();let release;try{release=this.acquireLockSyncWithRetry(this.authPath);let current=existsSync11(this.authPath)?readFileSync8(this.authPath,"utf-8"):void 0,{result,next}=fn(current);return next!==void 0&&writeFileSync5(this.authPath,next,AUTH_FILE_WRITE_OPTIONS),result}finally{release&&release()}}async acquireLockAsync(signal,onCompromised){let deadline=Date.now()+3e4,retry=0;for(;;){signal?.throwIfAborted();let release;try{release=await import_proper_lockfile.default.lock(this.authPath,{realpath:!1,retries:0,stale:3e4,onCompromised})}catch(error){signal?.throwIfAborted();let code=typeof error=="object"&&error!==null&&"code"in error?String(error.code):void 0,remainingMs=deadline-Date.now();if(code!=="ELOCKED"||remainingMs<=0)throw error;let baseDelayMs=Math.min(10*2**retry,2e3/2);retry++;let delayMs=Math.min(Math.round(baseDelayMs*(1+Math.random())),remainingMs);signal?await sleep3(delayMs,void 0,{signal}):await sleep3(delayMs);continue}return signal?.aborted&&(await release(),signal.throwIfAborted()),release}}async withLockAsync(fn,options){options?.signal?.throwIfAborted(),this.ensureParentDir(),this.ensureFileExists();let release,lockCompromised=!1,lockCompromisedError,throwIfCompromised=()=>{if(lockCompromised)throw lockCompromisedError??new Error("Auth storage lock was compromised")};try{release=await this.acquireLockAsync(options?.signal,error=>{lockCompromised=!0,lockCompromisedError=error}),throwIfCompromised(),options?.signal?.throwIfAborted();let current=existsSync11(this.authPath)?readFileSync8(this.authPath,"utf-8"):void 0,{result,next}=await fn(current);return throwIfCompromised(),options?.signal?.throwIfAborted(),next!==void 0&&writeFileSync5(this.authPath,next,AUTH_FILE_WRITE_OPTIONS),throwIfCompromised(),result}finally{if(release)try{await release()}catch{}}}},ReadOnlyAuthStorage=class{authPath;data;constructor(authPath=join21(getAgentDir(),"auth.json")){this.authPath=normalizePath(authPath)}load(){if(this.data)return this.data;let parsed;try{parsed=JSON.parse(stripBom(readFileSync8(this.authPath,"utf-8")))}catch(error){if(error.code==="ENOENT")return this.data={},this.data;throw new Error(`Failed to read auth.json: ${error instanceof Error?error.message:String(error)}`)}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed))throw new Error("Invalid auth.json: expected an object");for(let[providerId,credential]of Object.entries(parsed)){if(typeof credential!="object"||credential===null||Array.isArray(credential))throw new Error(`Invalid auth.json credential for provider "${providerId}"`);let value=credential;if(value.type==="api_key"){let validKey=value.key===void 0||typeof value.key=="string",validEnv=value.env===void 0||typeof value.env=="object"&&value.env!==null&&!Array.isArray(value.env)&&Object.values(value.env).every(entry=>typeof entry=="string");if(validKey&&validEnv)continue}else if(value.type==="oauth"&&typeof value.access=="string"&&typeof value.refresh=="string"&&typeof value.expires=="number"&&Number.isFinite(value.expires))continue;throw new Error(`Invalid auth.json credential for provider "${providerId}"`)}return this.data=parsed,this.data}async read(providerId,options){options?.signal?.throwIfAborted();let credential=this.load()[providerId];if(options?.signal?.throwIfAborted(),!!credential)return credential.type!=="api_key"||!credential.key||isCommandConfigValue(credential.key)?structuredClone(credential):{...credential,key:resolveConfigValue(credential.key,credential.env)}}async list(options){options?.signal?.throwIfAborted();let credentials=Object.entries(this.load()).map(([providerId,credential])=>({providerId,type:credential.type}));return options?.signal?.throwIfAborted(),credentials}async modify(_providerId,_fn,_options){throw new Error("Read-only credential storage cannot modify auth.json")}async delete(_providerId,_options){throw new Error("Read-only credential storage cannot modify auth.json")}},InMemoryAuthStorageBackend=class{value;asyncChain=Promise.resolve();withLock(fn){let{result,next}=fn(this.value);return next!==void 0&&(this.value=next),result}withLockAsync(fn,options){let previous=this.asyncChain,operation=(async()=>{await previous.catch(()=>{}),options?.signal?.throwIfAborted();let{result,next}=await fn(this.value);return options?.signal?.throwIfAborted(),next!==void 0&&(this.value=next),result})();return this.asyncChain=operation.catch(()=>{}),raceWithAbortSignal(operation,options?.signal)}},AuthStorage=class _AuthStorage{storage;authPath;readState;constructor(storage,authPath){if(this.storage=storage,this.authPath=authPath,this.readState=authPath&&sharedAuthFileReadState?.authPath===authPath?sharedAuthFileReadState.readState:{data:{}},authPath&&!sharedAuthFileReadState&&(sharedAuthFileReadState={authPath,readState:this.readState}),authPath){let revision=getFileRevision(authPath);if(revision!==void 0&&revision===this.readState.revision)return}this.reload()}static create(authPath=join21(getAgentDir(),"auth.json")){let normalizedAuthPath=normalizePath(authPath);return new _AuthStorage(new FileAuthStorageBackend(normalizedAuthPath),normalizedAuthPath)}static fromStorage(storage){return new _AuthStorage(storage)}static inMemory(data={}){let storage=new InMemoryAuthStorageBackend;return storage.withLock(()=>({result:void 0,next:JSON.stringify(data,null,2)})),_AuthStorage.fromStorage(storage)}parseStorageData(content){return content?JSON.parse(stripBom(content)):{}}updateReadState(data,revision){this.readState.data=data,this.readState.revision=revision}reload(){let content,revision;try{this.storage.withLock(current=>(content=current,revision=this.authPath?getFileRevision(this.authPath):void 0,{result:void 0})),this.updateReadState(this.parseStorageData(content),revision)}catch{}}async reloadFromStorageAsync(options){return this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content),revision=this.authPath?getFileRevision(this.authPath):void 0;return this.updateReadState(currentData,revision),{result:currentData}},options)}async readLatestData(options){if(options?.signal?.throwIfAborted(),!this.authPath){let reload2=this.reloadFromStorageAsync(options);return options?.signal?reload2:reload2.catch(()=>this.readState.data)}let revision=getFileRevision(this.authPath);if(revision!==void 0&&revision===this.readState.revision)return this.readState.data;if(!this.readState.reload){let controller=new AbortController,reload2={controller,promise:this.reloadFromStorageAsync({signal:controller.signal}),readers:0};this.readState.reload=reload2,reload2.promise.then(()=>{this.readState.reload===reload2&&(this.readState.reload=void 0)},()=>{this.readState.reload===reload2&&(this.readState.reload=void 0)})}let reload=this.readState.reload;reload.readers++;try{let result=raceWithAbortSignal(reload.promise,options?.signal);return options?.signal?await result:await result.catch(()=>this.readState.data)}finally{reload.readers--,reload.readers===0&&this.readState.reload===reload&&(this.readState.reload=void 0,reload.controller.abort())}}async read(provider,options){let credential=(await this.readLatestData(options))[provider];return options?.signal?.throwIfAborted(),credential?.type!=="api_key"||credential.key===void 0?credential:{...credential,key:resolveConfigValue(credential.key,credential.env)}}async modify(provider,fn,options){let latestData=this.readState.data,revision,result=await this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content),next=await fn(currentData[provider]);if(next===void 0)return latestData=currentData,revision=this.authPath?getFileRevision(this.authPath):void 0,{result:currentData[provider]};let merged={...currentData,[provider]:next};return latestData=merged,{result:next,next:JSON.stringify(merged,null,2)}},options);return this.updateReadState(latestData,revision),result}async delete(provider,options){let latestData=this.readState.data;await this.storage.withLockAsync(async content=>{let currentData=this.parseStorageData(content);return delete currentData[provider],latestData=currentData,{result:void 0,next:JSON.stringify(currentData,null,2)}},options),this.updateReadState(latestData)}async list(options){let entries=Object.entries(await this.readLatestData(options));return options?.signal?.throwIfAborted(),entries.map(([providerId,credential])=>({providerId,type:credential.type}))}};function readStoredCredential(providerId,authPath=join21(getAgentDir(),"auth.json")){try{return JSON.parse(stripBom(readFileSync8(normalizePath(authPath),"utf-8")))[providerId]}catch{return}}var balanced=(a,b2,str2)=>{let ma=a instanceof RegExp?maybeMatch(a,str2):a,mb=b2 instanceof RegExp?maybeMatch(b2,str2):b2,r=ma!==null&&mb!=null&&range(ma,mb,str2);return r&&{start:r[0],end:r[1],pre:str2.slice(0,r[0]),body:str2.slice(r[0]+ma.length,r[1]),post:str2.slice(r[1]+mb.length)}},maybeMatch=(reg,str2)=>{let m2=str2.match(reg);return m2?m2[0]:null},range=(a,b2,str2)=>{let begs,beg,left,right,result,ai=str2.indexOf(a),bi=str2.indexOf(b2,ai+1),i=ai;if(ai>=0&&bi>0){if(a===b2)return[ai,bi];for(begs=[],left=str2.length;i>=0&&!result;){if(i===ai)begs.push(i),ai=str2.indexOf(a,i+1);else if(begs.length===1){let r=begs.pop();r!==void 0&&(result=[r,bi])}else beg=begs.pop(),beg!==void 0&&beg<left&&(left=beg,right=bi),bi=str2.indexOf(b2,i+1);i=ai<bi&&ai>=0?ai:bi}begs.length&&right!==void 0&&(result=[left,right])}return result};var escSlash="\0SLASH"+Math.random()+"\0",escOpen="\0OPEN"+Math.random()+"\0",escClose="\0CLOSE"+Math.random()+"\0",escComma="\0COMMA"+Math.random()+"\0",escPeriod="\0PERIOD"+Math.random()+"\0",escSlashPattern=new RegExp(escSlash,"g"),escOpenPattern=new RegExp(escOpen,"g"),escClosePattern=new RegExp(escClose,"g"),escCommaPattern=new RegExp(escComma,"g"),escPeriodPattern=new RegExp(escPeriod,"g"),slashPattern=/\\\\/g,openPattern=/\\{/g,closePattern=/\\}/g,commaPattern=/\\,/g,periodPattern=/\\\./g,EXPANSION_MAX=1e5,EXPANSION_MAX_LENGTH=4e6,EXPANSION_MAX_DEPTH=1e3,EXPANSION_MAX_REWRITES=1e3;function numeric(str2){return isNaN(str2)?str2.charCodeAt(0):parseInt(str2,10)}function escapeBraces(str2){return str2.replace(slashPattern,escSlash).replace(openPattern,escOpen).replace(closePattern,escClose).replace(commaPattern,escComma).replace(periodPattern,escPeriod)}function unescapeBraces(str2){return str2.replace(escSlashPattern,"\\").replace(escOpenPattern,"{").replace(escClosePattern,"}").replace(escCommaPattern,",").replace(escPeriodPattern,".")}function pushAll(target,items){for(let i=0;i<items.length;i++)target.push(items[i])}function parseCommaParts(str2){let parts=[],carry="";for(;;){let m2=balanced("{","}",str2);if(!m2){let tail=str2.split(",");return tail[0]=carry+tail[0],pushAll(parts,tail),parts}let{pre,body,post}=m2,p=pre.split(",");if(p[0]=carry+p[0],p[p.length-1]+="{"+body+"}",!post.length)return pushAll(parts,p),parts;carry=p.pop(),pushAll(parts,p),str2=post}}function expand(str2,options={}){if(!str2)return[];let{max=EXPANSION_MAX,maxLength=EXPANSION_MAX_LENGTH,maxDepth=EXPANSION_MAX_DEPTH,maxRewrites=EXPANSION_MAX_REWRITES}=options;return str2.slice(0,2)==="{}"&&(str2="\\{\\}"+str2.slice(2)),expand_(escapeBraces(str2),max,maxLength,maxDepth,0,maxRewrites,!0).map(unescapeBraces)}function embrace(str2){return"{"+str2+"}"}function isPadded(el){return/^-?0\d/.test(el)}function lte(i,y2){return i<=y2}function gte(i,y2){return i>=y2}function combine(acc,pre,values,max,maxLength,dropEmpties){let out=[],length=0;for(let a=0;a<acc.length;a++)for(let v2=0;v2<values.length;v2++){if(out.length>=max)return out;let expansion=acc[a]+pre+values[v2];if(!(dropEmpties&&!expansion)){if(length+expansion.length>maxLength)return out;out.push(expansion),length+=expansion.length}}return out}function expandSequence(body,isAlphaSequence,max,maxLength){let n=body.split(/\.\./),N2=[];if(n[0]===void 0||n[1]===void 0)return N2;let x2=numeric(n[0]),y2=numeric(n[1]),width=Math.max(n[0].length,n[1].length),incr=n.length===3&&n[2]!==void 0?Math.max(Math.abs(numeric(n[2])),1):1,test=lte;y2<x2&&(incr*=-1,test=gte);let pad=n.some(isPadded),length=0;for(let i=x2;test(i,y2)&&N2.length<max;i+=incr){let c2;if(isAlphaSequence)c2=String.fromCharCode(i),c2==="\\"&&(c2="");else if(c2=String(i),pad){let need=width-c2.length;if(need>0){let z2=new Array(need+1).join("0");i<0?c2="-"+z2+c2.slice(1):c2=z2+c2}}if(length+c2.length>maxLength)break;N2.push(c2),length+=c2.length}return N2}function expand_(str2,max,maxLength,maxDepth,depth,maxRewrites,isTop){if(depth>maxDepth)return[str2];let acc=[""],rewrites=0,dropEmpties=!1,firstGroup=!0;for(;;){let m2=balanced("{","}",str2);if(!m2)return combine(acc,str2,[""],max,maxLength,dropEmpties);let pre=m2.pre;if(/\$$/.test(pre)){if(acc=combine(acc,pre+"{"+m2.body+"}",[""],max,maxLength,dropEmpties&&!m2.post.length),firstGroup=!1,!m2.post.length)break;str2=m2.post;continue}let isNumericSequence=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m2.body),isAlphaSequence=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m2.body),isSequence=isNumericSequence||isAlphaSequence,isOptions=m2.body.indexOf(",")>=0;if(!isSequence&&!isOptions){if(rewrites<maxRewrites&&m2.post.match(/,(?!,).*\}/)){rewrites++,str2=m2.pre+"{"+m2.body+escClose+m2.post,isTop=!0;continue}return combine(acc,pre+"{"+m2.body+"}"+m2.post,[""],max,maxLength,dropEmpties)}firstGroup&&(dropEmpties=isTop&&!isSequence,firstGroup=!1);let values;if(isSequence)values=expandSequence(m2.body,isAlphaSequence,max,maxLength);else{let n=parseCommaParts(m2.body);if(n.length===1&&n[0]!==void 0&&(n=expand_(n[0],max,maxLength,maxDepth,depth+1,maxRewrites,!1).map(embrace),n.length===1)){if(acc=combine(acc,pre+n[0],[""],max,maxLength,dropEmpties&&!m2.post.length),!m2.post.length)break;str2=m2.post;continue}let dropsEmpties=dropEmpties&&!m2.post.length&&!pre;for(let d2=0;dropsEmpties&&d2<acc.length;d2++)acc[d2]&&(dropsEmpties=!1);values=[];let valuesLength=0;outer:for(let j2=0;j2<n.length;j2++){let expanded=expand_(n[j2],max,maxLength,maxDepth,depth+1,maxRewrites,!1);for(let k=0;k<expanded.length;k++){let v2=expanded[k];if(!(dropsEmpties&&!v2)){if(values.length>=max||valuesLength+v2.length>maxLength)break outer;values.push(v2),valuesLength+=v2.length}}}}if(acc=combine(acc,pre,values,max,maxLength,dropEmpties&&!m2.post.length),!m2.post.length)break;str2=m2.post}return acc}var assertValidPattern=pattern=>{if(typeof pattern!="string")throw new TypeError("invalid pattern");if(pattern.length>65536)throw new TypeError("pattern is too long")};var posixClasses={"[:alnum:]":["\\p{L}\\p{Nl}\\p{Nd}",!0],"[:alpha:]":["\\p{L}\\p{Nl}",!0],"[:ascii:]":["\\x00-\\x7f",!1],"[:blank:]":["\\p{Zs}\\t",!0],"[:cntrl:]":["\\p{Cc}",!0],"[:digit:]":["\\p{Nd}",!0],"[:graph:]":["\\p{Z}\\p{C}",!0,!0],"[:lower:]":["\\p{Ll}",!0],"[:print:]":["\\p{C}",!0],"[:punct:]":["\\p{P}",!0],"[:space:]":["\\p{Z}\\t\\r\\n\\v\\f",!0],"[:upper:]":["\\p{Lu}",!0],"[:word:]":["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}",!0],"[:xdigit:]":["A-Fa-f0-9",!1]},braceEscape=s=>s.replace(/[[\]\\-]/g,"\\$&"),regexpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),rangesToString=ranges=>ranges.join(""),parseClass=(glob,position)=>{let pos=position;if(glob.charAt(pos)!=="[")throw new Error("not in a brace expression");let ranges=[],negs=[],i=pos+1,sawStart=!1,uflag=!1,escaping=!1,negate=!1,endPos=pos,rangeStart="";WHILE:for(;i<glob.length;){let c2=glob.charAt(i);if((c2==="!"||c2==="^")&&i===pos+1){negate=!0,i++;continue}if(c2==="]"&&sawStart&&!escaping){endPos=i+1;break}if(sawStart=!0,c2==="\\"&&!escaping){escaping=!0,i++;continue}if(c2==="["&&!escaping){for(let[cls,[unip,u,neg]]of Object.entries(posixClasses))if(glob.startsWith(cls,i)){if(rangeStart)return["$.",!1,glob.length-pos,!0];i+=cls.length,neg?negs.push(unip):ranges.push(unip),uflag=uflag||u;continue WHILE}}if(escaping=!1,rangeStart){c2>rangeStart?ranges.push(braceEscape(rangeStart)+"-"+braceEscape(c2)):c2===rangeStart&&ranges.push(braceEscape(c2)),rangeStart="",i++;continue}if(glob.startsWith("-]",i+1)){ranges.push(braceEscape(c2+"-")),i+=2;continue}if(glob.startsWith("-",i+1)){rangeStart=c2,i+=2;continue}ranges.push(braceEscape(c2)),i++}if(endPos<i)return["",!1,0,!1];if(!ranges.length&&!negs.length)return["$.",!1,glob.length-pos,!0];if(negs.length===0&&ranges.length===1&&/^\\?.$/.test(ranges[0])&&!negate){let r=ranges[0].length===2?ranges[0].slice(-1):ranges[0];return[regexpEscape(r),!1,endPos-pos,!1]}let sranges="["+(negate?"^":"")+rangesToString(ranges)+"]",snegs="["+(negate?"":"^")+rangesToString(negs)+"]";return[ranges.length&&negs.length?"("+sranges+"|"+snegs+")":ranges.length?sranges:snegs,uflag,endPos-pos,!0]};var unescape=(s,{windowsPathsNoEscape=!1,magicalBraces=!0}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/\[([^/\\])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\])\]/g,"$1$2").replace(/\\([^/])/g,"$1"):windowsPathsNoEscape?s.replace(/\[([^/\\{}])\]/g,"$1"):s.replace(/((?!\\).|^)\[([^/\\{}])\]/g,"$1$2").replace(/\\([^/{}])/g,"$1");var _a,types=new Set(["!","?","+","*","@"]),isExtglobType=c2=>types.has(c2),isExtglobAST=c2=>isExtglobType(c2.type),adoptionMap=new Map([["!",["@"]],["?",["?","@"]],["@",["@"]],["*",["*","+","?","@"]],["+",["+","@"]]]),adoptionWithSpaceMap=new Map([["!",["?"]],["@",["?"]],["+",["?","*"]]]),adoptionAnyMap=new Map([["!",["?","@"]],["?",["?","@"]],["@",["?","@"]],["*",["*","+","?","@"]],["+",["+","@","?","*"]]]),usurpMap=new Map([["!",new Map([["!","@"]])],["?",new Map([["*","*"],["+","*"]])],["@",new Map([["!","!"],["?","?"],["@","@"],["*","*"],["+","+"]])],["+",new Map([["?","*"],["*","*"]])]]),startNoTraversal="(?!(?:^|/)\\.\\.?(?:$|/))",startNoDot="(?!\\.)",addPatternStart=new Set(["[","."]),justDots=new Set(["..","."]),reSpecials=new Set("().*{}+?[]^$\\!"),regExpEscape=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),qmark="[^/]",star=qmark+"*?",starNoEmpty=qmark+"+?",ID=0,AST=class{type;#root;#hasMagic;#uflag=!1;#parts=[];#parent;#parentIndex;#negs;#filledNegs=!1;#options;#toString;#emptyExt=!1;id=++ID;get depth(){return(this.#parent?.depth??-1)+1}[Symbol.for("nodejs.util.inspect.custom")](){return{"@@type":"AST",id:this.id,type:this.type,root:this.#root.id,parent:this.#parent?.id,depth:this.depth,partsLength:this.#parts.length,parts:this.#parts}}constructor(type,parent,options={}){this.type=type,type&&(this.#hasMagic=!0),this.#parent=parent,this.#root=this.#parent?this.#parent.#root:this,this.#options=this.#root===this?options:this.#root.#options,this.#negs=this.#root===this?[]:this.#root.#negs,type==="!"&&!this.#root.#filledNegs&&this.#negs.push(this),this.#parentIndex=this.#parent?this.#parent.#parts.length:0}get hasMagic(){if(this.#hasMagic!==void 0)return this.#hasMagic;for(let p of this.#parts)if(typeof p!="string"&&(p.type||p.hasMagic))return this.#hasMagic=!0;return this.#hasMagic}toString(){return this.#toString!==void 0?this.#toString:this.type?this.#toString=this.type+"("+this.#parts.map(p=>String(p)).join("|")+")":this.#toString=this.#parts.map(p=>String(p)).join("")}#fillNegs(){if(this!==this.#root)throw new Error("should only call on root");if(this.#filledNegs)return this;this.toString(),this.#filledNegs=!0;let n;for(;n=this.#negs.pop();){if(n.type!=="!")continue;let p=n,pp=p.#parent;for(;pp;){for(let i=p.#parentIndex+1;!pp.type&&i<pp.#parts.length;i++)for(let part of n.#parts){if(typeof part=="string")throw new Error("string part in extglob AST??");part.copyIn(pp.#parts[i])}p=pp,pp=p.#parent}}return this}push(...parts){for(let p of parts)if(p!==""){if(typeof p!="string"&&!(p instanceof _a&&p.#parent===this))throw new Error("invalid part: "+p);this.#parts.push(p)}}toJSON(){let ret=this.type===null?this.#parts.slice().map(p=>typeof p=="string"?p:p.toJSON()):[this.type,...this.#parts.map(p=>p.toJSON())];return this.isStart()&&!this.type&&ret.unshift([]),this.isEnd()&&(this===this.#root||this.#root.#filledNegs&&this.#parent?.type==="!")&&ret.push({}),ret}isStart(){if(this.#root===this)return!0;if(!this.#parent?.isStart())return!1;if(this.#parentIndex===0)return!0;let p=this.#parent;for(let i=0;i<this.#parentIndex;i++){let pp=p.#parts[i];if(!(pp instanceof _a&&pp.type==="!"))return!1}return!0}isEnd(){if(this.#root===this||this.#parent?.type==="!")return!0;if(!this.#parent?.isEnd())return!1;if(!this.type)return this.#parent?.isEnd();let pl=this.#parent?this.#parent.#parts.length:0;return this.#parentIndex===pl-1}copyIn(part){typeof part=="string"?this.push(part):this.push(part.clone(this))}clone(parent){let c2=new _a(this.type,parent);for(let p of this.#parts)c2.copyIn(p);return c2}static#parseAST(str2,ast,pos,opt,extDepth){let maxDepth=opt.maxExtglobRecursion??2,escaping=!1,inBrace=!1,braceStart=-1,braceNeg=!1;if(ast.type===null){let i2=pos,acc2="";for(;i2<str2.length;){let c2=str2.charAt(i2++);if(escaping||c2==="\\"){escaping=!escaping,acc2+=c2;continue}if(inBrace){i2===braceStart+1?(c2==="^"||c2==="!")&&(braceNeg=!0):c2==="]"&&!(i2===braceStart+2&&braceNeg)&&(inBrace=!1),acc2+=c2;continue}else if(c2==="["){inBrace=!0,braceStart=i2,braceNeg=!1,acc2+=c2;continue}if(!opt.noext&&isExtglobType(c2)&&str2.charAt(i2)==="("&&extDepth<=maxDepth){ast.push(acc2),acc2="";let ext2=new _a(c2,ast);i2=_a.#parseAST(str2,ext2,i2,opt,extDepth+1),ast.push(ext2);continue}acc2+=c2}return ast.push(acc2),i2}let i=pos+1,part=new _a(null,ast),parts=[],acc="";for(;i<str2.length;){let c2=str2.charAt(i++);if(escaping||c2==="\\"){escaping=!escaping,acc+=c2;continue}if(inBrace){i===braceStart+1?(c2==="^"||c2==="!")&&(braceNeg=!0):c2==="]"&&!(i===braceStart+2&&braceNeg)&&(inBrace=!1),acc+=c2;continue}else if(c2==="["){inBrace=!0,braceStart=i,braceNeg=!1,acc+=c2;continue}if(!opt.noext&&isExtglobType(c2)&&str2.charAt(i)==="("&&(extDepth<=maxDepth||ast&&ast.#canAdoptType(c2))){let depthAdd=ast&&ast.#canAdoptType(c2)?0:1;part.push(acc),acc="";let ext2=new _a(c2,part);part.push(ext2),i=_a.#parseAST(str2,ext2,i,opt,extDepth+depthAdd);continue}if(c2==="|"){part.push(acc),acc="",parts.push(part),part=new _a(null,ast);continue}if(c2===")")return acc===""&&ast.#parts.length===0&&(ast.#emptyExt=!0),part.push(acc),acc="",ast.push(...parts,part),i;acc+=c2}return ast.type=null,ast.#hasMagic=void 0,ast.#parts=[str2.substring(pos-1)],i}#canAdoptWithSpace(child){return this.#canAdopt(child,adoptionWithSpaceMap)}#canAdopt(child,map=adoptionMap){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canAdoptType(gc.type,map)}#canAdoptType(c2,map=adoptionAnyMap){return!!map.get(this.type)?.includes(c2)}#adoptWithSpace(child,index3){let gc=child.#parts[0],blank=new _a(null,gc,this.options);blank.#parts.push(""),gc.push(blank),this.#adopt(child,index3)}#adopt(child,index3){let gc=child.#parts[0];this.#parts.splice(index3,1,...gc.#parts);for(let p of gc.#parts)typeof p=="object"&&(p.#parent=this);this.#toString=void 0}#canUsurpType(c2){return!!usurpMap.get(this.type)?.has(c2)}#canUsurp(child){if(!child||typeof child!="object"||child.type!==null||child.#parts.length!==1||this.type===null||this.#parts.length!==1)return!1;let gc=child.#parts[0];return!gc||typeof gc!="object"||gc.type===null?!1:this.#canUsurpType(gc.type)}#usurp(child){let m2=usurpMap.get(this.type),gc=child.#parts[0],nt2=m2?.get(gc.type);if(!nt2)return!1;this.#parts=gc.#parts;for(let p of this.#parts)typeof p=="object"&&(p.#parent=this);this.type=nt2,this.#toString=void 0,this.#emptyExt=!1}static fromGlob(pattern,options={}){let ast=new _a(null,void 0,options);return _a.#parseAST(pattern,ast,0,options,0),ast}toMMPattern(){if(this!==this.#root)return this.#root.toMMPattern();let glob=this.toString(),[re,body,hasMagic,uflag]=this.toRegExpSource();if(!(hasMagic||this.#hasMagic||this.#options.nocase&&!this.#options.nocaseMagicOnly&&glob.toUpperCase()!==glob.toLowerCase()))return body;let flags=(this.#options.nocase?"i":"")+(uflag?"u":"");return Object.assign(new RegExp(`^${re}$`,flags),{_src:re,_glob:glob})}get options(){return this.#options}toRegExpSource(allowDot){let dot=allowDot??!!this.#options.dot;if(this.#root===this&&(this.#flatten(),this.#fillNegs()),!isExtglobAST(this)){let noEmpty=this.isStart()&&this.isEnd()&&!this.#parts.some(s=>typeof s!="string"),src=this.#parts.map(p=>{let[re,_2,hasMagic,uflag]=typeof p=="string"?_a.#parseGlob(p,this.#hasMagic,noEmpty):p.toRegExpSource(allowDot);return this.#hasMagic=this.#hasMagic||hasMagic,this.#uflag=this.#uflag||uflag,re}).join(""),start2="";if(this.isStart()&&typeof this.#parts[0]=="string"&&!(this.#parts.length===1&&justDots.has(this.#parts[0]))){let aps=addPatternStart,needNoTrav=dot&&aps.has(src.charAt(0))||src.startsWith("\\.")&&aps.has(src.charAt(2))||src.startsWith("\\.\\.")&&aps.has(src.charAt(4)),needNoDot=!dot&&!allowDot&&aps.has(src.charAt(0));start2=needNoTrav?startNoTraversal:needNoDot?startNoDot:""}let end="";return this.isEnd()&&this.#root.#filledNegs&&this.#parent?.type==="!"&&(end="(?:$|\\/)"),[start2+src+end,unescape(src),this.#hasMagic=!!this.#hasMagic,this.#uflag]}let repeated=this.type==="*"||this.type==="+",start=this.type==="!"?"(?:(?!(?:":"(?:",body=this.#partsToRegExp(dot);if(this.isStart()&&this.isEnd()&&!body&&this.type!=="!"){let s=this.toString(),me2=this;return me2.#parts=[s],me2.type=null,me2.#hasMagic=void 0,[s,unescape(this.toString()),!1,!1]}let bodyDotAllowed=!repeated||allowDot||dot||!startNoDot?"":this.#partsToRegExp(!0);bodyDotAllowed===body&&(bodyDotAllowed=""),bodyDotAllowed&&(body=`(?:${body})(?:${bodyDotAllowed})*?`);let final="";if(this.type==="!"&&this.#emptyExt)final=(this.isStart()&&!dot?startNoDot:"")+starNoEmpty;else{let close=this.type==="!"?"))"+(this.isStart()&&!dot&&!allowDot?startNoDot:"")+star+")":this.type==="@"?")":this.type==="?"?")?":this.type==="+"&&bodyDotAllowed?")":this.type==="*"&&bodyDotAllowed?")?":`)${this.type}`;final=start+body+close}return[final,unescape(body),this.#hasMagic=!!this.#hasMagic,this.#uflag]}#flatten(){if(isExtglobAST(this)){let iterations=0,done=!1;do{done=!0;for(let i=0;i<this.#parts.length;i++){let c2=this.#parts[i];typeof c2=="object"&&(c2.#flatten(),this.#canAdopt(c2)?(done=!1,this.#adopt(c2,i)):this.#canAdoptWithSpace(c2)?(done=!1,this.#adoptWithSpace(c2,i)):this.#canUsurp(c2)&&(done=!1,this.#usurp(c2)))}}while(!done&&++iterations<10)}else for(let p of this.#parts)typeof p=="object"&&p.#flatten();this.#toString=void 0}#partsToRegExp(dot){return this.#parts.map(p=>{if(typeof p=="string")throw new Error("string type in extglob ast??");let[re,_2,_hasMagic,uflag]=p.toRegExpSource(dot);return this.#uflag=this.#uflag||uflag,re}).filter(p=>!(this.isStart()&&this.isEnd())||!!p).join("|")}static#parseGlob(glob,hasMagic,noEmpty=!1){let escaping=!1,re="",uflag=!1,inStar=!1;for(let i=0;i<glob.length;i++){let c2=glob.charAt(i);if(escaping){escaping=!1,re+=(reSpecials.has(c2)?"\\":"")+c2;continue}if(c2==="*"){if(inStar)continue;inStar=!0,re+=noEmpty&&/^[*]+$/.test(glob)?starNoEmpty:star,hasMagic=!0;continue}else inStar=!1;if(c2==="\\"){i===glob.length-1?re+="\\\\":escaping=!0;continue}if(c2==="["){let[src,needUflag,consumed,magic]=parseClass(glob,i);if(consumed){re+=src,uflag=uflag||needUflag,i+=consumed-1,hasMagic=hasMagic||magic;continue}}if(c2==="?"){re+=qmark,hasMagic=!0;continue}re+=regExpEscape(c2)}return[re,unescape(glob),!!hasMagic,uflag]}};_a=AST;var escape=(s,{windowsPathsNoEscape=!1,magicalBraces=!1}={})=>magicalBraces?windowsPathsNoEscape?s.replace(/[?*()[\]{}]/g,"[$&]"):s.replace(/[?*()[\]\\{}]/g,"\\$&"):windowsPathsNoEscape?s.replace(/[?*()[\]]/g,"[$&]"):s.replace(/[?*()[\]\\]/g,"\\$&");var minimatch=(p,pattern,options={})=>(assertValidPattern(pattern),!options.nocomment&&pattern.charAt(0)==="#"?!1:new Minimatch(pattern,options).match(p)),starDotExtRE=/^\*+([^+@!?*[(]*)$/,starDotExtTest=ext2=>f=>!f.startsWith(".")&&f.endsWith(ext2),starDotExtTestDot=ext2=>f=>f.endsWith(ext2),starDotExtTestNocase=ext2=>(ext2=ext2.toLowerCase(),f=>!f.startsWith(".")&&f.toLowerCase().endsWith(ext2)),starDotExtTestNocaseDot=ext2=>(ext2=ext2.toLowerCase(),f=>f.toLowerCase().endsWith(ext2)),starDotStarRE=/^\*+\.\*+$/,starDotStarTest=f=>!f.startsWith(".")&&f.includes("."),starDotStarTestDot=f=>f!=="."&&f!==".."&&f.includes("."),dotStarRE=/^\.\*+$/,dotStarTest=f=>f!=="."&&f!==".."&&f.startsWith("."),starRE=/^\*+$/,starTest=f=>f.length!==0&&!f.startsWith("."),starTestDot=f=>f.length!==0&&f!=="."&&f!=="..",qmarksRE=/^\?+([^+@!?*[(]*)?$/,qmarksTestNocase=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestNocaseDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?(ext2=ext2.toLowerCase(),f=>noext(f)&&f.toLowerCase().endsWith(ext2)):noext},qmarksTestDot=([$0,ext2=""])=>{let noext=qmarksTestNoExtDot([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTest=([$0,ext2=""])=>{let noext=qmarksTestNoExt([$0]);return ext2?f=>noext(f)&&f.endsWith(ext2):noext},qmarksTestNoExt=([$0])=>{let len=$0.length;return f=>f.length===len&&!f.startsWith(".")},qmarksTestNoExtDot=([$0])=>{let len=$0.length;return f=>f.length===len&&f!=="."&&f!==".."},defaultPlatform=typeof process=="object"&&process?typeof process.env=="object"&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:"posix",path10={win32:{sep:"\\"},posix:{sep:"/"}},sep6=defaultPlatform==="win32"?path10.win32.sep:path10.posix.sep;minimatch.sep=sep6;var GLOBSTAR=Symbol("globstar **");minimatch.GLOBSTAR=GLOBSTAR;var qmark2="[^/]",star2=qmark2+"*?",twoStarDot="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",twoStarNoDot="(?:(?!(?:\\/|^)\\.).)*?",filter=(pattern,options={})=>p=>minimatch(p,pattern,options);minimatch.filter=filter;var ext=(a,b2={})=>Object.assign({},a,b2),defaults=def=>{if(!def||typeof def!="object"||!Object.keys(def).length)return minimatch;let orig=minimatch;return Object.assign((p,pattern,options={})=>orig(p,pattern,ext(def,options)),{Minimatch:class extends orig.Minimatch{constructor(pattern,options={}){super(pattern,ext(def,options))}static defaults(options){return orig.defaults(ext(def,options)).Minimatch}},AST:class extends orig.AST{constructor(type,parent,options={}){super(type,parent,ext(def,options))}static fromGlob(pattern,options={}){return orig.AST.fromGlob(pattern,ext(def,options))}},unescape:(s,options={})=>orig.unescape(s,ext(def,options)),escape:(s,options={})=>orig.escape(s,ext(def,options)),filter:(pattern,options={})=>orig.filter(pattern,ext(def,options)),defaults:options=>orig.defaults(ext(def,options)),makeRe:(pattern,options={})=>orig.makeRe(pattern,ext(def,options)),braceExpand:(pattern,options={})=>orig.braceExpand(pattern,ext(def,options)),match:(list,pattern,options={})=>orig.match(list,pattern,ext(def,options)),sep:orig.sep,GLOBSTAR})};minimatch.defaults=defaults;var braceExpand=(pattern,options={})=>(assertValidPattern(pattern),options.nobrace||!/\{(?:(?!\{).)*\}/.test(pattern)?[pattern]:expand(pattern,{max:options.braceExpandMax}));minimatch.braceExpand=braceExpand;var makeRe=(pattern,options={})=>new Minimatch(pattern,options).makeRe();minimatch.makeRe=makeRe;var match=(list,pattern,options={})=>{let mm=new Minimatch(pattern,options);return list=list.filter(f=>mm.match(f)),mm.options.nonull&&!list.length&&list.push(pattern),list};minimatch.match=match;var globMagic=/[?*]|[+@!]\(.*?\)|\[|\]/,regExpEscape2=s=>s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Minimatch=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(pattern,options={}){assertValidPattern(pattern),options=options||{},this.options=options,this.maxGlobstarRecursion=options.maxGlobstarRecursion??200,this.pattern=pattern,this.platform=options.platform||defaultPlatform,this.isWindows=this.platform==="win32";let awe="allowWindowsEscape";this.windowsPathsNoEscape=!!options.windowsPathsNoEscape||options[awe]===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.preserveMultipleSlashes=!!options.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!options.nonegate,this.comment=!1,this.empty=!1,this.partial=!!options.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=options.windowsNoMagicRoot!==void 0?options.windowsNoMagicRoot:!!(this.isWindows&&this.nocase),this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let pattern of this.set)for(let part of pattern)if(typeof part!="string")return!0;return!1}debug(..._2){}make(){let pattern=this.pattern,options=this.options;if(!options.nocomment&&pattern.charAt(0)==="#"){this.comment=!0;return}if(!pattern){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],options.debug&&(this.debug=(...args)=>console.error(...args)),this.debug(this.pattern,this.globSet);let rawGlobParts=this.globSet.map(s=>this.slashSplit(s));this.globParts=this.preprocess(rawGlobParts),this.debug(this.pattern,this.globParts);let set=this.globParts.map((s,_2,__)=>{if(this.isWindows&&this.windowsNoMagicRoot){let isUNC=s[0]===""&&s[1]===""&&(s[2]==="?"||!globMagic.test(s[2]))&&!globMagic.test(s[3]),isDrive=/^[a-z]:/i.test(s[0]);if(isUNC)return[...s.slice(0,4),...s.slice(4).map(ss=>this.parse(ss))];if(isDrive)return[s[0],...s.slice(1).map(ss=>this.parse(ss))]}return s.map(ss=>this.parse(ss))});if(this.debug(this.pattern,set),this.set=set.filter(s=>s.indexOf(!1)===-1),this.isWindows)for(let i=0;i<this.set.length;i++){let p=this.set[i];p[0]===""&&p[1]===""&&this.globParts[i][2]==="?"&&typeof p[3]=="string"&&/^[a-z]:$/i.test(p[3])&&(p[2]="?")}this.debug(this.pattern,this.set)}preprocess(globParts){if(this.options.noglobstar)for(let partset of globParts)for(let j2=0;j2<partset.length;j2++)partset[j2]==="**"&&(partset[j2]="*");let{optimizationLevel=1}=this.options;return optimizationLevel>=2?(globParts=this.firstPhasePreProcess(globParts),globParts=this.secondPhasePreProcess(globParts)):optimizationLevel>=1?globParts=this.levelOneOptimize(globParts):globParts=this.adjascentGlobstarOptimize(globParts),globParts}adjascentGlobstarOptimize(globParts){return globParts.map(parts=>{let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let i=gs;for(;parts[i+1]==="**";)i++;i!==gs&&parts.splice(gs,i-gs)}return parts})}levelOneOptimize(globParts){return globParts.map(parts=>(parts=parts.reduce((set,part)=>{let prev=set[set.length-1];return part==="**"&&prev==="**"?set:part===".."&&prev&&prev!==".."&&prev!=="."&&prev!=="**"?(set.pop(),set):(set.push(part),set)},[]),parts.length===0?[""]:parts))}levelTwoFileOptimize(parts){Array.isArray(parts)||(parts=this.slashSplit(parts));let didSomething=!1;do{if(didSomething=!1,!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];p&&p!=="."&&p!==".."&&p!=="**"&&!(this.isWindows&&/^[a-z]:$/i.test(p))&&(didSomething=!0,parts.splice(dd-1,2),dd-=2)}}while(didSomething);return parts.length===0?[""]:parts}firstPhasePreProcess(globParts){let didSomething=!1;do{didSomething=!1;for(let parts of globParts){let gs=-1;for(;(gs=parts.indexOf("**",gs+1))!==-1;){let gss=gs;for(;parts[gss+1]==="**";)gss++;gss>gs&&parts.splice(gs+1,gss-gs);let next=parts[gs+1],p=parts[gs+2],p2=parts[gs+3];if(next!==".."||!p||p==="."||p===".."||!p2||p2==="."||p2==="..")continue;didSomething=!0,parts.splice(gs,1);let other=parts.slice(0);other[gs]="**",globParts.push(other),gs--}if(!this.preserveMultipleSlashes){for(let i=1;i<parts.length-1;i++){let p=parts[i];i===1&&p===""&&parts[0]===""||(p==="."||p==="")&&(didSomething=!0,parts.splice(i,1),i--)}parts[0]==="."&&parts.length===2&&(parts[1]==="."||parts[1]==="")&&(didSomething=!0,parts.pop())}let dd=0;for(;(dd=parts.indexOf("..",dd+1))!==-1;){let p=parts[dd-1];if(p&&p!=="."&&p!==".."&&p!=="**"){didSomething=!0;let splin=dd===1&&parts[dd+1]==="**"?["."]:[];parts.splice(dd-1,2,...splin),parts.length===0&&parts.push(""),dd-=2}}}}while(didSomething);return globParts}secondPhasePreProcess(globParts){for(let i=0;i<globParts.length-1;i++)for(let j2=i+1;j2<globParts.length;j2++){let matched=this.partsMatch(globParts[i],globParts[j2],!this.preserveMultipleSlashes);if(matched){globParts[i]=[],globParts[j2]=matched;break}}return globParts.filter(gs=>gs.length)}partsMatch(a,b2,emptyGSMatch=!1){let ai=0,bi=0,result=[],which="";for(;ai<a.length&&bi<b2.length;)if(a[ai]===b2[bi])result.push(which==="b"?b2[bi]:a[ai]),ai++,bi++;else if(emptyGSMatch&&a[ai]==="**"&&b2[bi]===a[ai+1])result.push(a[ai]),ai++;else if(emptyGSMatch&&b2[bi]==="**"&&a[ai]===b2[bi+1])result.push(b2[bi]),bi++;else if(a[ai]==="*"&&b2[bi]&&(this.options.dot||!b2[bi].startsWith("."))&&b2[bi]!=="**"){if(which==="b")return!1;which="a",result.push(a[ai]),ai++,bi++}else if(b2[bi]==="*"&&a[ai]&&(this.options.dot||!a[ai].startsWith("."))&&a[ai]!=="**"){if(which==="a")return!1;which="b",result.push(b2[bi]),ai++,bi++}else return!1;return a.length===b2.length&&result}parseNegate(){if(this.nonegate)return;let pattern=this.pattern,negate=!1,negateOffset=0;for(let i=0;i<pattern.length&&pattern.charAt(i)==="!";i++)negate=!negate,negateOffset++;negateOffset&&(this.pattern=pattern.slice(negateOffset)),this.negate=negate}matchOne(file,pattern,partial=!1){let fileStartIndex=0,patternStartIndex=0;if(this.isWindows){let fileDrive=typeof file[0]=="string"&&/^[a-z]:$/i.test(file[0]),fileUNC=!fileDrive&&file[0]===""&&file[1]===""&&file[2]==="?"&&/^[a-z]:$/i.test(file[3]),patternDrive=typeof pattern[0]=="string"&&/^[a-z]:$/i.test(pattern[0]),patternUNC=!patternDrive&&pattern[0]===""&&pattern[1]===""&&pattern[2]==="?"&&typeof pattern[3]=="string"&&/^[a-z]:$/i.test(pattern[3]),fdi=fileUNC?3:fileDrive?0:void 0,pdi=patternUNC?3:patternDrive?0:void 0;if(typeof fdi=="number"&&typeof pdi=="number"){let[fd,pd]=[file[fdi],pattern[pdi]];fd.toLowerCase()===pd.toLowerCase()&&(pattern[pdi]=fd,patternStartIndex=pdi,fileStartIndex=fdi)}}let{optimizationLevel=1}=this.options;return optimizationLevel>=2&&(file=this.levelTwoFileOptimize(file)),pattern.includes(GLOBSTAR)?this.#matchGlobstar(file,pattern,partial,fileStartIndex,patternStartIndex):this.#matchOne(file,pattern,partial,fileStartIndex,patternStartIndex)}#matchGlobstar(file,pattern,partial,fileIndex,patternIndex){let firstgs=pattern.indexOf(GLOBSTAR,patternIndex),lastgs=pattern.lastIndexOf(GLOBSTAR),[head,body,tail]=partial?[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1),[]]:[pattern.slice(patternIndex,firstgs),pattern.slice(firstgs+1,lastgs),pattern.slice(lastgs+1)];if(head.length){let fileHead=file.slice(fileIndex,fileIndex+head.length);if(!this.#matchOne(fileHead,head,partial,0,0))return!1;fileIndex+=head.length,patternIndex+=head.length}let fileTailMatch=0;if(tail.length){if(tail.length+fileIndex>file.length)return!1;let tailStart=file.length-tail.length;if(this.#matchOne(file,tail,partial,tailStart,0))fileTailMatch=tail.length;else{if(file[file.length-1]!==""||fileIndex+tail.length===file.length||(tailStart--,!this.#matchOne(file,tail,partial,tailStart,0)))return!1;fileTailMatch=tail.length+1}}if(!body.length){let sawSome=!!fileTailMatch;for(let i2=fileIndex;i2<file.length-fileTailMatch;i2++){let f=String(file[i2]);if(sawSome=!0,f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return partial||sawSome}let bodySegments=[[[],0]],currentBody=bodySegments[0],nonGsParts=0,nonGsPartsSums=[0];for(let b2 of body)b2===GLOBSTAR?(nonGsPartsSums.push(nonGsParts),currentBody=[[],0],bodySegments.push(currentBody)):(currentBody[0].push(b2),nonGsParts++);let i=bodySegments.length-1,fileLength=file.length-fileTailMatch;for(let b2 of bodySegments)b2[1]=fileLength-(nonGsPartsSums[i--]+b2[0].length);return!!this.#matchGlobStarBodySections(file,bodySegments,fileIndex,0,partial,0,!!fileTailMatch)}#matchGlobStarBodySections(file,bodySegments,fileIndex,bodyIndex,partial,globStarDepth,sawTail){let bs=bodySegments[bodyIndex];if(!bs){for(let i=fileIndex;i<file.length;i++){sawTail=!0;let f=file[i];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1}return sawTail}let[body,after]=bs;for(;fileIndex<=after;){if(this.#matchOne(file.slice(0,fileIndex+body.length),body,partial,fileIndex,0)&&globStarDepth<this.maxGlobstarRecursion){let sub=this.#matchGlobStarBodySections(file,bodySegments,fileIndex+body.length,bodyIndex+1,partial,globStarDepth+1,sawTail);if(sub!==!1)return sub}let f=file[fileIndex];if(f==="."||f===".."||!this.options.dot&&f.startsWith("."))return!1;fileIndex++}return partial||null}#matchOne(file,pattern,partial,fileIndex,patternIndex){let fi,pi,pl,fl;for(fi=fileIndex,pi=patternIndex,fl=file.length,pl=pattern.length;fi<fl&&pi<pl;fi++,pi++){this.debug("matchOne loop");let p=pattern[pi],f=file[fi];if(this.debug(pattern,p,f),p===!1||p===GLOBSTAR)return!1;let hit;if(typeof p=="string"?(hit=f===p,this.debug("string match",p,f,hit)):(hit=p.test(f),this.debug("pattern match",p,f,hit)),!hit)return!1}if(fi===fl&&pi===pl)return!0;if(fi===fl)return partial;if(pi===pl)return fi===fl-1&&file[fi]==="";throw new Error("wtf?")}braceExpand(){return braceExpand(this.pattern,this.options)}parse(pattern){assertValidPattern(pattern);let options=this.options;if(pattern==="**")return GLOBSTAR;if(pattern==="")return"";let m2,fastTest=null;(m2=pattern.match(starRE))?fastTest=options.dot?starTestDot:starTest:(m2=pattern.match(starDotExtRE))?fastTest=(options.nocase?options.dot?starDotExtTestNocaseDot:starDotExtTestNocase:options.dot?starDotExtTestDot:starDotExtTest)(m2[1]):(m2=pattern.match(qmarksRE))?fastTest=(options.nocase?options.dot?qmarksTestNocaseDot:qmarksTestNocase:options.dot?qmarksTestDot:qmarksTest)(m2):(m2=pattern.match(starDotStarRE))?fastTest=options.dot?starDotStarTestDot:starDotStarTest:(m2=pattern.match(dotStarRE))&&(fastTest=dotStarTest);let re=AST.fromGlob(pattern,this.options).toMMPattern();return fastTest&&typeof re=="object"&&Reflect.defineProperty(re,"test",{value:fastTest}),re}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let set=this.set;if(!set.length)return this.regexp=!1,this.regexp;let options=this.options,twoStar=options.noglobstar?star2:options.dot?twoStarDot:twoStarNoDot,flags=new Set(options.nocase?["i"]:[]),re=set.map(pattern=>{let pp=pattern.map(p=>{if(p instanceof RegExp)for(let f of p.flags.split(""))flags.add(f);return typeof p=="string"?regExpEscape2(p):p===GLOBSTAR?GLOBSTAR:p._src});pp.forEach((p,i)=>{let next=pp[i+1],prev=pp[i-1];p!==GLOBSTAR||prev===GLOBSTAR||(prev===void 0?next!==void 0&&next!==GLOBSTAR?pp[i+1]="(?:\\/|"+twoStar+"\\/)?"+next:pp[i]=twoStar:next===void 0?pp[i-1]=prev+"(?:\\/|\\/"+twoStar+")?":next!==GLOBSTAR&&(pp[i-1]=prev+"(?:\\/|\\/"+twoStar+"\\/)"+next,pp[i+1]=GLOBSTAR))});let filtered=pp.filter(p=>p!==GLOBSTAR);if(this.partial&&filtered.length>=1){let prefixes=[];for(let i=1;i<=filtered.length;i++)prefixes.push(filtered.slice(0,i).join("/"));return"(?:"+prefixes.join("|")+")"}return filtered.join("/")}).join("|"),[open2,close]=set.length>1?["(?:",")"]:["",""];re="^"+open2+re+close+"$",this.partial&&(re="^(?:\\/|"+open2+re.slice(1,-1)+close+")$"),this.negate&&(re="^(?!"+re+").+$");try{this.regexp=new RegExp(re,[...flags].join(""))}catch{this.regexp=!1}return this.regexp}slashSplit(p){return this.preserveMultipleSlashes?p.split("/"):this.isWindows&&/^\/\/[^/]+/.test(p)?["",...p.split(/\/+/)]:p.split(/\/+/)}match(f,partial=this.partial){if(this.debug("match",f,this.pattern),this.comment)return!1;if(this.empty)return f==="";if(f==="/"&&partial)return!0;let options=this.options;this.isWindows&&(f=f.split("\\").join("/"));let ff=this.slashSplit(f);this.debug(this.pattern,"split",ff);let set=this.set;this.debug(this.pattern,"set",set);let filename=ff[ff.length-1];if(!filename)for(let i=ff.length-2;!filename&&i>=0;i--)filename=ff[i];for(let pattern of set){let file=ff;if(options.matchBase&&pattern.length===1&&(file=[filename]),this.matchOne(file,pattern,partial))return options.flipNegate?!0:!this.negate}return options.flipNegate?!1:this.negate}static defaults(def){return minimatch.defaults(def).Minimatch}};minimatch.AST=AST;minimatch.Minimatch=Minimatch;minimatch.escape=escape;minimatch.unescape=unescape;var defaultModelPerProvider={"amazon-bedrock":"us.anthropic.claude-opus-4-6-v1","ant-ling":"Ring-2.6-1T",anthropic:"claude-opus-4-8",openai:"gpt-5.5","azure-openai-responses":"gpt-5.4","openai-codex":"gpt-5.5",radius:"auto",nvidia:"nvidia/nemotron-3-super-120b-a12b",deepseek:"deepseek-v4-pro",google:"gemini-3.1-pro-preview","google-vertex":"gemini-3.1-pro-preview","github-copilot":"gpt-5.4",openrouter:"moonshotai/kimi-k2.6","vercel-ai-gateway":"zai/glm-5.1",xai:"grok-4.6",groq:"openai/gpt-oss-120b",cerebras:"gpt-oss-120b",zai:"glm-5.3","zai-coding-cn":"glm-5.3",mistral:"devstral-medium-latest",minimax:"MiniMax-M2.7","minimax-cn":"MiniMax-M2.7",moonshotai:"kimi-k2.6","moonshotai-cn":"kimi-k2.6",huggingface:"moonshotai/Kimi-K2.6",fireworks:"accounts/fireworks/models/kimi-k2p6",together:"moonshotai/Kimi-K2.6",baseten:"zai-org/GLM-5.2",opencode:"kimi-k2.6","opencode-go":"kimi-k2.6","kimi-coding":"kimi-for-coding","cloudflare-workers-ai":"@cf/moonshotai/kimi-k2.6","cloudflare-ai-gateway":"workers-ai/@cf/moonshotai/kimi-k2.6","qwen-token-plan":"qwen3.7-max","qwen-token-plan-cn":"qwen3.7-max","qwen-token-plan-individual":"qwen3.8-max",xiaomi:"mimo-v2.5-pro","xiaomi-token-plan-cn":"mimo-v2.5-pro","xiaomi-token-plan-ams":"mimo-v2.5-pro","xiaomi-token-plan-sgp":"mimo-v2.5-pro"};function isAlias(id){return id.endsWith("-latest")?!0:!/-\d{8}$/.test(id)}function findExactModelReferenceMatch(modelReference,availableModels){let trimmedReference=modelReference.trim();if(!trimmedReference)return;let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels.filter(model=>`${model.provider}/${model.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length===1)return canonicalMatches[0];if(canonicalMatches.length>1)return;let slashIndex=trimmedReference.indexOf("/");if(slashIndex!==-1){let provider=trimmedReference.substring(0,slashIndex).trim(),modelId=trimmedReference.substring(slashIndex+1).trim();if(provider&&modelId){let providerMatches=availableModels.filter(model=>model.provider.toLowerCase()===provider.toLowerCase()&&model.id.toLowerCase()===modelId.toLowerCase());if(providerMatches.length===1)return providerMatches[0];if(providerMatches.length>1)return}}let idMatches=availableModels.filter(model=>model.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches[0]:void 0}function tryMatchModel(modelPattern,availableModels){let exactMatch=findExactModelReferenceMatch(modelPattern,availableModels);if(exactMatch)return exactMatch;let matches=availableModels.filter(m2=>m2.id.toLowerCase().includes(modelPattern.toLowerCase())||m2.name?.toLowerCase().includes(modelPattern.toLowerCase()));if(matches.length===0)return;let aliases=matches.filter(m2=>isAlias(m2.id)),datedVersions=matches.filter(m2=>!isAlias(m2.id));return aliases.length>0?(aliases.sort((a,b2)=>b2.id.localeCompare(a.id)),aliases[0]):(datedVersions.sort((a,b2)=>b2.id.localeCompare(a.id)),datedVersions[0])}function buildFallbackModel(provider,modelId,availableModels){let providerModels=availableModels.filter(m2=>m2.provider===provider);if(providerModels.length===0)return;let defaultId=defaultModelPerProvider[provider];return{...defaultId?providerModels.find(m2=>m2.id===defaultId)??providerModels[0]:providerModels[0],id:modelId,name:modelId}}function parseModelPattern(pattern,availableModels,options){let exactMatch=tryMatchModel(pattern,availableModels);if(exactMatch)return{model:exactMatch,thinkingLevel:void 0,warning:void 0};let lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex===-1)return{model:void 0,thinkingLevel:void 0,warning:void 0};let prefix=pattern.substring(0,lastColonIndex),suffix=pattern.substring(lastColonIndex+1);if(isValidThinkingLevel(suffix)){let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:result.warning?void 0:suffix,warning:result.warning}:result}else{if(!(options?.allowInvalidThinkingLevelFallback??!0))return{model:void 0,thinkingLevel:void 0,warning:void 0};let result=parseModelPattern(prefix,availableModels,options);return result.model?{model:result.model,thinkingLevel:void 0,warning:`Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`}:result}}function resolveModelScopeFromModels(patterns,models){let availableModels=[...models],scopedModels=[],diagnostics=[];for(let pattern of patterns){if(pattern.includes("*")||pattern.includes("?")||pattern.includes("[")){let colonIdx=pattern.lastIndexOf(":"),globPattern=pattern,thinkingLevel2;if(colonIdx!==-1){let suffix=pattern.substring(colonIdx+1);isValidThinkingLevel(suffix)&&(thinkingLevel2=suffix,globPattern=pattern.substring(0,colonIdx))}let exactMatch=findExactModelReferenceMatch(globPattern,availableModels);if(exactMatch){scopedModels.find(sm=>modelsAreEqual(sm.model,exactMatch))||scopedModels.push({model:exactMatch,thinkingLevel:thinkingLevel2});continue}let matchingModels=availableModels.filter(m2=>{let fullId=`${m2.provider}/${m2.id}`;return minimatch(fullId,globPattern,{nocase:!0})||minimatch(m2.id,globPattern,{nocase:!0})});if(matchingModels.length===0){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}for(let model2 of matchingModels)scopedModels.find(sm=>modelsAreEqual(sm.model,model2))||scopedModels.push({model:model2,thinkingLevel:thinkingLevel2});continue}let{model,thinkingLevel,warning}=parseModelPattern(pattern,availableModels);if(warning&&diagnostics.push({type:"warning",code:"invalid-thinking-level",message:warning,pattern}),!model){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern});continue}scopedModels.find(sm=>modelsAreEqual(sm.model,model))||scopedModels.push({model,thinkingLevel})}return{scopedModels,diagnostics}}async function resolveModelScopeWithDiagnostics(patterns,modelRuntime,options){return resolveModelScopeFromModels(patterns,await modelRuntime.getAvailable(void 0,options))}async function resolveModelScope(patterns,modelRuntime,options){let{scopedModels,diagnostics}=await resolveModelScopeWithDiagnostics(patterns,modelRuntime,options);for(let diagnostic of diagnostics)console.warn(source_default.yellow(`Warning: ${diagnostic.message}`));return scopedModels}function resolveCliModel(options){let{cliProvider,cliModel,cliThinking,modelRuntime}=options;if(!cliModel)return{model:void 0,warning:void 0,error:void 0};let availableModels=[...modelRuntime.getModels()];if(availableModels.length===0)return{model:void 0,warning:void 0,error:"No models available. Check your installation or add models to models.json."};let providerMap=new Map;for(let m2 of availableModels)providerMap.set(m2.provider.toLowerCase(),m2.provider);let provider=cliProvider?providerMap.get(cliProvider.toLowerCase()):void 0;if(cliProvider&&!provider)return{model:void 0,warning:void 0,error:`Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`};let pattern=cliModel,inferredProvider=!1;if(!provider){let slashIndex=cliModel.indexOf("/");if(slashIndex!==-1){let maybeProvider=cliModel.substring(0,slashIndex),canonical=providerMap.get(maybeProvider.toLowerCase());canonical&&(provider=canonical,pattern=cliModel.substring(slashIndex+1),inferredProvider=!0)}}if(!provider){let lower=cliModel.toLowerCase(),exactMatches=availableModels.filter(m2=>m2.id.toLowerCase()===lower||`${m2.provider}/${m2.id}`.toLowerCase()===lower);if(exactMatches.length===1)return{model:exactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};if(exactMatches.length>1){let authenticatedExactMatches=exactMatches.filter(m2=>modelRuntime.hasConfiguredAuth(m2.provider));if(authenticatedExactMatches.length===1)return{model:authenticatedExactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};let matches=exactMatches.map(m2=>`${m2.provider}/${m2.id}`).sort((a,b2)=>a.localeCompare(b2)).join(", "),authHint=authenticatedExactMatches.length===0?"No matching provider is authenticated.":"More than one matching provider is authenticated.";return{model:void 0,warning:void 0,thinkingLevel:void 0,error:`Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`}}}if(cliProvider&&provider){let prefix=`${provider}/`;cliModel.toLowerCase().startsWith(prefix.toLowerCase())&&(pattern=cliModel.substring(prefix.length))}let candidates=provider?availableModels.filter(m2=>m2.provider===provider):availableModels,{model,thinkingLevel,warning}=parseModelPattern(pattern,candidates,{allowInvalidThinkingLevelFallback:!1});if(model){if(inferredProvider){let rawExactMatches=availableModels.filter(m2=>m2.id.toLowerCase()===cliModel.toLowerCase()&&!modelsAreEqual(m2,model));if(rawExactMatches.length>0&&!modelRuntime.hasConfiguredAuth(model.provider)){let authenticatedRawMatches=rawExactMatches.filter(m2=>modelRuntime.hasConfiguredAuth(m2.provider));if(authenticatedRawMatches.length===1)return{model:authenticatedRawMatches[0],thinkingLevel:void 0,warning:void 0,error:void 0}}}return{model,thinkingLevel,warning,error:void 0}}if(inferredProvider){let lower=cliModel.toLowerCase(),exact=availableModels.find(m2=>m2.id.toLowerCase()===lower||`${m2.provider}/${m2.id}`.toLowerCase()===lower);if(exact)return{model:exact,warning:void 0,thinkingLevel:void 0,error:void 0};let fallback=parseModelPattern(cliModel,availableModels,{allowInvalidThinkingLevelFallback:!1});if(fallback.model)return{model:fallback.model,thinkingLevel:fallback.thinkingLevel,warning:fallback.warning,error:void 0}}if(provider){let fallbackPattern=pattern,fallbackThinking;if(!cliThinking){let lastColon=pattern.lastIndexOf(":");if(lastColon!==-1){let suffix=pattern.substring(lastColon+1);isValidThinkingLevel(suffix)&&(fallbackPattern=pattern.substring(0,lastColon),fallbackThinking=suffix)}}let fallbackModel=buildFallbackModel(provider,fallbackPattern,availableModels);if(fallbackModel){let requestedThinking=cliThinking??fallbackThinking,model2=requestedThinking&&requestedThinking!=="off"?{...fallbackModel,reasoning:!0}:fallbackModel,fallbackWarning=warning?`${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`:`Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;return{model:model2,thinkingLevel:fallbackThinking,warning:fallbackWarning,error:void 0}}}let display=provider?`${provider}/${pattern}`:cliModel;return{model:void 0,thinkingLevel:void 0,warning,error:`Model "${display}" not found. Use --list-models to see available models.`}}async function findInitialModel(options){let{cliProvider,cliModel,scopedModels,isContinuing,defaultProvider,defaultModelId,defaultThinkingLevel,modelThinkingLevels,modelRuntime}=options,model,thinkingLevel=DEFAULT_THINKING_LEVEL;if(cliProvider&&cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error&&(console.error(source_default.red(resolved.error)),process.exit(1)),resolved.model)return{model:resolved.model,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(scopedModels.length>0&&!isContinuing){let scopedModel=scopedModels[0],perModel=modelThinkingLevels?.[`${scopedModel.model.provider}/${scopedModel.model.id}`];return{model:scopedModel.model,thinkingLevel:scopedModel.thinkingLevel??perModel??defaultThinkingLevel??DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}if(defaultProvider&&defaultModelId){let found=modelRuntime.getModel(defaultProvider,defaultModelId);if(found&&modelRuntime.hasConfiguredAuth(found.provider)){model=found;let perModel=modelThinkingLevels?.[`${defaultProvider}/${defaultModelId}`];return perModel?thinkingLevel=perModel:defaultThinkingLevel&&(thinkingLevel=defaultThinkingLevel),{model,thinkingLevel,fallbackMessage:void 0}}}let availableModels=[...modelRuntime.getAvailableSnapshot()];if(availableModels.length>0){for(let provider of Object.keys(defaultModelPerProvider)){let defaultId=defaultModelPerProvider[provider],match2=availableModels.find(m2=>m2.provider===provider&&m2.id===defaultId);if(match2)return{model:match2,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:availableModels[0],thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}return{model:void 0,thinkingLevel:DEFAULT_THINKING_LEVEL,fallbackMessage:void 0}}import{dirname as dirname14,join as join23}from"node:path";import{readFile as readFile2}from"node:fs/promises";function stripJsonComments(input){return input.replace(/"(?:\\.|[^"\\])*"|\/\/[^\n]*/g,m2=>m2[0]==='"'?m2:"").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(m2,tail)=>tail??(m2[0]==='"'?m2:""))}var PercentileCutoffsSchema=typebox_exports.Object({p50:typebox_exports.Optional(typebox_exports.Number()),p75:typebox_exports.Optional(typebox_exports.Number()),p90:typebox_exports.Optional(typebox_exports.Number()),p99:typebox_exports.Optional(typebox_exports.Number())}),OpenRouterRoutingSchema=typebox_exports.Object({allow_fallbacks:typebox_exports.Optional(typebox_exports.Boolean()),require_parameters:typebox_exports.Optional(typebox_exports.Boolean()),data_collection:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("deny"),typebox_exports.Literal("allow")])),zdr:typebox_exports.Optional(typebox_exports.Boolean()),enforce_distillable_text:typebox_exports.Optional(typebox_exports.Boolean()),order:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),only:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),ignore:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),quantizations:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),sort:typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Object({by:typebox_exports.Optional(typebox_exports.String()),partition:typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Null()]))})])),max_price:typebox_exports.Optional(typebox_exports.Object({prompt:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),completion:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),image:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),audio:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()])),request:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),typebox_exports.String()]))})),preferred_min_throughput:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),PercentileCutoffsSchema])),preferred_max_latency:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Number(),PercentileCutoffsSchema]))}),VercelGatewayRoutingSchema=typebox_exports.Object({only:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String())),order:typebox_exports.Optional(typebox_exports.Array(typebox_exports.String()))}),ThinkingLevelMapValueSchema=typebox_exports.Union([typebox_exports.String(),typebox_exports.Null()]),ThinkingLevelMapSchema=typebox_exports.Object({off:typebox_exports.Optional(ThinkingLevelMapValueSchema),minimal:typebox_exports.Optional(ThinkingLevelMapValueSchema),low:typebox_exports.Optional(ThinkingLevelMapValueSchema),medium:typebox_exports.Optional(ThinkingLevelMapValueSchema),high:typebox_exports.Optional(ThinkingLevelMapValueSchema),xhigh:typebox_exports.Optional(ThinkingLevelMapValueSchema),max:typebox_exports.Optional(ThinkingLevelMapValueSchema)}),ChatTemplateKwargScalarSchema=typebox_exports.Union([typebox_exports.String(),typebox_exports.Number(),typebox_exports.Boolean(),typebox_exports.Null()]),ChatTemplateKwargVariableSchema=typebox_exports.Object({$var:typebox_exports.Union([typebox_exports.Literal("thinking.enabled"),typebox_exports.Literal("thinking.effort")]),omitWhenOff:typebox_exports.Optional(typebox_exports.Boolean())}),ChatTemplateKwargSchema=typebox_exports.Union([ChatTemplateKwargScalarSchema,ChatTemplateKwargVariableSchema]),OpenAICompletionsCompatSchema=typebox_exports.Object({supportsStore:typebox_exports.Optional(typebox_exports.Boolean()),supportsDeveloperRole:typebox_exports.Optional(typebox_exports.Boolean()),supportsReasoningEffort:typebox_exports.Optional(typebox_exports.Boolean()),supportsUsageInStreaming:typebox_exports.Optional(typebox_exports.Boolean()),supportsFinishReason:typebox_exports.Optional(typebox_exports.Boolean()),maxTokensField:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("max_completion_tokens"),typebox_exports.Literal("max_tokens")])),requiresToolResultName:typebox_exports.Optional(typebox_exports.Boolean()),requiresAssistantAfterToolResult:typebox_exports.Optional(typebox_exports.Boolean()),requiresThinkingAsText:typebox_exports.Optional(typebox_exports.Boolean()),requiresReasoningContentOnAssistantMessages:typebox_exports.Optional(typebox_exports.Boolean()),thinkingFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openrouter"),typebox_exports.Literal("together"),typebox_exports.Literal("baseten"),typebox_exports.Literal("deepseek"),typebox_exports.Literal("zai"),typebox_exports.Literal("qwen"),typebox_exports.Literal("chat-template"),typebox_exports.Literal("qwen-chat-template"),typebox_exports.Literal("string-thinking"),typebox_exports.Literal("ant-ling")])),chatTemplateKwargs:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ChatTemplateKwargSchema)),chatTemplateArgs:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ChatTemplateKwargSchema)),cacheControlFormat:typebox_exports.Optional(typebox_exports.Literal("anthropic")),openRouterRouting:typebox_exports.Optional(OpenRouterRoutingSchema),vercelGatewayRouting:typebox_exports.Optional(VercelGatewayRoutingSchema),supportsOpenAIGrammarTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictMode:typebox_exports.Optional(typebox_exports.Boolean()),sendSessionAffinityHeaders:typebox_exports.Optional(typebox_exports.Boolean()),deferredToolsMode:typebox_exports.Optional(typebox_exports.Literal("kimi")),sessionAffinityFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openai-nosession"),typebox_exports.Literal("openrouter")])),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean())}),OpenAIResponsesCompatSchema=typebox_exports.Object({supportsDeveloperRole:typebox_exports.Optional(typebox_exports.Boolean()),sessionAffinityFormat:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("openai"),typebox_exports.Literal("openai-nosession"),typebox_exports.Literal("openrouter")])),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictMode:typebox_exports.Optional(typebox_exports.Boolean()),supportsOpenAIGrammarTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsAdditionalTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsToolSearch:typebox_exports.Optional(typebox_exports.Boolean())}),AnthropicMessagesCompatSchema=typebox_exports.Object({supportsEagerToolInputStreaming:typebox_exports.Optional(typebox_exports.Boolean()),supportsLongCacheRetention:typebox_exports.Optional(typebox_exports.Boolean()),sendSessionAffinityHeaders:typebox_exports.Optional(typebox_exports.Boolean()),supportsCacheControlOnTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsTemperature:typebox_exports.Optional(typebox_exports.Boolean()),forceAdaptiveThinking:typebox_exports.Optional(typebox_exports.Boolean()),allowEmptySignature:typebox_exports.Optional(typebox_exports.Boolean()),supportsStrictTools:typebox_exports.Optional(typebox_exports.Boolean()),supportsToolReferences:typebox_exports.Optional(typebox_exports.Boolean())}),ProviderCompatSchema=typebox_exports.Union([OpenAICompletionsCompatSchema,OpenAIResponsesCompatSchema,AnthropicMessagesCompatSchema]),ModelCostRatesSchema={input:typebox_exports.Number(),output:typebox_exports.Number(),cacheRead:typebox_exports.Number(),cacheWrite:typebox_exports.Number()},ModelCostTierSchema=typebox_exports.Object({inputTokensAbove:typebox_exports.Number(),...ModelCostRatesSchema}),ModelCostSchema=typebox_exports.Object({...ModelCostRatesSchema,tiers:typebox_exports.Optional(typebox_exports.Array(ModelCostTierSchema))}),ModelDefinitionSchema=typebox_exports.Object({id:typebox_exports.String({minLength:1}),name:typebox_exports.Optional(typebox_exports.String({minLength:1})),api:typebox_exports.Optional(typebox_exports.String({minLength:1})),baseUrl:typebox_exports.Optional(typebox_exports.String({minLength:1})),reasoning:typebox_exports.Optional(typebox_exports.Boolean()),thinkingLevelMap:typebox_exports.Optional(ThinkingLevelMapSchema),input:typebox_exports.Optional(typebox_exports.Array(typebox_exports.Union([typebox_exports.Literal("text"),typebox_exports.Literal("image")]))),cost:typebox_exports.Optional(ModelCostSchema),contextWindow:typebox_exports.Optional(typebox_exports.Number()),maxTokens:typebox_exports.Optional(typebox_exports.Number()),samplingParams:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.Unknown())),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema)}),ModelOverrideSchema=typebox_exports.Object({name:typebox_exports.Optional(typebox_exports.String({minLength:1})),reasoning:typebox_exports.Optional(typebox_exports.Boolean()),thinkingLevelMap:typebox_exports.Optional(ThinkingLevelMapSchema),input:typebox_exports.Optional(typebox_exports.Array(typebox_exports.Union([typebox_exports.Literal("text"),typebox_exports.Literal("image")]))),cost:typebox_exports.Optional(typebox_exports.Object({input:typebox_exports.Optional(typebox_exports.Number()),output:typebox_exports.Optional(typebox_exports.Number()),cacheRead:typebox_exports.Optional(typebox_exports.Number()),cacheWrite:typebox_exports.Optional(typebox_exports.Number()),tiers:typebox_exports.Optional(typebox_exports.Array(ModelCostTierSchema))})),contextWindow:typebox_exports.Optional(typebox_exports.Number()),maxTokens:typebox_exports.Optional(typebox_exports.Number()),samplingParams:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.Unknown())),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema)}),ProviderConfigSchema=typebox_exports.Object({name:typebox_exports.Optional(typebox_exports.String({minLength:1})),baseUrl:typebox_exports.Optional(typebox_exports.String({minLength:1})),apiKey:typebox_exports.Optional(typebox_exports.String({minLength:1})),api:typebox_exports.Optional(typebox_exports.String({minLength:1})),oauth:typebox_exports.Optional(typebox_exports.Literal("radius")),headers:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),typebox_exports.String())),compat:typebox_exports.Optional(ProviderCompatSchema),authHeader:typebox_exports.Optional(typebox_exports.Boolean()),models:typebox_exports.Optional(typebox_exports.Array(ModelDefinitionSchema)),modelOverrides:typebox_exports.Optional(typebox_exports.Record(typebox_exports.String(),ModelOverrideSchema))}),ModelsConfigSchema=typebox_exports.Object({providers:typebox_exports.Record(typebox_exports.String(),ProviderConfigSchema)}),validateModelsConfig=Compile(ModelsConfigSchema);function formatValidationPath2(error){if(error.keyword==="required"){let requiredProperty=error.params.requiredProperties?.[0];if(requiredProperty){let basePath=error.instancePath.replace(/^\//,"").replace(/\//g,".");return basePath?`${basePath}.${requiredProperty}`:requiredProperty}}return error.instancePath.replace(/^\//,"").replace(/\//g,".")||"root"}function deepFreeze(value){if(typeof value!="object"||value===null||Object.isFrozen(value))return value;for(let child of Object.values(value))deepFreeze(child);return Object.freeze(value)}var ModelConfig=class _ModelConfig{providers;error;constructor(providers,error){this.providers=providers,this.error=error}static async load(modelsJsonPath){if(!modelsJsonPath)return new _ModelConfig(new Map);let path14=normalizePath(modelsJsonPath),content;try{content=await readFile2(path14,"utf-8")}catch(error){return error.code==="ENOENT"?new _ModelConfig(new Map):new _ModelConfig(new Map,`Failed to load models.json: ${error instanceof Error?error.message:error}
1251
1251
 
1252
1252
  File: ${path14}`)}let parsed;try{parsed=JSON.parse(stripJsonComments(stripBom(content)))}catch(error){return new _ModelConfig(new Map,`Failed to parse models.json: ${error instanceof Error?error.message:error}
1253
1253
 
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-BRL3MDQL.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";process.title=APP_NAME;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(process.argv.slice(2));
3
+ import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-VY7PRZDT.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";process.title=APP_NAME;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(process.argv.slice(2));
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-BRL3MDQL.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";export{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
2
+ import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunks/chunk-VY7PRZDT.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";export{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CONFIG_DIR_NAME,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,ProjectTrustStore,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,ShowImagesSelectorComponent,SkillInvocationMessageComponent,Theme,ThemeSelectorComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VERSION,buildContextEntries,buildSessionContext,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSize,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getAgentDir,getDocsPath,getExamplesPath,getLanguageFromPath,getLastAssistantUsage,getLatestCompactionEntry,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,hasTrustRequiringProjectResources,highlightCode,initTheme,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,keyHint,keyText,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,rawKeyHint,readStoredCredential,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,truncateHead,truncateLine,truncateTail,truncateToVisualLines,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools};
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
3
- import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-BRL3MDQL.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);
3
+ import{APP_NAME,configureHttpDispatcher,main}from"./chunks/chunk-VY7PRZDT.js";import"./chunks/chunk-XDUWOHPL.js";import"./chunks/chunk-JUUC5AZY.js";import"./chunks/chunk-DRQDKNXA.js";import"./chunks/chunk-TRDNDS6A.js";import"./chunks/chunk-MNAIPA3J.js";import"./chunks/chunk-UAQELI3K.js";import"./chunks/chunk-4L3WN2XY.js";process.title=`${APP_NAME}-rpc`;process.env.PI_CODING_AGENT="true";process.env.AI_AGENT="pi";process.emitWarning=(()=>{});configureHttpDispatcher();main(["--mode","rpc",...process.argv.slice(2)]);