@astralyn/pi 1.5.0 → 1.5.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 (54) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/bundle/chunks/{chunk-IRUUTK4W.js → chunk-3YGNXVKM.js} +1 -1
  3. package/dist/bundle/chunks/{chunk-THAJ4BZF.js → chunk-HLVMLRZJ.js} +3 -3
  4. package/dist/bundle/chunks/{chunk-R3YHAMWH.js → chunk-M3D4ADUT.js} +17 -17
  5. package/dist/bundle/chunks/{execute-ACWDKC3C.js → execute-SSRW6NGS.js} +1 -1
  6. package/dist/bundle/chunks/{virtual-modules-T2KLVAFL.js → virtual-modules-NFDW2JKH.js} +1 -1
  7. package/dist/bundle/cli.js +1 -1
  8. package/dist/bundle/index.js +1 -1
  9. package/dist/bundle/rpc-entry.js +1 -1
  10. package/dist/core/tasks/activity.d.ts +14 -0
  11. package/dist/core/tasks/activity.d.ts.map +1 -0
  12. package/dist/core/tasks/activity.js +58 -0
  13. package/dist/core/tasks/activity.js.map +1 -0
  14. package/dist/core/tasks/execution.d.ts.map +1 -1
  15. package/dist/core/tasks/execution.js +2 -2
  16. package/dist/core/tasks/execution.js.map +1 -1
  17. package/dist/core/tasks/output.d.ts +4 -1
  18. package/dist/core/tasks/output.d.ts.map +1 -1
  19. package/dist/core/tasks/output.js +33 -0
  20. package/dist/core/tasks/output.js.map +1 -1
  21. package/dist/core/tasks/types.d.ts +19 -2
  22. package/dist/core/tasks/types.d.ts.map +1 -1
  23. package/dist/core/tasks/types.js.map +1 -1
  24. package/dist/extensions/agent/activity-lines.d.ts +1 -5
  25. package/dist/extensions/agent/activity-lines.d.ts.map +1 -1
  26. package/dist/extensions/agent/activity-lines.js +5 -69
  27. package/dist/extensions/agent/activity-lines.js.map +1 -1
  28. package/dist/extensions/agent/activity.d.ts +0 -19
  29. package/dist/extensions/agent/activity.d.ts.map +1 -1
  30. package/dist/extensions/agent/activity.js +0 -63
  31. package/dist/extensions/agent/activity.js.map +1 -1
  32. package/dist/extensions/agent/progress.d.ts.map +1 -1
  33. package/dist/extensions/agent/progress.js +9 -2
  34. package/dist/extensions/agent/progress.js.map +1 -1
  35. package/dist/extensions/agent/types.d.ts +3 -11
  36. package/dist/extensions/agent/types.d.ts.map +1 -1
  37. package/dist/extensions/agent/types.js.map +1 -1
  38. package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
  39. package/dist/extensions/tasks/ui/inspector.js +3 -1
  40. package/dist/extensions/tasks/ui/inspector.js.map +1 -1
  41. package/dist/extensions/tasks/ui/views.d.ts +2 -1
  42. package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
  43. package/dist/extensions/tasks/ui/views.js +13 -8
  44. package/dist/extensions/tasks/ui/views.js.map +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/modes/interactive/components/task-activity-list.d.ts +5 -0
  49. package/dist/modes/interactive/components/task-activity-list.d.ts.map +1 -0
  50. package/dist/modes/interactive/components/task-activity-list.js +68 -0
  51. package/dist/modes/interactive/components/task-activity-list.js.map +1 -0
  52. package/docs/bundled/extensions/agent.md +1 -1
  53. package/docs/extensions.md +2 -0
  54. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{ProjectTrustStore,addMcpServerConfig,getProjectTrustOptions,hasTrustRequiringProjectResources,loadMcpConfig,openBrowser,updateMcpServerConfig}from"./chunk-FPALVF3F.js";import{AuthStorage,FileAuthStorageBackend,LIST_MCP_RESOURCES_TOOL,LIST_MCP_RESOURCE_TEMPLATES_TOOL,McpError,McpServerRegistry,READ_MCP_RESOURCE_TOOL,ReadOnlyAuthStorage,createToolNameMatcher,getConfigValueEnvVarNames,getMcpToolExposure,isCommandConfigValue,isConfigValueConfigured,isJsonRpcResponse,isMcpToolName,mcpNamespace,operationSignal,parseJsonRpcMessage,raceWithAbortSignal,require_proper_lockfile,resolveConfigValueOrThrow,resolveHeadersOrThrow,toLlmContent,validateMcpServerConfig}from"./chunk-KBFO53OG.js";import{ArrayOptions,Box,CODEMODE_TOOL_NAME,CURSOR_MARKER,CancellableLoader,Clone,CodeHighlighter,CombinedAutocompleteProvider,Container,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,Editor,Evaluate,FS_WATCH_RETRY_DELAY_MS,Flatten,Get,Image,Input,Instantiate,Intersect,IsArray,IsBigInt,IsBoolean,IsCodec,IsConstructor,IsCyclic,IsEnum,IsFunction,IsInteger,IsIntersect,IsLiteral,IsLiteralBigInt,IsLiteralBoolean,IsLiteralNumber,IsLiteralString,IsNever,IsNull,IsNumber,IsObject,IsOptional,IsRecord,IsRef,IsRefine,IsSchema,IsString,IsSymbol,IsTemplateLiteral,IsTuple,IsUndefined,IsUnion,IsVoid,Key,KeybindingsManager,Literal,Loader,Markdown,MouseRegion,Priority,ProcessTerminal,Record,RecordKey,RecordPattern,RecordValue,Ref,SETTINGS_DEFAULTS,SYSTEM_THEME_NAME,ScrollView,SelectList,SettingsList,Spacer,String as String2,TASKS_TOOL_NAME,TASK_BACKGROUND_REJECTION,TASK_DETAILS_BYTES,TASK_ERROR_BYTES,TASK_FACT_BYTES,TASK_KIND_PATTERN,TASK_LABEL_BYTES,TASK_MANAGEMENT_REJECTION,TASK_PATH_BYTES,TASK_READ_BYTES,TASK_RECORD_TYPE,TASK_RESULT_BYTES,TASK_SNAPSHOT_VERSION,TASK_TITLE_BYTES,THEME_TOKENS,TOOL_SEARCH_TOOL_NAME,TUI_KEYBINDINGS,TaskLookupError,TemplateLiteralDecode,Text,Theme,TruncatedText,TuiAltScreen,TuiMainScreen,Tuple,Union,Unknown,Unreachable,VStack,VisualLinePreview,With,Z,_Array_,_Object_,addUsageToTotals,arguments_exports,arr,backgroundAnsi,bool,boundFacts,boundInput,boundReadBytes,boundTail,boundTaskText,boundText,closeWatcher,colorToRgb,combineUsage,createCodemodeToolDefinition,createFauxCore,createOutputFilePath,createOutputFileStream,createToolDefinitionFromAgentTool,createToolSearchToolDefinition,createUsageTotals,decodeKittyPrintable,detectCapabilities,emit_exports,envApiKeyAuth,environment_exports,errorText,fauxAssistantMessage,fauxProvider,fauxText,fauxThinking,fauxToolCall,finiteLimit,foregroundAnsi,formatKeyText,formatReadLineRange,formatSize,formatToolCallWithArgs,fuzzyFilter,fuzzyMatch,getAccountedUsages,getAvailableThemes,getAvailableThemesWithPaths,getCapabilities,getEditorTheme,getKeybindings,getLanguageFromPath,getMarkdownTheme,getNativeClipboard,getOverflowPatterns,getResolvedThemeColors,getSelectListTheme,getSelectPageIndex,getSettingsListTheme,getTerminalColorMode,getTerminalTheme,getTextOutput,getThemeByName,getThemeExportColors,getUsageCostBreakdown,globals_exports,guard_default,guard_exports,hash_exports,highlightCode,hyperlink,indexedColor,initTheme,int,invalidArgText,isAppleTerminalSession,isContextOverflow,isFocusable,isRecoverableLength,isRetryableAssistantError,isTaskTerminal,isViewportTUI,keyDisplayText,keyHint,keyLabel,keyText,lazyOAuth,loadAllHighlightLanguages,loadThemeFromPath,markTerminalColorsPending,matchesKey,mixColors,normalizeDisplayText,nul,num,obj,onThemeChange,oneOf,opt,parseAutoThemeSetting,parseColor,rawKeyHint,readOutputSlice,readTaskUsage,readVersionedTask,renderToolPath,replaceControlCharacters,replaceTabs,resolveThemeSetting,resultText,retryAssistantCall,retryDelayMs,rgbColor,setCapabilityOverrides,setImageTranscoder,setKeybindings,setRegisteredThemes,setTerminalColorScheme,setTerminalColors,setTheme,setThemeInstance,setThemeJsonValidator,settings_exports,shortenPath,sliceByColumn,sliceText,splitIncompleteAnsiSuffix,startToolTimer,stopThemeWatcher,str,str2,stripAnsi,stripTerminalSequences,taskReadBytes,taskReadRange,theme,toolTimerText,truncateHead,truncateLine,truncateMiddle,truncateTail,truncateToVisualLines,truncateToWidth,typebox_exports,union,validateToolArguments,validateToolCall,visibleWidth,watchWithErrorHandler,wrapTextWithAnsi,wrapToolDefinition,writeOutputFile}from"./chunk-THAJ4BZF.js";import{source_default}from"./chunk-6QGV3IWD.js";import{APP_NAME,APP_TITLE,CONFIG_DIR_NAME,DISTRIBUTION_PACKAGE_NAME,ENV_AGENT_DIR,ENV_SESSION_DIR,INSTALL_TELEMETRY_URL,PACKAGE_NAME,UPDATE_CHANGELOG_HINT,VERSION,canonicalizePath,detectInstallChange,detectInstallMethod,expandTildePath,formatPathRelativeToCwdOrAbsolute,getAgentDir,getAuthPath,getBinDir,getBundledInteractiveAssetPath,getChangelogPath,getConfiguredSelfUpdateArgv,getCwdRelativePath,getDebugLogPath,getDocsPath,getExamplesPath,getExportTemplateDir,getFileRevision,getPackageDir,getPathComparisonKey,getPowerShellConfig,getReadmePath,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,getSessionsDir,getSettingsPath,getShareViewerUrl,getShellConfig,getShellEnv,isBunBinary,isBundledNode,isLocalPath,isPathWithin,killProcessTree,killTrackedDetachedChildren,makeConfiguredSelfUpdateCommand,markPathIgnoredByCloudSync,normalizePath,normalizeWindowsShellPath,pathsEqual,require_cross_spawn,resolvePath,sanitizeBinaryOutput,shortenHomePath,spawnProcess,spawnProcessSync,splitBom,stripBom,trackDetachedChildPid,untrackDetachedChildPid,waitForChildProcess}from"./chunk-PSYLMRL6.js";import{cleanupSessionResources,registerSessionResourceCleanup,uuidv7}from"./chunk-JEIV47WR.js";import{ANTHROPIC_API_KEY_ENV,ANTHROPIC_AUTH_TOKEN_ENV,ANTHROPIC_FEDERATION_RULE_ID_ENV,ANTHROPIC_IDENTITY_TOKEN_FILE_ENV,ANTHROPIC_OAUTH_TOKEN_ENV,ANTHROPIC_ORGANIZATION_ID_ENV,ANTHROPIC_SERVICE_ACCOUNT_ID_ENV,ANTHROPIC_WORKSPACE_ID_ENV,findEnvKeys,getEnvApiKey}from"./chunk-D3ZCGC4T.js";import{resolveAzureBaseUrl,resolveDeploymentName}from"./chunk-RZ2V53SP.js";import{getProviderEnvValue}from"./chunk-5FDOJRDS.js";import{StreamingJsonParser,ToolCallArgumentsStream,parseJsonWithRepair,parseStreamingJson,parseToolCallArguments,repairJson}from"./chunk-IC6JXX2J.js";import{estimateContextTokens}from"./chunk-SR6EWNPW.js";import{AI_TELEMETRY_SCHEMA,InMemoryCredentialStore,InMemoryModelsStore,ModelsError,assertChatModel,assertClassifierInputSupported,assertClassifierModel,assertImageModel,calculateCost,clampThinkingLevel,classifierErrorResult,collapseSystemMessages,createInitialSystemMessage,createModels,createProvider,declarationsEqual,defaultProviderAuthContext,getCurrentSystemMessage,getCurrentSystemPrompt,getCurrentTools,getDeclaredTools,getInitialSystemMessage,getModelType,getSupportedThinkingLevels,getToolStateChanges,hasApi,hasNonAdditiveToolChanges,hasToolRedefinitions,imageErrorResult,isModelType,lazyApi,lazyStream,modelsAreEqual,normalizeContext,resolveTranscript,resolveTranscriptTools,toToolDeclaration,withoutInitialSystemMessage}from"./chunk-RAIYJ5FC.js";import{AssistantMessageEventStream,EventStream,appendAssistantMessageDiagnostic,createAssistantMessageDiagnostic,createAssistantMessageEventStream,extractDiagnosticError,formatThrownValue}from"./chunk-6VYRLG5F.js";import{PI_AI_VERSION,PI_ATTRIBUTION,contentText,formatUserAgent,getAttributionHeaders,getClientVersion,getIdentityHeaders,getOpenCodeSessionHeaders,getSystemMessageText,mergeClientIdentity,ownedSlice,renderSystemMessageUpdate,withClientIdentity}from"./chunk-H3UF54OB.js";import{__commonJS,__export,__require,__toESM}from"./chunk-4L3WN2XY.js";var require_symbols=__commonJS({"node_modules/undici/lib/core/symbols.js"(exports,module){"use strict";module.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kRequestOrigin:Symbol("request origin"),kRedirectCacheControl:Symbol("redirect cache control"),kOriginless:Symbol("originless"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2Options:Symbol("http2 options"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kHostAuthority:Symbol("host authority"),kHTTP2InitialWindowSize:Symbol("http2 initial window size"),kHTTP2ConnectionWindowSize:Symbol("http2 connection window size"),kEnableConnectProtocol:Symbol("http2session connect protocol"),kRemoteSettings:Symbol("http2session remote settings"),kHTTP2Stream:Symbol("http2session client stream"),kPingInterval:Symbol("ping interval"),kUseMilo:Symbol("use milo"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent"),kSocks5ProxyAgent:Symbol("socks5 proxy agent")}}});var require_timers=__commonJS({"node_modules/undici/lib/util/timers.js"(exports,module){"use strict";var fastNow=0,RESOLUTION_MS=1e3,TICK_MS=(RESOLUTION_MS>>1)-1,fastNowTimeout,kFastTimer=Symbol("kFastTimer"),fastTimers=[],NOT_IN_LIST=-2,TO_BE_CLEARED=-1,PENDING2=0,ACTIVE=1;function onTick(){fastNow+=TICK_MS;let idx=0,len=fastTimers.length;for(;idx<len;){let timer=fastTimers[idx];timer._state===PENDING2?(timer._idleStart=fastNow-TICK_MS,timer._state=ACTIVE):timer._state===ACTIVE&&fastNow>=timer._idleStart+timer._idleTimeout&&(timer._state=TO_BE_CLEARED,timer._idleStart=-1,timer._onTimeout(timer._timerArg)),timer._state===TO_BE_CLEARED?(timer._state=NOT_IN_LIST,--len!==0&&(fastTimers[idx]=fastTimers[len])):++idx}fastTimers.length=len,fastTimers.length!==0&&refreshTimeout()}function refreshTimeout(){fastNowTimeout?.refresh?fastNowTimeout.refresh():(clearTimeout(fastNowTimeout),fastNowTimeout=setTimeout(onTick,TICK_MS),fastNowTimeout?.unref())}var FastTimer=class{[kFastTimer]=!0;_state=NOT_IN_LIST;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(callback,delay,arg){this._onTimeout=callback,this._idleTimeout=delay,this._timerArg=arg,this.refresh()}refresh(){this._state===NOT_IN_LIST&&fastTimers.push(this),(!fastNowTimeout||fastTimers.length===1)&&refreshTimeout(),this._state=PENDING2}clear(){this._state=TO_BE_CLEARED,this._idleStart=-1}};module.exports={setTimeout(callback,delay,arg){return delay<=RESOLUTION_MS?setTimeout(callback,delay,arg):new FastTimer(callback,delay,arg)},clearTimeout(timeout){timeout[kFastTimer]?timeout.clear():clearTimeout(timeout)},setFastTimeout(callback,delay,arg){return new FastTimer(callback,delay,arg)},clearFastTimeout(timeout){timeout.clear()},now(){return fastNow},tick(delay=0){fastNow+=delay-RESOLUTION_MS+1,onTick(),onTick()},reset(){fastNow=0,fastTimers.length=0,clearTimeout(fastNowTimeout),fastNowTimeout=null},kFastTimer}}});var require_errors=__commonJS({"node_modules/undici/lib/core/errors.js"(exports,module){"use strict";var kUndiciError=Symbol.for("undici.error.UND_ERR"),UndiciError=class extends Error{constructor(message,options){super(message,options),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](instance){return instance&&instance[kUndiciError]===!0}get[kUndiciError](){return!0}},kConnectTimeoutError=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ConnectTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="ConnectTimeoutError",this.message=message||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kConnectTimeoutError]===!0}get[kConnectTimeoutError](){return!0}},kHeadersTimeoutError=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),HeadersTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="HeadersTimeoutError",this.message=message||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kHeadersTimeoutError]===!0}get[kHeadersTimeoutError](){return!0}},kHeadersOverflowError=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),HeadersOverflowError=class extends UndiciError{constructor(message){super(message),this.name="HeadersOverflowError",this.message=message||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](instance){return instance&&instance[kHeadersOverflowError]===!0}get[kHeadersOverflowError](){return!0}},kBodyTimeoutError=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),BodyTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="BodyTimeoutError",this.message=message||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kBodyTimeoutError]===!0}get[kBodyTimeoutError](){return!0}},kInvalidArgumentError=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),InvalidArgumentError=class extends UndiciError{constructor(message){super(message),this.name="InvalidArgumentError",this.message=message||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](instance){return instance&&instance[kInvalidArgumentError]===!0}get[kInvalidArgumentError](){return!0}},kInvalidReturnValueError=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),InvalidReturnValueError=class extends UndiciError{constructor(message){super(message),this.name="InvalidReturnValueError",this.message=message||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](instance){return instance&&instance[kInvalidReturnValueError]===!0}get[kInvalidReturnValueError](){return!0}},kAbortError=Symbol.for("undici.error.UND_ERR_ABORT"),AbortError=class extends UndiciError{constructor(message){super(message),this.name="AbortError",this.message=message||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](instance){return instance&&instance[kAbortError]===!0}get[kAbortError](){return!0}},kRequestAbortedError=Symbol.for("undici.error.UND_ERR_ABORTED"),RequestAbortedError=class extends AbortError{constructor(message){super(message),this.name="AbortError",this.message=message||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kRequestAbortedError]===!0}get[kRequestAbortedError](){return!0}},kInformationalError=Symbol.for("undici.error.UND_ERR_INFO"),InformationalError=class extends UndiciError{constructor(message,options){super(message,options),this.name="InformationalError",this.message=message||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](instance){return instance&&instance[kInformationalError]===!0}get[kInformationalError](){return!0}},kRequestContentLengthMismatchError=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),RequestContentLengthMismatchError=class extends UndiciError{constructor(message){super(message),this.name="RequestContentLengthMismatchError",this.message=message||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](instance){return instance&&instance[kRequestContentLengthMismatchError]===!0}get[kRequestContentLengthMismatchError](){return!0}},kResponseContentLengthMismatchError=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),ResponseContentLengthMismatchError=class extends UndiciError{constructor(message){super(message),this.name="ResponseContentLengthMismatchError",this.message=message||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](instance){return instance&&instance[kResponseContentLengthMismatchError]===!0}get[kResponseContentLengthMismatchError](){return!0}},kClientDestroyedError=Symbol.for("undici.error.UND_ERR_DESTROYED"),ClientDestroyedError=class extends UndiciError{constructor(message){super(message),this.name="ClientDestroyedError",this.message=message||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](instance){return instance&&instance[kClientDestroyedError]===!0}get[kClientDestroyedError](){return!0}},kClientClosedError=Symbol.for("undici.error.UND_ERR_CLOSED"),ClientClosedError=class extends UndiciError{constructor(message){super(message),this.name="ClientClosedError",this.message=message||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](instance){return instance&&instance[kClientClosedError]===!0}get[kClientClosedError](){return!0}},kSocketError=Symbol.for("undici.error.UND_ERR_SOCKET"),SocketError=class extends UndiciError{constructor(message,socket){super(message),this.name="SocketError",this.message=message||"Socket error",this.code="UND_ERR_SOCKET",this.socket=socket}static[Symbol.hasInstance](instance){return instance&&instance[kSocketError]===!0}get[kSocketError](){return!0}},kNotSupportedError=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),NotSupportedError=class extends UndiciError{constructor(message){super(message),this.name="NotSupportedError",this.message=message||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kNotSupportedError]===!0}get[kNotSupportedError](){return!0}},kBalancedPoolMissingUpstreamError=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),BalancedPoolMissingUpstreamError=class extends UndiciError{constructor(message){super(message),this.name="MissingUpstreamError",this.message=message||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](instance){return instance&&instance[kBalancedPoolMissingUpstreamError]===!0}get[kBalancedPoolMissingUpstreamError](){return!0}},kWebAssemblyNotSupportedError=Symbol.for("undici.error.ERR_WEBASSEMBLY_NOT_SUPPORTED"),WebAssemblyNotSupportedError=class extends Error{constructor(message){super(message||"WebAssembly is not supported in this environment, but is required for HTTP/1 parsing"),this.code="ERR_WEBASSEMBLY_NOT_SUPPORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kWebAssemblyNotSupportedError]===!0}get[kWebAssemblyNotSupportedError](){return!0}},kHTTPParserError=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),HTTPParserError=class extends Error{constructor(message,code,data){super(message),this.name="HTTPParserError",this.code=code?`HPE_${code}`:void 0,this.data=data?data.toString():void 0}static[Symbol.hasInstance](instance){return instance&&instance[kHTTPParserError]===!0}get[kHTTPParserError](){return!0}},kResponseExceededMaxSizeError=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),ResponseExceededMaxSizeError=class extends UndiciError{constructor(message){super(message),this.name="ResponseExceededMaxSizeError",this.message=message||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](instance){return instance&&instance[kResponseExceededMaxSizeError]===!0}get[kResponseExceededMaxSizeError](){return!0}},kRequestRetryError=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),RequestRetryError=class extends UndiciError{constructor(message,code,{headers,data}){super(message),this.name="RequestRetryError",this.message=message||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=code,this.data=data,this.headers=headers}static[Symbol.hasInstance](instance){return instance&&instance[kRequestRetryError]===!0}get[kRequestRetryError](){return!0}},kResponseError=Symbol.for("undici.error.UND_ERR_RESPONSE"),ResponseError=class extends UndiciError{constructor(message,code,{headers,body:body2,bodyTruncated=!1}){super(message),this.name="ResponseError",this.message=message||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=code,this.body=body2,this.bodyTruncated=bodyTruncated,this.headers=headers}static[Symbol.hasInstance](instance){return instance&&instance[kResponseError]===!0}get[kResponseError](){return!0}},kSecureProxyConnectionError=Symbol.for("undici.error.UND_ERR_PRX_TLS"),SecureProxyConnectionError=class extends UndiciError{constructor(cause,message,options={}){super(message,{cause,...options}),this.name="SecureProxyConnectionError",this.message=message||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=cause}static[Symbol.hasInstance](instance){return instance&&instance[kSecureProxyConnectionError]===!0}get[kSecureProxyConnectionError](){return!0}},kProxyConnectionError=Symbol.for("undici.error.UND_ERR_PRX_CONN"),ProxyConnectionError=class extends UndiciError{constructor(cause,message,options={}){super(message,{cause,...options}),this.name="ProxyConnectionError",this.message=message||"Proxy Connection failed",this.code="UND_ERR_PRX_CONN",this.cause=cause}static[Symbol.hasInstance](instance){return instance&&instance[kProxyConnectionError]===!0}get[kProxyConnectionError](){return!0}},kMaxRedirectsError=Symbol.for("undici.error.UND_ERR_REDIRECT_MAX"),MaxRedirectsError=class extends UndiciError{constructor(message){super(message),this.name="MaxRedirectsError",this.message=message||"max redirects",this.code="UND_ERR_REDIRECT_MAX"}static[Symbol.hasInstance](instance){return instance&&instance[kMaxRedirectsError]===!0}get[kMaxRedirectsError](){return!0}},kMaxOriginsReachedError=Symbol.for("undici.error.UND_ERR_MAX_ORIGINS_REACHED"),MaxOriginsReachedError=class extends UndiciError{constructor(message){super(message),this.name="MaxOriginsReachedError",this.message=message||"Maximum allowed origins reached",this.code="UND_ERR_MAX_ORIGINS_REACHED"}static[Symbol.hasInstance](instance){return instance&&instance[kMaxOriginsReachedError]===!0}get[kMaxOriginsReachedError](){return!0}},Socks5ProxyError=class extends UndiciError{constructor(message,code){super(message),this.name="Socks5ProxyError",this.message=message||"SOCKS5 proxy error",this.code=code||"UND_ERR_SOCKS5"}},kMessageSizeExceededError=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),MessageSizeExceededError=class extends UndiciError{constructor(message){super(message),this.name="MessageSizeExceededError",this.message=message||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](instance){return instance&&instance[kMessageSizeExceededError]===!0}get[kMessageSizeExceededError](){return!0}};module.exports={AbortError,WebAssemblyNotSupportedError,HTTPParserError,UndiciError,HeadersTimeoutError,HeadersOverflowError,BodyTimeoutError,RequestContentLengthMismatchError,ConnectTimeoutError,InvalidArgumentError,InvalidReturnValueError,RequestAbortedError,ClientDestroyedError,ClientClosedError,InformationalError,SocketError,NotSupportedError,ResponseContentLengthMismatchError,BalancedPoolMissingUpstreamError,ResponseExceededMaxSizeError,RequestRetryError,ResponseError,SecureProxyConnectionError,ProxyConnectionError,MaxOriginsReachedError,MaxRedirectsError,Socks5ProxyError,MessageSizeExceededError}}});var require_constants=__commonJS({"node_modules/undici/lib/core/constants.js"(exports,module){"use strict";var wellknownHeaderNames=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"],headerNameLowerCasedRecord={};Object.setPrototypeOf(headerNameLowerCasedRecord,null);for(let i=0;i<wellknownHeaderNames.length;++i){let key=wellknownHeaderNames[i],lowerCasedKey=key.toLowerCase();headerNameLowerCasedRecord[key]=headerNameLowerCasedRecord[lowerCasedKey]=lowerCasedKey}var defaultWebSocketMaxFragments=131072,defaultWebSocketMaxPayloadSize=128*1024*1024;module.exports={wellknownHeaderNames,headerNameLowerCasedRecord,defaultWebSocketMaxFragments,defaultWebSocketMaxPayloadSize}}});var require_tree=__commonJS({"node_modules/undici/lib/core/tree.js"(exports,module){"use strict";var{wellknownHeaderNames,headerNameLowerCasedRecord}=require_constants(),TstNode=class _TstNode{value=null;left=null;middle=null;right=null;code;constructor(key,value,index3){if(index3===void 0||index3>=key.length)throw new TypeError("Unreachable");if((this.code=key.charCodeAt(index3))>127)throw new TypeError("key must be ascii string");key.length!==++index3?this.middle=new _TstNode(key,value,index3):this.value=value}add(key,value){let length=key.length;if(length===0)throw new TypeError("Unreachable");let index3=0,node=this;for(;;){let code=key.charCodeAt(index3);if(code>127)throw new TypeError("key must be ascii string");if(node.code===code)if(length===++index3){node.value=value;break}else if(node.middle!==null)node=node.middle;else{node.middle=new _TstNode(key,value,index3);break}else if(node.code<code)if(node.left!==null)node=node.left;else{node.left=new _TstNode(key,value,index3);break}else if(node.right!==null)node=node.right;else{node.right=new _TstNode(key,value,index3);break}}}search(key){let keylength=key.length,index3=0,node=this;for(;node!==null&&index3<keylength;){let code=key[index3];for(code<=90&&code>=65&&(code|=32);node!==null;){if(code===node.code){if(keylength===++index3)return node;node=node.middle;break}node=node.code<code?node.left:node.right}}return null}},TernarySearchTree=class{node=null;insert(key,value){this.node===null?this.node=new TstNode(key,value,0):this.node.add(key,value)}lookup(key){return this.node?.search(key)?.value??null}},tree=new TernarySearchTree;for(let i=0;i<wellknownHeaderNames.length;++i){let key=headerNameLowerCasedRecord[wellknownHeaderNames[i]];tree.insert(key,key)}module.exports={TernarySearchTree,tree}}});var require_util=__commonJS({"node_modules/undici/lib/core/util.js"(exports,module){"use strict";var assert=__require("node:assert"),{kDestroyed,kBodyUsed,kListeners,kBody}=require_symbols(),{IncomingMessage}=__require("node:http"),stream2=__require("node:stream"),net=__require("node:net"),{stringify}=__require("node:querystring"),{EventEmitter:EE,addAbortListener:addAbortListenerNative}=__require("node:events"),timers=require_timers(),{InvalidArgumentError,ConnectTimeoutError}=require_errors(),{headerNameLowerCasedRecord}=require_constants(),{tree}=require_tree(),BodyAsyncIterable=class{constructor(body2){this[kBody]=body2,this[kBodyUsed]=!1}async*[Symbol.asyncIterator](){assert(!this[kBodyUsed],"disturbed"),this[kBodyUsed]=!0,yield*this[kBody]}};function noop(){}function wrapRequestBody(body2){return isStream(body2)?(bodyLength(body2)===0&&body2.on("data",function(){assert(!1)}),typeof body2.readableDidRead!="boolean"&&(body2[kBodyUsed]=!1,EE.prototype.on.call(body2,"data",function(){this[kBodyUsed]=!0})),body2):body2&&typeof body2.pipeTo=="function"?new BodyAsyncIterable(body2):body2&&isFormDataLike(body2)?body2:body2&&typeof body2!="string"&&!ArrayBuffer.isView(body2)&&isIterable(body2)?new BodyAsyncIterable(body2):body2}function isStream(obj2){return obj2&&typeof obj2=="object"&&typeof obj2.pipe=="function"&&typeof obj2.on=="function"}function isBlobLike(object){return object instanceof Blob}function pathHasQueryOrFragment(url){return url.includes("?")||url.includes("#")}function serializePathWithQuery(url,queryParams){if(pathHasQueryOrFragment(url))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let stringified=stringify(queryParams);return stringified&&(url+="?"+stringified),url}function isValidPort(port){let value=parseInt(port,10);return value===Number(port)&&value>=0&&value<=65535}function isHttpOrHttpsPrefixed(value){return value!=null&&value[0]==="h"&&value[1]==="t"&&value[2]==="t"&&value[3]==="p"&&(value[4]===":"||value[4]==="s"&&value[5]===":")}function parseURL(url){if(typeof url=="string"){if(url=new URL(url),!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");return url}if(!url||typeof url!="object")throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object.");if(!(url instanceof URL)){if(url.port!=null&&url.port!==""&&isValidPort(url.port)===!1)throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer.");if(url.path!=null&&typeof url.path!="string")throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined.");if(url.pathname!=null&&typeof url.pathname!="string")throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined.");if(url.hostname!=null&&typeof url.hostname!="string")throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined.");if(url.origin!=null&&typeof url.origin!="string")throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined.");if(!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");let port=url.port!=null?url.port:url.protocol==="https:"?443:80,origin=url.origin!=null?url.origin:`${url.protocol||""}//${url.hostname||""}:${port}`,path10=url.path!=null?url.path:`${url.pathname||""}${url.search||""}`;return origin[origin.length-1]==="/"&&(origin=origin.slice(0,origin.length-1)),path10&&path10[0]!=="/"&&(path10=`/${path10}`),new URL(`${origin}${path10}`)}if(!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");return url}function parseOrigin(url){if(url=parseURL(url),url.pathname!=="/"||url.search||url.hash)throw new InvalidArgumentError("invalid url");return url}function getHostname(host){if(host[0]==="["){let idx2=host.indexOf("]");return assert(idx2!==-1),host.substring(1,idx2)}let idx=host.indexOf(":");return idx===-1?host:host.substring(0,idx)}function getServerName(host){if(!host)return null;assert(typeof host=="string");let servername=getHostname(host);return net.isIP(servername)?"":servername}function deepClone(obj2){return JSON.parse(JSON.stringify(obj2))}function isAsyncIterable(obj2){return obj2!=null&&typeof obj2[Symbol.asyncIterator]=="function"}function isIterable(obj2){return obj2!=null&&(typeof obj2[Symbol.iterator]=="function"||typeof obj2[Symbol.asyncIterator]=="function")}function hasSafeIterator(obj2){let prototype=Object.getPrototypeOf(obj2);return Object.hasOwn(obj2,Symbol.iterator)||prototype!=null&&prototype!==Object.prototype&&typeof obj2[Symbol.iterator]=="function"}function bodyLength(body2){if(body2==null)return 0;if(isStream(body2)){let state2=body2._readableState;return state2&&state2.objectMode===!1&&state2.ended===!0&&Number.isFinite(state2.length)?state2.length:null}else{if(isBlobLike(body2))return body2.size!=null?body2.size:null;if(isBuffer(body2))return body2.byteLength}return null}function isDestroyed(body2){return body2&&!!(body2.destroyed||body2[kDestroyed]||stream2.isDestroyed?.(body2))}function destroy(stream3,err){if(!(stream3==null||!isStream(stream3)||isDestroyed(stream3))){if(typeof stream3.destroy=="function"){Object.getPrototypeOf(stream3).constructor===IncomingMessage&&(stream3.socket=null);try{stream3.destroy(err)}catch{}}else err&&queueMicrotask(()=>{stream3.emit("error",err)});stream3.destroyed!==!0&&(stream3[kDestroyed]=!0)}}var KEEPALIVE_TIMEOUT_EXPR=/(?:^|,)[\t ]*timeout=(\d+)/i;function parseKeepAliveTimeout(val){let m=val.match(KEEPALIVE_TIMEOUT_EXPR);return m?parseInt(m[1],10)*1e3:null}function headerNameToString(value){return typeof value=="string"?headerNameLowerCasedRecord[value]??value.toLowerCase():tree.lookup(value)??value.toString("latin1").toLowerCase()}function bufferToLowerCasedHeaderName(value){return tree.lookup(value)??value.toString("latin1").toLowerCase()}function setHeader(obj2,key,value){key==="__proto__"?Object.defineProperty(obj2,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj2[key]=value}function parseHeaders(headers,obj2){obj2===void 0&&(obj2={});for(let i=0;i<headers.length;i+=2){let key=headerNameToString(headers[i]),val=obj2[key];if(val!==void 0)if(Object.hasOwn(obj2,key))typeof val=="string"&&(val=[val],obj2[key]=val),val.push(headers[i+1].toString("latin1"));else{let headersValue=typeof headers[i+1]=="string"?headers[i+1]:Array.isArray(headers[i+1])?headers[i+1].map(x=>x.toString("latin1")):headers[i+1].toString("latin1");key==="__proto__"?Object.defineProperty(obj2,key,{value:headersValue,enumerable:!0,configurable:!0,writable:!0}):obj2[key]=headersValue}else{let headersValue=typeof headers[i+1]=="string"?headers[i+1]:Array.isArray(headers[i+1])?headers[i+1].map(x=>x.toString("latin1")):headers[i+1].toString("latin1");obj2[key]=headersValue}}return obj2}function parseRawHeaders(headers){if(headers==null)return[];if(!Array.isArray(headers)){let rawHeaders=[];for(let[name,value]of Object.entries(headers))if(Array.isArray(value))for(let entry of value)rawHeaders.push(name,`${entry}`);else rawHeaders.push(name,`${value}`);return rawHeaders}let headersLength=headers.length,ret=new Array(headersLength),key,val;for(let n=0;n<headersLength;n+=2)key=headers[n],val=headers[n+1],typeof key!="string"&&(key=key.toString()),typeof val!="string"&&(val=val.toString("latin1")),ret[n]=key,ret[n+1]=val;return ret}function toRawHeaders(headers){let rawHeaders=[];for(let[name,value]of Object.entries(headers))if(Array.isArray(value))for(let entry of value)rawHeaders.push(Buffer.from(name,"latin1"),Buffer.from(`${entry}`,"latin1"));else rawHeaders.push(Buffer.from(name,"latin1"),Buffer.from(`${value}`,"latin1"));return rawHeaders}function encodeRawHeaders(headers){if(!Array.isArray(headers))throw new TypeError("expected headers to be an array");return headers.map(x=>Buffer.from(x))}function isBuffer(buffer){return buffer instanceof Uint8Array||Buffer.isBuffer(buffer)}function assertRequestHandler(handler,method,upgrade){if(!handler||typeof handler!="object")throw new InvalidArgumentError("handler must be an object");if(typeof handler.onRequestStart!="function")throw new InvalidArgumentError("invalid onRequestStart method");if(typeof handler.onResponseError!="function")throw new InvalidArgumentError("invalid onResponseError method");if(typeof handler.onBodySent!="function"&&handler.onBodySent!==void 0)throw new InvalidArgumentError("invalid onBodySent method");if(typeof handler.onRequestSent!="function"&&handler.onRequestSent!==void 0)throw new InvalidArgumentError("invalid onRequestSent method");if(upgrade||method==="CONNECT"){if(typeof handler.onRequestUpgrade!="function")throw new InvalidArgumentError("invalid onRequestUpgrade method")}else{if(typeof handler.onResponseStart!="function")throw new InvalidArgumentError("invalid onResponseStart method");if(typeof handler.onResponseData!="function")throw new InvalidArgumentError("invalid onResponseData method");if(typeof handler.onResponseEnd!="function")throw new InvalidArgumentError("invalid onResponseEnd method")}}function isDisturbed(body2){return!!(body2&&(stream2.isDisturbed(body2)||body2[kBodyUsed]))}function getSocketInfo(socket){return{localAddress:socket.localAddress,localPort:socket.localPort,remoteAddress:socket.remoteAddress,remotePort:socket.remotePort,remoteFamily:socket.remoteFamily,timeout:socket.timeout,bytesWritten:socket.bytesWritten,bytesRead:socket.bytesRead}}function isFormDataLike(object){return object&&typeof object=="object"&&typeof object.append=="function"&&typeof object.delete=="function"&&typeof object.get=="function"&&typeof object.getAll=="function"&&typeof object.has=="function"&&typeof object.set=="function"&&object[Symbol.toStringTag]==="FormData"}function addAbortListener(signal,listener){return!signal||"aborted"in signal?addAbortListenerNative(signal,listener)[Symbol.dispose]:typeof signal.addEventListener=="function"?(signal.addEventListener("abort",listener,{once:!0}),()=>signal.removeEventListener("abort",listener)):(signal.once("abort",listener),()=>signal.removeListener("abort",listener))}var validTokenChars=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function isTokenCharCode(c){return validTokenChars[c]===1}var tokenRegExp=/^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;function isValidHTTPToken(characters){if(characters.length>=12)return tokenRegExp.test(characters);if(characters.length===0)return!1;for(let i=0;i<characters.length;i++)if(validTokenChars[characters.charCodeAt(i)]!==1)return!1;return!0}var headerCharRegex=/[^\t\x20-\x7e\x80-\xff]/;function isValidHeaderValue(characters){return!headerCharRegex.test(characters)}var rangeHeaderRegex=/^bytes (\d+)-(\d+)\/(\d+|\*)?$/;function parseRangeHeader(range2){if(range2==null||range2==="")return{start:0,end:null,size:null};if(!range2)return null;let m=rangeHeaderRegex.exec(range2);return m?{start:parseInt(m[1]),end:m[2]?parseInt(m[2]):null,size:m[3]&&m[3]!=="*"?parseInt(m[3]):null}:null}function addListener(obj2,name,listener){return(obj2[kListeners]??=[]).push([name,listener]),obj2.on(name,listener),obj2}function removeAllListeners(obj2){if(obj2[kListeners]!=null){for(let[name,listener]of obj2[kListeners])obj2.removeListener(name,listener);obj2[kListeners]=null}return obj2}function errorRequest(client,request,err){try{request.onResponseError(err),assert(request.aborted)}catch(err2){client.emit("error",err2)}}var setupConnectTimeout=process.platform==="win32"?(socketWeakRef,opts)=>{if(!opts.timeout)return noop;let s1=null,s2=null,fastTimer=timers.setFastTimeout(()=>{s1=setImmediate(()=>{s2=setImmediate(()=>onConnectTimeout(socketWeakRef.deref(),opts))})},opts.timeout);return()=>{timers.clearFastTimeout(fastTimer),clearImmediate(s1),clearImmediate(s2)}}:(socketWeakRef,opts)=>{if(!opts.timeout)return noop;let s1=null,fastTimer=timers.setFastTimeout(()=>{s1=setImmediate(()=>{onConnectTimeout(socketWeakRef.deref(),opts)})},opts.timeout);return()=>{timers.clearFastTimeout(fastTimer),clearImmediate(s1)}};function onConnectTimeout(socket,opts){if(socket==null)return;let message="Connect Timeout Error";Array.isArray(socket.autoSelectFamilyAttemptedAddresses)?message+=` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`:message+=` (attempted address: ${opts.hostname}:${opts.port},`,message+=` timeout: ${opts.timeout}ms)`,destroy(socket,new ConnectTimeoutError(message))}var lastUrlString=null,lastProtocol=null;function getProtocolFromUrlString(urlString){if(urlString===lastUrlString)return lastProtocol;let protocol=getProtocolFromUrlStringSlow(urlString);return lastUrlString=urlString,lastProtocol=protocol,protocol}function getProtocolFromUrlStringSlow(urlString){if(urlString[0]==="h"&&urlString[1]==="t"&&urlString[2]==="t"&&urlString[3]==="p")switch(urlString[4]){case":":return"http:";case"s":if(urlString[5]===":")return"https:"}return urlString.slice(0,urlString.indexOf(":")+1)}var kEnumerableProperty={__proto__:null,enumerable:!0},normalizedMethodRecordsBase={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT",query:"QUERY",QUERY:"QUERY"},normalizedMethodRecords={...normalizedMethodRecordsBase,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(normalizedMethodRecordsBase,null);Object.setPrototypeOf(normalizedMethodRecords,null);module.exports={kEnumerableProperty,isDisturbed,isBlobLike,parseOrigin,parseURL,getServerName,isStream,isIterable,hasSafeIterator,isAsyncIterable,isDestroyed,headerNameToString,bufferToLowerCasedHeaderName,addListener,removeAllListeners,errorRequest,parseRawHeaders,toRawHeaders,encodeRawHeaders,parseHeaders,setHeader,parseKeepAliveTimeout,destroy,bodyLength,deepClone,isBuffer,assertRequestHandler,getSocketInfo,isFormDataLike,pathHasQueryOrFragment,serializePathWithQuery,addAbortListener,isValidHTTPToken,isValidHeaderValue,isTokenCharCode,parseRangeHeader,normalizedMethodRecordsBase,normalizedMethodRecords,isValidPort,isHttpOrHttpsPrefixed,safeHTTPMethods:Object.freeze(["GET","HEAD","OPTIONS","TRACE"]),wrapRequestBody,setupConnectTimeout,getProtocolFromUrlString}}});var require_stats=__commonJS({"node_modules/undici/lib/util/stats.js"(exports,module){"use strict";var{kConnected,kPending,kRunning,kSize,kFree,kQueued}=require_symbols(),ClientStats=class{constructor(client){this.connected=client[kConnected],this.pending=client[kPending],this.running=client[kRunning],this.size=client[kSize]}},PoolStats=class{constructor(pool){this.connected=pool[kConnected],this.free=pool[kFree],this.pending=pool[kPending],this.queued=pool[kQueued],this.running=pool[kRunning],this.size=pool[kSize]}};module.exports={ClientStats,PoolStats}}});var require_diagnostics=__commonJS({"node_modules/undici/lib/core/diagnostics.js"(exports,module){"use strict";var diagnosticsChannel=__require("node:diagnostics_channel"),util=__require("node:util"),undiciDebugLog=util.debuglog("undici"),fetchDebuglog=util.debuglog("fetch"),websocketDebuglog=util.debuglog("websocket"),channels={beforeConnect:diagnosticsChannel.channel("undici:client:beforeConnect"),connected:diagnosticsChannel.channel("undici:client:connected"),connectError:diagnosticsChannel.channel("undici:client:connectError"),sendHeaders:diagnosticsChannel.channel("undici:client:sendHeaders"),create:diagnosticsChannel.channel("undici:request:create"),bodySent:diagnosticsChannel.channel("undici:request:bodySent"),bodyChunkSent:diagnosticsChannel.channel("undici:request:bodyChunkSent"),bodyChunkReceived:diagnosticsChannel.channel("undici:request:bodyChunkReceived"),headers:diagnosticsChannel.channel("undici:request:headers"),trailers:diagnosticsChannel.channel("undici:request:trailers"),error:diagnosticsChannel.channel("undici:request:error"),open:diagnosticsChannel.channel("undici:websocket:open"),close:diagnosticsChannel.channel("undici:websocket:close"),socketError:diagnosticsChannel.channel("undici:websocket:socket_error"),ping:diagnosticsChannel.channel("undici:websocket:ping"),pong:diagnosticsChannel.channel("undici:websocket:pong"),proxyConnected:diagnosticsChannel.channel("undici:proxy:connected")},isTrackingClientEvents=!1;function trackClientEvents(debugLog=undiciDebugLog){if(!isTrackingClientEvents){if(channels.beforeConnect.hasSubscribers||channels.connected.hasSubscribers||channels.connectError.hasSubscribers||channels.sendHeaders.hasSubscribers){isTrackingClientEvents=!0;return}isTrackingClientEvents=!0,diagnosticsChannel.subscribe("undici:client:beforeConnect",evt=>{let{connectParams:{version:version2,protocol,port,host}}=evt;debugLog("connecting to %s%s using %s%s",host,port?`:${port}`:"",protocol,version2)}),diagnosticsChannel.subscribe("undici:client:connected",evt=>{let{connectParams:{version:version2,protocol,port,host}}=evt;debugLog("connected to %s%s using %s%s",host,port?`:${port}`:"",protocol,version2)}),diagnosticsChannel.subscribe("undici:client:connectError",evt=>{let{connectParams:{version:version2,protocol,port,host},error}=evt;debugLog("connection to %s%s using %s%s errored - %s",host,port?`:${port}`:"",protocol,version2,error.message)}),diagnosticsChannel.subscribe("undici:client:sendHeaders",evt=>{let{request:{method,path:path10,origin}}=evt;debugLog("sending request to %s %s%s",method,origin,path10)})}}var isTrackingRequestEvents=!1;function trackRequestEvents(debugLog=undiciDebugLog){if(!isTrackingRequestEvents){if(channels.headers.hasSubscribers||channels.trailers.hasSubscribers||channels.error.hasSubscribers){isTrackingRequestEvents=!0;return}isTrackingRequestEvents=!0,diagnosticsChannel.subscribe("undici:request:headers",evt=>{let{request:{method,path:path10,origin},response:{statusCode}}=evt;debugLog("received response to %s %s%s - HTTP %d",method,origin,path10,statusCode)}),diagnosticsChannel.subscribe("undici:request:trailers",evt=>{let{request:{method,path:path10,origin}}=evt;debugLog("trailers received from %s %s%s",method,origin,path10)}),diagnosticsChannel.subscribe("undici:request:error",evt=>{let{request:{method,path:path10,origin},error}=evt;debugLog("request to %s %s%s errored - %s",method,origin,path10,error.message)})}}var isTrackingWebSocketEvents=!1;function trackWebSocketEvents(debugLog=websocketDebuglog){if(!isTrackingWebSocketEvents){if(channels.open.hasSubscribers||channels.close.hasSubscribers||channels.socketError.hasSubscribers||channels.ping.hasSubscribers||channels.pong.hasSubscribers){isTrackingWebSocketEvents=!0;return}isTrackingWebSocketEvents=!0,diagnosticsChannel.subscribe("undici:websocket:open",evt=>{if(evt.address!=null){let{address,port}=evt.address;debugLog("connection opened %s%s",address,port?`:${port}`:"")}else debugLog("connection opened")}),diagnosticsChannel.subscribe("undici:websocket:close",evt=>{let{websocket,code,reason}=evt;debugLog("closed connection to %s - %s %s",websocket.url,code,reason)}),diagnosticsChannel.subscribe("undici:websocket:socket_error",err=>{debugLog("connection errored - %s",err.message)}),diagnosticsChannel.subscribe("undici:websocket:ping",evt=>{debugLog("ping received")}),diagnosticsChannel.subscribe("undici:websocket:pong",evt=>{debugLog("pong received")})}}(undiciDebugLog.enabled||fetchDebuglog.enabled)&&(trackClientEvents(fetchDebuglog.enabled?fetchDebuglog:undiciDebugLog),trackRequestEvents(fetchDebuglog.enabled?fetchDebuglog:undiciDebugLog));websocketDebuglog.enabled&&(trackClientEvents(undiciDebugLog.enabled?undiciDebugLog:websocketDebuglog),trackWebSocketEvents(websocketDebuglog));module.exports={channels}}});var require_constants2=__commonJS({"node_modules/undici/lib/web/fetch/constants.js"(exports,module){"use strict";var corsSafeListedMethods=["GET","HEAD","POST"],corsSafeListedMethodsSet=new Set(corsSafeListedMethods),nullBodyStatus=[101,204,205,304],redirectStatus=[301,302,303,307,308],redirectStatusSet=new Set(redirectStatus),badPorts=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],badPortsSet=new Set(badPorts),referrerPolicyTokens=["no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],referrerPolicy=["",...referrerPolicyTokens],referrerPolicyTokensSet=new Set(referrerPolicyTokens),requestRedirect=["follow","manual","error"],safeMethods=["GET","HEAD","OPTIONS","TRACE","QUERY"],safeMethodsSet=new Set(safeMethods),requestMode=["navigate","same-origin","no-cors","cors"],requestCredentials=["omit","same-origin","include"],requestCache=["default","no-store","reload","no-cache","force-cache","only-if-cached"],requestBodyHeader=["content-encoding","content-language","content-location","content-type","content-length"],requestDuplex=["half"],forbiddenMethods=["CONNECT","TRACE","TRACK"],forbiddenMethodsSet=new Set(forbiddenMethods),subresource=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],subresourceSet=new Set(subresource);module.exports={subresource,forbiddenMethods,requestBodyHeader,referrerPolicy,requestRedirect,requestMode,requestCredentials,requestCache,redirectStatus,corsSafeListedMethods,nullBodyStatus,safeMethods,badPorts,requestDuplex,subresourceSet,badPortsSet,redirectStatusSet,corsSafeListedMethodsSet,safeMethodsSet,forbiddenMethodsSet,referrerPolicyTokens:referrerPolicyTokensSet}}});var require_global=__commonJS({"node_modules/undici/lib/web/fetch/global.js"(exports,module){"use strict";var globalOrigin=Symbol.for("undici.globalOrigin.1");function getGlobalOrigin(){return globalThis[globalOrigin]}function setGlobalOrigin(newOrigin){if(newOrigin===void 0){Object.defineProperty(globalThis,globalOrigin,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let parsedURL=new URL(newOrigin);if(parsedURL.protocol!=="http:"&&parsedURL.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);Object.defineProperty(globalThis,globalOrigin,{value:parsedURL,writable:!0,enumerable:!1,configurable:!1})}module.exports={getGlobalOrigin,setGlobalOrigin}}});var require_encoding=__commonJS({"node_modules/undici/lib/encoding/index.js"(exports,module){"use strict";var textDecoder=new TextDecoder;function utf8DecodeBytes(buffer){return buffer.length===0?"":(buffer[0]===239&&buffer[1]===187&&buffer[2]===191&&(buffer=buffer.subarray(3)),textDecoder.decode(buffer))}module.exports={utf8DecodeBytes}}});var require_infra=__commonJS({"node_modules/undici/lib/web/infra/index.js"(exports,module){"use strict";var assert=__require("node:assert"),{utf8DecodeBytes}=require_encoding();function collectASequenceOfCodePoints(condition,input2,position){let result2="";for(;position.position<input2.length&&condition(input2[position.position]);)result2+=input2[position.position],position.position++;return result2}function collectASequenceOfCodePointsFast(char,input2,position){let idx=input2.indexOf(char,position.position),start=position.position;return idx===-1?(position.position=input2.length,input2.slice(start)):(position.position=idx,input2.slice(start,position.position))}var ASCII_WHITESPACE_REPLACE_REGEX=/[\u0009\u000A\u000C\u000D\u0020]/g;function forgivingBase64(data){data=data.replace(ASCII_WHITESPACE_REPLACE_REGEX,"");let dataLength=data.length;if(dataLength%4===0&&data.charCodeAt(dataLength-1)===61&&(--dataLength,data.charCodeAt(dataLength-1)===61&&--dataLength),dataLength%4===1||/[^+/0-9A-Za-z]/.test(data.length===dataLength?data:data.substring(0,dataLength)))return"failure";let buffer=Buffer.from(data,"base64");return new Uint8Array(buffer.buffer,buffer.byteOffset,buffer.byteLength)}function isASCIIWhitespace(char){return char===9||char===10||char===12||char===13||char===32}function isomorphicDecode(input2){let length=input2.length;if(65535>length)return String.fromCharCode.apply(null,input2);let result2="",i=0,addition=65535;for(;i<length;)i+addition>length&&(addition=length-i),result2+=String.fromCharCode.apply(null,input2.subarray(i,i+=addition));return result2}var invalidIsomorphicEncodeValueRegex=/[^\x00-\xFF]/;function isomorphicEncode(input2){return assert(!invalidIsomorphicEncodeValueRegex.test(input2)),input2}var nonASCIIRegex=/[^\x00-\x7F]/;function asciiLowercase(str3){return nonASCIIRegex.test(str3)?str3.replace(/[A-Z]+/g,upper=>upper.toLowerCase()):str3.toLowerCase()}function parseJSONFromBytes(bytes2){return JSON.parse(utf8DecodeBytes(bytes2))}function removeASCIIWhitespace(str3,leading=!0,trailing=!0){return removeChars(str3,leading,trailing,isASCIIWhitespace)}function removeChars(str3,leading,trailing,predicate){let lead=0,trail=str3.length-1;if(leading)for(;lead<str3.length&&predicate(str3.charCodeAt(lead));)lead++;if(trailing)for(;trail>=lead&&predicate(str3.charCodeAt(trail));)trail--;return lead===0&&trail===str3.length-1?str3:str3.slice(lead,trail+1)}function serializeJavascriptValueToJSONString(value){let result2=JSON.stringify(value);if(result2===void 0)throw new TypeError("Value is not JSON serializable");return assert(typeof result2=="string"),result2}module.exports={asciiLowercase,collectASequenceOfCodePoints,collectASequenceOfCodePointsFast,forgivingBase64,isASCIIWhitespace,isomorphicDecode,isomorphicEncode,parseJSONFromBytes,removeASCIIWhitespace,removeChars,serializeJavascriptValueToJSONString}}});var require_data_url=__commonJS({"node_modules/undici/lib/web/fetch/data-url.js"(exports,module){"use strict";var assert=__require("node:assert"),{asciiLowercase,forgivingBase64,collectASequenceOfCodePoints,collectASequenceOfCodePointsFast,isomorphicDecode,removeASCIIWhitespace,removeChars}=require_infra(),encoder2=new TextEncoder,HTTP_TOKEN_CODEPOINTS=/^[-!#$%&'*+.^_`|~A-Za-z0-9]+$/u,HTTP_WHITESPACE_REGEX=/[\u000A\u000D\u0009\u0020]/u,HTTP_QUOTED_STRING_TOKENS=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/u;function dataURLProcessor(dataURL){assert(dataURL.protocol==="data:");let input2=URLSerializer(dataURL,!0);input2=input2.slice(5);let position={position:0},mimeType=collectASequenceOfCodePointsFast(",",input2,position),mimeTypeLength=mimeType.length;if(mimeType=removeASCIIWhitespace(mimeType,!0,!0),position.position>=input2.length)return"failure";position.position++;let encodedBody=input2.slice(mimeTypeLength+1),body2=stringPercentDecode(encodedBody);if(/;\u0020*[Bb][Aa][Ss][Ee]64$/u.test(mimeType)){let stringBody=isomorphicDecode(body2);if(body2=forgivingBase64(stringBody),body2==="failure")return"failure";mimeType=mimeType.slice(0,-6),mimeType=mimeType.replace(/(\u0020+)$/u,""),mimeType=mimeType.slice(0,-1)}mimeType.startsWith(";")&&(mimeType="text/plain"+mimeType);let mimeTypeRecord=parseMIMEType(mimeType);return mimeTypeRecord==="failure"&&(mimeTypeRecord=parseMIMEType("text/plain;charset=US-ASCII")),{mimeType:mimeTypeRecord,body:body2}}function URLSerializer(url,excludeFragment=!1){if(!excludeFragment)return url.href;let href=url.href,hashLength=url.hash.length,serialized=hashLength===0?href:href.substring(0,href.length-hashLength);return!hashLength&&href.endsWith("#")?serialized.slice(0,-1):serialized}function stringPercentDecode(input2){let bytes2=encoder2.encode(input2);return percentDecode(bytes2)}function isHexCharByte(byte){return byte>=48&&byte<=57||byte>=65&&byte<=70||byte>=97&&byte<=102}function hexByteToNumber(byte){return byte>=48&&byte<=57?byte-48:(byte&223)-55}function percentDecode(input2){let length=input2.length,output=new Uint8Array(length),j=0,i=0;for(;i<length;){let byte=input2[i];byte!==37?output[j++]=byte:byte===37&&!(isHexCharByte(input2[i+1])&&isHexCharByte(input2[i+2]))?output[j++]=37:(output[j++]=hexByteToNumber(input2[i+1])<<4|hexByteToNumber(input2[i+2]),i+=2),++i}return length===j?output:output.subarray(0,j)}function parseMIMEType(input2){input2=removeHTTPWhitespace(input2,!0,!0);let position={position:0},type=collectASequenceOfCodePointsFast("/",input2,position);if(type.length===0||!HTTP_TOKEN_CODEPOINTS.test(type)||position.position>=input2.length)return"failure";position.position++;let subtype=collectASequenceOfCodePointsFast(";",input2,position);if(subtype=removeHTTPWhitespace(subtype,!1,!0),subtype.length===0||!HTTP_TOKEN_CODEPOINTS.test(subtype))return"failure";let typeLowercase=asciiLowercase(type),subtypeLowercase=asciiLowercase(subtype),mimeType={type:typeLowercase,subtype:subtypeLowercase,parameters:new Map,essence:`${typeLowercase}/${subtypeLowercase}`};for(;position.position<input2.length;){position.position++,collectASequenceOfCodePoints(char=>HTTP_WHITESPACE_REGEX.test(char),input2,position);let parameterName=collectASequenceOfCodePoints(char=>char!==";"&&char!=="=",input2,position);if(parameterName=asciiLowercase(parameterName),position.position<input2.length){if(input2[position.position]===";")continue;position.position++}if(position.position>=input2.length)break;let parameterValue=null;if(input2[position.position]==='"')parameterValue=collectAnHTTPQuotedString(input2,position,!0),collectASequenceOfCodePointsFast(";",input2,position);else if(parameterValue=collectASequenceOfCodePointsFast(";",input2,position),parameterValue=removeHTTPWhitespace(parameterValue,!1,!0),parameterValue.length===0)continue;parameterName.length!==0&&HTTP_TOKEN_CODEPOINTS.test(parameterName)&&(parameterValue.length===0||HTTP_QUOTED_STRING_TOKENS.test(parameterValue))&&!mimeType.parameters.has(parameterName)&&mimeType.parameters.set(parameterName,parameterValue)}return mimeType}function collectAnHTTPQuotedString(input2,position,extractValue=!1){let positionStart=position.position,value="";for(assert(input2[position.position]==='"'),position.position++;value+=collectASequenceOfCodePoints(char=>char!=='"'&&char!=="\\",input2,position),!(position.position>=input2.length);){let quoteOrBackslash=input2[position.position];if(position.position++,quoteOrBackslash==="\\"){if(position.position>=input2.length){value+="\\";break}value+=input2[position.position],position.position++}else{assert(quoteOrBackslash==='"');break}}return extractValue?value:input2.slice(positionStart,position.position)}function serializeAMimeType(mimeType){assert(mimeType!=="failure");let{parameters,essence}=mimeType,serialization=essence;for(let[name,value]of parameters.entries())serialization+=";",serialization+=name,serialization+="=",HTTP_TOKEN_CODEPOINTS.test(value)||(value=value.replace(/[\\"]/ug,"\\$&"),value='"'+value,value+='"'),serialization+=value;return serialization}function isHTTPWhiteSpace(char){return char===13||char===10||char===9||char===32}function removeHTTPWhitespace(str3,leading=!0,trailing=!0){return removeChars(str3,leading,trailing,isHTTPWhiteSpace)}function minimizeSupportedMimeType(mimeType){switch(mimeType.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return mimeType.subtype.endsWith("+json")?"application/json":mimeType.subtype.endsWith("+xml")?"application/xml":""}module.exports={dataURLProcessor,URLSerializer,stringPercentDecode,parseMIMEType,collectAnHTTPQuotedString,serializeAMimeType,removeHTTPWhitespace,minimizeSupportedMimeType,HTTP_TOKEN_CODEPOINTS}}});var require_webidl=__commonJS({"node_modules/undici/lib/web/webidl/index.js"(exports,module){"use strict";var assert=__require("node:assert"),{types,inspect}=__require("node:util"),{markAsUncloneable}=__require("node:worker_threads"),UNDEFINED=1,BOOLEAN=2,STRING=3,SYMBOL=4,NUMBER=5,BIGINT=6,NULL=7,OBJECT=8,FunctionPrototypeSymbolHasInstance=Function.call.bind(Function.prototype[Symbol.hasInstance]),webidl={converters:{},util:{},errors:{},is:{}};webidl.errors.exception=function(message){return new TypeError(`${message.header}: ${message.message}`)};webidl.errors.conversionFailed=function(opts){let plural3=opts.types.length===1?"":" one of",message=`${opts.argument} could not be converted to${plural3}: ${opts.types.join(", ")}.`;return webidl.errors.exception({header:opts.prefix,message})};webidl.errors.invalidArgument=function(context){return webidl.errors.exception({header:context.prefix,message:`"${context.value}" is an invalid ${context.type}.`})};webidl.brandCheck=function(V,is){if(!is(V)){let err=new TypeError("Illegal invocation");throw err.code="ERR_INVALID_THIS",err}};webidl.argumentLengthCheck=function({length},min,ctx){if(length<min)throw webidl.errors.exception({message:`${min} argument${min!==1?"s":""} required, but${length?" only":""} ${length} found.`,header:ctx})};webidl.illegalConstructor=function(){throw webidl.errors.exception({header:"TypeError",message:"Illegal constructor"})};webidl.util.MakeTypeAssertion=function(I){return O=>FunctionPrototypeSymbolHasInstance(I,O)};webidl.util.Type=function(V){switch(typeof V){case"undefined":return UNDEFINED;case"boolean":return BOOLEAN;case"string":return STRING;case"symbol":return SYMBOL;case"number":return NUMBER;case"bigint":return BIGINT;case"function":case"object":return V===null?NULL:OBJECT}};webidl.util.Types={UNDEFINED,BOOLEAN,STRING,SYMBOL,NUMBER,BIGINT,NULL,OBJECT};webidl.util.TypeValueToString=function(o){switch(webidl.util.Type(o)){case UNDEFINED:return"Undefined";case BOOLEAN:return"Boolean";case STRING:return"String";case SYMBOL:return"Symbol";case NUMBER:return"Number";case BIGINT:return"BigInt";case NULL:return"Null";case OBJECT:return"Object"}};webidl.util.markAsUncloneable=markAsUncloneable;webidl.util.ConvertToInt=function(V,bitLength,signedness,flags){let upperBound,lowerBound;bitLength===64?(upperBound=Math.pow(2,53)-1,signedness==="unsigned"?lowerBound=0:lowerBound=Math.pow(-2,53)+1):signedness==="unsigned"?(lowerBound=0,upperBound=Math.pow(2,bitLength)-1):(lowerBound=-Math.pow(2,bitLength-1),upperBound=Math.pow(2,bitLength-1)-1);let x=Number(V);if(x===0&&(x=0),webidl.util.HasFlag(flags,webidl.attributes.EnforceRange)){if(Number.isNaN(x)||x===Number.POSITIVE_INFINITY||x===Number.NEGATIVE_INFINITY)throw webidl.errors.exception({header:"Integer conversion",message:`Could not convert ${webidl.util.Stringify(V)} to an integer.`});if(x=webidl.util.IntegerPart(x),x<lowerBound||x>upperBound)throw webidl.errors.exception({header:"Integer conversion",message:`Value must be between ${lowerBound}-${upperBound}, got ${x}.`});return x}return!Number.isNaN(x)&&webidl.util.HasFlag(flags,webidl.attributes.Clamp)?(x=Math.min(Math.max(x,lowerBound),upperBound),Math.floor(x)%2===0?x=Math.floor(x):x=Math.ceil(x),x):Number.isNaN(x)||x===0&&Object.is(0,x)||x===Number.POSITIVE_INFINITY||x===Number.NEGATIVE_INFINITY?0:(x=webidl.util.IntegerPart(x),x=x%Math.pow(2,bitLength),signedness==="signed"&&x>=Math.pow(2,bitLength-1)?x-Math.pow(2,bitLength):x)};webidl.util.IntegerPart=function(n){let r=Math.floor(Math.abs(n));return n<0?-1*r:r};webidl.util.Stringify=function(V){switch(webidl.util.Type(V)){case SYMBOL:return`Symbol(${V.description})`;case OBJECT:return inspect(V);case STRING:return`"${V}"`;case BIGINT:return`${V}n`;default:return`${V}`}};webidl.util.IsResizableArrayBuffer=function(V){if(types.isArrayBuffer(V))return V.resizable;if(types.isSharedArrayBuffer(V))return V.growable;throw webidl.errors.exception({header:"IsResizableArrayBuffer",message:`"${webidl.util.Stringify(V)}" is not an array buffer.`})};webidl.util.HasFlag=function(flags,attributes){return typeof flags=="number"&&(flags&attributes)===attributes};webidl.sequenceConverter=function(converter){return(V,prefix,argument,Iterable)=>{if(webidl.util.Type(V)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`${argument} (${webidl.util.Stringify(V)}) is not iterable.`});let method=typeof Iterable=="function"?Iterable():V?.[Symbol.iterator]?.(),seq=[],index3=0;if(method===void 0||typeof method.next!="function")throw webidl.errors.exception({header:prefix,message:`${argument} is not iterable.`});for(;;){let{done,value}=method.next();if(done)break;seq.push(converter(value,prefix,`${argument}[${index3++}]`))}return seq}};webidl.recordConverter=function(keyConverter,valueConverter){return(O,prefix,argument)=>{if(webidl.util.Type(O)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`${argument} ("${webidl.util.TypeValueToString(O)}") is not an Object.`});let result2={};if(!types.isProxy(O)){let keys2=[...Object.getOwnPropertyNames(O),...Object.getOwnPropertySymbols(O)];for(let key of keys2){let keyName=webidl.util.Stringify(key),typedKey=keyConverter(key,prefix,`Key ${keyName} in ${argument}`),typedValue=valueConverter(O[key],prefix,`${argument}[${keyName}]`);result2[typedKey]=typedValue}return result2}let keys=Reflect.ownKeys(O);for(let key of keys)if(Reflect.getOwnPropertyDescriptor(O,key)?.enumerable){let typedKey=keyConverter(key,prefix,argument),typedValue=valueConverter(O[key],prefix,argument);result2[typedKey]=typedValue}return result2}};webidl.interfaceConverter=function(TypeCheck,name){return(V,prefix,argument)=>{if(!TypeCheck(V))throw webidl.errors.exception({header:prefix,message:`Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${name}.`});return V}};webidl.dictionaryConverter=function(converters){return converters.sort((a,b)=>(a.key>b.key)-(a.key<b.key)),(dictionary,prefix,argument)=>{let dict={};if(dictionary!=null&&webidl.util.Type(dictionary)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`Expected ${dictionary} to be one of: Null, Undefined, Object.`});for(let options of converters){let{key,defaultValue,required,converter}=options;if(required===!0&&(dictionary==null||!Object.hasOwn(dictionary,key)))throw webidl.errors.exception({header:prefix,message:`Missing required key "${key}".`});let value=dictionary?.[key],hasDefault=defaultValue!==void 0;if(hasDefault&&value===void 0&&(value=defaultValue()),required||hasDefault||value!==void 0){if(value=converter(value,prefix,`${argument}.${key}`),options.allowedValues&&!options.allowedValues.includes(value))throw webidl.errors.exception({header:prefix,message:`${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`});dict[key]=value}}return dict}};webidl.nullableConverter=function(converter){return(V,prefix,argument)=>V===null?V:converter(V,prefix,argument)};webidl.is.USVString=function(value){return typeof value=="string"&&value.isWellFormed()};webidl.is.ReadableStream=webidl.util.MakeTypeAssertion(ReadableStream);webidl.is.Blob=webidl.util.MakeTypeAssertion(Blob);webidl.is.URLSearchParams=webidl.util.MakeTypeAssertion(URLSearchParams);webidl.is.File=webidl.util.MakeTypeAssertion(File);webidl.is.URL=webidl.util.MakeTypeAssertion(URL);webidl.is.AbortSignal=webidl.util.MakeTypeAssertion(AbortSignal);webidl.is.MessagePort=webidl.util.MakeTypeAssertion(MessagePort);webidl.is.BufferSource=function(V){return types.isArrayBuffer(V)||ArrayBuffer.isView(V)&&types.isArrayBuffer(V.buffer)};webidl.util.getCopyOfBytesHeldByBufferSource=function(bufferSource){let jsBufferSource=bufferSource,jsArrayBuffer=jsBufferSource,offset=0,length=0;if(types.isTypedArray(jsBufferSource)||types.isDataView(jsBufferSource)?(jsArrayBuffer=jsBufferSource.buffer,offset=jsBufferSource.byteOffset,length=jsBufferSource.byteLength):(assert(types.isAnyArrayBuffer(jsBufferSource)),length=jsBufferSource.byteLength),jsArrayBuffer.detached)return new Uint8Array(0);let bytes2=new Uint8Array(length),view=new Uint8Array(jsArrayBuffer,offset,length);return bytes2.set(view),bytes2};webidl.converters.DOMString=function(V,prefix,argument,flags){if(V===null&&webidl.util.HasFlag(flags,webidl.attributes.LegacyNullToEmptyString))return"";if(typeof V=="symbol")throw webidl.errors.exception({header:prefix,message:`${argument} is a symbol, which cannot be converted to a DOMString.`});return String(V)};webidl.converters.ByteString=function(V,prefix,argument){if(typeof V=="symbol")throw webidl.errors.exception({header:prefix,message:`${argument} is a symbol, which cannot be converted to a ByteString.`});let x=String(V);for(let index3=0;index3<x.length;index3++)if(x.charCodeAt(index3)>255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${index3} has a value of ${x.charCodeAt(index3)} which is greater than 255.`);return x};webidl.converters.USVString=function(value){return typeof value=="string"?value.toWellFormed():`${value}`.toWellFormed()};webidl.converters.boolean=function(V){return!!V};webidl.converters.any=function(V){return V};webidl.converters["long long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,64,"signed",0,prefix,argument)};webidl.converters["unsigned long long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,64,"unsigned",0,prefix,argument)};webidl.converters["unsigned long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,32,"unsigned",0,prefix,argument)};webidl.converters["unsigned short"]=function(V,prefix,argument,flags){return webidl.util.ConvertToInt(V,16,"unsigned",flags,prefix,argument)};webidl.converters.ArrayBuffer=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isArrayBuffer(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a resizable ArrayBuffer.`});return V};webidl.converters.SharedArrayBuffer=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isSharedArrayBuffer(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["SharedArrayBuffer"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a resizable SharedArrayBuffer.`});return V};webidl.converters.TypedArray=function(V,T,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isTypedArray(V)||V.constructor.name!==T.name)throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:[T.name]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.DataView=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isDataView(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["DataView"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.ArrayBufferView=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isArrayBufferView(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBufferView"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.BufferSource=function(V,prefix,argument,flags){if(types.isArrayBuffer(V))return webidl.converters.ArrayBuffer(V,prefix,argument,flags);if(types.isArrayBufferView(V))return flags&=~webidl.attributes.AllowShared,webidl.converters.ArrayBufferView(V,prefix,argument,flags);throw types.isSharedArrayBuffer(V)?webidl.errors.exception({header:prefix,message:`${argument} cannot be a SharedArrayBuffer.`}):webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer","ArrayBufferView"]})};webidl.converters.AllowSharedBufferSource=function(V,prefix,argument,flags){if(types.isArrayBuffer(V))return webidl.converters.ArrayBuffer(V,prefix,argument,flags);if(types.isSharedArrayBuffer(V))return webidl.converters.SharedArrayBuffer(V,prefix,argument,flags);if(types.isArrayBufferView(V))return flags|=webidl.attributes.AllowShared,webidl.converters.ArrayBufferView(V,prefix,argument,flags);throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer","SharedArrayBuffer","ArrayBufferView"]})};webidl.converters["sequence<ByteString>"]=webidl.sequenceConverter(webidl.converters.ByteString);webidl.converters["sequence<sequence<ByteString>>"]=webidl.sequenceConverter(webidl.converters["sequence<ByteString>"]);webidl.converters["record<ByteString, ByteString>"]=webidl.recordConverter(webidl.converters.ByteString,webidl.converters.ByteString);webidl.converters.Blob=webidl.interfaceConverter(webidl.is.Blob,"Blob");webidl.converters.AbortSignal=webidl.interfaceConverter(webidl.is.AbortSignal,"AbortSignal");webidl.converters.EventHandlerNonNull=function(V){return webidl.util.Type(V)!==OBJECT?null:typeof V=="function"?V:()=>{}};webidl.attributes={Clamp:1,EnforceRange:2,AllowShared:4,AllowResizable:8,LegacyNullToEmptyString:16};module.exports={webidl}}});var require_util2=__commonJS({"node_modules/undici/lib/web/fetch/util.js"(exports,module){"use strict";var{Transform}=__require("node:stream"),zlib=__require("node:zlib"),{redirectStatusSet,referrerPolicyTokens,badPortsSet}=require_constants2(),{getGlobalOrigin}=require_global(),{collectAnHTTPQuotedString,parseMIMEType}=require_data_url(),{performance:performance2}=__require("node:perf_hooks"),{isValidHTTPToken,normalizedMethodRecordsBase}=require_util(),assert=__require("node:assert"),{isUint8Array}=__require("node:util/types"),{webidl}=require_webidl(),{isomorphicEncode,collectASequenceOfCodePoints,removeChars}=require_infra();function responseURL(response){let urlList=response.urlList,length=urlList.length;return length===0?null:urlList[length-1].toString()}function responseLocationURL(response,requestFragment){if(!redirectStatusSet.has(response.status))return null;let location=response.headersList.get("location",!0);return location!==null&&isValidHeaderValue(location)&&(isValidEncodedURL(location)||(location=normalizeBinaryStringToUtf8(location)),location=new URL(location,responseURL(response))),location&&!location.hash&&(location.hash=requestFragment),location}function isValidEncodedURL(url){for(let i=0;i<url.length;++i){let code=url.charCodeAt(i);if(code>126||code<32)return!1}return!0}function normalizeBinaryStringToUtf8(value){return Buffer.from(value,"binary").toString("utf8")}function requestCurrentURL(request){return request.urlList[request.urlList.length-1]}function requestBadPort(request){let url=requestCurrentURL(request);return urlIsHttpHttpsScheme(url)&&badPortsSet.has(url.port)?"blocked":"allowed"}function isErrorLike(object){return object instanceof Error||object?.constructor?.name==="Error"||object?.constructor?.name==="DOMException"}function isValidReasonPhrase(statusText){for(let i=0;i<statusText.length;++i){let c=statusText.charCodeAt(i);if(!(c===9||c>=32&&c<=126||c>=128&&c<=255))return!1}return!0}var isValidHeaderName=isValidHTTPToken;function isValidHeaderValue(potentialValue){return(potentialValue[0]===" "||potentialValue[0]===" "||potentialValue[potentialValue.length-1]===" "||potentialValue[potentialValue.length-1]===" "||potentialValue.includes(`
2
+ import{ProjectTrustStore,addMcpServerConfig,getProjectTrustOptions,hasTrustRequiringProjectResources,loadMcpConfig,openBrowser,updateMcpServerConfig}from"./chunk-FPALVF3F.js";import{AuthStorage,FileAuthStorageBackend,LIST_MCP_RESOURCES_TOOL,LIST_MCP_RESOURCE_TEMPLATES_TOOL,McpError,McpServerRegistry,READ_MCP_RESOURCE_TOOL,ReadOnlyAuthStorage,createToolNameMatcher,getConfigValueEnvVarNames,getMcpToolExposure,isCommandConfigValue,isConfigValueConfigured,isJsonRpcResponse,isMcpToolName,mcpNamespace,operationSignal,parseJsonRpcMessage,raceWithAbortSignal,require_proper_lockfile,resolveConfigValueOrThrow,resolveHeadersOrThrow,toLlmContent,validateMcpServerConfig}from"./chunk-KBFO53OG.js";import{ArrayOptions,Box,CODEMODE_TOOL_NAME,CURSOR_MARKER,CancellableLoader,Clone,CodeHighlighter,CombinedAutocompleteProvider,Container,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,Editor,Evaluate,FS_WATCH_RETRY_DELAY_MS,Flatten,Get,Image,Input,Instantiate,Intersect,IsArray,IsBigInt,IsBoolean,IsCodec,IsConstructor,IsCyclic,IsEnum,IsFunction,IsInteger,IsIntersect,IsLiteral,IsLiteralBigInt,IsLiteralBoolean,IsLiteralNumber,IsLiteralString,IsNever,IsNull,IsNumber,IsObject,IsOptional,IsRecord,IsRef,IsRefine,IsSchema,IsString,IsSymbol,IsTemplateLiteral,IsTuple,IsUndefined,IsUnion,IsVoid,Key,KeybindingsManager,Literal,Loader,Markdown,MouseRegion,Priority,ProcessTerminal,Record,RecordKey,RecordPattern,RecordValue,Ref,SETTINGS_DEFAULTS,SYSTEM_THEME_NAME,ScrollView,SelectList,SettingsList,Spacer,String as String2,TASKS_TOOL_NAME,TASK_BACKGROUND_REJECTION,TASK_DETAILS_BYTES,TASK_ERROR_BYTES,TASK_FACT_BYTES,TASK_KIND_PATTERN,TASK_LABEL_BYTES,TASK_MANAGEMENT_REJECTION,TASK_PATH_BYTES,TASK_READ_BYTES,TASK_RECORD_TYPE,TASK_RESULT_BYTES,TASK_SNAPSHOT_VERSION,TASK_TITLE_BYTES,THEME_TOKENS,TOOL_SEARCH_TOOL_NAME,TUI_KEYBINDINGS,TaskLookupError,TemplateLiteralDecode,Text,Theme,TruncatedText,TuiAltScreen,TuiMainScreen,Tuple,Union,Unknown,Unreachable,VStack,VisualLinePreview,With,Z,_Array_,_Object_,addUsageToTotals,arguments_exports,arr,backgroundAnsi,bool,boundFacts,boundInput,boundReadBytes,boundTail,boundTaskDisplay,boundTaskText,boundText,closeWatcher,colorToRgb,combineUsage,createCodemodeToolDefinition,createFauxCore,createOutputFilePath,createOutputFileStream,createToolDefinitionFromAgentTool,createToolSearchToolDefinition,createUsageTotals,decodeKittyPrintable,detectCapabilities,emit_exports,envApiKeyAuth,environment_exports,errorText,fauxAssistantMessage,fauxProvider,fauxText,fauxThinking,fauxToolCall,finiteLimit,foregroundAnsi,formatKeyText,formatReadLineRange,formatSize,formatToolCallWithArgs,fuzzyFilter,fuzzyMatch,getAccountedUsages,getAvailableThemes,getAvailableThemesWithPaths,getCapabilities,getEditorTheme,getKeybindings,getLanguageFromPath,getMarkdownTheme,getNativeClipboard,getOverflowPatterns,getResolvedThemeColors,getSelectListTheme,getSelectPageIndex,getSettingsListTheme,getTerminalColorMode,getTerminalTheme,getTextOutput,getThemeByName,getThemeExportColors,getUsageCostBreakdown,globals_exports,guard_default,guard_exports,hash_exports,highlightCode,hyperlink,indexedColor,initTheme,int,invalidArgText,isAppleTerminalSession,isContextOverflow,isFocusable,isRecoverableLength,isRetryableAssistantError,isTaskTerminal,isViewportTUI,keyDisplayText,keyHint,keyLabel,keyText,lazyOAuth,loadAllHighlightLanguages,loadThemeFromPath,markTerminalColorsPending,matchesKey,mixColors,normalizeDisplayText,nul,num,obj,onThemeChange,oneOf,opt,parseAutoThemeSetting,parseColor,rawKeyHint,readOutputSlice,readTaskUsage,readVersionedTask,renderToolPath,replaceControlCharacters,replaceTabs,resolveThemeSetting,resultText,retryAssistantCall,retryDelayMs,rgbColor,setCapabilityOverrides,setImageTranscoder,setKeybindings,setRegisteredThemes,setTerminalColorScheme,setTerminalColors,setTheme,setThemeInstance,setThemeJsonValidator,settings_exports,shortenPath,sliceByColumn,sliceText,splitIncompleteAnsiSuffix,startToolTimer,stopThemeWatcher,str,str2,stripAnsi,stripTerminalSequences,taskReadBytes,taskReadRange,theme,toolTimerText,truncateHead,truncateLine,truncateMiddle,truncateTail,truncateToVisualLines,truncateToWidth,typebox_exports,union,validateToolArguments,validateToolCall,visibleWidth,watchWithErrorHandler,wrapTextWithAnsi,wrapToolDefinition,writeOutputFile}from"./chunk-HLVMLRZJ.js";import{source_default}from"./chunk-6QGV3IWD.js";import{APP_NAME,APP_TITLE,CONFIG_DIR_NAME,DISTRIBUTION_PACKAGE_NAME,ENV_AGENT_DIR,ENV_SESSION_DIR,INSTALL_TELEMETRY_URL,PACKAGE_NAME,UPDATE_CHANGELOG_HINT,VERSION,canonicalizePath,detectInstallChange,detectInstallMethod,expandTildePath,formatPathRelativeToCwdOrAbsolute,getAgentDir,getAuthPath,getBinDir,getBundledInteractiveAssetPath,getChangelogPath,getConfiguredSelfUpdateArgv,getCwdRelativePath,getDebugLogPath,getDocsPath,getExamplesPath,getExportTemplateDir,getFileRevision,getPackageDir,getPathComparisonKey,getPowerShellConfig,getReadmePath,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,getSessionsDir,getSettingsPath,getShareViewerUrl,getShellConfig,getShellEnv,isBunBinary,isBundledNode,isLocalPath,isPathWithin,killProcessTree,killTrackedDetachedChildren,makeConfiguredSelfUpdateCommand,markPathIgnoredByCloudSync,normalizePath,normalizeWindowsShellPath,pathsEqual,require_cross_spawn,resolvePath,sanitizeBinaryOutput,shortenHomePath,spawnProcess,spawnProcessSync,splitBom,stripBom,trackDetachedChildPid,untrackDetachedChildPid,waitForChildProcess}from"./chunk-PSYLMRL6.js";import{cleanupSessionResources,registerSessionResourceCleanup,uuidv7}from"./chunk-JEIV47WR.js";import{ANTHROPIC_API_KEY_ENV,ANTHROPIC_AUTH_TOKEN_ENV,ANTHROPIC_FEDERATION_RULE_ID_ENV,ANTHROPIC_IDENTITY_TOKEN_FILE_ENV,ANTHROPIC_OAUTH_TOKEN_ENV,ANTHROPIC_ORGANIZATION_ID_ENV,ANTHROPIC_SERVICE_ACCOUNT_ID_ENV,ANTHROPIC_WORKSPACE_ID_ENV,findEnvKeys,getEnvApiKey}from"./chunk-D3ZCGC4T.js";import{resolveAzureBaseUrl,resolveDeploymentName}from"./chunk-RZ2V53SP.js";import{getProviderEnvValue}from"./chunk-5FDOJRDS.js";import{StreamingJsonParser,ToolCallArgumentsStream,parseJsonWithRepair,parseStreamingJson,parseToolCallArguments,repairJson}from"./chunk-IC6JXX2J.js";import{estimateContextTokens}from"./chunk-SR6EWNPW.js";import{AI_TELEMETRY_SCHEMA,InMemoryCredentialStore,InMemoryModelsStore,ModelsError,assertChatModel,assertClassifierInputSupported,assertClassifierModel,assertImageModel,calculateCost,clampThinkingLevel,classifierErrorResult,collapseSystemMessages,createInitialSystemMessage,createModels,createProvider,declarationsEqual,defaultProviderAuthContext,getCurrentSystemMessage,getCurrentSystemPrompt,getCurrentTools,getDeclaredTools,getInitialSystemMessage,getModelType,getSupportedThinkingLevels,getToolStateChanges,hasApi,hasNonAdditiveToolChanges,hasToolRedefinitions,imageErrorResult,isModelType,lazyApi,lazyStream,modelsAreEqual,normalizeContext,resolveTranscript,resolveTranscriptTools,toToolDeclaration,withoutInitialSystemMessage}from"./chunk-RAIYJ5FC.js";import{AssistantMessageEventStream,EventStream,appendAssistantMessageDiagnostic,createAssistantMessageDiagnostic,createAssistantMessageEventStream,extractDiagnosticError,formatThrownValue}from"./chunk-6VYRLG5F.js";import{PI_AI_VERSION,PI_ATTRIBUTION,contentText,formatUserAgent,getAttributionHeaders,getClientVersion,getIdentityHeaders,getOpenCodeSessionHeaders,getSystemMessageText,mergeClientIdentity,ownedSlice,renderSystemMessageUpdate,withClientIdentity}from"./chunk-H3UF54OB.js";import{__commonJS,__export,__require,__toESM}from"./chunk-4L3WN2XY.js";var require_symbols=__commonJS({"node_modules/undici/lib/core/symbols.js"(exports,module){"use strict";module.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kRequestOrigin:Symbol("request origin"),kRedirectCacheControl:Symbol("redirect cache control"),kOriginless:Symbol("originless"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kBody:Symbol("abstracted request body"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kResume:Symbol("resume"),kOnError:Symbol("on error"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2Options:Symbol("http2 options"),kHTTP2SessionState:Symbol("http2Session state"),kRetryHandlerDefaultRetry:Symbol("retry agent default retry"),kConstruct:Symbol("constructable"),kListeners:Symbol("listeners"),kHTTPContext:Symbol("http context"),kMaxConcurrentStreams:Symbol("max concurrent streams"),kHostAuthority:Symbol("host authority"),kHTTP2InitialWindowSize:Symbol("http2 initial window size"),kHTTP2ConnectionWindowSize:Symbol("http2 connection window size"),kEnableConnectProtocol:Symbol("http2session connect protocol"),kRemoteSettings:Symbol("http2session remote settings"),kHTTP2Stream:Symbol("http2session client stream"),kPingInterval:Symbol("ping interval"),kUseMilo:Symbol("use milo"),kNoProxyAgent:Symbol("no proxy agent"),kHttpProxyAgent:Symbol("http proxy agent"),kHttpsProxyAgent:Symbol("https proxy agent"),kSocks5ProxyAgent:Symbol("socks5 proxy agent")}}});var require_timers=__commonJS({"node_modules/undici/lib/util/timers.js"(exports,module){"use strict";var fastNow=0,RESOLUTION_MS=1e3,TICK_MS=(RESOLUTION_MS>>1)-1,fastNowTimeout,kFastTimer=Symbol("kFastTimer"),fastTimers=[],NOT_IN_LIST=-2,TO_BE_CLEARED=-1,PENDING2=0,ACTIVE=1;function onTick(){fastNow+=TICK_MS;let idx=0,len=fastTimers.length;for(;idx<len;){let timer=fastTimers[idx];timer._state===PENDING2?(timer._idleStart=fastNow-TICK_MS,timer._state=ACTIVE):timer._state===ACTIVE&&fastNow>=timer._idleStart+timer._idleTimeout&&(timer._state=TO_BE_CLEARED,timer._idleStart=-1,timer._onTimeout(timer._timerArg)),timer._state===TO_BE_CLEARED?(timer._state=NOT_IN_LIST,--len!==0&&(fastTimers[idx]=fastTimers[len])):++idx}fastTimers.length=len,fastTimers.length!==0&&refreshTimeout()}function refreshTimeout(){fastNowTimeout?.refresh?fastNowTimeout.refresh():(clearTimeout(fastNowTimeout),fastNowTimeout=setTimeout(onTick,TICK_MS),fastNowTimeout?.unref())}var FastTimer=class{[kFastTimer]=!0;_state=NOT_IN_LIST;_idleTimeout=-1;_idleStart=-1;_onTimeout;_timerArg;constructor(callback,delay,arg){this._onTimeout=callback,this._idleTimeout=delay,this._timerArg=arg,this.refresh()}refresh(){this._state===NOT_IN_LIST&&fastTimers.push(this),(!fastNowTimeout||fastTimers.length===1)&&refreshTimeout(),this._state=PENDING2}clear(){this._state=TO_BE_CLEARED,this._idleStart=-1}};module.exports={setTimeout(callback,delay,arg){return delay<=RESOLUTION_MS?setTimeout(callback,delay,arg):new FastTimer(callback,delay,arg)},clearTimeout(timeout){timeout[kFastTimer]?timeout.clear():clearTimeout(timeout)},setFastTimeout(callback,delay,arg){return new FastTimer(callback,delay,arg)},clearFastTimeout(timeout){timeout.clear()},now(){return fastNow},tick(delay=0){fastNow+=delay-RESOLUTION_MS+1,onTick(),onTick()},reset(){fastNow=0,fastTimers.length=0,clearTimeout(fastNowTimeout),fastNowTimeout=null},kFastTimer}}});var require_errors=__commonJS({"node_modules/undici/lib/core/errors.js"(exports,module){"use strict";var kUndiciError=Symbol.for("undici.error.UND_ERR"),UndiciError=class extends Error{constructor(message,options){super(message,options),this.name="UndiciError",this.code="UND_ERR"}static[Symbol.hasInstance](instance){return instance&&instance[kUndiciError]===!0}get[kUndiciError](){return!0}},kConnectTimeoutError=Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"),ConnectTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="ConnectTimeoutError",this.message=message||"Connect Timeout Error",this.code="UND_ERR_CONNECT_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kConnectTimeoutError]===!0}get[kConnectTimeoutError](){return!0}},kHeadersTimeoutError=Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"),HeadersTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="HeadersTimeoutError",this.message=message||"Headers Timeout Error",this.code="UND_ERR_HEADERS_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kHeadersTimeoutError]===!0}get[kHeadersTimeoutError](){return!0}},kHeadersOverflowError=Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"),HeadersOverflowError=class extends UndiciError{constructor(message){super(message),this.name="HeadersOverflowError",this.message=message||"Headers Overflow Error",this.code="UND_ERR_HEADERS_OVERFLOW"}static[Symbol.hasInstance](instance){return instance&&instance[kHeadersOverflowError]===!0}get[kHeadersOverflowError](){return!0}},kBodyTimeoutError=Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"),BodyTimeoutError=class extends UndiciError{constructor(message){super(message),this.name="BodyTimeoutError",this.message=message||"Body Timeout Error",this.code="UND_ERR_BODY_TIMEOUT"}static[Symbol.hasInstance](instance){return instance&&instance[kBodyTimeoutError]===!0}get[kBodyTimeoutError](){return!0}},kInvalidArgumentError=Symbol.for("undici.error.UND_ERR_INVALID_ARG"),InvalidArgumentError=class extends UndiciError{constructor(message){super(message),this.name="InvalidArgumentError",this.message=message||"Invalid Argument Error",this.code="UND_ERR_INVALID_ARG"}static[Symbol.hasInstance](instance){return instance&&instance[kInvalidArgumentError]===!0}get[kInvalidArgumentError](){return!0}},kInvalidReturnValueError=Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"),InvalidReturnValueError=class extends UndiciError{constructor(message){super(message),this.name="InvalidReturnValueError",this.message=message||"Invalid Return Value Error",this.code="UND_ERR_INVALID_RETURN_VALUE"}static[Symbol.hasInstance](instance){return instance&&instance[kInvalidReturnValueError]===!0}get[kInvalidReturnValueError](){return!0}},kAbortError=Symbol.for("undici.error.UND_ERR_ABORT"),AbortError=class extends UndiciError{constructor(message){super(message),this.name="AbortError",this.message=message||"The operation was aborted",this.code="UND_ERR_ABORT"}static[Symbol.hasInstance](instance){return instance&&instance[kAbortError]===!0}get[kAbortError](){return!0}},kRequestAbortedError=Symbol.for("undici.error.UND_ERR_ABORTED"),RequestAbortedError=class extends AbortError{constructor(message){super(message),this.name="AbortError",this.message=message||"Request aborted",this.code="UND_ERR_ABORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kRequestAbortedError]===!0}get[kRequestAbortedError](){return!0}},kInformationalError=Symbol.for("undici.error.UND_ERR_INFO"),InformationalError=class extends UndiciError{constructor(message,options){super(message,options),this.name="InformationalError",this.message=message||"Request information",this.code="UND_ERR_INFO"}static[Symbol.hasInstance](instance){return instance&&instance[kInformationalError]===!0}get[kInformationalError](){return!0}},kRequestContentLengthMismatchError=Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"),RequestContentLengthMismatchError=class extends UndiciError{constructor(message){super(message),this.name="RequestContentLengthMismatchError",this.message=message||"Request body length does not match content-length header",this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](instance){return instance&&instance[kRequestContentLengthMismatchError]===!0}get[kRequestContentLengthMismatchError](){return!0}},kResponseContentLengthMismatchError=Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"),ResponseContentLengthMismatchError=class extends UndiciError{constructor(message){super(message),this.name="ResponseContentLengthMismatchError",this.message=message||"Response body length does not match content-length header",this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}static[Symbol.hasInstance](instance){return instance&&instance[kResponseContentLengthMismatchError]===!0}get[kResponseContentLengthMismatchError](){return!0}},kClientDestroyedError=Symbol.for("undici.error.UND_ERR_DESTROYED"),ClientDestroyedError=class extends UndiciError{constructor(message){super(message),this.name="ClientDestroyedError",this.message=message||"The client is destroyed",this.code="UND_ERR_DESTROYED"}static[Symbol.hasInstance](instance){return instance&&instance[kClientDestroyedError]===!0}get[kClientDestroyedError](){return!0}},kClientClosedError=Symbol.for("undici.error.UND_ERR_CLOSED"),ClientClosedError=class extends UndiciError{constructor(message){super(message),this.name="ClientClosedError",this.message=message||"The client is closed",this.code="UND_ERR_CLOSED"}static[Symbol.hasInstance](instance){return instance&&instance[kClientClosedError]===!0}get[kClientClosedError](){return!0}},kSocketError=Symbol.for("undici.error.UND_ERR_SOCKET"),SocketError=class extends UndiciError{constructor(message,socket){super(message),this.name="SocketError",this.message=message||"Socket error",this.code="UND_ERR_SOCKET",this.socket=socket}static[Symbol.hasInstance](instance){return instance&&instance[kSocketError]===!0}get[kSocketError](){return!0}},kNotSupportedError=Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"),NotSupportedError=class extends UndiciError{constructor(message){super(message),this.name="NotSupportedError",this.message=message||"Not supported error",this.code="UND_ERR_NOT_SUPPORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kNotSupportedError]===!0}get[kNotSupportedError](){return!0}},kBalancedPoolMissingUpstreamError=Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"),BalancedPoolMissingUpstreamError=class extends UndiciError{constructor(message){super(message),this.name="MissingUpstreamError",this.message=message||"No upstream has been added to the BalancedPool",this.code="UND_ERR_BPL_MISSING_UPSTREAM"}static[Symbol.hasInstance](instance){return instance&&instance[kBalancedPoolMissingUpstreamError]===!0}get[kBalancedPoolMissingUpstreamError](){return!0}},kWebAssemblyNotSupportedError=Symbol.for("undici.error.ERR_WEBASSEMBLY_NOT_SUPPORTED"),WebAssemblyNotSupportedError=class extends Error{constructor(message){super(message||"WebAssembly is not supported in this environment, but is required for HTTP/1 parsing"),this.code="ERR_WEBASSEMBLY_NOT_SUPPORTED"}static[Symbol.hasInstance](instance){return instance&&instance[kWebAssemblyNotSupportedError]===!0}get[kWebAssemblyNotSupportedError](){return!0}},kHTTPParserError=Symbol.for("undici.error.UND_ERR_HTTP_PARSER"),HTTPParserError=class extends Error{constructor(message,code,data){super(message),this.name="HTTPParserError",this.code=code?`HPE_${code}`:void 0,this.data=data?data.toString():void 0}static[Symbol.hasInstance](instance){return instance&&instance[kHTTPParserError]===!0}get[kHTTPParserError](){return!0}},kResponseExceededMaxSizeError=Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"),ResponseExceededMaxSizeError=class extends UndiciError{constructor(message){super(message),this.name="ResponseExceededMaxSizeError",this.message=message||"Response content exceeded max size",this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}static[Symbol.hasInstance](instance){return instance&&instance[kResponseExceededMaxSizeError]===!0}get[kResponseExceededMaxSizeError](){return!0}},kRequestRetryError=Symbol.for("undici.error.UND_ERR_REQ_RETRY"),RequestRetryError=class extends UndiciError{constructor(message,code,{headers,data}){super(message),this.name="RequestRetryError",this.message=message||"Request retry error",this.code="UND_ERR_REQ_RETRY",this.statusCode=code,this.data=data,this.headers=headers}static[Symbol.hasInstance](instance){return instance&&instance[kRequestRetryError]===!0}get[kRequestRetryError](){return!0}},kResponseError=Symbol.for("undici.error.UND_ERR_RESPONSE"),ResponseError=class extends UndiciError{constructor(message,code,{headers,body:body2,bodyTruncated=!1}){super(message),this.name="ResponseError",this.message=message||"Response error",this.code="UND_ERR_RESPONSE",this.statusCode=code,this.body=body2,this.bodyTruncated=bodyTruncated,this.headers=headers}static[Symbol.hasInstance](instance){return instance&&instance[kResponseError]===!0}get[kResponseError](){return!0}},kSecureProxyConnectionError=Symbol.for("undici.error.UND_ERR_PRX_TLS"),SecureProxyConnectionError=class extends UndiciError{constructor(cause,message,options={}){super(message,{cause,...options}),this.name="SecureProxyConnectionError",this.message=message||"Secure Proxy Connection failed",this.code="UND_ERR_PRX_TLS",this.cause=cause}static[Symbol.hasInstance](instance){return instance&&instance[kSecureProxyConnectionError]===!0}get[kSecureProxyConnectionError](){return!0}},kProxyConnectionError=Symbol.for("undici.error.UND_ERR_PRX_CONN"),ProxyConnectionError=class extends UndiciError{constructor(cause,message,options={}){super(message,{cause,...options}),this.name="ProxyConnectionError",this.message=message||"Proxy Connection failed",this.code="UND_ERR_PRX_CONN",this.cause=cause}static[Symbol.hasInstance](instance){return instance&&instance[kProxyConnectionError]===!0}get[kProxyConnectionError](){return!0}},kMaxRedirectsError=Symbol.for("undici.error.UND_ERR_REDIRECT_MAX"),MaxRedirectsError=class extends UndiciError{constructor(message){super(message),this.name="MaxRedirectsError",this.message=message||"max redirects",this.code="UND_ERR_REDIRECT_MAX"}static[Symbol.hasInstance](instance){return instance&&instance[kMaxRedirectsError]===!0}get[kMaxRedirectsError](){return!0}},kMaxOriginsReachedError=Symbol.for("undici.error.UND_ERR_MAX_ORIGINS_REACHED"),MaxOriginsReachedError=class extends UndiciError{constructor(message){super(message),this.name="MaxOriginsReachedError",this.message=message||"Maximum allowed origins reached",this.code="UND_ERR_MAX_ORIGINS_REACHED"}static[Symbol.hasInstance](instance){return instance&&instance[kMaxOriginsReachedError]===!0}get[kMaxOriginsReachedError](){return!0}},Socks5ProxyError=class extends UndiciError{constructor(message,code){super(message),this.name="Socks5ProxyError",this.message=message||"SOCKS5 proxy error",this.code=code||"UND_ERR_SOCKS5"}},kMessageSizeExceededError=Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"),MessageSizeExceededError=class extends UndiciError{constructor(message){super(message),this.name="MessageSizeExceededError",this.message=message||"Max decompressed message size exceeded",this.code="UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"}static[Symbol.hasInstance](instance){return instance&&instance[kMessageSizeExceededError]===!0}get[kMessageSizeExceededError](){return!0}};module.exports={AbortError,WebAssemblyNotSupportedError,HTTPParserError,UndiciError,HeadersTimeoutError,HeadersOverflowError,BodyTimeoutError,RequestContentLengthMismatchError,ConnectTimeoutError,InvalidArgumentError,InvalidReturnValueError,RequestAbortedError,ClientDestroyedError,ClientClosedError,InformationalError,SocketError,NotSupportedError,ResponseContentLengthMismatchError,BalancedPoolMissingUpstreamError,ResponseExceededMaxSizeError,RequestRetryError,ResponseError,SecureProxyConnectionError,ProxyConnectionError,MaxOriginsReachedError,MaxRedirectsError,Socks5ProxyError,MessageSizeExceededError}}});var require_constants=__commonJS({"node_modules/undici/lib/core/constants.js"(exports,module){"use strict";var wellknownHeaderNames=["Accept","Accept-Encoding","Accept-Language","Accept-Ranges","Access-Control-Allow-Credentials","Access-Control-Allow-Headers","Access-Control-Allow-Methods","Access-Control-Allow-Origin","Access-Control-Expose-Headers","Access-Control-Max-Age","Access-Control-Request-Headers","Access-Control-Request-Method","Age","Allow","Alt-Svc","Alt-Used","Authorization","Cache-Control","Clear-Site-Data","Connection","Content-Disposition","Content-Encoding","Content-Language","Content-Length","Content-Location","Content-Range","Content-Security-Policy","Content-Security-Policy-Report-Only","Content-Type","Cookie","Cross-Origin-Embedder-Policy","Cross-Origin-Opener-Policy","Cross-Origin-Resource-Policy","Date","Device-Memory","Downlink","ECT","ETag","Expect","Expect-CT","Expires","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Keep-Alive","Last-Modified","Link","Location","Max-Forwards","Origin","Permissions-Policy","Pragma","Proxy-Authenticate","Proxy-Authorization","RTT","Range","Referer","Referrer-Policy","Refresh","Retry-After","Sec-WebSocket-Accept","Sec-WebSocket-Extensions","Sec-WebSocket-Key","Sec-WebSocket-Protocol","Sec-WebSocket-Version","Server","Server-Timing","Service-Worker-Allowed","Service-Worker-Navigation-Preload","Set-Cookie","SourceMap","Strict-Transport-Security","Supports-Loading-Mode","TE","Timing-Allow-Origin","Trailer","Transfer-Encoding","Upgrade","Upgrade-Insecure-Requests","User-Agent","Vary","Via","WWW-Authenticate","X-Content-Type-Options","X-DNS-Prefetch-Control","X-Frame-Options","X-Permitted-Cross-Domain-Policies","X-Powered-By","X-Requested-With","X-XSS-Protection"],headerNameLowerCasedRecord={};Object.setPrototypeOf(headerNameLowerCasedRecord,null);for(let i=0;i<wellknownHeaderNames.length;++i){let key=wellknownHeaderNames[i],lowerCasedKey=key.toLowerCase();headerNameLowerCasedRecord[key]=headerNameLowerCasedRecord[lowerCasedKey]=lowerCasedKey}var defaultWebSocketMaxFragments=131072,defaultWebSocketMaxPayloadSize=128*1024*1024;module.exports={wellknownHeaderNames,headerNameLowerCasedRecord,defaultWebSocketMaxFragments,defaultWebSocketMaxPayloadSize}}});var require_tree=__commonJS({"node_modules/undici/lib/core/tree.js"(exports,module){"use strict";var{wellknownHeaderNames,headerNameLowerCasedRecord}=require_constants(),TstNode=class _TstNode{value=null;left=null;middle=null;right=null;code;constructor(key,value,index3){if(index3===void 0||index3>=key.length)throw new TypeError("Unreachable");if((this.code=key.charCodeAt(index3))>127)throw new TypeError("key must be ascii string");key.length!==++index3?this.middle=new _TstNode(key,value,index3):this.value=value}add(key,value){let length=key.length;if(length===0)throw new TypeError("Unreachable");let index3=0,node=this;for(;;){let code=key.charCodeAt(index3);if(code>127)throw new TypeError("key must be ascii string");if(node.code===code)if(length===++index3){node.value=value;break}else if(node.middle!==null)node=node.middle;else{node.middle=new _TstNode(key,value,index3);break}else if(node.code<code)if(node.left!==null)node=node.left;else{node.left=new _TstNode(key,value,index3);break}else if(node.right!==null)node=node.right;else{node.right=new _TstNode(key,value,index3);break}}}search(key){let keylength=key.length,index3=0,node=this;for(;node!==null&&index3<keylength;){let code=key[index3];for(code<=90&&code>=65&&(code|=32);node!==null;){if(code===node.code){if(keylength===++index3)return node;node=node.middle;break}node=node.code<code?node.left:node.right}}return null}},TernarySearchTree=class{node=null;insert(key,value){this.node===null?this.node=new TstNode(key,value,0):this.node.add(key,value)}lookup(key){return this.node?.search(key)?.value??null}},tree=new TernarySearchTree;for(let i=0;i<wellknownHeaderNames.length;++i){let key=headerNameLowerCasedRecord[wellknownHeaderNames[i]];tree.insert(key,key)}module.exports={TernarySearchTree,tree}}});var require_util=__commonJS({"node_modules/undici/lib/core/util.js"(exports,module){"use strict";var assert=__require("node:assert"),{kDestroyed,kBodyUsed,kListeners,kBody}=require_symbols(),{IncomingMessage}=__require("node:http"),stream2=__require("node:stream"),net=__require("node:net"),{stringify}=__require("node:querystring"),{EventEmitter:EE,addAbortListener:addAbortListenerNative}=__require("node:events"),timers=require_timers(),{InvalidArgumentError,ConnectTimeoutError}=require_errors(),{headerNameLowerCasedRecord}=require_constants(),{tree}=require_tree(),BodyAsyncIterable=class{constructor(body2){this[kBody]=body2,this[kBodyUsed]=!1}async*[Symbol.asyncIterator](){assert(!this[kBodyUsed],"disturbed"),this[kBodyUsed]=!0,yield*this[kBody]}};function noop(){}function wrapRequestBody(body2){return isStream(body2)?(bodyLength(body2)===0&&body2.on("data",function(){assert(!1)}),typeof body2.readableDidRead!="boolean"&&(body2[kBodyUsed]=!1,EE.prototype.on.call(body2,"data",function(){this[kBodyUsed]=!0})),body2):body2&&typeof body2.pipeTo=="function"?new BodyAsyncIterable(body2):body2&&isFormDataLike(body2)?body2:body2&&typeof body2!="string"&&!ArrayBuffer.isView(body2)&&isIterable(body2)?new BodyAsyncIterable(body2):body2}function isStream(obj2){return obj2&&typeof obj2=="object"&&typeof obj2.pipe=="function"&&typeof obj2.on=="function"}function isBlobLike(object){return object instanceof Blob}function pathHasQueryOrFragment(url){return url.includes("?")||url.includes("#")}function serializePathWithQuery(url,queryParams){if(pathHasQueryOrFragment(url))throw new Error('Query params cannot be passed when url already contains "?" or "#".');let stringified=stringify(queryParams);return stringified&&(url+="?"+stringified),url}function isValidPort(port){let value=parseInt(port,10);return value===Number(port)&&value>=0&&value<=65535}function isHttpOrHttpsPrefixed(value){return value!=null&&value[0]==="h"&&value[1]==="t"&&value[2]==="t"&&value[3]==="p"&&(value[4]===":"||value[4]==="s"&&value[5]===":")}function parseURL(url){if(typeof url=="string"){if(url=new URL(url),!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");return url}if(!url||typeof url!="object")throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object.");if(!(url instanceof URL)){if(url.port!=null&&url.port!==""&&isValidPort(url.port)===!1)throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer.");if(url.path!=null&&typeof url.path!="string")throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined.");if(url.pathname!=null&&typeof url.pathname!="string")throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined.");if(url.hostname!=null&&typeof url.hostname!="string")throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined.");if(url.origin!=null&&typeof url.origin!="string")throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined.");if(!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");let port=url.port!=null?url.port:url.protocol==="https:"?443:80,origin=url.origin!=null?url.origin:`${url.protocol||""}//${url.hostname||""}:${port}`,path10=url.path!=null?url.path:`${url.pathname||""}${url.search||""}`;return origin[origin.length-1]==="/"&&(origin=origin.slice(0,origin.length-1)),path10&&path10[0]!=="/"&&(path10=`/${path10}`),new URL(`${origin}${path10}`)}if(!isHttpOrHttpsPrefixed(url.origin||url.protocol))throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");return url}function parseOrigin(url){if(url=parseURL(url),url.pathname!=="/"||url.search||url.hash)throw new InvalidArgumentError("invalid url");return url}function getHostname(host){if(host[0]==="["){let idx2=host.indexOf("]");return assert(idx2!==-1),host.substring(1,idx2)}let idx=host.indexOf(":");return idx===-1?host:host.substring(0,idx)}function getServerName(host){if(!host)return null;assert(typeof host=="string");let servername=getHostname(host);return net.isIP(servername)?"":servername}function deepClone(obj2){return JSON.parse(JSON.stringify(obj2))}function isAsyncIterable(obj2){return obj2!=null&&typeof obj2[Symbol.asyncIterator]=="function"}function isIterable(obj2){return obj2!=null&&(typeof obj2[Symbol.iterator]=="function"||typeof obj2[Symbol.asyncIterator]=="function")}function hasSafeIterator(obj2){let prototype=Object.getPrototypeOf(obj2);return Object.hasOwn(obj2,Symbol.iterator)||prototype!=null&&prototype!==Object.prototype&&typeof obj2[Symbol.iterator]=="function"}function bodyLength(body2){if(body2==null)return 0;if(isStream(body2)){let state2=body2._readableState;return state2&&state2.objectMode===!1&&state2.ended===!0&&Number.isFinite(state2.length)?state2.length:null}else{if(isBlobLike(body2))return body2.size!=null?body2.size:null;if(isBuffer(body2))return body2.byteLength}return null}function isDestroyed(body2){return body2&&!!(body2.destroyed||body2[kDestroyed]||stream2.isDestroyed?.(body2))}function destroy(stream3,err){if(!(stream3==null||!isStream(stream3)||isDestroyed(stream3))){if(typeof stream3.destroy=="function"){Object.getPrototypeOf(stream3).constructor===IncomingMessage&&(stream3.socket=null);try{stream3.destroy(err)}catch{}}else err&&queueMicrotask(()=>{stream3.emit("error",err)});stream3.destroyed!==!0&&(stream3[kDestroyed]=!0)}}var KEEPALIVE_TIMEOUT_EXPR=/(?:^|,)[\t ]*timeout=(\d+)/i;function parseKeepAliveTimeout(val){let m=val.match(KEEPALIVE_TIMEOUT_EXPR);return m?parseInt(m[1],10)*1e3:null}function headerNameToString(value){return typeof value=="string"?headerNameLowerCasedRecord[value]??value.toLowerCase():tree.lookup(value)??value.toString("latin1").toLowerCase()}function bufferToLowerCasedHeaderName(value){return tree.lookup(value)??value.toString("latin1").toLowerCase()}function setHeader(obj2,key,value){key==="__proto__"?Object.defineProperty(obj2,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj2[key]=value}function parseHeaders(headers,obj2){obj2===void 0&&(obj2={});for(let i=0;i<headers.length;i+=2){let key=headerNameToString(headers[i]),val=obj2[key];if(val!==void 0)if(Object.hasOwn(obj2,key))typeof val=="string"&&(val=[val],obj2[key]=val),val.push(headers[i+1].toString("latin1"));else{let headersValue=typeof headers[i+1]=="string"?headers[i+1]:Array.isArray(headers[i+1])?headers[i+1].map(x=>x.toString("latin1")):headers[i+1].toString("latin1");key==="__proto__"?Object.defineProperty(obj2,key,{value:headersValue,enumerable:!0,configurable:!0,writable:!0}):obj2[key]=headersValue}else{let headersValue=typeof headers[i+1]=="string"?headers[i+1]:Array.isArray(headers[i+1])?headers[i+1].map(x=>x.toString("latin1")):headers[i+1].toString("latin1");obj2[key]=headersValue}}return obj2}function parseRawHeaders(headers){if(headers==null)return[];if(!Array.isArray(headers)){let rawHeaders=[];for(let[name,value]of Object.entries(headers))if(Array.isArray(value))for(let entry of value)rawHeaders.push(name,`${entry}`);else rawHeaders.push(name,`${value}`);return rawHeaders}let headersLength=headers.length,ret=new Array(headersLength),key,val;for(let n=0;n<headersLength;n+=2)key=headers[n],val=headers[n+1],typeof key!="string"&&(key=key.toString()),typeof val!="string"&&(val=val.toString("latin1")),ret[n]=key,ret[n+1]=val;return ret}function toRawHeaders(headers){let rawHeaders=[];for(let[name,value]of Object.entries(headers))if(Array.isArray(value))for(let entry of value)rawHeaders.push(Buffer.from(name,"latin1"),Buffer.from(`${entry}`,"latin1"));else rawHeaders.push(Buffer.from(name,"latin1"),Buffer.from(`${value}`,"latin1"));return rawHeaders}function encodeRawHeaders(headers){if(!Array.isArray(headers))throw new TypeError("expected headers to be an array");return headers.map(x=>Buffer.from(x))}function isBuffer(buffer){return buffer instanceof Uint8Array||Buffer.isBuffer(buffer)}function assertRequestHandler(handler,method,upgrade){if(!handler||typeof handler!="object")throw new InvalidArgumentError("handler must be an object");if(typeof handler.onRequestStart!="function")throw new InvalidArgumentError("invalid onRequestStart method");if(typeof handler.onResponseError!="function")throw new InvalidArgumentError("invalid onResponseError method");if(typeof handler.onBodySent!="function"&&handler.onBodySent!==void 0)throw new InvalidArgumentError("invalid onBodySent method");if(typeof handler.onRequestSent!="function"&&handler.onRequestSent!==void 0)throw new InvalidArgumentError("invalid onRequestSent method");if(upgrade||method==="CONNECT"){if(typeof handler.onRequestUpgrade!="function")throw new InvalidArgumentError("invalid onRequestUpgrade method")}else{if(typeof handler.onResponseStart!="function")throw new InvalidArgumentError("invalid onResponseStart method");if(typeof handler.onResponseData!="function")throw new InvalidArgumentError("invalid onResponseData method");if(typeof handler.onResponseEnd!="function")throw new InvalidArgumentError("invalid onResponseEnd method")}}function isDisturbed(body2){return!!(body2&&(stream2.isDisturbed(body2)||body2[kBodyUsed]))}function getSocketInfo(socket){return{localAddress:socket.localAddress,localPort:socket.localPort,remoteAddress:socket.remoteAddress,remotePort:socket.remotePort,remoteFamily:socket.remoteFamily,timeout:socket.timeout,bytesWritten:socket.bytesWritten,bytesRead:socket.bytesRead}}function isFormDataLike(object){return object&&typeof object=="object"&&typeof object.append=="function"&&typeof object.delete=="function"&&typeof object.get=="function"&&typeof object.getAll=="function"&&typeof object.has=="function"&&typeof object.set=="function"&&object[Symbol.toStringTag]==="FormData"}function addAbortListener(signal,listener){return!signal||"aborted"in signal?addAbortListenerNative(signal,listener)[Symbol.dispose]:typeof signal.addEventListener=="function"?(signal.addEventListener("abort",listener,{once:!0}),()=>signal.removeEventListener("abort",listener)):(signal.once("abort",listener),()=>signal.removeListener("abort",listener))}var validTokenChars=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);function isTokenCharCode(c){return validTokenChars[c]===1}var tokenRegExp=/^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;function isValidHTTPToken(characters){if(characters.length>=12)return tokenRegExp.test(characters);if(characters.length===0)return!1;for(let i=0;i<characters.length;i++)if(validTokenChars[characters.charCodeAt(i)]!==1)return!1;return!0}var headerCharRegex=/[^\t\x20-\x7e\x80-\xff]/;function isValidHeaderValue(characters){return!headerCharRegex.test(characters)}var rangeHeaderRegex=/^bytes (\d+)-(\d+)\/(\d+|\*)?$/;function parseRangeHeader(range2){if(range2==null||range2==="")return{start:0,end:null,size:null};if(!range2)return null;let m=rangeHeaderRegex.exec(range2);return m?{start:parseInt(m[1]),end:m[2]?parseInt(m[2]):null,size:m[3]&&m[3]!=="*"?parseInt(m[3]):null}:null}function addListener(obj2,name,listener){return(obj2[kListeners]??=[]).push([name,listener]),obj2.on(name,listener),obj2}function removeAllListeners(obj2){if(obj2[kListeners]!=null){for(let[name,listener]of obj2[kListeners])obj2.removeListener(name,listener);obj2[kListeners]=null}return obj2}function errorRequest(client,request,err){try{request.onResponseError(err),assert(request.aborted)}catch(err2){client.emit("error",err2)}}var setupConnectTimeout=process.platform==="win32"?(socketWeakRef,opts)=>{if(!opts.timeout)return noop;let s1=null,s2=null,fastTimer=timers.setFastTimeout(()=>{s1=setImmediate(()=>{s2=setImmediate(()=>onConnectTimeout(socketWeakRef.deref(),opts))})},opts.timeout);return()=>{timers.clearFastTimeout(fastTimer),clearImmediate(s1),clearImmediate(s2)}}:(socketWeakRef,opts)=>{if(!opts.timeout)return noop;let s1=null,fastTimer=timers.setFastTimeout(()=>{s1=setImmediate(()=>{onConnectTimeout(socketWeakRef.deref(),opts)})},opts.timeout);return()=>{timers.clearFastTimeout(fastTimer),clearImmediate(s1)}};function onConnectTimeout(socket,opts){if(socket==null)return;let message="Connect Timeout Error";Array.isArray(socket.autoSelectFamilyAttemptedAddresses)?message+=` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`:message+=` (attempted address: ${opts.hostname}:${opts.port},`,message+=` timeout: ${opts.timeout}ms)`,destroy(socket,new ConnectTimeoutError(message))}var lastUrlString=null,lastProtocol=null;function getProtocolFromUrlString(urlString){if(urlString===lastUrlString)return lastProtocol;let protocol=getProtocolFromUrlStringSlow(urlString);return lastUrlString=urlString,lastProtocol=protocol,protocol}function getProtocolFromUrlStringSlow(urlString){if(urlString[0]==="h"&&urlString[1]==="t"&&urlString[2]==="t"&&urlString[3]==="p")switch(urlString[4]){case":":return"http:";case"s":if(urlString[5]===":")return"https:"}return urlString.slice(0,urlString.indexOf(":")+1)}var kEnumerableProperty={__proto__:null,enumerable:!0},normalizedMethodRecordsBase={delete:"DELETE",DELETE:"DELETE",get:"GET",GET:"GET",head:"HEAD",HEAD:"HEAD",options:"OPTIONS",OPTIONS:"OPTIONS",post:"POST",POST:"POST",put:"PUT",PUT:"PUT",query:"QUERY",QUERY:"QUERY"},normalizedMethodRecords={...normalizedMethodRecordsBase,patch:"patch",PATCH:"PATCH"};Object.setPrototypeOf(normalizedMethodRecordsBase,null);Object.setPrototypeOf(normalizedMethodRecords,null);module.exports={kEnumerableProperty,isDisturbed,isBlobLike,parseOrigin,parseURL,getServerName,isStream,isIterable,hasSafeIterator,isAsyncIterable,isDestroyed,headerNameToString,bufferToLowerCasedHeaderName,addListener,removeAllListeners,errorRequest,parseRawHeaders,toRawHeaders,encodeRawHeaders,parseHeaders,setHeader,parseKeepAliveTimeout,destroy,bodyLength,deepClone,isBuffer,assertRequestHandler,getSocketInfo,isFormDataLike,pathHasQueryOrFragment,serializePathWithQuery,addAbortListener,isValidHTTPToken,isValidHeaderValue,isTokenCharCode,parseRangeHeader,normalizedMethodRecordsBase,normalizedMethodRecords,isValidPort,isHttpOrHttpsPrefixed,safeHTTPMethods:Object.freeze(["GET","HEAD","OPTIONS","TRACE"]),wrapRequestBody,setupConnectTimeout,getProtocolFromUrlString}}});var require_stats=__commonJS({"node_modules/undici/lib/util/stats.js"(exports,module){"use strict";var{kConnected,kPending,kRunning,kSize,kFree,kQueued}=require_symbols(),ClientStats=class{constructor(client){this.connected=client[kConnected],this.pending=client[kPending],this.running=client[kRunning],this.size=client[kSize]}},PoolStats=class{constructor(pool){this.connected=pool[kConnected],this.free=pool[kFree],this.pending=pool[kPending],this.queued=pool[kQueued],this.running=pool[kRunning],this.size=pool[kSize]}};module.exports={ClientStats,PoolStats}}});var require_diagnostics=__commonJS({"node_modules/undici/lib/core/diagnostics.js"(exports,module){"use strict";var diagnosticsChannel=__require("node:diagnostics_channel"),util=__require("node:util"),undiciDebugLog=util.debuglog("undici"),fetchDebuglog=util.debuglog("fetch"),websocketDebuglog=util.debuglog("websocket"),channels={beforeConnect:diagnosticsChannel.channel("undici:client:beforeConnect"),connected:diagnosticsChannel.channel("undici:client:connected"),connectError:diagnosticsChannel.channel("undici:client:connectError"),sendHeaders:diagnosticsChannel.channel("undici:client:sendHeaders"),create:diagnosticsChannel.channel("undici:request:create"),bodySent:diagnosticsChannel.channel("undici:request:bodySent"),bodyChunkSent:diagnosticsChannel.channel("undici:request:bodyChunkSent"),bodyChunkReceived:diagnosticsChannel.channel("undici:request:bodyChunkReceived"),headers:diagnosticsChannel.channel("undici:request:headers"),trailers:diagnosticsChannel.channel("undici:request:trailers"),error:diagnosticsChannel.channel("undici:request:error"),open:diagnosticsChannel.channel("undici:websocket:open"),close:diagnosticsChannel.channel("undici:websocket:close"),socketError:diagnosticsChannel.channel("undici:websocket:socket_error"),ping:diagnosticsChannel.channel("undici:websocket:ping"),pong:diagnosticsChannel.channel("undici:websocket:pong"),proxyConnected:diagnosticsChannel.channel("undici:proxy:connected")},isTrackingClientEvents=!1;function trackClientEvents(debugLog=undiciDebugLog){if(!isTrackingClientEvents){if(channels.beforeConnect.hasSubscribers||channels.connected.hasSubscribers||channels.connectError.hasSubscribers||channels.sendHeaders.hasSubscribers){isTrackingClientEvents=!0;return}isTrackingClientEvents=!0,diagnosticsChannel.subscribe("undici:client:beforeConnect",evt=>{let{connectParams:{version:version2,protocol,port,host}}=evt;debugLog("connecting to %s%s using %s%s",host,port?`:${port}`:"",protocol,version2)}),diagnosticsChannel.subscribe("undici:client:connected",evt=>{let{connectParams:{version:version2,protocol,port,host}}=evt;debugLog("connected to %s%s using %s%s",host,port?`:${port}`:"",protocol,version2)}),diagnosticsChannel.subscribe("undici:client:connectError",evt=>{let{connectParams:{version:version2,protocol,port,host},error}=evt;debugLog("connection to %s%s using %s%s errored - %s",host,port?`:${port}`:"",protocol,version2,error.message)}),diagnosticsChannel.subscribe("undici:client:sendHeaders",evt=>{let{request:{method,path:path10,origin}}=evt;debugLog("sending request to %s %s%s",method,origin,path10)})}}var isTrackingRequestEvents=!1;function trackRequestEvents(debugLog=undiciDebugLog){if(!isTrackingRequestEvents){if(channels.headers.hasSubscribers||channels.trailers.hasSubscribers||channels.error.hasSubscribers){isTrackingRequestEvents=!0;return}isTrackingRequestEvents=!0,diagnosticsChannel.subscribe("undici:request:headers",evt=>{let{request:{method,path:path10,origin},response:{statusCode}}=evt;debugLog("received response to %s %s%s - HTTP %d",method,origin,path10,statusCode)}),diagnosticsChannel.subscribe("undici:request:trailers",evt=>{let{request:{method,path:path10,origin}}=evt;debugLog("trailers received from %s %s%s",method,origin,path10)}),diagnosticsChannel.subscribe("undici:request:error",evt=>{let{request:{method,path:path10,origin},error}=evt;debugLog("request to %s %s%s errored - %s",method,origin,path10,error.message)})}}var isTrackingWebSocketEvents=!1;function trackWebSocketEvents(debugLog=websocketDebuglog){if(!isTrackingWebSocketEvents){if(channels.open.hasSubscribers||channels.close.hasSubscribers||channels.socketError.hasSubscribers||channels.ping.hasSubscribers||channels.pong.hasSubscribers){isTrackingWebSocketEvents=!0;return}isTrackingWebSocketEvents=!0,diagnosticsChannel.subscribe("undici:websocket:open",evt=>{if(evt.address!=null){let{address,port}=evt.address;debugLog("connection opened %s%s",address,port?`:${port}`:"")}else debugLog("connection opened")}),diagnosticsChannel.subscribe("undici:websocket:close",evt=>{let{websocket,code,reason}=evt;debugLog("closed connection to %s - %s %s",websocket.url,code,reason)}),diagnosticsChannel.subscribe("undici:websocket:socket_error",err=>{debugLog("connection errored - %s",err.message)}),diagnosticsChannel.subscribe("undici:websocket:ping",evt=>{debugLog("ping received")}),diagnosticsChannel.subscribe("undici:websocket:pong",evt=>{debugLog("pong received")})}}(undiciDebugLog.enabled||fetchDebuglog.enabled)&&(trackClientEvents(fetchDebuglog.enabled?fetchDebuglog:undiciDebugLog),trackRequestEvents(fetchDebuglog.enabled?fetchDebuglog:undiciDebugLog));websocketDebuglog.enabled&&(trackClientEvents(undiciDebugLog.enabled?undiciDebugLog:websocketDebuglog),trackWebSocketEvents(websocketDebuglog));module.exports={channels}}});var require_constants2=__commonJS({"node_modules/undici/lib/web/fetch/constants.js"(exports,module){"use strict";var corsSafeListedMethods=["GET","HEAD","POST"],corsSafeListedMethodsSet=new Set(corsSafeListedMethods),nullBodyStatus=[101,204,205,304],redirectStatus=[301,302,303,307,308],redirectStatusSet=new Set(redirectStatus),badPorts=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","4190","5060","5061","6000","6566","6665","6666","6667","6668","6669","6679","6697","10080"],badPortsSet=new Set(badPorts),referrerPolicyTokens=["no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"],referrerPolicy=["",...referrerPolicyTokens],referrerPolicyTokensSet=new Set(referrerPolicyTokens),requestRedirect=["follow","manual","error"],safeMethods=["GET","HEAD","OPTIONS","TRACE","QUERY"],safeMethodsSet=new Set(safeMethods),requestMode=["navigate","same-origin","no-cors","cors"],requestCredentials=["omit","same-origin","include"],requestCache=["default","no-store","reload","no-cache","force-cache","only-if-cached"],requestBodyHeader=["content-encoding","content-language","content-location","content-type","content-length"],requestDuplex=["half"],forbiddenMethods=["CONNECT","TRACE","TRACK"],forbiddenMethodsSet=new Set(forbiddenMethods),subresource=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""],subresourceSet=new Set(subresource);module.exports={subresource,forbiddenMethods,requestBodyHeader,referrerPolicy,requestRedirect,requestMode,requestCredentials,requestCache,redirectStatus,corsSafeListedMethods,nullBodyStatus,safeMethods,badPorts,requestDuplex,subresourceSet,badPortsSet,redirectStatusSet,corsSafeListedMethodsSet,safeMethodsSet,forbiddenMethodsSet,referrerPolicyTokens:referrerPolicyTokensSet}}});var require_global=__commonJS({"node_modules/undici/lib/web/fetch/global.js"(exports,module){"use strict";var globalOrigin=Symbol.for("undici.globalOrigin.1");function getGlobalOrigin(){return globalThis[globalOrigin]}function setGlobalOrigin(newOrigin){if(newOrigin===void 0){Object.defineProperty(globalThis,globalOrigin,{value:void 0,writable:!0,enumerable:!1,configurable:!1});return}let parsedURL=new URL(newOrigin);if(parsedURL.protocol!=="http:"&&parsedURL.protocol!=="https:")throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);Object.defineProperty(globalThis,globalOrigin,{value:parsedURL,writable:!0,enumerable:!1,configurable:!1})}module.exports={getGlobalOrigin,setGlobalOrigin}}});var require_encoding=__commonJS({"node_modules/undici/lib/encoding/index.js"(exports,module){"use strict";var textDecoder=new TextDecoder;function utf8DecodeBytes(buffer){return buffer.length===0?"":(buffer[0]===239&&buffer[1]===187&&buffer[2]===191&&(buffer=buffer.subarray(3)),textDecoder.decode(buffer))}module.exports={utf8DecodeBytes}}});var require_infra=__commonJS({"node_modules/undici/lib/web/infra/index.js"(exports,module){"use strict";var assert=__require("node:assert"),{utf8DecodeBytes}=require_encoding();function collectASequenceOfCodePoints(condition,input2,position){let result2="";for(;position.position<input2.length&&condition(input2[position.position]);)result2+=input2[position.position],position.position++;return result2}function collectASequenceOfCodePointsFast(char,input2,position){let idx=input2.indexOf(char,position.position),start=position.position;return idx===-1?(position.position=input2.length,input2.slice(start)):(position.position=idx,input2.slice(start,position.position))}var ASCII_WHITESPACE_REPLACE_REGEX=/[\u0009\u000A\u000C\u000D\u0020]/g;function forgivingBase64(data){data=data.replace(ASCII_WHITESPACE_REPLACE_REGEX,"");let dataLength=data.length;if(dataLength%4===0&&data.charCodeAt(dataLength-1)===61&&(--dataLength,data.charCodeAt(dataLength-1)===61&&--dataLength),dataLength%4===1||/[^+/0-9A-Za-z]/.test(data.length===dataLength?data:data.substring(0,dataLength)))return"failure";let buffer=Buffer.from(data,"base64");return new Uint8Array(buffer.buffer,buffer.byteOffset,buffer.byteLength)}function isASCIIWhitespace(char){return char===9||char===10||char===12||char===13||char===32}function isomorphicDecode(input2){let length=input2.length;if(65535>length)return String.fromCharCode.apply(null,input2);let result2="",i=0,addition=65535;for(;i<length;)i+addition>length&&(addition=length-i),result2+=String.fromCharCode.apply(null,input2.subarray(i,i+=addition));return result2}var invalidIsomorphicEncodeValueRegex=/[^\x00-\xFF]/;function isomorphicEncode(input2){return assert(!invalidIsomorphicEncodeValueRegex.test(input2)),input2}var nonASCIIRegex=/[^\x00-\x7F]/;function asciiLowercase(str3){return nonASCIIRegex.test(str3)?str3.replace(/[A-Z]+/g,upper=>upper.toLowerCase()):str3.toLowerCase()}function parseJSONFromBytes(bytes2){return JSON.parse(utf8DecodeBytes(bytes2))}function removeASCIIWhitespace(str3,leading=!0,trailing=!0){return removeChars(str3,leading,trailing,isASCIIWhitespace)}function removeChars(str3,leading,trailing,predicate){let lead=0,trail=str3.length-1;if(leading)for(;lead<str3.length&&predicate(str3.charCodeAt(lead));)lead++;if(trailing)for(;trail>=lead&&predicate(str3.charCodeAt(trail));)trail--;return lead===0&&trail===str3.length-1?str3:str3.slice(lead,trail+1)}function serializeJavascriptValueToJSONString(value){let result2=JSON.stringify(value);if(result2===void 0)throw new TypeError("Value is not JSON serializable");return assert(typeof result2=="string"),result2}module.exports={asciiLowercase,collectASequenceOfCodePoints,collectASequenceOfCodePointsFast,forgivingBase64,isASCIIWhitespace,isomorphicDecode,isomorphicEncode,parseJSONFromBytes,removeASCIIWhitespace,removeChars,serializeJavascriptValueToJSONString}}});var require_data_url=__commonJS({"node_modules/undici/lib/web/fetch/data-url.js"(exports,module){"use strict";var assert=__require("node:assert"),{asciiLowercase,forgivingBase64,collectASequenceOfCodePoints,collectASequenceOfCodePointsFast,isomorphicDecode,removeASCIIWhitespace,removeChars}=require_infra(),encoder2=new TextEncoder,HTTP_TOKEN_CODEPOINTS=/^[-!#$%&'*+.^_`|~A-Za-z0-9]+$/u,HTTP_WHITESPACE_REGEX=/[\u000A\u000D\u0009\u0020]/u,HTTP_QUOTED_STRING_TOKENS=/^[\u0009\u0020-\u007E\u0080-\u00FF]+$/u;function dataURLProcessor(dataURL){assert(dataURL.protocol==="data:");let input2=URLSerializer(dataURL,!0);input2=input2.slice(5);let position={position:0},mimeType=collectASequenceOfCodePointsFast(",",input2,position),mimeTypeLength=mimeType.length;if(mimeType=removeASCIIWhitespace(mimeType,!0,!0),position.position>=input2.length)return"failure";position.position++;let encodedBody=input2.slice(mimeTypeLength+1),body2=stringPercentDecode(encodedBody);if(/;\u0020*[Bb][Aa][Ss][Ee]64$/u.test(mimeType)){let stringBody=isomorphicDecode(body2);if(body2=forgivingBase64(stringBody),body2==="failure")return"failure";mimeType=mimeType.slice(0,-6),mimeType=mimeType.replace(/(\u0020+)$/u,""),mimeType=mimeType.slice(0,-1)}mimeType.startsWith(";")&&(mimeType="text/plain"+mimeType);let mimeTypeRecord=parseMIMEType(mimeType);return mimeTypeRecord==="failure"&&(mimeTypeRecord=parseMIMEType("text/plain;charset=US-ASCII")),{mimeType:mimeTypeRecord,body:body2}}function URLSerializer(url,excludeFragment=!1){if(!excludeFragment)return url.href;let href=url.href,hashLength=url.hash.length,serialized=hashLength===0?href:href.substring(0,href.length-hashLength);return!hashLength&&href.endsWith("#")?serialized.slice(0,-1):serialized}function stringPercentDecode(input2){let bytes2=encoder2.encode(input2);return percentDecode(bytes2)}function isHexCharByte(byte){return byte>=48&&byte<=57||byte>=65&&byte<=70||byte>=97&&byte<=102}function hexByteToNumber(byte){return byte>=48&&byte<=57?byte-48:(byte&223)-55}function percentDecode(input2){let length=input2.length,output=new Uint8Array(length),j=0,i=0;for(;i<length;){let byte=input2[i];byte!==37?output[j++]=byte:byte===37&&!(isHexCharByte(input2[i+1])&&isHexCharByte(input2[i+2]))?output[j++]=37:(output[j++]=hexByteToNumber(input2[i+1])<<4|hexByteToNumber(input2[i+2]),i+=2),++i}return length===j?output:output.subarray(0,j)}function parseMIMEType(input2){input2=removeHTTPWhitespace(input2,!0,!0);let position={position:0},type=collectASequenceOfCodePointsFast("/",input2,position);if(type.length===0||!HTTP_TOKEN_CODEPOINTS.test(type)||position.position>=input2.length)return"failure";position.position++;let subtype=collectASequenceOfCodePointsFast(";",input2,position);if(subtype=removeHTTPWhitespace(subtype,!1,!0),subtype.length===0||!HTTP_TOKEN_CODEPOINTS.test(subtype))return"failure";let typeLowercase=asciiLowercase(type),subtypeLowercase=asciiLowercase(subtype),mimeType={type:typeLowercase,subtype:subtypeLowercase,parameters:new Map,essence:`${typeLowercase}/${subtypeLowercase}`};for(;position.position<input2.length;){position.position++,collectASequenceOfCodePoints(char=>HTTP_WHITESPACE_REGEX.test(char),input2,position);let parameterName=collectASequenceOfCodePoints(char=>char!==";"&&char!=="=",input2,position);if(parameterName=asciiLowercase(parameterName),position.position<input2.length){if(input2[position.position]===";")continue;position.position++}if(position.position>=input2.length)break;let parameterValue=null;if(input2[position.position]==='"')parameterValue=collectAnHTTPQuotedString(input2,position,!0),collectASequenceOfCodePointsFast(";",input2,position);else if(parameterValue=collectASequenceOfCodePointsFast(";",input2,position),parameterValue=removeHTTPWhitespace(parameterValue,!1,!0),parameterValue.length===0)continue;parameterName.length!==0&&HTTP_TOKEN_CODEPOINTS.test(parameterName)&&(parameterValue.length===0||HTTP_QUOTED_STRING_TOKENS.test(parameterValue))&&!mimeType.parameters.has(parameterName)&&mimeType.parameters.set(parameterName,parameterValue)}return mimeType}function collectAnHTTPQuotedString(input2,position,extractValue=!1){let positionStart=position.position,value="";for(assert(input2[position.position]==='"'),position.position++;value+=collectASequenceOfCodePoints(char=>char!=='"'&&char!=="\\",input2,position),!(position.position>=input2.length);){let quoteOrBackslash=input2[position.position];if(position.position++,quoteOrBackslash==="\\"){if(position.position>=input2.length){value+="\\";break}value+=input2[position.position],position.position++}else{assert(quoteOrBackslash==='"');break}}return extractValue?value:input2.slice(positionStart,position.position)}function serializeAMimeType(mimeType){assert(mimeType!=="failure");let{parameters,essence}=mimeType,serialization=essence;for(let[name,value]of parameters.entries())serialization+=";",serialization+=name,serialization+="=",HTTP_TOKEN_CODEPOINTS.test(value)||(value=value.replace(/[\\"]/ug,"\\$&"),value='"'+value,value+='"'),serialization+=value;return serialization}function isHTTPWhiteSpace(char){return char===13||char===10||char===9||char===32}function removeHTTPWhitespace(str3,leading=!0,trailing=!0){return removeChars(str3,leading,trailing,isHTTPWhiteSpace)}function minimizeSupportedMimeType(mimeType){switch(mimeType.essence){case"application/ecmascript":case"application/javascript":case"application/x-ecmascript":case"application/x-javascript":case"text/ecmascript":case"text/javascript":case"text/javascript1.0":case"text/javascript1.1":case"text/javascript1.2":case"text/javascript1.3":case"text/javascript1.4":case"text/javascript1.5":case"text/jscript":case"text/livescript":case"text/x-ecmascript":case"text/x-javascript":return"text/javascript";case"application/json":case"text/json":return"application/json";case"image/svg+xml":return"image/svg+xml";case"text/xml":case"application/xml":return"application/xml"}return mimeType.subtype.endsWith("+json")?"application/json":mimeType.subtype.endsWith("+xml")?"application/xml":""}module.exports={dataURLProcessor,URLSerializer,stringPercentDecode,parseMIMEType,collectAnHTTPQuotedString,serializeAMimeType,removeHTTPWhitespace,minimizeSupportedMimeType,HTTP_TOKEN_CODEPOINTS}}});var require_webidl=__commonJS({"node_modules/undici/lib/web/webidl/index.js"(exports,module){"use strict";var assert=__require("node:assert"),{types,inspect}=__require("node:util"),{markAsUncloneable}=__require("node:worker_threads"),UNDEFINED=1,BOOLEAN=2,STRING=3,SYMBOL=4,NUMBER=5,BIGINT=6,NULL=7,OBJECT=8,FunctionPrototypeSymbolHasInstance=Function.call.bind(Function.prototype[Symbol.hasInstance]),webidl={converters:{},util:{},errors:{},is:{}};webidl.errors.exception=function(message){return new TypeError(`${message.header}: ${message.message}`)};webidl.errors.conversionFailed=function(opts){let plural3=opts.types.length===1?"":" one of",message=`${opts.argument} could not be converted to${plural3}: ${opts.types.join(", ")}.`;return webidl.errors.exception({header:opts.prefix,message})};webidl.errors.invalidArgument=function(context){return webidl.errors.exception({header:context.prefix,message:`"${context.value}" is an invalid ${context.type}.`})};webidl.brandCheck=function(V,is){if(!is(V)){let err=new TypeError("Illegal invocation");throw err.code="ERR_INVALID_THIS",err}};webidl.argumentLengthCheck=function({length},min,ctx){if(length<min)throw webidl.errors.exception({message:`${min} argument${min!==1?"s":""} required, but${length?" only":""} ${length} found.`,header:ctx})};webidl.illegalConstructor=function(){throw webidl.errors.exception({header:"TypeError",message:"Illegal constructor"})};webidl.util.MakeTypeAssertion=function(I){return O=>FunctionPrototypeSymbolHasInstance(I,O)};webidl.util.Type=function(V){switch(typeof V){case"undefined":return UNDEFINED;case"boolean":return BOOLEAN;case"string":return STRING;case"symbol":return SYMBOL;case"number":return NUMBER;case"bigint":return BIGINT;case"function":case"object":return V===null?NULL:OBJECT}};webidl.util.Types={UNDEFINED,BOOLEAN,STRING,SYMBOL,NUMBER,BIGINT,NULL,OBJECT};webidl.util.TypeValueToString=function(o){switch(webidl.util.Type(o)){case UNDEFINED:return"Undefined";case BOOLEAN:return"Boolean";case STRING:return"String";case SYMBOL:return"Symbol";case NUMBER:return"Number";case BIGINT:return"BigInt";case NULL:return"Null";case OBJECT:return"Object"}};webidl.util.markAsUncloneable=markAsUncloneable;webidl.util.ConvertToInt=function(V,bitLength,signedness,flags){let upperBound,lowerBound;bitLength===64?(upperBound=Math.pow(2,53)-1,signedness==="unsigned"?lowerBound=0:lowerBound=Math.pow(-2,53)+1):signedness==="unsigned"?(lowerBound=0,upperBound=Math.pow(2,bitLength)-1):(lowerBound=-Math.pow(2,bitLength-1),upperBound=Math.pow(2,bitLength-1)-1);let x=Number(V);if(x===0&&(x=0),webidl.util.HasFlag(flags,webidl.attributes.EnforceRange)){if(Number.isNaN(x)||x===Number.POSITIVE_INFINITY||x===Number.NEGATIVE_INFINITY)throw webidl.errors.exception({header:"Integer conversion",message:`Could not convert ${webidl.util.Stringify(V)} to an integer.`});if(x=webidl.util.IntegerPart(x),x<lowerBound||x>upperBound)throw webidl.errors.exception({header:"Integer conversion",message:`Value must be between ${lowerBound}-${upperBound}, got ${x}.`});return x}return!Number.isNaN(x)&&webidl.util.HasFlag(flags,webidl.attributes.Clamp)?(x=Math.min(Math.max(x,lowerBound),upperBound),Math.floor(x)%2===0?x=Math.floor(x):x=Math.ceil(x),x):Number.isNaN(x)||x===0&&Object.is(0,x)||x===Number.POSITIVE_INFINITY||x===Number.NEGATIVE_INFINITY?0:(x=webidl.util.IntegerPart(x),x=x%Math.pow(2,bitLength),signedness==="signed"&&x>=Math.pow(2,bitLength-1)?x-Math.pow(2,bitLength):x)};webidl.util.IntegerPart=function(n){let r=Math.floor(Math.abs(n));return n<0?-1*r:r};webidl.util.Stringify=function(V){switch(webidl.util.Type(V)){case SYMBOL:return`Symbol(${V.description})`;case OBJECT:return inspect(V);case STRING:return`"${V}"`;case BIGINT:return`${V}n`;default:return`${V}`}};webidl.util.IsResizableArrayBuffer=function(V){if(types.isArrayBuffer(V))return V.resizable;if(types.isSharedArrayBuffer(V))return V.growable;throw webidl.errors.exception({header:"IsResizableArrayBuffer",message:`"${webidl.util.Stringify(V)}" is not an array buffer.`})};webidl.util.HasFlag=function(flags,attributes){return typeof flags=="number"&&(flags&attributes)===attributes};webidl.sequenceConverter=function(converter){return(V,prefix,argument,Iterable)=>{if(webidl.util.Type(V)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`${argument} (${webidl.util.Stringify(V)}) is not iterable.`});let method=typeof Iterable=="function"?Iterable():V?.[Symbol.iterator]?.(),seq=[],index3=0;if(method===void 0||typeof method.next!="function")throw webidl.errors.exception({header:prefix,message:`${argument} is not iterable.`});for(;;){let{done,value}=method.next();if(done)break;seq.push(converter(value,prefix,`${argument}[${index3++}]`))}return seq}};webidl.recordConverter=function(keyConverter,valueConverter){return(O,prefix,argument)=>{if(webidl.util.Type(O)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`${argument} ("${webidl.util.TypeValueToString(O)}") is not an Object.`});let result2={};if(!types.isProxy(O)){let keys2=[...Object.getOwnPropertyNames(O),...Object.getOwnPropertySymbols(O)];for(let key of keys2){let keyName=webidl.util.Stringify(key),typedKey=keyConverter(key,prefix,`Key ${keyName} in ${argument}`),typedValue=valueConverter(O[key],prefix,`${argument}[${keyName}]`);result2[typedKey]=typedValue}return result2}let keys=Reflect.ownKeys(O);for(let key of keys)if(Reflect.getOwnPropertyDescriptor(O,key)?.enumerable){let typedKey=keyConverter(key,prefix,argument),typedValue=valueConverter(O[key],prefix,argument);result2[typedKey]=typedValue}return result2}};webidl.interfaceConverter=function(TypeCheck,name){return(V,prefix,argument)=>{if(!TypeCheck(V))throw webidl.errors.exception({header:prefix,message:`Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${name}.`});return V}};webidl.dictionaryConverter=function(converters){return converters.sort((a,b)=>(a.key>b.key)-(a.key<b.key)),(dictionary,prefix,argument)=>{let dict={};if(dictionary!=null&&webidl.util.Type(dictionary)!==OBJECT)throw webidl.errors.exception({header:prefix,message:`Expected ${dictionary} to be one of: Null, Undefined, Object.`});for(let options of converters){let{key,defaultValue,required,converter}=options;if(required===!0&&(dictionary==null||!Object.hasOwn(dictionary,key)))throw webidl.errors.exception({header:prefix,message:`Missing required key "${key}".`});let value=dictionary?.[key],hasDefault=defaultValue!==void 0;if(hasDefault&&value===void 0&&(value=defaultValue()),required||hasDefault||value!==void 0){if(value=converter(value,prefix,`${argument}.${key}`),options.allowedValues&&!options.allowedValues.includes(value))throw webidl.errors.exception({header:prefix,message:`${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`});dict[key]=value}}return dict}};webidl.nullableConverter=function(converter){return(V,prefix,argument)=>V===null?V:converter(V,prefix,argument)};webidl.is.USVString=function(value){return typeof value=="string"&&value.isWellFormed()};webidl.is.ReadableStream=webidl.util.MakeTypeAssertion(ReadableStream);webidl.is.Blob=webidl.util.MakeTypeAssertion(Blob);webidl.is.URLSearchParams=webidl.util.MakeTypeAssertion(URLSearchParams);webidl.is.File=webidl.util.MakeTypeAssertion(File);webidl.is.URL=webidl.util.MakeTypeAssertion(URL);webidl.is.AbortSignal=webidl.util.MakeTypeAssertion(AbortSignal);webidl.is.MessagePort=webidl.util.MakeTypeAssertion(MessagePort);webidl.is.BufferSource=function(V){return types.isArrayBuffer(V)||ArrayBuffer.isView(V)&&types.isArrayBuffer(V.buffer)};webidl.util.getCopyOfBytesHeldByBufferSource=function(bufferSource){let jsBufferSource=bufferSource,jsArrayBuffer=jsBufferSource,offset=0,length=0;if(types.isTypedArray(jsBufferSource)||types.isDataView(jsBufferSource)?(jsArrayBuffer=jsBufferSource.buffer,offset=jsBufferSource.byteOffset,length=jsBufferSource.byteLength):(assert(types.isAnyArrayBuffer(jsBufferSource)),length=jsBufferSource.byteLength),jsArrayBuffer.detached)return new Uint8Array(0);let bytes2=new Uint8Array(length),view=new Uint8Array(jsArrayBuffer,offset,length);return bytes2.set(view),bytes2};webidl.converters.DOMString=function(V,prefix,argument,flags){if(V===null&&webidl.util.HasFlag(flags,webidl.attributes.LegacyNullToEmptyString))return"";if(typeof V=="symbol")throw webidl.errors.exception({header:prefix,message:`${argument} is a symbol, which cannot be converted to a DOMString.`});return String(V)};webidl.converters.ByteString=function(V,prefix,argument){if(typeof V=="symbol")throw webidl.errors.exception({header:prefix,message:`${argument} is a symbol, which cannot be converted to a ByteString.`});let x=String(V);for(let index3=0;index3<x.length;index3++)if(x.charCodeAt(index3)>255)throw new TypeError(`Cannot convert argument to a ByteString because the character at index ${index3} has a value of ${x.charCodeAt(index3)} which is greater than 255.`);return x};webidl.converters.USVString=function(value){return typeof value=="string"?value.toWellFormed():`${value}`.toWellFormed()};webidl.converters.boolean=function(V){return!!V};webidl.converters.any=function(V){return V};webidl.converters["long long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,64,"signed",0,prefix,argument)};webidl.converters["unsigned long long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,64,"unsigned",0,prefix,argument)};webidl.converters["unsigned long"]=function(V,prefix,argument){return webidl.util.ConvertToInt(V,32,"unsigned",0,prefix,argument)};webidl.converters["unsigned short"]=function(V,prefix,argument,flags){return webidl.util.ConvertToInt(V,16,"unsigned",flags,prefix,argument)};webidl.converters.ArrayBuffer=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isArrayBuffer(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a resizable ArrayBuffer.`});return V};webidl.converters.SharedArrayBuffer=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isSharedArrayBuffer(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["SharedArrayBuffer"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a resizable SharedArrayBuffer.`});return V};webidl.converters.TypedArray=function(V,T,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isTypedArray(V)||V.constructor.name!==T.name)throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:[T.name]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.DataView=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isDataView(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["DataView"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.ArrayBufferView=function(V,prefix,argument,flags){if(webidl.util.Type(V)!==OBJECT||!types.isArrayBufferView(V))throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBufferView"]});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowShared)&&types.isSharedArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a shared array buffer.`});if(!webidl.util.HasFlag(flags,webidl.attributes.AllowResizable)&&webidl.util.IsResizableArrayBuffer(V.buffer))throw webidl.errors.exception({header:prefix,message:`${argument} cannot be a view on a resizable array buffer.`});return V};webidl.converters.BufferSource=function(V,prefix,argument,flags){if(types.isArrayBuffer(V))return webidl.converters.ArrayBuffer(V,prefix,argument,flags);if(types.isArrayBufferView(V))return flags&=~webidl.attributes.AllowShared,webidl.converters.ArrayBufferView(V,prefix,argument,flags);throw types.isSharedArrayBuffer(V)?webidl.errors.exception({header:prefix,message:`${argument} cannot be a SharedArrayBuffer.`}):webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer","ArrayBufferView"]})};webidl.converters.AllowSharedBufferSource=function(V,prefix,argument,flags){if(types.isArrayBuffer(V))return webidl.converters.ArrayBuffer(V,prefix,argument,flags);if(types.isSharedArrayBuffer(V))return webidl.converters.SharedArrayBuffer(V,prefix,argument,flags);if(types.isArrayBufferView(V))return flags|=webidl.attributes.AllowShared,webidl.converters.ArrayBufferView(V,prefix,argument,flags);throw webidl.errors.conversionFailed({prefix,argument:`${argument} ("${webidl.util.Stringify(V)}")`,types:["ArrayBuffer","SharedArrayBuffer","ArrayBufferView"]})};webidl.converters["sequence<ByteString>"]=webidl.sequenceConverter(webidl.converters.ByteString);webidl.converters["sequence<sequence<ByteString>>"]=webidl.sequenceConverter(webidl.converters["sequence<ByteString>"]);webidl.converters["record<ByteString, ByteString>"]=webidl.recordConverter(webidl.converters.ByteString,webidl.converters.ByteString);webidl.converters.Blob=webidl.interfaceConverter(webidl.is.Blob,"Blob");webidl.converters.AbortSignal=webidl.interfaceConverter(webidl.is.AbortSignal,"AbortSignal");webidl.converters.EventHandlerNonNull=function(V){return webidl.util.Type(V)!==OBJECT?null:typeof V=="function"?V:()=>{}};webidl.attributes={Clamp:1,EnforceRange:2,AllowShared:4,AllowResizable:8,LegacyNullToEmptyString:16};module.exports={webidl}}});var require_util2=__commonJS({"node_modules/undici/lib/web/fetch/util.js"(exports,module){"use strict";var{Transform}=__require("node:stream"),zlib=__require("node:zlib"),{redirectStatusSet,referrerPolicyTokens,badPortsSet}=require_constants2(),{getGlobalOrigin}=require_global(),{collectAnHTTPQuotedString,parseMIMEType}=require_data_url(),{performance:performance2}=__require("node:perf_hooks"),{isValidHTTPToken,normalizedMethodRecordsBase}=require_util(),assert=__require("node:assert"),{isUint8Array}=__require("node:util/types"),{webidl}=require_webidl(),{isomorphicEncode,collectASequenceOfCodePoints,removeChars}=require_infra();function responseURL(response){let urlList=response.urlList,length=urlList.length;return length===0?null:urlList[length-1].toString()}function responseLocationURL(response,requestFragment){if(!redirectStatusSet.has(response.status))return null;let location=response.headersList.get("location",!0);return location!==null&&isValidHeaderValue(location)&&(isValidEncodedURL(location)||(location=normalizeBinaryStringToUtf8(location)),location=new URL(location,responseURL(response))),location&&!location.hash&&(location.hash=requestFragment),location}function isValidEncodedURL(url){for(let i=0;i<url.length;++i){let code=url.charCodeAt(i);if(code>126||code<32)return!1}return!0}function normalizeBinaryStringToUtf8(value){return Buffer.from(value,"binary").toString("utf8")}function requestCurrentURL(request){return request.urlList[request.urlList.length-1]}function requestBadPort(request){let url=requestCurrentURL(request);return urlIsHttpHttpsScheme(url)&&badPortsSet.has(url.port)?"blocked":"allowed"}function isErrorLike(object){return object instanceof Error||object?.constructor?.name==="Error"||object?.constructor?.name==="DOMException"}function isValidReasonPhrase(statusText){for(let i=0;i<statusText.length;++i){let c=statusText.charCodeAt(i);if(!(c===9||c>=32&&c<=126||c>=128&&c<=255))return!1}return!0}var isValidHeaderName=isValidHTTPToken;function isValidHeaderValue(potentialValue){return(potentialValue[0]===" "||potentialValue[0]===" "||potentialValue[potentialValue.length-1]===" "||potentialValue[potentialValue.length-1]===" "||potentialValue.includes(`
3
3
  `)||potentialValue.includes("\r")||potentialValue.includes("\0"))===!1}function parseReferrerPolicy(actualResponse){let policyHeader=(actualResponse.headersList.get("referrer-policy",!0)??"").split(","),policy="";if(policyHeader.length)for(let i=policyHeader.length;i!==0;i--){let token=policyHeader[i-1].trim();if(referrerPolicyTokens.has(token)){policy=token;break}}return policy}function setRequestReferrerPolicyOnRedirect(request,actualResponse){let policy=parseReferrerPolicy(actualResponse);policy!==""&&(request.referrerPolicy=policy)}function crossOriginResourcePolicyCheck(){return"allowed"}function corsCheck(){return"success"}function TAOCheck(){return"success"}function appendFetchMetadata(httpRequest){if(!isURLPotentiallyTrustworthy(requestCurrentURL(httpRequest)))return;let header2=null;header2=httpRequest.mode,httpRequest.headersList.set("sec-fetch-mode",header2,!0)}function appendRequestOriginHeader(request){let serializedOrigin=request.origin;if(!(serializedOrigin==="client"||serializedOrigin===void 0)){if(request.responseTainting==="cors"||request.mode==="websocket")request.headersList.append("origin",serializedOrigin,!0);else if(request.method!=="GET"&&request.method!=="HEAD"){switch(request.referrerPolicy){case"no-referrer":serializedOrigin=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":request.origin&&urlHasHttpsScheme(request.origin)&&!urlHasHttpsScheme(requestCurrentURL(request))&&(serializedOrigin=null);break;case"same-origin":sameOrigin(request,requestCurrentURL(request))||(serializedOrigin=null);break;default:}request.headersList.append("origin",serializedOrigin,!0)}}}function coarsenTime(timestamp,crossOriginIsolatedCapability){return timestamp}function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo,defaultStartTime,crossOriginIsolatedCapability){return!connectionTimingInfo?.startTime||connectionTimingInfo.startTime<defaultStartTime?{domainLookupStartTime:defaultStartTime,domainLookupEndTime:defaultStartTime,connectionStartTime:defaultStartTime,connectionEndTime:defaultStartTime,secureConnectionStartTime:defaultStartTime,ALPNNegotiatedProtocol:connectionTimingInfo?.ALPNNegotiatedProtocol}:{domainLookupStartTime:coarsenTime(connectionTimingInfo.domainLookupStartTime,crossOriginIsolatedCapability),domainLookupEndTime:coarsenTime(connectionTimingInfo.domainLookupEndTime,crossOriginIsolatedCapability),connectionStartTime:coarsenTime(connectionTimingInfo.connectionStartTime,crossOriginIsolatedCapability),connectionEndTime:coarsenTime(connectionTimingInfo.connectionEndTime,crossOriginIsolatedCapability),secureConnectionStartTime:coarsenTime(connectionTimingInfo.secureConnectionStartTime,crossOriginIsolatedCapability),ALPNNegotiatedProtocol:connectionTimingInfo.ALPNNegotiatedProtocol}}function coarsenedSharedCurrentTime(crossOriginIsolatedCapability){return coarsenTime(performance2.now(),crossOriginIsolatedCapability)}function createOpaqueTimingInfo(timingInfo){return{startTime:timingInfo.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:timingInfo.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}}function makePolicyContainer(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function clonePolicyContainer(policyContainer){return{referrerPolicy:policyContainer.referrerPolicy}}function determineRequestsReferrer(request){let policy=request.referrerPolicy;assert(policy);let referrerSource=null;if(request.referrer==="client"){let globalOrigin=getGlobalOrigin();if(!globalOrigin||globalOrigin.origin==="null")return"no-referrer";referrerSource=new URL(globalOrigin)}else webidl.is.URL(request.referrer)&&(referrerSource=request.referrer);let referrerURL=stripURLForReferrer(referrerSource),referrerOrigin=stripURLForReferrer(referrerSource,!0);switch(referrerURL.toString().length>4096&&(referrerURL=referrerOrigin),policy){case"no-referrer":return"no-referrer";case"origin":return referrerOrigin??stripURLForReferrer(referrerSource,!0);case"unsafe-url":return referrerURL;case"strict-origin":{let currentURL=requestCurrentURL(request);return isURLPotentiallyTrustworthy(referrerURL)&&!isURLPotentiallyTrustworthy(currentURL)?"no-referrer":referrerOrigin}case"strict-origin-when-cross-origin":{let currentURL=requestCurrentURL(request);return sameOrigin(referrerURL,currentURL)?referrerURL:isURLPotentiallyTrustworthy(referrerURL)&&!isURLPotentiallyTrustworthy(currentURL)?"no-referrer":referrerOrigin}case"same-origin":return sameOrigin(request,referrerURL)?referrerURL:"no-referrer";case"origin-when-cross-origin":return sameOrigin(request,referrerURL)?referrerURL:referrerOrigin;case"no-referrer-when-downgrade":{let currentURL=requestCurrentURL(request);return isURLPotentiallyTrustworthy(referrerURL)&&!isURLPotentiallyTrustworthy(currentURL)?"no-referrer":referrerURL}}}function stripURLForReferrer(url,originOnly=!1){return assert(webidl.is.URL(url)),url=new URL(url),urlIsLocal(url)?"no-referrer":(url.username="",url.password="",url.hash="",originOnly===!0&&(url.pathname="",url.search=""),url)}var isPotentialleTrustworthyIPv4=RegExp.prototype.test.bind(/^127\.(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){2}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)$/),isPotentiallyTrustworthyIPv6=RegExp.prototype.test.bind(/^(?:(?:0{1,4}:){7}|(?:0{1,4}:){1,6}:|::)0{0,3}1$/);function isOriginIPPotentiallyTrustworthy(origin){return origin.includes(":")?(origin[0]==="["&&origin[origin.length-1]==="]"&&(origin=origin.slice(1,-1)),isPotentiallyTrustworthyIPv6(origin)):isPotentialleTrustworthyIPv4(origin)}function isOriginPotentiallyTrustworthy(origin){return origin==null||origin==="null"?!1:(origin=new URL(origin),!!(origin.protocol==="https:"||origin.protocol==="wss:"||isOriginIPPotentiallyTrustworthy(origin.hostname)||origin.hostname==="localhost"||origin.hostname==="localhost."||origin.hostname.endsWith(".localhost")||origin.hostname.endsWith(".localhost.")||origin.protocol==="file:"))}function isURLPotentiallyTrustworthy(url){return webidl.is.URL(url)?url.href==="about:blank"||url.href==="about:srcdoc"||url.protocol==="data:"||url.protocol==="blob:"?!0:isOriginPotentiallyTrustworthy(url.origin):!1}function tryUpgradeRequestToAPotentiallyTrustworthyURL(request){}function sameOrigin(A,B){return A.origin===B.origin&&A.origin==="null"||A.protocol===B.protocol&&A.hostname===B.hostname&&A.port===B.port}function isAborted(fetchParams){return fetchParams.controller.state==="aborted"}function isCancelled(fetchParams){return fetchParams.controller.state==="aborted"||fetchParams.controller.state==="terminated"}function normalizeMethod(method){return normalizedMethodRecordsBase[method.toLowerCase()]??method}var esIteratorPrototype=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function createIterator(name,kInternalIterator,keyIndex=0,valueIndex=1){class FastIterableIterator{#target;#kind;#index;constructor(target,kind){this.#target=target,this.#kind=kind,this.#index=0}next(){if(typeof this!="object"||this===null||!(#target in this))throw new TypeError(`'next' called on an object that does not implement interface ${name} Iterator.`);let index3=this.#index,values=kInternalIterator(this.#target),len=values.length;if(index3>=len)return{value:void 0,done:!0};let{[keyIndex]:key,[valueIndex]:value}=values[index3];this.#index=index3+1;let result2;switch(this.#kind){case"key":result2=key;break;case"value":result2=value;break;case"key+value":result2=[key,value];break}return{value:result2,done:!1}}}return delete FastIterableIterator.prototype.constructor,Object.setPrototypeOf(FastIterableIterator.prototype,esIteratorPrototype),Object.defineProperties(FastIterableIterator.prototype,{[Symbol.toStringTag]:{writable:!1,enumerable:!1,configurable:!0,value:`${name} Iterator`},next:{writable:!0,enumerable:!0,configurable:!0}}),function(target,kind){return new FastIterableIterator(target,kind)}}function iteratorMixin(name,object,kInternalIterator,keyIndex=0,valueIndex=1,brandCheck){let makeIterator=createIterator(name,kInternalIterator,keyIndex,valueIndex),properties={keys:{writable:!0,enumerable:!0,configurable:!0,value:function(){return webidl.brandCheck(this,brandCheck),makeIterator(this,"key")}},values:{writable:!0,enumerable:!0,configurable:!0,value:function(){return webidl.brandCheck(this,brandCheck),makeIterator(this,"value")}},entries:{writable:!0,enumerable:!0,configurable:!0,value:function(){return webidl.brandCheck(this,brandCheck),makeIterator(this,"key+value")}},forEach:{writable:!0,enumerable:!0,configurable:!0,value:function(callbackfn,thisArg=globalThis){if(webidl.brandCheck(this,brandCheck),webidl.argumentLengthCheck(arguments,1,`${name}.forEach`),typeof callbackfn!="function")throw new TypeError(`Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`);for(let{0:key,1:value}of makeIterator(this,"key+value"))callbackfn.call(thisArg,value,key,this)}}};return Object.defineProperties(object.prototype,{...properties,[Symbol.iterator]:{writable:!0,enumerable:!1,configurable:!0,value:properties.entries.value}})}function fullyReadBody(body2,processBody,processBodyError){let successSteps=processBody,errorSteps=processBodyError;try{let reader=body2.stream.getReader();readAllBytes(reader,successSteps,errorSteps)}catch(e){errorSteps(e)}}function readableStreamClose(controller){try{controller.close(),controller.byobRequest?.respond(0)}catch(err){if(!err.message.includes("Controller is already closed")&&!err.message.includes("ReadableStream is already closed"))throw err}}async function readAllBytes(reader,successSteps,failureSteps){try{let bytes2=[],byteLength2=0;do{let{done,value:chunk}=await reader.read();if(done){successSteps(Buffer.concat(bytes2,byteLength2));return}if(!isUint8Array(chunk)){failureSteps(new TypeError("Received non-Uint8Array chunk"));return}bytes2.push(chunk),byteLength2+=chunk.length}while(!0)}catch(e){failureSteps(e)}}function urlIsLocal(url){assert("protocol"in url);let protocol=url.protocol;return protocol==="about:"||protocol==="blob:"||protocol==="data:"}function urlHasHttpsScheme(url){return typeof url=="string"&&url[5]===":"&&url[0]==="h"&&url[1]==="t"&&url[2]==="t"&&url[3]==="p"&&url[4]==="s"||url.protocol==="https:"}function urlIsHttpHttpsScheme(url){assert("protocol"in url);let protocol=url.protocol;return protocol==="http:"||protocol==="https:"}function simpleRangeHeaderValue(value,allowWhitespace){let data=value;if(!data.startsWith("bytes"))return"failure";let position={position:5};if(allowWhitespace&&collectASequenceOfCodePoints(char=>char===" "||char===" ",data,position),data.charCodeAt(position.position)!==61)return"failure";position.position++,allowWhitespace&&collectASequenceOfCodePoints(char=>char===" "||char===" ",data,position);let rangeStart=collectASequenceOfCodePoints(char=>{let code=char.charCodeAt(0);return code>=48&&code<=57},data,position),rangeStartValue=rangeStart.length?Number(rangeStart):null;if(allowWhitespace&&collectASequenceOfCodePoints(char=>char===" "||char===" ",data,position),data.charCodeAt(position.position)!==45)return"failure";position.position++,allowWhitespace&&collectASequenceOfCodePoints(char=>char===" "||char===" ",data,position);let rangeEnd=collectASequenceOfCodePoints(char=>{let code=char.charCodeAt(0);return code>=48&&code<=57},data,position),rangeEndValue=rangeEnd.length?Number(rangeEnd):null;return position.position<data.length||rangeEndValue===null&&rangeStartValue===null||rangeStartValue!==null&&rangeEndValue!==null&&rangeStartValue>rangeEndValue?"failure":{rangeStartValue,rangeEndValue}}function buildContentRange(rangeStart,rangeEnd,fullLength){let contentRange="bytes ";return contentRange+=isomorphicEncode(`${rangeStart}`),contentRange+="-",contentRange+=isomorphicEncode(`${rangeEnd}`),contentRange+="/",contentRange+=isomorphicEncode(`${fullLength}`),contentRange}var InflateStream=class extends Transform{#zlibOptions;constructor(zlibOptions){super(),this.#zlibOptions=zlibOptions}_transform(chunk,encoding,callback){if(!this._inflateStream){if(chunk.length===0){callback();return}this._inflateStream=(chunk[0]&15)===8?zlib.createInflate(this.#zlibOptions):zlib.createInflateRaw(this.#zlibOptions),this._inflateStream.on("data",this.push.bind(this)),this._inflateStream.on("end",()=>this.push(null)),this._inflateStream.on("error",err=>this.destroy(err))}this._inflateStream.write(chunk,encoding,callback)}_final(callback){this._inflateStream&&(this._inflateStream.end(),this._inflateStream=null),callback()}};function createInflate(zlibOptions){return new InflateStream(zlibOptions)}function extractMimeType(headers){let charset=null,essence=null,mimeType=null,values=getDecodeSplit("content-type",headers);if(values===null)return"failure";for(let value of values){let temporaryMimeType=parseMIMEType(value);temporaryMimeType==="failure"||temporaryMimeType.essence==="*/*"||(mimeType=temporaryMimeType,mimeType.essence!==essence?(charset=null,mimeType.parameters.has("charset")&&(charset=mimeType.parameters.get("charset")),essence=mimeType.essence):!mimeType.parameters.has("charset")&&charset!==null&&mimeType.parameters.set("charset",charset))}return mimeType??"failure"}function gettingDecodingSplitting(value){let input2=value,position={position:0},values=[],temporaryValue="";for(;position.position<input2.length;){if(temporaryValue+=collectASequenceOfCodePoints(char=>char!=='"'&&char!==",",input2,position),position.position<input2.length)if(input2.charCodeAt(position.position)===34){if(temporaryValue+=collectAnHTTPQuotedString(input2,position),position.position<input2.length)continue}else assert(input2.charCodeAt(position.position)===44),position.position++;temporaryValue=removeChars(temporaryValue,!0,!0,char=>char===9||char===32),values.push(temporaryValue),temporaryValue=""}return values}function getDecodeSplit(name,list){let value=list.get(name,!0);return value===null?null:gettingDecodingSplitting(value)}function hasAuthenticationEntry(request){return!1}function includesCredentials(url){return!!(url.username||url.password)}function isTraversableNavigable(navigable){return navigable!=null&&navigable!=="client"&&navigable!=="no-traversable"}var EnvironmentSettingsObjectBase=class{get baseUrl(){return getGlobalOrigin()}get origin(){return this.baseUrl?.origin}policyContainer=makePolicyContainer()},EnvironmentSettingsObject=class{settingsObject=new EnvironmentSettingsObjectBase},environmentSettingsObject=new EnvironmentSettingsObject;module.exports={isAborted,isCancelled,isValidEncodedURL,tryUpgradeRequestToAPotentiallyTrustworthyURL,clampAndCoarsenConnectionTimingInfo,coarsenedSharedCurrentTime,determineRequestsReferrer,makePolicyContainer,clonePolicyContainer,appendFetchMetadata,appendRequestOriginHeader,TAOCheck,corsCheck,crossOriginResourcePolicyCheck,createOpaqueTimingInfo,setRequestReferrerPolicyOnRedirect,isValidHTTPToken,requestBadPort,requestCurrentURL,responseURL,responseLocationURL,isURLPotentiallyTrustworthy,isValidReasonPhrase,sameOrigin,normalizeMethod,iteratorMixin,createIterator,isValidHeaderName,isValidHeaderValue,isErrorLike,fullyReadBody,readableStreamClose,urlIsLocal,urlHasHttpsScheme,urlIsHttpHttpsScheme,readAllBytes,simpleRangeHeaderValue,buildContentRange,createInflate,extractMimeType,getDecodeSplit,environmentSettingsObject,isOriginIPPotentiallyTrustworthy,hasAuthenticationEntry,includesCredentials,isTraversableNavigable}}});var require_runtime_features=__commonJS({"node_modules/undici/lib/util/runtime-features.js"(exports,module){"use strict";var lazyLoaders={__proto__:null,"node:crypto":()=>__require("node:crypto"),"node:sqlite":()=>__require("node:sqlite")};function detectRuntimeFeatureByNodeModule(moduleName){try{return lazyLoaders[moduleName](),!0}catch(err){if(err.code!=="ERR_UNKNOWN_BUILTIN_MODULE"&&err.code!=="ERR_NO_CRYPTO")throw err;return!1}}var runtimeFeaturesAsNodeModule=["crypto","sqlite"];function detectRuntimeFeature(feature){if(runtimeFeaturesAsNodeModule.includes(feature))return detectRuntimeFeatureByNodeModule(`node:${feature}`);throw new TypeError(`unknown feature: ${feature}`)}var RuntimeFeatures=class{#map=new Map;clear(){this.#map.clear()}has(feature){return this.#map.get(feature)??this.#detectRuntimeFeature(feature)}set(feature,value){if(runtimeFeaturesAsNodeModule.includes(feature)===!1)throw new TypeError(`unknown feature: ${feature}`);this.#map.set(feature,value)}#detectRuntimeFeature(feature){let result2=detectRuntimeFeature(feature);return this.#map.set(feature,result2),result2}},instance=new RuntimeFeatures;module.exports.runtimeFeatures=instance;module.exports.default=instance}});var require_formdata=__commonJS({"node_modules/undici/lib/web/fetch/formdata.js"(exports,module){"use strict";var{iteratorMixin}=require_util2(),{kEnumerableProperty}=require_util(),{webidl}=require_webidl(),nodeUtil=__require("node:util"),{runtimeFeatures}=require_runtime_features(),random=runtimeFeatures.has("crypto")?__require("node:crypto").randomInt:max=>Math.floor(Math.random()*max),getFormDataState,setFormDataState,getFormDataBoundary,FormData2=class{#state=[];#boundary=null;constructor(form=void 0){if(webidl.util.markAsUncloneable(this),form!==void 0)throw webidl.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]})}append(name,value,filename=void 0){webidl.brandCheck(this,webidl.is.FormData);let prefix="FormData.append";webidl.argumentLengthCheck(arguments,2,prefix),name=webidl.converters.USVString(name),arguments.length===3||webidl.is.Blob(value)?(value=webidl.converters.Blob(value,prefix,"value"),filename!==void 0&&(filename=webidl.converters.USVString(filename))):value=webidl.converters.USVString(value);let entry=makeEntry(name,value,filename);this.#state.push(entry)}delete(name){webidl.brandCheck(this,webidl.is.FormData),webidl.argumentLengthCheck(arguments,1,"FormData.delete"),name=webidl.converters.USVString(name),this.#state=this.#state.filter(entry=>entry.name!==name)}get(name){webidl.brandCheck(this,webidl.is.FormData),webidl.argumentLengthCheck(arguments,1,"FormData.get"),name=webidl.converters.USVString(name);let idx=this.#state.findIndex(entry=>entry.name===name);return idx===-1?null:this.#state[idx].value}getAll(name){return webidl.brandCheck(this,webidl.is.FormData),webidl.argumentLengthCheck(arguments,1,"FormData.getAll"),name=webidl.converters.USVString(name),this.#state.filter(entry=>entry.name===name).map(entry=>entry.value)}has(name){return webidl.brandCheck(this,webidl.is.FormData),webidl.argumentLengthCheck(arguments,1,"FormData.has"),name=webidl.converters.USVString(name),this.#state.findIndex(entry=>entry.name===name)!==-1}set(name,value,filename=void 0){webidl.brandCheck(this,webidl.is.FormData);let prefix="FormData.set";webidl.argumentLengthCheck(arguments,2,prefix),name=webidl.converters.USVString(name),arguments.length===3||webidl.is.Blob(value)?(value=webidl.converters.Blob(value,prefix,"value"),filename!==void 0&&(filename=webidl.converters.USVString(filename))):value=webidl.converters.USVString(value);let entry=makeEntry(name,value,filename),idx=this.#state.findIndex(entry2=>entry2.name===name);idx!==-1?this.#state=[...this.#state.slice(0,idx),entry,...this.#state.slice(idx+1).filter(entry2=>entry2.name!==name)]:this.#state.push(entry)}[nodeUtil.inspect.custom](depth,options){let state2=this.#state.reduce((a,b)=>(a[b.name]?Array.isArray(a[b.name])?a[b.name].push(b.value):a[b.name]=[a[b.name],b.value]:a[b.name]=b.value,a),{__proto__:null});options.depth??=depth,options.colors??=!0;let output=nodeUtil.formatWithOptions(options,state2);return`FormData ${output.slice(output.indexOf("]")+2)}`}static{getFormDataState=formData=>formData.#state,setFormDataState=(formData,newState)=>{formData.#state=newState},getFormDataBoundary=formData=>formData.#boundary??=`----formdata-undici-0${`${random(1e11)}`.padStart(11,"0")}`,webidl.is.FormData=arg=>arg!=null&&typeof arg=="object"&&#state in arg}};iteratorMixin("FormData",FormData2,getFormDataState,"name","value",webidl.is.FormData);Object.defineProperties(FormData2.prototype,{append:kEnumerableProperty,delete:kEnumerableProperty,get:kEnumerableProperty,getAll:kEnumerableProperty,has:kEnumerableProperty,set:kEnumerableProperty,[Symbol.toStringTag]:{value:"FormData",configurable:!0}});function makeEntry(name,value,filename){if(typeof value!="string"){if(webidl.is.File(value)||(value=new File([value],"blob",{type:value.type})),filename!==void 0){let options={type:value.type,lastModified:value.lastModified};value=new File([value],filename,options)}}return{name,value}}module.exports={FormData:FormData2,makeEntry,setFormDataState,getFormDataBoundary}}});var require_request=__commonJS({"node_modules/undici/lib/core/request.js"(exports,module){"use strict";var{InvalidArgumentError,NotSupportedError}=require_errors(),assert=__require("node:assert"),{isValidHTTPToken,isValidHeaderValue,isStream,destroy,isBuffer,isFormDataLike,isIterable,hasSafeIterator,isBlobLike,serializePathWithQuery,parseHeaders,assertRequestHandler,getServerName,normalizedMethodRecords,getProtocolFromUrlString}=require_util(),{channels}=require_diagnostics(),{headerNameLowerCasedRecord}=require_constants(),invalidPathRegex=/[^\u0021-\u00ff]/;function isValidContentLengthHeaderValue(val){if(typeof val!="string"||val.length===0)return!1;for(let i=0;i<val.length;i++){let charCode=val.charCodeAt(i);if(charCode<48||charCode>57)return!1}return!0}var kHandler=Symbol("handler"),kController=Symbol("controller"),kResume=Symbol("resume"),RequestController=class{#paused=!1;#reason=null;#aborted=!1;#abort;[kResume]=null;rawHeaders=null;rawTrailers=null;constructor(abort){this.#abort=abort}pause(){this.#paused=!0}resume(){this.#paused&&(this.#paused=!1,this[kResume]?.())}abort(reason){this.#aborted||(this.#aborted=!0,this.#reason=reason,this.#abort(reason))}get aborted(){return this.#aborted}get reason(){return this.#reason}get paused(){return this.#paused}},Request=class{constructor(origin,{path:path10,method,body:body2,headers,query,idempotent,blocking,upgrade,headersTimeout,bodyTimeout,reset,expectContinue,servername,throwOnError,maxRedirections,typeOfService},handler){if(typeof path10!="string")throw new InvalidArgumentError("path must be a string");if(path10[0]!=="/"&&!(path10.startsWith("http://")||path10.startsWith("https://"))&&method!=="CONNECT")throw new InvalidArgumentError("path must be an absolute URL or start with a slash");if(invalidPathRegex.test(path10))throw new InvalidArgumentError("invalid request path");if(typeof method!="string")throw new InvalidArgumentError("method must be a string");if(normalizedMethodRecords[method]===void 0&&!isValidHTTPToken(method))throw new InvalidArgumentError("invalid request method");if(upgrade&&typeof upgrade!="string")throw new InvalidArgumentError("upgrade must be a string");if(upgrade&&!isValidHeaderValue(upgrade))throw new InvalidArgumentError("invalid upgrade header");if(headersTimeout!=null&&(!Number.isFinite(headersTimeout)||headersTimeout<0))throw new InvalidArgumentError("invalid headersTimeout");if(bodyTimeout!=null&&(!Number.isFinite(bodyTimeout)||bodyTimeout<0))throw new InvalidArgumentError("invalid bodyTimeout");if(reset!=null&&typeof reset!="boolean")throw new InvalidArgumentError("invalid reset");if(expectContinue!=null&&typeof expectContinue!="boolean")throw new InvalidArgumentError("invalid expectContinue");if(throwOnError!=null)throw new InvalidArgumentError("invalid throwOnError");if(maxRedirections!=null&&maxRedirections!==0)throw new InvalidArgumentError("maxRedirections is not supported, use the redirect interceptor");if(typeOfService!=null&&(!Number.isInteger(typeOfService)||typeOfService<0||typeOfService>255))throw new InvalidArgumentError("typeOfService must be an integer between 0 and 255");if(this.headersTimeout=headersTimeout,this.bodyTimeout=bodyTimeout,this.method=method,this.typeOfService=typeOfService,this.abort=null,body2==null)this.body=null;else if(isStream(body2)){this.body=body2;let rState=this.body._readableState;(!rState||!rState.autoDestroy)&&(this.endHandler=function(){destroy(this)},this.body.on("end",this.endHandler)),this.errorHandler=err=>{this.abort?this.abort(err):this.error=err},this.body.on("error",this.errorHandler)}else if(isBuffer(body2))this.body=body2.byteLength?body2:null;else if(ArrayBuffer.isView(body2))this.body=body2.buffer.byteLength?Buffer.from(body2.buffer,body2.byteOffset,body2.byteLength):null;else if(body2 instanceof ArrayBuffer)this.body=body2.byteLength?Buffer.from(body2):null;else if(typeof body2=="string")this.body=body2.length?Buffer.from(body2):null;else if(isFormDataLike(body2)){if(!isUndiciFormData(body2))throw new InvalidArgumentError("body must be a FormData created by this undici package instance; FormData from other sources, such as the built-in FormData provided by Node.js, is not supported");this.body=body2}else if(isIterable(body2)||isBlobLike(body2))this.body=body2;else throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");if(this.completed=!1,this.aborted=!1,this.upgrade=upgrade||null,this.path=query?serializePathWithQuery(path10,query):path10,this.origin=origin,this.protocol=getProtocolFromUrlString(origin),this.idempotent=idempotent??(method==="HEAD"||method==="GET"||method==="QUERY"),this.blocking=blocking??this.method!=="HEAD",this.reset=reset??null,this.host=null,this.contentLength=null,this.contentType=null,this.headers=[],this.expectContinue=expectContinue??!1,Array.isArray(headers)){if(headers.length%2!==0)throw new InvalidArgumentError("headers array must be even");for(let i=0;i<headers.length;i+=2)processHeader(this,headers[i],headers[i+1])}else if(headers&&typeof headers=="object")if(hasSafeIterator(headers))for(let header2 of headers){if(!Array.isArray(header2)||header2.length!==2)throw new InvalidArgumentError("headers must be in key-value pair format");processHeader(this,header2[0],header2[1])}else{let keys=Object.keys(headers);for(let i=0;i<keys.length;++i)processHeader(this,keys[i],headers[keys[i]])}else if(headers!=null)throw new InvalidArgumentError("headers must be an object or an array");assertRequestHandler(handler,method,upgrade),this.servername=servername||getServerName(this.host)||null,this[kHandler]=handler,channels.create.hasSubscribers&&channels.create.publish({request:this})}onBodySent(chunk){if(channels.bodyChunkSent.hasSubscribers&&channels.bodyChunkSent.publish({request:this,chunk}),this[kHandler].onBodySent)try{return this[kHandler].onBodySent(chunk)}catch(err){this.abort(err)}}onRequestSent(){if(channels.bodySent.hasSubscribers&&channels.bodySent.publish({request:this}),this[kHandler].onRequestSent)try{return this[kHandler].onRequestSent()}catch(err){this.abort(err)}}onRequestStart(abort,context){if(assert(!this.aborted),assert(!this.completed),this[kController]=new RequestController(abort),this.error){this[kController].abort(this.error);return}return this.abort=abort,this[kHandler].onRequestStart(this[kController],context)}onResponseStarted(){return this[kHandler].onResponseStarted?.()}onResponseStart(statusCode,headers,resume,statusText){assert(!this.aborted),assert(!this.completed),channels.headers.hasSubscribers&&channels.headers.publish({request:this,response:{statusCode,headers,statusText}});let controller=this[kController];controller&&(controller[kResume]=resume,controller.rawHeaders=headers);let parsedHeaders=Array.isArray(headers)?parseHeaders(headers):headers;try{return this[kHandler].onResponseStart?.(controller,statusCode,parsedHeaders,statusText),!controller?.paused}catch(err){return this.abort(err),!1}}onResponseData(chunk){assert(!this.aborted),assert(!this.completed),channels.bodyChunkReceived.hasSubscribers&&channels.bodyChunkReceived.publish({request:this,chunk});let controller=this[kController];try{return this[kHandler].onResponseData?.(controller,chunk),!controller?.paused}catch(err){return this.abort(err),!1}}onRequestUpgrade(statusCode,headers,socket,statusText=""){this.onFinally(),assert(!this.aborted),assert(!this.completed),channels.headers.hasSubscribers&&channels.headers.publish({request:this,response:{statusCode,headers,statusText}});let controller=this[kController];controller&&(controller.rawHeaders=headers);let parsedHeaders=Array.isArray(headers)?parseHeaders(headers):headers,result2=this[kHandler].onRequestUpgrade?.(controller,statusCode,parsedHeaders,socket);return this.aborted||(this.completed=!0,channels.trailers.hasSubscribers&&channels.trailers.publish({request:this,trailers:[]})),result2}onResponseEnd(trailers){this.onFinally(),assert(!this.aborted),assert(!this.completed),this.completed=!0,channels.trailers.hasSubscribers&&channels.trailers.publish({request:this,trailers});let controller=this[kController];controller&&(controller.rawTrailers=trailers);let parsedTrailers=Array.isArray(trailers)?parseHeaders(trailers):trailers;try{return this[kHandler].onResponseEnd?.(controller,parsedTrailers)}catch(err){this.onResponseError(err)}}onResponseError(error){if(this.onFinally(),channels.error.hasSubscribers&&channels.error.publish({request:this,error}),this.aborted)return;this.aborted=!0;let controller=this[kController];return this[kHandler].onResponseError?.(controller,error)}onFinally(){this.errorHandler&&(this.body.off("error",this.errorHandler),this.errorHandler=null),this.endHandler&&(this.body.off("end",this.endHandler),this.endHandler=null)}addHeader(key,value){return processHeader(this,key,value),this}};function processHeader(request,key,val){if(val&&typeof val=="object"&&!Array.isArray(val))throw new InvalidArgumentError(`invalid ${key} header`);if(val===void 0)return;let headerName=headerNameLowerCasedRecord[key];if(headerName===void 0&&(headerName=key.toLowerCase(),headerNameLowerCasedRecord[headerName]===void 0&&!isValidHTTPToken(headerName)))throw new InvalidArgumentError("invalid header key");if(Array.isArray(val)){let arr2=[];for(let i=0;i<val.length;i++)if(typeof val[i]=="string"){if(!isValidHeaderValue(val[i]))throw new InvalidArgumentError(`invalid ${key} header`);arr2.push(val[i])}else if(val[i]===null)arr2.push("");else{if(typeof val[i]=="object")throw new InvalidArgumentError(`invalid ${key} header`);{let str3=`${val[i]}`;if(!isValidHeaderValue(str3))throw new InvalidArgumentError(`invalid ${key} header`);arr2.push(str3)}}val=arr2}else if(typeof val=="string"){if(!isValidHeaderValue(val))throw new InvalidArgumentError(`invalid ${key} header`)}else if(val===null)val="";else if(val=`${val}`,!isValidHeaderValue(val))throw new InvalidArgumentError(`invalid ${key} header`);if(headerName==="host"){if(request.host!==null)throw new InvalidArgumentError("duplicate host header");if(typeof val!="string")throw new InvalidArgumentError("invalid host header");request.host=val}else if(headerName==="content-length"){if(request.contentLength!==null)throw new InvalidArgumentError("duplicate content-length header");if(!isValidContentLengthHeaderValue(val))throw new InvalidArgumentError("invalid content-length header");request.contentLength=parseInt(val,10)}else if(request.contentType===null&&headerName==="content-type")request.contentType=val,request.headers.push(key,val);else{if(headerName==="transfer-encoding"||headerName==="keep-alive"||headerName==="upgrade")throw new InvalidArgumentError(`invalid ${headerName} header`);if(headerName==="connection"){let value=typeof val=="string"?val:null;if(value===null)throw new InvalidArgumentError("invalid connection header");for(let token of value.toLowerCase().split(",")){let trimmed=token.trim();if(!isValidHTTPToken(trimmed))throw new InvalidArgumentError("invalid connection header");trimmed==="close"&&(request.reset=!0)}}else{if(headerName==="expect")throw new NotSupportedError("expect header not supported");request.headers.push(key,val)}}}var isFormData;function isUndiciFormData(body2){return isFormData===void 0&&(require_formdata(),isFormData=require_webidl().webidl.is.FormData),isFormData(body2)}module.exports=Request}});var require_dispatcher=__commonJS({"node_modules/undici/lib/dispatcher/dispatcher.js"(exports,module){"use strict";var EventEmitter3=__require("node:events"),{kOriginless,kUrl}=require_symbols(),Dispatcher=class extends EventEmitter3{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}compose(...args){let interceptors=Array.isArray(args[0])?args[0]:args,interceptorOrigin=this[kOriginless]===!0?null:this[kUrl]?.origin,dispatch=this.dispatch.bind(this);for(let interceptor of interceptors)if(interceptor!=null){if(typeof interceptor!="function")throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`);if(dispatch=interceptor(dispatch,interceptorOrigin),dispatch==null||typeof dispatch!="function"||dispatch.length!==2)throw new TypeError("invalid interceptor")}let originalDispatch=dispatch,self=this;return dispatch=function(opts,handler){return opts&&typeof opts=="object"&&!opts.origin&&self[kUrl]&&(opts=Object.assign({},opts,{origin:self[kUrl].origin})),originalDispatch(opts,handler)},new Proxy(this,{get:(target,key)=>key==="dispatch"?dispatch:target[key]})}};module.exports=Dispatcher}});var require_dispatcher_base=__commonJS({"node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports,module){"use strict";var buffer=__require("node:buffer"),Dispatcher=require_dispatcher(),{ClientDestroyedError,ClientClosedError,InvalidArgumentError}=require_errors(),{kDestroy,kClose,kClosed,kDestroyed,kDispatch}=require_symbols(),{defaultWebSocketMaxFragments,defaultWebSocketMaxPayloadSize}=require_constants(),kOnDestroyed=Symbol("onDestroyed"),kOnClosed=Symbol("onClosed"),kWebSocketOptions=Symbol("webSocketOptions"),kEventSourceOptions=Symbol("eventSourceOptions"),DispatcherBase=class extends Dispatcher{[kDestroyed]=!1;[kOnDestroyed]=null;[kClosed]=!1;[kOnClosed]=null;constructor(opts){super(),this[kWebSocketOptions]=opts?.webSocket??{},this[kEventSourceOptions]=opts?.eventSource??{}}get webSocketOptions(){return{maxFragments:this[kWebSocketOptions].maxFragments??defaultWebSocketMaxFragments,maxPayloadSize:this[kWebSocketOptions].maxPayloadSize??defaultWebSocketMaxPayloadSize}}get eventSourceOptions(){return{maxEventSize:this[kEventSourceOptions].maxEventSize??buffer.kStringMaxLength}}get destroyed(){return this[kDestroyed]}get closed(){return this[kClosed]}close(callback){if(callback===void 0)return new Promise((resolve18,reject)=>{this.close((err,data)=>err?reject(err):resolve18(data))});if(typeof callback!="function")throw new InvalidArgumentError("invalid callback");if(this[kDestroyed]){let err=new ClientDestroyedError;queueMicrotask(()=>callback(err,null));return}if(this[kClosed]){this[kOnClosed]?this[kOnClosed].push(callback):queueMicrotask(()=>callback(null,null));return}this[kClosed]=!0,this[kOnClosed]??=[],this[kOnClosed].push(callback);let onClosed=()=>{let callbacks=this[kOnClosed];this[kOnClosed]=null;for(let i=0;i<callbacks.length;i++)callbacks[i](null,null)};this[kClose]().then(()=>this.destroy()).then(()=>queueMicrotask(onClosed))}destroy(err,callback){if(typeof err=="function"&&(callback=err,err=null),callback===void 0)return new Promise((resolve18,reject)=>{this.destroy(err,(err2,data)=>err2?reject(err2):resolve18(data))});if(typeof callback!="function")throw new InvalidArgumentError("invalid callback");if(this[kDestroyed]){this[kOnDestroyed]?this[kOnDestroyed].push(callback):queueMicrotask(()=>callback(null,null));return}err||(err=new ClientDestroyedError),this[kDestroyed]=!0,this[kOnDestroyed]??=[],this[kOnDestroyed].push(callback);let onDestroyed=()=>{let callbacks=this[kOnDestroyed];this[kOnDestroyed]=null;for(let i=0;i<callbacks.length;i++)callbacks[i](null,null)};this[kDestroy](err).then(()=>queueMicrotask(onDestroyed))}dispatch(opts,handler){if(!handler||typeof handler!="object")throw new InvalidArgumentError("handler must be an object");try{if(!opts||typeof opts!="object")throw new InvalidArgumentError("opts must be an object.");if(opts.dispatcher)throw new InvalidArgumentError("opts.dispatcher is not supported by instance methods. Pass opts.dispatcher to the top-level undici functions or call the dispatcher instance method directly.");if(this[kDestroyed]||this[kOnDestroyed])throw new ClientDestroyedError;if(this[kClosed])throw new ClientClosedError;return this[kDispatch](opts,handler)}catch(err){if(typeof handler.onResponseError!="function")throw err;return handler.onResponseError(null,err),!1}}};module.exports=DispatcherBase}});var require_connect=__commonJS({"node_modules/undici/lib/core/connect.js"(exports,module){"use strict";var net=__require("node:net"),assert=__require("node:assert"),util=require_util(),{InvalidArgumentError,ConnectTimeoutError}=require_errors(),tls,SessionCache=class{constructor(maxCachedSessions){this._maxCachedSessions=maxCachedSessions,this._sessionCache=new Map,this._sessionRegistry=new FinalizationRegistry(key=>{if(this._sessionCache.size<this._maxCachedSessions)return;let ref=this._sessionCache.get(key);ref!==void 0&&ref.deref()===void 0&&this._sessionCache.delete(key)})}get(sessionKey){let ref=this._sessionCache.get(sessionKey);return ref?ref.deref():null}set(sessionKey,session){if(this._maxCachedSessions!==0){if(this._sessionCache.has(sessionKey))this._sessionCache.delete(sessionKey);else if(this._sessionCache.size>=this._maxCachedSessions){let evicted=!1;for(let[key,ref]of this._sessionCache)if(ref.deref()===void 0){this._sessionCache.delete(key),evicted=!0;break}if(!evicted){let oldest=this._sessionCache.keys().next();oldest.done||this._sessionCache.delete(oldest.value)}}this._sessionCache.set(sessionKey,new WeakRef(session)),this._sessionRegistry.register(session,sessionKey)}}};function buildConnector({allowH2,preferH2,useH2c,maxCachedSessions,socketPath,timeout,session:customSession,...opts}){if(maxCachedSessions!=null&&(!Number.isInteger(maxCachedSessions)||maxCachedSessions<0))throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero");let options={path:socketPath,...opts},sessionCache=new SessionCache(maxCachedSessions??100);return timeout=timeout??1e4,allowH2=allowH2??!0,function({hostname,host,protocol,port,servername,localAddress,httpSocket},callback){let socket;if(protocol==="https:"){tls||(tls=__require("node:tls")),servername=servername||options.servername||util.getServerName(host)||null;let sessionKey=servername||hostname;assert(sessionKey);let session=customSession||sessionCache.get(sessionKey)||null;port=port||443,socket=tls.connect({highWaterMark:16384,...options,servername,session,localAddress,ALPNProtocols:allowH2?preferH2?["h2","http/1.1"]:["http/1.1","h2"]:["http/1.1"],socket:httpSocket,port,host:hostname}),socket.on("session",function(session2){sessionCache.set(sessionKey,session2)})}else{assert(!httpSocket,"httpSocket can only be sent on TLS update"),port=port||80;let connectOptions={highWaterMark:64*1024,...options,localAddress,port,host:hostname},family=net.isIP(hostname);family!==0&&servername&&servername!==hostname&&(connectOptions.host=servername,connectOptions.lookup=(_hostname,lookupOptions,cb)=>{lookupOptions.all?cb(null,[{address:hostname,family}]):cb(null,hostname,family)}),socket=net.connect(connectOptions),useH2c===!0&&(socket.alpnProtocol="h2")}if(options.keepAlive==null||options.keepAlive){let keepAliveInitialDelay=options.keepAliveInitialDelay===void 0?6e4:options.keepAliveInitialDelay;socket.setKeepAlive(!0,keepAliveInitialDelay)}let clearConnectTimeout=util.setupConnectTimeout(new WeakRef(socket),{timeout,hostname,port});return socket.setNoDelay(!0).once(protocol==="https:"?"secureConnect":"connect",function(){if(queueMicrotask(clearConnectTimeout),callback){let cb=callback;callback=null,cb(null,this)}}).on("error",function(err){if(queueMicrotask(clearConnectTimeout),callback){let cb=callback;callback=null,cb(maybeNormalizeConnectError(err,this,{timeout,hostname,port}))}}),socket}}function maybeNormalizeConnectError(err,socket,opts){if(err instanceof AggregateError&&(err.code==="ETIMEDOUT"||err.errors.some(e=>e!=null&&e.code==="ETIMEDOUT"))){let message="Connect Timeout Error";Array.isArray(socket.autoSelectFamilyAttemptedAddresses)?message+=` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`:message+=` (attempted address: ${opts.hostname}:${opts.port},`,message+=` timeout: ${opts.timeout}ms)`;let wrapped=new ConnectTimeoutError(message);return wrapped.cause=err,wrapped}return err}module.exports=buildConnector}});var require_utils=__commonJS({"node_modules/undici/lib/llhttp/utils.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.enumToMap=enumToMap;function enumToMap(obj2,filter2=[],exceptions=[]){let emptyFilter=(filter2?.length??0)===0,emptyExceptions=(exceptions?.length??0)===0;return Object.fromEntries(Object.entries(obj2).filter(([,value])=>typeof value=="number"&&(emptyFilter||filter2.includes(value))&&(emptyExceptions||!exceptions.includes(value))))}}});var require_constants3=__commonJS({"node_modules/undici/lib/llhttp/constants.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.SPECIAL_HEADERS=exports.MINOR=exports.MAJOR=exports.HTAB_SP_VCHAR_OBS_TEXT=exports.QUOTED_STRING=exports.CONNECTION_TOKEN_CHARS=exports.HEADER_CHARS=exports.TOKEN=exports.HEX=exports.URL_CHAR=exports.USERINFO_CHARS=exports.MARK=exports.ALPHANUM=exports.NUM=exports.HEX_MAP=exports.NUM_MAP=exports.ALPHA=exports.STATUSES_HTTP=exports.H_METHOD_MAP=exports.METHOD_MAP=exports.METHODS_RTSP=exports.METHODS_ICE=exports.METHODS_HTTP=exports.HEADER_STATE=exports.FINISH=exports.STATUSES=exports.METHODS=exports.LENIENT_FLAGS=exports.FLAGS=exports.TYPE=exports.ERROR=void 0;var utils_1=require_utils();exports.ERROR={OK:0,INTERNAL:1,STRICT:2,CR_EXPECTED:25,LF_EXPECTED:3,UNEXPECTED_CONTENT_LENGTH:4,UNEXPECTED_SPACE:30,CLOSED_CONNECTION:5,INVALID_METHOD:6,INVALID_URL:7,INVALID_CONSTANT:8,INVALID_VERSION:9,INVALID_HEADER_TOKEN:10,INVALID_CONTENT_LENGTH:11,INVALID_CHUNK_SIZE:12,INVALID_STATUS:13,INVALID_EOF_STATE:14,INVALID_TRANSFER_ENCODING:15,CB_MESSAGE_BEGIN:16,CB_HEADERS_COMPLETE:17,CB_MESSAGE_COMPLETE:18,CB_CHUNK_HEADER:19,CB_CHUNK_COMPLETE:20,PAUSED:21,PAUSED_UPGRADE:22,PAUSED_H2_UPGRADE:23,USER:24,CB_URL_COMPLETE:26,CB_STATUS_COMPLETE:27,CB_METHOD_COMPLETE:32,CB_VERSION_COMPLETE:33,CB_HEADER_FIELD_COMPLETE:28,CB_HEADER_VALUE_COMPLETE:29,CB_CHUNK_EXTENSION_NAME_COMPLETE:34,CB_CHUNK_EXTENSION_VALUE_COMPLETE:35,CB_RESET:31,CB_PROTOCOL_COMPLETE:38};exports.TYPE={BOTH:0,REQUEST:1,RESPONSE:2};exports.FLAGS={CONNECTION_KEEP_ALIVE:1,CONNECTION_CLOSE:2,CONNECTION_UPGRADE:4,CHUNKED:8,UPGRADE:16,CONTENT_LENGTH:32,SKIPBODY:64,TRAILING:128,TRANSFER_ENCODING:512};exports.LENIENT_FLAGS={HEADERS:1,CHUNKED_LENGTH:2,KEEP_ALIVE:4,TRANSFER_ENCODING:8,VERSION:16,DATA_AFTER_CLOSE:32,OPTIONAL_LF_AFTER_CR:64,OPTIONAL_CRLF_AFTER_CHUNK:128,OPTIONAL_CR_BEFORE_LF:256,SPACES_AFTER_CHUNK_SIZE:512};exports.METHODS={DELETE:0,GET:1,HEAD:2,POST:3,PUT:4,CONNECT:5,OPTIONS:6,TRACE:7,COPY:8,LOCK:9,MKCOL:10,MOVE:11,PROPFIND:12,PROPPATCH:13,SEARCH:14,UNLOCK:15,BIND:16,REBIND:17,UNBIND:18,ACL:19,REPORT:20,MKACTIVITY:21,CHECKOUT:22,MERGE:23,"M-SEARCH":24,NOTIFY:25,SUBSCRIBE:26,UNSUBSCRIBE:27,PATCH:28,PURGE:29,MKCALENDAR:30,LINK:31,UNLINK:32,SOURCE:33,PRI:34,DESCRIBE:35,ANNOUNCE:36,SETUP:37,PLAY:38,PAUSE:39,TEARDOWN:40,GET_PARAMETER:41,SET_PARAMETER:42,REDIRECT:43,RECORD:44,FLUSH:45,QUERY:46};exports.STATUSES={CONTINUE:100,SWITCHING_PROTOCOLS:101,PROCESSING:102,EARLY_HINTS:103,RESPONSE_IS_STALE:110,REVALIDATION_FAILED:111,DISCONNECTED_OPERATION:112,HEURISTIC_EXPIRATION:113,MISCELLANEOUS_WARNING:199,OK:200,CREATED:201,ACCEPTED:202,NON_AUTHORITATIVE_INFORMATION:203,NO_CONTENT:204,RESET_CONTENT:205,PARTIAL_CONTENT:206,MULTI_STATUS:207,ALREADY_REPORTED:208,TRANSFORMATION_APPLIED:214,IM_USED:226,MISCELLANEOUS_PERSISTENT_WARNING:299,MULTIPLE_CHOICES:300,MOVED_PERMANENTLY:301,FOUND:302,SEE_OTHER:303,NOT_MODIFIED:304,USE_PROXY:305,SWITCH_PROXY:306,TEMPORARY_REDIRECT:307,PERMANENT_REDIRECT:308,BAD_REQUEST:400,UNAUTHORIZED:401,PAYMENT_REQUIRED:402,FORBIDDEN:403,NOT_FOUND:404,METHOD_NOT_ALLOWED:405,NOT_ACCEPTABLE:406,PROXY_AUTHENTICATION_REQUIRED:407,REQUEST_TIMEOUT:408,CONFLICT:409,GONE:410,LENGTH_REQUIRED:411,PRECONDITION_FAILED:412,PAYLOAD_TOO_LARGE:413,URI_TOO_LONG:414,UNSUPPORTED_MEDIA_TYPE:415,RANGE_NOT_SATISFIABLE:416,EXPECTATION_FAILED:417,IM_A_TEAPOT:418,PAGE_EXPIRED:419,ENHANCE_YOUR_CALM:420,MISDIRECTED_REQUEST:421,UNPROCESSABLE_ENTITY:422,LOCKED:423,FAILED_DEPENDENCY:424,TOO_EARLY:425,UPGRADE_REQUIRED:426,PRECONDITION_REQUIRED:428,TOO_MANY_REQUESTS:429,REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL:430,REQUEST_HEADER_FIELDS_TOO_LARGE:431,LOGIN_TIMEOUT:440,NO_RESPONSE:444,RETRY_WITH:449,BLOCKED_BY_PARENTAL_CONTROL:450,UNAVAILABLE_FOR_LEGAL_REASONS:451,CLIENT_CLOSED_LOAD_BALANCED_REQUEST:460,INVALID_X_FORWARDED_FOR:463,REQUEST_HEADER_TOO_LARGE:494,SSL_CERTIFICATE_ERROR:495,SSL_CERTIFICATE_REQUIRED:496,HTTP_REQUEST_SENT_TO_HTTPS_PORT:497,INVALID_TOKEN:498,CLIENT_CLOSED_REQUEST:499,INTERNAL_SERVER_ERROR:500,NOT_IMPLEMENTED:501,BAD_GATEWAY:502,SERVICE_UNAVAILABLE:503,GATEWAY_TIMEOUT:504,HTTP_VERSION_NOT_SUPPORTED:505,VARIANT_ALSO_NEGOTIATES:506,INSUFFICIENT_STORAGE:507,LOOP_DETECTED:508,BANDWIDTH_LIMIT_EXCEEDED:509,NOT_EXTENDED:510,NETWORK_AUTHENTICATION_REQUIRED:511,WEB_SERVER_UNKNOWN_ERROR:520,WEB_SERVER_IS_DOWN:521,CONNECTION_TIMEOUT:522,ORIGIN_IS_UNREACHABLE:523,TIMEOUT_OCCURED:524,SSL_HANDSHAKE_FAILED:525,INVALID_SSL_CERTIFICATE:526,RAILGUN_ERROR:527,SITE_IS_OVERLOADED:529,SITE_IS_FROZEN:530,IDENTITY_PROVIDER_AUTHENTICATION_ERROR:561,NETWORK_READ_TIMEOUT:598,NETWORK_CONNECT_TIMEOUT:599};exports.FINISH={SAFE:0,SAFE_WITH_CB:1,UNSAFE:2};exports.HEADER_STATE={GENERAL:0,CONNECTION:1,CONTENT_LENGTH:2,TRANSFER_ENCODING:3,UPGRADE:4,CONNECTION_KEEP_ALIVE:5,CONNECTION_CLOSE:6,CONNECTION_UPGRADE:7,TRANSFER_ENCODING_CHUNKED:8};exports.METHODS_HTTP=[exports.METHODS.DELETE,exports.METHODS.GET,exports.METHODS.HEAD,exports.METHODS.POST,exports.METHODS.PUT,exports.METHODS.CONNECT,exports.METHODS.OPTIONS,exports.METHODS.TRACE,exports.METHODS.COPY,exports.METHODS.LOCK,exports.METHODS.MKCOL,exports.METHODS.MOVE,exports.METHODS.PROPFIND,exports.METHODS.PROPPATCH,exports.METHODS.SEARCH,exports.METHODS.UNLOCK,exports.METHODS.BIND,exports.METHODS.REBIND,exports.METHODS.UNBIND,exports.METHODS.ACL,exports.METHODS.REPORT,exports.METHODS.MKACTIVITY,exports.METHODS.CHECKOUT,exports.METHODS.MERGE,exports.METHODS["M-SEARCH"],exports.METHODS.NOTIFY,exports.METHODS.SUBSCRIBE,exports.METHODS.UNSUBSCRIBE,exports.METHODS.PATCH,exports.METHODS.PURGE,exports.METHODS.MKCALENDAR,exports.METHODS.LINK,exports.METHODS.UNLINK,exports.METHODS.PRI,exports.METHODS.SOURCE,exports.METHODS.QUERY];exports.METHODS_ICE=[exports.METHODS.SOURCE];exports.METHODS_RTSP=[exports.METHODS.OPTIONS,exports.METHODS.DESCRIBE,exports.METHODS.ANNOUNCE,exports.METHODS.SETUP,exports.METHODS.PLAY,exports.METHODS.PAUSE,exports.METHODS.TEARDOWN,exports.METHODS.GET_PARAMETER,exports.METHODS.SET_PARAMETER,exports.METHODS.REDIRECT,exports.METHODS.RECORD,exports.METHODS.FLUSH,exports.METHODS.GET,exports.METHODS.POST];exports.METHOD_MAP=(0,utils_1.enumToMap)(exports.METHODS);exports.H_METHOD_MAP=Object.fromEntries(Object.entries(exports.METHODS).filter(([k])=>k.startsWith("H")));exports.STATUSES_HTTP=[exports.STATUSES.CONTINUE,exports.STATUSES.SWITCHING_PROTOCOLS,exports.STATUSES.PROCESSING,exports.STATUSES.EARLY_HINTS,exports.STATUSES.RESPONSE_IS_STALE,exports.STATUSES.REVALIDATION_FAILED,exports.STATUSES.DISCONNECTED_OPERATION,exports.STATUSES.HEURISTIC_EXPIRATION,exports.STATUSES.MISCELLANEOUS_WARNING,exports.STATUSES.OK,exports.STATUSES.CREATED,exports.STATUSES.ACCEPTED,exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,exports.STATUSES.NO_CONTENT,exports.STATUSES.RESET_CONTENT,exports.STATUSES.PARTIAL_CONTENT,exports.STATUSES.MULTI_STATUS,exports.STATUSES.ALREADY_REPORTED,exports.STATUSES.TRANSFORMATION_APPLIED,exports.STATUSES.IM_USED,exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,exports.STATUSES.MULTIPLE_CHOICES,exports.STATUSES.MOVED_PERMANENTLY,exports.STATUSES.FOUND,exports.STATUSES.SEE_OTHER,exports.STATUSES.NOT_MODIFIED,exports.STATUSES.USE_PROXY,exports.STATUSES.SWITCH_PROXY,exports.STATUSES.TEMPORARY_REDIRECT,exports.STATUSES.PERMANENT_REDIRECT,exports.STATUSES.BAD_REQUEST,exports.STATUSES.UNAUTHORIZED,exports.STATUSES.PAYMENT_REQUIRED,exports.STATUSES.FORBIDDEN,exports.STATUSES.NOT_FOUND,exports.STATUSES.METHOD_NOT_ALLOWED,exports.STATUSES.NOT_ACCEPTABLE,exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,exports.STATUSES.REQUEST_TIMEOUT,exports.STATUSES.CONFLICT,exports.STATUSES.GONE,exports.STATUSES.LENGTH_REQUIRED,exports.STATUSES.PRECONDITION_FAILED,exports.STATUSES.PAYLOAD_TOO_LARGE,exports.STATUSES.URI_TOO_LONG,exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,exports.STATUSES.RANGE_NOT_SATISFIABLE,exports.STATUSES.EXPECTATION_FAILED,exports.STATUSES.IM_A_TEAPOT,exports.STATUSES.PAGE_EXPIRED,exports.STATUSES.ENHANCE_YOUR_CALM,exports.STATUSES.MISDIRECTED_REQUEST,exports.STATUSES.UNPROCESSABLE_ENTITY,exports.STATUSES.LOCKED,exports.STATUSES.FAILED_DEPENDENCY,exports.STATUSES.TOO_EARLY,exports.STATUSES.UPGRADE_REQUIRED,exports.STATUSES.PRECONDITION_REQUIRED,exports.STATUSES.TOO_MANY_REQUESTS,exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,exports.STATUSES.LOGIN_TIMEOUT,exports.STATUSES.NO_RESPONSE,exports.STATUSES.RETRY_WITH,exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,exports.STATUSES.INVALID_X_FORWARDED_FOR,exports.STATUSES.REQUEST_HEADER_TOO_LARGE,exports.STATUSES.SSL_CERTIFICATE_ERROR,exports.STATUSES.SSL_CERTIFICATE_REQUIRED,exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,exports.STATUSES.INVALID_TOKEN,exports.STATUSES.CLIENT_CLOSED_REQUEST,exports.STATUSES.INTERNAL_SERVER_ERROR,exports.STATUSES.NOT_IMPLEMENTED,exports.STATUSES.BAD_GATEWAY,exports.STATUSES.SERVICE_UNAVAILABLE,exports.STATUSES.GATEWAY_TIMEOUT,exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,exports.STATUSES.VARIANT_ALSO_NEGOTIATES,exports.STATUSES.INSUFFICIENT_STORAGE,exports.STATUSES.LOOP_DETECTED,exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,exports.STATUSES.NOT_EXTENDED,exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,exports.STATUSES.WEB_SERVER_IS_DOWN,exports.STATUSES.CONNECTION_TIMEOUT,exports.STATUSES.ORIGIN_IS_UNREACHABLE,exports.STATUSES.TIMEOUT_OCCURED,exports.STATUSES.SSL_HANDSHAKE_FAILED,exports.STATUSES.INVALID_SSL_CERTIFICATE,exports.STATUSES.RAILGUN_ERROR,exports.STATUSES.SITE_IS_OVERLOADED,exports.STATUSES.SITE_IS_FROZEN,exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,exports.STATUSES.NETWORK_READ_TIMEOUT,exports.STATUSES.NETWORK_CONNECT_TIMEOUT];exports.ALPHA=[];for(let i=65;i<=90;i++)exports.ALPHA.push(String.fromCharCode(i)),exports.ALPHA.push(String.fromCharCode(i+32));exports.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};exports.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};exports.NUM=["0","1","2","3","4","5","6","7","8","9"];exports.ALPHANUM=exports.ALPHA.concat(exports.NUM);exports.MARK=["-","_",".","!","~","*","'","(",")"];exports.USERINFO_CHARS=exports.ALPHANUM.concat(exports.MARK).concat(["%",";",":","&","=","+","$",","]);exports.URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(exports.ALPHANUM);exports.HEX=exports.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);exports.TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(exports.ALPHANUM);exports.HEADER_CHARS=[" "];for(let i=32;i<=255;i++)i!==127&&exports.HEADER_CHARS.push(i);exports.CONNECTION_TOKEN_CHARS=exports.HEADER_CHARS.filter(c=>c!==44);exports.QUOTED_STRING=[" "," "];for(let i=33;i<=255;i++)i!==34&&i!==92&&exports.QUOTED_STRING.push(i);exports.HTAB_SP_VCHAR_OBS_TEXT=[" "," "];for(let i=33;i<=126;i++)exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);for(let i=128;i<=255;i++)exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);exports.MAJOR=exports.NUM_MAP;exports.MINOR=exports.MAJOR;exports.SPECIAL_HEADERS={connection:exports.HEADER_STATE.CONNECTION,"content-length":exports.HEADER_STATE.CONTENT_LENGTH,"proxy-connection":exports.HEADER_STATE.CONNECTION,"transfer-encoding":exports.HEADER_STATE.TRANSFER_ENCODING,upgrade:exports.HEADER_STATE.UPGRADE};exports.default={ERROR:exports.ERROR,TYPE:exports.TYPE,FLAGS:exports.FLAGS,LENIENT_FLAGS:exports.LENIENT_FLAGS,METHODS:exports.METHODS,STATUSES:exports.STATUSES,FINISH:exports.FINISH,HEADER_STATE:exports.HEADER_STATE,ALPHA:exports.ALPHA,NUM_MAP:exports.NUM_MAP,HEX_MAP:exports.HEX_MAP,NUM:exports.NUM,ALPHANUM:exports.ALPHANUM,MARK:exports.MARK,USERINFO_CHARS:exports.USERINFO_CHARS,URL_CHAR:exports.URL_CHAR,HEX:exports.HEX,TOKEN:exports.TOKEN,HEADER_CHARS:exports.HEADER_CHARS,CONNECTION_TOKEN_CHARS:exports.CONNECTION_TOKEN_CHARS,QUOTED_STRING:exports.QUOTED_STRING,HTAB_SP_VCHAR_OBS_TEXT:exports.HTAB_SP_VCHAR_OBS_TEXT,MAJOR:exports.MAJOR,MINOR:exports.MINOR,SPECIAL_HEADERS:exports.SPECIAL_HEADERS,METHODS_HTTP:exports.METHODS_HTTP,METHODS_ICE:exports.METHODS_ICE,METHODS_RTSP:exports.METHODS_RTSP,METHOD_MAP:exports.METHOD_MAP,H_METHOD_MAP:exports.H_METHOD_MAP,STATUSES_HTTP:exports.STATUSES_HTTP}}});var require_simd=__commonJS({"node_modules/undici/lib/milo/simd.js"(exports,module){var wasmModule=new WebAssembly.Module(Buffer.from("AGFzbQEAAAABQgtgA39/fwBgAX8Bf2ACf38AYAF/AGABfwF+YAJ/fgBgBH9/f38AYAABf2AIf39/f39/f3wAYAN/f38Bf2ACf38BfwKUBBwDZW52CG9uX2Vycm9yAAADZW52Cm9uX2hlYWRlcnMACANlbnYJb25fZmluaXNoAAADZW52EG9uX21lc3NhZ2Vfc3RhcnQAAANlbnYTb25fbWVzc2FnZV9jb21wbGV0ZQAAA2Vudgpvbl9yZXF1ZXN0AAADZW52C29uX3Jlc3BvbnNlAAADZW52CG9uX3Jlc2V0AAADZW52CW9uX21ldGhvZAAAA2VudgZvbl91cmwAAANlbnYLb25fcHJvdG9jb2wAAANlbnYKb25fdmVyc2lvbgAAA2Vudglvbl9zdGF0dXMAAANlbnYJb25fcmVhc29uAAADZW52Dm9uX2hlYWRlcl9uYW1lAAADZW52D29uX2hlYWRlcl92YWx1ZQAAA2Vudgpvbl9jb25uZWN0AAADZW52Cm9uX3VwZ3JhZGUAAANlbnYPb25fY2h1bmtfbGVuZ3RoAAADZW52F29uX2NodW5rX2V4dGVuc2lvbl9uYW1lAAADZW52GG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQAAA2Vudghvbl9jaHVuawAAA2Vudgdvbl9ib2R5AAADZW52B29uX2RhdGEAAANlbnYPb25fdHJhaWxlcl9uYW1lAAADZW52EG9uX3RyYWlsZXJfdmFsdWUAAANlbnYLb25fdHJhaWxlcnMAAANlbnYPb25fc3RhdGVfY2hhbmdlAAADQkEGAAEDAwcCAwYDBAQBBAQBAQEEAQQEAQEBAQEBAQEBAQEBAQEHCQMCAwUFAgICBQICAgICAgIBAQEBCgECAwICAgUDAQARBgkBfwFBgIDAAAsHnQg5Bm1lbW9yeQIABWFsbG9jAB4FY2xlYXIAHwhjb21wbGV0ZQAgBmNyZWF0ZQAhB2RlYWxsb2MAIgdkZXN0cm95ACMEZmFpbAAkBmZpbmlzaAAlDmdldF9jaHVua19zaXplACYSZ2V0X2NvbnRlbnRfbGVuZ3RoACcOZ2V0X2Vycm9yX2NvZGUAKBlnZXRfZXJyb3JfZGVzY3JpcHRpb25fcmF3ACkUZ2V0X21heF9ib2R5X3BheWxvYWQAKhVnZXRfbWF4X2hlYWRlcl9sZW5ndGgAKxlnZXRfbWF4X3N0YXJ0X2xpbmVfbGVuZ3RoACwKZ2V0X21ldGhvZAAtCmdldF9wYXJzZWQALgxnZXRfcG9zaXRpb24ALxhnZXRfcmVtYWluaW5nX2NodW5rX3NpemUAMBxnZXRfcmVtYWluaW5nX2NvbnRlbnRfbGVuZ3RoADEJZ2V0X3N0YXRlADIKZ2V0X3N0YXR1cwAzHWhhc19jaHVua2VkX3RyYW5zZmVyX2VuY29kaW5nADQUaGFzX2Nvbm5lY3Rpb25fY2xvc2UANRZoYXNfY29ubmVjdGlvbl91cGdyYWRlADYSaGFzX2NvbnRlbnRfbGVuZ3RoADcMaGFzX3RyYWlsZXJzADgVaGFzX3RyYW5zZmVyX2VuY29kaW5nADkLaGFzX3VwZ3JhZGUAOg1pc19hdXRvZGV0ZWN0ADsKaXNfY29ubmVjdAA8CGlzX2RlYnVnAD0JaXNfcGF1c2VkAD4KaXNfcmVxdWVzdAA/Dm1pbG9faGFzX2RlYnVnAEAFcGFyc2UAQQVwYXVzZQBCBXJlc2V0AEMGcmVzdW1lAEQUc2V0X2FjdGl2ZV9jYWxsYmFja3MARRFzZXRfYWN0aXZlX2V2ZW50cwBGCXNldF9kZWJ1ZwBHDnNldF9pc19jb25uZWN0AEgOc2V0X2lzX3JlcXVlc3QASRRzZXRfbWF4X2JvZHlfcGF5bG9hZABKFXNldF9tYXhfaGVhZGVyX2xlbmd0aABLGXNldF9tYXhfc3RhcnRfbGluZV9sZW5ndGgATBVzZXRfc2hvdWxkX2F1dG9kZXRlY3QATSBzZXRfc2hvdWxkX2NvbnRpbnVlX3dpdGhvdXRfZGF0YQBOHHNldF9zaG91bGRfbWFuYWdlX3VuY29uc3VtZWQATxRzZXRfc2hvdWxkX3NraXBfYm9keQBQIHNldF9zaG91bGRfc3VzcGVuZF9hZnRlcl9oZWFkZXJzAFEcc2hvdWxkX2NvbnRpbnVlX3dpdGhvdXRfZGF0YQBSGHNob3VsZF9tYW5hZ2VfdW5jb25zdW1lZABTEHNob3VsZF9za2lwX2JvZHkAVBxzaG91bGRfc3VzcGVuZF9hZnRlcl9oZWFkZXJzAFUKoLQCQdgDAgJ/BXsCQCACIANPDQAgAS0AACEBIAMgAmsiBUEPTQRAIANBAWsDQCAB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QgBSBEAgBUEQakGBgARJDQEMGQsgA0EBOgAUIANCADcDOCAFQV5IDRgMAwsgAygCICEBIAMoAvgCIAVqQRc6AAAgAygC+AIgBWpBAWogACABajYAACADKAL4AiAFakEFakEANgAAIANBAToAFCADQgA3AzggBUEJaiEFDAILIAMoAiAhASADKAL4AiAFakEYOgAAIAMoAvgCIAVqQQFqIAE2AAAgAygC+AIgBWpBBWogADYAACAFQQlqIQULIAMgAykDOCAvfTcDOEEAIQcMAwsCQCAXRQ0AIDRCAFIEQCAFQXBIDRYgAygCICECIAMoAvgCIAVqIgFBBDoAACABQQVqQQA2AAAgAUEBaiAAIAJqNgAAIAVBCWohBQsgM1ANACAFQXBIDRUgAygCICECIAMoAvgCIAVqIgFBBzoAACABQQVqQQA2AAAgAUEBaiAAIAJqNgAAIAVBCWohBQsgA0EAOgAWIANBADoAFAJAAkAgAy0AUkEBRgRAIAMtABFBAXENAQsgAy0AUA0BIAMtACRBAkcNAkEAIQcMBAtBACEHIAMtACRBAkYNAyADQQ46ACQMAwsgGUUNASAFQXBIDRQgAygCICECIAMoAvgCIAVqIgFBAjoAACABQQVqQQA2AAAgAUEBaiACNgAAIAVBCWohBQwBC0EAIQcgA0EAOgAkDAELQQAhByADLQAkQQJGDQAgA0EBOgAkCyADIAMoAiAgAGo2AiAgACAJSw0NIAsgAGshCyAAIARqIQQgCSAAayEJDAkLIANBAToAFCAFQd//A2tB//97SQ0QAkAgF0UNACA0QgBSBEAgBUFwSA0SIAMoAiAhASADKAL4AiAFaiIAQQQ6AAAgAEEFakEANgAAIABBAWogATYAACAFQQlqIQULIDNQDQAgBUFwSA0RIAMoAiAhASADKAL4AiAFaiIAQQc6AAAgAEEFakEANgAAIABBAWogATYAACAFQQlqIQULIANBADoAFiADQQA6ABQLIAMtAFBBAUcNASAZBEAgBUFwSA0QIAMoAiAhASADKAL4AiAFaiIAQQI6AAAgAEEFakEANgAAIABBAWogATYAACAFQQlqIQULIANBAToAJAtBACEHDAYLQQAhByADQQA6ACQMBQsgAygCACALSwRAQQEhEQwNCyADQQY6ACYgA0ECOgAkIANBu4rAAP0AAAD9CwBsIANBy4rAACgAADYAfAtBgAEhC0EUDAoLIAMoAgAgC0sEQEEBIREMCwsgA0EGOgAmIANBAjoAJCADQaWIwAD9AAAA/QsAbCADQbKIwAApAAA3AHkLQYEBIQtBFQwIC0EAIQcgAy0AJEECRg0AIANBBDoAJAtBASERIAdBAXENByADLQAlQQFxRQ0ACwwGCwALIAMoAvgCQQA6AAAMBQsAC0H5ACELQQ0MAQsgA0EGOgAmIANBAjoAJCADQZaIwAApAAA3AGwgA0GdiMAAKQAANwBzQfsAIQtBDws6APQCQQAhESADIAtqQQA6AAALIAMgAykDGCADKAIgIgutfDcDGAJAIAMtABNFDQAgAygC8AIiAARAIAMoAuwCIAAQWAsgA0IANwLsAiALIBRPDQACQAJAIAlFBEBBASEADAELIAlBARBWIgBFDQEgCUUNACAAIAQgCfwKAAALIAMgADYC7AIgAyAJNgLwAgwBCwALAkACQCAuQgGDUCARcgRAICBFDQEMAgsgBUH6/wNrQf//e0kNACADKAL4AiAFaiIAQQE6AAAgAEEBaiADKAIgNgAAIABBBWogAy0AJjoAACAFQQZqIQULIAMoAvgCIAVqQQA6AAALAkAgAykDWCIuUA0AIC5CAYMhLyAuQoCAAoMhMCAuQgKDITEgLkIEgyEzIC5CCIMhNCAuQhCDITUgLkIggyE2IC5CwACDITcgLkKAAYMhMiAuQoACgyE5IC5CgASDITogLkKACIMhOyAuQoAQgyE8IC5CgCCDIT0gLkKAwACDIT4gLkKAgAGDIT8gLkKAgASDIUAgLkKAgAiDIUEgLkKAgBCDIUIgLkKAgCCDIUMgLkKAgMAAgyFEIC5CgICAAYMhRSAuQoCAgAKDIUYgLkKAgIAEgyFHIC5CgICACIMhOCAuQoCAgBCDIUggLkKAgIAggyFJIC5CgICAwACDIS4gAygCaCECIAMoAvgCIQZBACEEA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBCAGaiIALQAAQQFrDhwAAgMEBQYHCAkKCwwNDg8BEBESExQVFhcYGRobHwtBBiEBIC9QDRsgAiAAQQFqKAAAQQAQACAEQQZqIQQMHQtBEyEBIDBQDRogAiAAQQFqKAAAIABBBWovAAAgAEEHai0AAEEARyAAQQhqLQAAQQBHIABBCWotAABBAEcgAEEKai0AACAAQQtqKQAAuhABIARBE2ohBAwcC0EJIQEgMVANGSACIABBAWooAAAgAEEFaigAABACIARBCWohBAwbC0EJIQEgM1ANGCACIABBAWooAAAgAEEFaigAABADIARBCWohBAwaC0EJIQEgNFANFyACIABBAWooAAAgAEEFaigAABAEIARBCWohBAwZC0EJIQEgNVANFiACIABBAWooAAAgAEEFaigAABAFIARBCWohBAwYC0EJIQEgNlANFSACIABBAWooAAAgAEEFaigAABAGIARBCWohBAwXC0EJIQEgN1ANFCACIABBAWooAAAgAEEFaigAABAHIARBCWohBAwWC0EJIQEgMlANEyACIABBAWooAAAgAEEFaigAABAIIARBCWohBAwVC0EJIQEgOVANEiACIABBAWooAAAgAEEFaigAABAJIARBCWohBAwUC0EJIQEgOlANESACIABBAWooAAAgAEEFaigAABAKIARBCWohBAwTC0EJIQEgO1ANECACIABBAWooAAAgAEEFaigAABALIARBCWohBAwSC0EJIQEgPFANDyACIABBAWooAAAgAEEFaigAABAMIARBCWohBAwRC0EJIQEgPVANDiACIABBAWooAAAgAEEFaigAABANIARBCWohBAwQC0EJIQEgPlANDSACIABBAWooAAAgAEEFaigAABAOIARBCWohBAwPC0EJIQEgP1ANDCACIABBAWooAAAgAEEFaigAABAPIARBCWohBAwOC0EJIQEgQFANCyACIABBAWooAAAgAEEFaigAABAQIARBCWohBAwNC0EJIQEgQVANCiACIABBAWooAAAgAEEFaigAABARIARBCWohBAwMC0EJIQEgQlANCSACIABBAWooAAAgAEEFaigAABASIARBCWohBAwLC0EJIQEgQ1ANCCACIABBAWooAAAgAEEFaigAABATIARBCWohBAwKC0EJIQEgRFANByACIABBAWooAAAgAEEFaigAABAUIARBCWohBAwJC0EJIQEgRVANBiACIABBAWooAAAgAEEFaigAABAVIARBCWohBAwIC0EJIQEgRlANBSACIABBAWooAAAgAEEFaigAABAWIARBCWohBAwHC0EJIQEgR1ANBCAC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AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEGJhMAACwEBAEGghMAAC+ABAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQaGGwAALXgEAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAQYCIwAALtBBVbmV4cGVjdGVkIGVuZCBvZiBkYXRhVW5leHBlY3RlZCBkYXRhUmVxdWVzdCBsaW5lIHRvbyBsb25nSW52YWxpZCBtZXRob2QgY2hhcmFjdGVySW52YWxpZCBVUkwgY2hhcmFjdGVyUFJJIGlzIG9ubHkgdmFsaWQgd2l0aCBIVFRQLzIuMFVuc3VwcG9ydGVkIEhUVFAgdmVyc2lvbkludmFsaWQgcHJvdG9jb2xJbnZhbGlkIHByb3RvY29sIG5hbWVFeHBlY3RlZCAvIGFmdGVyIHRoZSBwcm90b2NvbCBuYW1lRXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgVVJMRXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kUmVxdWVzdCBsaW5lIHRvbyBzaG9ydEV4cGVjdGVkIENSTEZTdGF0dXMgbGluZSB0b28gbG9uZ0ludmFsaWQgSFRUUCByZXNwb25zZSBzdGF0dXNJbnZhbGlkIHN0YXR1cyByZWFzb24gY2hhcmFjdGVyRXhwZWN0ZWQgYSBzcGFjZSBhZnRlciBIVFRQIHJlc3BvbnNlIHN0YXR1c0V4cGVjdGVkIHNwYWNlIGFmdGVyIHByb3RvY29sU3RhdHVzIGxpbmUgdG9vIHNob3J0TWFsZm9ybWVkIEhUVFAvMi4wIHByZWZhY2VVbmV4cGVjdGVkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmb3IgYSByZXNwb25zZSB3aXRob3V0IGJvZHlFeHBlY3RlZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgdmFsdWVJbnZhbGlkIENvbnRlbnQtTGVuZ3RoIGhlYWRlckludmFsaWQgZHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoIGhlYWRlclVuZXhwZWN0ZWQgQ29udGVudC1MZW5ndGggaGVhZGVyIHdoZW4gVHJhbnNmZXItRW5jb2RpbmcgaGVhZGVyIGlzIHByZXNlbnRVbmV4cGVjdGVkIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciBmb3IgYSByZXNwb25zZSB3aXRob3V0IGJvZHlFeHBlY3RlZCBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgdmFsdWVUaGUgdmFsdWUgImNodW5rZWQiIGluIHRoZSBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgbXVzdCBiZSB0aGUgbGFzdCBwcm92aWRlZCBhbmQgY2FuIGJlIHByb3ZpZGVkIG9ubHkgb25jZVRoZSB2YWx1ZSAiY2h1bmtlZCIgaW4gdGhlIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciBtdXN0IGJlIHRoZSBsYXN0IHByb3ZpZGVkVW5leHBlY3RlZCBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgd2hlbiBDb250ZW50LUxlbmd0aCBoZWFkZXIgaXMgcHJlc2VudEV4cGVjdGVkIENvbm5lY3Rpb24gaGVhZGVyIHZhbHVlSW52YWxpZCBDb25uZWN0aW9uIGhlYWRlciB2YWx1ZUV4cGVjdGVkIFRyYWlsZXIgaGVhZGVyIHZhbHVlRXhwZWN0ZWQgVXBncmFkZSBoZWFkZXIgdmFsdWVJbnZhbGlkIFVwZ3JhZGUgaGVhZGVyIHZhbHVlSW52YWxpZCBoZWFkZXIgZmllbGQgbmFtZSBjaGFyYWN0ZXJJbnZhbGlkIGhlYWRlciBmaWVsZCB2YWx1ZSBjaGFyYWN0ZXJIZWFkZXIgbGluZSB0b28gbG9uZ01pc3NpbmcgQ29ubmVjdGlvbiBoZWFkZXIgc2V0IHRvICJ1cGdyYWRlIiB3aGVuIHVzaW5nIHRoZSBVcGdyYWRlIGhlYWRlclRyYWlsZXJzIGFyZSBub3QgYWxsb3dlZCB3aGVuIG5vdCB1c2luZyBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nVW5leHBlY3RlZCBjb250ZW50IGZvciB0aGUgcmVxdWVzdCAoR0VUIG9yIEhFQUQpVHJhbnNmZXItRW5jb2RpbmcgbGFzdCBoZWFkZXIgdmFsdWUgbXVzdCBiZSAiY2h1bmtlZCIgaWYgdGhlIGhlYWRlciBpcyBwcmVzZW50Q2h1bmsgaGVhZGVyIHRvbyBsb25nSW52YWxpZCBjaHVuayBsZW5ndGggY2hhcmFjdGVySW52YWxpZCBjaHVuayBsZW5ndGggc2l6ZUV4cGVjdGVkIGNodW5rIGV4dGVuc2lvbiBuYW1lSW52YWxpZCBjaHVuayBleHRlbnNpb24gbmFtZSBjaGFyYWN0ZXJFeHBlY3RlZCBjbG9zaW5nIHF1b3RlIGZvciBjaHVuayBleHRlbnNpb24gdmFsdWVJbnZhbGlkIGNodW5rIGV4dGVuc2lvbiBxdW90ZWQgdmFsdWUgY2hhcmFjdGVyRXhwZWN0ZWQgY2h1bmsgZXh0ZW5zaW9uIHZhbHVlSW52YWxpZCBjaHVuayBleHRlbnNpb24gdmFsdWUgY2hhcmFjdGVySW52YWxpZCBjaHVuayBleHRlbnNpb24gY2hhcmFjdGVyIGFmdGVyIHZhbHVlRXhwZWN0ZWQgQ1JMRiBhZnRlciBjaHVuayBkYXRhSW52YWxpZCB0cmFpbGVyIGZpZWxkIG5hbWUgY2hhcmFjdGVySW52YWxpZCB0cmFpbGVyIGZpZWxkIHZhbHVlIGNoYXJhY3RlclRyYWlsZXIgbGluZSB0b28gbG9uZ0ludmFsaWQgc3RhdGU=","base64")),textEncoder=new TextEncoder,textDecoder=new TextDecoder;function log(logger,raw){let len=Number(BigInt.asUintN(32,raw)),ptr=Number(raw>>32n);logger(textDecoder.decode(new Uint8Array(this.memory.buffer,ptr,len)))}function alloc(len){return this.alloc(len)>>>0}function dealloc(ptr,len){return this.dealloc(ptr,len)}function create(){return this.create()>>>0}function destroy(parser){this.destroy(parser)}function parse3(parser,data,limit){return this.parse(parser,data,limit)>>>0}function fail(parser,code,description){let len=description.length,ptr=this.alloc(len),buffer=new Uint8Array(this.memory.buffer,ptr,len);textEncoder.encodeInto(description,buffer),this.fail(parser,code,ptr,len),this.dealloc(ptr,len)}function hasDebug(){return this.milo_has_debug()!==0}var Errors3=Object.freeze({NONE:0,USER:1,CALLBACK_ERROR:2,UNEXPECTED_STATE:3,UNEXPECTED_DATA:4,UNEXPECTED_EOF:5,UNEXPECTED_CHARACTER:6,UNEXPECTED_CONTENT_LENGTH:7,UNEXPECTED_TRANSFER_ENCODING:8,UNEXPECTED_CONTENT:9,UNEXPECTED_TRAILERS:10,INVALID_VERSION:11,INVALID_STATUS:12,INVALID_CONTENT_LENGTH:13,INVALID_TRANSFER_ENCODING:14,INVALID_CHUNK_SIZE:15,MISSING_CONNECTION_UPGRADE:16,UNSUPPORTED_HTTP_VERSION:17,0:"NONE",1:"USER",2:"CALLBACK_ERROR",3:"UNEXPECTED_STATE",4:"UNEXPECTED_DATA",5:"UNEXPECTED_EOF",6:"UNEXPECTED_CHARACTER",7:"UNEXPECTED_CONTENT_LENGTH",8:"UNEXPECTED_TRANSFER_ENCODING",9:"UNEXPECTED_CONTENT",10:"UNEXPECTED_TRAILERS",11:"INVALID_VERSION",12:"INVALID_STATUS",13:"INVALID_CONTENT_LENGTH",14:"INVALID_TRANSFER_ENCODING",15:"INVALID_CHUNK_SIZE",16:"MISSING_CONNECTION_UPGRADE",17:"UNSUPPORTED_HTTP_VERSION"}),Methods=Object.freeze({OTHER:0,GET:1,HEAD:2,POST:3,PUT:4,DELETE:5,CONNECT:6,OPTIONS:7,TRACE:8,PATCH:9,PRI:10,0:"OTHER",1:"GET",2:"HEAD",3:"POST",4:"PUT",5:"DELETE",6:"CONNECT",7:"OPTIONS",8:"TRACE",9:"PATCH",10:"PRI"}),Callbacks=Object.freeze({ON_ERROR:0,ON_FINISH:1,ON_MESSAGE_START:2,ON_MESSAGE_COMPLETE:3,ON_REQUEST:4,ON_RESPONSE:5,ON_RESET:6,ON_METHOD:7,ON_URL:8,ON_PROTOCOL:9,ON_VERSION:10,ON_STATUS:11,ON_REASON:12,ON_HEADER_NAME:13,ON_HEADER_VALUE:14,ON_HEADERS:15,ON_CONNECT:16,ON_UPGRADE:17,ON_CHUNK_LENGTH:18,ON_CHUNK_EXTENSION_NAME:19,ON_CHUNK_EXTENSION_VALUE:20,ON_CHUNK:21,ON_BODY:22,ON_DATA:23,ON_TRAILER_NAME:24,ON_TRAILER_VALUE:25,ON_TRAILERS:26,ON_STATE_CHANGE:27,0:"ON_ERROR",1:"ON_FINISH",2:"ON_MESSAGE_START",3:"ON_MESSAGE_COMPLETE",4:"ON_REQUEST",5:"ON_RESPONSE",6:"ON_RESET",7:"ON_METHOD",8:"ON_URL",9:"ON_PROTOCOL",10:"ON_VERSION",11:"ON_STATUS",12:"ON_REASON",13:"ON_HEADER_NAME",14:"ON_HEADER_VALUE",15:"ON_HEADERS",16:"ON_CONNECT",17:"ON_UPGRADE",18:"ON_CHUNK_LENGTH",19:"ON_CHUNK_EXTENSION_NAME",20:"ON_CHUNK_EXTENSION_VALUE",21:"ON_CHUNK",22:"ON_BODY",23:"ON_DATA",24:"ON_TRAILER_NAME",25:"ON_TRAILER_VALUE",26:"ON_TRAILERS",27:"ON_STATE_CHANGE"}),CallbackActives=Object.freeze({NONE:0n,ON_ERROR:1n,ON_FINISH:2n,ON_MESSAGE_START:4n,ON_MESSAGE_COMPLETE:8n,ON_REQUEST:16n,ON_RESPONSE:32n,ON_RESET:64n,ON_METHOD:128n,ON_URL:256n,ON_PROTOCOL:512n,ON_VERSION:1024n,ON_STATUS:2048n,ON_REASON:4096n,ON_HEADER_NAME:8192n,ON_HEADER_VALUE:16384n,ON_HEADERS:32768n,ON_CONNECT:65536n,ON_UPGRADE:131072n,ON_CHUNK_LENGTH:262144n,ON_CHUNK_EXTENSION_NAME:524288n,ON_CHUNK_EXTENSION_VALUE:1048576n,ON_CHUNK:2097152n,ON_BODY:4194304n,ON_DATA:8388608n,ON_TRAILER_NAME:16777216n,ON_TRAILER_VALUE:33554432n,ON_TRAILERS:67108864n,ON_STATE_CHANGE:134217728n,ALL:268435455n,0n:"NONE",1n:"ON_ERROR",2n:"ON_FINISH",4n:"ON_MESSAGE_START",8n:"ON_MESSAGE_COMPLETE",16n:"ON_REQUEST",32n:"ON_RESPONSE",64n:"ON_RESET",128n:"ON_METHOD",256n:"ON_URL",512n:"ON_PROTOCOL",1024n:"ON_VERSION",2048n:"ON_STATUS",4096n:"ON_REASON",8192n:"ON_HEADER_NAME",16384n:"ON_HEADER_VALUE",32768n:"ON_HEADERS",65536n:"ON_CONNECT",131072n:"ON_UPGRADE",262144n:"ON_CHUNK_LENGTH",524288n:"ON_CHUNK_EXTENSION_NAME",1048576n:"ON_CHUNK_EXTENSION_VALUE",2097152n:"ON_CHUNK",4194304n:"ON_BODY",8388608n:"ON_DATA",16777216n:"ON_TRAILER_NAME",33554432n:"ON_TRAILER_VALUE",67108864n:"ON_TRAILERS",134217728n:"ON_STATE_CHANGE",268435455n:"ALL"}),Events=Object.freeze({END:0,ERROR:1,FINISH:2,MESSAGE_START:3,MESSAGE_COMPLETE:4,REQUEST:5,RESPONSE:6,RESET:7,METHOD:8,URL:9,PROTOCOL:10,VERSION:11,STATUS:12,REASON:13,HEADER_NAME:14,HEADER_VALUE:15,HEADERS:16,CONNECT:17,UPGRADE:18,CHUNK_LENGTH:19,CHUNK_EXTENSION_NAME:20,CHUNK_EXTENSION_VALUE:21,CHUNK:22,BODY:23,DATA:24,TRAILER_NAME:25,TRAILER_VALUE:26,TRAILERS:27,STATE_CHANGE:28,0:"END",1:"ERROR",2:"FINISH",3:"MESSAGE_START",4:"MESSAGE_COMPLETE",5:"REQUEST",6:"RESPONSE",7:"RESET",8:"METHOD",9:"URL",10:"PROTOCOL",11:"VERSION",12:"STATUS",13:"REASON",14:"HEADER_NAME",15:"HEADER_VALUE",16:"HEADERS",17:"CONNECT",18:"UPGRADE",19:"CHUNK_LENGTH",20:"CHUNK_EXTENSION_NAME",21:"CHUNK_EXTENSION_VALUE",22:"CHUNK",23:"BODY",24:"DATA",25:"TRAILER_NAME",26:"TRAILER_VALUE",27:"TRAILERS",28:"STATE_CHANGE"}),EventActives=Object.freeze({NONE:0n,ON_ERROR:1n,ON_FINISH:2n,ON_MESSAGE_START:4n,ON_MESSAGE_COMPLETE:8n,ON_REQUEST:16n,ON_RESPONSE:32n,ON_RESET:64n,ON_METHOD:128n,ON_URL:256n,ON_PROTOCOL:512n,ON_VERSION:1024n,ON_STATUS:2048n,ON_REASON:4096n,ON_HEADER_NAME:8192n,ON_HEADER_VALUE:16384n,ON_HEADERS:32768n,ON_CONNECT:65536n,ON_UPGRADE:131072n,ON_CHUNK_LENGTH:262144n,ON_CHUNK_EXTENSION_NAME:524288n,ON_CHUNK_EXTENSION_VALUE:1048576n,ON_CHUNK:2097152n,ON_BODY:4194304n,ON_DATA:8388608n,ON_TRAILER_NAME:16777216n,ON_TRAILER_VALUE:33554432n,ON_TRAILERS:67108864n,ON_STATE_CHANGE:134217728n,ALL:268435455n,0n:"NONE",1n:"ON_ERROR",2n:"ON_FINISH",4n:"ON_MESSAGE_START",8n:"ON_MESSAGE_COMPLETE",16n:"ON_REQUEST",32n:"ON_RESPONSE",64n:"ON_RESET",128n:"ON_METHOD",256n:"ON_URL",512n:"ON_PROTOCOL",1024n:"ON_VERSION",2048n:"ON_STATUS",4096n:"ON_REASON",8192n:"ON_HEADER_NAME",16384n:"ON_HEADER_VALUE",32768n:"ON_HEADERS",65536n:"ON_CONNECT",131072n:"ON_UPGRADE",262144n:"ON_CHUNK_LENGTH",524288n:"ON_CHUNK_EXTENSION_NAME",1048576n:"ON_CHUNK_EXTENSION_VALUE",2097152n:"ON_CHUNK",4194304n:"ON_BODY",8388608n:"ON_DATA",16777216n:"ON_TRAILER_NAME",33554432n:"ON_TRAILER_VALUE",67108864n:"ON_TRAILERS",134217728n:"ON_STATE_CHANGE",268435455n:"ALL"}),States=Object.freeze({START:0,FINISH:1,ERROR:2,REQUEST_LINE:3,STATUS_LINE:4,HTTP2_PREFACE:5,HEADER:6,BODY_DECISION:7,BODY_VIA_CONTENT_LENGTH:8,BODY_WITH_NO_LENGTH:9,CHUNK_HEADER:10,CHUNK_EXTENSIONS:11,CHUNK_DATA:12,TRAILER:13,TUNNEL:14,0:"START",1:"FINISH",2:"ERROR",3:"REQUEST_LINE",4:"STATUS_LINE",5:"HTTP2_PREFACE",6:"HEADER",7:"BODY_DECISION",8:"BODY_VIA_CONTENT_LENGTH",9:"BODY_WITH_NO_LENGTH",10:"CHUNK_HEADER",11:"CHUNK_EXTENSIONS",12:"CHUNK_DATA",13:"TRAILER",14:"TUNNEL"}),ParserFields=Object.freeze({MAX_START_LINE_LENGTH:0,MAX_HEADER_LENGTH:4,MAX_BODY_PAYLOAD:8,AUTODETECT:16,IS_REQUEST:17,SUSPEND_AFTER_HEADERS:18,MANAGE_UNCONSUMED:19,CONTINUE_WITHOUT_DATA:20,IS_CONNECT:21,SKIP_BODY:22,DEBUG:23,PARSED:24,POSITION:32,STATE:36,PAUSED:37,ERROR_CODE:38,CONTENT_LENGTH:40,CHUNK_SIZE:48,REMAINING_CONTENT_LENGTH:56,REMAINING_CHUNK_SIZE:64,STATUS:72,METHOD:76,HAS_CONTENT_LENGTH:77,HAS_TRANSFER_ENCODING:78,HAS_CHUNKED_TRANSFER_ENCODING:79,HAS_CONNECTION_CLOSE:80,HAS_CONNECTION_UPGRADE:81,HAS_UPGRADE:82,HAS_TRAILERS:83,ACTIVE_CALLBACKS:88,ACTIVE_EVENTS:96,PTR:104,ERROR_DESCRIPTION:108,UNCONSUMED:364,UNCONSUMED_LEN:368,ERROR_DESCRIPTION_LEN:372,EVENTS:376,0:"MAX_START_LINE_LENGTH",4:"MAX_HEADER_LENGTH",8:"MAX_BODY_PAYLOAD",16:"AUTODETECT",17:"IS_REQUEST",18:"SUSPEND_AFTER_HEADERS",19:"MANAGE_UNCONSUMED",20:"CONTINUE_WITHOUT_DATA",21:"IS_CONNECT",22:"SKIP_BODY",23:"DEBUG",24:"PARSED",32:"POSITION",36:"STATE",37:"PAUSED",38:"ERROR_CODE",40:"CONTENT_LENGTH",48:"CHUNK_SIZE",56:"REMAINING_CONTENT_LENGTH",64:"REMAINING_CHUNK_SIZE",72:"STATUS",76:"METHOD",77:"HAS_CONTENT_LENGTH",78:"HAS_TRANSFER_ENCODING",79:"HAS_CHUNKED_TRANSFER_ENCODING",80:"HAS_CONNECTION_CLOSE",81:"HAS_CONNECTION_UPGRADE",82:"HAS_UPGRADE",83:"HAS_TRAILERS",88:"ACTIVE_CALLBACKS",96:"ACTIVE_EVENTS",104:"PTR",108:"ERROR_DESCRIPTION",364:"UNCONSUMED",368:"UNCONSUMED_LEN",372:"ERROR_DESCRIPTION_LEN",376:"EVENTS"});function isAutodetect(parser){return this.is_autodetect(parser)!==0}function isRequest(parser){return this.is_request(parser)!==0}function isPaused(parser){return this.is_paused(parser)!==0}function shouldManageUnconsumed(parser){return this.should_manage_unconsumed(parser)!==0}function shouldSuspendAfterHeaders(parser){return this.should_suspend_after_headers(parser)!==0}function getMaxStartLineLength(parser){return this.get_max_start_line_length(parser)>>>0}function getMaxHeaderLength(parser){return this.get_max_header_length(parser)>>>0}function getMaxBodyPayload(parser){return BigInt.asUintN(64,this.get_max_body_payload(parser))}function shouldContinueWithoutData(parser){return this.should_continue_without_data(parser)!==0}function isConnect(parser){return this.is_connect(parser)!==0}function isDebug(parser){return this.is_debug(parser)!==0}function shouldSkipBody(parser){return this.should_skip_body(parser)!==0}function getState(parser){return this.get_state(parser)>>>0}function getPosition(parser){return this.get_position(parser)>>>0}function getParsed(parser){return BigInt.asUintN(64,this.get_parsed(parser))}function getErrorCode(parser){return this.get_error_code(parser)>>>0}function getMethod(parser){return this.get_method(parser)>>>0}function getStatus(parser){return this.get_status(parser)>>>0}function hasConnectionClose(parser){return this.has_connection_close(parser)!==0}function hasConnectionUpgrade(parser){return this.has_connection_upgrade(parser)!==0}function getContentLength(parser){return BigInt.asUintN(64,this.get_content_length(parser))}function getChunkSize(parser){return BigInt.asUintN(64,this.get_chunk_size(parser))}function getRemainingContentLength(parser){return BigInt.asUintN(64,this.get_remaining_content_length(parser))}function getRemainingChunkSize(parser){return BigInt.asUintN(64,this.get_remaining_chunk_size(parser))}function hasContentLength(parser){return this.has_content_length(parser)!==0}function hasTransferEncoding(parser){return this.has_transfer_encoding(parser)!==0}function hasChunkedTransferEncoding(parser){return this.has_chunked_transfer_encoding(parser)!==0}function hasUpgrade(parser){return this.has_upgrade(parser)!==0}function hasTrailers(parser){return this.has_trailers(parser)!==0}function getErrorDescription(parser){let raw=this.get_error_description_raw(parser),len=Number(BigInt.asUintN(32,raw)),ptr=Number(raw>>32n);return textDecoder.decode(new Uint8Array(this.memory.buffer,ptr,len))}function setShouldAutodetect(parser,value){this.set_should_autodetect(parser,value)}function setShouldContinueWithoutData(parser,value){this.set_should_continue_without_data(parser,value)}function setIsRequest(parser,value){this.set_is_request(parser,value)}function setIsConnect(parser,value){this.set_is_connect(parser,value)}function setDebug(parser,value){this.set_debug(parser,value)}function setShouldManageUnconsumed(parser,value){this.set_should_manage_unconsumed(parser,value)}function setShouldSuspendAfterHeaders(parser,value){this.set_should_suspend_after_headers(parser,value)}function setMaxStartLineLength(parser,value){this.set_max_start_line_length(parser,value)}function setMaxHeaderLength(parser,value){this.set_max_header_length(parser,value)}function setMaxBodyPayload(parser,value){this.set_max_body_payload(parser,value)}function setShouldSkipBody(parser,value){this.set_should_skip_body(parser,value)}function setActiveCallbacks(parser,value){this.set_active_callbacks(parser,value)}function setActiveEvents(parser,value){this.set_active_events(parser,value)}function simpleCreate(spans,create2){let parser=create2();return spans[parser]=[],this.setActiveCallbacks(parser,this.CALLBACK_ACTIVE_ALL),parser}function simpleDestroy(spans,destroy2,parser){spans[parser]=void 0,destroy2(parser)}function noop(){}function setup(env={}){let{logger:logOption,...instanceEnvironment}=env,logger=noop,context={};logOption&&(typeof logOption!="function"&&(logOption=console.log),logger=log.bind(context,logOption));let wasm=new WebAssembly.Instance(wasmModule,{env:{logger,on_error:noop,on_finish:noop,on_message_start:noop,on_message_complete:noop,on_request:noop,on_response:noop,on_reset:noop,on_method:noop,on_url:noop,on_protocol:noop,on_version:noop,on_status:noop,on_reason:noop,on_header_name:noop,on_header_value:noop,on_headers:noop,on_connect:noop,on_upgrade:noop,on_chunk_length:noop,on_chunk_extension_name:noop,on_chunk_extension_value:noop,on_chunk:noop,on_body:noop,on_data:noop,on_trailer_name:noop,on_trailer_value:noop,on_trailers:noop,on_state_change:noop,...instanceEnvironment}}).exports;return context.memory=wasm.memory,{version:{raw:"0.9.0",major:0,minor:9,patch:0,prerelease:""},METHOD_OTHER:0,METHOD_GET:1,METHOD_HEAD:2,METHOD_POST:3,METHOD_PUT:4,METHOD_DELETE:5,METHOD_CONNECT:6,METHOD_OPTIONS:7,METHOD_TRACE:8,METHOD_PATCH:9,METHOD_PRI:10,CALLBACK_ON_ERROR:0,CALLBACK_ON_FINISH:1,CALLBACK_ON_MESSAGE_START:2,CALLBACK_ON_MESSAGE_COMPLETE:3,CALLBACK_ON_REQUEST:4,CALLBACK_ON_RESPONSE:5,CALLBACK_ON_RESET:6,CALLBACK_ON_METHOD:7,CALLBACK_ON_URL:8,CALLBACK_ON_PROTOCOL:9,CALLBACK_ON_VERSION:10,CALLBACK_ON_STATUS:11,CALLBACK_ON_REASON:12,CALLBACK_ON_HEADER_NAME:13,CALLBACK_ON_HEADER_VALUE:14,CALLBACK_ON_HEADERS:15,CALLBACK_ON_CONNECT:16,CALLBACK_ON_UPGRADE:17,CALLBACK_ON_CHUNK_LENGTH:18,CALLBACK_ON_CHUNK_EXTENSION_NAME:19,CALLBACK_ON_CHUNK_EXTENSION_VALUE:20,CALLBACK_ON_CHUNK:21,CALLBACK_ON_BODY:22,CALLBACK_ON_DATA:23,CALLBACK_ON_TRAILER_NAME:24,CALLBACK_ON_TRAILER_VALUE:25,CALLBACK_ON_TRAILERS:26,CALLBACK_ON_STATE_CHANGE:27,EVENT_END:0,EVENT_ERROR:1,EVENT_FINISH:2,EVENT_MESSAGE_START:3,EVENT_MESSAGE_COMPLETE:4,EVENT_REQUEST:5,EVENT_RESPONSE:6,EVENT_RESET:7,EVENT_METHOD:8,EVENT_URL:9,EVENT_PROTOCOL:10,EVENT_VERSION:11,EVENT_STATUS:12,EVENT_REASON:13,EVENT_HEADER_NAME:14,EVENT_HEADER_VALUE:15,EVENT_HEADERS:16,EVENT_CONNECT:17,EVENT_UPGRADE:18,EVENT_CHUNK_LENGTH:19,EVENT_CHUNK_EXTENSION_NAME:20,EVENT_CHUNK_EXTENSION_VALUE:21,EVENT_CHUNK:22,EVENT_BODY:23,EVENT_DATA:24,EVENT_TRAILER_NAME:25,EVENT_TRAILER_VALUE:26,EVENT_TRAILERS:27,EVENT_STATE_CHANGE:28,CALLBACK_ACTIVE_NONE:0n,EVENT_ACTIVE_NONE:0n,CALLBACK_ACTIVE_ON_ERROR:1n,EVENT_ACTIVE_ON_ERROR:1n,CALLBACK_ACTIVE_ON_FINISH:2n,EVENT_ACTIVE_ON_FINISH:2n,CALLBACK_ACTIVE_ON_MESSAGE_START:4n,EVENT_ACTIVE_ON_MESSAGE_START:4n,CALLBACK_ACTIVE_ON_MESSAGE_COMPLETE:8n,EVENT_ACTIVE_ON_MESSAGE_COMPLETE:8n,CALLBACK_ACTIVE_ON_REQUEST:16n,EVENT_ACTIVE_ON_REQUEST:16n,CALLBACK_ACTIVE_ON_RESPONSE:32n,EVENT_ACTIVE_ON_RESPONSE:32n,CALLBACK_ACTIVE_ON_RESET:64n,EVENT_ACTIVE_ON_RESET:64n,CALLBACK_ACTIVE_ON_METHOD:128n,EVENT_ACTIVE_ON_METHOD:128n,CALLBACK_ACTIVE_ON_URL:256n,EVENT_ACTIVE_ON_URL:256n,CALLBACK_ACTIVE_ON_PROTOCOL:512n,EVENT_ACTIVE_ON_PROTOCOL:512n,CALLBACK_ACTIVE_ON_VERSION:1024n,EVENT_ACTIVE_ON_VERSION:1024n,CALLBACK_ACTIVE_ON_STATUS:2048n,EVENT_ACTIVE_ON_STATUS:2048n,CALLBACK_ACTIVE_ON_REASON:4096n,EVENT_ACTIVE_ON_REASON:4096n,CALLBACK_ACTIVE_ON_HEADER_NAME:8192n,EVENT_ACTIVE_ON_HEADER_NAME:8192n,CALLBACK_ACTIVE_ON_HEADER_VALUE:16384n,EVENT_ACTIVE_ON_HEADER_VALUE:16384n,CALLBACK_ACTIVE_ON_HEADERS:32768n,EVENT_ACTIVE_ON_HEADERS:32768n,CALLBACK_ACTIVE_ON_CONNECT:65536n,EVENT_ACTIVE_ON_CONNECT:65536n,CALLBACK_ACTIVE_ON_UPGRADE:131072n,EVENT_ACTIVE_ON_UPGRADE:131072n,CALLBACK_ACTIVE_ON_CHUNK_LENGTH:262144n,EVENT_ACTIVE_ON_CHUNK_LENGTH:262144n,CALLBACK_ACTIVE_ON_CHUNK_EXTENSION_NAME:524288n,EVENT_ACTIVE_ON_CHUNK_EXTENSION_NAME:524288n,CALLBACK_ACTIVE_ON_CHUNK_EXTENSION_VALUE:1048576n,EVENT_ACTIVE_ON_CHUNK_EXTENSION_VALUE:1048576n,CALLBACK_ACTIVE_ON_CHUNK:2097152n,EVENT_ACTIVE_ON_CHUNK:2097152n,CALLBACK_ACTIVE_ON_BODY:4194304n,EVENT_ACTIVE_ON_BODY:4194304n,CALLBACK_ACTIVE_ON_DATA:8388608n,EVENT_ACTIVE_ON_DATA:8388608n,CALLBACK_ACTIVE_ON_TRAILER_NAME:16777216n,EVENT_ACTIVE_ON_TRAILER_NAME:16777216n,CALLBACK_ACTIVE_ON_TRAILER_VALUE:33554432n,EVENT_ACTIVE_ON_TRAILER_VALUE:33554432n,CALLBACK_ACTIVE_ON_TRAILERS:67108864n,EVENT_ACTIVE_ON_TRAILERS:67108864n,CALLBACK_ACTIVE_ON_STATE_CHANGE:134217728n,EVENT_ACTIVE_ON_STATE_CHANGE:134217728n,CALLBACK_ACTIVE_ALL:268435455n,EVENT_ACTIVE_ALL:268435455n,ERROR_NONE:0,ERROR_USER:1,ERROR_CALLBACK_ERROR:2,ERROR_UNEXPECTED_STATE:3,ERROR_UNEXPECTED_DATA:4,ERROR_UNEXPECTED_EOF:5,ERROR_UNEXPECTED_CHARACTER:6,ERROR_UNEXPECTED_CONTENT_LENGTH:7,ERROR_UNEXPECTED_TRANSFER_ENCODING:8,ERROR_UNEXPECTED_CONTENT:9,ERROR_UNEXPECTED_TRAILERS:10,ERROR_INVALID_VERSION:11,ERROR_INVALID_STATUS:12,ERROR_INVALID_CONTENT_LENGTH:13,ERROR_INVALID_TRANSFER_ENCODING:14,ERROR_INVALID_CHUNK_SIZE:15,ERROR_MISSING_CONNECTION_UPGRADE:16,ERROR_UNSUPPORTED_HTTP_VERSION:17,STATE_START:0,STATE_FINISH:1,STATE_ERROR:2,STATE_REQUEST_LINE:3,STATE_STATUS_LINE:4,STATE_HTTP2_PREFACE:5,STATE_HEADER:6,STATE_BODY_DECISION:7,STATE_BODY_VIA_CONTENT_LENGTH:8,STATE_BODY_WITH_NO_LENGTH:9,STATE_CHUNK_HEADER:10,STATE_CHUNK_EXTENSIONS:11,STATE_CHUNK_DATA:12,STATE_TRAILER:13,STATE_TUNNEL:14,PARSER_FIELD_MAX_START_LINE_LENGTH:0,PARSER_FIELD_MAX_HEADER_LENGTH:4,PARSER_FIELD_MAX_BODY_PAYLOAD:8,PARSER_FIELD_AUTODETECT:16,PARSER_FIELD_IS_REQUEST:17,PARSER_FIELD_SUSPEND_AFTER_HEADERS:18,PARSER_FIELD_MANAGE_UNCONSUMED:19,PARSER_FIELD_CONTINUE_WITHOUT_DATA:20,PARSER_FIELD_IS_CONNECT:21,PARSER_FIELD_SKIP_BODY:22,PARSER_FIELD_DEBUG:23,PARSER_FIELD_PARSED:24,PARSER_FIELD_POSITION:32,PARSER_FIELD_STATE:36,PARSER_FIELD_PAUSED:37,PARSER_FIELD_ERROR_CODE:38,PARSER_FIELD_CONTENT_LENGTH:40,PARSER_FIELD_CHUNK_SIZE:48,PARSER_FIELD_REMAINING_CONTENT_LENGTH:56,PARSER_FIELD_REMAINING_CHUNK_SIZE:64,PARSER_FIELD_STATUS:72,PARSER_FIELD_METHOD:76,PARSER_FIELD_HAS_CONTENT_LENGTH:77,PARSER_FIELD_HAS_TRANSFER_ENCODING:78,PARSER_FIELD_HAS_CHUNKED_TRANSFER_ENCODING:79,PARSER_FIELD_HAS_CONNECTION_CLOSE:80,PARSER_FIELD_HAS_CONNECTION_UPGRADE:81,PARSER_FIELD_HAS_UPGRADE:82,PARSER_FIELD_HAS_TRAILERS:83,PARSER_FIELD_ACTIVE_CALLBACKS:88,PARSER_FIELD_ACTIVE_EVENTS:96,PARSER_FIELD_PTR:104,PARSER_FIELD_ERROR_DESCRIPTION:108,PARSER_FIELD_UNCONSUMED:364,PARSER_FIELD_UNCONSUMED_LEN:368,PARSER_FIELD_ERROR_DESCRIPTION_LEN:372,PARSER_FIELD_EVENTS:376,Errors:Errors3,Methods,Callbacks,CallbackActives,Events,EventActives,States,ParserFields,isAutodetect:isAutodetect.bind(wasm),isRequest:isRequest.bind(wasm),isPaused:isPaused.bind(wasm),shouldManageUnconsumed:shouldManageUnconsumed.bind(wasm),shouldSuspendAfterHeaders:shouldSuspendAfterHeaders.bind(wasm),getMaxStartLineLength:getMaxStartLineLength.bind(wasm),getMaxHeaderLength:getMaxHeaderLength.bind(wasm),getMaxBodyPayload:getMaxBodyPayload.bind(wasm),shouldContinueWithoutData:shouldContinueWithoutData.bind(wasm),isConnect:isConnect.bind(wasm),isDebug:isDebug.bind(wasm),shouldSkipBody:shouldSkipBody.bind(wasm),getState:getState.bind(wasm),getPosition:getPosition.bind(wasm),getParsed:getParsed.bind(wasm),getErrorCode:getErrorCode.bind(wasm),getMethod:getMethod.bind(wasm),getStatus:getStatus.bind(wasm),hasConnectionClose:hasConnectionClose.bind(wasm),hasConnectionUpgrade:hasConnectionUpgrade.bind(wasm),getContentLength:getContentLength.bind(wasm),getChunkSize:getChunkSize.bind(wasm),getRemainingContentLength:getRemainingContentLength.bind(wasm),getRemainingChunkSize:getRemainingChunkSize.bind(wasm),hasContentLength:hasContentLength.bind(wasm),hasTransferEncoding:hasTransferEncoding.bind(wasm),hasChunkedTransferEncoding:hasChunkedTransferEncoding.bind(wasm),hasUpgrade:hasUpgrade.bind(wasm),hasTrailers:hasTrailers.bind(wasm),getErrorDescription:getErrorDescription.bind(wasm),setShouldAutodetect:setShouldAutodetect.bind(wasm),setShouldContinueWithoutData:setShouldContinueWithoutData.bind(wasm),setIsRequest:setIsRequest.bind(wasm),setIsConnect:setIsConnect.bind(wasm),setDebug:setDebug.bind(wasm),setShouldManageUnconsumed:setShouldManageUnconsumed.bind(wasm),setShouldSuspendAfterHeaders:setShouldSuspendAfterHeaders.bind(wasm),setMaxStartLineLength:setMaxStartLineLength.bind(wasm),setMaxHeaderLength:setMaxHeaderLength.bind(wasm),setMaxBodyPayload:setMaxBodyPayload.bind(wasm),setShouldSkipBody:setShouldSkipBody.bind(wasm),setActiveCallbacks:setActiveCallbacks.bind(wasm),setActiveEvents:setActiveEvents.bind(wasm),memory:wasm.memory,alloc:alloc.bind(wasm),dealloc:dealloc.bind(wasm),create:create.bind(wasm),destroy:destroy.bind(wasm),parse:parse3.bind(wasm),fail:fail.bind(wasm),hasDebug:hasDebug.bind(wasm),clear:wasm.clear,complete:wasm.complete,finish:wasm.finish,pause:wasm.pause,reset:wasm.reset,resume:wasm.resume}}function simple(){let spans={},milo=setup({});return milo.spans=spans,milo.create=simpleCreate.bind(milo,spans,milo.create),milo.destroy=simpleDestroy.bind(milo,spans,milo.destroy),milo}module.exports={wasmModule,noop,setup,simple}}});var require_no_simd=__commonJS({"node_modules/undici/lib/milo/no-simd.js"(exports,module){var wasmModule=new WebAssembly.Module(Buffer.from("AGFzbQEAAAABQgtgA39/fwBgAX8Bf2ACf38AYAF/AGABfwF+YAJ/fgBgBH9/f38AYAABf2AIf39/f39/f3wAYAN/f38Bf2ACf38BfwKUBBwDZW52CG9uX2Vycm9yAAADZW52Cm9uX2hlYWRlcnMACANlbnYJb25fZmluaXNoAAADZW52EG9uX21lc3NhZ2Vfc3RhcnQAAANlbnYTb25fbWVzc2FnZV9jb21wbGV0ZQAAA2Vudgpvbl9yZXF1ZXN0AAADZW52C29uX3Jlc3BvbnNlAAADZW52CG9uX3Jlc2V0AAADZW52CW9uX21ldGhvZAAAA2VudgZvbl91cmwAAANlbnYLb25fcHJvdG9jb2wAAANlbnYKb25fdmVyc2lvbgAAA2Vudglvbl9zdGF0dXMAAANlbnYJb25fcmVhc29uAAADZW52Dm9uX2hlYWRlcl9uYW1lAAADZW52D29uX2hlYWRlcl92YWx1ZQAAA2Vudgpvbl9jb25uZWN0AAADZW52Cm9uX3VwZ3JhZGUAAANlbnYPb25fY2h1bmtfbGVuZ3RoAAADZW52F29uX2NodW5rX2V4dGVuc2lvbl9uYW1lAAADZW52GG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQAAA2Vudghvbl9jaHVuawAAA2Vudgdvbl9ib2R5AAADZW52B29uX2RhdGEAAANlbnYPb25fdHJhaWxlcl9uYW1lAAADZW52EG9uX3RyYWlsZXJfdmFsdWUAAANlbnYLb25fdHJhaWxlcnMAAANlbnYPb25fc3RhdGVfY2hhbmdlAAADQUAGAQMDBwIDBgMEBAEEBAEBAQQBBAQBAQEBAQEBAQEBAQEBAQcJAwIDBQUCAgIFAgICAgICAgEBAQEKAQIDAgICBQMBABEGCQF/AUGAgMAACwedCDkGbWVtb3J5AgAFYWxsb2MAHQVjbGVhcgAeCGNvbXBsZXRlAB8GY3JlYXRlACAHZGVhbGxvYwAhB2Rlc3Ryb3kAIgRmYWlsACMGZmluaXNoACQOZ2V0X2NodW5rX3NpemUAJRJnZXRfY29udGVudF9sZW5ndGgAJg5nZXRfZXJyb3JfY29kZQAnGWdldF9lcnJvcl9kZXNjcmlwdGlvbl9yYXcAKBRnZXRfbWF4X2JvZHlfcGF5bG9hZAApFWdldF9tYXhfaGVhZGVyX2xlbmd0aAAqGWdldF9tYXhfc3RhcnRfbGluZV9sZW5ndGgAKwpnZXRfbWV0aG9kACwKZ2V0X3BhcnNlZAAtDGdldF9wb3NpdGlvbgAuGGdldF9yZW1haW5pbmdfY2h1bmtfc2l6ZQAvHGdldF9yZW1haW5pbmdfY29udGVudF9sZW5ndGgAMAlnZXRfc3RhdGUAMQpnZXRfc3RhdHVzADIdaGFzX2NodW5rZWRfdHJhbnNmZXJfZW5jb2RpbmcAMxRoYXNfY29ubmVjdGlvbl9jbG9zZQA0Fmhhc19jb25uZWN0aW9uX3VwZ3JhZGUANRJoYXNfY29udGVudF9sZW5ndGgANgxoYXNfdHJhaWxlcnMANxVoYXNfdHJhbnNmZXJfZW5jb2RpbmcAOAtoYXNfdXBncmFkZQA5DWlzX2F1dG9kZXRlY3QAOgppc19jb25uZWN0ADsIaXNfZGVidWcAPAlpc19wYXVzZWQAPQppc19yZXF1ZXN0AD4ObWlsb19oYXNfZGVidWcAPwVwYXJzZQBABXBhdXNlAEEFcmVzZXQAQgZyZXN1bWUAQxRzZXRfYWN0aXZlX2NhbGxiYWNrcwBEEXNldF9hY3RpdmVfZXZlbnRzAEUJc2V0X2RlYnVnAEYOc2V0X2lzX2Nvbm5lY3QARw5zZXRfaXNfcmVxdWVzdABIFHNldF9tYXhfYm9keV9wYXlsb2FkAEkVc2V0X21heF9oZWFkZXJfbGVuZ3RoAEoZc2V0X21heF9zdGFydF9saW5lX2xlbmd0aABLFXNldF9zaG91bGRfYXV0b2RldGVjdABMIHNldF9zaG91bGRfY29udGludWVfd2l0aG91dF9kYXRhAE0cc2V0X3Nob3VsZF9tYW5hZ2VfdW5jb25zdW1lZABOFHNldF9zaG91bGRfc2tpcF9ib2R5AE8gc2V0X3Nob3VsZF9zdXNwZW5kX2FmdGVyX2hlYWRlcnMAUBxzaG91bGRfY29udGludWVfd2l0aG91dF9kYXRhAFEYc2hvdWxkX21hbmFnZV91bmNvbnN1bWVkAFIQc2hvdWxkX3NraXBfYm9keQBTHHNob3VsZF9zdXNwZW5kX2FmdGVyX2hlYWRlcnMAVAr7pwJAlgIBBH8CQCACIANPDQAgAS0AACEFAkAgAyACayIHQQNNBEAMAQtBgIKECCAFQYGChAhsIgEgAigAAHMiBmsgBnJBgIGChHhxQYCBgoR4RwRADAELIAJBfHFBBGohAgJAIAdBCU8EQCACIANBCGsiB0sNAQNAQYCChAggAigCACABcyIGayAGckGAgYKEeHFBgIGChHhHDQJBgIKECCACQQRqKAIAIAFzIgZrIAZyQYCBgoR4cUGAgYKEeEcNAiACQQhqIgIgB00NAAsMAQsgAiADTw0CDAELIAIgA08NAQsgA0EBa0EBIQQDQCAFIAItAABGDQEgAkEBaiICIANHDQALIQJBACEECyAAIAI2AgQgACAENgIACyYAAkAgAEEATgRAIABFBEBBASEADAILIABBARBVIgANAQsACyAACzMAIABCADcDKCAAQQA6ABUgAEIANwMwIABCADcDOCAAQgA3A0AgAEIANwNIIABBADYCUAvSAwIDfwF+AkAgACIBLQAkIgBBDk1BAEEBIAB0QYDPAXEbRQRAIAFBAzoAJiABQQI6ACQgAUENOgD0AkEAIQAgAUEAOgB5IAFBp5jAACkAADcAbCABQayYwAApAAA3AHECQCABKQNYIAEpA2CEp0EBcUUEQCABKAL4AiECDAELIAEoAvgCIgJBAToAACACQQVqQQM6AAAgAkEBaiABKAIgNgAAQQYhAAsgACACakEAOgAADAELAn9BACABKQNYIAEpA2CEIgRCyACDUA0AGiAEQgiDQgBSBEAgASgC+AIiAEEEOgAAIABBBWpBADYAACAAQQFqIAEoAiA2AABBCSECCyACIARCwACDUA0AGiABKAL4AiACaiIAQQc6AAAgAEEFakEANgAAIABBAWogASgCIDYAACACQQlqCyECIAFBADoAFiABQQA6ABQCQCABLQBSQQFGBEBBDiEAIAEtABFBAXENAQsgAS0AUCEDIARCAoNQBEAgAyEADAELQQEhACADQQFxRQRAIAMhAAwBCyABKAL4AiACaiIDQQI6AAAgA0EFakEANgAAIANBAWogASgCIDYAACACQQlqIQILIAEgADoAJCABKAL4AiACakEAOgAACwvfAgEDfyMAQeAAayIAJAACQEGAgAQQViICRQ0AIAJBBGstAABBA3FFDQAgAkEAQYCABPwLAAsCQCACRQ0AIABBADYAXCAAQgA3AFQgAEIANwBMIABCADcARCAAQgA3ADwgAEIANwA0IABCADcCHCAAQgA3AiQgAEEANgIsIABCADcADyAAQQA6ABdBgANBCBBVIgFFDQAgAUIANwARIAFBAToAECABQgA3AwggAUKAwICAgIAINwMAIAFCADcAGSABQgA3AB8gASAAKQAzNwAnIAEgACkAOzcALyABIAApAEM3ADcgASAAKQBLNwA/IAEgACkAUzcARyABIAApAFg3AEwgASAAKAIoNgJkIAEgACkCIDcCXCABIAApAhg3AlQgAUHsAGpBAEH/AfwLACABIAI2AvgCIAEgAC8AFjsA8wIgASAAKQAONwDrAiABIAE2AmggAEHgAGokACABDwsACxUAAkAgAEUNACABRQ0AIAAgARBXCws4AQF/IAAEQCAAKALwAiIBBEAgACgC7AIgARBXCyAAKAL4AiIBBEAgAUGAgAQQVwsgAEGAAxBXCwuSAQEBfyAAIAE6ACYgAEECOgAkIABB7ABqIQRB/gEgAyADQf4BTxsiAwRAIAQgAiAD/AoAAAsgACADOgD0AiADIARqQQA6AABBACEDIAApA1ggACkDYIRCAYOnBH8gACgC+AIiAkEBOgAAIAJBBWogAToAACACQQFqIAAoAiA2AABBBgVBAAsgACgC+AJqQQA6AAALrAIBAn8CQAJAAkAgAC0AJCIBQQlNBEBBASABdEEbcQ0BIAFBAkYNAyABQQlGDQILIABBBToAJiAAQQI6ACQgAEEWOgD0AiAAQQA6AIIBIABBgIjAACkAADcAbCAAQYiIwAApAAA3AHQgAEGOiMAAKQAANwB6AkAgACkDWCAAKQNghKdBAXFFBEAgACgC+AIhAQwBCyAAKAL4AiIBQQE6AAAgAUEFakEFOgAAIAFBAWogACgCIDYAAEEGIQILIAEgAmpBADoAAA8LIABBAToAJA8LAn8gACkDWCAAKQNghEIIg1AEQCAAKAL4AiEBQQAMAQsgACgC+AIiAUEEOgAAIAFBBWpBADYAACABQQFqIAAoAiA2AABBCQshAiAAQQE6ACQgASACakEAOgAACwsHACAAKQMwCwcAIAApAygLBwAgAC0AJgsTACAAMQD0AiAAQewAaq1CIIaECwcAIAApAwgLBwAgACgCBAsHACAAKAIACwcAIAAtAEwLBwAgACkDGAsHACAAKAIgCwcAIAApA0ALBwAgACkDOAsHACAALQAkCwcAIAAoAkgL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DQEMAgsgBkEJRg0BCyADQQY6ACYgA0ECOgAkIANB64rAACkAADcAbCADQfOKwAApAAA3AHQgA0H7isAAKQAANwB8IANBgovAACkAADcAgwEMJwsgAEEBaiEAIAlBAWsiCQ0ACwsgAyAHQeQAbCAOQQpsQf4BcWogC2o2AkggIkUNAyA7QgBSBEAgBUEQakGBgARPDTQgAygCICEAIAMoAvgCIAVqQQo6AAAgAygC+AIgBWpBAWogADYAACADKAL4AiAFakEFakEENgAAIAVBCWohBQsgOkIAUgRAIAVBEGpBgYAETw00IAMoAiAhACADKAL4AiAFakELOgAAIAMoAvgCIAVqQQFqIABBBWo2AAAgAygC+AIgBWpBBWpBAzYAACAFQQlqIQULIEJCAFIEQCAFQRBqQYGABE8NNCADKAIgIQAgAygC+AIgBWpBDDoAACADKAL4AiAFakEBaiAAQQlqNgAAIAMoAvgCIAVqQQVqQQM2AAAgBUEJaiEFCyBBUA0DIA0NAyAFQRBqQYCABEsNMyADKAIgIQAgAygC+AIgBWpBDToAACADKAL4AiAFakEBaiAAQQ1qNgAAIAMoAvgCIAVqQQVqIAJBDWs2AAAgBUEJaiEFDAMLIANBDDoAJiADQQI6ACQgA0GKi8AAKQAANwBsIANBkovAACkAADcAdCADQZqLwAApAAA3AHwgA0Gii8AAKQAANwCEASADQaqLwAApAAA3AIwBIANBsYvAACgAADYAkwFBKyEIQZcBDDELIANBBjoAJiADQQI6ACQgA0HSi8AAKQAANwBsIANB2ovAACkAADcAdCADQd+LwAApAAA3AHkMCwsgBC0AAkHUAEcNBCAELQADQdAARw0EIAQtAARBL0cNBCADQRE6ACYgA0ECOgAkIANBhonAACkAADcAbCADQY6JwAApAAA3AHQgA0GWicAAKQAANwB8DAgLIAJBAmohACADLQAkQQJGDScgA0EGOgAkDCcLIANBDDoAJiADQQI6ACQgA0HPisAAKQAANwBsIANB14rAACkAADcAdCADQd+KwAApAAA3AHwgA0HnisAAKAAANgCEAQwcCyADKAIAIAhLDS0gA0EGOgAmIANBAjoAJCADQbuKwAApAAA3AGwgA0HDisAAKQAANwB0IANBy4rAACgAADYAfAwdCyAIRQ0FIAhBAWsgCk8N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KQAANwBsIANBwojAACkAADcAdCADQcqIwAApAAA3AHwMBQsgEyANayITIAtqIRUgCSEHIAYhAAJAA0AgACAKTw0pIAAgBGotAAAtAICGQARAIABBAWohACAHQQFrIgdFDQIMAQsLIANBBjoAJiADQQI6ACQgA0HSiMAAKQAANwBsIANB2ojAACkAADcAdCADQd+IwAApAAA3AHkMBwsgDiAQQQlqRw0CAkAgDiALa0EIRw0AIA0pAAAiLkLIqNGC9cWMlzBRDQIgLkLIqNGC9aWMlzFSDQAgD0UNBCADQRE6ACYgA0ECOgAkIANB54jAACkAADcAbCADQe+IwAApAAA3AHQgA0H3iMAAKQAANwB8IANB/ojAACkAADcAgwEMHgsLIANBBjoAJiADQQI6ACQgA0GeicAAKQAANwBsIANBponAACkAADcAdEEQIQhB/AAMKgsgDw0BIANBEToAJiADQQI6ACQgA0GGicAAKQAANwBsIANBjonAACkAADcAdCADQZaJwAApAAA3AHwMAgsgA0EGOgAmIANBAjoAJCADQa6JwAApAAA3AGwgA0G2icAAKQAANwB0IANBu4nAACkAADcAeQwDCwJAICNFDQAgQEIAUgRAIAVBEGpBgYAETw0qIAMoAiAhACADKAL4AiAFakEIOgAAIAMoAvgCIAVqQQFqIAA2AAAgAygC+AIgBWpBBWogAjYAACAFQQlqIQULID9CAFIEQCAFQRBqQYGABE8NKiADKAIgIQAgAygC+AIgBWpBCToAACADKAL4AiAFakEBaiAAIAZqNgAAIAMoAvgCIAVqQQVqIAk2AAAgBUEJaiEFCyA7QgBSBEAgBUEQakGBgARPDSogAygCICEAIAMoAvgCIAVqQQo6AAAgAygC+AIgBWpBAWogACALajYAACADKAL4AiAFakEFaiATNgAAIAVBCWohBQsgOlANACAFQRBqQYCABEsNKSADKAIgIQAgAygC+AIgBWpBCzoAACADKAL4AiAFakEBaiAAIBVBAWpqNgAAIAMoAvgCIAVqQQVqQQM2AAAgBUEJaiEFCyAOQQJqIQAgAy0AJCECIAMtAExBCkYEQCACQQJGDSEgA0EFOgAkDCELIAJBAkYNICADQQY6ACQMIAtBGCEIQYQBDCYLIAMoAgAgCEsNJiADQQY6ACYgA0ECOgAkIANBpYjA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EFkgASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFB3JvAACgCAEcNAUHUm8AAIAA2AgAPCyACIANBfnE2AgQgASAAQQFyNgIEIAAgAWogADYCAAsgAEGAAkkNBCABIAAQW0H0m8AAQfSbwAAoAgBBAWsiADYCACAADQZBvJnAACgCACIADQJB/x8MAwtB4JvAACABNgIAQdibwABB2JvAACgCACAAaiIANgIAIAEgAEEBcjYCBEHcm8AAKAIAIAFGBEBB1JvAAEEANgIAQdybwABBADYCAAsgAEHsm8AAKAIAIgJNDQVB4JvAACgCACIARQ0FQdibwAAoAgAiA0EpSQ0EQbSZwAAhAQNAIAAgASgCACIETwRAIAAgBCABKAIEakkNBgsgASgCCCEBDAALAAtB3JvAACABNgIAQdSbwABB1JvAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPC0EAIQEDQCABQQFqIQEgACgCCCIADQALQf8fIAEgAUH/H00bCzYCAA8LAkBBzJvAACgCACICQQEgAEEDdnQiA3FFBEBBzJvAACACIANyNgIAIABB+AFxQcSZwABqIgAhAgwBCyAAQfgBcSIAQcSZwABqIQIgAEHMmcAAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0H0m8AAQbyZwAAoAgAiAAR/QQAhAQNAIAFBAWohASAAKAIIIgANAAtB/x8gASABQf8fTRsFQf8fCzYCACACIANPDQBB7JvAAEF/NgIACwuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CAkAgACgCHEECdEG0mMAAaiIBKAIAIABHBEAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtBzJvAAEHMm8AAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYDwsPC0HQm8AAQdCbwAAoAgBBfiAAKAIcd3E2AgALjgQBAn8gACABaiECAkACQAJAIAAoAgQiA0EBcQ0AIANBAnFFDQEgACgCACIDIAFqIQEgACADayIAQdybwAAoAgBGBEAgAigCBEEDcUEDRw0BQdSbwAAgATYCACACIAIoAgRBfnE2AgQgACABQQFyNgIEIAIgATYCAA8LIAAgAxBZCwJAAkAgAigCBCIDQQJxRQRAIAJB4JvAACgCAEYNAiACQdybwAAoAgBGDQQgAiADQXhxIgIQWSAAIAEgAmoiAUEBcjYCBCAAIAFqIAE2AgAgAEHcm8AAKAIARw0BQdSbwAAgATYCAA8LIAIgA0F+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQYACTwRAIAAgARBbDwsCQEHMm8AAKAIAIgJBASABQQN2dCIDcUUEQEHMm8AAIAIgA3I2AgAgAUH4AXFBxJnAAGoiASECDAELIAFB+AFxIgFBxJnAAGohAiABQcyZwABqKAIAIQELIAIgADYCCCABIAA2AgwgACACNgIMIAAgATYCCA8LQeCbwAAgADYCAEHYm8AAQdibwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEHcm8AAKAIARw0AQdSbwABBADYCAEHcm8AAQQA2AgALDwtB3JvAACAANgIAQdSbwABB1JvAACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgALwwIBBH8gAEIANwIQIAACf0EAIAFBCHYiA0UNABpBHyABQYCAgAhPDQAaIAFBJiADZyIDa3ZBAXEgA0EBdHJBPnMLIgI2AhwgAkECdEG0mMAAaiEEQQEgAnQiA0HQm8AAKAIAcUUEQCAEIAA2AgAgACAENgIYIAAgADYCDCAAIAA2AghB0JvAAEHQm8AAKAIAIANyNgIADwsCQAJAIAEgBCgCACIDKAIEQXhxRgRAIAMhAgwBCyABQRkgAkEBdmtBACACQR9HG3QhBQNAIAMgBUEddkEEcWoiBCgCECICRQ0CIAVBAXQhBSACIQMgAigCBEF4cSABRw0ACwsgAigCCCIBIAA2AgwgAiAANgIIIABBADYCGCAAIAI2AgwgACABNgIIDwsgBEEQaiAANgIAIAAgAzYCGCAAIAA2AgwgACAANgIICwvuFQcAQaGAwAALXgEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAQYmCwAALAQEAQaCCwAAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiYTAAAsBAQBBoITAAAvgAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEGhhsAAC14BAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAEGAiMAAC7QQVW5leHBlY3RlZCBlbmQgb2YgZGF0YVVuZXhwZWN0ZWQgZGF0YVJlcXVlc3QgbGluZSB0b28gbG9uZ0ludmFsaWQgbWV0aG9kIGNoYXJhY3RlckludmFsaWQgVVJMIGNoYXJhY3RlclBSSSBpcyBvbmx5IHZhbGlkIHdpdGggSFRUUC8yLjBVbnN1cHBvcnRlZCBIVFRQIHZlcnNpb25JbnZhbGlkIHByb3RvY29sSW52YWxpZCBwcm90b2NvbCBuYW1lRXhwZWN0ZWQgLyBhZnRlciB0aGUgcHJvdG9jb2wgbmFtZUV4cGVjdGVkIHNwYWNlIGFmdGVyIFVSTEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZFJlcXVlc3QgbGluZSB0b28gc2hvcnRFeHBlY3RlZCBDUkxGU3RhdHVzIGxpbmUgdG9vIGxvbmdJbnZhbGlkIEhUVFAgcmVzcG9uc2Ugc3RhdHVzSW52YWxpZCBzdGF0dXMgcmVhc29uIGNoYXJhY3RlckV4cGVjdGVkIGEgc3BhY2UgYWZ0ZXIgSFRUUCByZXNwb25zZSBzdGF0dXNFeHBlY3RlZCBzcGFjZSBhZnRlciBwcm90b2NvbFN0YXR1cyBsaW5lIHRvbyBzaG9ydE1hbGZvcm1lZCBIVFRQLzIuMCBwcmVmYWNlSGVhZGVyIGxpbmUgdG9vIGxvbmdVbmV4cGVjdGVkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmb3IgYSByZXNwb25zZSB3aXRob3V0IGJvZHlFeHBlY3RlZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgdmFsdWVJbnZhbGlkIENvbnRlbnQtTGVuZ3RoIGhlYWRlckludmFsaWQgZHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoIGhlYWRlclVuZXhwZWN0ZWQgQ29udGVudC1MZW5ndGggaGVhZGVyIHdoZW4gVHJhbnNmZXItRW5jb2RpbmcgaGVhZGVyIGlzIHByZXNlbnRVbmV4cGVjdGVkIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciBmb3IgYSByZXNwb25zZSB3aXRob3V0IGJvZHlFeHBlY3RlZCBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgdmFsdWVUaGUgdmFsdWUgImNodW5rZWQiIGluIHRoZSBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgbXVzdCBiZSB0aGUgbGFzdCBwcm92aWRlZCBhbmQgY2FuIGJlIHByb3ZpZGVkIG9ubHkgb25jZVRoZSB2YWx1ZSAiY2h1bmtlZCIgaW4gdGhlIFRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciBtdXN0IGJlIHRoZSBsYXN0IHByb3ZpZGVkVW5leHBlY3RlZCBUcmFuc2Zlci1FbmNvZGluZyBoZWFkZXIgd2hlbiBDb250ZW50LUxlbmd0aCBoZWFkZXIgaXMgcHJlc2VudEV4cGVjdGVkIENvbm5lY3Rpb24gaGVhZGVyIHZhbHVlSW52YWxpZCBDb25uZWN0aW9uIGhlYWRlciB2YWx1ZUV4cGVjdGVkIFRyYWlsZXIgaGVhZGVyIHZhbHVlRXhwZWN0ZWQgVXBncmFkZSBoZWFkZXIgdmFsdWVJbnZhbGlkIFVwZ3JhZGUgaGVhZGVyIHZhbHVlSW52YWxpZCBoZWFkZXIgZmllbGQgbmFtZSBjaGFyYWN0ZXJJbnZhbGlkIGhlYWRlciBmaWVsZCB2YWx1ZSBjaGFyYWN0ZXJNaXNzaW5nIENvbm5lY3Rpb24gaGVhZGVyIHNldCB0byAidXBncmFkZSIgd2hlbiB1c2luZyB0aGUgVXBncmFkZSBoZWFkZXJUcmFpbGVycyBhcmUgbm90IGFsbG93ZWQgd2hlbiBub3QgdXNpbmcgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZ1VuZXhwZWN0ZWQgY29udGVudCBmb3IgdGhlIHJlcXVlc3QgKEdFVCBvciBIRUFEKVRyYW5zZmVyLUVuY29kaW5nIGxhc3QgaGVhZGVyIHZhbHVlIG11c3QgYmUgImNodW5rZWQiIGlmIHRoZSBoZWFkZXIgaXMgcHJlc2VudENodW5rIGhlYWRlciB0b28gbG9uZ0ludmFsaWQgY2h1bmsgbGVuZ3RoIGNoYXJhY3RlckludmFsaWQgY2h1bmsgbGVuZ3RoIHNpemVFeHBlY3RlZCBjaHVuayBleHRlbnNpb24gbmFtZUludmFsaWQgY2h1bmsgZXh0ZW5zaW9uIG5hbWUgY2hhcmFjdGVyRXhwZWN0ZWQgY2xvc2luZyBxdW90ZSBmb3IgY2h1bmsgZXh0ZW5zaW9uIHZhbHVlSW52YWxpZCBjaHVuayBleHRlbnNpb24gcXVvdGVkIHZhbHVlIGNoYXJhY3RlckV4cGVjdGVkIGNodW5rIGV4dGVuc2lvbiB2YWx1ZUludmFsaWQgY2h1bmsgZXh0ZW5zaW9uIHZhbHVlIGNoYXJhY3RlckludmFsaWQgY2h1bmsgZXh0ZW5zaW9uIGNoYXJhY3RlciBhZnRlciB2YWx1ZUV4cGVjdGVkIENSTEYgYWZ0ZXIgY2h1bmsgZGF0YVRyYWlsZXIgbGluZSB0b28gbG9uZ0ludmFsaWQgdHJhaWxlciBmaWVsZCBuYW1lIGNoYXJhY3RlckludmFsaWQgdHJhaWxlciBmaWVsZCB2YWx1ZSBjaGFyYWN0ZXJJbnZhbGlkIHN0YXRl","base64")),textEncoder=new TextEncoder,textDecoder=new TextDecoder;function log(logger,raw){let len=Number(BigInt.asUintN(32,raw)),ptr=Number(raw>>32n);logger(textDecoder.decode(new Uint8Array(this.memory.buffer,ptr,len)))}function alloc(len){return this.alloc(len)>>>0}function dealloc(ptr,len){return this.dealloc(ptr,len)}function create(){return this.create()>>>0}function destroy(parser){this.destroy(parser)}function parse3(parser,data,limit){return this.parse(parser,data,limit)>>>0}function fail(parser,code,description){let len=description.length,ptr=this.alloc(len),buffer=new Uint8Array(this.memory.buffer,ptr,len);textEncoder.encodeInto(description,buffer),this.fail(parser,code,ptr,len),this.dealloc(ptr,len)}function hasDebug(){return this.milo_has_debug()!==0}var Errors3=Object.freeze({NONE:0,USER:1,CALLBACK_ERROR:2,UNEXPECTED_STATE:3,UNEXPECTED_DATA:4,UNEXPECTED_EOF:5,UNEXPECTED_CHARACTER:6,UNEXPECTED_CONTENT_LENGTH:7,UNEXPECTED_TRANSFER_ENCODING:8,UNEXPECTED_CONTENT:9,UNEXPECTED_TRAILERS:10,INVALID_VERSION:11,INVALID_STATUS:12,INVALID_CONTENT_LENGTH:13,INVALID_TRANSFER_ENCODING:14,INVALID_CHUNK_SIZE:15,MISSING_CONNECTION_UPGRADE:16,UNSUPPORTED_HTTP_VERSION:17,0:"NONE",1:"USER",2:"CALLBACK_ERROR",3:"UNEXPECTED_STATE",4:"UNEXPECTED_DATA",5:"UNEXPECTED_EOF",6:"UNEXPECTED_CHARACTER",7:"UNEXPECTED_CONTENT_LENGTH",8:"UNEXPECTED_TRANSFER_ENCODING",9:"UNEXPECTED_CONTENT",10:"UNEXPECTED_TRAILERS",11:"INVALID_VERSION",12:"INVALID_STATUS",13:"INVALID_CONTENT_LENGTH",14:"INVALID_TRANSFER_ENCODING",15:"INVALID_CHUNK_SIZE",16:"MISSING_CONNECTION_UPGRADE",17:"UNSUPPORTED_HTTP_VERSION"}),Methods=Object.freeze({OTHER:0,GET:1,HEAD:2,POST:3,PUT:4,DELETE:5,CONNECT:6,OPTIONS:7,TRACE:8,PATCH:9,PRI:10,0:"OTHER",1:"GET",2:"HEAD",3:"POST",4:"PUT",5:"DELETE",6:"CONNECT",7:"OPTIONS",8:"TRACE",9:"PATCH",10:"PRI"}),Callbacks=Object.freeze({ON_ERROR:0,ON_FINISH:1,ON_MESSAGE_START:2,ON_MESSAGE_COMPLETE:3,ON_REQUEST:4,ON_RESPONSE:5,ON_RESET:6,ON_METHOD:7,ON_URL:8,ON_PROTOCOL:9,ON_VERSION:10,ON_STATUS:11,ON_REASON:12,ON_HEADER_NAME:13,ON_HEADER_VALUE:14,ON_HEADERS:15,ON_CONNECT:16,ON_UPGRADE:17,ON_CHUNK_LENGTH:18,ON_CHUNK_EXTENSION_NAME:19,ON_CHUNK_EXTENSION_VALUE:20,ON_CHUNK:21,ON_BODY:22,ON_DATA:23,ON_TRAILER_NAME:24,ON_TRAILER_VALUE:25,ON_TRAILERS:26,ON_STATE_CHANGE:27,0:"ON_ERROR",1:"ON_FINISH",2:"ON_MESSAGE_START",3:"ON_MESSAGE_COMPLETE",4:"ON_REQUEST",5:"ON_RESPONSE",6:"ON_RESET",7:"ON_METHOD",8:"ON_URL",9:"ON_PROTOCOL",10:"ON_VERSION",11:"ON_STATUS",12:"ON_REASON",13:"ON_HEADER_NAME",14:"ON_HEADER_VALUE",15:"ON_HEADERS",16:"ON_CONNECT",17:"ON_UPGRADE",18:"ON_CHUNK_LENGTH",19:"ON_CHUNK_EXTENSION_NAME",20:"ON_CHUNK_EXTENSION_VALUE",21:"ON_CHUNK",22:"ON_BODY",23:"ON_DATA",24:"ON_TRAILER_NAME",25:"ON_TRAILER_VALUE",26:"ON_TRAILERS",27:"ON_STATE_CHANGE"}),CallbackActives=Object.freeze({NONE:0n,ON_ERROR:1n,ON_FINISH:2n,ON_MESSAGE_START:4n,ON_MESSAGE_COMPLETE:8n,ON_REQUEST:16n,ON_RESPONSE:32n,ON_RESET:64n,ON_METHOD:128n,ON_URL:256n,ON_PROTOCOL:512n,ON_VERSION:1024n,ON_STATUS:2048n,ON_REASON:4096n,ON_HEADER_NAME:8192n,ON_HEADER_VALUE:16384n,ON_HEADERS:32768n,ON_CONNECT:65536n,ON_UPGRADE:131072n,ON_CHUNK_LENGTH:262144n,ON_CHUNK_EXTENSION_NAME:524288n,ON_CHUNK_EXTENSION_VALUE:1048576n,ON_CHUNK:2097152n,ON_BODY:4194304n,ON_DATA:8388608n,ON_TRAILER_NAME:16777216n,ON_TRAILER_VALUE:33554432n,ON_TRAILERS:67108864n,ON_STATE_CHANGE:134217728n,ALL:268435455n,0n:"NONE",1n:"ON_ERROR",2n:"ON_FINISH",4n:"ON_MESSAGE_START",8n:"ON_MESSAGE_COMPLETE",16n:"ON_REQUEST",32n:"ON_RESPONSE",64n:"ON_RESET",128n:"ON_METHOD",256n:"ON_URL",512n:"ON_PROTOCOL",1024n:"ON_VERSION",2048n:"ON_STATUS",4096n:"ON_REASON",8192n:"ON_HEADER_NAME",16384n:"ON_HEADER_VALUE",32768n:"ON_HEADERS",65536n:"ON_CONNECT",131072n:"ON_UPGRADE",262144n:"ON_CHUNK_LENGTH",524288n:"ON_CHUNK_EXTENSION_NAME",1048576n:"ON_CHUNK_EXTENSION_VALUE",2097152n:"ON_CHUNK",4194304n:"ON_BODY",8388608n:"ON_DATA",16777216n:"ON_TRAILER_NAME",33554432n:"ON_TRAILER_VALUE",67108864n:"ON_TRAILERS",134217728n:"ON_STATE_CHANGE",268435455n:"ALL"}),Events=Object.freeze({END:0,ERROR:1,FINISH:2,MESSAGE_START:3,MESSAGE_COMPLETE:4,REQUEST:5,RESPONSE:6,RESET:7,METHOD:8,URL:9,PROTOCOL:10,VERSION:11,STATUS:12,REASON:13,HEADER_NAME:14,HEADER_VALUE:15,HEADERS:16,CONNECT:17,UPGRADE:18,CHUNK_LENGTH:19,CHUNK_EXTENSION_NAME:20,CHUNK_EXTENSION_VALUE:21,CHUNK:22,BODY:23,DATA:24,TRAILER_NAME:25,TRAILER_VALUE:26,TRAILERS:27,STATE_CHANGE:28,0:"END",1:"ERROR",2:"FINISH",3:"MESSAGE_START",4:"MESSAGE_COMPLETE",5:"REQUEST",6:"RESPONSE",7:"RESET",8:"METHOD",9:"URL",10:"PROTOCOL",11:"VERSION",12:"STATUS",13:"REASON",14:"HEADER_NAME",15:"HEADER_VALUE",16:"HEADERS",17:"CONNECT",18:"UPGRADE",19:"CHUNK_LENGTH",20:"CHUNK_EXTENSION_NAME",21:"CHUNK_EXTENSION_VALUE",22:"CHUNK",23:"BODY",24:"DATA",25:"TRAILER_NAME",26:"TRAILER_VALUE",27:"TRAILERS",28:"STATE_CHANGE"}),EventActives=Object.freeze({NONE:0n,ON_ERROR:1n,ON_FINISH:2n,ON_MESSAGE_START:4n,ON_MESSAGE_COMPLETE:8n,ON_REQUEST:16n,ON_RESPONSE:32n,ON_RESET:64n,ON_METHOD:128n,ON_URL:256n,ON_PROTOCOL:512n,ON_VERSION:1024n,ON_STATUS:2048n,ON_REASON:4096n,ON_HEADER_NAME:8192n,ON_HEADER_VALUE:16384n,ON_HEADERS:32768n,ON_CONNECT:65536n,ON_UPGRADE:131072n,ON_CHUNK_LENGTH:262144n,ON_CHUNK_EXTENSION_NAME:524288n,ON_CHUNK_EXTENSION_VALUE:1048576n,ON_CHUNK:2097152n,ON_BODY:4194304n,ON_DATA:8388608n,ON_TRAILER_NAME:16777216n,ON_TRAILER_VALUE:33554432n,ON_TRAILERS:67108864n,ON_STATE_CHANGE:134217728n,ALL:268435455n,0n:"NONE",1n:"ON_ERROR",2n:"ON_FINISH",4n:"ON_MESSAGE_START",8n:"ON_MESSAGE_COMPLETE",16n:"ON_REQUEST",32n:"ON_RESPONSE",64n:"ON_RESET",128n:"ON_METHOD",256n:"ON_URL",512n:"ON_PROTOCOL",1024n:"ON_VERSION",2048n:"ON_STATUS",4096n:"ON_REASON",8192n:"ON_HEADER_NAME",16384n:"ON_HEADER_VALUE",32768n:"ON_HEADERS",65536n:"ON_CONNECT",131072n:"ON_UPGRADE",262144n:"ON_CHUNK_LENGTH",524288n:"ON_CHUNK_EXTENSION_NAME",1048576n:"ON_CHUNK_EXTENSION_VALUE",2097152n:"ON_CHUNK",4194304n:"ON_BODY",8388608n:"ON_DATA",16777216n:"ON_TRAILER_NAME",33554432n:"ON_TRAILER_VALUE",67108864n:"ON_TRAILERS",134217728n:"ON_STATE_CHANGE",268435455n:"ALL"}),States=Object.freeze({START:0,FINISH:1,ERROR:2,REQUEST_LINE:3,STATUS_LINE:4,HTTP2_PREFACE:5,HEADER:6,BODY_DECISION:7,BODY_VIA_CONTENT_LENGTH:8,BODY_WITH_NO_LENGTH:9,CHUNK_HEADER:10,CHUNK_EXTENSIONS:11,CHUNK_DATA:12,TRAILER:13,TUNNEL:14,0:"START",1:"FINISH",2:"ERROR",3:"REQUEST_LINE",4:"STATUS_LINE",5:"HTTP2_PREFACE",6:"HEADER",7:"BODY_DECISION",8:"BODY_VIA_CONTENT_LENGTH",9:"BODY_WITH_NO_LENGTH",10:"CHUNK_HEADER",11:"CHUNK_EXTENSIONS",12:"CHUNK_DATA",13:"TRAILER",14:"TUNNEL"}),ParserFields=Object.freeze({MAX_START_LINE_LENGTH:0,MAX_HEADER_LENGTH:4,MAX_BODY_PAYLOAD:8,AUTODETECT:16,IS_REQUEST:17,SUSPEND_AFTER_HEADERS:18,MANAGE_UNCONSUMED:19,CONTINUE_WITHOUT_DATA:20,IS_CONNECT:21,SKIP_BODY:22,DEBUG:23,PARSED:24,POSITION:32,STATE:36,PAUSED:37,ERROR_CODE:38,CONTENT_LENGTH:40,CHUNK_SIZE:48,REMAINING_CONTENT_LENGTH:56,REMAINING_CHUNK_SIZE:64,STATUS:72,METHOD:76,HAS_CONTENT_LENGTH:77,HAS_TRANSFER_ENCODING:78,HAS_CHUNKED_TRANSFER_ENCODING:79,HAS_CONNECTION_CLOSE:80,HAS_CONNECTION_UPGRADE:81,HAS_UPGRADE:82,HAS_TRAILERS:83,ACTIVE_CALLBACKS:88,ACTIVE_EVENTS:96,PTR:104,ERROR_DESCRIPTION:108,UNCONSUMED:364,UNCONSUMED_LEN:368,ERROR_DESCRIPTION_LEN:372,EVENTS:376,0:"MAX_START_LINE_LENGTH",4:"MAX_HEADER_LENGTH",8:"MAX_BODY_PAYLOAD",16:"AUTODETECT",17:"IS_REQUEST",18:"SUSPEND_AFTER_HEADERS",19:"MANAGE_UNCONSUMED",20:"CONTINUE_WITHOUT_DATA",21:"IS_CONNECT",22:"SKIP_BODY",23:"DEBUG",24:"PARSED",32:"POSITION",36:"STATE",37:"PAUSED",38:"ERROR_CODE",40:"CONTENT_LENGTH",48:"CHUNK_SIZE",56:"REMAINING_CONTENT_LENGTH",64:"REMAINING_CHUNK_SIZE",72:"STATUS",76:"METHOD",77:"HAS_CONTENT_LENGTH",78:"HAS_TRANSFER_ENCODING",79:"HAS_CHUNKED_TRANSFER_ENCODING",80:"HAS_CONNECTION_CLOSE",81:"HAS_CONNECTION_UPGRADE",82:"HAS_UPGRADE",83:"HAS_TRAILERS",88:"ACTIVE_CALLBACKS",96:"ACTIVE_EVENTS",104:"PTR",108:"ERROR_DESCRIPTION",364:"UNCONSUMED",368:"UNCONSUMED_LEN",372:"ERROR_DESCRIPTION_LEN",376:"EVENTS"});function isAutodetect(parser){return this.is_autodetect(parser)!==0}function isRequest(parser){return this.is_request(parser)!==0}function isPaused(parser){return this.is_paused(parser)!==0}function shouldManageUnconsumed(parser){return this.should_manage_unconsumed(parser)!==0}function shouldSuspendAfterHeaders(parser){return this.should_suspend_after_headers(parser)!==0}function getMaxStartLineLength(parser){return this.get_max_start_line_length(parser)>>>0}function getMaxHeaderLength(parser){return this.get_max_header_length(parser)>>>0}function getMaxBodyPayload(parser){return BigInt.asUintN(64,this.get_max_body_payload(parser))}function shouldContinueWithoutData(parser){return this.should_continue_without_data(parser)!==0}function isConnect(parser){return this.is_connect(parser)!==0}function isDebug(parser){return this.is_debug(parser)!==0}function shouldSkipBody(parser){return this.should_skip_body(parser)!==0}function getState(parser){return this.get_state(parser)>>>0}function getPosition(parser){return this.get_position(parser)>>>0}function getParsed(parser){return BigInt.asUintN(64,this.get_parsed(parser))}function getErrorCode(parser){return this.get_error_code(parser)>>>0}function getMethod(parser){return this.get_method(parser)>>>0}function getStatus(parser){return this.get_status(parser)>>>0}function hasConnectionClose(parser){return this.has_connection_close(parser)!==0}function hasConnectionUpgrade(parser){return this.has_connection_upgrade(parser)!==0}function getContentLength(parser){return BigInt.asUintN(64,this.get_content_length(parser))}function getChunkSize(parser){return BigInt.asUintN(64,this.get_chunk_size(parser))}function getRemainingContentLength(parser){return BigInt.asUintN(64,this.get_remaining_content_length(parser))}function getRemainingChunkSize(parser){return BigInt.asUintN(64,this.get_remaining_chunk_size(parser))}function hasContentLength(parser){return this.has_content_length(parser)!==0}function hasTransferEncoding(parser){return this.has_transfer_encoding(parser)!==0}function hasChunkedTransferEncoding(parser){return this.has_chunked_transfer_encoding(parser)!==0}function hasUpgrade(parser){return this.has_upgrade(parser)!==0}function hasTrailers(parser){return this.has_trailers(parser)!==0}function getErrorDescription(parser){let raw=this.get_error_description_raw(parser),len=Number(BigInt.asUintN(32,raw)),ptr=Number(raw>>32n);return textDecoder.decode(new Uint8Array(this.memory.buffer,ptr,len))}function setShouldAutodetect(parser,value){this.set_should_autodetect(parser,value)}function setShouldContinueWithoutData(parser,value){this.set_should_continue_without_data(parser,value)}function setIsRequest(parser,value){this.set_is_request(parser,value)}function setIsConnect(parser,value){this.set_is_connect(parser,value)}function setDebug(parser,value){this.set_debug(parser,value)}function setShouldManageUnconsumed(parser,value){this.set_should_manage_unconsumed(parser,value)}function setShouldSuspendAfterHeaders(parser,value){this.set_should_suspend_after_headers(parser,value)}function setMaxStartLineLength(parser,value){this.set_max_start_line_length(parser,value)}function setMaxHeaderLength(parser,value){this.set_max_header_length(parser,value)}function setMaxBodyPayload(parser,value){this.set_max_body_payload(parser,value)}function setShouldSkipBody(parser,value){this.set_should_skip_body(parser,value)}function setActiveCallbacks(parser,value){this.set_active_callbacks(parser,value)}function setActiveEvents(parser,value){this.set_active_events(parser,value)}function simpleCreate(spans,create2){let parser=create2();return spans[parser]=[],this.setActiveCallbacks(parser,this.CALLBACK_ACTIVE_ALL),parser}function simpleDestroy(spans,destroy2,parser){spans[parser]=void 0,destroy2(parser)}function noop(){}function setup(env={}){let{logger:logOption,...instanceEnvironment}=env,logger=noop,context={};logOption&&(typeof logOption!="function"&&(logOption=console.log),logger=log.bind(context,logOption));let wasm=new WebAssembly.Instance(wasmModule,{env:{logger,on_error:noop,on_finish:noop,on_message_start:noop,on_message_complete:noop,on_request:noop,on_response:noop,on_reset:noop,on_method:noop,on_url:noop,on_protocol:noop,on_version:noop,on_status:noop,on_reason:noop,on_header_name:noop,on_header_value:noop,on_headers:noop,on_connect:noop,on_upgrade:noop,on_chunk_length:noop,on_chunk_extension_name:noop,on_chunk_extension_value:noop,on_chunk:noop,on_body:noop,on_data:noop,on_trailer_name:noop,on_trailer_value:noop,on_trailers:noop,on_state_change:noop,...instanceEnvironment}}).exports;return context.memory=wasm.memory,{version:{raw:"0.9.0",major:0,minor:9,patch:0,prerelease:""},METHOD_OTHER:0,METHOD_GET:1,METHOD_HEAD:2,METHOD_POST:3,METHOD_PUT:4,METHOD_DELETE:5,METHOD_CONNECT:6,METHOD_OPTIONS:7,METHOD_TRACE:8,METHOD_PATCH:9,METHOD_PRI:10,CALLBACK_ON_ERROR:0,CALLBACK_ON_FINISH:1,CALLBACK_ON_MESSAGE_START:2,CALLBACK_ON_MESSAGE_COMPLETE:3,CALLBACK_ON_REQUEST:4,CALLBACK_ON_RESPONSE:5,CALLBACK_ON_RESET:6,CALLBACK_ON_METHOD:7,CALLBACK_ON_URL:8,CALLBACK_ON_PROTOCOL:9,CALLBACK_ON_VERSION:10,CALLBACK_ON_STATUS:11,CALLBACK_ON_REASON:12,CALLBACK_ON_HEADER_NAME:13,CALLBACK_ON_HEADER_VALUE:14,CALLBACK_ON_HEADERS:15,CALLBACK_ON_CONNECT:16,CALLBACK_ON_UPGRADE:17,CALLBACK_ON_CHUNK_LENGTH:18,CALLBACK_ON_CHUNK_EXTENSION_NAME:19,CALLBACK_ON_CHUNK_EXTENSION_VALUE:20,CALLBACK_ON_CHUNK:21,CALLBACK_ON_BODY:22,CALLBACK_ON_DATA:23,CALLBACK_ON_TRAILER_NAME:24,CALLBACK_ON_TRAILER_VALUE:25,CALLBACK_ON_TRAILERS:26,CALLBACK_ON_STATE_CHANGE:27,EVENT_END:0,EVENT_ERROR:1,EVENT_FINISH:2,EVENT_MESSAGE_START:3,EVENT_MESSAGE_COMPLETE:4,EVENT_REQUEST:5,EVENT_RESPONSE:6,EVENT_RESET:7,EVENT_METHOD:8,EVENT_URL:9,EVENT_PROTOCOL:10,EVENT_VERSION:11,EVENT_STATUS:12,EVENT_REASON:13,EVENT_HEADER_NAME:14,EVENT_HEADER_VALUE:15,EVENT_HEADERS:16,EVENT_CONNECT:17,EVENT_UPGRADE:18,EVENT_CHUNK_LENGTH:19,EVENT_CHUNK_EXTENSION_NAME:20,EVENT_CHUNK_EXTENSION_VALUE:21,EVENT_CHUNK:22,EVENT_BODY:23,EVENT_DATA:24,EVENT_TRAILER_NAME:25,EVENT_TRAILER_VALUE:26,EVENT_TRAILERS:27,EVENT_STATE_CHANGE:28,CALLBACK_ACTIVE_NONE:0n,EVENT_ACTIVE_NONE:0n,CALLBACK_ACTIVE_ON_ERROR:1n,EVENT_ACTIVE_ON_ERROR:1n,CALLBACK_ACTIVE_ON_FINISH:2n,EVENT_ACTIVE_ON_FINISH:2n,CALLBACK_ACTIVE_ON_MESSAGE_START:4n,EVENT_ACTIVE_ON_MESSAGE_START:4n,CALLBACK_ACTIVE_ON_MESSAGE_COMPLETE:8n,EVENT_ACTIVE_ON_MESSAGE_COMPLETE:8n,CALLBACK_ACTIVE_ON_REQUEST:16n,EVENT_ACTIVE_ON_REQUEST:16n,CALLBACK_ACTIVE_ON_RESPONSE:32n,EVENT_ACTIVE_ON_RESPONSE:32n,CALLBACK_ACTIVE_ON_RESET:64n,EVENT_ACTIVE_ON_RESET:64n,CALLBACK_ACTIVE_ON_METHOD:128n,EVENT_ACTIVE_ON_METHOD:128n,CALLBACK_ACTIVE_ON_URL:256n,EVENT_ACTIVE_ON_URL:256n,CALLBACK_ACTIVE_ON_PROTOCOL:512n,EVENT_ACTIVE_ON_PROTOCOL:512n,CALLBACK_ACTIVE_ON_VERSION:1024n,EVENT_ACTIVE_ON_VERSION:1024n,CALLBACK_ACTIVE_ON_STATUS:2048n,EVENT_ACTIVE_ON_STATUS:2048n,CALLBACK_ACTIVE_ON_REASON:4096n,EVENT_ACTIVE_ON_REASON:4096n,CALLBACK_ACTIVE_ON_HEADER_NAME:8192n,EVENT_ACTIVE_ON_HEADER_NAME:8192n,CALLBACK_ACTIVE_ON_HEADER_VALUE:16384n,EVENT_ACTIVE_ON_HEADER_VALUE:16384n,CALLBACK_ACTIVE_ON_HEADERS:32768n,EVENT_ACTIVE_ON_HEADERS:32768n,CALLBACK_ACTIVE_ON_CONNECT:65536n,EVENT_ACTIVE_ON_CONNECT:65536n,CALLBACK_ACTIVE_ON_UPGRADE:131072n,EVENT_ACTIVE_ON_UPGRADE:131072n,CALLBACK_ACTIVE_ON_CHUNK_LENGTH:262144n,EVENT_ACTIVE_ON_CHUNK_LENGTH:262144n,CALLBACK_ACTIVE_ON_CHUNK_EXTENSION_NAME:524288n,EVENT_ACTIVE_ON_CHUNK_EXTENSION_NAME:524288n,CALLBACK_ACTIVE_ON_CHUNK_EXTENSION_VALUE:1048576n,EVENT_ACTIVE_ON_CHUNK_EXTENSION_VALUE:1048576n,CALLBACK_ACTIVE_ON_CHUNK:2097152n,EVENT_ACTIVE_ON_CHUNK:2097152n,CALLBACK_ACTIVE_ON_BODY:4194304n,EVENT_ACTIVE_ON_BODY:4194304n,CALLBACK_ACTIVE_ON_DATA:8388608n,EVENT_ACTIVE_ON_DATA:8388608n,CALLBACK_ACTIVE_ON_TRAILER_NAME:16777216n,EVENT_ACTIVE_ON_TRAILER_NAME:16777216n,CALLBACK_ACTIVE_ON_TRAILER_VALUE:33554432n,EVENT_ACTIVE_ON_TRAILER_VALUE:33554432n,CALLBACK_ACTIVE_ON_TRAILERS:67108864n,EVENT_ACTIVE_ON_TRAILERS:67108864n,CALLBACK_ACTIVE_ON_STATE_CHANGE:134217728n,EVENT_ACTIVE_ON_STATE_CHANGE:134217728n,CALLBACK_ACTIVE_ALL:268435455n,EVENT_ACTIVE_ALL:268435455n,ERROR_NONE:0,ERROR_USER:1,ERROR_CALLBACK_ERROR:2,ERROR_UNEXPECTED_STATE:3,ERROR_UNEXPECTED_DATA:4,ERROR_UNEXPECTED_EOF:5,ERROR_UNEXPECTED_CHARACTER:6,ERROR_UNEXPECTED_CONTENT_LENGTH:7,ERROR_UNEXPECTED_TRANSFER_ENCODING:8,ERROR_UNEXPECTED_CONTENT:9,ERROR_UNEXPECTED_TRAILERS:10,ERROR_INVALID_VERSION:11,ERROR_INVALID_STATUS:12,ERROR_INVALID_CONTENT_LENGTH:13,ERROR_INVALID_TRANSFER_ENCODING:14,ERROR_INVALID_CHUNK_SIZE:15,ERROR_MISSING_CONNECTION_UPGRADE:16,ERROR_UNSUPPORTED_HTTP_VERSION:17,STATE_START:0,STATE_FINISH:1,STATE_ERROR:2,STATE_REQUEST_LINE:3,STATE_STATUS_LINE:4,STATE_HTTP2_PREFACE:5,STATE_HEADER:6,STATE_BODY_DECISION:7,STATE_BODY_VIA_CONTENT_LENGTH:8,STATE_BODY_WITH_NO_LENGTH:9,STATE_CHUNK_HEADER:10,STATE_CHUNK_EXTENSIONS:11,STATE_CHUNK_DATA:12,STATE_TRAILER:13,STATE_TUNNEL:14,PARSER_FIELD_MAX_START_LINE_LENGTH:0,PARSER_FIELD_MAX_HEADER_LENGTH:4,PARSER_FIELD_MAX_BODY_PAYLOAD:8,PARSER_FIELD_AUTODETECT:16,PARSER_FIELD_IS_REQUEST:17,PARSER_FIELD_SUSPEND_AFTER_HEADERS:18,PARSER_FIELD_MANAGE_UNCONSUMED:19,PARSER_FIELD_CONTINUE_WITHOUT_DATA:20,PARSER_FIELD_IS_CONNECT:21,PARSER_FIELD_SKIP_BODY:22,PARSER_FIELD_DEBUG:23,PARSER_FIELD_PARSED:24,PARSER_FIELD_POSITION:32,PARSER_FIELD_STATE:36,PARSER_FIELD_PAUSED:37,PARSER_FIELD_ERROR_CODE:38,PARSER_FIELD_CONTENT_LENGTH:40,PARSER_FIELD_CHUNK_SIZE:48,PARSER_FIELD_REMAINING_CONTENT_LENGTH:56,PARSER_FIELD_REMAINING_CHUNK_SIZE:64,PARSER_FIELD_STATUS:72,PARSER_FIELD_METHOD:76,PARSER_FIELD_HAS_CONTENT_LENGTH:77,PARSER_FIELD_HAS_TRANSFER_ENCODING:78,PARSER_FIELD_HAS_CHUNKED_TRANSFER_ENCODING:79,PARSER_FIELD_HAS_CONNECTION_CLOSE:80,PARSER_FIELD_HAS_CONNECTION_UPGRADE:81,PARSER_FIELD_HAS_UPGRADE:82,PARSER_FIELD_HAS_TRAILERS:83,PARSER_FIELD_ACTIVE_CALLBACKS:88,PARSER_FIELD_ACTIVE_EVENTS:96,PARSER_FIELD_PTR:104,PARSER_FIELD_ERROR_DESCRIPTION:108,PARSER_FIELD_UNCONSUMED:364,PARSER_FIELD_UNCONSUMED_LEN:368,PARSER_FIELD_ERROR_DESCRIPTION_LEN:372,PARSER_FIELD_EVENTS:376,Errors:Errors3,Methods,Callbacks,CallbackActives,Events,EventActives,States,ParserFields,isAutodetect:isAutodetect.bind(wasm),isRequest:isRequest.bind(wasm),isPaused:isPaused.bind(wasm),shouldManageUnconsumed:shouldManageUnconsumed.bind(wasm),shouldSuspendAfterHeaders:shouldSuspendAfterHeaders.bind(wasm),getMaxStartLineLength:getMaxStartLineLength.bind(wasm),getMaxHeaderLength:getMaxHeaderLength.bind(wasm),getMaxBodyPayload:getMaxBodyPayload.bind(wasm),shouldContinueWithoutData:shouldContinueWithoutData.bind(wasm),isConnect:isConnect.bind(wasm),isDebug:isDebug.bind(wasm),shouldSkipBody:shouldSkipBody.bind(wasm),getState:getState.bind(wasm),getPosition:getPosition.bind(wasm),getParsed:getParsed.bind(wasm),getErrorCode:getErrorCode.bind(wasm),getMethod:getMethod.bind(wasm),getStatus:getStatus.bind(wasm),hasConnectionClose:hasConnectionClose.bind(wasm),hasConnectionUpgrade:hasConnectionUpgrade.bind(wasm),getContentLength:getContentLength.bind(wasm),getChunkSize:getChunkSize.bind(wasm),getRemainingContentLength:getRemainingContentLength.bind(wasm),getRemainingChunkSize:getRemainingChunkSize.bind(wasm),hasContentLength:hasContentLength.bind(wasm),hasTransferEncoding:hasTransferEncoding.bind(wasm),hasChunkedTransferEncoding:hasChunkedTransferEncoding.bind(wasm),hasUpgrade:hasUpgrade.bind(wasm),hasTrailers:hasTrailers.bind(wasm),getErrorDescription:getErrorDescription.bind(wasm),setShouldAutodetect:setShouldAutodetect.bind(wasm),setShouldContinueWithoutData:setShouldContinueWithoutData.bind(wasm),setIsRequest:setIsRequest.bind(wasm),setIsConnect:setIsConnect.bind(wasm),setDebug:setDebug.bind(wasm),setShouldManageUnconsumed:setShouldManageUnconsumed.bind(wasm),setShouldSuspendAfterHeaders:setShouldSuspendAfterHeaders.bind(wasm),setMaxStartLineLength:setMaxStartLineLength.bind(wasm),setMaxHeaderLength:setMaxHeaderLength.bind(wasm),setMaxBodyPayload:setMaxBodyPayload.bind(wasm),setShouldSkipBody:setShouldSkipBody.bind(wasm),setActiveCallbacks:setActiveCallbacks.bind(wasm),setActiveEvents:setActiveEvents.bind(wasm),memory:wasm.memory,alloc:alloc.bind(wasm),dealloc:dealloc.bind(wasm),create:create.bind(wasm),destroy:destroy.bind(wasm),parse:parse3.bind(wasm),fail:fail.bind(wasm),hasDebug:hasDebug.bind(wasm),clear:wasm.clear,complete:wasm.complete,finish:wasm.finish,pause:wasm.pause,reset:wasm.reset,resume:wasm.resume}}function simple(){let spans={},milo=setup({});return milo.spans=spans,milo.create=simpleCreate.bind(milo,spans,milo.create),milo.destroy=simpleDestroy.bind(milo,spans,milo.destroy),milo}module.exports={wasmModule,noop,setup,simple}}});var require_parser_h1=__commonJS({"node_modules/undici/lib/dispatcher/parser-h1.js"(exports,module){"use strict";var assert=__require("node:assert"),util=require_util(),timers=require_timers(),{HeadersTimeoutError,HeadersOverflowError,SocketError,InformationalError,BodyTimeoutError,HTTPParserError,ResponseContentLengthMismatchError,ResponseExceededMaxSizeError}=require_errors(),{kUrl,kReset,kClient,kParser,kBlocking,kRunning,kWriting,kQueue,kKeepAliveDefaultTimeout,kRunningIdx,kError,kPipelining,kSocket,kKeepAliveTimeoutValue,kKeepAliveMaxTimeout,kKeepAliveTimeoutThreshold,kBodyTimeout,kMaxResponseSize,kResume,kHTTPContext,kMaxHeadersSize}=require_symbols(),FastBuffer=Buffer[Symbol.species],removeAllListeners=util.removeAllListeners,kPausedByHandler=Symbol("kPausedByHandler"),BUFFER_PAGE_SIZE=4096,INITIAL_BUFFER_SIZE=128*1024,EMPTY_BUF=Buffer.alloc(0),BODY_KIND_CONTENT_LENGTH=0,EVENT_RANGE_SIZE=9,EVENT_HEADERS_SIZE=19,miloPackage,useWasmSIMD=process.arch!=="ppc64";process.env.UNDICI_NO_WASM_SIMD==="1"?useWasmSIMD=!1:process.env.UNDICI_NO_WASM_SIMD==="0"&&(useWasmSIMD=!0);var USE_NATIVE_TIMER=0,USE_FAST_TIMER=1,TIMEOUT_HEADERS=2|USE_FAST_TIMER,TIMEOUT_BODY=4|USE_FAST_TIMER,TIMEOUT_KEEP_ALIVE=8|USE_NATIVE_TIMER,miloEnabled=process.env.UNDICI_USE_MILO==="1"||process.env.UNDICI_USE_MILO==="true",miloInstance=null,currentBuffer=null,currentBufferSize=0,currentBufferPtr=null,currentBufferRef=null;function onParserTimeout(parserWeakRef){let parser=parserWeakRef.deref?parserWeakRef.deref():parserWeakRef;if(!parser)return;let{socket,timeoutType,client,paused}=parser;timeoutType===TIMEOUT_HEADERS?(!socket[kWriting]||socket.writableNeedDrain||client[kRunning]>1)&&(assert(!paused,"cannot be paused while waiting for headers"),util.destroy(socket,new HeadersTimeoutError)):timeoutType===TIMEOUT_BODY?paused||util.destroy(socket,new BodyTimeoutError):timeoutType===TIMEOUT_KEEP_ALIVE&&(assert(client[kRunning]===0&&client[kKeepAliveTimeoutValue]),util.destroy(socket,new InformationalError("socket idle timeout")))}function getMilo(){if(miloInstance)return miloInstance;if(useWasmSIMD)try{miloPackage=require_simd()}catch{}return miloPackage=miloPackage||require_no_simd(),miloInstance=miloPackage.setup(),miloInstance}var H1Parser=class{constructor(client,socket){this.milo=getMilo(),this.client=client,this.socket=socket,this.parser=this.milo.create(),this.events=new FastBuffer(this.milo.memory.buffer,this.parser+this.milo.ParserFields.EVENTS,4).readUInt32LE(0),this.milo.setShouldAutodetect(this.parser,!1),this.milo.setIsRequest(this.parser,!1),this.milo.setShouldManageUnconsumed(this.parser,!1),this.milo.setShouldSuspendAfterHeaders(this.parser,!0),this.milo.setMaxHeaderLength(this.parser,client[kMaxHeadersSize]),this.milo.setActiveEvents(this.parser,this.milo.EVENT_ACTIVE_ON_ERROR|this.milo.EVENT_ACTIVE_ON_MESSAGE_COMPLETE|this.milo.EVENT_ACTIVE_ON_REASON|this.milo.EVENT_ACTIVE_ON_HEADER_NAME|this.milo.EVENT_ACTIVE_ON_HEADER_VALUE|this.milo.EVENT_ACTIVE_ON_HEADERS|this.milo.EVENT_ACTIVE_ON_DATA|this.milo.EVENT_ACTIVE_ON_TRAILER_NAME|this.milo.EVENT_ACTIVE_ON_TRAILER_VALUE),this.timeout=null,this.timeoutWeakRef=new WeakRef(this),this.timeoutValue=null,this.timeoutType=null,this.statusCode=0,this.statusText="",this.upgrade=!1,this.responseStarted=!1,this.pausedByParser=!1,this.pauseStateIsStart=!1,this.headers=[],this.trailers=[],this.headersSize=0,this.trailersSize=0,this.headersMaxSize=client[kMaxHeadersSize],this.shouldKeepAlive=!1,this.paused=!1,this.errored=!1,this.waitingForMoreData=0,this.resume=this.resume.bind(this),this.bytesRead=0,this.keepAlive="",this.connection="",this.contentLength=-1,this.maxResponseSize=client[kMaxResponseSize],this.directBodyRemaining=0,this.directBodyCompletePending=!1,this.headersSuspended=!1,this.skipBody=!1,this[kPausedByHandler]=!1,INITIAL_BUFFER_SIZE>currentBufferSize||currentBuffer.buffer!==this.milo.memory.buffer?this.ensureBuffers(INITIAL_BUFFER_SIZE):this.updateBuffers()}setTimeout(delay,type){delay!==this.timeoutValue||type&USE_FAST_TIMER^this.timeoutType&USE_FAST_TIMER?(this.timeout&&(timers.clearTimeout(this.timeout),this.timeout=null),delay&&(type&USE_FAST_TIMER?this.timeout=timers.setFastTimeout(onParserTimeout,delay,this.timeoutWeakRef):(this.timeout=setTimeout(onParserTimeout,delay,this.timeoutWeakRef),this.timeout?.unref())),this.timeoutValue=delay):this.timeout?.refresh&&this.timeout.refresh(),this.timeoutType=type}ensureBuffers(size){let{milo}=this;currentBufferPtr!=null&&milo.dealloc(currentBufferPtr,currentBufferSize),currentBufferSize=Math.ceil(size/BUFFER_PAGE_SIZE)*BUFFER_PAGE_SIZE,currentBufferPtr=milo.alloc(currentBufferSize),currentBuffer=new FastBuffer(milo.memory.buffer,currentBufferPtr,currentBufferSize),this.updateBuffers()}updateBuffers(){this.parserFields=new FastBuffer(this.milo.memory.buffer,this.parser),this.parserEvents=new FastBuffer(this.milo.memory.buffer,this.events,64*1024)}resume(){if(!(this.socket.destroyed||!this.paused)){if(this.milo.resume(this.parser),assert(this.timeoutType===TIMEOUT_BODY),this.timeout?.refresh&&this.timeout.refresh(),this.paused=!1,this.directBodyCompletePending){try{this.completeDirectBody()}catch(err){util.destroy(this.socket,err);return}if(this.paused)return}this.readMore()}}readMore(){if(!(this.paused||!this.parser))for(;!this.paused&&this.parser&&!(this.waitingForMoreData&&this.socket.readableLength<=this.waitingForMoreData);){this.waitingForMoreData=0;let chunk=this.socket.read();if(chunk===null||this.execute(chunk)===!1)break}}execute(data){let available=data.length;assert(!this.paused);let{socket,milo}=this;try{if(this.directBodyRemaining>0)return this.consumeDirectBody(data);currentBuffer.buffer!==milo.memory.buffer?(currentBuffer=new FastBuffer(milo.memory.buffer,currentBufferPtr,currentBufferSize),this.updateBuffers()):this.parserEvents.buffer!==milo.memory.buffer&&this.updateBuffers();let offset=0,parseLen=available,headersEnd=this.statusCode===0?data.indexOf(`\r
4
4
  \r
5
5
  `):-1;for(headersEnd!==-1&&(parseLen=headersEnd+4);;){parseLen>currentBufferSize&&this.ensureBuffers(parseLen);let parseData=data.subarray(offset,offset+parseLen);currentBuffer.set(parseData),currentBufferRef=parseData;let consumed=milo.parse(this.parser,currentBufferPtr,parseLen);this.drainEvents();let consumedTotal=offset+consumed;if(this.errored||consumed===0&&this.parserFields[milo.ParserFields.ERROR_CODE]!==milo.ERROR_NONE)throw this.createError(data.subarray(consumedTotal));if(this.upgrade)return this.onUpgrade(data.subarray(consumedTotal)),!1;if(this.directBodyCompletePending){if(this.completeDirectBody(),this.paused)return!1}else if(this.pausedByParser)return this.pausedByParser=!1,this.headersSuspended=!1,this[kPausedByHandler]&&this.pauseStateIsStart?(this.pauseStateIsStart=!1,milo.resume(this.parser),this[kPausedByHandler]=!1,!1):(this.pauseStateIsStart=!1,this.paused=!0,socket.unshift(data.subarray(consumedTotal)),!1);if(this.directBodyRemaining>0)return this.consumeDirectBody(data.subarray(consumedTotal));if(consumed<parseLen){let remaining=data.subarray(consumedTotal);return socket.unshift(remaining),this.waitingForMoreData=consumed===0?remaining.length:0,!1}if(offset=consumedTotal,offset>=available){if(this.headersSuspended){this.headersSuspended=!1,parseLen=0;continue}return!0}this.headersSuspended=!1,parseLen=available-offset}}catch(err){return util.destroy(socket,err),!1}finally{currentBufferRef=null}}consumeDirectBody(data){let{socket,client,maxResponseSize}=this,available=data.length,len=Math.min(available,this.directBodyRemaining);if(this.timeout?.refresh&&this.timeout.refresh(),len>0){let request=client[kQueue][client[kRunningIdx]];if(assert(request),assert(this.timeoutType===TIMEOUT_BODY),assert(this.statusCode>=200),maxResponseSize>-1&&this.bytesRead+len>maxResponseSize)throw new ResponseExceededMaxSizeError;if(this.bytesRead+=len,this.directBodyRemaining-=len,request.onResponseData(data.subarray(0,len))===!1)return this.directBodyCompletePending=this.directBodyRemaining===0,this.pauseParser(),this[kPausedByHandler]=!0,this.pausedByParser=!1,this.paused=!0,len<available&&socket.unshift(data.subarray(len)),!1}if(this.directBodyRemaining===0){this.completeDirectBody();let remaining=data.subarray(len);if(this.errored||this.parserFields[this.milo.ParserFields.ERROR_CODE]!==this.milo.ERROR_NONE)throw this.createError(remaining);if(this.pausedByParser)return this.pausedByParser=!1,this.pauseStateIsStart=!1,this.paused=!0,remaining.length>0&&socket.unshift(remaining),!1;if(remaining.length>0)return socket.unshift(remaining),!1}return!0}completeDirectBody(){let{milo}=this;currentBuffer.buffer!==milo.memory.buffer?(currentBuffer=new FastBuffer(milo.memory.buffer,currentBufferPtr,currentBufferSize),this.updateBuffers()):this.parserEvents.buffer!==milo.memory.buffer&&this.updateBuffers(),this.directBodyCompletePending=!1,currentBufferRef=EMPTY_BUF,milo.complete(this.parser),this.drainEvents()}setShouldSkipBody(value){this.skipBody!==value&&(this.skipBody=value,this.milo.setShouldSkipBody(this.parser,value))}finish(){return this.parser?this.directBodyRemaining>0?new ResponseContentLengthMismatchError:(this.parserEvents.buffer!==this.milo.memory.buffer&&this.updateBuffers(),this.milo.finish(this.parser),this.drainEvents(),this.errored?this.createError(EMPTY_BUF):null):null}createError(data){let{contentLength,bytesRead}=this;if(contentLength!==-1&&bytesRead!==contentLength)return new ResponseContentLengthMismatchError;let errorCode=this.parserFields[this.milo.ParserFields.ERROR_CODE],errorName=this.milo.Errors[errorCode],errorDescription=errorName==="UNEXPECTED_EOF"?"Invalid EOF state":this.milo.getErrorDescription(this.parser),reason=errorName==="UNEXPECTED_EOF"?errorDescription:errorDescription?`[ERROR_${errorName}] ${errorDescription}`:`ERROR_${errorName}`;return new HTTPParserError(`Response does not match the HTTP/1.1 protocol (${reason})`,errorName,data)}destroy(){this.parser&&(this.milo.destroy(this.parser),this.parser=null),this.timeout&&timers.clearTimeout(this.timeout),this.timeout=null,this.timeoutValue=null,this.timeoutType=null,this.paused=!1,this.responseStarted=!1,this.pausedByParser=!1,this.pauseStateIsStart=!1,this.connection="",this.skipBody=!1}pauseParser(stateIsStart=!1){this.milo.pause(this.parser),this.pausedByParser=!0,this.pauseStateIsStart=stateIsStart}drainEvents(){let{socket,client,milo}=this,cursor=0,firstEvent=this.parserEvents[0];if(firstEvent!==milo.EVENT_END&&firstEvent!==milo.EVENT_ERROR&&!this.responseStarted){if(this.responseStarted=!0,socket.destroyed)return this.fail(this.milo.ERROR_CALLBACK_ERROR,"Other side closed");let request=client[kQueue][client[kRunningIdx]];if(!request)return this.fail(this.milo.ERROR_CALLBACK_ERROR,"Missing request");request.onResponseStarted()}for(;;){let event=this.parserEvents[cursor],eventLen=EVENT_RANGE_SIZE;switch(event){case milo.EVENT_END:return;case milo.EVENT_ERROR:this.errored=!0;return;case milo.EVENT_MESSAGE_COMPLETE:{let{client:client2,socket:socket2,statusCode,upgrade,trailers,contentLength,bytesRead,shouldKeepAlive}=this;if(this.responseStarted=!1,socket2.destroyed&&(!statusCode||shouldKeepAlive))return this.fail(milo.ERROR_CALLBACK_ERROR,"Other side closed");if(upgrade){this.pauseParser();return}assert(statusCode>=100);let request=client2[kQueue][client2[kRunningIdx]];if(assert(request),this.statusCode=0,this.statusText="",this.bytesRead=0,this.contentLength=-1,this.directBodyRemaining=0,this.directBodyCompletePending=!1,this.headersSuspended=!1,this.skipBody=!1,this.keepAlive="",this.connection="",this.trailers=[],this.trailersSize=0,statusCode<200)break;if(request.method!=="HEAD"&&contentLength!==-1&&bytesRead!==contentLength){util.destroy(socket2,new ResponseContentLengthMismatchError),this.pauseParser();break}request.onResponseEnd(trailers),client2[kQueue][client2[kRunningIdx]++]=null,socket2[kWriting]?(assert(client2[kRunning]===0),util.destroy(socket2,new InformationalError("reset")),this.pauseParser(!0)):shouldKeepAlive?socket2[kReset]&&client2[kRunning]===0?(util.destroy(socket2,new InformationalError("reset")),this.pauseParser(!0)):client2[kPipelining]==null||client2[kPipelining]===1?setImmediate(client2[kResume]):client2[kResume]():(util.destroy(socket2,new InformationalError("reset")),this.pauseParser(!0));break}case milo.EVENT_REASON:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5);this.statusText=new FastBuffer(currentBufferRef.buffer,currentBufferRef.byteOffset+at,len).toString();break}case milo.EVENT_HEADER_NAME:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5),data=len>0?new FastBuffer(currentBufferRef.buffer,currentBufferRef.byteOffset+at,len):EMPTY_BUF;if(this.headers.push(data),this.headersSize+=len,this.headersSize>=this.headersMaxSize)return util.destroy(this.socket,new HeadersOverflowError),this.fail(milo.ERROR_CALLBACK_ERROR,"Headers overflow");break}case milo.EVENT_HEADER_VALUE:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5),data=len>0?new FastBuffer(currentBufferRef.buffer,currentBufferRef.byteOffset+at,len):EMPTY_BUF,key=this.headers[this.headers.length-1];if(this.headers.push(data),key.length===10){let headerName=util.bufferToLowerCasedHeaderName(key);headerName==="keep-alive"?this.keepAlive+=(this.keepAlive.length===0?"":",")+data.toString():headerName==="connection"&&(this.connection+=(this.connection.length===0?"":",")+data.toString())}if(this.headersSize+=len,this.headersSize>=this.headersMaxSize)return util.destroy(this.socket,new HeadersOverflowError),this.fail(milo.ERROR_CALLBACK_ERROR,"Headers overflow");break}case milo.EVENT_HEADERS:{eventLen=EVENT_HEADERS_SIZE;let statusCode=this.parserEvents.readUInt16LE(cursor+5),shouldKeepAlive=this.parserEvents[cursor+7]!==0,shouldUpgrade=this.parserEvents[cursor+8]!==0,hasTrailers=this.parserEvents[cursor+9]!==0,bodyKind=this.parserEvents[cursor+10],contentLength=this.parserEvents.readUInt32LE(cursor+11)+this.parserEvents.readUInt32LE(cursor+15)*4294967296,{socket:socket2,client:client2,headers,statusText}=this;if(socket2.destroyed)return this.fail(milo.ERROR_CALLBACK_ERROR,"Other side closed");let request=client2[kQueue][client2[kRunningIdx]];if(!request)return this.fail(milo.ERROR_CALLBACK_ERROR,"Missing request");if(assert(!this.upgrade),assert(this.statusCode<200),statusCode===100)return util.destroy(socket2,new SocketError("bad response",util.getSocketInfo(socket2))),this.fail(milo.ERROR_CALLBACK_ERROR,"Bad response");if(shouldUpgrade&&!request.upgrade)return util.destroy(socket2,new SocketError("bad upgrade",util.getSocketInfo(socket2))),this.fail(milo.ERROR_CALLBACK_ERROR,"Bad upgrade");if(assert(this.timeoutType===TIMEOUT_HEADERS),this.statusCode=statusCode,this.shouldKeepAlive=shouldKeepAlive||request.method==="HEAD"&&!socket2[kReset]&&/(?:^|,)[\t ]*keep-alive[\t ]*(?:,|$)/i.test(this.connection)&&!/(?:^|,)[\t ]*close[\t ]*(?:,|$)/i.test(this.connection),this.contentLength=bodyKind===BODY_KIND_CONTENT_LENGTH?contentLength:-1,this.statusCode>=200){let bodyTimeout=request.bodyTimeout!=null?request.bodyTimeout:client2[kBodyTimeout];this.setTimeout(bodyTimeout,TIMEOUT_BODY)}else this.timeout?.refresh&&this.timeout.refresh();if(request.method==="CONNECT"){assert(client2[kRunning]===1),milo.setIsConnect(this.parser,!0),this.upgrade=!0;return}if(shouldUpgrade){assert(client2[kRunning]===1),this.upgrade=!0,this.pauseParser();return}if(this.headers=[],this.headersSize=0,this.shouldKeepAlive&&client2[kPipelining]){let keepAliveTimeout=this.keepAlive?util.parseKeepAliveTimeout(this.keepAlive):null;if(keepAliveTimeout!=null){let timeout=Math.min(keepAliveTimeout-client2[kKeepAliveTimeoutThreshold],client2[kKeepAliveMaxTimeout]);timeout<=0?socket2[kReset]=!0:client2[kKeepAliveTimeoutValue]=timeout}else client2[kKeepAliveTimeoutValue]=client2[kKeepAliveDefaultTimeout]}else socket2[kReset]=!0;let pause=request.onResponseStart(statusCode,headers,this.resume,statusText)===!1;if(request.aborted)return this.fail(milo.ERROR_CALLBACK_ERROR,"Request aborted");(request.method==="HEAD"||statusCode<200)&&this.setShouldSkipBody(!0),this.headersSuspended=!0,!pause&&request.method!=="HEAD"&&statusCode>=200&&statusCode!==204&&statusCode!==205&&statusCode!==304&&bodyKind===BODY_KIND_CONTENT_LENGTH&&contentLength>0&&!hasTrailers&&(this.directBodyRemaining=contentLength),socket2[kBlocking]&&(socket2[kBlocking]=!1,client2[kResume]()),pause?(this.pauseParser(),this[kPausedByHandler]=!0):(request.method==="HEAD"||statusCode<200||statusCode===204||statusCode===205||statusCode===304||bodyKind===BODY_KIND_CONTENT_LENGTH&&contentLength===0)&&(this.directBodyCompletePending=!0);break}case milo.EVENT_DATA:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5),{client:client2,socket:socket2,statusCode,maxResponseSize}=this;if(socket2.destroyed)return this.fail(milo.ERROR_CALLBACK_ERROR,"Other side closed");let request=client2[kQueue][client2[kRunningIdx]];if(assert(request),assert(this.timeoutType===TIMEOUT_BODY),this.timeout?.refresh&&this.timeout.refresh(),assert(statusCode>=200),maxResponseSize>-1&&this.bytesRead+len>maxResponseSize)return util.destroy(socket2,new ResponseExceededMaxSizeError),this.fail(milo.ERROR_CALLBACK_ERROR,"Response size exceeded");this.bytesRead+=len;let buffer=currentBufferRef;request.onResponseData(new FastBuffer(buffer.buffer,buffer.byteOffset+at,len))===!1&&(this.pauseParser(),this[kPausedByHandler]=!0);break}case milo.EVENT_TRAILER_NAME:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5),data=len>0?new FastBuffer(currentBufferRef.buffer,currentBufferRef.byteOffset+at,len):EMPTY_BUF;if(this.trailers.push(data),this.trailersSize+=len,this.trailersSize>=this.headersMaxSize)return util.destroy(this.socket,new HeadersOverflowError),this.fail(milo.ERROR_CALLBACK_ERROR,"Headers overflow");break}case milo.EVENT_TRAILER_VALUE:{let at=this.parserEvents.readUInt32LE(cursor+1),len=this.parserEvents.readUInt32LE(cursor+5),data=len>0?new FastBuffer(currentBufferRef.buffer,currentBufferRef.byteOffset+at,len):EMPTY_BUF;if(this.trailers.push(data),this.trailersSize+=len,this.trailersSize>=this.headersMaxSize)return util.destroy(this.socket,new HeadersOverflowError),this.fail(milo.ERROR_CALLBACK_ERROR,"Headers overflow");break}default:return}cursor+=eventLen}}fail(code,message){this.milo.fail(this.parser,code,message),this.errored=!0}onUpgrade(head){let{upgrade,client,socket,headers,statusCode}=this;assert(upgrade),assert(client[kSocket]===socket),assert(!socket.destroyed),assert(!this.paused);let request=client[kQueue][client[kRunningIdx]];assert(request),assert(request.upgrade||request.method==="CONNECT"),this.statusCode=0,this.statusText="",this.shouldKeepAlive=!1,this.headers=[],this.headersSize=0,socket.unshift(head),socket[kParser].destroy(),socket[kParser]=null,socket[kClient]=null,socket[kError]=null,removeAllListeners(socket),client[kSocket]=null,client[kHTTPContext]=null,client[kQueue][client[kRunningIdx]++]=null,client.emit("disconnect",client[kUrl],[client],new InformationalError("upgrade"));try{request.onRequestUpgrade(statusCode,headers,socket)}catch(err){util.destroy(socket,err)}client[kResume]()}};function setMiloEnabled(value){miloEnabled=value}function getMiloEnabled(){return miloEnabled}module.exports={H1Parser,getMiloEnabled,setMiloEnabled}}});var require_llhttp_wasm=__commonJS({"node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports,module){"use strict";var{Buffer:Buffer2}=__require("node:buffer"),wasmBase64="AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgL5YUCAgd/A34gASACaiEEAkAgACIDKAIMIgANACADKAIEBEAgAyABNgIECyMAQRBrIgkkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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C0HjAQwHC0HXAQwGC0HYAQwFC0HZAQwEC0HaAQwDC0HbAQwCC0HdAQwBC0HcAQshAgNAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJ/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAg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ogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/AgtBJSECDL4CC0HlACECDL0CCyADQT02AhwgAyABNgIUIAMgADYCDEEAIQIM1QILIANBGzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDNQCCyADQSA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzTAgsgA0ETNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0gILIANBCzYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNECCyADQRA2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzQAgsgA0EgNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzwILIANBCzYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM4CCyADQQw2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzNAgtBACECIANBADYCHCADIAE2AhQgA0HdDjYCECADQRI2AgwMzAILAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB/QEhAgzMAgsCQAJAIAMtADZBAUcNAEEAIQACQCADKAI4IgJFDQAgAigCYCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUcNASADQfwBNgIcIAMgATYCFCADQdwZNgIQIANBFTYCDEEAIQIMzQILQdwBIQIMswILIANBADYCHCADIAE2AhQgA0H5CzYCECADQR82AgxBACECDMsCCwJAAkAgAy0AKEEBaw4CBAEAC0HbASECDLICC0HUASECDLECCyADQQI6ADFBACEAAkAgAygCOCICRQ0AIAIoAgAiAkUNACADIAIRAAAhAAsgAEUEQEHdASECDLECCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQbQMNgIQIANBEDYCDEEAIQIMygILIANB+wE2AhwgAyABNgIUIANBgRo2AhAgA0EVNgIMQQAhAgzJAgsgASAERgRAQfoBIQIMyQILIAEtAABByABGDQEgA0EBOgAoC0HAASECDK4CC0HaASECDK0CCyABIARHBEAgA0EMNgIIIAMgATYCBEHZASECDK0CC0H5ASECDMUCCyABIARGBEBB+AEhAgzFAgsgAS0AAEHIAEcNBCABQQFqIQFB2AEhAgyrAgsgASAERgRAQfcBIQIMxAILAkACQCABLQAAQcUAaw4QAAUFBQUFBQUFBQUFBQUFAQULIAFBAWohAUHWASECDKsCCyABQQFqIQFB1wEhAgyqAgtB9gEhAiABIARGDcICIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbrVAGotAABHDQMgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMMCCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIARQRAQeMBIQIMqgILIANB9QE2AhwgAyABNgIUIAMgADYCDEEAIQIMwgILQfQBIQIgASAERg3BAiADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEG41QBqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzCAgsgA0GBBDsBKCADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQLiIADQMMAgsgA0EANgIAC0EAIQIgA0EANgIcIAMgATYCFCADQeUfNgIQIANBCDYCDAy/AgtB1QEhAgylAgsgA0HzATYCHCADIAE2AhQgAyAANgIMQQAhAgy9AgtBACEAAkAgAygCOCICRQ0AIAIoAkAiAkUNACADIAIRAAAhAAsgAEUNbiAAQRVHBEAgA0EANgIcIAMgATYCFCADQYIPNgIQIANBIDYCDEEAIQIMvQILIANBjwE2AhwgAyABNgIUIANB7Bs2AhAgA0EVNgIMQQAhAgy8AgsgASAERwRAIANBDTYCCCADIAE2AgRB0wEhAgyjAgtB8gEhAgy7AgsgASAERgRAQfEBIQIMuwILAkACQAJAIAEtAABByABrDgsAAQgICAgICAgIAggLIAFBAWohAUHQASECDKMCCyABQQFqIQFB0QEhAgyiAgsgAUEBaiEBQdIBIQIMoQILQfABIQIgASAERg25AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBtdUAai0AAEcNBCAAQQJGDQMgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuQILQe8BIQIgASAERg24AiADKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABBs9UAai0AAEcNAyAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMuAILQe4BIQIgASAERg23AiADKAIAIgAgBCABa2ohBiABIABrQQJqIQUDQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAY2AgAMtwILIAMoAgQhACADQgA3AwAgAyAAIAVBAWoiARArIgBFDQIgA0HsATYCHCADIAE2AhQgAyAANgIMQQAhAgy2AgsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNnAIgA0HtATYCHCADIAE2AhQgAyAANgIMQQAhAgy0AgtBzwEhAgyaAgtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDLQCC0HOASECDJoCCyADQesBNgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMsgILIAEgBEYEQEHrASECDLICCyABLQAAQS9GBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GyODYCECADQQg2AgxBACECDLECC0HNASECDJcCCyABIARHBEAgA0EONgIIIAMgATYCBEHMASECDJcCC0HqASECDK8CCyABIARGBEBB6QEhAgyvAgsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFBywEhAgyWAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZcCIANB6AE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAEgBEYEQEHnASECDK4CCwJAIAEtAABBLkYEQCABQQFqIQEMAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5gE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILQcoBIQIMlAILIAEgBEYEQEHlASECDK0CC0EAIQBBASEFQQEhB0EAIQICQAJAAkACQAJAAn8CQAJAAkACQAJAAkACQCABLQAAQTBrDgoKCQABAgMEBQYICwtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshAkEAIQVBACEHDAILQQkhAkEBIQBBACEFQQAhBwwBC0EAIQVBASECCyADIAI6ACsgAUEBaiEBAkACQCADLQAuQRBxDQACQAJAAkAgAy0AKg4DAQACBAsgB0UNAwwCCyAADQEMAgsgBUUNAQsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDQIgA0HiATYCHCADIAE2AhQgAyAANgIMQQAhAgyvAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZoCIANB4wE2AhwgAyABNgIUIAMgADYCDEEAIQIMrgILIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ2YAiADQeQBNgIcIAMgATYCFCADIAA2AgwMrQILQckBIQIMkwILQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANBpA02AhAgA0EhNgIMQQAhAgytAgtByAEhAgyTAgsgA0HhATYCHCADIAE2AhQgA0HQGjYCECADQRU2AgxBACECDKsCCyABIARGBEBB4QEhAgyrAgsCQCABLQAAQSBGBEAgA0EAOwE0IAFBAWohAQwBCyADQQA2AhwgAyABNgIUIANBmRE2AhAgA0EJNgIMQQAhAgyrAgtBxwEhAgyRAgsgASAERgRAQeABIQIMqgILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyrAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqgILQcYBIQIMkAILIAEgBEYEQEHfASECDKkCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqgILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKkCC0HFASECDI8CCyABIARGBEBB3gEhAgyoAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKkCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyoAgtBxAEhAgyOAgsgASAERgRAQd0BIQIMpwILAkACQAJAAkAgAS0AAEEKaw4XAgMDAAMDAwMDAwMDAwMDAwMDAwMDAwEDCyABQQFqDAULIAFBAWohAUHDASECDI8CCyABQQFqIQEgA0Evai0AAEEBcQ0IIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKcCCyADQQA2AhwgAyABNgIUIANBjQs2AhAgA0ENNgIMQQAhAgymAgsgASAERwRAIANBDzYCCCADIAE2AgRBASECDI0CC0HcASECDKUCCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtB2wEhAgymAgsgAygCBCEAIANBADYCBCADIAAgARAtIgBFBEAgAUEBaiEBDAQLIANB2gE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMpQILIAMoAgQhACADQQA2AgQgAyAAIAEQLSIADQEgAUEBagshAUHBASECDIoCCyADQdkBNgIcIAMgADYCDCADIAFBAWo2AhRBACECDKICC0HCASECDIgCCyADQS9qLQAAQQFxDQEgA0EANgIcIAMgATYCFCADQeQcNgIQIANBGTYCDEEAIQIMoAILIAEgBEYEQEHZASEC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IAFBAWohAUGeASECDOQBCyABQQFqIQFBnwEhAgzjAQtBtwEhAiABIARGDfsBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQezUAGotAABHDSggAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPwBCyADQQA2AgAgBkEBaiEBQQ0MKAtBtgEhAiABIARGDfoBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDScgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPsBCyADQQA2AgAgBkEBaiEBQQwMJwtBtQEhAiABIARGDfkBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQerUAGotAABHDSYgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPoBCyADQQA2AgAgBkEBaiEBQQMMJgtBtAEhAiABIARGDfgBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQejUAGotAABHDSUgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPkBCyADQQA2AgAgBkEBaiEBQSYMJQsgASAERgRAQbMBIQIM+AELAkACQCABLQAAQdQAaw4CAAEnCyABQQFqIQFBmQEhAgzfAQsgAUEBaiEBQZoBIQIM3gELQbIBIQIgASAERg32ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHm1ABqLQAARw0jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz3AQsgA0EANgIAIAZBAWohAUEnDCMLQbEBIQIgASAERg31ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHk1ABqLQAARw0iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz2AQsgA0EANgIAIAZBAWohAUEcDCILQbABIQIgASAERg30ASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHe1ABqLQAARw0hIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz1AQsgA0EANgIAIAZBAWohAUEGDCELQa8BIQIgASAERg3zASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHZ1ABqLQAARw0gIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAz0AQsgA0EANgIAIAZBAWohAUEZDCALIAEgBEYEQEGuASECDPMBCwJAAkACQAJAIAEtAABBLWsOIwAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEkJCQkJAIkJCQDJAsgAUEBaiEBQY4BIQIM3AELIAFBAWohAUGPASECDNsBCyABQQFqIQFBlAEhAgzaAQsgAUEBaiEBQZUBIQIM2QELQa0BIQIgASAERg3xASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHX1ABqLQAARw0eIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzyAQsgA0EANgIAIAZBAWohAUELDB4LIAEgBEYEQEGsASECDPEBCwJAAkAgAS0AAEHBAGsOAwAgASALIAFBAWohAUGQASECDNgBCyABQQFqIQFBkwEhAgzXAQsgASAERgRAQasBIQIM8AELAkACQCABLQAAQcEAaw4PAB8fHx8fHx8fHx8fHx8BHwsgAUEBaiEBQZEBIQIM1wELIAFBAWohAUGSASECDNYBCyABIARGBEBBqgEhAgzvAQsgAS0AAEHMAEcNHCABQQFqIQFBCgwbC0GpASECIAEgBEYN7QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABB0dQAai0AAEcNGiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7gELIANBADYCACAGQQFqIQFBHgwaC0GoASECIAEgBEYN7AEgAygCACIAIAQgAWtqIQUgASAAa0EGaiEGAkADQCABLQAAIABBytQAai0AAEcNGSAAQQZGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7QELIANBADYCACAGQQFqIQFBFQwZC0GnASECIAEgBEYN6wEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBx9QAai0AAEcNGCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM7AELIANBADYCACAGQQFqIQFBFwwYC0GmASECIAEgBEYN6gEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBwdQAai0AAEcNFyAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6wELIANBADYCACAGQQFqIQFBGAwXCyABIARGBEBBpQEhAgzqAQsCQAJAIAEtAABByQBrDgcAGRkZGRkBGQsgAUEBaiEBQYsBIQIM0QELIAFBAWohAUGMASECDNABC0GkASECIAEgBEYN6AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBptUAai0AAEcNFSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6QELIANBADYCACAGQQFqIQFBCQwVC0GjASECIAEgBEYN5wEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBpNUAai0AAEcNFCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM6AELIANBADYCACAGQQFqIQFBHwwUC0GiASECIAEgBEYN5gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBvtQAai0AAEcNEyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5wELIANBADYCACAGQQFqIQFBAgwTC0GhASECIAEgBEYN5QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGA0AgAS0AACAAQbzUAGotAABHDREgAEEBRg0CIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADOUBCyABIARGBEBBoAEhAgzlAQtBASABLQAAQd8ARw0RGiABQQFqIQFBhwEhAgzLAQsgA0EANgIAIAZBAWohAUGIASECDMoBC0GfASECIAEgBEYN4gEgAygCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABBhNUAai0AAEcNDyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4wELIANBADYCACAGQQFqIQFBKQwPC0GeASECIAEgBEYN4QEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBuNQAai0AAEcNDiAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM4gELIANBADYCACAGQQFqIQFBLQwOCyABIARGBEBBnQEhAgzhAQsgAS0AAEHFAEcNDiABQQFqIQFBhAEhAgzHAQsgASAERgRAQZwBIQIM4AELAkACQCABLQAAQcwAaw4IAA8PDw8PDwEPCyABQQFqIQFBggEhAgzHAQsgAUEBaiEBQYMBIQIMxgELQZsBIQIgASAERg3eASADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEGz1ABqLQAARw0LIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzfAQsgA0EANgIAIAZBAWohAUEjDAsLQZoBIQIgASAERg3dASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGw1ABqLQAARw0KIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzeAQsgA0EANgIAIAZBAWohAUEADAoLIAEgBEYEQEGZASECDN0BCwJAAkAgAS0AAEHIAGsOCAAMDAwMDAwBDAsgAUEBaiEBQf0AIQIMxAELIAFBAWohAUGAASECDMMBCyABIARGBEBBmAEhAgzcAQsCQAJAIAEtAABBzgBrDgMACwELCyABQQFqIQFB/gAhAgzDAQsgAUEBaiEBQf8AIQIMwgELIAEgBEYEQEGXASECDNsBCyABLQAAQdkARw0IIAFBAWohAUEIDAcLQZYBIQIgASAERg3ZASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEGs1ABqLQAARw0GIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzaAQsgA0EANgIAIAZBAWohAUEFDAYLQZUBIQIgASAERg3YASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGm1ABqLQAARw0FIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzZAQsgA0EANgIAIAZBAWohAUEWDAULQZQBIQIgASAERg3XASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0EIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzYAQsgA0EANgIAIAZBAWohAUEQDAQLIAEgBEYEQEGTASECDNcBCwJAAkAgAS0AAEHDAGsODAAGBgYGBgYGBgYGAQYLIAFBAWohAUH5ACECDL4BCyABQQFqIQFB+gAhAgy9AQtBkgEhAiABIARGDdUBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQaDUAGotAABHDQIgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNYBCyADQQA2AgAgBkEBaiEBQSQMAgsgA0EANgIADAILIAEgBEYEQEGRASECDNQBCyABLQAAQcwARw0BIAFBAWohAUETCzoAKSADKAIEIQAgA0EANgIEIAMgACABEC4iAA0CDAELQQAhAiADQQA2AhwgAyABNgIUIANB/h82AhAgA0EGNgIMDNEBC0H4ACECDLcBCyADQZABNgIcIAMgATYCFCADIAA2AgxBACECDM8BC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ0AIABBFUYNASADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgzOAQtB9wAhAgy0AQsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDMwBCyABIARGBEBBjwEhAgzMAQsCQCABLQAAQSBGBEAgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GbHzYCECADQQY2AgxBACECDMwBC0ECIQIMsgELA0AgAS0AAEEgRw0CIAQgAUEBaiIBRw0AC0GOASECDMoBCyABIARGBEBBjQEhAgzKAQsCQCABLQAAQQlrDgRKAABKAAtB9QAhAgywAQsgAy0AKUEFRgRAQfYAIQIMsAELQfQAIQIMrwELIAEgBEYEQEGMASECDMgBCyADQRA2AgggAyABNgIEDAoLIAEgBEYEQEGLASECDMcBCwJAIAEtAABBCWsOBEcAAEcAC0HzACECDK0BCyABIARHBEAgA0EQNgIIIAMgATYCBEHxACECDK0BC0GKASECDMUBCwJAIAEgBEcEQANAIAEtAABBoNAAai0AACIAQQNHBEACQCAAQQFrDgJJAAQLQfAAIQIMrwELIAQgAUEBaiIBRw0AC0GIASEC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BCABQQFqIgFHDQALQfsAIQIMpwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMpgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMpQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0DIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMpAELIANBADYCHCADIAE2AhQgA0G8CjYCECADQQc2AgxBACECDKMBC0HPACECDIkBC0HRACECDIgBC0HnACECDIcBCyABIARGBEBB+gAhAgygAQsCQCABLQAAQQlrDgQgAAAgAAsgAUEBaiEBQeYAIQIMhgELIAEgBEYEQEH5ACECDJ8BCwJAIAEtAABBCWsOBB8AAB8AC0EAIQACQCADKAI4IgJFDQAgAigCOCICRQ0AIAMgAhEAACEACyAARQRAQeIBIQIMhgELIABBFUcEQCADQQA2AhwgAyABNgIUIANByQ02AhAgA0EaNgIMQQAhAgyfAQsgA0H4ADYCHCADIAE2AhQgA0HqGjYCECADQRU2AgxBACECDJ4BCyABIARHBEAgA0ENNgIIIAMgATYCBEHkACECDIUBC0H3ACECDJ0BCyABIARGBEBB9gAhAgydAQsCQAJAAkAgAS0AAEHIAGsOCwABCwsLCwsLCwsCCwsgAUEBaiEBQd0AIQIMhQELIAFBAWohAUHgACECDIQBCyABQQFqIQFB4wAhAgyDAQtB9QAhAiABIARGDZsBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbXVAGotAABHDQggAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJwBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIABEAgA0H0ADYCHCADIAE2AhQgAyAANgIMQQAhAgycAQtB4gAhAgyCAQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJwBC0HhACECDIIBCyADQfMANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMmgELIAMtACkiAEEja0ELSQ0JAkAgAEEGSw0AQQEgAHRBygBxRQ0ADAoLQQAhAiADQQA2AhwgAyABNgIUIANB7Qk2AhAgA0EINgIMDJkBC0HyACECIAEgBEYNmAEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBs9UAai0AAEcNBSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMmQELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfEANgIcIAMgATYCFCADIAA2AgxBACECDJkBC0HfACECDH8LQQAhAAJAIAMoAjgiAkUNACACKAI0IgJFDQAgAyACEQAAIQALAkAgAARAIABBFUYNASADQQA2AhwgAyABNgIUIANB6g02AhAgA0EmNgIMQQAhAgyZAQtB3gAhAgx/CyADQfAANgIcIAMgATYCFCADQYAbNgIQIANBFTYCDEEAIQIMlwELIAMtAClBIUYNBiADQQA2AhwgAyABNgIUIANBkQo2AhAgA0EINgIMQQAhAgyWAQtB7wAhAiABIARGDZUBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDVAGotAABHDQIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADJYBCyADKAIEIQAgA0IANwMAIAMgACAGQQFqIgEQKyIARQ0CIANB7QA2AhwgAyABNgIUIAMgADYCDEEAIQIMlQELIANBADYCAAsgAygCBCEAIANBADYCBCADIAAgARArIgBFDYABIANB7gA2AhwgAyABNgIUIAMgADYCDEEAIQIMkwELQdwAIQIMeQtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJMBC0HbACECDHkLIANB7AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyRAQsgAy0AKSIAQSNJDQAgAEEuRg0AIANBADYCHCADIAE2AhQgA0HJCTYCECADQQg2AgxBACECDJABC0HaACECDHYLIAEgBEYEQEHrACECDI8BCwJAIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMjwELQdkAIQIMdQsgASAERwRAIANBDjYCCCADIAE2AgRB2AAhAgx1C0HqACECDI0BCyABIARGBEBB6QAhAgyNAQsgAS0AAEEwayIAQf8BcUEKSQRAIAMgADoAKiABQQFqIQFB1wAhAgx0CyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeiADQegANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyABIARGBEBB5wAhAgyMAQsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAMoAgQhACADQQA2AgQgAyAAIAEQLyIARQ17IANB5gA2AhwgAyABNgIUIAMgADYCDEEAIQIMjAELQdYAIQIMcgsgASAERgRAQeUAIQIMiwELQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIANgIcIAMgATYCFCADIAA2AgxBACECDI0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNfSADQeMANgIcIAMgATYCFCADIAA2AgxBACECDIwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNeyADQeQANgIcIAMgATYCFCADIAA2AgwMiwELQdQAIQIMcQsgAy0AKUEiRg2GAUHTACECDHALQQAhAAJAIAMoAjgiAkUNACACKAJEIgJFDQAgAyACEQAAIQALIABFBEBB1QAhAgxwCyAAQRVHBEAgA0EANgIcIAMgATYCFCADQaQNNgIQIANBITYCDEEAIQIMiQELIANB4QA2AhwgAyABNgIUIANB0Bo2AhAgA0EVNgIMQQAhAgyIAQsgASAERgRAQeAAIQIMiAELAkACQAJAAkACQCABLQAAQQprDgQBBAQABAsgAUEBaiEBDAELIAFBAWohASADQS9qLQAAQQFxRQ0BC0HSACECDHALIANBADYCHCADIAE2AhQgA0G2ETYCECADQQk2AgxBACECDIgBCyADQQA2AhwgAyABNgIUIANBthE2AhAgA0EJNgIMQQAhAgyHAQsgASAERgRAQd8AIQIMhwELIAEtAABBCkYEQCABQQFqIQEMCQsgAy0ALkHAAHENCCADQQA2AhwgAyABNgIUIANBthE2AhAgA0ECNgIMQQAhAgyGAQsgASAERgRAQd0AIQIMhgELIAEtAAAiAkENRgRAIAFBAWohAUHQACECDG0LIAEhACACQQlrDgQFAQEFAQsgBCABIgBGBEBB3AAhAgyFAQsgAC0AAEEKRw0AIABBAWoMAgtBACECIANBADYCHCADIAA2AhQgA0HKLTYCECADQQc2AgwMgwELIAEgBEYEQEHbACECDIMBCwJAIAEtAABBCWsOBAMAAAMACyABQQFqCyEBQc4AIQIMaAsgASAERgRAQdoAIQIMgQELIAEtAABBCWsOBAABAQABC0EAIQIgA0EANgIcIANBmhI2AhAgA0EHNgIMIAMgAUEBajYCFAx/CyADQYASOwEqQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB2QA2AhwgAyABNgIUIANB6ho2AhAgA0EVNgIMQQAhAgx+C0HNACECDGQLIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDHwLIAEgBEYEQEHZACECDHwLIAEtAABBIEcNPSABQQFqIQEgAy0ALkEBcQ09IANBADYCHCADIAE2AhQgA0HCHDYCECADQR42AgxBACECDHsLIAEgBEYEQEHYACECDHsLAkACQAJAAkACQCABLQAAIgBBCmsOBAIDAwABCyABQQFqIQFBLCECDGULIABBOkcNASADQQA2AhwgAyABNgIUIANB5xE2AhAgA0EKNgIMQQAhAgx9CyABQQFqIQEgA0Evai0AAEEBcUUNcyADLQAyQYABcUUEQCADQTJqIQIgAxA1QQAhAAJAIAMoAjgiBkUNACAGKAIoIgZFDQAgAyAGEQAAIQALAkACQCAADhZNTEsBAQEBAQEBAQEBAQEBAQEBAQEAAQsgA0EpNgIcIAMgATYCFCADQawZNgIQIANBFTYCDEEAIQIMfgsg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c3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==",wasmBuffer;Object.defineProperty(module,"exports",{get:()=>wasmBuffer||(wasmBuffer=Buffer2.from(wasmBase64,"base64"))})}});var require_llhttp_simd_wasm=__commonJS({"node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports,module){"use strict";var{Buffer:Buffer2}=__require("node:buffer"),wasmBase64="AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAn9/AGABfwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/A34BeyABIAJqIQQCQCAAIgMoAgwiAA0AIAMoAgQEQCADIAE2AgQLIwBBEGsiCSQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADKAIcIgJBAmsO/AEB+QECAwQFBgcICQoLDA0ODxAREvgBE/cBFBX2ARYX9QEYGRobHB0eHyD9AfsBIfQBIiMkJSYnKCkqK/MBLC0uLzAxMvIB8QEzNPAB7wE1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk/6AVBRUlPuAe0BVOwBVesBVldYWVrqAVtcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAekB6AHPAecB0AHmAdEB0gHTAdQB5QHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wEA/AELQQAM4wELQQ4M4gELQQ0M4QELQQ8M4AELQRAM3wELQRMM3gELQRQM3QELQRUM3AELQRYM2wELQRcM2gELQRgM2QELQRkM2AELQRoM1wELQRsM1gELQRwM1QELQR0M1AELQR4M0wELQR8M0gELQSAM0QELQSEM0AELQQgMzwELQSIMzgELQSQMzQELQSMMzAELQQcMywELQSUMygELQSYMyQELQScMyAELQSgMxwELQRIMxgELQREMxQELQSkMxAELQSoMwwELQSsMwgELQSwMwQELQd4BDMABC0EuDL8BC0EvDL4BC0EwDL0BC0ExDLwBC0EyDLsBC0EzDLoBC0E0DLkBC0HfAQy4AQtBNQy3AQtBOQy2AQtBDAy1AQtBNgy0AQtBNwyzAQtBOAyyAQtBPgyxAQtBOgywAQtB4AEMrwELQQsMrgELQT8MrQELQTsMrAELQQoMqwELQTwMqgELQT0MqQELQeEBDKgBC0HBAAynAQtBwAAMpgELQcIADKUBC0EJDKQBC0EtDKMBC0HDAAyiAQtBxAAMoQELQcUADKABC0HGAAyfAQtBxwAMngELQcgADJ0BC0HJAAycAQtBygAMmwELQcsADJoBC0HMAAyZAQtBzQAMmAELQc4ADJcBC0HPAAyWAQtB0AAMlQELQdEADJQBC0HSAAyTAQtB0wAMkgELQdUADJEBC0HUAAyQAQtB1gAMjwELQdcADI4BC0HYAAyNAQtB2QAMjAELQdoADIsBC0HbAAyKAQtB3AAMiQELQd0ADIgBC0HeAAyHAQtB3wAMhgELQeAADIUBC0HhAAyEAQtB4gAMgwELQeMADIIBC0HkAAyBAQtB5QAMgAELQeIBDH8LQeYADH4LQecADH0LQQYMfAtB6AAMewtBBQx6C0HpAAx5C0EEDHgLQeoADHcLQesADHYLQewADHULQe0ADHQLQQMMcwtB7gAMcgtB7wAMcQtB8AAMcAtB8gAMbwtB8QAMbgtB8wAMbQtB9AAMbAtB9QAMawtB9gAMagtBAgxpC0H3AAxoC0H4AAxnC0H5AAxmC0H6AAxlC0H7AAxkC0H8AAxjC0H9AAxiC0H+AAxhC0H/AAxgC0GAAQxfC0GBAQxeC0GCAQxdC0GDAQxcC0GEAQxbC0GFAQxaC0GGAQxZC0GHAQxYC0GIAQxXC0GJAQxWC0GKAQxVC0GLAQxUC0GMAQxTC0GNAQxSC0GOAQxRC0GPAQxQC0GQAQxPC0GRAQxOC0GSAQxNC0GTAQxMC0GUAQxLC0GVAQxKC0GWAQxJC0GXAQxIC0GYAQxHC0GZAQxGC0GaAQxFC0GbAQxEC0GcAQxDC0GdAQxCC0GeAQxBC0GfAQxAC0GgAQw/C0GhAQw+C0GiAQw9C0GjAQw8C0GkAQw7C0GlAQw6C0GmAQw5C0GnAQw4C0GoAQw3C0GpAQw2C0GqAQw1C0GrAQw0C0GsAQwzC0GtAQwyC0GuAQwxC0GvAQwwC0GwAQwvC0GxAQwuC0GyAQwtC0GzAQwsC0G0AQwrC0G1AQwqC0G2AQwpC0G3AQwoC0G4AQwnC0G5AQwmC0G6AQwlC0G7AQwkC0G8AQwjC0G9AQwiC0G+AQwhC0G/AQwgC0HAAQwfC0HBAQweC0HCAQwdC0EBDBwLQcMBDBsLQcQBDBoLQcUBDBkLQcYBDBgLQccBDBcLQcgBDBYLQckBDBULQcoBDBQLQcsBDBMLQcwBDBILQc0BDBELQc4BDBALQc8BDA8LQdABDA4LQdEBDA0LQdIBDAwLQdMBDAsLQdQBDAoLQdUBDAkLQdYBDAgLQeMBDAcLQdcBDAYLQdgBDAULQdkBDAQLQdoBDAMLQdsBDAILQd0BDAELQdwBCyECA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAn8CQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAwJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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A0EXNgIcIAMgADYCDCADIAFBAWo2AhQM+AILIABBFUYNI0EAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAz3AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwdCyADQRk2AhwgAyAANgIMIAMgAUEBajYCFAz2AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQzvAgsgA0EaNgIcIAMgADYCDCADIAFBAWo2AhQM9QILIABBFUYNH0EAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAz0AgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDBsLIANBHDYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgzzAgsgAygCBCEAIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDOsCCyADQR02AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8gILIABBO0cNASABQQFqIQELQSYhAgzXAgtBACECIANBADYCHCADIAE2AhQgA0GfFTYCECADQQw2AgwM7wILIAEgBEcEQANAIAEtAABBIEcNhAIgBCABQQFqIgFHDQALQSwhAgzvAgtBLCECDO4CCyABIARGBEBBNCECDO4CCwJAAkADQAJAIAEtAABBCmsOBAIAAAMACyAEIAFBAWoiAUcNAAtBNCECDO8CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUNnwIgA0EyNgIcIAMgATYCFCADIAA2AgxBACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABEDEiAEUEQCABQQFqIQEMnwILIANBMjYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgztAgsgASAERwRAAkADQCABLQAAQTBrIgBB/wFxQQpPBEBBOiECDNcCCyADKQMgIgtCmbPmzJmz5swZVg0BIAMgC0IKfiIKNwMgIAogAK1C/wGDIgtCf4VWDQEgAyAKIAt8NwMgIAQgAUEBaiIBRw0AC0HAACECDO4CCyADKAIEIQAgA0EANgIEIAMgACABQQFqIgEQMSIADRcM4gILQcAAIQIM7AILIAEgBEYEQEHJACECDOwCCwJAA0ACQCABLQAAQQlrDhgAAqICogKpAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAgCiAgsgBCABQQFqIgFHDQALQckAIQIM7AILIAFBAWohASADQS9qLQAAQQFxDaUCIANBADYCHCADIAE2AhQgA0GXEDYCECADQQo2AgxBACECDOsCCyABIARHBEADQCABLQAAQSBHDRUgBCABQQFqIgFHDQALQfgAIQIM6wILQfgAIQIM6gILIANBAjoAKAw4C0EAIQIgA0EANgIcIANBvws2AhAgA0ECNgIMIAMgAUEBajYCFAzoAgtBACECDM4CC0ENIQIMzQILQRMhAgzMAgtBFSECDMsCC0EWIQIMygILQRghAgzJAgtBGSECDMgCC0EaIQIMxwILQRshAgzGAgtBHCECDMUCC0EdIQIMxAILQR4hAgzDAgtBHyECDMICC0EgIQIMwQILQSIhAgzAAgtBIyECDL8CC0ElIQIMvgILQeUAIQIMvQILIANBPTYCHCADIAE2AhQgAyAANgIMQQAhAgzVAgsgA0EbNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIM1AILIANBIDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNMCCyADQRM2AhwgAyABNgIUIANBmBo2AhAgA0EVNgIMQQAhAgzSAgsgA0ELNgIcIAMgATYCFCADQZgaNgIQIANBFTYCDEEAIQIM0QILIANBEDYCHCADIAE2AhQgA0GYGjYCECADQRU2AgxBACECDNACCyADQSA2AhwgAyABNgIUIANBpBw2AhAgA0EVNgIMQQAhAgzPAgsgA0ELNgIcIAMgATYCFCADQaQcNgIQIANBFTYCDEEAIQIMzgILIANBDDYCHCADIAE2AhQgA0GkHDYCECADQRU2AgxBACECDM0CC0EAIQIgA0EANgIcIAMgATYCFCADQd0ONgIQIANBEjYCDAzMAgsCQANAAkAgAS0AAEEKaw4EAAICAAILIAQgAUEBaiIBRw0AC0H9ASECDMwCCwJAAkAgAy0ANkEBRw0AQQAhAAJAIAMoAjgiAkUNACACKAJgIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRw0BIANB/AE2AhwgAyABNgIUIANB3Bk2AhAgA0EVNgIMQQAhAgzNAgtB3AEhAgyzAgsgA0EANgIcIAMgATYCFCADQfkLNgIQIANBHzYCDEEAIQIMywILAkACQCADLQAoQQFrDgIEAQALQdsBIQIMsgILQdQBIQIMsQILIANBAjoAMUEAIQACQCADKAI4IgJFDQAgAigCACICRQ0AIAMgAhEAACEACyAARQRAQd0BIQIMsQILIABBFUcEQCADQQA2AhwgAyABNgIUIANBtAw2AhAgA0EQNgIMQQAhAgzKAgsgA0H7ATYCHCADIAE2AhQgA0GBGjYCECADQRU2AgxBACECDMkCCyABIARGBEBB+gEhAgzJAgsgAS0AAEHIAEYNASADQQE6ACgLQcABIQIMrgILQdoBIQIMrQILIAEgBEcEQCADQQw2AgggAyABNgIEQdkBIQIMrQILQfkBIQIMxQILIAEgBEYEQEH4ASECDMUCCyABLQAAQcgARw0EIAFBAWohAUHYASECDKsCCyABIARGBEBB9wEhAgzEAgsCQAJAIAEtAABBxQBrDhAABQUFBQUFBQUFBQUFBQUBBQsgAUEBaiEBQdYBIQIMqwILIAFBAWohAUHXASECDKoCC0H2ASECIAEgBEYNwgIgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABButUAai0AAEcNAyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMwwILIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgBFBEBB4wEhAgyqAgsgA0H1ATYCHCADIAE2AhQgAyAANgIMQQAhAgzCAgtB9AEhAiABIARGDcECIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjVAGotAABHDQIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADMICCyADQYEEOwEoIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARAuIgANAwwCCyADQQA2AgALQQAhAiADQQA2AhwgAyABNgIUIANB5R82AhAgA0EINgIMDL8CC0HVASECDKUCCyADQfMBNgIcIAMgATYCFCADIAA2AgxBACECDL0CC0EAIQACQCADKAI4IgJFDQAgAigCQCICRQ0AIAMgAhEAACEACyAARQ1uIABBFUcEQCADQQA2AhwgAyABNgIUIANBgg82AhAgA0EgNgIMQQAhAgy9AgsgA0GPATYCHCADIAE2AhQgA0HsGzYCECADQRU2AgxBACECDLwCCyABIARHBEAgA0ENNgIIIAMgATYCBEHTASECDKMCC0HyASECDLsCCyABIARGBEBB8QEhAgy7AgsCQAJAAkAgAS0AAEHIAGsOCwABCAgICAgICAgCCAsgAUEBaiEBQdABIQIMowILIAFBAWohAUHRASECDKICCyABQQFqIQFB0gEhAgyhAgtB8AEhAiABIARGDbkCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEG11QBqLQAARw0EIABBAkYNAyAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy5AgtB7wEhAiABIARGDbgCIAMoAgAiACAEIAFraiEGIAEgAGtBAWohBQNAIAEtAAAgAEGz1QBqLQAARw0DIABBAUYNAiAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy4AgtB7gEhAiABIARGDbcCIAMoAgAiACAEIAFraiEGIAEgAGtBAmohBQNAIAEtAAAgAEGw1QBqLQAARw0CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBjYCAAy3AgsgAygCBCEAIANCADcDACADIAAgBUEBaiIBECsiAEUNAiADQewBNgIcIAMgATYCFCADIAA2AgxBACECDLYCCyADQQA2AgALIAMoAgQhACADQQA2AgQgAyAAIAEQKyIARQ2cAiADQe0BNgIcIAMgATYCFCADIAA2AgxBACECDLQCC0HPASECDJoCC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMtAILQc4BIQIMmgILIANB6wE2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyyAgsgASAERgRAQesBIQIMsgILIAEtAABBL0YEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQbI4NgIQIANBCDYCDEEAIQIMsQILQc0BIQIMlwILIAEgBEcEQCADQQ42AgggAyABNgIEQcwBIQIMlwILQeoBIQIMrwILIAEgBEYEQEHpASECDK8CCyABLQAAQTBrIgBB/wFxQQpJBEAgAyAAOgAqIAFBAWohAUHLASECDJYCCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNlwIgA0HoATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgASAERgRAQecBIQIMrgILAkAgAS0AAEEuRgRAIAFBAWohAQwBCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmAIgA0HmATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgtBygEhAgyUAgsgASAERgRAQeUBIQIMrQILQQAhAEEBIQVBASEHQQAhAgJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAEtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyECQQAhBUEAIQcMAgtBCSECQQEhAEEAIQVBACEHDAELQQAhBUEBIQILIAMgAjoAKyABQQFqIQECQAJAIAMtAC5BEHENAAJAAkACQCADLQAqDgMBAAIECyAHRQ0DDAILIAANAQwCCyAFRQ0BCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNAiADQeIBNgIcIAMgATYCFCADIAA2AgxBACECDK8CCyADKAIEIQAgA0EANgIEIAMgACABEC8iAEUNmgIgA0HjATYCHCADIAE2AhQgAyAANgIMQQAhAgyuAgsgAygCBCEAIANBADYCBCADIAAgARAvIgBFDZgCIANB5AE2AhwgAyABNgIUIAMgADYCDAytAgtByQEhAgyTAgtBACEAAkAgAygCOCICRQ0AIAIoAkQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GkDTYCECADQSE2AgxBACECDK0CC0HIASECDJMCCyADQeEBNgIcIAMgATYCFCADQdAaNgIQIANBFTYCDEEAIQIMqwILIAEgBEYEQEHhASECDKsCCwJAIAEtAABBIEYEQCADQQA7ATQgAUEBaiEBDAELIANBADYCHCADIAE2AhQgA0GZETYCECADQQk2AgxBACECDKsCC0HHASECDJECCyABIARGBEBB4AEhAgyqAgsCQCABLQAAQTBrQf8BcSICQQpJBEAgAUEBaiEBAkAgAy8BNCIAQZkzSw0AIAMgAEEKbCIAOwE0IABB/v8DcSACQf//A3NLDQAgAyAAIAJqOwE0DAILQQAhAiADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMDKsCCyADQQA2AhwgAyABNgIUIANBlR42AhAgA0ENNgIMQQAhAgyqAgtBxgEhAgyQAgsgASAERgRAQd8BIQIMqQILAkAgAS0AAEEwa0H/AXEiAkEKSQRAIAFBAWohAQJAIAMvATQiAEGZM0sNACADIABBCmwiADsBNCAAQf7/A3EgAkH//wNzSw0AIAMgACACajsBNAwCC0EAIQIgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDAyqAgsgA0EANgIcIAMgATYCFCADQZUeNgIQIANBDTYCDEEAIQIMqQILQcUBIQIMjwILIAEgBEYEQEHeASECDKgCCwJAIAEtAABBMGtB/wFxIgJBCkkEQCABQQFqIQECQCADLwE0IgBBmTNLDQAgAyAAQQpsIgA7ATQgAEH+/wNxIAJB//8Dc0sNACADIAAgAmo7ATQMAgtBACECIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgwMqQILIANBADYCHCADIAE2AhQgA0GVHjYCECADQQ02AgxBACECDKgCC0HEASECDI4CCyABIARGBEBB3QEhAgynAgsCQAJAAkACQCABLQAAQQprDhcCAwMAAwMDAwMDAwMDAwMDAwMDAwMDAQMLIAFBAWoMBQsgAUEBaiEBQcMBIQIMjwILIAFBAWohASADQS9qLQAAQQFxDQggA0EANgIcIAMgATYCFCADQY0LNgIQIANBDTYCDEEAIQIMpwILIANBADYCHCADIAE2AhQgA0GNCzYCECADQQ02AgxBACECDKYCCyABIARHBEAgA0EPNgIIIAMgATYCBEEBIQIMjQILQdwBIQIMpQILAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0HbASECDKYCCyADKAIEIQAgA0EANgIEIAMgACABEC0iAEUEQCABQQFqIQEMBAsgA0HaATYCHCADIAA2AgwgAyABQQFqNgIUQQAhAgylAgsgAygCBCEAIANBADYCBCADIAAgARAtIgANASABQQFqCyEBQcEBIQIMigILIANB2QE2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIMogILQcIBIQIMiAILIANBL2otAABBAXENASADQQA2AhwgAyABNgIUIANB5Bw2AhAgA0EZNgIMQQAhAgygAgsgASAERgRAQdkB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CyADIAU2AgAMkAILIANBADYCACAGQQFqIQFBGgw8C0HKASECIAEgBEYNjgIgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBjdUAai0AAEcNOyAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMjwILIANBADYCACAGQQFqIQFBIQw7CyABIARGBEBByQEhAgyOAgsCQAJAIAEtAABBwQBrDhQAPT09PT09PT09PT09PT09PT09AT0LIAFBAWohAUGtASECDPUBCyABQQFqIQFBsAEhAgz0AQsgASAERgRAQcgBIQIMjQILAkACQCABLQAAQdUAaw4LADw8PDw8PDw8PAE8CyABQQFqIQFBrgEhAgz0AQsgAUEBaiEBQa8BIQIM8wELQccBIQIgASAERg2LAiADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw04IABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyMAgsgA0EANgIAIAZBAWohAUEqDDgLIAEgBEYEQEHGASECDIsCCyABLQAAQdAARw04IAFBAWohAUElDDcLQcUBIQIgASAERg2JAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGB1QBqLQAARw02IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyKAgsgA0EANgIAIAZBAWohAUEODDYLIAEgBEYEQEHEASECDIkCCyABLQAAQcUARw02IAFBAWohAUGrASECDO8BCyABIARGBEBBwwEhAgyIAgsCQAJAAkACQCABLQAAQcIAaw4PAAECOTk5OTk5OTk5OTkDOQsgAUEBaiEBQacBIQIM8QELIAFBAWohAUGoASECDPABCyABQQFqIQFBqQEhAgzvAQsgAUEBaiEBQaoBIQIM7gELQcIBIQIgASAERg2GAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH+1ABqLQAARw0zIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyHAgsgA0EANgIAIAZBAWohAUEUDDMLQcEBIQIgASAERg2FAiADKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEH51ABqLQAARw0yIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyGAgsgA0EANgIAIAZBAWohAUErDDILQcABIQIgASAERg2EAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEH21ABqLQAARw0xIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyFAgsgA0EANgIAIAZBAWohAUEsDDELQb8BIQIgASAERg2DAiADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGh1QBqLQAARw0wIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyEAgsgA0EANgIAIAZBAWohAUERDDALQb4BIQIgASAERg2CAiADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEHy1ABqLQAARw0vIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyDAgsgA0EANgIAIAZBAWohAUEuDC8LIAEgBEYEQEG9ASECDIICCwJAAkACQAJAAkAgAS0AAEHBAGsOFQA0NDQ0NDQ0NDQ0ATQ0AjQ0AzQ0BDQLIAFBAWohAUGbASECDOwBCyABQQFqIQFBnAEhAgzrAQsgAUEBaiEBQZ0BIQIM6gELIAFBAWohAUGiASECDOkBCyABQQFqIQFBpAEhAgzoAQsgASAERgRAQbwBIQIMgQILAkACQCABLQAAQdIAaw4DADABMAsgAUEBaiEBQaMBIQIM6AELIAFBAWohAUEEDC0LQbsBIQIgASAERg3/ASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHw1ABqLQAARw0sIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyAAgsgA0EANgIAIAZBAWohAUEdDCwLIAEgBEYEQEG6ASECDP8BCwJAAkAgAS0AAEHJAGsOBwEuLi4uLgAuCyABQQFqIQFBoQEhAgzmAQsgAUEBaiEBQSIMKwsgASAERgRAQbkBIQIM/gELIAEtAABB0ABHDSsgAUEBaiEBQaABIQIM5AELIAEgBEYEQEG4ASECDP0BCwJAAkAgAS0AAEHGAGsOCwAsLCwsLCwsLCwBLAsgAUEBaiEBQZ4BIQIM5AELIAFBAWohAUGfASECDOMBC0G3ASECIAEgBEYN+wEgAygCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABB7NQAai0AAEcNKCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM/AELIANBADYCACAGQQFqIQFBDQwoC0G2ASECIAEgBEYN+gEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBodUAai0AAEcNJyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM+wELIANBADYCACAGQQFqIQFBDAwnC0G1ASECIAEgBEYN+QEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB6tQAai0AAEcNJiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM+gELIANBADYCACAGQQFqIQFBAwwmC0G0ASECIAEgBEYN+AEgAygCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB6NQAai0AAEcNJSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM+QELIANBADYCACAGQQFqIQFBJgwlCyABIARGBEBBswEhAgz4AQsCQAJAIAEtAABB1ABrDgIAAScLIAFBAWohAUGZASECDN8BCyABQQFqIQFBmgEhAgzeAQtBsgEhAiABIARGDfYBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQebUAGotAABHDSMgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPcBCyADQQA2AgAgBkEBaiEBQScMIwtBsQEhAiABIARGDfUBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQeTUAGotAABHDSIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPYBCyADQQA2AgAgBkEBaiEBQRwMIgtBsAEhAiABIARGDfQBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQd7UAGotAABHDSEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPUBCyADQQA2AgAgBkEBaiEBQQYMIQtBrwEhAiABIARGDfMBIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQdnUAGotAABHDSAgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPQBCyADQQA2AgAgBkEBaiEBQRkMIAsgASAERgRAQa4BIQIM8wELAkACQAJAAkAgAS0AAEEtaw4jACQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkASQkJCQkAiQkJAMkCyABQQFqIQFBjgEhAgzcAQsgAUEBaiEBQY8BIQIM2wELIAFBAWohAUGUASECDNoBCyABQQFqIQFBlQEhAgzZAQtBrQEhAiABIARGDfEBIAMoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQdfUAGotAABHDR4gAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADPIBCyADQQA2AgAgBkEBaiEBQQsMHgsgASAERgRAQawBIQIM8QELAkACQCABLQAAQcEAaw4DACABIAsgAUEBaiEBQZABIQIM2AELIAFBAWohAUGTASECDNcBCyABIARGBEBBqwEhAgzwAQsCQAJAIAEtAABBwQBrDg8AHx8fHx8fHx8fHx8fHwEfCyABQQFqIQFBkQEhAgzXAQsgAUEBaiEBQZIBIQIM1gELIAEgBEYEQEGqASECDO8BCyABLQAAQcwARw0cIAFBAWohAUEKDBsLQakBIQIgASAERg3tASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHR1ABqLQAARw0aIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzuAQsgA0EANgIAIAZBAWohAUEeDBoLQagBIQIgASAERg3sASADKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEHK1ABqLQAARw0ZIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAztAQsgA0EANgIAIAZBAWohAUEVDBkLQacBIQIgASAERg3rASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHH1ABqLQAARw0YIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzsAQsgA0EANgIAIAZBAWohAUEXDBgLQaYBIQIgASAERg3qASADKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHB1ABqLQAARw0XIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzrAQsgA0EANgIAIAZBAWohAUEYDBcLIAEgBEYEQEGlASECDOoBCwJAAkAgAS0AAEHJAGsOBwAZGRkZGQEZCyABQQFqIQFBiwEhAgzRAQsgAUEBaiEBQYwBIQIM0AELQaQBIQIgASAERg3oASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGm1QBqLQAARw0VIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzpAQsgA0EANgIAIAZBAWohAUEJDBULQaMBIQIgASAERg3nASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGk1QBqLQAARw0UIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzoAQsgA0EANgIAIAZBAWohAUEfDBQLQaIBIQIgASAERg3mASADKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEG+1ABqLQAARw0TIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAznAQsgA0EANgIAIAZBAWohAUECDBMLQaEBIQIgASAERg3lASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYDQCABLQAAIABBvNQAai0AAEcNESAAQQFGDQIgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM5QELIAEgBEYEQEGgASECDOUBC0EBIAEtAABB3wBHDREaIAFBAWohAUGHASECDMsBCyADQQA2AgAgBkEBaiEBQYgBIQIMygELQZ8BIQIgASAERg3iASADKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEGE1QBqLQAARw0PIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAzjAQsgA0EANgIAIAZBAWohAUEpDA8LQZ4BIQIgASAERg3hASADKAIAIgAgBCABa2ohBSABIABrQQNqIQYCQANAIAEtAAAgAEG41ABqLQAARw0OIABBA0YNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAziAQsgA0EANgIAIAZBAWohAUEtDA4LIAEgBEYEQEGdASECDOEBCyABLQAAQcUARw0OIAFBAWohAUGEASECDMcBCyABIARGBEBBnAEhAgzgAQsCQAJAIAEtAABBzABrDggADw8PDw8PAQ8LIAFBAWohAUGCASECDMcBCyABQQFqIQFBgwEhAgzGAQtBmwEhAiABIARGDd4BIAMoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQbPUAGotAABHDQsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN8BCyADQQA2AgAgBkEBaiEBQSMMCwtBmgEhAiABIARGDd0BIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQbDUAGotAABHDQogAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADN4BCyADQQA2AgAgBkEBaiEBQQAMCgsgASAERgRAQZkBIQIM3QELAkACQCABLQAAQcgAaw4IAAwMDAwMDAEMCyABQQFqIQFB/QAhAgzEAQsgAUEBaiEBQYABIQIMwwELIAEgBEYEQEGYASECDNwBCwJAAkAgAS0AAEHOAGsOAwALAQsLIAFBAWohAUH+ACECDMMBCyABQQFqIQFB/wAhAgzCAQsgASAERgRAQZcBIQIM2wELIAEtAABB2QBHDQggAUEBaiEBQQgMBwtBlgEhAiABIARGDdkBIAMoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQazUAGotAABHDQYgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNoBCyADQQA2AgAgBkEBaiEBQQUMBgtBlQEhAiABIARGDdgBIAMoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQabUAGotAABHDQUgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNkBCyADQQA2AgAgBkEBaiEBQRYMBQtBlAEhAiABIARGDdcBIAMoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQaHVAGotAABHDQQgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAyAFNgIADNgBCyADQQA2AgAgBkEBaiEBQRAMBAsgASAERgRAQZMBIQIM1wELAkACQCABLQAAQcMAaw4MAAYGBgYGBgYGBgYBBgsgAUEBaiEBQfkAIQIMvgELIAFBAWohAUH6ACECDL0BC0GSASECIAEgBEYN1QEgAygCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBoNQAai0AAEcNAiAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAM1gELIANBADYCACAGQQFqIQFBJAwCCyADQQA2AgAMAgsgASAERgRAQZEBIQIM1AELIAEtAABBzABHDQEgAUEBaiEBQRMLOgApIAMoAgQhACADQQA2AgQgAyAAIAEQLiIADQIMAQtBACECIANBADYCHCADIAE2AhQgA0H+HzYCECADQQY2AgwM0QELQfgAIQIMtwELIANBkAE2AhwgAyABNgIUIAMgADYCDEEAIQIMzwELQQAhAAJAIAMoAjgiAkUNACACKAJAIgJFDQAgAyACEQAAIQALIABFDQAgAEEVRg0BIANBADYCHCADIAE2AhQgA0GCDzYCECADQSA2AgxBACECDM4BC0H3ACECDLQBCyADQY8BNgIcIAMgATYCFCADQewbNgIQIANBFTYCDEEAIQIMzAELIAEgBEYEQEGPASECDMwBCwJAIAEtAABBIEYEQCABQQFqIQEMAQsgA0EANgIcIAMgATYCFCADQZsfNgIQIANBBjYCDEEAIQIMzAELQQIhAgyyAQsDQCABLQAAQSBHDQIgBCABQQFqIgFHDQALQY4BIQIMygELIAEgBEYEQEGNASECDMoBCwJAIAEtAABBCWsOBEoAAEoAC0H1ACECDLABCyADLQApQQVGBEBB9gAhAgywAQtB9AAhAgyvAQsgASAERgRAQYwBIQIMyAELIANBEDYCCCADIAE2AgQMCgsgASAERgRAQYsBIQIMxwELAkAgAS0AAEEJaw4ERwAARwALQfMAIQIMrQELIAEgBEcEQCADQRA2AgggAyABNgIEQfEAIQIMrQELQYoBIQIMxQELAkAgASAERwRAA0AgAS0AAEGg0ABqLQAAIgBBA0cEQAJAIABBAWsOAkkABAtB8AAhAgyvAQsgBCABQQFqIgFHDQALQYgBIQIMxgELQYgBIQIMxQELIANBADYCHCADIAE2AhQgA0HbIDYCECADQQc2AgxBACECDMQBCyABIARGBEBBiQEhAgzEAQsCQAJAAkAgAS0AAEGg0gBqLQAAQQFrDgNGAgABC0HyACECDKwBCyADQQA2AhwgAyABNgIUIANBtBI2AhAgA0EHNgIMQQAhAgzEAQtB6gAhAgyqAQsgASAERwRAIAFBAWohAUHvACECDKoBC0GHASECDMIBCyAEIAEiAEYEQEGGASECDMIBCyAALQAAIgFBL0YEQCAAQQFqIQFB7gAhAgypAQsgAUEJayICQRdLDQEgACEBQQEgAnRBm4CABHENQQwBCyAEIAEiAEYEQEGFASECDMEBCyAALQAAQS9HDQAgAEEBaiEBDAMLQQAhAiADQQA2AhwgAyAANgIUIANB2yA2AhAgA0EHNgIMDL8BCwJAAkACQAJAAkADQCABLQAAQaDOAGotAAAiAEEFRwRAAkACQCAAQQFrDghHBQYHCAAEAQgLQesAIQIMrQELIAFBAWohAUHtACECDKwBCyAEIAFBAWoiAUcNAAtBhAEhAgzDAQsgAUEBagwUCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDMEBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDMABCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNHiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDL8BCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy+AQsgASAERgRAQYMBIQIMvgELAkAgAS0AAEGgzgBqLQAAQQFrDgg+BAUGAAgCAwcLIAFBAWohAQtBAyECDKMBCyABQQFqDA0LQQAhAiADQQA2AhwgA0HREjYCECADQQc2AgwgAyABQQFqNgIUDLoBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQdsANgIcIAMgATYCFCADIAA2AgxBACECDLkBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQd0ANgIcIAMgATYCFCADIAA2AgxBACECDLgBCyADKAIEIQAgA0EANgIEIAMgACABECwiAEUNFiADQfoANgIcIAMgATYCFCADIAA2AgxBACECDLcBCyADQQA2AhwgAyABNgIUIANB+Q82AhAgA0EHNgIMQQAhAgy2AQtB7AAhAgycAQsgASAERgRAQYIBIQIMtQELIAFBAWoMAgsgASAERgRAQYEBIQIMtAELIAFBAWoMAQsgASAERg0BIAFBAWoLIQFBBCECDJgBC0GAASECDLABCwNAIAEtAABBoMwAai0AACIAQQJHBEAgAEEBRwRAQekAIQIMmQELDDELIAQgAUEBaiIBRw0AC0H/ACECDK8BCyABIARGBEBB/gAhAgyvAQsCQCABLQAAQQlrDjcvAwYvBAYGBgYGBgYGBgYGBgYGBgYGBgUGBgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYABgsgAUEBagshAUEFIQIMlAELIAFBAWoMBgsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgyrAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgyqAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQggA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgypAQsgA0EANgIcIAMgATYCFCADQY0UNgIQIANBBzYCDEEAIQIMqAELAkACQAJAAkADQCABLQAAQaDKAGotAAAiAEEFRwRAAkAgAEEBaw4GLgMEBQYABgtB6AAhAgyUAQsgBCABQQFqIgFHDQALQf0AIQIMqwELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB2wA2AhwgAyABNgIUIAMgADYCDEEAIQIMqgELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB3QA2AhwgAyABNgIUIAMgADYCDEEAIQIMqQELIAMoAgQhACADQQA2AgQgAyAAIAEQLCIARQ0HIANB+gA2AhwgAyABNgIUIAMgADYCDEEAIQIMqAELIANBADYCHCADIAE2AhQgA0HkCDYCECADQQc2AgxBACECDKcBCyABIARGDQEgAUEBagshAUEGIQIMjAELQfwAIQIMpAELAkACQAJAAkADQCABLQAAQaDIAGotAAAiAEEFRwRAIABBAWsOBCkCAwQFCyAEIAFBAWoiAUcNAAtB+wAhAgynAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HbADYCHCADIAE2AhQgAyAANgIMQQAhAgymAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0HdADYCHCADIAE2AhQgAyAANgIMQQAhAgylAQsgAygCBCEAIANBADYCBCADIAAgARAsIgBFDQMgA0H6ADYCHCADIAE2AhQgAyAANgIMQQAhAgykAQsgA0EANgIcIAMgATYCFCADQbwKNgIQIANBBzYCDEEAIQIMowELQc8AIQIMiQELQdEAIQIMiAELQecAIQIMhwELIAEgBEYEQEH6ACECDKABCwJAIAEtAABBCWsOBCAAACAACyABQQFqIQFB5gAhAgyGAQsgASAERgRAQfkAIQIMnwELAkAgAS0AAEEJaw4EHwAAHwALQQAhAAJAIAMoAjgiAkUNACACKAI4IgJFDQAgAyACEQAAIQALIABFBEBB4gEhAgyGAQsgAEEVRwRAIANBADYCHCADIAE2AhQgA0HJDTYCECADQRo2AgxBACECDJ8BCyADQfgANgIcIAMgATYCFCADQeoaNgIQIANBFTYCDEEAIQIMngELIAEgBEcEQCADQQ02AgggAyABNgIEQeQAIQIMhQELQfcAIQIMnQELIAEgBEYEQEH2ACECDJ0BCwJAAkACQCABLQAAQcgAaw4LAAELCwsLCwsLCwILCyABQQFqIQFB3QAhAgyFAQsgAUEBaiEBQeAAIQIMhAELIAFBAWohAUHjACECDIMBC0H1ACECIAEgBEYNmwEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBtdUAai0AAEcNCCAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMnAELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgAEQCADQfQANgIcIAMgATYCFCADIAA2AgxBACECDJwBC0HiACECDIIBC0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMnAELQeEAIQIMggELIANB8wA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyaAQsgAy0AKSIAQSNrQQtJDQkCQCAAQQZLDQBBASAAdEHKAHFFDQAMCgtBACECIANBADYCHCADIAE2AhQgA0HtCTYCECADQQg2AgwMmQELQfIAIQIgASAERg2YASADKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGz1QBqLQAARw0FIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAMgBTYCAAyZAQsgAygCBCEAIANCADcDACADIAAgBkEBaiIBECsiAARAIANB8QA2AhwgAyABNgIUIAMgADYCDEEAIQIMmQELQd8AIQIMfwtBACEAAkAgAygCOCICRQ0AIAIoAjQiAkUNACADIAIRAAAhAAsCQCAABEAgAEEVRg0BIANBADYCHCADIAE2AhQgA0HqDTYCECADQSY2AgxBACECDJkBC0HeACECDH8LIANB8AA2AhwgAyABNgIUIANBgBs2AhAgA0EVNgIMQQAhAgyXAQsgAy0AKUEhRg0GIANBADYCHCADIAE2AhQgA0GRCjYCECADQQg2AgxBACECDJYBC0HvACECIAEgBEYNlQEgAygCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABBsNUAai0AAEcNAiAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyADIAU2AgAMlgELIAMoAgQhACADQgA3AwAgAyAAIAZBAWoiARArIgBFDQIgA0HtADYCHCADIAE2AhQgAyAANgIMQQAhAgyVAQsgA0EANgIACyADKAIEIQAgA0EANgIEIAMgACABECsiAEUNgAEgA0HuADYCHCADIAE2AhQgAyAANgIMQQAhAgyTAQtB3AAhAgx5C0EAIQACQCADKAI4IgJFDQAgAigCNCICRQ0AIAMgAhEAACEACwJAIAAEQCAAQRVGDQEgA0EANgIcIAMgATYCFCADQeoNNgIQIANBJjYCDEEAIQIMkwELQdsAIQIMeQsgA0HsADYCHCADIAE2AhQgA0GAGzYCECADQRU2AgxBACECDJEBCyADLQApIgBBI0kNACAAQS5GDQAgA0EANgIcIAMgATYCFCADQckJNgIQIANBCDYCDEEAIQIMkAELQdoAIQIMdgsgASAERgRAQesAIQIMjwELAkAgAS0AAEEvRgRAIAFBAWohAQwBCyAD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ciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBFeHBlY3RlZCBMRiBhZnRlciBoZWFkZXJzAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMAVXNlciBjYWxsYmFjayBlcnJvcgBgb25fcmVzZXRgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19oZWFkZXJgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3Byb3RvY29sX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fcHJvdG9jb2wARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgAVHJhbnNmZXItRW5jb2RpbmcgY2FuJ3QgYmUgcHJlc2VudCB3aXRoIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgc2l6ZQBFeHBlY3RlZCBMRiBhZnRlciBjaHVuayBzaXplAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBVbmV4cGVjdGVkIHdoaXRlc3BhY2UgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgaGVhZGVyIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciBjaHVuayBleHRlbnNpb24gdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIHF1b3RlZC1wYWlyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fcHJvdG9jb2xfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUATWlzc2luZyBleHBlY3RlZCBDUiBhZnRlciByZXNwb25zZSBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAE1pc3NpbmcgZXhwZWN0ZWQgQ1IgYWZ0ZXIgY2h1bmsgZXh0ZW5zaW9uIG5hbWUASW52YWxpZCBzdGF0dXMgY29kZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABNaXNzaW5nIGV4cGVjdGVkIENSIGFmdGVyIGNodW5rIGRhdGEARXhwZWN0ZWQgTEYgYWZ0ZXIgY2h1bmsgZGF0YQBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AARGF0YSBhZnRlciBgQ29ubmVjdGlvbjogY2xvc2VgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBRVUVSWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAEV4cGVjdGVkIExGIGFmdGVyIENSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX1BST1RPQ09MX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8sIFJUU1AvIG9yIElDRS8A5xUAAK8VAACkEgAAkhoAACYWAACeFAAA2xkAAHkVAAB+EgAA/hQAADYVAAALFgAA2BYAAPMSAABCGAAArBYAABIVAAAUFwAA7xcAAEgUAABxFwAAshoAAGsZAAB+GQAANRQAAIIaAABEFwAA/RYAAB4YAACHFwAAqhkAAJMSAAAHGAAALBcAAMoXAACkFwAA5xUAAOcVAABYFwAAOxgAAKASAAAtHAAAwxEAAEgRAADeEgAAQhMAAKQZAAD9EAAA9xUAAKUVAADvFgAA+BkAAEoWAABWFgAA9RUAAAoaAAAIGgAAARoAAKsVAABCEgAA1xAAAEwRAAAFGQAAVBYAAB4RAADKGQAAyBkAAE4WAAD/GAAAcRQAAPAVAADuFQAAlBkAAPwVAAC/GQAAmxkAAHwUAABDEQAAcBgAAJUUAAAnFAAAGRQAANUSAADUGQAARBYAAPcQAEG5OwsBAQBB0DsL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBuj0LBAEAAAIAQdE9C14DBAMDAwMDAAADAwADAwADAwMDAwMDAwMDAAUAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAwADAEG6PwsEAQAAAgBB0T8LXgMAAwMDAwMAAAMDAAMDAAMDAwMDAwMDAwMABAAFAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwADAAMAQbDBAAsNbG9zZWVlcC1hbGl2ZQBBycEACwEBAEHgwQAL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBycMACwEBAEHgwwAL5wEBAQEBAQEBAQEBAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAWNodW5rZWQAQfHFAAteAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBB0McACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQYDIAAsgcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQpTTQ0KDQoAQanIAAsFAQIAAQMAQcDIAAtfBAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanKAAsFAQIAAQMAQcDKAAtfBAUFBgUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAQanMAAsEAQAAAQBBwcwAC14CAgACAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAEGpzgALBQECAAEDAEHAzgALXwQFAAAFBQUFBQUFBQUFBQYFBQUFBQUFBQUFBQUABQAHCAUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAUABQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAAAAFAEGp0AALBQEBAAEBAEHA0AALAQEAQdrQAAtBAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQanSAAsFAQEAAQEAQcDSAAsBAQBBytIACwYCAAAAAAIAQeHSAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBBoNQAC50BTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRVVFUllPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFVFRQQ0VUU1BBRFRQLw==",wasmBuffer;Object.defineProperty(module,"exports",{get:()=>wasmBuffer||(wasmBuffer=Buffer2.from(wasmBase64,"base64"))})}});var require_formdata_parser=__commonJS({"node_modules/undici/lib/web/fetch/formdata-parser.js"(exports,module){"use strict";var{bufferToLowerCasedHeaderName}=require_util(),{HTTP_TOKEN_CODEPOINTS}=require_data_url(),{makeEntry}=require_formdata(),{webidl}=require_webidl(),assert=__require("node:assert"),{isomorphicDecode}=require_infra(),dd=Buffer.from("--"),decoder=new TextDecoder,decoderIgnoreBOM=new TextDecoder("utf-8",{ignoreBOM:!0});function isAsciiString(chars){for(let i=0;i<chars.length;++i)if((chars.charCodeAt(i)&-128)!==0)return!1;return!0}function validateBoundary(boundary){let length=boundary.length;if(length<27||length>70)return!1;for(let i=0;i<length;++i){let cp=boundary.charCodeAt(i);if(!(cp>=48&&cp<=57||cp>=65&&cp<=90||cp>=97&&cp<=122||cp===39||cp===45||cp===95))return!1}return!0}function multipartFormDataParser(input2,mimeType){assert(mimeType!=="failure"&&mimeType.essence==="multipart/form-data");let boundaryString=mimeType.parameters.get("boundary");if(boundaryString===void 0)throw parsingError("missing boundary in content-type header");let boundary=Buffer.from(`--${boundaryString}`,"utf8"),entryList=[],position={position:0},firstBoundaryIndex=input2.indexOf(boundary);if(firstBoundaryIndex===-1)throw parsingError("no boundary found in multipart body");for(position.position=firstBoundaryIndex;;){if(input2.subarray(position.position,position.position+boundary.length).equals(boundary))position.position+=boundary.length;else throw parsingError("expected a value starting with -- and the boundary");if(bufferStartsWith(input2,dd,position))return entryList;if(input2[position.position]!==13||input2[position.position+1]!==10)throw parsingError("expected CRLF");position.position+=2;let result2=parseMultipartFormDataHeaders(input2,position),{name,filename,contentType,encoding}=result2;position.position+=2;let body2;{let boundaryIndex=input2.indexOf(boundary.subarray(2),position.position);if(boundaryIndex===-1)throw parsingError("expected boundary after body");body2=input2.subarray(position.position,boundaryIndex-4),position.position+=body2.length,encoding==="base64"&&(body2=Buffer.from(body2.toString(),"base64"))}if(input2[position.position]!==13||input2[position.position+1]!==10)throw parsingError("expected CRLF");position.position+=2;let value;filename!==null?(contentType??="text/plain",isAsciiString(contentType)||(contentType=""),value=new File([body2],filename,{type:contentType})):value=decoderIgnoreBOM.decode(Buffer.from(body2)),assert(webidl.is.USVString(name)),assert(typeof value=="string"&&webidl.is.USVString(value)||webidl.is.File(value)),entryList.push(makeEntry(name,value,filename))}}function parseContentDispositionAttribute(input2,position){input2[position.position]===59&&position.position++,collectASequenceOfBytes(char=>char===32||char===9,input2,position);let attributeName=collectASequenceOfBytes(char=>isToken(char)&&char!==61&&char!==42,input2,position);if(attributeName.length===0)return null;let attrNameStr=attributeName.toString("ascii").toLowerCase(),isExtended=input2[position.position]===42;if(isExtended&&position.position++,input2[position.position]!==61)return null;position.position++,collectASequenceOfBytes(char=>char===32||char===9,input2,position);let value;if(isExtended){let headerValue=collectASequenceOfBytes(char=>char!==32&&char!==13&&char!==10&&char!==59,input2,position),charsetSeparator=headerValue.indexOf(39),languageSeparator=charsetSeparator===-1?-1:headerValue.indexOf(39,charsetSeparator+1);if(charsetSeparator===-1||languageSeparator===-1)throw parsingError("expected charset and language separators in extended value");if(charsetSeparator!==5||headerValue[0]!==117&&headerValue[0]!==85||headerValue[1]!==116&&headerValue[1]!==84||headerValue[2]!==102&&headerValue[2]!==70||headerValue[3]!==45||headerValue[4]!==56)throw parsingError("unknown charset, expected utf-8");value=decodeURIComponent(decoder.decode(headerValue.subarray(languageSeparator+1)))}else if(input2[position.position]===34){position.position++;let quotedValue=collectASequenceOfBytes(char=>char!==10&&char!==13&&char!==34,input2,position);if(input2[position.position]!==34)throw parsingError("Closing quote not found");position.position++,value=decoder.decode(quotedValue).replace(/%0A/ig,`
@@ -487,7 +487,7 @@ ${errors}
487
487
 
488
488
  File: ${path10}`)}let providers=new Map;for(let[providerId,provider]of Object.entries(parsed.providers))providers.set(providerId,deepFreeze(structuredClone(provider)));return new _ModelConfig(providers)}getProvider(providerId){return this.providers.get(providerId)}getProviderIds(){return[...this.providers.keys()]}getError(){return this.error}};import{join as join2}from"node:path";var sharedModelsFileReadState,InMemoryCodingAgentModelsStore=class{constructor(){this.entries=new Map}async read(providerId,options){options?.signal?.throwIfAborted();let entry=this.entries.get(providerId);return entry?structuredClone(entry):void 0}async write(providerId,entry,options){options?.signal?.throwIfAborted(),this.entries.set(providerId,structuredClone(entry))}async delete(providerId,options){options?.signal?.throwIfAborted(),this.entries.delete(providerId)}},FileModelsStore=class{constructor(path10=join2(getAgentDir(),"models-store.json")){this.path=normalizePath(path10),this.storage=new FileAuthStorageBackend(this.path),this.readState=sharedModelsFileReadState?.path===this.path?sharedModelsFileReadState.readState:{data:{}},sharedModelsFileReadState||(sharedModelsFileReadState={path:this.path,readState:this.readState})}parse(content){return content?JSON.parse(stripBom(content)):{}}updateReadState(readState,data,revision){readState.data=data,readState.revision=revision}reloadFromStorage(readState,options){return this.storage.withLockAsync(async content=>{let data=this.parse(content);return this.updateReadState(readState,data,getFileRevision(this.path)),{result:data}},options)}async readLatest(readState,options){options?.signal?.throwIfAborted();let revision=getFileRevision(this.path);if(revision!==void 0&&revision===readState.revision)return readState.data;if(!readState.reload){let controller=new AbortController,reload2={controller,promise:this.reloadFromStorage(readState,{signal:controller.signal}),readers:0};readState.reload=reload2,reload2.promise.then(()=>{readState.reload===reload2&&(readState.reload=void 0)},()=>{readState.reload===reload2&&(readState.reload=void 0)})}let reload=readState.reload;reload.readers++;try{return await raceWithAbortSignal(reload.promise,options?.signal)}finally{reload.readers--,reload.readers===0&&readState.reload===reload&&(readState.reload=void 0,reload.controller.abort())}}async read(providerId,options){let entry=(await this.readLatest(this.readState,options))[providerId];return options?.signal?.throwIfAborted(),entry?structuredClone(entry):void 0}async write(providerId,entry,options){let latest;await this.storage.withLockAsync(async content=>{let current=this.parse(content);return current[providerId]=structuredClone(entry),latest=current,{result:void 0,next:JSON.stringify(current,null,2)}},options),latest&&this.updateReadState(this.readState,latest)}async delete(providerId,options){let latest;await this.storage.withLockAsync(async content=>{let current=this.parse(content);return delete current[providerId],latest=current,{result:void 0,next:JSON.stringify(current,null,2)}},options),latest&&this.updateReadState(this.readState,latest)}};var imageModelsByProvider=new Map;for(let[provider,models]of Object.entries(IMAGE_MODELS)){let imageModels=new Map;for(let model of Object.values(models))imageModels.set(model.id,model);imageModels.size>0&&imageModelsByProvider.set(provider,imageModels)}function getImageModel(provider,modelId){return imageModelsByProvider.get(provider)?.get(modelId)}function getImageProviders(){return Array.from(imageModelsByProvider.keys())}function getImageModels(provider){let models=imageModelsByProvider.get(provider);return models?Array.from(models.values()):[]}var imagesApiProviderRegistry=new Map;function wrapGenerateImages(api,generateImages2){return(model,context,options)=>{if(model.api!==api)throw new Error(`Mismatched api: ${model.api} expected ${api}`);return generateImages2(model,context,options)}}function registerImagesApiProvider(provider,sourceId){imagesApiProviderRegistry.set(provider.api,{provider:{api:provider.api,generateImages:wrapGenerateImages(provider.api,provider.generateImages)},sourceId})}function getImagesApiProvider(api){return imagesApiProviderRegistry.get(api)?.provider}var openRouterImagesProviderModulePromise;function createLazyLoadErrorImages(model,error){return{api:model.api,provider:model.provider,model:model.id,output:[],stopReason:"error",errorMessage:error instanceof Error?error.message:String(error),timestamp:Date.now()}}function loadOpenRouterImagesProviderModule(){return openRouterImagesProviderModulePromise||=import("./openrouter-images-X7PX72ON.js").then(module=>module),openRouterImagesProviderModulePromise}var generateImagesOpenRouter=async(model,context,options)=>{try{return await(await loadOpenRouterImagesProviderModule()).generateImages(model,context,options)}catch(error){return createLazyLoadErrorImages(model,error)}};function registerBuiltInImagesApiProviders(){registerImagesApiProvider({api:"openrouter-images",generateImages:generateImagesOpenRouter})}registerBuiltInImagesApiProviders();function resolveImagesApiProvider(api){let provider=getImagesApiProvider(api);if(!provider)throw new Error(`No API provider registered for api: ${api}`);return provider}async function generateImages(model,context,options){return resolveImagesApiProvider(model.api).generateImages(model,context,options)}var anthropicMessagesStreams=anthropicMessagesApi(),azureOpenAIResponsesStreams=azureOpenAIResponsesApi(),googleGenerativeAIStreams=googleGenerativeAIApi(),googleVertexStreams=googleVertexApi(),mistralConversationsStreams=mistralConversationsApi(),openAICodexResponsesStreams=openAICodexResponsesApi(),openAICompletionsStreams=openAICompletionsApi(),openAIResponsesStreams=openAIResponsesApi(),streamAnthropic=anthropicMessagesStreams.stream,streamSimpleAnthropic=anthropicMessagesStreams.streamSimple,streamAzureOpenAIResponses=azureOpenAIResponsesStreams.stream,streamSimpleAzureOpenAIResponses=azureOpenAIResponsesStreams.streamSimple,streamGoogle=googleGenerativeAIStreams.stream,streamSimpleGoogle=googleGenerativeAIStreams.streamSimple,streamGoogleVertex=googleVertexStreams.stream,streamSimpleGoogleVertex=googleVertexStreams.streamSimple,streamMistral=mistralConversationsStreams.stream,streamSimpleMistral=mistralConversationsStreams.streamSimple,streamOpenAICodexResponses=openAICodexResponsesStreams.stream,streamSimpleOpenAICodexResponses=openAICodexResponsesStreams.streamSimple,streamOpenAICompletions=openAICompletionsStreams.stream,streamSimpleOpenAICompletions=openAICompletionsStreams.streamSimple,streamOpenAIResponses=openAIResponsesStreams.stream,streamSimpleOpenAIResponses=openAIResponsesStreams.streamSimple;var getModel=getBuiltinModel,getModels=getBuiltinModels,getProviders=getBuiltinProviders,apiProviderRegistry=new Map;function wrapStream(api,stream2){return(model,context,options)=>{if(model.api!==api)throw new Error(`Mismatched api: ${model.api} expected ${api}`);return stream2(model,context,options)}}function wrapStreamSimple(api,streamSimple2){return(model,context,options)=>{if(model.api!==api)throw new Error(`Mismatched api: ${model.api} expected ${api}`);return streamSimple2(model,context,options)}}function registerApiProvider(provider,sourceId){apiProviderRegistry.set(provider.api,{provider:{api:provider.api,stream:wrapStream(provider.api,provider.stream),streamSimple:wrapStreamSimple(provider.api,provider.streamSimple)},sourceId})}function getApiProvider(api){return apiProviderRegistry.get(api)?.provider}function getApiProviders(){return Array.from(apiProviderRegistry.values(),entry=>entry.provider)}function unregisterApiProviders(sourceId){for(let[api,entry]of apiProviderRegistry.entries())entry.sourceId===sourceId&&apiProviderRegistry.delete(api)}function clearApiProviders(){apiProviderRegistry.clear()}function registerFauxProvider(options={}){let core=createFauxCore(options),sourceId=`faux-provider-${Math.random().toString(36).slice(2,10)}`;return registerApiProvider({api:core.api,stream:core.stream,streamSimple:core.streamSimple},sourceId),{api:core.api,models:core.models,getModel:core.getModel,state:core.state,setResponses:core.setResponses,appendResponses:core.appendResponses,getPendingResponseCount:core.getPendingResponseCount,unregister(){unregisterApiProviders(sourceId)}}}var BUILTIN_APIS=[["anthropic-messages",anthropicMessagesApi()],["openai-completions",openAICompletionsApi()],["openai-responses",openAIResponsesApi()],["openai-codex-responses",openAICodexResponsesApi()],["azure-openai-responses",azureOpenAIResponsesApi()],["google-generative-ai",googleGenerativeAIApi()],["google-vertex",googleVertexApi()],["mistral-conversations",mistralConversationsApi()],["bedrock-converse-stream",bedrockConverseStreamApi()],["pi-messages",piMessagesApi()]],builtinApiProviderInstances=new Map;function registerBuiltInApiProviders(){for(let[api,streams]of BUILTIN_APIS)getApiProvider(api)||registerApiProvider({api,stream:streams.stream,streamSimple:streams.streamSimple}),builtinApiProviderInstances.set(api,getApiProvider(api))}function resetApiProviders(){clearApiProviders(),builtinApiProviderInstances.clear(),registerBuiltInApiProviders()}registerBuiltInApiProviders();var compatModels=builtinModels(),AMBIENT_AUTH_MARKER="<authenticated>";function hasExplicitApiKey(apiKey){return typeof apiKey=="string"&&apiKey.trim().length>0}function withEnvApiKey(model,options){if(hasExplicitApiKey(options?.apiKey))return options;let apiKey=getEnvApiKey(model.provider,options?.env);return!apiKey||apiKey===AMBIENT_AUTH_MARKER?options:{...options,apiKey}}function hasResolvedCloudflareAuth(options){return hasExplicitApiKey(options?.apiKey)||typeof options?.headers?.["cf-aig-authorization"]=="string"}function getBuiltinProviderForModel(model){if(getApiProvider(model.api)!==builtinApiProviderInstances.get(model.api))return;let provider=compatModels.getProvider(model.provider);return provider?.getModels().some(candidate=>candidate.api===model.api)?provider:void 0}function resolveApiProvider(api){let provider=getApiProvider(api);if(!provider)throw new Error(`No API provider registered for api: ${api}`);return provider}function stream(model,context,options){let transcript=normalizeContext(context),builtinProvider=getBuiltinProviderForModel(model);return builtinProvider?model.provider.startsWith("cloudflare-")&&!hasResolvedCloudflareAuth(options)?compatModels.stream(model,transcript,options):builtinProvider.stream(model,transcript,withEnvApiKey(model,options)):resolveApiProvider(model.api).stream(model,transcript,withEnvApiKey(model,options))}async function complete(model,context,options){return stream(model,context,options).result()}function streamSimple(model,context,options){let transcript=normalizeContext(context),builtinProvider=getBuiltinProviderForModel(model);return builtinProvider?model.provider.startsWith("cloudflare-")&&!hasResolvedCloudflareAuth(options)?compatModels.streamSimple(model,transcript,options):builtinProvider.streamSimple(model,transcript,withEnvApiKey(model,options)):resolveApiProvider(model.api).streamSimple(model,transcript,withEnvApiKey(model,options))}async function completeSimple(model,context,options){return streamSimple(model,context,options).result()}function getAllProviderModels(provider){return provider?provider.getAllModels?.()??provider.getModels():[]}function mergeCompat(base,override){if(!override)return base;let merged={...base,...override},baseNested=base,overrideNested=override,mergedNested=merged;for(let key of["openRouterRouting","vercelGatewayRouting","chatTemplateKwargs","chatTemplateArgs"]){let baseValue=baseNested?.[key],overrideValue=overrideNested[key];(typeof baseValue=="object"&&baseValue!==null||typeof overrideValue=="object"&&overrideValue!==null)&&(mergedNested[key]={...baseValue,...overrideValue})}return merged}function mergeInputLimits(base,override){return override?{...base,...override,images:override.images?{...base?.images,...override.images,resize:override.images.resize?{...base?.images?.resize,...override.images.resize}:base?.images?.resize}:base?.images}:base}function mergeSamplingParamsByThinkingLevel(base,override){if(!override)return base;let merged={...base};for(let level of["off","minimal","low","medium","high","xhigh","max"]){let params=override[level];params&&(merged[level]={...base?.[level],...params})}return merged}function applyModelOverride(model,override){return{...model,name:override.name??model.name,reasoning:override.reasoning??model.reasoning,thinkingLevelMap:override.thinkingLevelMap?{...model.thinkingLevelMap,...override.thinkingLevelMap}:model.thinkingLevelMap,input:override.input??model.input,inputLimits:mergeInputLimits(model.inputLimits,override.inputLimits),cost:override.cost?{input:override.cost.input??model.cost.input,output:override.cost.output??model.cost.output,cacheRead:override.cost.cacheRead??model.cost.cacheRead,cacheWrite:override.cost.cacheWrite??model.cost.cacheWrite,tiers:override.cost.tiers??model.cost.tiers}:model.cost,promptCache:override.promptCache?{...model.promptCache,...override.promptCache}:model.promptCache,contextWindow:override.contextWindow??model.contextWindow,maxTokens:override.maxTokens??model.maxTokens,samplingParams:override.samplingParams?{...model.samplingParams,...override.samplingParams}:model.samplingParams,samplingParamsByThinkingLevel:mergeSamplingParamsByThinkingLevel(model.samplingParamsByThinkingLevel,override.samplingParamsByThinkingLevel),compat:mergeCompat(model.compat,override.compat)}}function modelFromJson(providerId,definition,providerConfig,defaults2){let api=definition.api??providerConfig.api??defaults2?.api;if(!api)throw new Error(`Provider ${providerId}, model ${definition.id}: no "api" specified. Set at provider or model level.`);let baseUrl=definition.baseUrl??providerConfig.baseUrl??defaults2?.baseUrl;if(!baseUrl)throw new Error(`Provider ${providerId}: "baseUrl" is required when defining custom models.`);if(definition.contextWindow!==void 0&&definition.contextWindow<=0)throw new Error(`Provider ${providerId}, model ${definition.id}: invalid contextWindow`);if(definition.maxTokens!==void 0&&definition.maxTokens<=0)throw new Error(`Provider ${providerId}, model ${definition.id}: invalid maxTokens`);return{id:definition.id,name:definition.name??definition.id,api,provider:providerId,baseUrl,reasoning:definition.reasoning??!1,thinkingLevelMap:definition.thinkingLevelMap,input:definition.input??["text"],inputLimits:definition.inputLimits,cost:definition.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},promptCache:definition.promptCache,contextWindow:definition.contextWindow??128e3,maxTokens:definition.maxTokens??16384,samplingParams:definition.samplingParams,samplingParamsByThinkingLevel:definition.samplingParamsByThinkingLevel,headers:void 0,compat:mergeCompat(providerConfig.compat,definition.compat)}}function findModelDefaults(models,modelId,api){let chatModels=models.filter(model=>isModelType(model,"chat"));return chatModels.find(model=>model.id===modelId)??(api?chatModels.find(model=>model.api===api):void 0)??chatModels.find(model=>model.api==="openai-completions")??chatModels[0]}function findExtensionModelDefaults(models,definition){let type=definition.type??"chat",candidates=models.filter(model=>isModelType(model,type));return candidates.find(model=>model.id===definition.id)??(definition.api?candidates.find(model=>model.api===definition.api):void 0)??(type==="chat"?candidates.find(model=>model.api==="openai-completions"):void 0)??candidates[0]}function extensionModelFromDefinition(providerId,models,config,definition){let type=definition.type??"chat",defaults2=findExtensionModelDefaults(models,definition),api=definition.api??(type==="chat"?config.api:void 0)??defaults2?.api;if(!api)throw new Error(`Provider ${providerId}, model ${definition.id}: no "api" specified. Set it at model level${type==="chat"?" or provider level":""}.`);let baseUrl=definition.baseUrl??config.baseUrl??defaults2?.baseUrl;if(!baseUrl)throw new Error(`Provider ${providerId}: "baseUrl" is required when defining custom models.`);return definition.type==="image"?{...definition,api,provider:providerId,baseUrl,headers:void 0}:definition.type==="classifier"?{...definition,api,provider:providerId,baseUrl,headers:void 0}:{...definition,api,provider:providerId,baseUrl,headers:void 0}}function applyModelsJson(providerId,baseModels,config){if(!config)return[...baseModels];if(config.oauth&&!config.baseUrl)throw new Error(`Provider ${providerId}: "baseUrl" is required when "oauth" is set.`);let hasOverrides2=config.modelOverrides&&Object.keys(config.modelOverrides).length>0;if(!config.models?.length&&!config.baseUrl&&!config.headers&&!config.compat&&!hasOverrides2&&!config.apiKey&&!config.oauth&&config.authHeader===void 0)throw new Error(`Provider ${providerId}: must specify "baseUrl", "headers", "compat", "modelOverrides", or "models".`);let models=baseModels.map(model=>{let baseUrl=config.oauth==="radius"?model.baseUrl:config.baseUrl??model.baseUrl;return isModelType(model,"chat")?{...model,baseUrl,compat:mergeCompat(model.compat,config.compat)}:isModelType(model,"classifier")&&config.compat?{...model,baseUrl,compat:{...model.compat,...config.compat}}:{...model,baseUrl}});for(let definition of config.models??[]){let existingIndex=models.findIndex(model2=>isModelType(model2,"chat")&&model2.id===definition.id),defaults2=findModelDefaults(models,definition.id,definition.api??config.api),model=modelFromJson(providerId,definition,config,defaults2);existingIndex>=0?models[existingIndex]=model:models.push(model)}return models}function applyExtension(providerId,models,config){return config?config.models?config.models.map(definition=>extensionModelFromDefinition(providerId,models,config,definition)):config.baseUrl?models.map(model=>({...model,baseUrl:config.baseUrl})):[...models]:[...models]}function adaptOAuth(config){return{name:config.name,isSubscription:config.isSubscription,login:async callbacks=>({...await config.login({onAuth:info=>callbacks.notify({type:"auth_url",...info}),onDeviceCode:info=>callbacks.notify({type:"device_code",...info}),onPrompt:prompt=>callbacks.prompt({type:"text",...prompt}),onProgress:message=>callbacks.notify({type:"progress",message}),onManualCodeInput:()=>callbacks.prompt({type:"manual_code",message:"Paste the authorization code"}),onSelect:prompt=>callbacks.prompt({type:"select",...prompt}),signal:callbacks.signal}),type:"oauth"}),refresh:async(credential,signal)=>({...await config.refreshToken(credential,signal),type:"oauth"}),toAuth:async credential=>({apiKey:config.getApiKey(credential)})}}function withConfiguredAuth(auth,headers,authHeader){let mergedHeaders=auth.headers||headers?{...auth.headers,...headers}:void 0;if(authHeader){if(!auth.apiKey)throw new Error("authHeader requires a resolved API key");mergedHeaders={...mergedHeaders,Authorization:`Bearer ${auth.apiKey}`}}return{...auth,headers:mergedHeaders}}function configuredApiKey(config,extension){return extension?.apiKey??config?.apiKey}function configuredHeaders(config,extension){if(!(!config?.headers&&!extension?.headers))return{...config?.headers,...extension?.headers}}async function configContextEnv(values,ctx,explicit){let env={...explicit};for(let name of new Set(values.flatMap(getConfigValueEnvVarNames))){if(env[name]!==void 0)continue;let value=await ctx.env(name);value!==void 0&&(env[name]=value)}return Object.keys(env).length>0?env:void 0}function composeApiKeyAuth(providerId,base,config,extension){let inherited=base?.auth.apiKey,rawKey=configuredApiKey(config,extension),oauth=extension?.oauth??base?.auth.oauth;if(!inherited&&rawKey===void 0&&oauth)return;let rawHeaders=configuredHeaders(config,extension),authHeader=extension?.authHeader??config?.authHeader??!1;return{name:inherited?.name??"API key",login:inherited?.login??(async interaction=>({type:"api_key",key:await interaction.prompt({type:"secret",message:"Enter API key"})})),check:async input2=>{if(input2.credential){if(inherited?.check)return inherited.check(input2);if(input2.credential.key)return{type:"api_key",source:"stored credential"};let resolved2=await inherited?.resolve(input2);return resolved2?{type:"api_key",source:resolved2.source}:void 0}if(rawKey!==void 0){if(isCommandConfigValue(rawKey))return{type:"api_key",source:"configured API key"};let envNames=getConfigValueEnvVarNames(rawKey);for(let name of envNames)if(await input2.ctx.env(name)===void 0)return;return{type:"api_key",source:"configured API key"}}if(inherited?.check)return inherited.check(input2);let resolved=await inherited?.resolve(input2);return resolved?{type:"api_key",source:resolved.source}:void 0},resolve:async input2=>{let result2;if(input2.credential)result2=inherited?await inherited.resolve(input2):input2.credential.key?{auth:{apiKey:input2.credential.key},env:input2.credential.env,source:"stored credential"}:void 0;else if(rawKey!==void 0){let env=await configContextEnv([rawKey],input2.ctx),key=resolveConfigValueOrThrow(rawKey,`API key for provider "${providerId}"`,env);result2=inherited?await inherited.resolve({...input2,credential:{type:"api_key",key}}):{auth:{apiKey:key},source:"configured API key"}}else result2=await inherited?.resolve(input2);if(!result2)return;let explicitEnv={...input2.credential?.env??{},...result2.env??{}},headerEnv=await configContextEnv(Object.values(rawHeaders??{}),input2.ctx,explicitEnv),headers=resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,headerEnv);return{...result2,auth:withConfiguredAuth(result2.auth,headers,authHeader)}}}}function composeOAuthAuth(providerId,base,config,extension){let oauth=extension?.oauth?adaptOAuth(extension.oauth):base?.auth.oauth;if(!oauth)return;let rawHeaders=configuredHeaders(config,extension),authHeader=extension?.authHeader??config?.authHeader??!1;return{...oauth,toAuth:async credential=>{let auth=await oauth.toAuth(credential),env=credential.env,headers=resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,typeof env=="object"&&env!==null?env:void 0);return withConfiguredAuth(auth,headers,authHeader)}}}function rawModelHeaders(model,config,extension){let chatDefinition=isModelType(model,"chat")?config?.models?.find(entry=>entry.id===model.id):void 0,extensionModel=extension?.models?.find(entry=>(entry.type??"chat")===(model.type??"chat")&&entry.id===model.id),headers={...isModelType(model,"chat")?config?.modelOverrides?.[model.id]?.headers:void 0,...chatDefinition?.headers,...extensionModel?.headers};return Object.keys(headers).length>0?headers:void 0}function validateExtensionProvider(providerId,base,modelsConfig,extension){if(extension.streamSimple&&!extension.api)throw new Error(`Provider ${providerId}: "api" is required when registering streamSimple.`);applyExtension(providerId,applyModelsJson(providerId,getAllProviderModels(base),modelsConfig),extension)}function composeModelProvider(providerId,base,modelConfig,extension){let config=modelConfig.getProvider(providerId),extensionOAuthCredential,refreshedExtensionModels,currentExtension=()=>extension&&refreshedExtensionModels?{...extension,models:refreshedExtensionModels}:extension,getAllModels=()=>{let models=applyExtension(providerId,applyModelsJson(providerId,getAllProviderModels(base),config),currentExtension());return extensionOAuthCredential&&extension?.oauth?.modifyModels&&(models=[...extension.oauth.modifyModels(models.filter(model=>isModelType(model,"chat")),extensionOAuthCredential),...models.filter(model=>!isModelType(model,"chat"))]),models.map(model=>{let override=config?.modelOverrides?.[model.id];return override&&isModelType(model,"chat")?applyModelOverride(model,override):model})};getAllModels();let apiKey=composeApiKeyAuth(providerId,base,config,extension),oauth=composeOAuthAuth(providerId,base,config,extension);if(!apiKey&&!oauth)throw new Error(`Provider ${providerId}: no authentication method configured.`);let supportsBaseApi=model=>base?.getModels().some(entry=>entry.api===model.api)??!1,streamWith=(model,context,options,simple)=>lazyStream(model,async()=>{if(extension?.streamSimple&&model.api===extension.api)return extension.streamSimple(model,context,options);if(base&&supportsBaseApi(model))return simple?base.streamSimple(model,context,options):base.stream(model,context,options);let api=getApiProvider(model.api);if(!api)throw new Error(`No API provider registered for api: ${model.api}`);return simple?api.streamSimple(model,context,options):api.stream(model,context,options)}),provider={id:providerId,name:extension?.name??config?.name??base?.name??extension?.oauth?.name??providerId,baseUrl:extension?.baseUrl??config?.baseUrl??base?.baseUrl,headers:base?.headers,auth:{...apiKey?{apiKey}:{},...oauth?{oauth}:{}},getModels:()=>getAllModels().filter(model=>isModelType(model,"chat")),getAllModels,refreshModels:base?.refreshModels||extension?.refreshModels||extension?.oauth?.modifyModels?async context=>{await base?.refreshModels?.(context);let refreshed;if(extension?.refreshModels&&(refreshed=await extension.refreshModels(context)),context.signal.aborted)return;let oauthCredential=context.credential?.type==="oauth"?context.credential:void 0;await context.publish({update:()=>{refreshed&&(applyExtension(providerId,applyModelsJson(providerId,getAllProviderModels(base),config),{...extension,models:refreshed}),refreshedExtensionModels=refreshed),extensionOAuthCredential=oauthCredential}})}:void 0,filterModels:base?.filterModels?(models,credential)=>base.filterModels(models,credential):void 0,filterAllModels:base?.filterAllModels?(models,credential)=>base.filterAllModels(models,credential):void 0,stream:(model,context,options)=>streamWith(model,context,options,!1),streamSimple:(model,context,options)=>streamWith(model,context,options,!0)},fetchDeferred=base?.fetchDeferred;fetchDeferred&&(provider.fetchDeferred=(model,handle,options)=>fetchDeferred(model,handle,options));let cancelDeferred=base?.cancelDeferred;cancelDeferred&&(provider.cancelDeferred=(model,handle,options)=>cancelDeferred(model,handle,options));let extensionImages=extension?.images,generateImages2=base?.generateImages;(generateImages2||Object.keys(extensionImages??{}).length>0)&&(provider.generateImages=(model,context,options)=>{let implementation=extensionImages?.[model.api];return implementation?implementation.generateImages(model,context,options):generateImages2?generateImages2(model,context,options):Promise.resolve(imageErrorResult(model,new Error(`Provider ${providerId} has no image implementation for "${model.api}"`)))});let extensionClassifiers=extension?.classifiers,classify=base?.classify;return(classify||Object.keys(extensionClassifiers??{}).length>0)&&(provider.classify=(model,context,options)=>{let implementation=extensionClassifiers?.[model.api];return implementation?implementation.classify(model,context,options):classify?classify(model,context,options):Promise.resolve(classifierErrorResult(model,new Error(`Provider ${providerId} has no classifier implementation for "${model.api}"`)))}),provider}function resolveConfiguredModelHeaders(model,config,extension,env){return resolveHeadersOrThrow(rawModelHeaders(model,config,extension),`model "${model.provider}/${model.id}"`,env)}function resolveCompatibilityRequestConfig(model,config,extension){let configured=resolveHeadersOrThrow({...configuredHeaders(config,extension),...rawModelHeaders(model,config,extension)},`model "${model.provider}/${model.id}"`);return{headers:model.headers||configured?{...model.headers,...configured}:void 0,authHeader:extension?.authHeader??config?.authHeader??!1}}function configuredRequestAuthStatus(config,extension){let value=configuredApiKey(config,extension);if(value===void 0)return;if(isCommandConfigValue(value))return{configured:!0,source:"models_json_command"};let names2=getConfigValueEnvVarNames(value);return names2.length>0?isConfigValueConfigured(value)?{configured:!0,source:"environment",label:names2.join(", ")}:{configured:!1}:{configured:!0,source:extension?.apiKey!==void 0?"fallback":"models_json_key"}}var RETRYABLE_STATUS_CODES=new Set([408,425,429,500,502,503,504]);async function fetchWithRetry(input2,init=void 0,options={}){let maxRetries=options.maxRetries===void 0||!Number.isFinite(options.maxRetries)?2:Math.max(0,Math.floor(options.maxRetries)),retryOnStatus=options.retryOnStatus??!0,parentSignal=init?.signal??void 0,timeoutSignal=options.timeoutMs!==void 0&&options.timeoutMs>0?AbortSignal.timeout(options.timeoutMs):void 0,attemptTimeoutMs=options.attemptTimeoutMs!==void 0&&options.attemptTimeoutMs>0?options.attemptTimeoutMs:void 0;for(let attempt2=0;;attempt2++){parentSignal?.throwIfAborted(),timeoutSignal?.throwIfAborted();let attemptTimeoutSignal=attemptTimeoutMs?AbortSignal.timeout(attemptTimeoutMs):void 0,signals=[parentSignal,timeoutSignal,attemptTimeoutSignal].filter(signal2=>signal2!==void 0),signal=signals.length>1?AbortSignal.any(signals):signals[0];try{let response=await fetch(input2,signal?{...init,signal}:init);if(!(retryOnStatus&&RETRYABLE_STATUS_CODES.has(response.status)&&attempt2<maxRetries))return response;try{await response.body?.cancel()}catch{}}catch(error){let attemptTimedOut=attemptTimeoutSignal?.aborted===!0&&!parentSignal?.aborted&&!timeoutSignal?.aborted;if(parentSignal?.aborted||timeoutSignal?.aborted||error instanceof Error&&error.name==="AbortError"&&!attemptTimedOut&&timeoutSignal===void 0||attempt2>=maxRetries)throw error}}}function getPiUserAgent(version2){return formatUserAgent({userAgent:"detailed",version:version2})}var DEFAULT_CATALOG_BASE_URL="https://pi.dev",REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS=4e3,REMOTE_CATALOG_REFRESH_INTERVAL_MS=14400*1e3,REMOTE_CATALOG_MODEL_TYPES=["chat","image","classifier"];function isSupportedModelType(model){return model.type===void 0||typeof model.type=="string"&&REMOTE_CATALOG_MODEL_TYPES.includes(model.type)}function mergeModels(baseline,dynamic){let merged=new Map;for(let model of[...baseline,...dynamic])merged.set(`${getModelType(model)}\0${model.id}`,model);return[...merged.values()]}function parseCatalog(providerId,value){let entries=Array.isArray(value)?value:typeof value=="object"&&value!==null&&"models"in value&&Array.isArray(value.models)?value.models:typeof value=="object"&&value!==null?Object.values(value):void 0;if(!entries)throw new Error(`Invalid model catalog for provider "${providerId}"`);return entries.filter(entry=>typeof entry=="object"&&entry!==null&&"id"in entry).filter(isSupportedModelType).map(model=>({...model,provider:providerId}))}async function readCatalog(providerId,response){let lastModified=Date.parse(response.headers.get("last-modified")??"");return{models:parseCatalog(providerId,await response.json()),lastModified:Number.isNaN(lastModified)?0:lastModified,etag:response.headers.get("etag")??void 0}}function isNewer(lastModified,localGeneratedAt){return localGeneratedAt===void 0||lastModified!==void 0&&lastModified>localGeneratedAt}function remoteModels(entry,localGeneratedAt){return entry&&isNewer(entry.lastModified,localGeneratedAt)?entry.models:[]}function requestCatalog(providerId,catalogBaseUrl,signal,validator){let url=new URL(`/api/models/providers/${encodeURIComponent(providerId)}`,catalogBaseUrl);return url.searchParams.set("types",REMOTE_CATALOG_MODEL_TYPES.join(",")),fetchWithRetry(url,{headers:{accept:"application/json","User-Agent":getPiUserAgent(VERSION),...validator?{"if-none-match":validator}:{}},signal},{attemptTimeoutMs:REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS})}function withRemoteCatalog(provider,catalogBaseUrl=DEFAULT_CATALOG_BASE_URL,localGeneratedAt){let dynamicModels=[];return{...provider,getModels:()=>mergeModels(provider.getModels(),dynamicModels.filter(model=>isModelType(model,"chat"))),getAllModels:()=>mergeModels(provider.getAllModels?.()??provider.getModels(),dynamicModels),refreshModels:async context=>{let stored=context.stored,restored=remoteModels(stored,localGeneratedAt).filter(model=>model.provider===provider.id);if(!await context.publish({update:()=>{dynamicModels=restored}})||!context.allowNetwork||context.signal.aborted||!context.force&&stored?.checkedAt!==void 0&&stored.lastModified!==void 0&&Date.now()-stored.checkedAt<REMOTE_CATALOG_REFRESH_INTERVAL_MS)return;let validator=stored&&stored.models.length>0?stored.etag:void 0,response=await requestCatalog(provider.id,catalogBaseUrl,context.signal,validator);if(context.signal.aborted)return;let checkedAt=Date.now();if(response.status===304&&stored){await context.publish({persist:{...stored,checkedAt}});return}if(response.status===404||response.status===501){await context.publish({persist:{...stored??{models:[]},checkedAt,lastModified:0,etag:void 0}});return}if(!response.ok)throw await context.publish({persist:{...stored??{models:[]},checkedAt}}),new Error(`Model catalog request failed for ${provider.id}: ${response.status}`);let catalog=await readCatalog(provider.id,response);if(context.signal.aborted)return;let entry={...catalog,checkedAt},published=remoteModels(entry,localGeneratedAt);await context.publish({persist:entry,update:()=>{dynamicModels=published}})}}}function withPersonalizedCatalog(provider,personalize,catalogBaseUrl=DEFAULT_CATALOG_BASE_URL,localGeneratedAt){let personalModels=[],builtinModels2=()=>provider.getAllModels?.()??provider.getModels(),getAllModels=()=>personalModels.length>0?personalModels:builtinModels2();return{...provider,getModels:()=>getAllModels().filter(model=>isModelType(model,"chat")),getAllModels,refreshModels:async context=>{let restored=(context.stored?.models??[]).filter(model=>model.provider===provider.id);if(!await context.publish({update:()=>{personalModels=restored}})||!context.allowNetwork||context.signal.aborted)return;let response=await requestCatalog(provider.id,catalogBaseUrl,context.signal);if(context.signal.aborted)return;let remote=[];if(response.status!==404&&response.status!==501){if(!response.ok)throw new Error(`Model catalog request failed for ${provider.id}: ${response.status}`);let catalog=await readCatalog(provider.id,response);isNewer(catalog.lastModified,localGeneratedAt)&&(remote=catalog.models)}let personalized=await personalize(mergeModels(builtinModels2(),remote),context);context.signal.aborted||await context.publish({persist:{models:personalized,checkedAt:Date.now()},update:()=>{personalModels=personalized}})}}}var RuntimeCredentials=class{constructor(store){this.overrides=new Map,this.store=store}setRuntimeApiKey(providerId,apiKey){this.overrides.set(providerId,apiKey)}removeRuntimeApiKey(providerId){this.overrides.delete(providerId)}hasRuntimeApiKey(providerId){return this.overrides.has(providerId)}async read(providerId,options){options?.signal?.throwIfAborted();let override=this.overrides.get(providerId);return override?{type:"api_key",key:override}:this.store.read(providerId,options)}async list(options){let entries=new Map((await this.store.list(options)).map(entry=>[entry.providerId,entry]));options?.signal?.throwIfAborted();for(let providerId of this.overrides.keys())entries.set(providerId,{providerId,type:"api_key"});return[...entries.values()]}modify(providerId,fn,options){return this.store.modify(providerId,fn,options)}async delete(providerId,options){options?.signal?.throwIfAborted(),await this.store.delete(providerId,options),this.overrides.delete(providerId)}};var CredentialSynchronizationError=class extends Error{constructor(providerId,operation,credential,options){super(`Credential ${operation} committed for ${providerId}, but local synchronization failed`,options),this.name="CredentialSynchronizationError",this.providerId=providerId,this.operation=operation,this.credential=credential}};function mergeHeaders(base,override){if(!base&&!override)return;let merged={...base};for(let[name,value]of Object.entries(override??{})){let lowerName=name.toLowerCase();for(let existingName of Object.keys(merged))existingName.toLowerCase()===lowerName&&delete merged[existingName];merged[name]=value}return merged}var ModelRuntime=class _ModelRuntime{constructor(credentials,config,modelsPath,modelsStore,providers,modelNetworkEnabled){this.builtins=new Map,this.nativeExtensionProviders=new Map,this.extensionProviders=new Map,this.virtualModels=new Map,this.compositionErrors=new Map,this.snapshot={all:[],available:[],configuredProviders:new Set,storedProviders:new Set,auth:new Map},this.availabilityRefreshSeq=0,this.availabilityErrorSeq=0,this.providerAvailabilitySeq=new Map,this.credentialOperations=new Map,this.credentials=credentials,this.config=config,this.modelsPath=modelsPath,this.modelNetworkEnabled=modelNetworkEnabled,this.defaultBuiltins=new Map(providers.map(provider=>[provider.id,provider]));for(let[providerId,provider]of this.defaultBuiltins)this.builtins.set(providerId,provider);this.models=createModels({credentials,modelsStore}),this.rebuildProviders()}static async create(options={}){let credentials=new RuntimeCredentials(options.credentials??AuthStorage.create(options.authPath)),modelsPath=options.modelsPath===null?void 0:options.modelsPath??join3(getAgentDir(),"models.json"),config=await ModelConfig.load(modelsPath),modelsStore=options.modelsStore??(modelsPath?new FileModelsStore(options.modelsStorePath??join3(dirname2(modelsPath),"models-store.json")):new InMemoryCodingAgentModelsStore),builtinModelDataGeneratedAt=getBuiltinModelDataGeneratedAt(),providers=builtinProviders().map(provider=>provider.id==="radius"?provider:provider.id==="openrouter"?withPersonalizedCatalog(provider,personalizeOpenRouterCatalog,options.catalogBaseUrl,builtinModelDataGeneratedAt):withRemoteCatalog(provider,options.catalogBaseUrl,builtinModelDataGeneratedAt)),runtime=new _ModelRuntime(credentials,config,modelsPath,modelsStore,providers,process.env.PI_OFFLINE===void 0);runtime.configureRadiusProviders(),runtime.rebuildProviders();let refreshFromNetwork=runtime.modelNetworkEnabled&&options.allowModelNetwork===!0,controller=refreshFromNetwork&&options.modelRefreshTimeoutMs!==void 0?new AbortController:void 0,timeout=controller?setTimeout(()=>controller.abort(),options.modelRefreshTimeoutMs):void 0,signal=controller?options.signal?AbortSignal.any([options.signal,controller.signal]):controller.signal:options.signal;try{options.refreshOnCreate!==!1&&await runtime.refresh({allowNetwork:refreshFromNetwork,signal})}finally{timeout&&clearTimeout(timeout)}return runtime}configureRadiusProviders(){this.builtins.clear();for(let[providerId,provider]of this.defaultBuiltins)this.builtins.set(providerId,provider);for(let providerId of this.config.getProviderIds()){let config=this.config.getProvider(providerId);config?.oauth!=="radius"||!config.baseUrl||this.builtins.set(providerId,radiusProvider({id:providerId,name:config.name??providerId,gateway:config.baseUrl.replace(/\/v1\/?$/u,"")}))}}providerIds(){return new Set([...this.builtins.keys(),...this.nativeExtensionProviders.keys(),...this.config.getProviderIds(),...this.extensionProviders.keys(),...this.virtualModels.keys()])}recomposeProvider(providerId){let provider=this.composeProvider(providerId),virtualModels=[...this.virtualModels.get(providerId)?.values()??[]].map(entry=>entry.model);return virtualModels.length>0?this.models.setProvider(withVirtualModels(providerId,provider,virtualModels)):provider?this.models.setProvider(provider):this.models.deleteProvider(providerId),provider}composeProvider(providerId){let base=this.nativeExtensionProviders.get(providerId)??this.builtins.get(providerId),extension=this.extensionProviders.get(providerId);if(!this.config.getProvider(providerId)&&!extension)return this.compositionErrors.delete(providerId),base;try{let provider=composeModelProvider(providerId,base,this.config,extension);return this.compositionErrors.delete(providerId),provider}catch(error){return this.compositionErrors.set(providerId,error instanceof Error?error.message:String(error)),base}}rebuildProviders(){this.models.clearProviders(),this.compositionErrors.clear();for(let providerId of this.providerIds())this.recomposeProvider(providerId);this.updateModelSnapshot()}updateModelSnapshot(){let all=[...this.models.getModels()];this.snapshot={...this.snapshot,all,available:all.filter(model=>this.snapshot.configuredProviders.has(model.provider))}}async runAvailabilityRefresh(seq,errorSeq,signal){let providers=this.models.getProviders(),[available,checks,credentials]=await Promise.all([this.models.getAvailable(void 0,{signal}),Promise.all(providers.map(async provider=>[provider.id,await this.models.checkAuth(provider.id,{signal})])),this.credentials.list({signal})]);if(seq!==this.availabilityRefreshSeq)return;let auth=new Map(checks),configuredProviders=new Set(checks.filter(entry=>entry[1]!==void 0).map(([providerId])=>providerId));this.snapshot={all:[...this.models.getModels()],available:[...available],configuredProviders,storedProviders:new Set(credentials.map(entry=>entry.providerId)),auth},errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0)}queueAvailabilityRefresh(signal){let seq=++this.availabilityRefreshSeq;for(let[providerId,providerSeq]of this.providerAvailabilitySeq)this.providerAvailabilitySeq.set(providerId,providerSeq+1);let errorSeq=++this.availabilityErrorSeq,effectiveSignal=operationSignal(signal);return this.runAvailabilityRefresh(seq,errorSeq,effectiveSignal).catch(error=>{throw errorSeq===this.availabilityErrorSeq&&!effectiveSignal.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error})}async refreshProviderAvailability(providerId,signal){++this.availabilityRefreshSeq;let providerSeq=(this.providerAvailabilitySeq.get(providerId)??0)+1;this.providerAvailabilitySeq.set(providerId,providerSeq);let errorSeq=++this.availabilityErrorSeq;try{let[available,auth,credential]=await Promise.all([this.models.getAvailable(providerId,{signal}),this.models.checkAuth(providerId,{signal}),this.credentials.read(providerId,{signal})]);if(signal.throwIfAborted(),this.providerAvailabilitySeq.get(providerId)!==providerSeq)return;let configuredProviders=new Set(this.snapshot.configuredProviders),storedProviders=new Set(this.snapshot.storedProviders),authByProvider=new Map(this.snapshot.auth);auth?(configuredProviders.add(providerId),authByProvider.set(providerId,auth)):(configuredProviders.delete(providerId),authByProvider.delete(providerId)),credential?storedProviders.add(providerId):storedProviders.delete(providerId);let all=[...this.models.getModels()],availableById=new Map([...this.snapshot.available.filter(model=>model.provider!==providerId),...available].map(model=>[`${model.provider}\0${model.id}`,model]));this.snapshot={all,available:all.flatMap(model=>availableById.get(`${model.provider}\0${model.id}`)??[]),configuredProviders,storedProviders,auth:authByProvider},errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0)}catch(error){throw this.providerAvailabilitySeq.get(providerId)===providerSeq&&errorSeq===this.availabilityErrorSeq&&!signal.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error}}getProviders(){return this.models.getProviders()}getProvider(providerId){return this.models.getProvider(providerId)}getModels(providerId){return this.models.getModels(providerId)}getModel(providerId,modelId){return this.models.getModel(providerId,modelId)}getModelsOfType(type,providerId){return this.models.getModelsOfType(type,providerId)}getModelOfType(type,providerId,modelId){return this.models.getModelOfType(type,providerId,modelId)}getAllModels(providerId){return this.models.getAllModels(providerId)}getAvailableOfType(type,providerId,options){return this.models.getAvailableOfType(type,providerId,options)}getAllAvailable(providerId,options){return this.models.getAllAvailable(providerId,options)}async checkAuth(providerId,options){return this.models.checkAuth(providerId,options)}async getAvailable(providerId,options){if(providerId){let errorSeq=++this.availabilityErrorSeq;try{let available=await this.models.getAvailable(providerId,options);return errorSeq===this.availabilityErrorSeq&&(this.availabilityError=void 0),available}catch(error){throw errorSeq===this.availabilityErrorSeq&&!options?.signal?.aborted&&(this.availabilityError=error instanceof Error?error.message:String(error)),error}}return await this.queueAvailabilityRefresh(options?.signal),this.snapshot.available}getAvailableSnapshot(){return this.snapshot.available}getModelsPath(){return this.modelsPath}getError(){let errors=[],configError=this.config.getError();configError&&errors.push(configError);for(let[providerId,error]of this.compositionErrors)errors.push(`Provider "${providerId}": ${error}`);return this.availabilityError&&errors.push(`Availability refresh: ${this.availabilityError}`),errors.length>0?errors.join(`
489
489
 
490
- `):void 0}getRegisteredProviderConfig(providerId){return this.extensionProviders.get(providerId)}getRegisteredProviderIds(){return[...new Set([...this.extensionProviders.keys(),...this.nativeExtensionProviders.keys()])]}getRegisteredNativeProvider(providerId){return this.nativeExtensionProviders.get(providerId)}getCompatibilityRequestConfig(model){return resolveCompatibilityRequestConfig(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider))}isUsingOAuth(providerId){return this.snapshot.auth.get(providerId)?.type==="oauth"}isUsingSubscription(providerId){return this.isUsingOAuth(providerId)&&this.models.getProvider(providerId)?.auth.oauth?.isSubscription===!0}hasConfiguredAuth(providerId){return this.snapshot.configuredProviders.has(providerId)}async getAuth(providerOrModel,overrides={}){if(typeof providerOrModel=="string")return this.models.getAuth(providerOrModel,overrides);let resolution=await this.models.getAuth(providerOrModel,overrides);if(!resolution)return;let configuredHeaders2=resolveConfiguredModelHeaders(providerOrModel,this.config.getProvider(providerOrModel.provider),this.extensionProviders.get(providerOrModel.provider),{...resolution.env??{},...overrides.env??{}});return{...resolution,auth:{...resolution.auth,headers:mergeHeaders(resolution.auth.headers,configuredHeaders2)}}}enqueueCredentialOperation(providerId,signal,task){let previous=this.credentialOperations.get(providerId)??Promise.resolve(),markStarted,started=new Promise(resolve18=>{markStarted=resolve18}),operation=(async()=>(await previous.catch(()=>{}),signal.throwIfAborted(),markStarted?.(),task()))(),tail=operation.catch(()=>{});return this.credentialOperations.set(providerId,tail),tail.then(()=>{this.credentialOperations.get(providerId)===tail&&this.credentialOperations.delete(providerId)}),raceWithAbortSignal(started,signal).then(()=>operation)}async synchronizeCredentialState(providerId,operation,credential,signal){try{signal.throwIfAborted(),this.recomposeProvider(providerId);let compositionError=this.compositionErrors.get(providerId);if(compositionError)throw new Error(compositionError);let result2=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result2.aborted&&signal.throwIfAborted();let refreshError=result2.errors.get(providerId);if(refreshError)throw refreshError;this.updateModelSnapshot(),await this.refreshProviderAvailability(providerId,signal)}catch(cause){throw new CredentialSynchronizationError(providerId,operation,credential,{cause})}}setRuntimeApiKey(providerId,apiKey,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.setRuntimeApiKey(providerId,apiKey),await this.synchronizeCredentialState(providerId,"setRuntimeApiKey",{type:"api_key",key:apiKey},signal)})}removeRuntimeApiKey(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.removeRuntimeApiKey(providerId),await this.synchronizeCredentialState(providerId,"removeRuntimeApiKey",void 0,signal)})}listCredentials(options){return this.credentials.list(options)}getProviderAuthStatus(providerId){if(this.credentials.hasRuntimeApiKey(providerId))return{configured:!0,source:"runtime"};if(this.snapshot.storedProviders.has(providerId))return{configured:!0,source:"stored"};let configured=configuredRequestAuthStatus(this.config.getProvider(providerId),this.extensionProviders.get(providerId));if(configured)return configured;let check=this.snapshot.auth.get(providerId);return check?{configured:!0,source:"environment",label:check.source}:{configured:!1}}async prepareRequest(model,options){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",`Unknown provider: ${model.provider}`);let resolution=await this.getAuth(model,{apiKey:options?.apiKey,env:options?.env,signal:options?.signal});if(!resolution)throw new ModelsError("auth",`Provider is not configured: ${model.provider}`);let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,requestModel=resolution.auth.baseUrl?{...model,baseUrl:resolution.auth.baseUrl}:model,sessionId="sessionId"in providerOptions&&typeof providerOptions.sessionId=="string"?providerOptions.sessionId:void 0,headers=mergeHeaders(mergeHeaders(getOpenCodeSessionHeaders(requestModel,sessionId),resolution.auth.headers),providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0;return{provider,model:requestModel,options:{...providerOptions,apiKey:providerOptions.apiKey??resolution.auth.apiKey,headers,env}}}stream(model,context,options){let transcript=normalizeContext(context);return lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);return prepared.provider.stream(prepared.model,transcript,prepared.options)})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){let transcript=normalizeContext(context);return isVirtualModel(model)?lazyStream(model,async()=>{let route=await this.resolveModel(model,transcript.messages,{reason:"direct",thinkingLevel:options?.reasoning??"off",signal:options?.signal}),{maxTokens:limit}=route.model,maxTokens=options?.maxTokens&&limit>0?Math.min(options.maxTokens,limit):options?.maxTokens,reasoning=route.thinkingLevel==="off"?void 0:route.thinkingLevel,{apiKey,headers,env,...rest}=options??{},auth=route.model.provider===model.provider?{apiKey,headers,env}:{};return this.streamSimple(route.model,context,{...rest,...auth,maxTokens,reasoning})}):lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);return prepared.provider.streamSimple(prepared.model,transcript,prepared.options)})}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}streamDeferred(model,handle,options){return lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.fetchDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);return prepared.provider.fetchDeferred(prepared.model,handle,prepared.options)})}async fetchDeferred(model,handle,options){return this.streamDeferred(model,handle,options).result()}async cancelDeferred(model,handle,options){assertChatModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.cancelDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);await prepared.provider.cancelDeferred(prepared.model,handle,prepared.options)}async generateImages(model,context,options){try{assertImageModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.generateImages)throw new ModelsError("provider",`Provider ${model.provider} does not support image generation`);return await prepared.provider.generateImages(prepared.model,context,prepared.options)}catch(error){return imageErrorResult(model,error,options?.signal?.aborted)}}async classify(model,context,options){try{assertClassifierModel(model),assertClassifierInputSupported(model,context);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.classify)throw new ModelsError("provider",`Provider ${model.provider} does not support classification`);return await prepared.provider.classify(prepared.model,context,prepared.options)}catch(error){return classifierErrorResult(model,error,options?.signal?.aborted)}}login(providerId,type,interaction,options){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type,{...interaction,signal},options);return await this.synchronizeCredentialState(providerId,"login",credential,signal),credential})}logout(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{await this.models.logout(providerId,{signal}),await this.synchronizeCredentialState(providerId,"logout",void 0,signal)})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),this.configureRadiusProviders(),options.providers){for(let providerId of new Set(options.providers))this.recomposeProvider(providerId);this.updateModelSnapshot()}else this.rebuildProviders();let refreshOptions={...options,allowNetwork:options.allowNetwork??this.modelNetworkEnabled},result2=await this.models.refresh(refreshOptions)??{aborted:refreshOptions.signal?.aborted??!1,errors:new Map},errors=new Map(result2.errors);if(this.updateModelSnapshot(),options.providers)await Promise.all([...new Set(options.providers)].map(async providerId=>{try{await this.refreshProviderAvailability(providerId,operationSignal(options.signal))}catch(error){options.signal?.aborted||errors.set(providerId,error instanceof Error?error:new Error(String(error)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result2.aborted||(options.signal?.aborted??!1),errors}}registerNativeProvider(provider){if(!provider.id.trim())throw new Error("Provider id must not be empty.");this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id),this.updateModelSnapshot(),this.markProvisionallyConfigured(provider.id,configuredRequestAuthStatus(this.config.getProvider(provider.id),void 0),provider.auth.oauth&&!provider.auth.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}markProvisionallyConfigured(providerId,configuredStatus,type){if(!this.snapshot.storedProviders.has(providerId)&&!configuredStatus?.configured)return;let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type,source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}registerProvider(providerId,config){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config),this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value]of Object.entries(config))value!==void 0&&(effective[key]=value);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.markProvisionallyConfigured(providerId,configuredRequestAuthStatus(this.config.getProvider(providerId),effective),effective.oauth&&!effective.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}registerVirtualModel(definition){let{provider:providerId,id}=definition;if(!providerId.trim()||!id.trim())throw new Error("Virtual model provider and id must not be empty.");let existing=this.models.getModel(providerId,id);if(existing&&!isVirtualModel(existing))throw new Error(`Virtual model ${providerId}/${id} conflicts with a physical model.`);let models=this.virtualModels.get(providerId)??new Map;if(models.set(id,{model:createVirtualModel(definition),route:request=>definition.route(request)}),this.virtualModels.set(providerId,models),!this.recomposeProvider(providerId)&&!this.snapshot.configuredProviders.has(providerId)){let auth=new Map(this.snapshot.auth).set(providerId,{type:"api_key",source:"virtual"}),configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId);this.snapshot={...this.snapshot,auth,configuredProviders}}this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}unregisterVirtualModel(providerId,id){let models=this.virtualModels.get(providerId);models?.delete(id)&&(models.size===0&&this.virtualModels.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1}))}async resolveModel(model,messages,options){let name=`Virtual model ${model.provider}/${model.id}`,virtual=this.virtualModels.get(model.provider)?.get(model.id);if(!virtual)throw new Error(`${name} is not registered.`);let{failed,...request}=options,latest=findLatestResponse(messages),previousModel=latest&&this.getPhysicalModel(latest.provider,latest.model),failedModel=failed&&this.getPhysicalModel(failed.provider,failed.model),route=await virtual.route({...request,model,previous:previousModel&&{model:previousModel,thinkingLevel:latest?.thinkingLevel},failed:failedModel&&failed&&{model:failedModel,thinkingLevel:failed.thinkingLevel,message:failed},messages}),target=this.getPhysicalModel(route.model.provider,route.model.id),routed=`${name} routed to ${route.model.provider}/${route.model.id}`;if(!target)throw new Error(`${routed}, which is not a physical model.`);if(!this.hasConfiguredAuth(target.provider))throw new Error(`${routed}, which has no credentials.`);return{model:target,thinkingLevel:clampThinkingLevel(target,route.thinkingLevel),state:route.state}}getPhysicalModel(providerId,modelId){let model=this.models.getModel(providerId,modelId);return model&&!isVirtualModel(model)?model:void 0}};function readOrientationFromTiff(bytes2,tiffStart){if(tiffStart+8>bytes2.length)return 1;let le=(bytes2[tiffStart]<<8|bytes2[tiffStart+1])===18761,read16=pos=>le?bytes2[pos]|bytes2[pos+1]<<8:bytes2[pos]<<8|bytes2[pos+1],ifdOffset=(pos=>le?bytes2[pos]|bytes2[pos+1]<<8|bytes2[pos+2]<<16|bytes2[pos+3]<<24:(bytes2[pos]<<24|bytes2[pos+1]<<16|bytes2[pos+2]<<8|bytes2[pos+3])>>>0)(tiffStart+4),ifdStart=tiffStart+ifdOffset;if(ifdStart+2>bytes2.length)return 1;let entryCount=read16(ifdStart);for(let i=0;i<entryCount;i++){let entryPos=ifdStart+2+i*12;if(entryPos+12>bytes2.length)return 1;if(read16(entryPos)===274){let value=read16(entryPos+8);return value>=1&&value<=8?value:1}}return 1}function findJpegTiffOffset(bytes2){let offset=2;for(;offset<bytes2.length-1;){if(bytes2[offset]!==255)return-1;let marker=bytes2[offset+1];if(marker===255){offset++;continue}if(marker===225){if(offset+4>=bytes2.length)return-1;let segmentStart=offset+4;if(segmentStart+6>bytes2.length)return-1;if(hasExifHeader(bytes2,segmentStart))return segmentStart+6}if(offset+4>bytes2.length)return-1;let length=bytes2[offset+2]<<8|bytes2[offset+3];offset+=2+length}return-1}function findWebpTiffOffset(bytes2){let offset=12;for(;offset+8<=bytes2.length;){let chunkId=String.fromCharCode(bytes2[offset],bytes2[offset+1],bytes2[offset+2],bytes2[offset+3]),chunkSize=bytes2[offset+4]|bytes2[offset+5]<<8|bytes2[offset+6]<<16|bytes2[offset+7]<<24,dataStart=offset+8;if(chunkId==="EXIF")return dataStart+chunkSize>bytes2.length?-1:chunkSize>=6&&hasExifHeader(bytes2,dataStart)?dataStart+6:dataStart;offset=dataStart+chunkSize+chunkSize%2}return-1}function hasExifHeader(bytes2,offset){return bytes2[offset]===69&&bytes2[offset+1]===120&&bytes2[offset+2]===105&&bytes2[offset+3]===102&&bytes2[offset+4]===0&&bytes2[offset+5]===0}function getExifOrientation(bytes2){let tiffOffset=-1;return bytes2.length>=2&&bytes2[0]===255&&bytes2[1]===216?tiffOffset=findJpegTiffOffset(bytes2):bytes2.length>=12&&bytes2[0]===82&&bytes2[1]===73&&bytes2[2]===70&&bytes2[3]===70&&bytes2[8]===87&&bytes2[9]===69&&bytes2[10]===66&&bytes2[11]===80&&(tiffOffset=findWebpTiffOffset(bytes2)),tiffOffset===-1?1:readOrientationFromTiff(bytes2,tiffOffset)}function rotate90(photon,image,dstIndex){let w=image.get_width(),h=image.get_height(),src=image.get_raw_pixels(),dst=new Uint8Array(src.length);for(let y=0;y<h;y++)for(let x=0;x<w;x++){let srcIdx=(y*w+x)*4,dstIdx=dstIndex(x,y,w,h)*4;dst[dstIdx]=src[srcIdx],dst[dstIdx+1]=src[srcIdx+1],dst[dstIdx+2]=src[srcIdx+2],dst[dstIdx+3]=src[srcIdx+3]}return new photon.PhotonImage(dst,h,w)}function applyExifOrientation(photon,image,originalBytes){let orientation=getExifOrientation(originalBytes);if(orientation===1)return image;switch(orientation){case 2:return photon.fliph(image),image;case 3:return photon.fliph(image),photon.flipv(image),image;case 4:return photon.flipv(image),image;case 5:{let rotated=rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));return photon.fliph(rotated),rotated}case 6:return rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));case 7:{let rotated=rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);return photon.fliph(rotated),rotated}case 8:return rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);default:return image}}import{createRequire}from"module";import*as path2 from"path";import{fileURLToPath}from"url";var require2=createRequire(import.meta.url),fs=require2("fs"),WASM_FILENAME="photon_rs_bg.wasm",photonModule=null,loadPromise=null;function pathOrNull(file){return typeof file=="string"?file:file instanceof URL?fileURLToPath(file):null}function getFallbackWasmPaths(){let execDir=path2.dirname(process.execPath);return[path2.join(execDir,WASM_FILENAME),path2.join(execDir,"photon",WASM_FILENAME),path2.join(process.cwd(),WASM_FILENAME)]}function patchPhotonWasmRead(){let originalReadFileSync=fs.readFileSync.bind(fs),fallbackPaths=getFallbackWasmPaths(),mutableFs=fs,patchedReadFileSync=((...args)=>{let[file,options]=args;if(pathOrNull(file)?.endsWith(WASM_FILENAME))try{return originalReadFileSync(...args)}catch(error){let err=error;if(err?.code&&err.code!=="ENOENT")throw error;for(let fallbackPath of fallbackPaths)if(fs.existsSync(fallbackPath))return options===void 0?originalReadFileSync(fallbackPath):originalReadFileSync(fallbackPath,options);throw error}return originalReadFileSync(...args)});try{mutableFs.readFileSync=patchedReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:patchedReadFileSync,writable:!0,configurable:!0})}return()=>{try{mutableFs.readFileSync=originalReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:originalReadFileSync,writable:!0,configurable:!0})}}}async function loadPhoton(){return photonModule||loadPromise||(loadPromise=(async()=>{let restoreReadFileSync=patchPhotonWasmRead();try{return photonModule=await import("@silvia-odwyer/photon-node"),photonModule}catch{return photonModule=null,photonModule}finally{restoreReadFileSync()}})(),loadPromise)}function encodePng(photon,bytes2){try{let rawImage=photon.PhotonImage.new_from_byteslice(bytes2),image=applyExifOrientation(photon,rawImage,bytes2);image!==rawImage&&rawImage.free();try{return new Uint8Array(image.get_bytes())}finally{image.free()}}catch{return null}}async function convertImageBytesToPng(bytes2){let photon=await loadPhoton();return photon?encodePng(photon,bytes2):null}async function convertToPng(base64Data,mimeType){if(mimeType==="image/png")return{data:base64Data,mimeType};let bytes2=new Uint8Array(Buffer.from(base64Data,"base64")),pngBytes=await convertImageBytesToPng(bytes2);return pngBytes?{data:Buffer.from(pngBytes).toString("base64"),mimeType:"image/png"}:null}async function loadPngTranscoder(){let photon=await loadPhoton();if(photon)return base64Data=>{let pngBytes=encodePng(photon,new Uint8Array(Buffer.from(base64Data,"base64")));return pngBytes?Buffer.from(pngBytes).toString("base64"):null}}var pngTranscoderLoad,pngTranscoderRegistered=!1;function ensurePngTranscoder(onRegistered){pngTranscoderRegistered||getCapabilities().images!=="kitty"||(pngTranscoderLoad??=loadPngTranscoder().then(transcoder=>transcoder?(setImageTranscoder(transcoder),pngTranscoderRegistered=!0,!0):!1),pngTranscoderLoad.then(registered2=>{registered2&&onRegistered()}))}import{Worker}from"node:worker_threads";var IMAGE_RESIZE_WORKER_RESPONSE_TYPE="pi:image-resize-response",DEFAULT_MAX_BYTES2=4.5*1024*1024,DEFAULT_OPTIONS={maxWidth:2e3,maxHeight:2e3,maxBytes:DEFAULT_MAX_BYTES2,jpegQuality:80};function encodeCandidate(buffer,mimeType){let data=Buffer.from(buffer).toString("base64");return{data,encodedSize:Buffer.byteLength(data,"utf-8"),mimeType}}async function resizeImageInProcess(inputBytes,mimeType,options){let opts={...DEFAULT_OPTIONS,...options},inputBase64Size=Math.ceil(inputBytes.byteLength/3)*4,photon=await loadPhoton();if(!photon)return null;let image;try{let tryEncodings=function(width,height,jpegQualities){let resized=photon.resize(image,width,height,photon.SamplingFilter.Lanczos3);try{let candidates=[encodeCandidate(resized.get_bytes(),"image/png")];for(let quality of jpegQualities)candidates.push(encodeCandidate(resized.get_bytes_jpeg(quality),"image/jpeg"));return candidates}finally{resized.free()}},rawImage=photon.PhotonImage.new_from_byteslice(inputBytes);image=applyExifOrientation(photon,rawImage,inputBytes),image!==rawImage&&rawImage.free();let originalWidth=image.get_width(),originalHeight=image.get_height(),format=mimeType.split("/")[1]??"png";if(originalWidth<=opts.maxWidth&&originalHeight<=opts.maxHeight&&inputBase64Size<opts.maxBytes)return{data:Buffer.from(inputBytes).toString("base64"),mimeType:mimeType||`image/${format}`,originalWidth,originalHeight,width:originalWidth,height:originalHeight,wasResized:!1};let targetWidth=originalWidth,targetHeight=originalHeight;targetWidth>opts.maxWidth&&(targetHeight=Math.round(targetHeight*opts.maxWidth/targetWidth),targetWidth=opts.maxWidth),targetHeight>opts.maxHeight&&(targetWidth=Math.round(targetWidth*opts.maxHeight/targetHeight),targetHeight=opts.maxHeight);let qualitySteps=Array.from(new Set([opts.jpegQuality,85,70,55,40])),currentWidth=targetWidth,currentHeight=targetHeight;for(;;){let[png,jpeg,...lowerQualityJpegs]=tryEncodings(currentWidth,currentHeight,qualitySteps),preferred=jpeg&&jpeg.encodedSize<png.encodedSize?[jpeg,png]:[png,jpeg];for(let candidate of[...preferred,...lowerQualityJpegs])if(candidate&&candidate.encodedSize<opts.maxBytes)return{data:candidate.data,mimeType:candidate.mimeType,originalWidth,originalHeight,width:currentWidth,height:currentHeight,wasResized:!0};if(currentWidth===1&&currentHeight===1)break;let nextWidth=currentWidth===1?1:Math.max(1,Math.floor(currentWidth*.75)),nextHeight=currentHeight===1?1:Math.max(1,Math.floor(currentHeight*.75));if(nextWidth===currentWidth&&nextHeight===currentHeight)break;currentWidth=nextWidth,currentHeight=nextHeight}return null}catch{return null}finally{image&&image.free()}}function toTransferableBytes(input2){return new Uint8Array(input2)}function isResizeImageWorkerResponse(value){return value!==null&&typeof value=="object"&&"type"in value&&value.type===IMAGE_RESIZE_WORKER_RESPONSE_TYPE}function createResizeWorker(workerSpecifier){return new Worker(workerSpecifier)}async function resizeImageInWorker(workerSpecifier,inputBytes,mimeType,options){let worker=createResizeWorker(workerSpecifier);try{let inputBytesForWorker=toTransferableBytes(inputBytes);return await new Promise((resolve18,reject)=>{let settled=!1,settle=result2=>{settled||(settled=!0,resolve18(result2))},fail=error=>{settled||(settled=!0,reject(error))};worker.on("message",message=>{isResizeImageWorkerResponse(message)&&("error"in message?fail(new Error(message.error)):settle(message.result))}),worker.once("error",fail),worker.once("exit",code=>{settled||fail(new Error(`Image resize worker exited with code ${code}`))}),worker.postMessage({inputBytes:inputBytesForWorker,mimeType,options},[inputBytesForWorker.buffer])})}finally{worker.terminate().catch(()=>{})}}async function resizeImage(inputBytes,mimeType,options){let isTypeScriptRuntime=import.meta.url.endsWith(".ts"),workerUrl=new URL(isTypeScriptRuntime?"./image-resize-worker.ts":"./image-resize-worker.js",import.meta.url);if(typeof process.versions.bun=="string")try{return await resizeImageInWorker("./src/utils/image-resize-worker.ts",inputBytes,mimeType,options)}catch{}try{return await resizeImageInWorker(workerUrl,inputBytes,mimeType,options)}catch{return resizeImageInProcess(inputBytes,mimeType,options)}}function formatDimensionNote(result2){if(!result2.wasResized)return;let scale=result2.originalWidth/result2.width;return`[Image: original ${result2.originalWidth}x${result2.originalHeight}, displayed at ${result2.width}x${result2.height}. Multiply coordinates by ${scale.toFixed(2)} to map to original image.]`}import{open}from"node:fs/promises";var IMAGE_TYPE_SNIFF_BYTES=4100,PNG_SIGNATURE=[137,80,78,71,13,10,26,10];function detectSupportedImageMimeType(buffer){return startsWith(buffer,[255,216,255])?buffer[3]===247?null:"image/jpeg":startsWith(buffer,PNG_SIGNATURE)?isPng(buffer)&&!isAnimatedPng(buffer)?"image/png":null:startsWithAscii(buffer,0,"GIF87a")||startsWithAscii(buffer,0,"GIF89a")?"image/gif":startsWithAscii(buffer,0,"RIFF")&&startsWithAscii(buffer,8,"WEBP")?"image/webp":startsWithAscii(buffer,0,"BM")&&isBmp(buffer)?"image/bmp":null}async function detectSupportedImageMimeTypeFromFile(filePath){let fileHandle=await open(filePath,"r");try{let buffer=Buffer.alloc(IMAGE_TYPE_SNIFF_BYTES),{bytesRead}=await fileHandle.read(buffer,0,IMAGE_TYPE_SNIFF_BYTES,0);return detectSupportedImageMimeType(buffer.subarray(0,bytesRead))}finally{await fileHandle.close()}}function isPng(buffer){return buffer.length>=16&&readUint32BE(buffer,PNG_SIGNATURE.length)===13&&startsWithAscii(buffer,12,"IHDR")}function isAnimatedPng(buffer){let offset=PNG_SIGNATURE.length;for(;offset+8<=buffer.length;){let chunkLength=readUint32BE(buffer,offset),chunkTypeOffset=offset+4;if(startsWithAscii(buffer,chunkTypeOffset,"acTL"))return!0;if(startsWithAscii(buffer,chunkTypeOffset,"IDAT"))return!1;let nextOffset=offset+8+chunkLength+4;if(nextOffset<=offset||nextOffset>buffer.length)return!1;offset=nextOffset}return!1}function isBmp(buffer){if(buffer.length<26)return!1;let declaredFileSize=readUint32LE(buffer,2),pixelDataOffset=readUint32LE(buffer,10),dibHeaderSize=readUint32LE(buffer,14);if(declaredFileSize!==0&&declaredFileSize<26||pixelDataOffset<14+dibHeaderSize||declaredFileSize!==0&&pixelDataOffset>=declaredFileSize)return!1;let colorPlanes,bitsPerPixel;if(dibHeaderSize===12)colorPlanes=readUint16LE(buffer,22),bitsPerPixel=readUint16LE(buffer,24);else if(dibHeaderSize>=40&&dibHeaderSize<=124){if(buffer.length<30)return!1;colorPlanes=readUint16LE(buffer,26),bitsPerPixel=readUint16LE(buffer,28)}else return!1;return colorPlanes===1&&[1,4,8,16,24,32].includes(bitsPerPixel)}function readUint16LE(buffer,offset){return(buffer[offset]??0)+((buffer[offset+1]??0)<<8)}function readUint32BE(buffer,offset){return(buffer[offset]??0)*16777216+((buffer[offset+1]??0)<<16)+((buffer[offset+2]??0)<<8)+(buffer[offset+3]??0)}function readUint32LE(buffer,offset){return(buffer[offset]??0)+((buffer[offset+1]??0)<<8)+((buffer[offset+2]??0)<<16)+(buffer[offset+3]??0)*16777216}function startsWith(buffer,bytes2){return buffer.length<bytes2.length?!1:bytes2.every((byte,index3)=>buffer[index3]===byte)}function startsWithAscii(buffer,offset,text){if(buffer.length<offset+text.length)return!1;for(let index3=0;index3<text.length;index3++)if(buffer[offset+index3]!==text.charCodeAt(index3))return!1;return!0}function getSourcePackageKey(identity){return JSON.stringify({source:identity.source,scope:identity.scope})}var BUILTIN_PATH_PREFIX="builtin:";function getSyntheticPathSource(path10){if(path10.startsWith(BUILTIN_PATH_PREFIX))return"builtin";if(path10.startsWith("<")&&path10.endsWith(">"))return path10.slice(1,-1).split(":")[0]||"temporary"}function isSyntheticPath(path10){return path10.startsWith(BUILTIN_PATH_PREFIX)||path10.startsWith("<")}function getResourcePathKey(path10){return isSyntheticPath(path10)?path10:getPathComparisonKey(canonicalizePath(path10))}function createSourceInfo(path10,metadata){return{path:path10,source:metadata.source,scope:metadata.scope,origin:metadata.origin,baseDir:metadata.baseDir,...metadata.changelogPath?{changelogPath:metadata.changelogPath}:{}}}function createSyntheticSourceInfo(path10,options){return{path:path10,source:options.source,scope:options.scope??"temporary",origin:options.origin??"top-level",baseDir:options.baseDir,...options.changelogPath?{changelogPath:options.changelogPath}:{}}}var import_ignore=__toESM(require_ignore(),1);import{createHash}from"node:crypto";import{chmodSync,existsSync as existsSync2,globSync,mkdirSync as mkdirSync2,readdirSync,readFileSync as readFileSync3,realpathSync,rmSync,statSync,writeFileSync as writeFileSync2}from"node:fs";import{homedir}from"node:os";import{basename,dirname as dirname4,isAbsolute,join as join5,relative,resolve,sep as sep2}from"node:path";var import_semver=__toESM(require_semver2(),1);var import_hosted_git_info=__toESM(require_lib(),1);function splitRef(url){let scpLikeMatch=url.match(/^git@([^:]+):(.+)$/);if(scpLikeMatch){let pathWithMaybeRef2=scpLikeMatch[2]??"",refSeparator2=pathWithMaybeRef2.indexOf("@");if(refSeparator2<0)return{repo:url};let repoPath2=pathWithMaybeRef2.slice(0,refSeparator2),ref2=pathWithMaybeRef2.slice(refSeparator2+1);return!repoPath2||!ref2?{repo:url}:{repo:`git@${scpLikeMatch[1]??""}:${repoPath2}`,ref:ref2}}if(url.includes("://"))try{let parsed=new URL(url),pathWithMaybeRef2=parsed.pathname.replace(/^\/+/,""),refSeparator2=pathWithMaybeRef2.indexOf("@");if(refSeparator2<0)return{repo:url};let repoPath2=pathWithMaybeRef2.slice(0,refSeparator2),ref2=pathWithMaybeRef2.slice(refSeparator2+1);return!repoPath2||!ref2?{repo:url}:(parsed.pathname=`/${repoPath2}`,{repo:parsed.toString().replace(/\/$/,""),ref:ref2})}catch{return{repo:url}}let slashIndex=url.indexOf("/");if(slashIndex<0)return{repo:url};let host=url.slice(0,slashIndex),pathWithMaybeRef=url.slice(slashIndex+1),refSeparator=pathWithMaybeRef.indexOf("@");if(refSeparator<0)return{repo:url};let repoPath=pathWithMaybeRef.slice(0,refSeparator),ref=pathWithMaybeRef.slice(refSeparator+1);return!repoPath||!ref?{repo:url}:{repo:`${host}/${repoPath}`,ref}}function decodeForValidation(value){try{return decodeURIComponent(value)}catch{return null}}function hasUnsafeGitInstallPart(value,allowSlash){let decoded=decodeForValidation(value);if(decoded===null)return!0;let candidates=[value,decoded];for(let candidate of candidates)if(candidate.includes("\0")||candidate.includes("\\")||candidate.startsWith("/")||!allowSlash&&candidate.includes("/")||candidate.split("/").includes(".."))return!0;return!1}function buildGitSource(args){if(args.path.startsWith("/"))return null;let normalizedPath=args.path.replace(/\.git$/,"").replace(/^\/+/,"");return!args.host||!normalizedPath||normalizedPath.split("/").length<2||hasUnsafeGitInstallPart(args.host,!1)||hasUnsafeGitInstallPart(normalizedPath,!0)?null:{type:"git",repo:args.repo,host:args.host,path:normalizedPath,ref:args.ref,pinned:!!args.ref}}function parseGenericGitUrl(url){let{repo:repoWithoutRef,ref}=splitRef(url),repo=repoWithoutRef,host="",path10="",scpLikeMatch=repoWithoutRef.match(/^git@([^:]+):(.+)$/);if(scpLikeMatch)host=scpLikeMatch[1]??"",path10=scpLikeMatch[2]??"";else if(repoWithoutRef.startsWith("https://")||repoWithoutRef.startsWith("http://")||repoWithoutRef.startsWith("ssh://")||repoWithoutRef.startsWith("git://"))try{let parsed=new URL(repoWithoutRef);host=parsed.hostname,path10=parsed.pathname.replace(/^\/+/,"")}catch{return null}else{let slashIndex=repoWithoutRef.indexOf("/");if(slashIndex<0||(host=repoWithoutRef.slice(0,slashIndex),path10=repoWithoutRef.slice(slashIndex+1),!host.includes(".")&&host!=="localhost"))return null;repo=`https://${repoWithoutRef}`}return buildGitSource({repo,host,path:path10,ref})}function parseGitUrl(source){let trimmed=source.trim(),hasGitPrefix=trimmed.startsWith("git:"),url=hasGitPrefix?trimmed.slice(4).trim():trimmed;if(!hasGitPrefix&&!/^(https?|ssh|git):\/\//i.test(url))return null;let split=splitRef(url),hostedCandidates=[split.ref?`${split.repo}#${split.ref}`:void 0,url].filter(value=>!!value);for(let candidate of hostedCandidates){let info=import_hosted_git_info.default.fromUrl(candidate);if(info){if(split.ref&&info.project?.includes("@"))continue;let useHttpsPrefix=!split.repo.startsWith("http://")&&!split.repo.startsWith("https://")&&!split.repo.startsWith("ssh://")&&!split.repo.startsWith("git://")&&!split.repo.startsWith("git@");return buildGitSource({repo:useHttpsPrefix?`https://${split.repo}`:split.repo,host:info.domain||"",path:`${info.user}/${info.project}`,ref:info.committish||split.ref||void 0})}}let httpsCandidates=[split.ref?`https://${split.repo}#${split.ref}`:void 0,`https://${url}`].filter(value=>!!value);for(let candidate of httpsCandidates){let info=import_hosted_git_info.default.fromUrl(candidate);if(info){if(split.ref&&info.project?.includes("@"))continue;return buildGitSource({repo:`https://${split.repo}`,host:info.domain||"",path:`${info.user}/${info.project}`,ref:info.committish||split.ref||void 0})}}return parseGenericGitUrl(url)}var stdoutTakeoverState;var rawStdoutWriteTail=Promise.resolve();function getRawStdoutWrite(){return stdoutTakeoverState?stdoutTakeoverState.rawStdoutWrite:process.stdout.write.bind(process.stdout)}async function writeRawStdoutChunk(text){for(;;)try{await new Promise((resolve18,reject)=>{try{getRawStdoutWrite()(text,error=>{error?reject(error):resolve18()})}catch(error){reject(error instanceof Error?error:new Error(String(error)))}});return}catch(error){let writeError=error instanceof Error?error:new Error(String(error)),code=writeError.code;if(code!=="ENOBUFS"&&code!=="EAGAIN"&&code!=="EWOULDBLOCK")throw writeError;await new Promise(resolve18=>setTimeout(resolve18,10))}}function takeOverStdout(){if(stdoutTakeoverState)return;let rawStdoutWrite=process.stdout.write.bind(process.stdout),rawStderrWrite=process.stderr.write.bind(process.stderr),originalStdoutWrite=process.stdout.write;process.stdout.write=((chunk,encodingOrCallback,callback)=>typeof encodingOrCallback=="function"?rawStderrWrite(String(chunk),encodingOrCallback):rawStderrWrite(String(chunk),callback)),stdoutTakeoverState={rawStdoutWrite,rawStderrWrite,originalStdoutWrite}}function restoreStdout(){stdoutTakeoverState&&(process.stdout.write=stdoutTakeoverState.originalStdoutWrite,stdoutTakeoverState=void 0)}function isStdoutTakenOver(){return stdoutTakeoverState!==void 0}function writeRawStdout(text){text.length!==0&&(rawStdoutWriteTail=rawStdoutWriteTail.then(()=>writeRawStdoutChunk(text)),rawStdoutWriteTail.catch(()=>{process.exit(1)}))}async function waitForRawStdoutBackpressure(){for(;;){let tail=rawStdoutWriteTail;if(await tail,tail===rawStdoutWriteTail)return}}async function flushRawStdout(){await waitForRawStdoutBackpressure(),await writeRawStdoutChunk("")}import{readFileSync as readFileSync2}from"node:fs";var RESOURCE_FIELDS=["extensions","skills","prompts","themes"];function isObject(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function readPiManifest(packageJsonPath){try{let pkg=JSON.parse(stripBom(readFileSync2(packageJsonPath,"utf-8")));if(!isObject(pkg)||!isObject(pkg.pi))return null;let manifest={};for(let field2 of RESOURCE_FIELDS){let entries=pkg.pi[field2];Array.isArray(entries)&&entries.every(entry=>typeof entry=="string")&&(manifest[field2]=entries)}let changelogPath=pkg.pi.changelogPath;return typeof changelogPath=="string"&&(manifest.changelogPath=changelogPath),manifest}catch{return null}}function getEnv(){if(process.platform!=="linux"||Object.keys(process.env).length>0)return process.env;try{let data=readFileSync3("/proc/self/environ","utf-8"),env={};for(let entry of data.split("\0")){let idx=entry.indexOf("=");idx>0&&(env[entry.slice(0,idx)]=entry.slice(idx+1))}return env}catch{return process.env}}var NETWORK_TIMEOUT_MS=1e4,UPDATE_CHECK_CONCURRENCY=4,GIT_UPDATE_CONCURRENCY=4;function isOfflineModeEnabled(){let value=process.env.PI_OFFLINE;return value?value==="1"||value.toLowerCase()==="true"||value.toLowerCase()==="yes":!1}function isExactNpmVersion(version2){return(0,import_semver.valid)(version2??"")!==null}function getNpmVersionRange(version2){return version2?(0,import_semver.validRange)(version2)??void 0:void 0}function resourcePrecedenceRank(m){return m.source==="builtin"?5:m.origin==="package"?4:(m.scope==="project"?0:2)+(m.source==="local"?0:1)}var RESOURCE_TYPES=["extensions","skills","prompts","themes"],FILE_PATTERNS={extensions:/\.(ts|js)$/,skills:/\.md$/,prompts:/\.md$/,themes:/\.json$/},IGNORE_FILE_NAMES=[".gitignore",".ignore",".fdignore"];function toPosixPath(p){return p.split(sep2).join("/")}function getHomeDir(){return process.env.HOME||homedir()}function getExtensionTempFolder(agentDir){let tempFolder=join5(agentDir,"tmp","extensions");return mkdirSync2(tempFolder,{recursive:!0,mode:448}),chmodSync(tempFolder,448),tempFolder}function prefixIgnorePattern(line,prefix){let trimmed=line.trim();if(!trimmed||trimmed.startsWith("#")&&!trimmed.startsWith("\\#"))return null;let pattern=line,negated=!1;pattern.startsWith("!")?(negated=!0,pattern=pattern.slice(1)):pattern.startsWith("\\!")&&(pattern=pattern.slice(1)),pattern.startsWith("/")&&(pattern=pattern.slice(1));let prefixed=prefix?`${prefix}${pattern}`:pattern;return negated?`!${prefixed}`:prefixed}function addIgnoreRules(ig,dir,rootDir){let relativeDir=relative(rootDir,dir),prefix=relativeDir?`${toPosixPath(relativeDir)}/`:"";for(let filename of IGNORE_FILE_NAMES){let ignorePath=join5(dir,filename);if(existsSync2(ignorePath))try{let patterns=readFileSync3(ignorePath,"utf-8").split(/\r?\n/).map(line=>prefixIgnorePattern(line,prefix)).filter(line=>!!line);patterns.length>0&&ig.add(patterns)}catch{}}}function isPattern(s){return s.startsWith("!")||s.startsWith("+")||s.startsWith("-")||s.includes("*")||s.includes("?")}function isOverridePattern(s){return s.startsWith("!")||s.startsWith("+")||s.startsWith("-")}function hasGlobPattern(s){return s.includes("*")||s.includes("?")}function expandPackageGlob(pattern,root){return globSync(pattern,{cwd:root}).map(match2=>resolve(root,match2)).filter(path10=>relative(root,path10).split(sep2).every(segment2=>segment2===".."||!segment2.startsWith("."))).sort((a,b)=>a<b?-1:a>b?1:0)}function splitPatterns(entries){let plain=[],patterns=[];for(let entry of entries)isPattern(entry)?patterns.push(entry):plain.push(entry);return{plain,patterns}}function collectFiles(dir,filePattern,skipNodeModules=!0,ignoreMatcher,rootDir){let files=[];if(!existsSync2(dir))return files;let root=rootDir??dir,ig=ignoreMatcher??(0,import_ignore.default)();addIgnoreRules(ig,dir,root);try{let entries=readdirSync(dir,{withFileTypes:!0});for(let entry of entries){if(entry.name.startsWith(".")||skipNodeModules&&entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath)),ignorePath=isDir?`${relPath}/`:relPath;ig.ignores(ignorePath)||(isDir?files.push(...collectFiles(fullPath,filePattern,skipNodeModules,ig,root)):isFile&&filePattern.test(entry.name)&&files.push(fullPath))}}catch{}return files}function collectSkillEntries(dir,mode,ignoreMatcher,rootDir){let entries=[];if(!existsSync2(dir))return entries;let root=rootDir??dir,ig=ignoreMatcher??(0,import_ignore.default)();addIgnoreRules(ig,dir,root);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name!=="SKILL.md")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath));if(isFile&&!ig.ignores(relPath))return entries.push(fullPath),entries}for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath));if(isFile&&entry.name.endsWith(".md")&&!ig.ignores(relPath)&&(mode==="pi"&&dir===root||mode==="agents"&&dir!==root)){entries.push(fullPath);continue}isDir&&(ig.ignores(`${relPath}/`)||entries.push(...collectSkillEntries(fullPath,mode,ig,root)))}}catch{}return entries}function collectAutoSkillEntries(dir,mode){return collectSkillEntries(dir,mode)}function findGitRepoRoot(startDir){let dir=resolve(startDir);for(;;){if(existsSync2(join5(dir,".git")))return dir;let parent=dirname4(dir);if(parent===dir)return null;dir=parent}}function collectAncestorAgentsSkillDirs(startDir){let skillDirs=[],resolvedStartDir=resolve(startDir),gitRepoRoot=findGitRepoRoot(resolvedStartDir),dir=resolvedStartDir;for(;skillDirs.push(join5(dir,".agents","skills")),!(gitRepoRoot&&dir===gitRepoRoot);){let parent=dirname4(dir);if(parent===dir)break;dir=parent}return skillDirs}function collectAutoPromptEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath));ig.ignores(relPath)||isFile&&entry.name.endsWith(".md")&&entries.push(fullPath)}}catch{}return entries}function collectAutoThemeEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath));ig.ignores(relPath)||isFile&&entry.name.endsWith(".json")&&entries.push(fullPath)}}catch{}return entries}function resolveExtensionEntries(dir){let packageJsonPath=join5(dir,"package.json");if(existsSync2(packageJsonPath)){let manifest=readPiManifest(packageJsonPath);if(manifest?.extensions?.length){let entries=[];for(let extPath of manifest.extensions){let resolvedExtPath=resolve(dir,extPath);existsSync2(resolvedExtPath)&&entries.push(resolvedExtPath)}if(entries.length>0)return entries}}let indexTs=join5(dir,"index.ts"),indexJs=join5(dir,"index.js");return existsSync2(indexTs)?[indexTs]:existsSync2(indexJs)?[indexJs]:null}function collectAutoExtensionEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let rootEntries=resolveExtensionEntries(dir);if(rootEntries)return rootEntries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath)),ignorePath=isDir?`${relPath}/`:relPath;if(!ig.ignores(ignorePath)){if(isFile&&(entry.name.endsWith(".ts")||entry.name.endsWith(".js")))entries.push(fullPath);else if(isDir){let resolvedEntries=resolveExtensionEntries(fullPath);resolvedEntries&&entries.push(...resolvedEntries)}}}}catch{}return entries}function collectResourceFiles(dir,resourceType){return resourceType==="skills"?collectSkillEntries(dir,"pi"):resourceType==="extensions"?collectAutoExtensionEntries(dir):collectFiles(dir,FILE_PATTERNS[resourceType])}function hasManifestResourceFields(manifest){return RESOURCE_TYPES.some(resourceType=>manifest[resourceType]!==void 0)}function isPathInside(parent,child){let relativePath=relative(parent,child);return relativePath!==""&&relativePath!==".."&&!relativePath.startsWith(`..${sep2}`)&&!isAbsolute(relativePath)}function resolvePackageChangelogPath(packageRoot,manifest){let changelogPath=manifest?.changelogPath??"CHANGELOG.md";if(!changelogPath)return;let resolvedPath=resolve(packageRoot,changelogPath);if(!existsSync2(resolvedPath))return;let canonicalPackageRoot=canonicalizePath(packageRoot),canonicalChangelogPath=canonicalizePath(resolvedPath);if(isPathInside(canonicalPackageRoot,canonicalChangelogPath))try{return statSync(resolvedPath).isFile()?resolvedPath:void 0}catch{return}}function matchesAnyPattern(filePath,patterns,baseDir){let rel=toPosixPath(relative(baseDir,filePath)),name=basename(filePath),filePathPosix=toPosixPath(filePath),isSkillFile=name==="SKILL.md",parentDir=isSkillFile?dirname4(filePath):void 0,parentRel=isSkillFile?toPosixPath(relative(baseDir,parentDir)):void 0,parentName=isSkillFile?basename(parentDir):void 0,parentDirPosix=isSkillFile?toPosixPath(parentDir):void 0;return patterns.some(pattern=>{let normalizedPattern=toPosixPath(normalizePath(pattern));return minimatch(rel,normalizedPattern)||minimatch(name,normalizedPattern)||minimatch(filePathPosix,normalizedPattern)?!0:isSkillFile?minimatch(parentRel,normalizedPattern)||minimatch(parentName,normalizedPattern)||minimatch(parentDirPosix,normalizedPattern):!1})}function normalizeExactPattern(pattern){let normalized=pattern.startsWith("./")||pattern.startsWith(".\\")?pattern.slice(2):pattern;return toPosixPath(normalizePath(normalized))}function matchesAnyExactPattern(filePath,patterns,baseDir){if(patterns.length===0)return!1;let rel=toPosixPath(relative(baseDir,filePath)),name=basename(filePath),filePathPosix=toPosixPath(filePath),isSkillFile=name==="SKILL.md",parentDir=isSkillFile?dirname4(filePath):void 0,parentRel=isSkillFile?toPosixPath(relative(baseDir,parentDir)):void 0,parentDirPosix=isSkillFile?toPosixPath(parentDir):void 0;return patterns.some(pattern=>{let normalized=normalizeExactPattern(pattern);return normalized===rel||normalized===filePathPosix?!0:isSkillFile?normalized===parentRel||normalized===parentDirPosix:!1})}function getOverridePatterns(entries){return entries.filter(pattern=>pattern.startsWith("!")||pattern.startsWith("+")||pattern.startsWith("-"))}function isEnabledByOverrides(filePath,patterns,baseDir){let overrides=getOverridePatterns(patterns),excludes=overrides.filter(pattern=>pattern.startsWith("!")).map(pattern=>pattern.slice(1)),forceIncludes=overrides.filter(pattern=>pattern.startsWith("+")).map(pattern=>pattern.slice(1)),forceExcludes=overrides.filter(pattern=>pattern.startsWith("-")).map(pattern=>pattern.slice(1)),enabled=!0;return excludes.length>0&&matchesAnyPattern(filePath,excludes,baseDir)&&(enabled=!1),forceIncludes.length>0&&matchesAnyExactPattern(filePath,forceIncludes,baseDir)&&(enabled=!0),forceExcludes.length>0&&matchesAnyExactPattern(filePath,forceExcludes,baseDir)&&(enabled=!1),enabled}function applyPatterns(allPaths,patterns,baseDir){let includes=[],excludes=[],forceIncludes=[],forceExcludes=[];for(let p of patterns)p.startsWith("+")?forceIncludes.push(p.slice(1)):p.startsWith("-")?forceExcludes.push(p.slice(1)):p.startsWith("!")?excludes.push(p.slice(1)):includes.push(p);let result2;if(includes.length===0?result2=[...allPaths]:result2=allPaths.filter(filePath=>matchesAnyPattern(filePath,includes,baseDir)),excludes.length>0&&(result2=result2.filter(filePath=>!matchesAnyPattern(filePath,excludes,baseDir))),forceIncludes.length>0)for(let filePath of allPaths)!result2.includes(filePath)&&matchesAnyExactPattern(filePath,forceIncludes,baseDir)&&result2.push(filePath);return forceExcludes.length>0&&(result2=result2.filter(filePath=>!matchesAnyExactPattern(filePath,forceExcludes,baseDir))),new Set(result2)}function applyAutoloadDisabledPatterns(allPaths,patterns,baseDir){let result2=new Map;for(let pattern of patterns){let target=pattern.slice(pattern.startsWith("+")||pattern.startsWith("-")||pattern.startsWith("!")?1:0),enabled=!pattern.startsWith("-")&&!pattern.startsWith("!"),exact=pattern.startsWith("+")||pattern.startsWith("-");for(let filePath of allPaths)(exact?matchesAnyExactPattern(filePath,[target],baseDir):matchesAnyPattern(filePath,[target],baseDir))&&result2.set(filePath,enabled)}return result2}var DefaultPackageManager=class{constructor(options){this.cwd=resolvePath(options.cwd),this.agentDir=resolvePath(options.agentDir),this.settingsManager=options.settingsManager,this.builtinExtensions=options.builtinExtensions??[]}setProgressCallback(callback){this.progressCallback=callback}addSourceToSettings(source,options){let scope=options?.local?"project":"user",currentPackages=(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[],normalizedSource=this.normalizePackageSourceForSettings(source,scope),matchIndex=currentPackages.findIndex(existing=>this.packageSourcesMatch(existing,source,scope));if(matchIndex!==-1){let existing=currentPackages[matchIndex];if(this.getPackageSourceString(existing)===normalizedSource)return!1;let nextPackages2=[...currentPackages];return nextPackages2[matchIndex]=typeof existing=="string"?normalizedSource:{...existing,source:normalizedSource},scope==="project"?this.settingsManager.setProjectPackages(nextPackages2):this.settingsManager.setPackages(nextPackages2),!0}let nextPackages=[...currentPackages,normalizedSource];return scope==="project"?this.settingsManager.setProjectPackages(nextPackages):this.settingsManager.setPackages(nextPackages),!0}removeSourceFromSettings(source,options){let scope=options?.local?"project":"user",currentPackages=(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[],nextPackages=currentPackages.filter(existing=>!this.packageSourcesMatch(existing,source,scope));return nextPackages.length!==currentPackages.length?(scope==="project"?this.settingsManager.setProjectPackages(nextPackages):this.settingsManager.setPackages(nextPackages),!0):!1}getInstalledPath(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm"){let path10=this.getNpmInstallPath(parsed,scope);return existsSync2(path10)?path10:void 0}if(parsed.type==="git"){let path10=this.getGitInstallPath(parsed,scope);return existsSync2(path10)?path10:void 0}if(parsed.type==="local"){let baseDir=this.getBaseDirForScope(scope),path10=this.resolvePathFromBase(parsed.path,baseDir);return existsSync2(path10)?path10:void 0}}emitProgress(event){this.progressCallback?.(event)}async withProgress(action,source,message,operation){this.emitProgress({type:"start",action,source,message});try{await operation(),this.emitProgress({type:"complete",action,source})}catch(error){let errorMessage7=error instanceof Error?error.message:String(error);throw this.emitProgress({type:"error",action,source,message:errorMessage7}),error}}async resolve(onMissing){let accumulator=this.createAccumulator(),globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),allPackages=[];for(let pkg of projectSettings.packages??[])allPackages.push({pkg,scope:"project"});for(let pkg of globalSettings.packages??[])allPackages.push({pkg,scope:"user"});let packageSources=this.dedupePackages(allPackages),installFailures=await this.resolvePackageSources(packageSources,accumulator,onMissing),globalBaseDir=this.agentDir,projectBaseDir=join5(this.cwd,CONFIG_DIR_NAME);for(let resourceType of RESOURCE_TYPES){let target=this.getTargetMap(accumulator,resourceType),globalEntries=globalSettings[resourceType]??[],projectEntries=projectSettings[resourceType]??[];this.resolveLocalEntries(projectEntries,resourceType,target,{source:"local",scope:"project",origin:"top-level"},projectBaseDir),this.resolveLocalEntries(globalEntries,resourceType,target,{source:"local",scope:"user",origin:"top-level"},globalBaseDir)}this.addAutoDiscoveredResources(accumulator,globalSettings,projectSettings,globalBaseDir,projectBaseDir);for(let name of this.builtinExtensions){let path10=`${BUILTIN_PATH_PREFIX}${name}`,projectEnabled=applyAutoloadDisabledPatterns([path10],getOverridePatterns(projectSettings.extensions??[]),projectBaseDir).get(path10);this.addResource(accumulator.extensions,path10,{source:"builtin",scope:projectEnabled===void 0?"user":"project",origin:"top-level"},projectEnabled??isEnabledByOverrides(path10,globalSettings.extensions??[],globalBaseDir))}return{...this.toResolvedPaths(accumulator),installFailures}}async resolveExtensionSources(sources,options){let accumulator=this.createAccumulator(),scope=options?.temporary?"temporary":options?.local?"project":"user";for(let source of sources.filter(source2=>source2.startsWith(BUILTIN_PATH_PREFIX)))this.addResource(accumulator.extensions,source,{source:"builtin",scope,origin:"top-level"},!0);let packageSources=sources.filter(source=>!source.startsWith(BUILTIN_PATH_PREFIX)).map(source=>({pkg:source,scope})),installFailures=await this.resolvePackageSources(packageSources,accumulator);return{...this.toResolvedPaths(accumulator),installFailures}}listConfiguredPackages(){let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),configuredPackages=[];for(let pkg of globalSettings.packages??[]){let source=typeof pkg=="string"?pkg:pkg.source;configuredPackages.push({source,scope:"user",filtered:typeof pkg=="object",installedPath:this.getInstalledPath(source,"user")})}for(let pkg of projectSettings.packages??[]){let source=typeof pkg=="string"?pkg:pkg.source;configuredPackages.push({source,scope:"project",filtered:typeof pkg=="object",installedPath:this.getInstalledPath(source,"project")})}return configuredPackages}async install(source,options){let parsed=this.parseSource(source),scope=options?.local?"project":"user";this.assertProjectTrustedForScope(scope),await this.withProgress("install",source,`Installing ${source}...`,async()=>{if(parsed.type==="npm"){await this.installNpm(parsed,scope,!1);return}if(parsed.type==="git"){await this.installGit(parsed,scope);return}if(parsed.type==="local"){let resolved=this.resolvePath(parsed.path);if(!existsSync2(resolved))throw new Error(`Path does not exist: ${resolved}`);return}throw new Error(`Unsupported install source: ${source}`)})}async installAndPersist(source,options){await this.install(source,options),this.addSourceToSettings(source,options)}async remove(source,options){let parsed=this.parseSource(source),scope=options?.local?"project":"user";this.assertProjectTrustedForScope(scope),await this.withProgress("remove",source,`Removing ${source}...`,async()=>{if(parsed.type==="npm"){await this.uninstallNpm(parsed,scope);return}if(parsed.type==="git"){await this.removeGit(parsed,scope);return}if(parsed.type!=="local")throw new Error(`Unsupported remove source: ${source}`)})}async removeAndPersist(source,options){return await this.remove(source,options),this.removeSourceFromSettings(source,options)}async update(source){let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),identity=source?this.getPackageIdentity(source):void 0,matched=!1,updateSources=[];for(let pkg of globalSettings.packages??[]){let sourceStr=typeof pkg=="string"?pkg:pkg.source;identity&&this.getPackageIdentity(sourceStr,"user")!==identity||(matched=!0,updateSources.push({source:sourceStr,scope:"user"}))}for(let pkg of projectSettings.packages??[]){let sourceStr=typeof pkg=="string"?pkg:pkg.source;identity&&this.getPackageIdentity(sourceStr,"project")!==identity||(matched=!0,updateSources.push({source:sourceStr,scope:"project"}))}if(source&&!matched)throw new Error(this.buildNoMatchingPackageMessage(source,[...globalSettings.packages??[],...projectSettings.packages??[]]));await this.updateConfiguredSources(updateSources)}async updateConfiguredSources(sources){if(isOfflineModeEnabled()||sources.length===0)return;let npmCandidates=[],gitCandidates=[];for(let entry of sources){let parsed=this.parseSource(entry.source);parsed.type==="npm"?parsed.pinned||npmCandidates.push({...entry,parsed}):parsed.type==="git"&&gitCandidates.push({...entry,parsed})}let npmCheckTasks=npmCandidates.map(entry=>async()=>{let check=await this.shouldUpdateNpmSource(entry.parsed,entry.scope);return{entry:{...entry,installedVersion:check.installedVersion,targetVersion:check.targetVersion},shouldUpdate:check.shouldUpdate}}),npmCheckResults=await this.runWithConcurrency(npmCheckTasks,UPDATE_CHECK_CONCURRENCY),userNpmUpdates=[],projectNpmUpdates=[];for(let result2 of npmCheckResults)result2.shouldUpdate&&(result2.entry.scope==="user"?userNpmUpdates.push(result2.entry):projectNpmUpdates.push(result2.entry));let tasks=[];if(userNpmUpdates.length>0&&tasks.push(this.updateNpmBatch(userNpmUpdates,"user")),projectNpmUpdates.length>0&&tasks.push(this.updateNpmBatch(projectNpmUpdates,"project")),gitCandidates.length>0){let gitTasks=gitCandidates.map(entry=>async()=>this.withProgress("update",entry.source,`Updating ${entry.source}...`,async()=>{await this.updateGit(entry.parsed,entry.scope)}));tasks.push(this.runWithConcurrency(gitTasks,GIT_UPDATE_CONCURRENCY).then(()=>{}))}await Promise.all(tasks)}async shouldUpdateNpmSource(source,scope){let installedPath=this.getManagedNpmInstallPath(source,scope),installedVersion=existsSync2(installedPath)?this.getInstalledNpmVersion(installedPath):void 0;if(!installedVersion)return{shouldUpdate:!0};try{let targetVersion=await this.getLatestNpmVersion(source.version?source.spec:source.name,source.range);return{shouldUpdate:(0,import_semver.gt)(targetVersion,installedVersion),installedVersion,targetVersion}}catch{return{shouldUpdate:!0,installedVersion}}}async updateNpmBatch(sources,scope){if(sources.length===0)return;let sourceLabel=sources.length===1?sources[0].source:`${scope} npm packages`,message=sources.length===1?`Updating ${sources[0].source}...`:`Updating ${scope} npm packages...`,specs=sources.map(entry=>entry.parsed.version?entry.parsed.spec:`${entry.parsed.name}@latest`);await this.withProgress("update",sourceLabel,message,async()=>{await this.installNpmBatch(specs,scope)}),this.reportUnchangedNpmUpdates(sources,scope)}reportUnchangedNpmUpdates(sources,scope){for(let entry of sources){if(!entry.installedVersion||!entry.targetVersion)continue;let installedPath=this.getManagedNpmInstallPath(entry.parsed,scope),versionAfter=this.getInstalledNpmVersion(installedPath);versionAfter===entry.installedVersion&&this.emitProgress({type:"progress",action:"update",source:entry.source,message:`${entry.source} is still ${versionAfter} (registry reports ${entry.targetVersion}); npm registry metadata may be stale, try again in a few minutes`})}}async installNpmBatch(specs,scope){let installRoot=this.getNpmInstallRoot(scope,!1);this.ensureNpmProject(installRoot),await this.runNpmCommand(this.getNpmInstallArgs(specs,installRoot))}async checkForAvailableUpdates(){if(isOfflineModeEnabled())return[];let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),allPackages=[];for(let pkg of projectSettings.packages??[])allPackages.push({pkg,scope:"project"});for(let pkg of globalSettings.packages??[])allPackages.push({pkg,scope:"user"});let checks=this.dedupePackages(allPackages).filter(entry=>entry.scope!=="temporary").map(entry=>async()=>{let source=typeof entry.pkg=="string"?entry.pkg:entry.pkg.source,parsed=this.parseSource(source);if(parsed.type==="local"||parsed.pinned)return;if(parsed.type==="npm"){let installedPath2=this.getNpmInstallPath(parsed,entry.scope);return!existsSync2(installedPath2)||!await this.npmHasAvailableUpdate(parsed,installedPath2)?void 0:{source,displayName:parsed.name,type:"npm",scope:entry.scope}}let installedPath=this.getGitInstallPath(parsed,entry.scope);if(!(!existsSync2(installedPath)||!await this.gitHasAvailableUpdate(installedPath)))return{source,displayName:`${parsed.host}/${parsed.path}`,type:"git",scope:entry.scope}});return(await this.runWithConcurrency(checks,UPDATE_CHECK_CONCURRENCY)).filter(result2=>result2!==void 0)}async resolvePackageSources(sources,accumulator,onMissing){let installFailures=[];for(let{pkg,scope}of sources){let sourceStr=typeof pkg=="string"?pkg:pkg.source,filter2=typeof pkg=="object"?pkg:void 0,deltaBase=this.findAutoloadDeltaBase(pkg,scope,sources),resolvedSource=deltaBase?.source??sourceStr,resolvedScope=deltaBase?.scope??scope,parsed=this.parseSource(resolvedSource),metadata={source:sourceStr,scope,origin:"package"};if(parsed.type==="local"){let baseDir=this.getBaseDirForScope(resolvedScope);this.resolveLocalExtensionSource(parsed,accumulator,filter2,metadata,baseDir);continue}let installMissing=async()=>{if(isOfflineModeEnabled())return!1;if(onMissing){let action=await onMissing(resolvedSource);if(action==="skip")return!1;if(action==="error")throw new Error(`Missing source: ${resolvedSource}`)}try{return await this.installParsedSource(parsed,resolvedScope),!0}catch(error){return installFailures.push({source:resolvedSource,scope:resolvedScope,message:error instanceof Error?error.message:String(error)}),!1}};if(parsed.type==="npm"){let installedPath=this.getNpmInstallPath(parsed,resolvedScope),needsInstall=!existsSync2(installedPath)||!await this.installedNpmMatchesConfiguredVersion(parsed,installedPath);if(!needsInstall&&resolvedScope==="temporary"&&!parsed.pinned&&await this.npmHasAvailableUpdate(parsed,installedPath)){let spec=parsed.version?parsed.spec:`${parsed.name}@latest`;try{await this.installNpm({...parsed,spec},resolvedScope,!0)}catch{}}if(needsInstall){if(!await installMissing())continue;installedPath=this.getNpmInstallPath(parsed,resolvedScope)}metadata.baseDir=installedPath,metadata.packageRoot=installedPath,this.collectPackageResources(installedPath,accumulator,filter2,metadata);continue}if(parsed.type==="git"){let installedPath=this.getGitInstallPath(parsed,resolvedScope);if(existsSync2(installedPath))resolvedScope==="temporary"&&!isOfflineModeEnabled()&&await this.refreshTemporaryGitSource(parsed,resolvedSource,installedPath);else if(!await installMissing())continue;metadata.baseDir=installedPath,metadata.packageRoot=installedPath,this.collectPackageResources(installedPath,accumulator,filter2,metadata)}}return installFailures}findAutoloadDeltaBase(pkg,scope,sources){if(scope!=="project"||typeof pkg!="object"||pkg.autoload!==!1)return;let identity=this.getPackageIdentity(pkg.source,scope),userEntry=sources.find(entry=>entry.scope==="user"&&this.getPackageIdentity(this.getPackageSourceString(entry.pkg),"user")===identity);return userEntry?{source:this.getPackageSourceString(userEntry.pkg),scope:"user"}:void 0}resolveLocalExtensionSource(source,accumulator,filter2,metadata,baseDir){let resolved=this.resolvePathFromBase(source.path,baseDir);if(existsSync2(resolved))try{let stats=statSync(resolved);if(stats.isFile()){metadata.baseDir=dirname4(resolved),this.addResource(accumulator.extensions,resolved,metadata,!0);return}stats.isDirectory()&&(metadata.baseDir=resolved,metadata.packageRoot=resolved,this.collectPackageResources(resolved,accumulator,filter2,metadata)||this.addResource(accumulator.extensions,resolved,metadata,!0))}catch{return}}async installParsedSource(parsed,scope){if(parsed.type==="npm"){await this.installNpm(parsed,scope,scope==="temporary");return}if(parsed.type==="git"){await this.installGit(parsed,scope);return}}getPackageSourceString(pkg){return typeof pkg=="string"?pkg:pkg.source}getSourceMatchKeyForInput(source){let parsed=this.parseSource(source);return parsed.type==="npm"?`npm:${parsed.name}`:parsed.type==="git"?`git:${parsed.host}/${parsed.path}`:`local:${getPathComparisonKey(this.resolvePath(parsed.path))}`}getSourceMatchKeyForSettings(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm")return`npm:${parsed.name}`;if(parsed.type==="git")return`git:${parsed.host}/${parsed.path}`;let baseDir=this.getBaseDirForScope(scope);return`local:${getPathComparisonKey(this.resolvePathFromBase(parsed.path,baseDir))}`}buildNoMatchingPackageMessage(source,configuredPackages){let suggestion=this.findSuggestedConfiguredSource(source,configuredPackages);return suggestion?`No matching package found for ${source}. Did you mean ${suggestion}?`:`No matching package found for ${source}`}findSuggestedConfiguredSource(source,configuredPackages){let trimmedSource=source.trim(),suggestions=new Set;for(let pkg of configuredPackages){let sourceStr=this.getPackageSourceString(pkg),parsed=this.parseSource(sourceStr);if(parsed.type==="npm"){(trimmedSource===parsed.name||trimmedSource===parsed.spec)&&suggestions.add(sourceStr);continue}if(parsed.type==="git"){let shorthand=`${parsed.host}/${parsed.path}`,shorthandWithRef=parsed.ref?`${shorthand}@${parsed.ref}`:void 0;(trimmedSource===shorthand||shorthandWithRef&&trimmedSource===shorthandWithRef)&&suggestions.add(sourceStr)}}return suggestions.values().next().value}packageSourcesMatch(existing,inputSource,scope){let left=this.getSourceMatchKeyForSettings(this.getPackageSourceString(existing),scope),right=this.getSourceMatchKeyForInput(inputSource);return left===right}normalizePackageSourceForSettings(source,scope){let parsed=this.parseSource(source);if(parsed.type!=="local")return source;let baseDir=this.getBaseDirForScope(scope),resolved=this.resolvePath(parsed.path);return relative(baseDir,resolved)||"."}parseSource(source){if(source.startsWith("npm:")){let spec=source.slice(4).trim(),{name,version:version2}=this.parseNpmSpec(spec);return{type:"npm",spec,name,version:version2,range:getNpmVersionRange(version2),pinned:isExactNpmVersion(version2)}}if(isLocalPath(source))return{type:"local",path:source};let gitParsed=parseGitUrl(source);return gitParsed||{type:"local",path:source}}async installedNpmMatchesConfiguredVersion(source,installedPath){let installedVersion=this.getInstalledNpmVersion(installedPath);return installedVersion?source.range?(0,import_semver.satisfies)(installedVersion,source.range):!0:!1}async npmHasAvailableUpdate(source,installedPath){if(isOfflineModeEnabled())return!1;let installedVersion=this.getInstalledNpmVersion(installedPath);if(!installedVersion)return!1;try{let targetVersion=await this.getLatestNpmVersion(source.version?source.spec:source.name,source.range);return(0,import_semver.gt)(targetVersion,installedVersion)}catch{return!1}}getInstalledNpmVersion(installedPath){let packageJsonPath=join5(installedPath,"package.json");if(existsSync2(packageJsonPath))try{let content=readFileSync3(packageJsonPath,"utf-8");return JSON.parse(stripBom(content)).version}catch{return}}async getLatestNpmVersion(packageSpec,range2){let npmCommand=this.getNpmCommand(),raw=(await this.runCommandCapture(npmCommand.command,[...npmCommand.args,"view",packageSpec,"version","--json"],{cwd:this.cwd,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!raw)throw new Error("Empty response from npm view");let parsed=JSON.parse(raw);if(typeof parsed=="string")return parsed;if(Array.isArray(parsed)){let versions=parsed.filter(value=>typeof value=="string"&&value.length>0),latest=range2?(0,import_semver.maxSatisfying)(versions,range2):[...versions].sort(import_semver.rcompare)[0];if(latest)return latest}throw new Error("Unexpected response from npm view")}async gitHasAvailableUpdate(installedPath){if(isOfflineModeEnabled())return!1;try{let localHead=await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),remoteHead=await this.getRemoteGitHead(installedPath);return localHead.trim()!==remoteHead.trim()}catch{return!1}}async getRemoteGitHead(installedPath){let upstreamRef=await this.getGitUpstreamRef(installedPath);if(upstreamRef){let match3=(await this.runGitRemoteCommand(installedPath,["ls-remote","origin",upstreamRef])).match(/^([0-9a-f]{40})\s+/m);if(match3?.[1])return match3[1]}let match2=(await this.runGitRemoteCommand(installedPath,["ls-remote","origin","HEAD"])).match(/^([0-9a-f]{40})\s+HEAD$/m);if(!match2?.[1])throw new Error("Failed to determine remote HEAD");return match2[1]}async getLocalGitUpdateTarget(installedPath){try{let trimmedUpstream=(await this.runCommandCapture("git",["rev-parse","--abbrev-ref","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!trimmedUpstream.startsWith("origin/"))throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);let branch=trimmedUpstream.slice(7);if(!branch)throw new Error("Missing upstream branch name");return{ref:"@{upstream}",head:await this.runCommandCapture("git",["rev-parse","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),fetchArgs:["fetch","--prune","--no-tags","origin",`+refs/heads/${branch}:refs/remotes/origin/${branch}`]}}catch{await this.runCommand("git",["remote","set-head","origin","-a"],{cwd:installedPath}).catch(()=>{});let head=await this.runCommandCapture("git",["rev-parse","origin/HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),branch=(await this.runCommandCapture("git",["symbolic-ref","refs/remotes/origin/HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}).catch(()=>"")).trim().replace(/^refs\/remotes\/origin\//,"");return branch?{ref:"origin/HEAD",head,fetchArgs:["fetch","--prune","--no-tags","origin",`+refs/heads/${branch}:refs/remotes/origin/${branch}`]}:{ref:"origin/HEAD",head,fetchArgs:["fetch","--prune","--no-tags","origin","+HEAD:refs/remotes/origin/HEAD"]}}}async getGitUpstreamRef(installedPath){try{let trimmed=(await this.runCommandCapture("git",["rev-parse","--abbrev-ref","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!trimmed.startsWith("origin/"))return;let branch=trimmed.slice(7);return branch?`refs/heads/${branch}`:void 0}catch{return}}runGitRemoteCommand(installedPath,args){return this.runCommandCapture("git",args,{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS,env:{GIT_TERMINAL_PROMPT:"0"}})}async runWithConcurrency(tasks,limit){if(tasks.length===0)return[];let results=new Array(tasks.length),nextIndex=0,workerCount=Math.max(1,Math.min(limit,tasks.length)),worker=async()=>{for(;;){let index3=nextIndex;if(nextIndex+=1,index3>=tasks.length)return;results[index3]=await tasks[index3]()}};return await Promise.all(Array.from({length:workerCount},()=>worker())),results}getPackageIdentity(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm")return`npm:${parsed.name}`;if(parsed.type==="git")return`git:${parsed.host}/${parsed.path}`;if(scope){let baseDir=this.getBaseDirForScope(scope);return`local:${getPathComparisonKey(this.resolvePathFromBase(parsed.path,baseDir))}`}return`local:${getPathComparisonKey(this.resolvePath(parsed.path))}`}dedupePackages(packages){let result2=[],seen=new Map;for(let entry of packages){let identity=this.getPackageIdentity(this.getPackageSourceString(entry.pkg),entry.scope),index3=seen.get(identity);if(index3===void 0){seen.set(identity,result2.length),result2.push(entry);continue}let existing=result2[index3];existing?.scope==="project"&&entry.scope==="user"?typeof existing.pkg=="object"&&existing.pkg.autoload===!1&&result2.push(entry):entry.scope==="project"&&(result2[index3]=entry)}return result2}parseNpmSpec(spec){let match2=spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/);if(!match2)return{name:spec};let name=match2[1]??spec,version2=match2[2];return{name,version:version2}}assertProjectTrustedForScope(scope){if(scope==="project"&&!this.settingsManager.isProjectTrusted())throw new Error("Project is not trusted; refusing to access project package storage")}getNpmCommand(){let configuredCommand=this.settingsManager.getNpmCommand();if(!configuredCommand||configuredCommand.length===0)return{command:"npm",args:[]};let[command,...args]=configuredCommand;if(!command)throw new Error("Invalid npmCommand: first array entry must be a non-empty command");return{command,args}}getPackageManagerName(){let npmCommand=this.getNpmCommand(),normalizeCommandName=command=>basename(command).replace(/\.(cmd|exe)$/i,""),supportedPackageManagers=new Set(["npm","pnpm","bun"]),directCommand=normalizeCommandName(npmCommand.command),separatorIndex=npmCommand.args.lastIndexOf("--");if(separatorIndex>=0){let wrappedCommand=npmCommand.args[separatorIndex+1];return wrappedCommand?normalizeCommandName(wrappedCommand):directCommand}if(supportedPackageManagers.has(directCommand))return directCommand;let wrappedPackageManagers=[...new Set(npmCommand.args.map(normalizeCommandName).filter(command=>supportedPackageManagers.has(command)))];if(wrappedPackageManagers.length>1)throw new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(", ")}`);return wrappedPackageManagers[0]??directCommand}async runNpmCommand(args,options){let npmCommand=this.getNpmCommand();await this.runCommand(npmCommand.command,[...npmCommand.args,...args],options)}getGitDependencyInstallArgs(){switch(this.getPackageManagerName()){case"bun":return["install","--omit=dev","--omit=peer"];case"pnpm":return["install","--prod","--config.auto-install-peers=false","--config.strict-peer-dependencies=false","--config.strict-dep-builds=false"];case"npm":return["install","--omit=dev","--legacy-peer-deps","--no-audit","--no-fund"];default:return["install"]}}runNpmCommandSync(args){let npmCommand=this.getNpmCommand();return this.runCommandSync(npmCommand.command,[...npmCommand.args,...args])}getNpmInstallArgs(specs,root){let installRoot=existsSync2(root)?realpathSync(root):root,packageManagerName=this.getPackageManagerName();return packageManagerName==="bun"?["install",...specs,"--cwd",installRoot,"--omit=peer"]:packageManagerName==="pnpm"?["install",...specs,"--prefix",installRoot,"--config.auto-install-peers=false","--config.strict-peer-dependencies=false","--config.strict-dep-builds=false"]:["install",...specs,"--prefix",installRoot,"--legacy-peer-deps","--no-audit","--no-fund"]}async installNpm(source,scope,temporary){let installRoot=this.getNpmInstallRoot(scope,temporary);this.ensureNpmProject(installRoot),await this.runNpmCommand(this.getNpmInstallArgs([source.spec],installRoot))}async uninstallNpm(source,scope){let root=this.getNpmInstallRoot(scope,!1);if(!existsSync2(root))return;let installRoot=realpathSync(root),packageManagerName=this.getPackageManagerName();if(packageManagerName==="bun"){await this.runNpmCommand(["uninstall",source.name,"--cwd",installRoot]);return}let args=["uninstall",source.name,"--prefix",installRoot];packageManagerName!=="pnpm"&&args.push("--legacy-peer-deps","--no-audit","--no-fund"),await this.runNpmCommand(args)}async installGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);if(existsSync2(targetDir)){if(source.ref){await this.ensureGitRef(targetDir,["fetch","origin",source.ref],"FETCH_HEAD");return}let target=await this.getLocalGitUpdateTarget(targetDir);await this.ensureGitRef(targetDir,target.fetchArgs,target.ref);return}let gitRoot=this.getGitInstallRoot(scope);gitRoot&&this.ensureGitIgnore(gitRoot),mkdirSync2(dirname4(targetDir),{recursive:!0}),rmSync(this.getGitUpdateMarkerPath(targetDir),{force:!0});try{await this.runCommand("git",["clone",source.repo,targetDir]),source.ref&&await this.runCommand("git",["checkout",source.ref],{cwd:targetDir});let packageJsonPath=join5(targetDir,"package.json");existsSync2(packageJsonPath)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir})}catch(error){throw rmSync(targetDir,{recursive:!0,force:!0}),this.pruneEmptyGitParents(targetDir,gitRoot),error}}async updateGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);if(!existsSync2(targetDir)){await this.installGit(source,scope);return}if(source.ref){await this.ensureGitRef(targetDir,["fetch","origin",source.ref],"FETCH_HEAD");return}let target=await this.getLocalGitUpdateTarget(targetDir);await this.ensureGitRef(targetDir,target.fetchArgs,target.ref)}hasMissingGitDependencies(targetDir){let packageJsonPath=join5(targetDir,"package.json");if(!existsSync2(packageJsonPath))return!1;try{let manifest=JSON.parse(stripBom(readFileSync3(packageJsonPath,"utf-8")));if(!manifest.dependencies||typeof manifest.dependencies!="object"||Array.isArray(manifest.dependencies))return!1;let nodeModulesDir=resolve(targetDir,"node_modules");return Object.keys(manifest.dependencies).some(name=>{let dependencyPath=resolve(nodeModulesDir,name);return dependencyPath.startsWith(`${nodeModulesDir}${sep2}`)?!existsSync2(dependencyPath):!1})}catch{return!1}}async repairMissingGitDependencies(targetDir){this.hasMissingGitDependencies(targetDir)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir})}getGitUpdateMarkerPath(targetDir){return join5(dirname4(targetDir),`.${basename(targetDir)}.pi-update-incomplete`)}async cleanAndInstallGitDependencies(targetDir,markerPath){let cleaned=!0;try{await this.runCommand("git",["clean","-fdx"],{cwd:targetDir})}catch(error){cleaned=!1;let reason=error instanceof Error?error.message:String(error);this.emitProgress({type:"progress",action:"update",source:targetDir,message:`Could not remove all untracked files in ${targetDir} (${reason}). Files may be in use by another pi session; close it and run the update again.`})}let packageJsonPath=join5(targetDir,"package.json");existsSync2(packageJsonPath)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir}),cleaned&&rmSync(markerPath,{force:!0})}async ensureGitRef(targetDir,fetchArgs,ref){await this.runCommand("git",fetchArgs,{cwd:targetDir});let localHead=await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:targetDir,timeoutMs:NETWORK_TIMEOUT_MS}),commitRef=`${ref}^{commit}`,targetHead=await this.runCommandCapture("git",["rev-parse",commitRef],{cwd:targetDir,timeoutMs:NETWORK_TIMEOUT_MS}),markerPath=this.getGitUpdateMarkerPath(targetDir);if(localHead.trim()===targetHead.trim()){existsSync2(markerPath)?await this.cleanAndInstallGitDependencies(targetDir,markerPath):await this.repairMissingGitDependencies(targetDir);return}writeFileSync2(markerPath,"","utf-8"),await this.runCommand("git",["reset","--hard",commitRef],{cwd:targetDir}),await this.cleanAndInstallGitDependencies(targetDir,markerPath)}async refreshTemporaryGitSource(source,sourceStr,installedPath){if(!isOfflineModeEnabled())try{if(source.ref&&/^[0-9a-f]{7,64}$/i.test(source.ref)&&(await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim().toLowerCase().startsWith(source.ref.toLowerCase()))return;await this.withProgress("pull",sourceStr,`Refreshing ${sourceStr}...`,async()=>{await this.updateGit(source,"temporary")})}catch{}}async removeGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);rmSync(targetDir,{recursive:!0,force:!0}),rmSync(this.getGitUpdateMarkerPath(targetDir),{force:!0}),this.pruneEmptyGitParents(targetDir,this.getGitInstallRoot(scope))}pruneEmptyGitParents(targetDir,installRoot){if(!installRoot)return;let resolvedRoot=resolve(installRoot),current=dirname4(targetDir);for(;current.startsWith(resolvedRoot)&&current!==resolvedRoot;){if(!existsSync2(current)){current=dirname4(current);continue}if(readdirSync(current).length>0)break;try{rmSync(current,{recursive:!0,force:!0})}catch{break}current=dirname4(current)}}ensureNpmProject(installRoot){existsSync2(installRoot)||mkdirSync2(installRoot,{recursive:!0}),markPathIgnoredByCloudSync(installRoot),this.ensureGitIgnore(installRoot);let packageJsonPath=join5(installRoot,"package.json");existsSync2(packageJsonPath)||writeFileSync2(packageJsonPath,JSON.stringify({name:"pi-extensions",private:!0},null,2),"utf-8")}ensureGitIgnore(dir){existsSync2(dir)||mkdirSync2(dir,{recursive:!0});let ignorePath=join5(dir,".gitignore");existsSync2(ignorePath)||writeFileSync2(ignorePath,`*
490
+ `):void 0}getRegisteredProviderConfig(providerId){return this.extensionProviders.get(providerId)}getRegisteredProviderIds(){return[...new Set([...this.extensionProviders.keys(),...this.nativeExtensionProviders.keys()])]}getRegisteredNativeProvider(providerId){return this.nativeExtensionProviders.get(providerId)}getCompatibilityRequestConfig(model){return resolveCompatibilityRequestConfig(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider))}isUsingOAuth(providerId){return this.snapshot.auth.get(providerId)?.type==="oauth"}isUsingSubscription(providerId){return this.isUsingOAuth(providerId)&&this.models.getProvider(providerId)?.auth.oauth?.isSubscription===!0}hasConfiguredAuth(providerId){return this.snapshot.configuredProviders.has(providerId)}async getAuth(providerOrModel,overrides={}){if(typeof providerOrModel=="string")return this.models.getAuth(providerOrModel,overrides);let resolution=await this.models.getAuth(providerOrModel,overrides);if(!resolution)return;let configuredHeaders2=resolveConfiguredModelHeaders(providerOrModel,this.config.getProvider(providerOrModel.provider),this.extensionProviders.get(providerOrModel.provider),{...resolution.env??{},...overrides.env??{}});return{...resolution,auth:{...resolution.auth,headers:mergeHeaders(resolution.auth.headers,configuredHeaders2)}}}enqueueCredentialOperation(providerId,signal,task){let previous=this.credentialOperations.get(providerId)??Promise.resolve(),markStarted,started=new Promise(resolve18=>{markStarted=resolve18}),operation=(async()=>(await previous.catch(()=>{}),signal.throwIfAborted(),markStarted?.(),task()))(),tail=operation.catch(()=>{});return this.credentialOperations.set(providerId,tail),tail.then(()=>{this.credentialOperations.get(providerId)===tail&&this.credentialOperations.delete(providerId)}),raceWithAbortSignal(started,signal).then(()=>operation)}async synchronizeCredentialState(providerId,operation,credential,signal){try{signal.throwIfAborted(),this.recomposeProvider(providerId);let compositionError=this.compositionErrors.get(providerId);if(compositionError)throw new Error(compositionError);let result2=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result2.aborted&&signal.throwIfAborted();let refreshError=result2.errors.get(providerId);if(refreshError)throw refreshError;this.updateModelSnapshot(),await this.refreshProviderAvailability(providerId,signal)}catch(cause){throw new CredentialSynchronizationError(providerId,operation,credential,{cause})}}setRuntimeApiKey(providerId,apiKey,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.setRuntimeApiKey(providerId,apiKey),await this.synchronizeCredentialState(providerId,"setRuntimeApiKey",{type:"api_key",key:apiKey},signal)})}removeRuntimeApiKey(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{this.credentials.removeRuntimeApiKey(providerId),await this.synchronizeCredentialState(providerId,"removeRuntimeApiKey",void 0,signal)})}listCredentials(options){return this.credentials.list(options)}getProviderAuthStatus(providerId){if(this.credentials.hasRuntimeApiKey(providerId))return{configured:!0,source:"runtime"};if(this.snapshot.storedProviders.has(providerId))return{configured:!0,source:"stored"};let configured=configuredRequestAuthStatus(this.config.getProvider(providerId),this.extensionProviders.get(providerId));if(configured)return configured;let check=this.snapshot.auth.get(providerId);return check?{configured:!0,source:"environment",label:check.source}:{configured:!1}}async prepareRequest(model,options){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",`Unknown provider: ${model.provider}`);let resolution=await this.getAuth(model,{apiKey:options?.apiKey,env:options?.env,signal:options?.signal});if(!resolution)throw new ModelsError("auth",`Provider is not configured: ${model.provider}`);let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,requestModel=resolution.auth.baseUrl?{...model,baseUrl:resolution.auth.baseUrl}:model,sessionId="sessionId"in providerOptions&&typeof providerOptions.sessionId=="string"?providerOptions.sessionId:void 0,headers=mergeHeaders(mergeHeaders(getOpenCodeSessionHeaders(requestModel,sessionId),resolution.auth.headers),providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0;return{provider,model:requestModel,options:{...providerOptions,apiKey:providerOptions.apiKey??resolution.auth.apiKey,headers,env}}}stream(model,context,options){let transcript=normalizeContext(context);return lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);return prepared.provider.stream(prepared.model,transcript,prepared.options)})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){let transcript=normalizeContext(context);return isVirtualModel(model)?lazyStream(model,async()=>{let route=await this.resolveModel(model,transcript.messages,{reason:"direct",thinkingLevel:options?.reasoning??"off",signal:options?.signal}),{maxTokens:limit}=route.model,maxTokens=options?.maxTokens&&limit>0?Math.min(options.maxTokens,limit):options?.maxTokens,reasoning=route.thinkingLevel==="off"?void 0:route.thinkingLevel,{apiKey,headers,env,...rest}=options??{},auth=route.model.provider===model.provider?{apiKey,headers,env}:{};return this.streamSimple(route.model,context,{...rest,...auth,maxTokens,reasoning})}):lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);return prepared.provider.streamSimple(prepared.model,transcript,prepared.options)})}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}streamDeferred(model,handle,options){return lazyStream(model,async()=>{assertChatModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.fetchDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);return prepared.provider.fetchDeferred(prepared.model,handle,prepared.options)})}async fetchDeferred(model,handle,options){return this.streamDeferred(model,handle,options).result()}async cancelDeferred(model,handle,options){assertChatModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.cancelDeferred)throw new ModelsError("provider",`Provider ${model.provider} does not support deferred responses`);await prepared.provider.cancelDeferred(prepared.model,handle,prepared.options)}async generateImages(model,context,options){try{assertImageModel(model);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.generateImages)throw new ModelsError("provider",`Provider ${model.provider} does not support image generation`);return await prepared.provider.generateImages(prepared.model,context,prepared.options)}catch(error){return imageErrorResult(model,error,options?.signal?.aborted)}}async classify(model,context,options){try{assertClassifierModel(model),assertClassifierInputSupported(model,context);let prepared=await this.prepareRequest(model,options);if(!prepared.provider.classify)throw new ModelsError("provider",`Provider ${model.provider} does not support classification`);return await prepared.provider.classify(prepared.model,context,prepared.options)}catch(error){return classifierErrorResult(model,error,options?.signal?.aborted)}}login(providerId,type,interaction,options){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type,{...interaction,signal},options);return await this.synchronizeCredentialState(providerId,"login",credential,signal),credential})}logout(providerId,options={}){let signal=operationSignal(options.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{await this.models.logout(providerId,{signal}),await this.synchronizeCredentialState(providerId,"logout",void 0,signal)})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),this.configureRadiusProviders(),options.providers){for(let providerId of new Set(options.providers))this.recomposeProvider(providerId);this.updateModelSnapshot()}else this.rebuildProviders();let refreshOptions={...options,allowNetwork:options.allowNetwork??this.modelNetworkEnabled},result2=await this.models.refresh(refreshOptions)??{aborted:refreshOptions.signal?.aborted??!1,errors:new Map},errors=new Map(result2.errors);if(this.updateModelSnapshot(),options.providers)await Promise.all([...new Set(options.providers)].map(async providerId=>{try{await this.refreshProviderAvailability(providerId,operationSignal(options.signal))}catch(error){options.signal?.aborted||errors.set(providerId,error instanceof Error?error:new Error(String(error)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result2.aborted||(options.signal?.aborted??!1),errors}}registerNativeProvider(provider){if(!provider.id.trim())throw new Error("Provider id must not be empty.");this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id),this.updateModelSnapshot(),this.markProvisionallyConfigured(provider.id,configuredRequestAuthStatus(this.config.getProvider(provider.id),void 0),provider.auth.oauth&&!provider.auth.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}markProvisionallyConfigured(providerId,configuredStatus,type){if(!this.snapshot.storedProviders.has(providerId)&&!configuredStatus?.configured)return;let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type,source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}registerProvider(providerId,config){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config),this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value]of Object.entries(config))value!==void 0&&(effective[key]=value);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.markProvisionallyConfigured(providerId,configuredRequestAuthStatus(this.config.getProvider(providerId),effective),effective.oauth&&!effective.apiKey?"oauth":"api_key"),this.refresh({allowNetwork:!1})}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}registerVirtualModel(definition){let{provider:providerId,id}=definition;if(!providerId.trim()||!id.trim())throw new Error("Virtual model provider and id must not be empty.");let existing=this.models.getModel(providerId,id);if(existing&&!isVirtualModel(existing))throw new Error(`Virtual model ${providerId}/${id} conflicts with a physical model.`);let models=this.virtualModels.get(providerId)??new Map;if(models.set(id,{model:createVirtualModel(definition),route:request=>definition.route(request)}),this.virtualModels.set(providerId,models),!this.recomposeProvider(providerId)&&!this.snapshot.configuredProviders.has(providerId)){let auth=new Map(this.snapshot.auth).set(providerId,{type:"api_key",source:"virtual"}),configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId);this.snapshot={...this.snapshot,auth,configuredProviders}}this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}unregisterVirtualModel(providerId,id){let models=this.virtualModels.get(providerId);models?.delete(id)&&(models.size===0&&this.virtualModels.delete(providerId),this.recomposeProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1}))}async resolveModel(model,messages,options){let name=`Virtual model ${model.provider}/${model.id}`,virtual=this.virtualModels.get(model.provider)?.get(model.id);if(!virtual)throw new Error(`${name} is not registered.`);let{failed,...request}=options,latest=findLatestResponse(messages),previousModel=latest&&this.getPhysicalModel(latest.provider,latest.model),failedModel=failed&&this.getPhysicalModel(failed.provider,failed.model),route=await virtual.route({...request,model,previous:previousModel&&{model:previousModel,thinkingLevel:latest?.thinkingLevel},failed:failedModel&&failed&&{model:failedModel,thinkingLevel:failed.thinkingLevel,message:failed},messages}),target=this.getPhysicalModel(route.model.provider,route.model.id),routed=`${name} routed to ${route.model.provider}/${route.model.id}`;if(!target)throw new Error(`${routed}, which is not a physical model.`);if(!this.hasConfiguredAuth(target.provider))throw new Error(`${routed}, which has no credentials.`);return{model:target,thinkingLevel:clampThinkingLevel(target,route.thinkingLevel),state:route.state}}getPhysicalModel(providerId,modelId){let model=this.models.getModel(providerId,modelId);return model&&!isVirtualModel(model)?model:void 0}};function readOrientationFromTiff(bytes2,tiffStart){if(tiffStart+8>bytes2.length)return 1;let le=(bytes2[tiffStart]<<8|bytes2[tiffStart+1])===18761,read16=pos=>le?bytes2[pos]|bytes2[pos+1]<<8:bytes2[pos]<<8|bytes2[pos+1],ifdOffset=(pos=>le?bytes2[pos]|bytes2[pos+1]<<8|bytes2[pos+2]<<16|bytes2[pos+3]<<24:(bytes2[pos]<<24|bytes2[pos+1]<<16|bytes2[pos+2]<<8|bytes2[pos+3])>>>0)(tiffStart+4),ifdStart=tiffStart+ifdOffset;if(ifdStart+2>bytes2.length)return 1;let entryCount=read16(ifdStart);for(let i=0;i<entryCount;i++){let entryPos=ifdStart+2+i*12;if(entryPos+12>bytes2.length)return 1;if(read16(entryPos)===274){let value=read16(entryPos+8);return value>=1&&value<=8?value:1}}return 1}function findJpegTiffOffset(bytes2){let offset=2;for(;offset<bytes2.length-1;){if(bytes2[offset]!==255)return-1;let marker2=bytes2[offset+1];if(marker2===255){offset++;continue}if(marker2===225){if(offset+4>=bytes2.length)return-1;let segmentStart=offset+4;if(segmentStart+6>bytes2.length)return-1;if(hasExifHeader(bytes2,segmentStart))return segmentStart+6}if(offset+4>bytes2.length)return-1;let length=bytes2[offset+2]<<8|bytes2[offset+3];offset+=2+length}return-1}function findWebpTiffOffset(bytes2){let offset=12;for(;offset+8<=bytes2.length;){let chunkId=String.fromCharCode(bytes2[offset],bytes2[offset+1],bytes2[offset+2],bytes2[offset+3]),chunkSize=bytes2[offset+4]|bytes2[offset+5]<<8|bytes2[offset+6]<<16|bytes2[offset+7]<<24,dataStart=offset+8;if(chunkId==="EXIF")return dataStart+chunkSize>bytes2.length?-1:chunkSize>=6&&hasExifHeader(bytes2,dataStart)?dataStart+6:dataStart;offset=dataStart+chunkSize+chunkSize%2}return-1}function hasExifHeader(bytes2,offset){return bytes2[offset]===69&&bytes2[offset+1]===120&&bytes2[offset+2]===105&&bytes2[offset+3]===102&&bytes2[offset+4]===0&&bytes2[offset+5]===0}function getExifOrientation(bytes2){let tiffOffset=-1;return bytes2.length>=2&&bytes2[0]===255&&bytes2[1]===216?tiffOffset=findJpegTiffOffset(bytes2):bytes2.length>=12&&bytes2[0]===82&&bytes2[1]===73&&bytes2[2]===70&&bytes2[3]===70&&bytes2[8]===87&&bytes2[9]===69&&bytes2[10]===66&&bytes2[11]===80&&(tiffOffset=findWebpTiffOffset(bytes2)),tiffOffset===-1?1:readOrientationFromTiff(bytes2,tiffOffset)}function rotate90(photon,image,dstIndex){let w=image.get_width(),h=image.get_height(),src=image.get_raw_pixels(),dst=new Uint8Array(src.length);for(let y=0;y<h;y++)for(let x=0;x<w;x++){let srcIdx=(y*w+x)*4,dstIdx=dstIndex(x,y,w,h)*4;dst[dstIdx]=src[srcIdx],dst[dstIdx+1]=src[srcIdx+1],dst[dstIdx+2]=src[srcIdx+2],dst[dstIdx+3]=src[srcIdx+3]}return new photon.PhotonImage(dst,h,w)}function applyExifOrientation(photon,image,originalBytes){let orientation=getExifOrientation(originalBytes);if(orientation===1)return image;switch(orientation){case 2:return photon.fliph(image),image;case 3:return photon.fliph(image),photon.flipv(image),image;case 4:return photon.flipv(image),image;case 5:{let rotated=rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));return photon.fliph(rotated),rotated}case 6:return rotate90(photon,image,(x,y,_w,h)=>x*h+(h-1-y));case 7:{let rotated=rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);return photon.fliph(rotated),rotated}case 8:return rotate90(photon,image,(x,y,w,h)=>(w-1-x)*h+y);default:return image}}import{createRequire}from"module";import*as path2 from"path";import{fileURLToPath}from"url";var require2=createRequire(import.meta.url),fs=require2("fs"),WASM_FILENAME="photon_rs_bg.wasm",photonModule=null,loadPromise=null;function pathOrNull(file){return typeof file=="string"?file:file instanceof URL?fileURLToPath(file):null}function getFallbackWasmPaths(){let execDir=path2.dirname(process.execPath);return[path2.join(execDir,WASM_FILENAME),path2.join(execDir,"photon",WASM_FILENAME),path2.join(process.cwd(),WASM_FILENAME)]}function patchPhotonWasmRead(){let originalReadFileSync=fs.readFileSync.bind(fs),fallbackPaths=getFallbackWasmPaths(),mutableFs=fs,patchedReadFileSync=((...args)=>{let[file,options]=args;if(pathOrNull(file)?.endsWith(WASM_FILENAME))try{return originalReadFileSync(...args)}catch(error){let err=error;if(err?.code&&err.code!=="ENOENT")throw error;for(let fallbackPath of fallbackPaths)if(fs.existsSync(fallbackPath))return options===void 0?originalReadFileSync(fallbackPath):originalReadFileSync(fallbackPath,options);throw error}return originalReadFileSync(...args)});try{mutableFs.readFileSync=patchedReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:patchedReadFileSync,writable:!0,configurable:!0})}return()=>{try{mutableFs.readFileSync=originalReadFileSync}catch{Object.defineProperty(fs,"readFileSync",{value:originalReadFileSync,writable:!0,configurable:!0})}}}async function loadPhoton(){return photonModule||loadPromise||(loadPromise=(async()=>{let restoreReadFileSync=patchPhotonWasmRead();try{return photonModule=await import("@silvia-odwyer/photon-node"),photonModule}catch{return photonModule=null,photonModule}finally{restoreReadFileSync()}})(),loadPromise)}function encodePng(photon,bytes2){try{let rawImage=photon.PhotonImage.new_from_byteslice(bytes2),image=applyExifOrientation(photon,rawImage,bytes2);image!==rawImage&&rawImage.free();try{return new Uint8Array(image.get_bytes())}finally{image.free()}}catch{return null}}async function convertImageBytesToPng(bytes2){let photon=await loadPhoton();return photon?encodePng(photon,bytes2):null}async function convertToPng(base64Data,mimeType){if(mimeType==="image/png")return{data:base64Data,mimeType};let bytes2=new Uint8Array(Buffer.from(base64Data,"base64")),pngBytes=await convertImageBytesToPng(bytes2);return pngBytes?{data:Buffer.from(pngBytes).toString("base64"),mimeType:"image/png"}:null}async function loadPngTranscoder(){let photon=await loadPhoton();if(photon)return base64Data=>{let pngBytes=encodePng(photon,new Uint8Array(Buffer.from(base64Data,"base64")));return pngBytes?Buffer.from(pngBytes).toString("base64"):null}}var pngTranscoderLoad,pngTranscoderRegistered=!1;function ensurePngTranscoder(onRegistered){pngTranscoderRegistered||getCapabilities().images!=="kitty"||(pngTranscoderLoad??=loadPngTranscoder().then(transcoder=>transcoder?(setImageTranscoder(transcoder),pngTranscoderRegistered=!0,!0):!1),pngTranscoderLoad.then(registered2=>{registered2&&onRegistered()}))}import{Worker}from"node:worker_threads";var IMAGE_RESIZE_WORKER_RESPONSE_TYPE="pi:image-resize-response",DEFAULT_MAX_BYTES2=4.5*1024*1024,DEFAULT_OPTIONS={maxWidth:2e3,maxHeight:2e3,maxBytes:DEFAULT_MAX_BYTES2,jpegQuality:80};function encodeCandidate(buffer,mimeType){let data=Buffer.from(buffer).toString("base64");return{data,encodedSize:Buffer.byteLength(data,"utf-8"),mimeType}}async function resizeImageInProcess(inputBytes,mimeType,options){let opts={...DEFAULT_OPTIONS,...options},inputBase64Size=Math.ceil(inputBytes.byteLength/3)*4,photon=await loadPhoton();if(!photon)return null;let image;try{let tryEncodings=function(width,height,jpegQualities){let resized=photon.resize(image,width,height,photon.SamplingFilter.Lanczos3);try{let candidates=[encodeCandidate(resized.get_bytes(),"image/png")];for(let quality of jpegQualities)candidates.push(encodeCandidate(resized.get_bytes_jpeg(quality),"image/jpeg"));return candidates}finally{resized.free()}},rawImage=photon.PhotonImage.new_from_byteslice(inputBytes);image=applyExifOrientation(photon,rawImage,inputBytes),image!==rawImage&&rawImage.free();let originalWidth=image.get_width(),originalHeight=image.get_height(),format=mimeType.split("/")[1]??"png";if(originalWidth<=opts.maxWidth&&originalHeight<=opts.maxHeight&&inputBase64Size<opts.maxBytes)return{data:Buffer.from(inputBytes).toString("base64"),mimeType:mimeType||`image/${format}`,originalWidth,originalHeight,width:originalWidth,height:originalHeight,wasResized:!1};let targetWidth=originalWidth,targetHeight=originalHeight;targetWidth>opts.maxWidth&&(targetHeight=Math.round(targetHeight*opts.maxWidth/targetWidth),targetWidth=opts.maxWidth),targetHeight>opts.maxHeight&&(targetWidth=Math.round(targetWidth*opts.maxHeight/targetHeight),targetHeight=opts.maxHeight);let qualitySteps=Array.from(new Set([opts.jpegQuality,85,70,55,40])),currentWidth=targetWidth,currentHeight=targetHeight;for(;;){let[png,jpeg,...lowerQualityJpegs]=tryEncodings(currentWidth,currentHeight,qualitySteps),preferred=jpeg&&jpeg.encodedSize<png.encodedSize?[jpeg,png]:[png,jpeg];for(let candidate of[...preferred,...lowerQualityJpegs])if(candidate&&candidate.encodedSize<opts.maxBytes)return{data:candidate.data,mimeType:candidate.mimeType,originalWidth,originalHeight,width:currentWidth,height:currentHeight,wasResized:!0};if(currentWidth===1&&currentHeight===1)break;let nextWidth=currentWidth===1?1:Math.max(1,Math.floor(currentWidth*.75)),nextHeight=currentHeight===1?1:Math.max(1,Math.floor(currentHeight*.75));if(nextWidth===currentWidth&&nextHeight===currentHeight)break;currentWidth=nextWidth,currentHeight=nextHeight}return null}catch{return null}finally{image&&image.free()}}function toTransferableBytes(input2){return new Uint8Array(input2)}function isResizeImageWorkerResponse(value){return value!==null&&typeof value=="object"&&"type"in value&&value.type===IMAGE_RESIZE_WORKER_RESPONSE_TYPE}function createResizeWorker(workerSpecifier){return new Worker(workerSpecifier)}async function resizeImageInWorker(workerSpecifier,inputBytes,mimeType,options){let worker=createResizeWorker(workerSpecifier);try{let inputBytesForWorker=toTransferableBytes(inputBytes);return await new Promise((resolve18,reject)=>{let settled=!1,settle=result2=>{settled||(settled=!0,resolve18(result2))},fail=error=>{settled||(settled=!0,reject(error))};worker.on("message",message=>{isResizeImageWorkerResponse(message)&&("error"in message?fail(new Error(message.error)):settle(message.result))}),worker.once("error",fail),worker.once("exit",code=>{settled||fail(new Error(`Image resize worker exited with code ${code}`))}),worker.postMessage({inputBytes:inputBytesForWorker,mimeType,options},[inputBytesForWorker.buffer])})}finally{worker.terminate().catch(()=>{})}}async function resizeImage(inputBytes,mimeType,options){let isTypeScriptRuntime=import.meta.url.endsWith(".ts"),workerUrl=new URL(isTypeScriptRuntime?"./image-resize-worker.ts":"./image-resize-worker.js",import.meta.url);if(typeof process.versions.bun=="string")try{return await resizeImageInWorker("./src/utils/image-resize-worker.ts",inputBytes,mimeType,options)}catch{}try{return await resizeImageInWorker(workerUrl,inputBytes,mimeType,options)}catch{return resizeImageInProcess(inputBytes,mimeType,options)}}function formatDimensionNote(result2){if(!result2.wasResized)return;let scale=result2.originalWidth/result2.width;return`[Image: original ${result2.originalWidth}x${result2.originalHeight}, displayed at ${result2.width}x${result2.height}. Multiply coordinates by ${scale.toFixed(2)} to map to original image.]`}import{open}from"node:fs/promises";var IMAGE_TYPE_SNIFF_BYTES=4100,PNG_SIGNATURE=[137,80,78,71,13,10,26,10];function detectSupportedImageMimeType(buffer){return startsWith(buffer,[255,216,255])?buffer[3]===247?null:"image/jpeg":startsWith(buffer,PNG_SIGNATURE)?isPng(buffer)&&!isAnimatedPng(buffer)?"image/png":null:startsWithAscii(buffer,0,"GIF87a")||startsWithAscii(buffer,0,"GIF89a")?"image/gif":startsWithAscii(buffer,0,"RIFF")&&startsWithAscii(buffer,8,"WEBP")?"image/webp":startsWithAscii(buffer,0,"BM")&&isBmp(buffer)?"image/bmp":null}async function detectSupportedImageMimeTypeFromFile(filePath){let fileHandle=await open(filePath,"r");try{let buffer=Buffer.alloc(IMAGE_TYPE_SNIFF_BYTES),{bytesRead}=await fileHandle.read(buffer,0,IMAGE_TYPE_SNIFF_BYTES,0);return detectSupportedImageMimeType(buffer.subarray(0,bytesRead))}finally{await fileHandle.close()}}function isPng(buffer){return buffer.length>=16&&readUint32BE(buffer,PNG_SIGNATURE.length)===13&&startsWithAscii(buffer,12,"IHDR")}function isAnimatedPng(buffer){let offset=PNG_SIGNATURE.length;for(;offset+8<=buffer.length;){let chunkLength=readUint32BE(buffer,offset),chunkTypeOffset=offset+4;if(startsWithAscii(buffer,chunkTypeOffset,"acTL"))return!0;if(startsWithAscii(buffer,chunkTypeOffset,"IDAT"))return!1;let nextOffset=offset+8+chunkLength+4;if(nextOffset<=offset||nextOffset>buffer.length)return!1;offset=nextOffset}return!1}function isBmp(buffer){if(buffer.length<26)return!1;let declaredFileSize=readUint32LE(buffer,2),pixelDataOffset=readUint32LE(buffer,10),dibHeaderSize=readUint32LE(buffer,14);if(declaredFileSize!==0&&declaredFileSize<26||pixelDataOffset<14+dibHeaderSize||declaredFileSize!==0&&pixelDataOffset>=declaredFileSize)return!1;let colorPlanes,bitsPerPixel;if(dibHeaderSize===12)colorPlanes=readUint16LE(buffer,22),bitsPerPixel=readUint16LE(buffer,24);else if(dibHeaderSize>=40&&dibHeaderSize<=124){if(buffer.length<30)return!1;colorPlanes=readUint16LE(buffer,26),bitsPerPixel=readUint16LE(buffer,28)}else return!1;return colorPlanes===1&&[1,4,8,16,24,32].includes(bitsPerPixel)}function readUint16LE(buffer,offset){return(buffer[offset]??0)+((buffer[offset+1]??0)<<8)}function readUint32BE(buffer,offset){return(buffer[offset]??0)*16777216+((buffer[offset+1]??0)<<16)+((buffer[offset+2]??0)<<8)+(buffer[offset+3]??0)}function readUint32LE(buffer,offset){return(buffer[offset]??0)+((buffer[offset+1]??0)<<8)+((buffer[offset+2]??0)<<16)+(buffer[offset+3]??0)*16777216}function startsWith(buffer,bytes2){return buffer.length<bytes2.length?!1:bytes2.every((byte,index3)=>buffer[index3]===byte)}function startsWithAscii(buffer,offset,text){if(buffer.length<offset+text.length)return!1;for(let index3=0;index3<text.length;index3++)if(buffer[offset+index3]!==text.charCodeAt(index3))return!1;return!0}function getSourcePackageKey(identity){return JSON.stringify({source:identity.source,scope:identity.scope})}var BUILTIN_PATH_PREFIX="builtin:";function getSyntheticPathSource(path10){if(path10.startsWith(BUILTIN_PATH_PREFIX))return"builtin";if(path10.startsWith("<")&&path10.endsWith(">"))return path10.slice(1,-1).split(":")[0]||"temporary"}function isSyntheticPath(path10){return path10.startsWith(BUILTIN_PATH_PREFIX)||path10.startsWith("<")}function getResourcePathKey(path10){return isSyntheticPath(path10)?path10:getPathComparisonKey(canonicalizePath(path10))}function createSourceInfo(path10,metadata){return{path:path10,source:metadata.source,scope:metadata.scope,origin:metadata.origin,baseDir:metadata.baseDir,...metadata.changelogPath?{changelogPath:metadata.changelogPath}:{}}}function createSyntheticSourceInfo(path10,options){return{path:path10,source:options.source,scope:options.scope??"temporary",origin:options.origin??"top-level",baseDir:options.baseDir,...options.changelogPath?{changelogPath:options.changelogPath}:{}}}var import_ignore=__toESM(require_ignore(),1);import{createHash}from"node:crypto";import{chmodSync,existsSync as existsSync2,globSync,mkdirSync as mkdirSync2,readdirSync,readFileSync as readFileSync3,realpathSync,rmSync,statSync,writeFileSync as writeFileSync2}from"node:fs";import{homedir}from"node:os";import{basename,dirname as dirname4,isAbsolute,join as join5,relative,resolve,sep as sep2}from"node:path";var import_semver=__toESM(require_semver2(),1);var import_hosted_git_info=__toESM(require_lib(),1);function splitRef(url){let scpLikeMatch=url.match(/^git@([^:]+):(.+)$/);if(scpLikeMatch){let pathWithMaybeRef2=scpLikeMatch[2]??"",refSeparator2=pathWithMaybeRef2.indexOf("@");if(refSeparator2<0)return{repo:url};let repoPath2=pathWithMaybeRef2.slice(0,refSeparator2),ref2=pathWithMaybeRef2.slice(refSeparator2+1);return!repoPath2||!ref2?{repo:url}:{repo:`git@${scpLikeMatch[1]??""}:${repoPath2}`,ref:ref2}}if(url.includes("://"))try{let parsed=new URL(url),pathWithMaybeRef2=parsed.pathname.replace(/^\/+/,""),refSeparator2=pathWithMaybeRef2.indexOf("@");if(refSeparator2<0)return{repo:url};let repoPath2=pathWithMaybeRef2.slice(0,refSeparator2),ref2=pathWithMaybeRef2.slice(refSeparator2+1);return!repoPath2||!ref2?{repo:url}:(parsed.pathname=`/${repoPath2}`,{repo:parsed.toString().replace(/\/$/,""),ref:ref2})}catch{return{repo:url}}let slashIndex=url.indexOf("/");if(slashIndex<0)return{repo:url};let host=url.slice(0,slashIndex),pathWithMaybeRef=url.slice(slashIndex+1),refSeparator=pathWithMaybeRef.indexOf("@");if(refSeparator<0)return{repo:url};let repoPath=pathWithMaybeRef.slice(0,refSeparator),ref=pathWithMaybeRef.slice(refSeparator+1);return!repoPath||!ref?{repo:url}:{repo:`${host}/${repoPath}`,ref}}function decodeForValidation(value){try{return decodeURIComponent(value)}catch{return null}}function hasUnsafeGitInstallPart(value,allowSlash){let decoded=decodeForValidation(value);if(decoded===null)return!0;let candidates=[value,decoded];for(let candidate of candidates)if(candidate.includes("\0")||candidate.includes("\\")||candidate.startsWith("/")||!allowSlash&&candidate.includes("/")||candidate.split("/").includes(".."))return!0;return!1}function buildGitSource(args){if(args.path.startsWith("/"))return null;let normalizedPath=args.path.replace(/\.git$/,"").replace(/^\/+/,"");return!args.host||!normalizedPath||normalizedPath.split("/").length<2||hasUnsafeGitInstallPart(args.host,!1)||hasUnsafeGitInstallPart(normalizedPath,!0)?null:{type:"git",repo:args.repo,host:args.host,path:normalizedPath,ref:args.ref,pinned:!!args.ref}}function parseGenericGitUrl(url){let{repo:repoWithoutRef,ref}=splitRef(url),repo=repoWithoutRef,host="",path10="",scpLikeMatch=repoWithoutRef.match(/^git@([^:]+):(.+)$/);if(scpLikeMatch)host=scpLikeMatch[1]??"",path10=scpLikeMatch[2]??"";else if(repoWithoutRef.startsWith("https://")||repoWithoutRef.startsWith("http://")||repoWithoutRef.startsWith("ssh://")||repoWithoutRef.startsWith("git://"))try{let parsed=new URL(repoWithoutRef);host=parsed.hostname,path10=parsed.pathname.replace(/^\/+/,"")}catch{return null}else{let slashIndex=repoWithoutRef.indexOf("/");if(slashIndex<0||(host=repoWithoutRef.slice(0,slashIndex),path10=repoWithoutRef.slice(slashIndex+1),!host.includes(".")&&host!=="localhost"))return null;repo=`https://${repoWithoutRef}`}return buildGitSource({repo,host,path:path10,ref})}function parseGitUrl(source){let trimmed=source.trim(),hasGitPrefix=trimmed.startsWith("git:"),url=hasGitPrefix?trimmed.slice(4).trim():trimmed;if(!hasGitPrefix&&!/^(https?|ssh|git):\/\//i.test(url))return null;let split=splitRef(url),hostedCandidates=[split.ref?`${split.repo}#${split.ref}`:void 0,url].filter(value=>!!value);for(let candidate of hostedCandidates){let info=import_hosted_git_info.default.fromUrl(candidate);if(info){if(split.ref&&info.project?.includes("@"))continue;let useHttpsPrefix=!split.repo.startsWith("http://")&&!split.repo.startsWith("https://")&&!split.repo.startsWith("ssh://")&&!split.repo.startsWith("git://")&&!split.repo.startsWith("git@");return buildGitSource({repo:useHttpsPrefix?`https://${split.repo}`:split.repo,host:info.domain||"",path:`${info.user}/${info.project}`,ref:info.committish||split.ref||void 0})}}let httpsCandidates=[split.ref?`https://${split.repo}#${split.ref}`:void 0,`https://${url}`].filter(value=>!!value);for(let candidate of httpsCandidates){let info=import_hosted_git_info.default.fromUrl(candidate);if(info){if(split.ref&&info.project?.includes("@"))continue;return buildGitSource({repo:`https://${split.repo}`,host:info.domain||"",path:`${info.user}/${info.project}`,ref:info.committish||split.ref||void 0})}}return parseGenericGitUrl(url)}var stdoutTakeoverState;var rawStdoutWriteTail=Promise.resolve();function getRawStdoutWrite(){return stdoutTakeoverState?stdoutTakeoverState.rawStdoutWrite:process.stdout.write.bind(process.stdout)}async function writeRawStdoutChunk(text){for(;;)try{await new Promise((resolve18,reject)=>{try{getRawStdoutWrite()(text,error=>{error?reject(error):resolve18()})}catch(error){reject(error instanceof Error?error:new Error(String(error)))}});return}catch(error){let writeError=error instanceof Error?error:new Error(String(error)),code=writeError.code;if(code!=="ENOBUFS"&&code!=="EAGAIN"&&code!=="EWOULDBLOCK")throw writeError;await new Promise(resolve18=>setTimeout(resolve18,10))}}function takeOverStdout(){if(stdoutTakeoverState)return;let rawStdoutWrite=process.stdout.write.bind(process.stdout),rawStderrWrite=process.stderr.write.bind(process.stderr),originalStdoutWrite=process.stdout.write;process.stdout.write=((chunk,encodingOrCallback,callback)=>typeof encodingOrCallback=="function"?rawStderrWrite(String(chunk),encodingOrCallback):rawStderrWrite(String(chunk),callback)),stdoutTakeoverState={rawStdoutWrite,rawStderrWrite,originalStdoutWrite}}function restoreStdout(){stdoutTakeoverState&&(process.stdout.write=stdoutTakeoverState.originalStdoutWrite,stdoutTakeoverState=void 0)}function isStdoutTakenOver(){return stdoutTakeoverState!==void 0}function writeRawStdout(text){text.length!==0&&(rawStdoutWriteTail=rawStdoutWriteTail.then(()=>writeRawStdoutChunk(text)),rawStdoutWriteTail.catch(()=>{process.exit(1)}))}async function waitForRawStdoutBackpressure(){for(;;){let tail=rawStdoutWriteTail;if(await tail,tail===rawStdoutWriteTail)return}}async function flushRawStdout(){await waitForRawStdoutBackpressure(),await writeRawStdoutChunk("")}import{readFileSync as readFileSync2}from"node:fs";var RESOURCE_FIELDS=["extensions","skills","prompts","themes"];function isObject(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function readPiManifest(packageJsonPath){try{let pkg=JSON.parse(stripBom(readFileSync2(packageJsonPath,"utf-8")));if(!isObject(pkg)||!isObject(pkg.pi))return null;let manifest={};for(let field2 of RESOURCE_FIELDS){let entries=pkg.pi[field2];Array.isArray(entries)&&entries.every(entry=>typeof entry=="string")&&(manifest[field2]=entries)}let changelogPath=pkg.pi.changelogPath;return typeof changelogPath=="string"&&(manifest.changelogPath=changelogPath),manifest}catch{return null}}function getEnv(){if(process.platform!=="linux"||Object.keys(process.env).length>0)return process.env;try{let data=readFileSync3("/proc/self/environ","utf-8"),env={};for(let entry of data.split("\0")){let idx=entry.indexOf("=");idx>0&&(env[entry.slice(0,idx)]=entry.slice(idx+1))}return env}catch{return process.env}}var NETWORK_TIMEOUT_MS=1e4,UPDATE_CHECK_CONCURRENCY=4,GIT_UPDATE_CONCURRENCY=4;function isOfflineModeEnabled(){let value=process.env.PI_OFFLINE;return value?value==="1"||value.toLowerCase()==="true"||value.toLowerCase()==="yes":!1}function isExactNpmVersion(version2){return(0,import_semver.valid)(version2??"")!==null}function getNpmVersionRange(version2){return version2?(0,import_semver.validRange)(version2)??void 0:void 0}function resourcePrecedenceRank(m){return m.source==="builtin"?5:m.origin==="package"?4:(m.scope==="project"?0:2)+(m.source==="local"?0:1)}var RESOURCE_TYPES=["extensions","skills","prompts","themes"],FILE_PATTERNS={extensions:/\.(ts|js)$/,skills:/\.md$/,prompts:/\.md$/,themes:/\.json$/},IGNORE_FILE_NAMES=[".gitignore",".ignore",".fdignore"];function toPosixPath(p){return p.split(sep2).join("/")}function getHomeDir(){return process.env.HOME||homedir()}function getExtensionTempFolder(agentDir){let tempFolder=join5(agentDir,"tmp","extensions");return mkdirSync2(tempFolder,{recursive:!0,mode:448}),chmodSync(tempFolder,448),tempFolder}function prefixIgnorePattern(line,prefix){let trimmed=line.trim();if(!trimmed||trimmed.startsWith("#")&&!trimmed.startsWith("\\#"))return null;let pattern=line,negated=!1;pattern.startsWith("!")?(negated=!0,pattern=pattern.slice(1)):pattern.startsWith("\\!")&&(pattern=pattern.slice(1)),pattern.startsWith("/")&&(pattern=pattern.slice(1));let prefixed=prefix?`${prefix}${pattern}`:pattern;return negated?`!${prefixed}`:prefixed}function addIgnoreRules(ig,dir,rootDir){let relativeDir=relative(rootDir,dir),prefix=relativeDir?`${toPosixPath(relativeDir)}/`:"";for(let filename of IGNORE_FILE_NAMES){let ignorePath=join5(dir,filename);if(existsSync2(ignorePath))try{let patterns=readFileSync3(ignorePath,"utf-8").split(/\r?\n/).map(line=>prefixIgnorePattern(line,prefix)).filter(line=>!!line);patterns.length>0&&ig.add(patterns)}catch{}}}function isPattern(s){return s.startsWith("!")||s.startsWith("+")||s.startsWith("-")||s.includes("*")||s.includes("?")}function isOverridePattern(s){return s.startsWith("!")||s.startsWith("+")||s.startsWith("-")}function hasGlobPattern(s){return s.includes("*")||s.includes("?")}function expandPackageGlob(pattern,root){return globSync(pattern,{cwd:root}).map(match2=>resolve(root,match2)).filter(path10=>relative(root,path10).split(sep2).every(segment2=>segment2===".."||!segment2.startsWith("."))).sort((a,b)=>a<b?-1:a>b?1:0)}function splitPatterns(entries){let plain=[],patterns=[];for(let entry of entries)isPattern(entry)?patterns.push(entry):plain.push(entry);return{plain,patterns}}function collectFiles(dir,filePattern,skipNodeModules=!0,ignoreMatcher,rootDir){let files=[];if(!existsSync2(dir))return files;let root=rootDir??dir,ig=ignoreMatcher??(0,import_ignore.default)();addIgnoreRules(ig,dir,root);try{let entries=readdirSync(dir,{withFileTypes:!0});for(let entry of entries){if(entry.name.startsWith(".")||skipNodeModules&&entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath)),ignorePath=isDir?`${relPath}/`:relPath;ig.ignores(ignorePath)||(isDir?files.push(...collectFiles(fullPath,filePattern,skipNodeModules,ig,root)):isFile&&filePattern.test(entry.name)&&files.push(fullPath))}}catch{}return files}function collectSkillEntries(dir,mode,ignoreMatcher,rootDir){let entries=[];if(!existsSync2(dir))return entries;let root=rootDir??dir,ig=ignoreMatcher??(0,import_ignore.default)();addIgnoreRules(ig,dir,root);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name!=="SKILL.md")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath));if(isFile&&!ig.ignores(relPath))return entries.push(fullPath),entries}for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(root,fullPath));if(isFile&&entry.name.endsWith(".md")&&!ig.ignores(relPath)&&(mode==="pi"&&dir===root||mode==="agents"&&dir!==root)){entries.push(fullPath);continue}isDir&&(ig.ignores(`${relPath}/`)||entries.push(...collectSkillEntries(fullPath,mode,ig,root)))}}catch{}return entries}function collectAutoSkillEntries(dir,mode){return collectSkillEntries(dir,mode)}function findGitRepoRoot(startDir){let dir=resolve(startDir);for(;;){if(existsSync2(join5(dir,".git")))return dir;let parent=dirname4(dir);if(parent===dir)return null;dir=parent}}function collectAncestorAgentsSkillDirs(startDir){let skillDirs=[],resolvedStartDir=resolve(startDir),gitRepoRoot=findGitRepoRoot(resolvedStartDir),dir=resolvedStartDir;for(;skillDirs.push(join5(dir,".agents","skills")),!(gitRepoRoot&&dir===gitRepoRoot);){let parent=dirname4(dir);if(parent===dir)break;dir=parent}return skillDirs}function collectAutoPromptEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath));ig.ignores(relPath)||isFile&&entry.name.endsWith(".md")&&entries.push(fullPath)}}catch{}return entries}function collectAutoThemeEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isFile=entry.isFile();if(entry.isSymbolicLink())try{isFile=statSync(fullPath).isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath));ig.ignores(relPath)||isFile&&entry.name.endsWith(".json")&&entries.push(fullPath)}}catch{}return entries}function resolveExtensionEntries(dir){let packageJsonPath=join5(dir,"package.json");if(existsSync2(packageJsonPath)){let manifest=readPiManifest(packageJsonPath);if(manifest?.extensions?.length){let entries=[];for(let extPath of manifest.extensions){let resolvedExtPath=resolve(dir,extPath);existsSync2(resolvedExtPath)&&entries.push(resolvedExtPath)}if(entries.length>0)return entries}}let indexTs=join5(dir,"index.ts"),indexJs=join5(dir,"index.js");return existsSync2(indexTs)?[indexTs]:existsSync2(indexJs)?[indexJs]:null}function collectAutoExtensionEntries(dir){let entries=[];if(!existsSync2(dir))return entries;let rootEntries=resolveExtensionEntries(dir);if(rootEntries)return rootEntries;let ig=(0,import_ignore.default)();addIgnoreRules(ig,dir,dir);try{let dirEntries=readdirSync(dir,{withFileTypes:!0});for(let entry of dirEntries){if(entry.name.startsWith(".")||entry.name==="node_modules")continue;let fullPath=join5(dir,entry.name),isDir=entry.isDirectory(),isFile=entry.isFile();if(entry.isSymbolicLink())try{let stats=statSync(fullPath);isDir=stats.isDirectory(),isFile=stats.isFile()}catch{continue}let relPath=toPosixPath(relative(dir,fullPath)),ignorePath=isDir?`${relPath}/`:relPath;if(!ig.ignores(ignorePath)){if(isFile&&(entry.name.endsWith(".ts")||entry.name.endsWith(".js")))entries.push(fullPath);else if(isDir){let resolvedEntries=resolveExtensionEntries(fullPath);resolvedEntries&&entries.push(...resolvedEntries)}}}}catch{}return entries}function collectResourceFiles(dir,resourceType){return resourceType==="skills"?collectSkillEntries(dir,"pi"):resourceType==="extensions"?collectAutoExtensionEntries(dir):collectFiles(dir,FILE_PATTERNS[resourceType])}function hasManifestResourceFields(manifest){return RESOURCE_TYPES.some(resourceType=>manifest[resourceType]!==void 0)}function isPathInside(parent,child){let relativePath=relative(parent,child);return relativePath!==""&&relativePath!==".."&&!relativePath.startsWith(`..${sep2}`)&&!isAbsolute(relativePath)}function resolvePackageChangelogPath(packageRoot,manifest){let changelogPath=manifest?.changelogPath??"CHANGELOG.md";if(!changelogPath)return;let resolvedPath=resolve(packageRoot,changelogPath);if(!existsSync2(resolvedPath))return;let canonicalPackageRoot=canonicalizePath(packageRoot),canonicalChangelogPath=canonicalizePath(resolvedPath);if(isPathInside(canonicalPackageRoot,canonicalChangelogPath))try{return statSync(resolvedPath).isFile()?resolvedPath:void 0}catch{return}}function matchesAnyPattern(filePath,patterns,baseDir){let rel=toPosixPath(relative(baseDir,filePath)),name=basename(filePath),filePathPosix=toPosixPath(filePath),isSkillFile=name==="SKILL.md",parentDir=isSkillFile?dirname4(filePath):void 0,parentRel=isSkillFile?toPosixPath(relative(baseDir,parentDir)):void 0,parentName=isSkillFile?basename(parentDir):void 0,parentDirPosix=isSkillFile?toPosixPath(parentDir):void 0;return patterns.some(pattern=>{let normalizedPattern=toPosixPath(normalizePath(pattern));return minimatch(rel,normalizedPattern)||minimatch(name,normalizedPattern)||minimatch(filePathPosix,normalizedPattern)?!0:isSkillFile?minimatch(parentRel,normalizedPattern)||minimatch(parentName,normalizedPattern)||minimatch(parentDirPosix,normalizedPattern):!1})}function normalizeExactPattern(pattern){let normalized=pattern.startsWith("./")||pattern.startsWith(".\\")?pattern.slice(2):pattern;return toPosixPath(normalizePath(normalized))}function matchesAnyExactPattern(filePath,patterns,baseDir){if(patterns.length===0)return!1;let rel=toPosixPath(relative(baseDir,filePath)),name=basename(filePath),filePathPosix=toPosixPath(filePath),isSkillFile=name==="SKILL.md",parentDir=isSkillFile?dirname4(filePath):void 0,parentRel=isSkillFile?toPosixPath(relative(baseDir,parentDir)):void 0,parentDirPosix=isSkillFile?toPosixPath(parentDir):void 0;return patterns.some(pattern=>{let normalized=normalizeExactPattern(pattern);return normalized===rel||normalized===filePathPosix?!0:isSkillFile?normalized===parentRel||normalized===parentDirPosix:!1})}function getOverridePatterns(entries){return entries.filter(pattern=>pattern.startsWith("!")||pattern.startsWith("+")||pattern.startsWith("-"))}function isEnabledByOverrides(filePath,patterns,baseDir){let overrides=getOverridePatterns(patterns),excludes=overrides.filter(pattern=>pattern.startsWith("!")).map(pattern=>pattern.slice(1)),forceIncludes=overrides.filter(pattern=>pattern.startsWith("+")).map(pattern=>pattern.slice(1)),forceExcludes=overrides.filter(pattern=>pattern.startsWith("-")).map(pattern=>pattern.slice(1)),enabled=!0;return excludes.length>0&&matchesAnyPattern(filePath,excludes,baseDir)&&(enabled=!1),forceIncludes.length>0&&matchesAnyExactPattern(filePath,forceIncludes,baseDir)&&(enabled=!0),forceExcludes.length>0&&matchesAnyExactPattern(filePath,forceExcludes,baseDir)&&(enabled=!1),enabled}function applyPatterns(allPaths,patterns,baseDir){let includes=[],excludes=[],forceIncludes=[],forceExcludes=[];for(let p of patterns)p.startsWith("+")?forceIncludes.push(p.slice(1)):p.startsWith("-")?forceExcludes.push(p.slice(1)):p.startsWith("!")?excludes.push(p.slice(1)):includes.push(p);let result2;if(includes.length===0?result2=[...allPaths]:result2=allPaths.filter(filePath=>matchesAnyPattern(filePath,includes,baseDir)),excludes.length>0&&(result2=result2.filter(filePath=>!matchesAnyPattern(filePath,excludes,baseDir))),forceIncludes.length>0)for(let filePath of allPaths)!result2.includes(filePath)&&matchesAnyExactPattern(filePath,forceIncludes,baseDir)&&result2.push(filePath);return forceExcludes.length>0&&(result2=result2.filter(filePath=>!matchesAnyExactPattern(filePath,forceExcludes,baseDir))),new Set(result2)}function applyAutoloadDisabledPatterns(allPaths,patterns,baseDir){let result2=new Map;for(let pattern of patterns){let target=pattern.slice(pattern.startsWith("+")||pattern.startsWith("-")||pattern.startsWith("!")?1:0),enabled=!pattern.startsWith("-")&&!pattern.startsWith("!"),exact=pattern.startsWith("+")||pattern.startsWith("-");for(let filePath of allPaths)(exact?matchesAnyExactPattern(filePath,[target],baseDir):matchesAnyPattern(filePath,[target],baseDir))&&result2.set(filePath,enabled)}return result2}var DefaultPackageManager=class{constructor(options){this.cwd=resolvePath(options.cwd),this.agentDir=resolvePath(options.agentDir),this.settingsManager=options.settingsManager,this.builtinExtensions=options.builtinExtensions??[]}setProgressCallback(callback){this.progressCallback=callback}addSourceToSettings(source,options){let scope=options?.local?"project":"user",currentPackages=(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[],normalizedSource=this.normalizePackageSourceForSettings(source,scope),matchIndex=currentPackages.findIndex(existing=>this.packageSourcesMatch(existing,source,scope));if(matchIndex!==-1){let existing=currentPackages[matchIndex];if(this.getPackageSourceString(existing)===normalizedSource)return!1;let nextPackages2=[...currentPackages];return nextPackages2[matchIndex]=typeof existing=="string"?normalizedSource:{...existing,source:normalizedSource},scope==="project"?this.settingsManager.setProjectPackages(nextPackages2):this.settingsManager.setPackages(nextPackages2),!0}let nextPackages=[...currentPackages,normalizedSource];return scope==="project"?this.settingsManager.setProjectPackages(nextPackages):this.settingsManager.setPackages(nextPackages),!0}removeSourceFromSettings(source,options){let scope=options?.local?"project":"user",currentPackages=(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[],nextPackages=currentPackages.filter(existing=>!this.packageSourcesMatch(existing,source,scope));return nextPackages.length!==currentPackages.length?(scope==="project"?this.settingsManager.setProjectPackages(nextPackages):this.settingsManager.setPackages(nextPackages),!0):!1}getInstalledPath(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm"){let path10=this.getNpmInstallPath(parsed,scope);return existsSync2(path10)?path10:void 0}if(parsed.type==="git"){let path10=this.getGitInstallPath(parsed,scope);return existsSync2(path10)?path10:void 0}if(parsed.type==="local"){let baseDir=this.getBaseDirForScope(scope),path10=this.resolvePathFromBase(parsed.path,baseDir);return existsSync2(path10)?path10:void 0}}emitProgress(event){this.progressCallback?.(event)}async withProgress(action,source,message,operation){this.emitProgress({type:"start",action,source,message});try{await operation(),this.emitProgress({type:"complete",action,source})}catch(error){let errorMessage7=error instanceof Error?error.message:String(error);throw this.emitProgress({type:"error",action,source,message:errorMessage7}),error}}async resolve(onMissing){let accumulator=this.createAccumulator(),globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),allPackages=[];for(let pkg of projectSettings.packages??[])allPackages.push({pkg,scope:"project"});for(let pkg of globalSettings.packages??[])allPackages.push({pkg,scope:"user"});let packageSources=this.dedupePackages(allPackages),installFailures=await this.resolvePackageSources(packageSources,accumulator,onMissing),globalBaseDir=this.agentDir,projectBaseDir=join5(this.cwd,CONFIG_DIR_NAME);for(let resourceType of RESOURCE_TYPES){let target=this.getTargetMap(accumulator,resourceType),globalEntries=globalSettings[resourceType]??[],projectEntries=projectSettings[resourceType]??[];this.resolveLocalEntries(projectEntries,resourceType,target,{source:"local",scope:"project",origin:"top-level"},projectBaseDir),this.resolveLocalEntries(globalEntries,resourceType,target,{source:"local",scope:"user",origin:"top-level"},globalBaseDir)}this.addAutoDiscoveredResources(accumulator,globalSettings,projectSettings,globalBaseDir,projectBaseDir);for(let name of this.builtinExtensions){let path10=`${BUILTIN_PATH_PREFIX}${name}`,projectEnabled=applyAutoloadDisabledPatterns([path10],getOverridePatterns(projectSettings.extensions??[]),projectBaseDir).get(path10);this.addResource(accumulator.extensions,path10,{source:"builtin",scope:projectEnabled===void 0?"user":"project",origin:"top-level"},projectEnabled??isEnabledByOverrides(path10,globalSettings.extensions??[],globalBaseDir))}return{...this.toResolvedPaths(accumulator),installFailures}}async resolveExtensionSources(sources,options){let accumulator=this.createAccumulator(),scope=options?.temporary?"temporary":options?.local?"project":"user";for(let source of sources.filter(source2=>source2.startsWith(BUILTIN_PATH_PREFIX)))this.addResource(accumulator.extensions,source,{source:"builtin",scope,origin:"top-level"},!0);let packageSources=sources.filter(source=>!source.startsWith(BUILTIN_PATH_PREFIX)).map(source=>({pkg:source,scope})),installFailures=await this.resolvePackageSources(packageSources,accumulator);return{...this.toResolvedPaths(accumulator),installFailures}}listConfiguredPackages(){let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),configuredPackages=[];for(let pkg of globalSettings.packages??[]){let source=typeof pkg=="string"?pkg:pkg.source;configuredPackages.push({source,scope:"user",filtered:typeof pkg=="object",installedPath:this.getInstalledPath(source,"user")})}for(let pkg of projectSettings.packages??[]){let source=typeof pkg=="string"?pkg:pkg.source;configuredPackages.push({source,scope:"project",filtered:typeof pkg=="object",installedPath:this.getInstalledPath(source,"project")})}return configuredPackages}async install(source,options){let parsed=this.parseSource(source),scope=options?.local?"project":"user";this.assertProjectTrustedForScope(scope),await this.withProgress("install",source,`Installing ${source}...`,async()=>{if(parsed.type==="npm"){await this.installNpm(parsed,scope,!1);return}if(parsed.type==="git"){await this.installGit(parsed,scope);return}if(parsed.type==="local"){let resolved=this.resolvePath(parsed.path);if(!existsSync2(resolved))throw new Error(`Path does not exist: ${resolved}`);return}throw new Error(`Unsupported install source: ${source}`)})}async installAndPersist(source,options){await this.install(source,options),this.addSourceToSettings(source,options)}async remove(source,options){let parsed=this.parseSource(source),scope=options?.local?"project":"user";this.assertProjectTrustedForScope(scope),await this.withProgress("remove",source,`Removing ${source}...`,async()=>{if(parsed.type==="npm"){await this.uninstallNpm(parsed,scope);return}if(parsed.type==="git"){await this.removeGit(parsed,scope);return}if(parsed.type!=="local")throw new Error(`Unsupported remove source: ${source}`)})}async removeAndPersist(source,options){return await this.remove(source,options),this.removeSourceFromSettings(source,options)}async update(source){let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),identity=source?this.getPackageIdentity(source):void 0,matched=!1,updateSources=[];for(let pkg of globalSettings.packages??[]){let sourceStr=typeof pkg=="string"?pkg:pkg.source;identity&&this.getPackageIdentity(sourceStr,"user")!==identity||(matched=!0,updateSources.push({source:sourceStr,scope:"user"}))}for(let pkg of projectSettings.packages??[]){let sourceStr=typeof pkg=="string"?pkg:pkg.source;identity&&this.getPackageIdentity(sourceStr,"project")!==identity||(matched=!0,updateSources.push({source:sourceStr,scope:"project"}))}if(source&&!matched)throw new Error(this.buildNoMatchingPackageMessage(source,[...globalSettings.packages??[],...projectSettings.packages??[]]));await this.updateConfiguredSources(updateSources)}async updateConfiguredSources(sources){if(isOfflineModeEnabled()||sources.length===0)return;let npmCandidates=[],gitCandidates=[];for(let entry of sources){let parsed=this.parseSource(entry.source);parsed.type==="npm"?parsed.pinned||npmCandidates.push({...entry,parsed}):parsed.type==="git"&&gitCandidates.push({...entry,parsed})}let npmCheckTasks=npmCandidates.map(entry=>async()=>{let check=await this.shouldUpdateNpmSource(entry.parsed,entry.scope);return{entry:{...entry,installedVersion:check.installedVersion,targetVersion:check.targetVersion},shouldUpdate:check.shouldUpdate}}),npmCheckResults=await this.runWithConcurrency(npmCheckTasks,UPDATE_CHECK_CONCURRENCY),userNpmUpdates=[],projectNpmUpdates=[];for(let result2 of npmCheckResults)result2.shouldUpdate&&(result2.entry.scope==="user"?userNpmUpdates.push(result2.entry):projectNpmUpdates.push(result2.entry));let tasks=[];if(userNpmUpdates.length>0&&tasks.push(this.updateNpmBatch(userNpmUpdates,"user")),projectNpmUpdates.length>0&&tasks.push(this.updateNpmBatch(projectNpmUpdates,"project")),gitCandidates.length>0){let gitTasks=gitCandidates.map(entry=>async()=>this.withProgress("update",entry.source,`Updating ${entry.source}...`,async()=>{await this.updateGit(entry.parsed,entry.scope)}));tasks.push(this.runWithConcurrency(gitTasks,GIT_UPDATE_CONCURRENCY).then(()=>{}))}await Promise.all(tasks)}async shouldUpdateNpmSource(source,scope){let installedPath=this.getManagedNpmInstallPath(source,scope),installedVersion=existsSync2(installedPath)?this.getInstalledNpmVersion(installedPath):void 0;if(!installedVersion)return{shouldUpdate:!0};try{let targetVersion=await this.getLatestNpmVersion(source.version?source.spec:source.name,source.range);return{shouldUpdate:(0,import_semver.gt)(targetVersion,installedVersion),installedVersion,targetVersion}}catch{return{shouldUpdate:!0,installedVersion}}}async updateNpmBatch(sources,scope){if(sources.length===0)return;let sourceLabel=sources.length===1?sources[0].source:`${scope} npm packages`,message=sources.length===1?`Updating ${sources[0].source}...`:`Updating ${scope} npm packages...`,specs=sources.map(entry=>entry.parsed.version?entry.parsed.spec:`${entry.parsed.name}@latest`);await this.withProgress("update",sourceLabel,message,async()=>{await this.installNpmBatch(specs,scope)}),this.reportUnchangedNpmUpdates(sources,scope)}reportUnchangedNpmUpdates(sources,scope){for(let entry of sources){if(!entry.installedVersion||!entry.targetVersion)continue;let installedPath=this.getManagedNpmInstallPath(entry.parsed,scope),versionAfter=this.getInstalledNpmVersion(installedPath);versionAfter===entry.installedVersion&&this.emitProgress({type:"progress",action:"update",source:entry.source,message:`${entry.source} is still ${versionAfter} (registry reports ${entry.targetVersion}); npm registry metadata may be stale, try again in a few minutes`})}}async installNpmBatch(specs,scope){let installRoot=this.getNpmInstallRoot(scope,!1);this.ensureNpmProject(installRoot),await this.runNpmCommand(this.getNpmInstallArgs(specs,installRoot))}async checkForAvailableUpdates(){if(isOfflineModeEnabled())return[];let globalSettings=this.settingsManager.getGlobalSettings(),projectSettings=this.settingsManager.getProjectSettings(),allPackages=[];for(let pkg of projectSettings.packages??[])allPackages.push({pkg,scope:"project"});for(let pkg of globalSettings.packages??[])allPackages.push({pkg,scope:"user"});let checks=this.dedupePackages(allPackages).filter(entry=>entry.scope!=="temporary").map(entry=>async()=>{let source=typeof entry.pkg=="string"?entry.pkg:entry.pkg.source,parsed=this.parseSource(source);if(parsed.type==="local"||parsed.pinned)return;if(parsed.type==="npm"){let installedPath2=this.getNpmInstallPath(parsed,entry.scope);return!existsSync2(installedPath2)||!await this.npmHasAvailableUpdate(parsed,installedPath2)?void 0:{source,displayName:parsed.name,type:"npm",scope:entry.scope}}let installedPath=this.getGitInstallPath(parsed,entry.scope);if(!(!existsSync2(installedPath)||!await this.gitHasAvailableUpdate(installedPath)))return{source,displayName:`${parsed.host}/${parsed.path}`,type:"git",scope:entry.scope}});return(await this.runWithConcurrency(checks,UPDATE_CHECK_CONCURRENCY)).filter(result2=>result2!==void 0)}async resolvePackageSources(sources,accumulator,onMissing){let installFailures=[];for(let{pkg,scope}of sources){let sourceStr=typeof pkg=="string"?pkg:pkg.source,filter2=typeof pkg=="object"?pkg:void 0,deltaBase=this.findAutoloadDeltaBase(pkg,scope,sources),resolvedSource=deltaBase?.source??sourceStr,resolvedScope=deltaBase?.scope??scope,parsed=this.parseSource(resolvedSource),metadata={source:sourceStr,scope,origin:"package"};if(parsed.type==="local"){let baseDir=this.getBaseDirForScope(resolvedScope);this.resolveLocalExtensionSource(parsed,accumulator,filter2,metadata,baseDir);continue}let installMissing=async()=>{if(isOfflineModeEnabled())return!1;if(onMissing){let action=await onMissing(resolvedSource);if(action==="skip")return!1;if(action==="error")throw new Error(`Missing source: ${resolvedSource}`)}try{return await this.installParsedSource(parsed,resolvedScope),!0}catch(error){return installFailures.push({source:resolvedSource,scope:resolvedScope,message:error instanceof Error?error.message:String(error)}),!1}};if(parsed.type==="npm"){let installedPath=this.getNpmInstallPath(parsed,resolvedScope),needsInstall=!existsSync2(installedPath)||!await this.installedNpmMatchesConfiguredVersion(parsed,installedPath);if(!needsInstall&&resolvedScope==="temporary"&&!parsed.pinned&&await this.npmHasAvailableUpdate(parsed,installedPath)){let spec=parsed.version?parsed.spec:`${parsed.name}@latest`;try{await this.installNpm({...parsed,spec},resolvedScope,!0)}catch{}}if(needsInstall){if(!await installMissing())continue;installedPath=this.getNpmInstallPath(parsed,resolvedScope)}metadata.baseDir=installedPath,metadata.packageRoot=installedPath,this.collectPackageResources(installedPath,accumulator,filter2,metadata);continue}if(parsed.type==="git"){let installedPath=this.getGitInstallPath(parsed,resolvedScope);if(existsSync2(installedPath))resolvedScope==="temporary"&&!isOfflineModeEnabled()&&await this.refreshTemporaryGitSource(parsed,resolvedSource,installedPath);else if(!await installMissing())continue;metadata.baseDir=installedPath,metadata.packageRoot=installedPath,this.collectPackageResources(installedPath,accumulator,filter2,metadata)}}return installFailures}findAutoloadDeltaBase(pkg,scope,sources){if(scope!=="project"||typeof pkg!="object"||pkg.autoload!==!1)return;let identity=this.getPackageIdentity(pkg.source,scope),userEntry=sources.find(entry=>entry.scope==="user"&&this.getPackageIdentity(this.getPackageSourceString(entry.pkg),"user")===identity);return userEntry?{source:this.getPackageSourceString(userEntry.pkg),scope:"user"}:void 0}resolveLocalExtensionSource(source,accumulator,filter2,metadata,baseDir){let resolved=this.resolvePathFromBase(source.path,baseDir);if(existsSync2(resolved))try{let stats=statSync(resolved);if(stats.isFile()){metadata.baseDir=dirname4(resolved),this.addResource(accumulator.extensions,resolved,metadata,!0);return}stats.isDirectory()&&(metadata.baseDir=resolved,metadata.packageRoot=resolved,this.collectPackageResources(resolved,accumulator,filter2,metadata)||this.addResource(accumulator.extensions,resolved,metadata,!0))}catch{return}}async installParsedSource(parsed,scope){if(parsed.type==="npm"){await this.installNpm(parsed,scope,scope==="temporary");return}if(parsed.type==="git"){await this.installGit(parsed,scope);return}}getPackageSourceString(pkg){return typeof pkg=="string"?pkg:pkg.source}getSourceMatchKeyForInput(source){let parsed=this.parseSource(source);return parsed.type==="npm"?`npm:${parsed.name}`:parsed.type==="git"?`git:${parsed.host}/${parsed.path}`:`local:${getPathComparisonKey(this.resolvePath(parsed.path))}`}getSourceMatchKeyForSettings(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm")return`npm:${parsed.name}`;if(parsed.type==="git")return`git:${parsed.host}/${parsed.path}`;let baseDir=this.getBaseDirForScope(scope);return`local:${getPathComparisonKey(this.resolvePathFromBase(parsed.path,baseDir))}`}buildNoMatchingPackageMessage(source,configuredPackages){let suggestion=this.findSuggestedConfiguredSource(source,configuredPackages);return suggestion?`No matching package found for ${source}. Did you mean ${suggestion}?`:`No matching package found for ${source}`}findSuggestedConfiguredSource(source,configuredPackages){let trimmedSource=source.trim(),suggestions=new Set;for(let pkg of configuredPackages){let sourceStr=this.getPackageSourceString(pkg),parsed=this.parseSource(sourceStr);if(parsed.type==="npm"){(trimmedSource===parsed.name||trimmedSource===parsed.spec)&&suggestions.add(sourceStr);continue}if(parsed.type==="git"){let shorthand=`${parsed.host}/${parsed.path}`,shorthandWithRef=parsed.ref?`${shorthand}@${parsed.ref}`:void 0;(trimmedSource===shorthand||shorthandWithRef&&trimmedSource===shorthandWithRef)&&suggestions.add(sourceStr)}}return suggestions.values().next().value}packageSourcesMatch(existing,inputSource,scope){let left=this.getSourceMatchKeyForSettings(this.getPackageSourceString(existing),scope),right=this.getSourceMatchKeyForInput(inputSource);return left===right}normalizePackageSourceForSettings(source,scope){let parsed=this.parseSource(source);if(parsed.type!=="local")return source;let baseDir=this.getBaseDirForScope(scope),resolved=this.resolvePath(parsed.path);return relative(baseDir,resolved)||"."}parseSource(source){if(source.startsWith("npm:")){let spec=source.slice(4).trim(),{name,version:version2}=this.parseNpmSpec(spec);return{type:"npm",spec,name,version:version2,range:getNpmVersionRange(version2),pinned:isExactNpmVersion(version2)}}if(isLocalPath(source))return{type:"local",path:source};let gitParsed=parseGitUrl(source);return gitParsed||{type:"local",path:source}}async installedNpmMatchesConfiguredVersion(source,installedPath){let installedVersion=this.getInstalledNpmVersion(installedPath);return installedVersion?source.range?(0,import_semver.satisfies)(installedVersion,source.range):!0:!1}async npmHasAvailableUpdate(source,installedPath){if(isOfflineModeEnabled())return!1;let installedVersion=this.getInstalledNpmVersion(installedPath);if(!installedVersion)return!1;try{let targetVersion=await this.getLatestNpmVersion(source.version?source.spec:source.name,source.range);return(0,import_semver.gt)(targetVersion,installedVersion)}catch{return!1}}getInstalledNpmVersion(installedPath){let packageJsonPath=join5(installedPath,"package.json");if(existsSync2(packageJsonPath))try{let content=readFileSync3(packageJsonPath,"utf-8");return JSON.parse(stripBom(content)).version}catch{return}}async getLatestNpmVersion(packageSpec,range2){let npmCommand=this.getNpmCommand(),raw=(await this.runCommandCapture(npmCommand.command,[...npmCommand.args,"view",packageSpec,"version","--json"],{cwd:this.cwd,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!raw)throw new Error("Empty response from npm view");let parsed=JSON.parse(raw);if(typeof parsed=="string")return parsed;if(Array.isArray(parsed)){let versions=parsed.filter(value=>typeof value=="string"&&value.length>0),latest=range2?(0,import_semver.maxSatisfying)(versions,range2):[...versions].sort(import_semver.rcompare)[0];if(latest)return latest}throw new Error("Unexpected response from npm view")}async gitHasAvailableUpdate(installedPath){if(isOfflineModeEnabled())return!1;try{let localHead=await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),remoteHead=await this.getRemoteGitHead(installedPath);return localHead.trim()!==remoteHead.trim()}catch{return!1}}async getRemoteGitHead(installedPath){let upstreamRef=await this.getGitUpstreamRef(installedPath);if(upstreamRef){let match3=(await this.runGitRemoteCommand(installedPath,["ls-remote","origin",upstreamRef])).match(/^([0-9a-f]{40})\s+/m);if(match3?.[1])return match3[1]}let match2=(await this.runGitRemoteCommand(installedPath,["ls-remote","origin","HEAD"])).match(/^([0-9a-f]{40})\s+HEAD$/m);if(!match2?.[1])throw new Error("Failed to determine remote HEAD");return match2[1]}async getLocalGitUpdateTarget(installedPath){try{let trimmedUpstream=(await this.runCommandCapture("git",["rev-parse","--abbrev-ref","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!trimmedUpstream.startsWith("origin/"))throw new Error(`Unsupported upstream remote: ${trimmedUpstream}`);let branch=trimmedUpstream.slice(7);if(!branch)throw new Error("Missing upstream branch name");return{ref:"@{upstream}",head:await this.runCommandCapture("git",["rev-parse","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),fetchArgs:["fetch","--prune","--no-tags","origin",`+refs/heads/${branch}:refs/remotes/origin/${branch}`]}}catch{await this.runCommand("git",["remote","set-head","origin","-a"],{cwd:installedPath}).catch(()=>{});let head=await this.runCommandCapture("git",["rev-parse","origin/HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}),branch=(await this.runCommandCapture("git",["symbolic-ref","refs/remotes/origin/HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS}).catch(()=>"")).trim().replace(/^refs\/remotes\/origin\//,"");return branch?{ref:"origin/HEAD",head,fetchArgs:["fetch","--prune","--no-tags","origin",`+refs/heads/${branch}:refs/remotes/origin/${branch}`]}:{ref:"origin/HEAD",head,fetchArgs:["fetch","--prune","--no-tags","origin","+HEAD:refs/remotes/origin/HEAD"]}}}async getGitUpstreamRef(installedPath){try{let trimmed=(await this.runCommandCapture("git",["rev-parse","--abbrev-ref","@{upstream}"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim();if(!trimmed.startsWith("origin/"))return;let branch=trimmed.slice(7);return branch?`refs/heads/${branch}`:void 0}catch{return}}runGitRemoteCommand(installedPath,args){return this.runCommandCapture("git",args,{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS,env:{GIT_TERMINAL_PROMPT:"0"}})}async runWithConcurrency(tasks,limit){if(tasks.length===0)return[];let results=new Array(tasks.length),nextIndex=0,workerCount=Math.max(1,Math.min(limit,tasks.length)),worker=async()=>{for(;;){let index3=nextIndex;if(nextIndex+=1,index3>=tasks.length)return;results[index3]=await tasks[index3]()}};return await Promise.all(Array.from({length:workerCount},()=>worker())),results}getPackageIdentity(source,scope){let parsed=this.parseSource(source);if(parsed.type==="npm")return`npm:${parsed.name}`;if(parsed.type==="git")return`git:${parsed.host}/${parsed.path}`;if(scope){let baseDir=this.getBaseDirForScope(scope);return`local:${getPathComparisonKey(this.resolvePathFromBase(parsed.path,baseDir))}`}return`local:${getPathComparisonKey(this.resolvePath(parsed.path))}`}dedupePackages(packages){let result2=[],seen=new Map;for(let entry of packages){let identity=this.getPackageIdentity(this.getPackageSourceString(entry.pkg),entry.scope),index3=seen.get(identity);if(index3===void 0){seen.set(identity,result2.length),result2.push(entry);continue}let existing=result2[index3];existing?.scope==="project"&&entry.scope==="user"?typeof existing.pkg=="object"&&existing.pkg.autoload===!1&&result2.push(entry):entry.scope==="project"&&(result2[index3]=entry)}return result2}parseNpmSpec(spec){let match2=spec.match(/^(@?[^@]+(?:\/[^@]+)?)(?:@(.+))?$/);if(!match2)return{name:spec};let name=match2[1]??spec,version2=match2[2];return{name,version:version2}}assertProjectTrustedForScope(scope){if(scope==="project"&&!this.settingsManager.isProjectTrusted())throw new Error("Project is not trusted; refusing to access project package storage")}getNpmCommand(){let configuredCommand=this.settingsManager.getNpmCommand();if(!configuredCommand||configuredCommand.length===0)return{command:"npm",args:[]};let[command,...args]=configuredCommand;if(!command)throw new Error("Invalid npmCommand: first array entry must be a non-empty command");return{command,args}}getPackageManagerName(){let npmCommand=this.getNpmCommand(),normalizeCommandName=command=>basename(command).replace(/\.(cmd|exe)$/i,""),supportedPackageManagers=new Set(["npm","pnpm","bun"]),directCommand=normalizeCommandName(npmCommand.command),separatorIndex=npmCommand.args.lastIndexOf("--");if(separatorIndex>=0){let wrappedCommand=npmCommand.args[separatorIndex+1];return wrappedCommand?normalizeCommandName(wrappedCommand):directCommand}if(supportedPackageManagers.has(directCommand))return directCommand;let wrappedPackageManagers=[...new Set(npmCommand.args.map(normalizeCommandName).filter(command=>supportedPackageManagers.has(command)))];if(wrappedPackageManagers.length>1)throw new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(", ")}`);return wrappedPackageManagers[0]??directCommand}async runNpmCommand(args,options){let npmCommand=this.getNpmCommand();await this.runCommand(npmCommand.command,[...npmCommand.args,...args],options)}getGitDependencyInstallArgs(){switch(this.getPackageManagerName()){case"bun":return["install","--omit=dev","--omit=peer"];case"pnpm":return["install","--prod","--config.auto-install-peers=false","--config.strict-peer-dependencies=false","--config.strict-dep-builds=false"];case"npm":return["install","--omit=dev","--legacy-peer-deps","--no-audit","--no-fund"];default:return["install"]}}runNpmCommandSync(args){let npmCommand=this.getNpmCommand();return this.runCommandSync(npmCommand.command,[...npmCommand.args,...args])}getNpmInstallArgs(specs,root){let installRoot=existsSync2(root)?realpathSync(root):root,packageManagerName=this.getPackageManagerName();return packageManagerName==="bun"?["install",...specs,"--cwd",installRoot,"--omit=peer"]:packageManagerName==="pnpm"?["install",...specs,"--prefix",installRoot,"--config.auto-install-peers=false","--config.strict-peer-dependencies=false","--config.strict-dep-builds=false"]:["install",...specs,"--prefix",installRoot,"--legacy-peer-deps","--no-audit","--no-fund"]}async installNpm(source,scope,temporary){let installRoot=this.getNpmInstallRoot(scope,temporary);this.ensureNpmProject(installRoot),await this.runNpmCommand(this.getNpmInstallArgs([source.spec],installRoot))}async uninstallNpm(source,scope){let root=this.getNpmInstallRoot(scope,!1);if(!existsSync2(root))return;let installRoot=realpathSync(root),packageManagerName=this.getPackageManagerName();if(packageManagerName==="bun"){await this.runNpmCommand(["uninstall",source.name,"--cwd",installRoot]);return}let args=["uninstall",source.name,"--prefix",installRoot];packageManagerName!=="pnpm"&&args.push("--legacy-peer-deps","--no-audit","--no-fund"),await this.runNpmCommand(args)}async installGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);if(existsSync2(targetDir)){if(source.ref){await this.ensureGitRef(targetDir,["fetch","origin",source.ref],"FETCH_HEAD");return}let target=await this.getLocalGitUpdateTarget(targetDir);await this.ensureGitRef(targetDir,target.fetchArgs,target.ref);return}let gitRoot=this.getGitInstallRoot(scope);gitRoot&&this.ensureGitIgnore(gitRoot),mkdirSync2(dirname4(targetDir),{recursive:!0}),rmSync(this.getGitUpdateMarkerPath(targetDir),{force:!0});try{await this.runCommand("git",["clone",source.repo,targetDir]),source.ref&&await this.runCommand("git",["checkout",source.ref],{cwd:targetDir});let packageJsonPath=join5(targetDir,"package.json");existsSync2(packageJsonPath)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir})}catch(error){throw rmSync(targetDir,{recursive:!0,force:!0}),this.pruneEmptyGitParents(targetDir,gitRoot),error}}async updateGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);if(!existsSync2(targetDir)){await this.installGit(source,scope);return}if(source.ref){await this.ensureGitRef(targetDir,["fetch","origin",source.ref],"FETCH_HEAD");return}let target=await this.getLocalGitUpdateTarget(targetDir);await this.ensureGitRef(targetDir,target.fetchArgs,target.ref)}hasMissingGitDependencies(targetDir){let packageJsonPath=join5(targetDir,"package.json");if(!existsSync2(packageJsonPath))return!1;try{let manifest=JSON.parse(stripBom(readFileSync3(packageJsonPath,"utf-8")));if(!manifest.dependencies||typeof manifest.dependencies!="object"||Array.isArray(manifest.dependencies))return!1;let nodeModulesDir=resolve(targetDir,"node_modules");return Object.keys(manifest.dependencies).some(name=>{let dependencyPath=resolve(nodeModulesDir,name);return dependencyPath.startsWith(`${nodeModulesDir}${sep2}`)?!existsSync2(dependencyPath):!1})}catch{return!1}}async repairMissingGitDependencies(targetDir){this.hasMissingGitDependencies(targetDir)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir})}getGitUpdateMarkerPath(targetDir){return join5(dirname4(targetDir),`.${basename(targetDir)}.pi-update-incomplete`)}async cleanAndInstallGitDependencies(targetDir,markerPath){let cleaned=!0;try{await this.runCommand("git",["clean","-fdx"],{cwd:targetDir})}catch(error){cleaned=!1;let reason=error instanceof Error?error.message:String(error);this.emitProgress({type:"progress",action:"update",source:targetDir,message:`Could not remove all untracked files in ${targetDir} (${reason}). Files may be in use by another pi session; close it and run the update again.`})}let packageJsonPath=join5(targetDir,"package.json");existsSync2(packageJsonPath)&&await this.runNpmCommand(this.getGitDependencyInstallArgs(),{cwd:targetDir}),cleaned&&rmSync(markerPath,{force:!0})}async ensureGitRef(targetDir,fetchArgs,ref){await this.runCommand("git",fetchArgs,{cwd:targetDir});let localHead=await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:targetDir,timeoutMs:NETWORK_TIMEOUT_MS}),commitRef=`${ref}^{commit}`,targetHead=await this.runCommandCapture("git",["rev-parse",commitRef],{cwd:targetDir,timeoutMs:NETWORK_TIMEOUT_MS}),markerPath=this.getGitUpdateMarkerPath(targetDir);if(localHead.trim()===targetHead.trim()){existsSync2(markerPath)?await this.cleanAndInstallGitDependencies(targetDir,markerPath):await this.repairMissingGitDependencies(targetDir);return}writeFileSync2(markerPath,"","utf-8"),await this.runCommand("git",["reset","--hard",commitRef],{cwd:targetDir}),await this.cleanAndInstallGitDependencies(targetDir,markerPath)}async refreshTemporaryGitSource(source,sourceStr,installedPath){if(!isOfflineModeEnabled())try{if(source.ref&&/^[0-9a-f]{7,64}$/i.test(source.ref)&&(await this.runCommandCapture("git",["rev-parse","HEAD"],{cwd:installedPath,timeoutMs:NETWORK_TIMEOUT_MS})).trim().toLowerCase().startsWith(source.ref.toLowerCase()))return;await this.withProgress("pull",sourceStr,`Refreshing ${sourceStr}...`,async()=>{await this.updateGit(source,"temporary")})}catch{}}async removeGit(source,scope){let targetDir=this.getGitInstallPath(source,scope);rmSync(targetDir,{recursive:!0,force:!0}),rmSync(this.getGitUpdateMarkerPath(targetDir),{force:!0}),this.pruneEmptyGitParents(targetDir,this.getGitInstallRoot(scope))}pruneEmptyGitParents(targetDir,installRoot){if(!installRoot)return;let resolvedRoot=resolve(installRoot),current=dirname4(targetDir);for(;current.startsWith(resolvedRoot)&&current!==resolvedRoot;){if(!existsSync2(current)){current=dirname4(current);continue}if(readdirSync(current).length>0)break;try{rmSync(current,{recursive:!0,force:!0})}catch{break}current=dirname4(current)}}ensureNpmProject(installRoot){existsSync2(installRoot)||mkdirSync2(installRoot,{recursive:!0}),markPathIgnoredByCloudSync(installRoot),this.ensureGitIgnore(installRoot);let packageJsonPath=join5(installRoot,"package.json");existsSync2(packageJsonPath)||writeFileSync2(packageJsonPath,JSON.stringify({name:"pi-extensions",private:!0},null,2),"utf-8")}ensureGitIgnore(dir){existsSync2(dir)||mkdirSync2(dir,{recursive:!0});let ignorePath=join5(dir,".gitignore");existsSync2(ignorePath)||writeFileSync2(ignorePath,`*
491
491
  !.gitignore
492
492
  `,"utf-8")}getNpmInstallRoot(scope,temporary){return temporary?this.getTemporaryDir("npm"):scope==="project"?(this.assertProjectTrustedForScope(scope),join5(this.cwd,CONFIG_DIR_NAME,"npm")):join5(this.agentDir,"npm")}getGlobalNpmRoot(){let npmCommand=this.getNpmCommand(),commandKey=[npmCommand.command,...npmCommand.args].join("\0");if(this.globalNpmRoot&&this.globalNpmRootCommandKey===commandKey)return this.globalNpmRoot;if(this.getPackageManagerName()==="bun"){let binDir=this.runNpmCommandSync(["pm","bin","-g"]).trim();this.globalNpmRoot=join5(dirname4(binDir),"install","global","node_modules")}else this.globalNpmRoot=this.runNpmCommandSync(["root","-g"]).trim();return this.globalNpmRootCommandKey=commandKey,this.globalNpmRoot}getPnpmGlobalPackagePath(packageName){if(this.getPackageManagerName()!=="pnpm")return;let output=this.runNpmCommandSync(["list","-g","--depth","0","--json"]),entries=JSON.parse(output);for(let entry of entries){let path10=entry.dependencies?.[packageName]?.path;if(path10)return path10}}getManagedNpmInstallPath(source,scope){return scope==="temporary"?join5(this.getTemporaryDir("npm"),"node_modules",source.name):scope==="project"?(this.assertProjectTrustedForScope(scope),join5(this.cwd,CONFIG_DIR_NAME,"npm","node_modules",source.name)):join5(this.agentDir,"npm","node_modules",source.name)}getLegacyGlobalNpmInstallPath(source){try{return this.getPnpmGlobalPackagePath(source.name)??join5(this.getGlobalNpmRoot(),source.name)}catch{return}}getNpmInstallPath(source,scope){let managedPath=this.getManagedNpmInstallPath(source,scope);if(scope!=="user"||existsSync2(managedPath))return managedPath;let legacyPath=this.getLegacyGlobalNpmInstallPath(source);return legacyPath&&existsSync2(legacyPath)?legacyPath:managedPath}getGitInstallPath(source,scope){if(scope==="temporary")return this.getTemporaryDir(`git-${source.host}`,source.path,source.ref);let installRoot=this.getGitInstallRoot(scope);if(!installRoot)throw new Error("Missing git install root");return this.resolveManagedPath(installRoot,source.host,source.path)}getGitInstallRoot(scope){if(scope!=="temporary")return scope==="project"?(this.assertProjectTrustedForScope(scope),join5(this.cwd,CONFIG_DIR_NAME,"git")):join5(this.agentDir,"git")}getTemporaryDir(prefix,suffix,ref){let root=this.resolveManagedPath(getExtensionTempFolder(this.agentDir),prefix),hash2=createHash("sha256").update(`${prefix}-${suffix??""}${ref?`@${ref}`:""}`).digest("hex").slice(0,8);return this.resolveManagedPath(root,hash2,suffix??"")}resolveManagedPath(root,...parts){let resolvedRoot=resolve(root),resolvedPath=resolve(resolvedRoot,...parts);if(resolvedPath!==resolvedRoot&&!resolvedPath.startsWith(`${resolvedRoot}${sep2}`))throw new Error(`Refusing to use path outside package install root: ${resolvedPath}`);return resolvedPath}getBaseDirForScope(scope){return scope==="project"?(this.assertProjectTrustedForScope(scope),join5(this.cwd,CONFIG_DIR_NAME)):scope==="user"?this.agentDir:this.cwd}getTopLevelBaseDirs(scope){let userAgentsDir=join5(getHomeDir(),".agents");if(scope==="user")return[this.agentDir,userAgentsDir];let projectAgentsDirs=collectAncestorAgentsSkillDirs(this.cwd).map(dir=>dirname4(dir)).filter(dir=>resolve(dir)!==resolve(userAgentsDir));return[join5(this.cwd,CONFIG_DIR_NAME),...projectAgentsDirs]}resolvePath(input2){return resolvePath(input2,this.cwd,{homeDir:getHomeDir(),trim:!0})}resolvePathFromBase(input2,baseDir){return resolvePath(input2,baseDir,{homeDir:getHomeDir(),trim:!0})}collectPackageResources(packageRoot,accumulator,filter2,metadata){let manifest=readPiManifest(join5(packageRoot,"package.json")),changelogPath=resolvePackageChangelogPath(packageRoot,manifest);if(changelogPath?metadata.changelogPath=changelogPath:delete metadata.changelogPath,filter2){for(let resourceType of RESOURCE_TYPES){let patterns=filter2[resourceType],target=this.getTargetMap(accumulator,resourceType);filter2.autoload===!1?this.applyPackageDeltaFilter(packageRoot,patterns??[],resourceType,target,metadata):patterns!==void 0?this.applyPackageFilter(packageRoot,patterns,resourceType,target,metadata):this.collectDefaultResources(packageRoot,resourceType,target,metadata)}return!0}if(manifest&&hasManifestResourceFields(manifest)){for(let resourceType of RESOURCE_TYPES){let entries=manifest[resourceType];this.addManifestEntries(entries,packageRoot,resourceType,this.getTargetMap(accumulator,resourceType),metadata)}return!0}let hasAnyDir=!1;for(let resourceType of RESOURCE_TYPES){let dir=join5(packageRoot,resourceType);if(existsSync2(dir)){let files=collectResourceFiles(dir,resourceType);for(let f of files)this.addResource(this.getTargetMap(accumulator,resourceType),f,metadata,!0);hasAnyDir=!0}}return hasAnyDir}collectDefaultResources(packageRoot,resourceType,target,metadata){let entries=readPiManifest(join5(packageRoot,"package.json"))?.[resourceType];if(entries){this.addManifestEntries(entries,packageRoot,resourceType,target,metadata);return}let dir=join5(packageRoot,resourceType);if(existsSync2(dir)){let files=collectResourceFiles(dir,resourceType);for(let f of files)this.addResource(target,f,metadata,!0)}}applyPackageFilter(packageRoot,userPatterns,resourceType,target,metadata){let{allFiles}=this.collectManifestFiles(packageRoot,resourceType);if(userPatterns.length===0){for(let f of allFiles)this.addResource(target,f,metadata,!1);return}let enabledByUser=applyPatterns(allFiles,userPatterns,packageRoot);for(let f of allFiles){let enabled=enabledByUser.has(f);this.addResource(target,f,metadata,enabled)}}applyPackageDeltaFilter(packageRoot,userPatterns,resourceType,target,metadata){if(userPatterns.length===0)return;let{allFiles}=this.collectManifestFiles(packageRoot,resourceType),enabledByUser=applyAutoloadDisabledPatterns(allFiles,userPatterns,packageRoot);for(let[filePath,enabled]of enabledByUser)this.addResource(target,filePath,metadata,enabled)}collectManifestFiles(packageRoot,resourceType){let entries=readPiManifest(join5(packageRoot,"package.json"))?.[resourceType];if(entries&&entries.length>0){let allFiles2=this.collectFilesFromManifestEntries(entries,packageRoot,resourceType),manifestPatterns=entries.filter(isOverridePattern),enabledByManifest=manifestPatterns.length>0?applyPatterns(allFiles2,manifestPatterns,packageRoot):new Set(allFiles2);return{allFiles:Array.from(enabledByManifest),enabledByManifest}}let conventionDir=join5(packageRoot,resourceType);if(!existsSync2(conventionDir))return{allFiles:[],enabledByManifest:new Set};let allFiles=collectResourceFiles(conventionDir,resourceType);return{allFiles,enabledByManifest:new Set(allFiles)}}addManifestEntries(entries,root,resourceType,target,metadata){if(!entries)return;let allFiles=this.collectFilesFromManifestEntries(entries,root,resourceType),patterns=entries.filter(isOverridePattern),enabledPaths=applyPatterns(allFiles,patterns,root);for(let f of allFiles)enabledPaths.has(f)&&this.addResource(target,f,metadata,!0)}collectFilesFromManifestEntries(entries,root,resourceType){let resolved=entries.filter(entry=>!isOverridePattern(entry)).flatMap(entry=>hasGlobPattern(entry)?expandPackageGlob(entry,root):[resolve(root,entry)]);return this.collectFilesFromPaths(resolved,resourceType)}resolveLocalEntries(entries,resourceType,target,metadata,baseDir){if(entries.length===0)return;let{plain,patterns}=splitPatterns(entries),resolvedPlain=plain.map(p=>this.resolvePathFromBase(p,baseDir)),allFiles=this.collectFilesFromPaths(resolvedPlain,resourceType),enabledPaths=applyPatterns(allFiles,patterns,baseDir);for(let f of allFiles)this.addResource(target,f,metadata,enabledPaths.has(f))}addAutoDiscoveredResources(accumulator,globalSettings,projectSettings,globalBaseDir,projectBaseDir){let userMetadata={source:"auto",scope:"user",origin:"top-level",baseDir:globalBaseDir},projectMetadata={source:"auto",scope:"project",origin:"top-level",baseDir:projectBaseDir},userOverrides={extensions:globalSettings.extensions??[],skills:globalSettings.skills??[],prompts:globalSettings.prompts??[],themes:globalSettings.themes??[]},projectOverrides={extensions:projectSettings.extensions??[],skills:projectSettings.skills??[],prompts:projectSettings.prompts??[],themes:projectSettings.themes??[]},userDirs={extensions:join5(globalBaseDir,"extensions"),skills:join5(globalBaseDir,"skills"),prompts:join5(globalBaseDir,"prompts"),themes:join5(globalBaseDir,"themes")},projectDirs={extensions:join5(projectBaseDir,"extensions"),skills:join5(projectBaseDir,"skills"),prompts:join5(projectBaseDir,"prompts"),themes:join5(projectBaseDir,"themes")},userAgentsSkillsDir=join5(getHomeDir(),".agents","skills"),projectTrusted=this.settingsManager.isProjectTrusted(),projectAgentsSkillDirs=projectTrusted?collectAncestorAgentsSkillDirs(this.cwd).filter(dir=>!pathsEqual(dir,userAgentsSkillsDir)):[],addResources=(resourceType,paths,metadata,overrides,baseDir)=>{let target=this.getTargetMap(accumulator,resourceType);for(let path10 of paths){let enabled=isEnabledByOverrides(path10,overrides,baseDir);this.addResource(target,path10,metadata,enabled)}};projectTrusted&&(addResources("extensions",collectAutoExtensionEntries(projectDirs.extensions),projectMetadata,projectOverrides.extensions,projectBaseDir),addResources("skills",collectAutoSkillEntries(projectDirs.skills,"pi"),projectMetadata,projectOverrides.skills,projectBaseDir));for(let agentsSkillsDir of projectAgentsSkillDirs){let agentsBaseDir=dirname4(agentsSkillsDir),agentsMetadata={...projectMetadata,baseDir:agentsBaseDir};addResources("skills",collectAutoSkillEntries(agentsSkillsDir,"agents"),agentsMetadata,projectOverrides.skills,agentsBaseDir)}projectTrusted&&(addResources("prompts",collectAutoPromptEntries(projectDirs.prompts),projectMetadata,projectOverrides.prompts,projectBaseDir),addResources("themes",collectAutoThemeEntries(projectDirs.themes),projectMetadata,projectOverrides.themes,projectBaseDir)),addResources("extensions",collectAutoExtensionEntries(userDirs.extensions),userMetadata,userOverrides.extensions,globalBaseDir),addResources("skills",collectAutoSkillEntries(userDirs.skills,"pi"),userMetadata,userOverrides.skills,globalBaseDir);let userAgentsBaseDir=dirname4(userAgentsSkillsDir),userAgentsMetadata={...userMetadata,baseDir:userAgentsBaseDir};addResources("skills",collectAutoSkillEntries(userAgentsSkillsDir,"agents"),userAgentsMetadata,userOverrides.skills,userAgentsBaseDir),addResources("prompts",collectAutoPromptEntries(userDirs.prompts),userMetadata,userOverrides.prompts,globalBaseDir),addResources("themes",collectAutoThemeEntries(userDirs.themes),userMetadata,userOverrides.themes,globalBaseDir)}collectFilesFromPaths(paths,resourceType){let files=[];for(let p of paths)if(existsSync2(p))try{let stats=statSync(p);stats.isFile()?files.push(p):stats.isDirectory()&&files.push(...collectResourceFiles(p,resourceType))}catch{}return files}getTargetMap(accumulator,resourceType){switch(resourceType){case"extensions":return accumulator.extensions;case"skills":return accumulator.skills;case"prompts":return accumulator.prompts;case"themes":return accumulator.themes;default:throw new Error(`Unknown resource type: ${resourceType}`)}}addResource(map,path10,metadata,enabled){path10&&(map.has(path10)||map.set(path10,{metadata,enabled}))}createAccumulator(){return{extensions:new Map,skills:new Map,prompts:new Map,themes:new Map}}toResolvedPaths(accumulator){let mapToResolved=entries=>{let resolved=Array.from(entries.entries()).map(([path10,{metadata,enabled}])=>({path:path10,enabled,metadata}));resolved.sort((a,b)=>resourcePrecedenceRank(a.metadata)-resourcePrecedenceRank(b.metadata));let seen=new Set;return resolved.filter(entry=>{let pathKey=getResourcePathKey(entry.path);return seen.has(pathKey)?!1:(seen.add(pathKey),!0)})};return{extensions:mapToResolved(accumulator.extensions),skills:mapToResolved(accumulator.skills),prompts:mapToResolved(accumulator.prompts),themes:mapToResolved(accumulator.themes)}}spawnCommand(command,args,options){let env=getEnv();return spawnProcess(command,args,{cwd:options?.cwd,stdio:isStdoutTakenOver()?["ignore",2,2]:"inherit",env})}spawnCaptureCommand(command,args,options){let baseEnv=getEnv(),env=options?.env?{...baseEnv,...options.env}:baseEnv;return spawnProcess(command,args,{cwd:options?.cwd,stdio:["ignore","pipe","pipe"],env})}runCommandCapture(command,args,options){return new Promise((resolvePromise,reject)=>{let child=this.spawnCaptureCommand(command,args,options),stdout="",stderr="",timedOut=!1,timeout=typeof options?.timeoutMs=="number"?setTimeout(()=>{timedOut=!0,child.kill()},options.timeoutMs):void 0;child.stdout?.on("data",data=>{stdout+=data.toString()}),child.stderr?.on("data",data=>{stderr+=data.toString()}),child.once("error",error=>{timeout&&clearTimeout(timeout),reject(error)}),child.once("close",(code,signal)=>{if(timeout&&clearTimeout(timeout),timedOut){reject(new Error(`${command} ${args.join(" ")} timed out after ${options?.timeoutMs}ms`));return}if(code===0){resolvePromise(stdout.trim());return}let exitStatus=code===null?`signal ${signal??"unknown"}`:`code ${code}`;reject(new Error(`${command} ${args.join(" ")} failed with ${exitStatus}: ${stderr||stdout}`))})})}runCommand(command,args,options){return new Promise((resolvePromise,reject)=>{let child=this.spawnCommand(command,args,options);child.on("error",reject),child.on("exit",code=>{code===0?resolvePromise():reject(new Error(`${command} ${args.join(" ")} failed with code ${code}`))})})}runCommandSync(command,args){let env=getEnv(),result2=spawnProcessSync(command,args,{stdio:["ignore","pipe","pipe"],encoding:"utf-8",env});if(result2.error||result2.status!==0)throw new Error(`Failed to run ${command} ${args.join(" ")}: ${result2.error?.message||result2.stderr||result2.stdout}`);return(result2.stdout||result2.stderr||"").trim()}};var DynamicBorder=class{constructor(color=str3=>theme.fg("border",str3)){this.color=color}invalidate(){}render(width){return[this.color("\u2500".repeat(Math.max(1,width)))]}};var CountdownTimer=class{constructor(timeoutMs,tui,onTick,onExpire){this.tui=tui,this.onTick=onTick,this.onExpire=onExpire,this.remainingSeconds=Math.ceil(timeoutMs/1e3),this.onTick(this.remainingSeconds),this.intervalId=setInterval(()=>{this.remainingSeconds--,this.onTick(this.remainingSeconds),this.tui?.requestRender(),this.remainingSeconds<=0&&(this.dispose(),this.onExpire())},1e3)}dispose(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=void 0)}};var ExtensionInputComponent=class extends Container{get focused(){return this._focused}set focused(value){this._focused=value,this.input.focused=value}constructor(title,_placeholder,onSubmit,onCancel,opts){super(),this._focused=!1,this.onSubmitCallback=onSubmit,this.onCancelCallback=onCancel,this.baseTitle=title,this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.titleText=new Text(theme.fg("accent",title),1,0),this.addChild(this.titleText),opts?.description&&(this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("text",opts.description),1,0))),this.addChild(new Spacer(1)),opts?.timeout&&opts.timeout>0&&opts.tui&&(this.countdown=new CountdownTimer(opts.timeout,opts.tui,s=>this.titleText.setText(theme.fg("accent",`${this.baseTitle} (${s}s)`)),()=>this.onCancelCallback())),this.input=new Input,opts?.initialValue&&this.input.setValue(opts.initialValue),this.addChild(this.input),this.addChild(new Spacer(1)),this.addChild(new Text(`${keyHint("tui.select.confirm","submit")} ${keyHint("tui.select.cancel","cancel")}`,1,0)),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}handleInput(keyData){let kb=getKeybindings();kb.matches(keyData,"tui.select.confirm")||keyData===`
493
493
  `?this.onSubmitCallback(this.input.getValue()):kb.matches(keyData,"tui.select.cancel")?this.onCancelCallback():this.input.handleInput(keyData)}dispose(){this.countdown?.dispose()}};var ExtensionSelectorComponent=class extends Container{constructor(title,options,onSelect,onCancel,opts){super(),this.selectedIndex=0,this.options=options,this.onSelectCallback=onSelect,this.onCancelCallback=onCancel,this.onToggleToolsExpanded=opts?.onToggleToolsExpanded,this.baseTitle=title,this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.titleText=new Text(theme.fg("accent",theme.bold(title)),1,0),this.addChild(this.titleText),opts?.description&&(this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("text",opts.description),1,0))),this.addChild(new Spacer(1)),opts?.timeout&&opts.timeout>0&&opts.tui&&(this.countdown=new CountdownTimer(opts.timeout,opts.tui,s=>this.titleText.setText(theme.fg("accent",theme.bold(`${this.baseTitle} (${s}s)`))),()=>this.onCancelCallback())),this.listContainer=new Container,this.addChild(this.listContainer),this.addChild(new Spacer(1));let navigationKeys=[keyLabel("tui.select.up"),keyLabel("tui.select.down")].filter(Boolean).join("/"),confirmKey=keyLabel("tui.select.confirm"),cancelKey=keyLabel("tui.select.cancel"),hints=[navigationKeys?rawKeyHint(navigationKeys,"navigate"):"",confirmKey?rawKeyHint(confirmKey,"select"):"",cancelKey?rawKeyHint(cancelKey,"cancel"):""].filter(Boolean);this.addChild(new Text(hints.join(theme.fg("muted"," \u2022 ")),1,0)),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder),this.updateList()}updateList(){this.listContainer.clear();for(let i=0;i<this.options.length;i++){let text=i===this.selectedIndex?theme.fg("accent","\u2192 ")+theme.fg("accent",this.options[i]):` ${theme.fg("text",this.options[i])}`;this.listContainer.addChild(new Text(text,1,0))}}handleInput(keyData){let kb=getKeybindings();if(kb.matches(keyData,"app.tools.expand"))this.onToggleToolsExpanded?.();else if(kb.matches(keyData,"tui.select.up")||keyData==="k")this.selectedIndex=Math.max(0,this.selectedIndex-1),this.updateList();else if(kb.matches(keyData,"tui.select.down")||keyData==="j")this.selectedIndex=Math.min(this.options.length-1,this.selectedIndex+1),this.updateList();else if(kb.matches(keyData,"tui.select.confirm")||keyData===`
@@ -699,8 +699,8 @@ ${conversationText}
699
699
 
700
700
  ${instructions}`}],timestamp:Date.now()}],context=normalizeContext({systemPrompt:SUMMARIZATION_SYSTEM_PROMPT,messages:summarizationMessages}),requestOptions={apiKey,headers,env,signal};model.reasoning&&thinkingLevel&&thinkingLevel!=="off"&&(requestOptions.reasoning=thinkingLevel);let response=await completeSummarization(model,context,requestOptions,streamFn,retry,callbacks);if(response.stopReason==="aborted")return{aborted:!0};let failure=getSummarizationFailure(response,"Branch summarization");if(failure)return{error:failure};if(response.content.some(block=>block.type==="toolCall"))return{error:"Branch summarization attempted to call a tool"};let summary=contentText(response.content);summary=BRANCH_SUMMARY_PREAMBLE+summary;let{readFiles,modifiedFiles}=computeFileLists(fileOps);return summary+=formatFileOperations(readFiles,modifiedFiles),{summary:summary||"No summary generated",usage:response.usage,readFiles,modifiedFiles}}function defineTool(tool){return tool}function isBashToolResult(e){return e.toolName==="bash"}function isPowerShellToolResult(e){return e.toolName==="powershell"}function isReadToolResult(e){return e.toolName==="read"}function isEditToolResult(e){return e.toolName==="edit"}function isWriteToolResult(e){return e.toolName==="write"}function isGrepToolResult(e){return e.toolName==="grep"}function isFindToolResult(e){return e.toolName==="find"}function isLsToolResult(e){return e.toolName==="ls"}function isToolCallEventType(toolName,event){return event.toolName===toolName}function wrapRegisteredTool(registeredTool,runner){return wrapToolDefinition(registeredTool.definition,(toolCallId,signal)=>runner.createToolContext(toolCallId,signal))}function wrapRegisteredTools(registeredTools,runner){return registeredTools.map(tool=>wrapRegisteredTool(tool,runner))}import*as fs2 from"node:fs";import{createRequire as createRequire2}from"node:module";import*as path3 from"node:path";import{fileURLToPath as fileURLToPath2}from"node:url";import{constants as bufferConstants}from"node:buffer";import{spawn}from"node:child_process";import{StringDecoder as StringDecoder2}from"node:string_decoder";var DEFAULT_EXEC_MAX_BUFFER=Math.min(256*1024*1024,bufferConstants.MAX_STRING_LENGTH),FORCE_KILL_DELAY_MS=5e3;async function execCommand(command,args,cwd,options){let maxBuffer=options?.maxBuffer??DEFAULT_EXEC_MAX_BUFFER;if(!Number.isInteger(maxBuffer)||maxBuffer<0||maxBuffer>bufferConstants.MAX_STRING_LENGTH)throw new RangeError(`maxBuffer must be an integer between 0 and ${bufferConstants.MAX_STRING_LENGTH} bytes`);let proc=spawn(command,args,{cwd,shell:!1,stdio:["ignore","pipe","pipe"]}),stdout="",stderr="",stdoutDecoder=new StringDecoder2("utf8"),stderrDecoder=new StringDecoder2("utf8"),outputBytes=0,truncated=!1,killed=!1,timeoutId,forceKillId,killProcess=()=>{killed||(killed=!0,proc.kill("SIGTERM"),forceKillId=setTimeout(()=>{proc.exitCode===null&&proc.signalCode===null&&proc.kill("SIGKILL")},FORCE_KILL_DELAY_MS))};options?.signal&&(options.signal.aborted?killProcess():options.signal.addEventListener("abort",killProcess,{once:!0})),options?.timeout&&options.timeout>0&&(timeoutId=setTimeout(killProcess,options.timeout));let takeWithinCap=data=>{if(truncated)return;let remaining=maxBuffer-outputBytes;return data.length<=remaining?(outputBytes+=data.length,data):(truncated=!0,proc.stdout?.destroy(),proc.stderr?.destroy(),killProcess(),remaining>0?data.subarray(0,remaining):void 0)};proc.stdout?.on("data",data=>{let chunk=takeWithinCap(data);chunk&&(stdout+=stdoutDecoder.write(chunk))}),proc.stderr?.on("data",data=>{let chunk=takeWithinCap(data);chunk&&(stderr+=stderrDecoder.write(chunk))});let code;try{code=await waitForChildProcess(proc)}catch(error){if(!(error instanceof Error))throw error;code=1,stderr||(stderr=error.message)}finally{clearTimeout(timeoutId),clearTimeout(forceKillId),options?.signal?.removeEventListener("abort",killProcess)}truncated||(stdout+=stdoutDecoder.end(),stderr+=stderrDecoder.end());let exitCode=code??0;return{stdout,stderr,code:truncated&&exitCode===0?1:exitCode,killed,truncated}}var ENABLED=process.env.PI_TIMING==="1",timingNamespaces=new Map;function resetTimings(namespace="main"){ENABLED&&timingNamespaces.set(namespace,{timings:[],lastTime:Date.now()})}function time(label,namespace="main"){if(!ENABLED)return;let now=Date.now();timingNamespaces.has(namespace)||resetTimings(namespace);let timingNamespace=timingNamespaces.get(namespace);timingNamespace.timings.push({label,ms:now-timingNamespace.lastTime}),timingNamespace.lastTime=now}function printTimingGroup(title,timings){let printableTimings=timings.filter(timing=>timing.ms>=0);if(printableTimings.length!==0){console.error(`
701
701
  --- ${title} ---`);for(let t of printableTimings)console.error(` ${t.label}: ${t.ms}ms`);console.error(` TOTAL: ${printableTimings.reduce((a,b)=>a+b.ms,0)}ms`),console.error(`${"-".repeat(title.length+8)}
702
- `)}}function printTimings(){if(ENABLED)for(let[namespace,timingNamespace]of timingNamespaces)printTimingGroup(`Startup Timings: ${namespace}`,timingNamespace.timings)}var require3=createRequire2(import.meta.url),isNodeSeaBinary="sea"in process.features&&process.features.sea===!0||process.getBuiltinModule("node:sea")?.isSea()===!0,isTypeScriptSourceRuntime=!isBunBinary&&path3.extname(fileURLToPath2(import.meta.url))===".ts",usesEmbeddedModules=isBunBinary||isNodeSeaBinary||isBundledNode,createJitiPromise;function getCreateJiti(){return createJitiPromise??=(usesEmbeddedModules?import("./jiti-static-loader-CLT3YR3B.js"):import("./jiti-loader-BFSSLU7G.js")).then(module=>module.createJiti),createJitiPromise}var virtualModulesPromise;function getVirtualModules(){return virtualModulesPromise??=import("./virtual-modules-T2KLVAFL.js").then(module=>module.VIRTUAL_MODULES),virtualModulesPromise}var _aliases=null;function getAliases(){if(_aliases)return _aliases;let __dirname=path3.dirname(fileURLToPath2(import.meta.url)),packageIndex=path3.resolve(__dirname,"../..","index.js"),typeboxEntry=require3.resolve("typebox"),typeboxCompileEntry=require3.resolve("typebox/compile"),typeboxValueEntry=require3.resolve("typebox/value"),packagesRoot=path3.resolve(__dirname,"../../../../"),resolveWorkspaceOrImport=(workspaceRelativePath,specifier)=>{let workspacePath=path3.join(packagesRoot,workspaceRelativePath);return fs2.existsSync(workspacePath)?workspacePath:fileURLToPath2(import.meta.resolve(specifier))},piCodingAgentEntry=packageIndex,piAgentCoreEntry=resolveWorkspaceOrImport("agent/dist/index.js","@earendil-works/pi-agent-core"),piTuiEntry=resolveWorkspaceOrImport("tui/dist/index.js","@earendil-works/pi-tui"),piAiCompatEntry=path3.resolve(__dirname,"pi-ai-extension-view.js"),piAiModelsEntry=resolveWorkspaceOrImport("ai/dist/models.js","@earendil-works/pi-ai/models"),piAiOauthEntry=resolveWorkspaceOrImport("ai/dist/oauth.js","@earendil-works/pi-ai/oauth"),piAiProvidersEntry=resolveWorkspaceOrImport("ai/dist/providers/all.js","@earendil-works/pi-ai/providers/all");return _aliases={"@earendil-works/pi-coding-agent":piCodingAgentEntry,[DISTRIBUTION_PACKAGE_NAME]:piCodingAgentEntry,"@earendil-works/pi-agent-core":piAgentCoreEntry,"@earendil-works/pi-tui":piTuiEntry,"@earendil-works/pi-ai/providers/all":piAiProvidersEntry,"@earendil-works/pi-ai/compat":piAiCompatEntry,"@earendil-works/pi-ai/models":piAiModelsEntry,"@earendil-works/pi-ai/oauth":piAiOauthEntry,"@earendil-works/pi-ai":piAiCompatEntry,"@mariozechner/pi-coding-agent":piCodingAgentEntry,"@mariozechner/pi-agent-core":piAgentCoreEntry,"@mariozechner/pi-tui":piTuiEntry,"@mariozechner/pi-ai/providers/all":piAiProvidersEntry,"@mariozechner/pi-ai/compat":piAiCompatEntry,"@mariozechner/pi-ai/models":piAiModelsEntry,"@mariozechner/pi-ai/oauth":piAiOauthEntry,"@mariozechner/pi-ai":piAiCompatEntry,typebox:typeboxEntry,"typebox/compile":typeboxCompileEntry,"typebox/value":typeboxValueEntry,"@sinclair/typebox":typeboxEntry,"@sinclair/typebox/compile":typeboxCompileEntry,"@sinclair/typebox/value":typeboxValueEntry},_aliases}var extensionCacheCwd,extensionCacheGeneration=0,extensionCache=new Map;function clearExtensionCache(){extensionCache.clear(),extensionCacheCwd=void 0,extensionCacheGeneration++}function useExtensionCacheCwd(cwd){let resolvedCwd=resolvePath(cwd);return extensionCacheCwd!==void 0&&!pathsEqual(extensionCacheCwd,resolvedCwd)&&clearExtensionCache(),extensionCacheCwd=resolvedCwd,{cwd:resolvedCwd,generation:extensionCacheGeneration}}function createExtensionRuntime(){let notInitialized=()=>{throw new Error("Extension runtime not initialized. Action methods cannot be called during extension loading.")},state2={},eventBusUnsubscribers=new Set,assertActive=()=>{if(state2.staleMessage)throw new Error(state2.staleMessage)},runtime={sendMessage:notInitialized,sendUserMessage:notInitialized,appendEntry:notInitialized,setSessionName:notInitialized,getSessionName:notInitialized,setLabel:notInitialized,getActiveTools:notInitialized,getAllTools:notInitialized,getSettings:notInitialized,setActiveTools:notInitialized,refreshTools:()=>{},getCommands:notInitialized,setModel:()=>Promise.reject(new Error("Extension runtime not initialized")),getThinkingLevel:notInitialized,setThinkingLevel:notInitialized,flagValues:new Map,pendingProviderRegistrations:[],pendingNativeProviderRegistrations:[],mcpServers:new McpServerRegistry,pendingVirtualModelRegistrations:[],createContext:notInitialized,assertActive,invalidate:message=>{if(!state2.staleMessage){state2.staleMessage=message??"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().";for(let unsubscribe of eventBusUnsubscribers)unsubscribe();eventBusUnsubscribers.clear()}},trackEventBusSubscription:unsubscribe=>{let active=!0,trackedUnsubscribe=()=>{active&&(active=!1,eventBusUnsubscribers.delete(trackedUnsubscribe),unsubscribe())};return eventBusUnsubscribers.add(trackedUnsubscribe),trackedUnsubscribe},registerProvider:(name,config,extensionPath="<unknown>")=>{runtime.pendingProviderRegistrations.push({name,config,extensionPath})},registerNativeProvider:(provider,extensionPath="<unknown>")=>{runtime.pendingNativeProviderRegistrations.push({provider,extensionPath})},unregisterProvider:name=>{runtime.pendingProviderRegistrations=runtime.pendingProviderRegistrations.filter(r=>r.name!==name),runtime.pendingNativeProviderRegistrations=runtime.pendingNativeProviderRegistrations.filter(r=>r.provider.id!==name)},registerVirtualModel:(definition,extensionPath="<unknown>")=>{runtime.pendingVirtualModelRegistrations.push({definition,extensionPath})},unregisterVirtualModel:(provider,id)=>{runtime.pendingVirtualModelRegistrations=runtime.pendingVirtualModelRegistrations.filter(({definition})=>definition.provider!==provider||definition.id!==id)}};return runtime}function createExtensionAPI(extension,runtime,cwd,eventBus){let pendingFlagValues=new Map,pendingRuntimeChanges=[],loadingUnsubscribers=[],state2="loading",assertActive=()=>{if(state2==="failed")throw new Error(`Extension "${extension.path}" failed to load and its API is no longer active.`);runtime.assertActive()},applyRuntimeChange=change=>{state2==="loading"?pendingRuntimeChanges.push(change):change()},clearPending=()=>{pendingFlagValues.clear(),pendingRuntimeChanges.length=0,loadingUnsubscribers.length=0};return{api:{on(event,handler){assertActive();let registeredHandler=(...args)=>handler(...args),list=extension.handlers.get(event)??[];return list.push(registeredHandler),extension.handlers.set(event,list),()=>{let handlers=extension.handlers.get(event);if(!handlers)return;let handlerIndex=handlers.indexOf(registeredHandler);handlerIndex!==-1&&(handlers.splice(handlerIndex,1),handlers.length===0&&extension.handlers.delete(event))}},registerTool(tool){if(assertActive(),typeof tool.parameters!="object"||tool.parameters===null||Array.isArray(tool.parameters))throw new Error(`Tool "${tool.name}" registered by extension "${extension.path}" must define an object parameter schema.`);extension.tools.set(tool.name,{definition:tool,sourceInfo:extension.sourceInfo}),runtime.refreshTools()},registerCommand(name,options){if(assertActive(),typeof name!="string"||name.length===0)throw new Error(`Command registered by extension "${extension.path}" must have a non-empty string name. Use pi.registerCommand("name", { description, handler }).`);if(typeof options?.handler!="function")throw new Error(`Command "/${name}" registered by extension "${extension.path}" must define handler().`);extension.commands.set(name,{name,sourceInfo:extension.sourceInfo,...options})},registerShortcut(shortcut,options){assertActive(),extension.shortcuts.set(shortcut,{shortcut,extensionPath:extension.path,...options})},registerFlag(name,options){if(assertActive(),options.default!==void 0&&typeof options.default!==options.type)throw new Error(`Invalid default for flag "${name}": expected ${options.type}, got ${typeof options.default}`);extension.flags.set(name,{name,extensionPath:extension.path,...options}),options.default!==void 0&&!runtime.flagValues.has(name)&&(state2==="loading"?pendingFlagValues.has(name)||pendingFlagValues.set(name,options.default):runtime.flagValues.set(name,options.default))},registerMessageRenderer(customType,renderer){assertActive(),extension.messageRenderers.set(customType,renderer)},registerMarkdownTransformer(transformer){assertActive(),extension.markdownTransformer=transformer},registerEntryRenderer(customType,renderer){assertActive(),extension.entryRenderers??=new Map,extension.entryRenderers.set(customType,renderer)},registerToolRenderer(resolver){assertActive(),extension.toolRenderers??=[],extension.toolRenderers.push(resolver)},getFlag(name){if(assertActive(),!!extension.flags.has(name))return runtime.flagValues.has(name)?runtime.flagValues.get(name):pendingFlagValues.get(name)},sendMessage(message,options){assertActive(),runtime.sendMessage(message,options)},sendUserMessage(content,options){assertActive(),runtime.sendUserMessage(content,options)},appendEntry(customType,data){assertActive(),runtime.appendEntry(customType,data)},setSessionName(name){assertActive(),runtime.setSessionName(name)},getSessionName(){return assertActive(),runtime.getSessionName()},setLabel(entryId,label){assertActive(),runtime.setLabel(entryId,label)},exec(command,args,options){return assertActive(),execCommand(command,args,options?.cwd??cwd,options)},getActiveTools(){return assertActive(),runtime.getActiveTools()},getAllTools(){return assertActive(),runtime.getAllTools()},getSettings(){return assertActive(),runtime.getSettings()},setActiveTools(toolNames){assertActive(),runtime.setActiveTools(toolNames)},getCommands(){return assertActive(),runtime.getCommands()},setModel(model){return assertActive(),runtime.setModel(model)},getThinkingLevel(){return assertActive(),runtime.getThinkingLevel()},setThinkingLevel(level){assertActive(),runtime.setThinkingLevel(level)},registerProvider(providerOrName,config){if(assertActive(),typeof providerOrName=="string"){if(!config)throw new Error("Provider config is required when registering by name");applyRuntimeChange(()=>runtime.registerProvider(providerOrName,config,extension.path));return}applyRuntimeChange(()=>runtime.registerNativeProvider(providerOrName,extension.path))},unregisterProvider(name){assertActive(),applyRuntimeChange(()=>runtime.unregisterProvider(name,extension.path))},registerMcpServer(name,config){assertActive();let validated=validateMcpServerConfig(name,config);if(typeof validated=="string")throw new Error(`Invalid MCP server registered by extension "${extension.path}": ${validated}`);let owner=runtime.mcpServers.get(name)?.extensionPath;if(owner!==void 0&&owner!==extension.path)throw new Error(`MCP server "${name}" is already registered by extension "${owner}"`);let clash=runtime.mcpServers.list().find(server2=>server2.name!==name&&mcpNamespace(server2.name)===mcpNamespace(name));if(clash)throw new Error(`MCP server "${name}" conflicts with registered server "${clash.name}"`);let server={name,config:structuredClone(validated),extensionPath:extension.path};applyRuntimeChange(()=>runtime.mcpServers.register(server))},unregisterMcpServer(name){assertActive(),applyRuntimeChange(()=>runtime.mcpServers.unregister(name,extension.path))},getMcpServers(){return assertActive(),runtime.mcpServers.list()},registerVirtualModel(model){assertActive();let definition={...model,route:request=>model.route(request,runtime.createContext())};applyRuntimeChange(()=>runtime.registerVirtualModel(definition,extension.path))},unregisterVirtualModel(provider,id){assertActive(),applyRuntimeChange(()=>runtime.unregisterVirtualModel(provider,id))},events:{emit(channel,data){assertActive(),eventBus.emit(channel,data)},on(channel,handler){assertActive();let unsubscribe=runtime.trackEventBusSubscription(eventBus.on(channel,handler));return state2==="loading"&&loadingUnsubscribers.push(unsubscribe),unsubscribe}}},commit:()=>{if(state2==="loading"){runtime.assertActive();for(let[name,value]of pendingFlagValues)runtime.flagValues.has(name)||runtime.flagValues.set(name,value);for(let apply of pendingRuntimeChanges)apply();state2="active",clearPending()}},discard:()=>{if(state2==="loading"){state2="failed";for(let unsubscribe of loadingUnsubscribers)unsubscribe();clearPending()}}}}function isCurrentCacheToken(cacheToken){return cacheToken!==void 0&&extensionCacheCwd===cacheToken.cwd&&extensionCacheGeneration===cacheToken.generation}async function loadExtensionModule(extensionPath,cacheToken){if(isCurrentCacheToken(cacheToken)){let cachedFactory=extensionCache.get(extensionPath);if(cachedFactory)return cachedFactory}let createJitiImpl=await getCreateJiti(),resolutionOptions=usesEmbeddedModules?{virtualModules:await getVirtualModules(),tryNative:!1}:isTypeScriptSourceRuntime?{virtualModules:await getVirtualModules(),tsconfigPaths:!0}:{alias:getAliases()},factory=await createJitiImpl(import.meta.url,{moduleCache:!1,...resolutionOptions}).import(extensionPath,{default:!0});if(typeof factory=="function")return isCurrentCacheToken(cacheToken)&&extensionCache.set(extensionPath,factory),factory}function createExtension(extensionPath,resolvedPath){let source=getSyntheticPathSource(extensionPath)??"local",baseDir=isSyntheticPath(extensionPath)?void 0:path3.dirname(resolvedPath);return{path:extensionPath,resolvedPath,sourceInfo:createSyntheticSourceInfo(extensionPath,{source,baseDir}),handlers:new Map,tools:new Map,messageRenderers:new Map,entryRenderers:new Map,commands:new Map,flags:new Map,shortcuts:new Map}}async function initializeExtension(factory,extensionPath,resolvedPath,cwd,eventBus,runtime){let extension=createExtension(extensionPath,resolvedPath),load=createExtensionAPI(extension,runtime,cwd,eventBus);try{await factory(load.api),load.commit()}catch(error){throw load.discard(),error}return time(`${extensionPath} factory`,"extensions"),extension}async function loadExtension(extensionPath,cwd,eventBus,runtime,cacheToken){let resolvedPath=resolvePath(extensionPath,cwd,{normalizeUnicodeSpaces:!0});try{let factory=await loadExtensionModule(resolvedPath,cacheToken);return time(`${extensionPath} module import`,"extensions"),factory?{extension:await initializeExtension(factory,extensionPath,resolvedPath,cwd,eventBus,runtime),error:null}:{extension:null,error:`Extension does not export a valid factory function: ${extensionPath}`}}catch(err){return{extension:null,error:`Failed to load extension: ${err instanceof Error?err.message:String(err)}`}}}async function loadExtensionFromFactory(factory,cwd,eventBus,runtime,extensionPath="<inline>"){let resolvedCwd=resolvePath(cwd);return initializeExtension(factory,extensionPath,extensionPath,resolvedCwd,eventBus,runtime)}async function loadExtensionsInternal(paths,cwd,eventBus,runtime,useCache=!1){let extensions=[],errors=[],warnings=[],cacheToken=useCache?useExtensionCacheCwd(cwd):void 0,resolvedCwd=cacheToken?.cwd??resolvePath(cwd),resolvedEventBus=eventBus??createEventBus(),resolvedRuntime=runtime??createExtensionRuntime();for(let extPath of paths){let{extension,error}=await loadExtension(extPath,resolvedCwd,resolvedEventBus,resolvedRuntime,cacheToken);if(error){errors.push({path:extPath,error});continue}extension&&extensions.push(extension)}return{extensions,errors,warnings,runtime:resolvedRuntime}}async function loadExtensions(paths,cwd,eventBus,runtime){return loadExtensionsInternal(paths,cwd,eventBus,runtime)}async function loadExtensionsCached(paths,cwd,eventBus,runtime){return loadExtensionsInternal(paths,cwd,eventBus,runtime,!0)}function isExtensionFile(name){return name.endsWith(".ts")||name.endsWith(".js")}function resolveExtensionEntries2(dir){let packageJsonPath=path3.join(dir,"package.json");if(fs2.existsSync(packageJsonPath)){let manifest=readPiManifest(packageJsonPath);if(manifest?.extensions?.length){let entries=[];for(let extPath of manifest.extensions){let resolvedExtPath=path3.resolve(dir,extPath);fs2.existsSync(resolvedExtPath)&&entries.push(resolvedExtPath)}if(entries.length>0)return entries}}let indexTs=path3.join(dir,"index.ts"),indexJs=path3.join(dir,"index.js");return fs2.existsSync(indexTs)?[indexTs]:fs2.existsSync(indexJs)?[indexJs]:null}function discoverExtensionsInDir(dir){if(!fs2.existsSync(dir))return[];let discovered=[];try{let entries=fs2.readdirSync(dir,{withFileTypes:!0});for(let entry of entries){let entryPath=path3.join(dir,entry.name);if((entry.isFile()||entry.isSymbolicLink())&&isExtensionFile(entry.name)){discovered.push(entryPath);continue}if(entry.isDirectory()||entry.isSymbolicLink()){let entries2=resolveExtensionEntries2(entryPath);entries2&&discovered.push(...entries2)}}}catch{return[]}return discovered}async function discoverAndLoadExtensions(configuredPaths,cwd,agentDir=getAgentDir(),eventBus){let resolvedCwd=resolvePath(cwd),resolvedAgentDir=resolvePath(agentDir),allPaths=[],seen=new Set,addPaths=paths=>{for(let p of paths){let resolved=path3.resolve(p);seen.has(resolved)||(seen.add(resolved),allPaths.push(p))}},localExtDir=path3.join(resolvedCwd,CONFIG_DIR_NAME,"extensions");addPaths(discoverExtensionsInDir(localExtDir));let globalExtDir=path3.join(resolvedAgentDir,"extensions");addPaths(discoverExtensionsInDir(globalExtDir));for(let p of configuredPaths){let resolved=resolvePath(p,resolvedCwd,{normalizeUnicodeSpaces:!0});if(fs2.existsSync(resolved)&&fs2.statSync(resolved).isDirectory()){let entries=resolveExtensionEntries2(resolved);if(entries){addPaths(entries);continue}addPaths(discoverExtensionsInDir(resolved));continue}addPaths([resolved])}return loadExtensions(allPaths,resolvedCwd,eventBus)}var ModelRegistry=class{constructor(runtime){this.runtime=runtime}getRuntime(){return this.runtime}refresh(options){return this.runtime.refresh(options)}getError(){return this.runtime.getError()}getAll(){return[...this.runtime.getModels()]}getAvailable(){return[...this.runtime.getAvailableSnapshot()]}find(provider,modelId){return this.runtime.getModel(provider,modelId)}findOfType(type,provider,modelId){return this.runtime.getModelOfType(type,provider,modelId)}hasConfiguredAuth(model){return this.runtime.hasConfiguredAuth(model.provider)}async getApiKeyAndHeaders(model){try{let resolution=await this.runtime.getAuth(model);if(!resolution){let compatibility=this.runtime.getCompatibilityRequestConfig(model);return compatibility.authHeader?{ok:!1,error:`No API key found for "${model.provider}"`}:{ok:!0,headers:compatibility.headers}}return{ok:!0,apiKey:resolution.auth.apiKey,headers:resolution.auth.headers,...resolution.auth.baseUrl?{baseUrl:resolution.auth.baseUrl}:{},env:resolution.env}}catch(error){let cause=error instanceof Error?error.cause:void 0,message=cause instanceof Error?cause.message:error instanceof Error?error.message:String(error);return{ok:!1,error:message==="authHeader requires a resolved API key"?`No API key found for "${model.provider}"`:message}}}getProviderAuthStatus(provider){return this.runtime.getProviderAuthStatus(provider)}getProvider(provider){return this.runtime.getProvider(provider)}stream(model,context,options){return this.runtime.stream(model,context,options)}streamSimple(model,context,options){return this.runtime.streamSimple(model,context,options)}complete(model,context,options){return this.runtime.complete(model,context,options)}getModelsOfType(type,provider){return this.runtime.getModelsOfType(type,provider)}getAvailableOfType(type,provider,options){return this.runtime.getAvailableOfType(type,provider,options)}getModelOfType(type,provider,modelId){return this.runtime.getModelOfType(type,provider,modelId)}classify(model,context,options){return this.runtime.classify(model,context,options)}generateImages(model,context,options){return this.runtime.generateImages(model,context,options)}getProviderDisplayName(provider){return this.runtime.getProvider(provider)?.name??provider}getProviderAuth(provider){return this.runtime.getAuth(provider)}async getApiKeyForProvider(provider){try{return(await this.runtime.getAuth(provider))?.auth.apiKey}catch{return}}isUsingOAuth(model){return this.runtime.isUsingOAuth(model.provider)}registerProvider(providerOrName,config){if(typeof providerOrName=="string"){if(!config)throw new Error("Provider config is required when registering by name");this.runtime.registerProvider(providerOrName,config);return}this.runtime.registerNativeProvider(providerOrName)}unregisterProvider(providerName){this.runtime.unregisterProvider(providerName)}registerVirtualModel(definition){this.runtime.registerVirtualModel(definition)}unregisterVirtualModel(providerName,id){this.runtime.unregisterVirtualModel(providerName,id)}getRegisteredProviderConfig(providerName){return this.runtime.getRegisteredProviderConfig(providerName)}getRegisteredNativeProvider(providerName){return this.runtime.getRegisteredNativeProvider(providerName)}getRegisteredProviderIds(){return this.runtime.getRegisteredProviderIds()}};import{randomUUID as randomUUID3}from"node:crypto";function prependText(text,result2){return{text:boundText(result2?.text?`${text}
703
- ${result2.text}`:text),truncated:result2?.truncated??!1}}function mergeFacts(base=[],terminal){let labels=new Set(terminal.map(([label])=>label));return boundFacts([...base.filter(([label])=>!labels.has(label)),...terminal])}var Execution=class{constructor(host,record,execution){this.controller=new AbortController,this.modeListeners=new Set,this.releaseParentSignal=()=>{},this.phase="queued",this.host=host,this.record=record,this.run=execution.run,this.kind=execution.kind,this.concurrency=execution.concurrency,this.placement=execution.background?"detaching":"caller",this.reason=execution.background?"submitted":"detached",this.onUpdate=execution.onUpdate,this.caller=new Promise((resolve18,reject)=>{this.resolveCaller=resolve18,this.rejectCaller=reject}),this.done=record.settlement;let parent=execution.signal;if(parent){let abort=()=>{(this.placement==="caller"||this.phase==="preflight")&&this.cancel()};parent.addEventListener("abort",abort,{once:!0}),this.releaseParentSignal=()=>parent.removeEventListener("abort",abort)}let task=record.task;this.control={id:task.id,signal:this.controller.signal,get mode(){return task.mode},onModeChange:listener=>this.onModeChange(listener),accept:()=>this.accept(),publish:update=>this.publish(update),attachOutput:(path10,cleanup)=>this.attachOutput(path10,cleanup),cancel:()=>{this.cancel()}}}get task(){return this.record.task}get aborted(){return this.controller.signal.aborted}get queued(){return this.phase==="queued"}get holdsBackgroundSlot(){return this.phase!=="settled"&&this.placement!=="caller"}get detachable(){return this.phase!=="settled"&&this.placement==="caller"&&!this.aborted}releaseParent(){this.releaseParentSignal(),this.releaseParentSignal=()=>{},this.onUpdate=void 0}start(){if(this.phase==="queued"){if(this.host.closed){this.cancel();return}this.phase="preflight",this.record.update(task=>{task.status="running"});try{this.running=Promise.resolve(this.run(this.control)),this.running.then(completion=>this.finish(completion),error=>this.finish(void 0,error))}catch(error){this.finish(void 0,error)}}}handOffIfQueued(){this.phase==="queued"&&this.handoff()&&this.announceBackground()}detach(){this.placement="detaching";let released=this.handoff();return()=>{released&&this.announceBackground()}}cancel(){return this.phase==="settled"||this.aborted?!1:(this.record.update(task=>{task.status="stopping"}),this.controller.abort(),this.phase==="queued"&&this.finish(void 0,new Error("Task cancelled before it started.")),this.host.emit(),!0)}onModeChange(listener){return this.phase==="settled"||this.host.closed?()=>{}:(this.modeListeners.add(listener),()=>{this.modeListeners.delete(listener)})}accept(){this.phase!=="preflight"||this.host.closed||this.aborted||(this.phase="accepted",this.placement==="detaching"&&this.releaseParent(),queueMicrotask(()=>this.handoffIfRunning()),this.host.emit())}handoffIfRunning(){let settled=!1,markSettled=()=>{settled=!0};this.running?.then(markSettled,markSettled),Promise.resolve().then(()=>{!settled&&this.handoff()&&this.announceBackground()})}handoff(){return this.placement!=="detaching"||this.phase!=="queued"&&this.phase!=="accepted"||this.host.closed||!this.record.visible||this.aborted?!1:(this.placement="background",this.record.update(task=>{task.mode="background"}),this.releaseParent(),this.resolveCaller({kind:"background",task:this.record.snapshot(),reason:this.reason}),!0)}announceBackground(){for(let listener of[...this.modeListeners])try{listener("background")}catch{}this.host.emit()}publish(update){if(!(this.phase==="settled"||this.host.closed)){if(this.record.update(task=>{task.result=resultText(update.result),update.display!==void 0&&(task.display=boundTaskText(update.display))}),update.usage!==void 0&&(this.usage=structuredClone(update.usage)),this.placement==="caller")try{this.onUpdate?.(update.result)}catch{}this.host.emit()}}attachOutput(path10,cleanup){if(this.phase==="settled"){if(cleanup)throw new Error("Task execution has settled");return}if(Buffer.byteLength(path10)>TASK_PATH_BYTES)throw new Error("Task output path is too large");this.record.attachOutput(path10,cleanup),this.host.emit()}finish(completion,error){let record=this.record;if(this.phase==="settled")return;this.phase="settled",this.modeListeners.clear(),this.releaseParent();let status=completion?completion.status??(this.aborted?"cancelled":"completed"):this.aborted?"cancelled":"failed";record.update(task=>{task.endedAt=Date.now(),task.status=status,task.display=completion?.display===void 0?void 0:boundTaskText(completion.display),completion?(task.result=resultText(completion.result),completion.error!==void 0&&(task.error=boundText(completion.error,TASK_ERROR_BYTES)),completion.facts&&(task.facts=mergeFacts(task.facts,completion.facts))):(task.error=errorText(error),task.result=prependText(task.error,task.result))});let diagnostic=record.task.error,warning;try{this.host.settle(record.snapshot(),completion?.usage??completion?.result.usage??this.usage)}catch(accountingError){let notice=`Usage settlement failed: ${errorText(accountingError)}`;warning=notice,record.update(task=>{task.error=boundText([task.error,notice].filter(Boolean).join(`
702
+ `)}}function printTimings(){if(ENABLED)for(let[namespace,timingNamespace]of timingNamespaces)printTimingGroup(`Startup Timings: ${namespace}`,timingNamespace.timings)}var require3=createRequire2(import.meta.url),isNodeSeaBinary="sea"in process.features&&process.features.sea===!0||process.getBuiltinModule("node:sea")?.isSea()===!0,isTypeScriptSourceRuntime=!isBunBinary&&path3.extname(fileURLToPath2(import.meta.url))===".ts",usesEmbeddedModules=isBunBinary||isNodeSeaBinary||isBundledNode,createJitiPromise;function getCreateJiti(){return createJitiPromise??=(usesEmbeddedModules?import("./jiti-static-loader-CLT3YR3B.js"):import("./jiti-loader-BFSSLU7G.js")).then(module=>module.createJiti),createJitiPromise}var virtualModulesPromise;function getVirtualModules(){return virtualModulesPromise??=import("./virtual-modules-NFDW2JKH.js").then(module=>module.VIRTUAL_MODULES),virtualModulesPromise}var _aliases=null;function getAliases(){if(_aliases)return _aliases;let __dirname=path3.dirname(fileURLToPath2(import.meta.url)),packageIndex=path3.resolve(__dirname,"../..","index.js"),typeboxEntry=require3.resolve("typebox"),typeboxCompileEntry=require3.resolve("typebox/compile"),typeboxValueEntry=require3.resolve("typebox/value"),packagesRoot=path3.resolve(__dirname,"../../../../"),resolveWorkspaceOrImport=(workspaceRelativePath,specifier)=>{let workspacePath=path3.join(packagesRoot,workspaceRelativePath);return fs2.existsSync(workspacePath)?workspacePath:fileURLToPath2(import.meta.resolve(specifier))},piCodingAgentEntry=packageIndex,piAgentCoreEntry=resolveWorkspaceOrImport("agent/dist/index.js","@earendil-works/pi-agent-core"),piTuiEntry=resolveWorkspaceOrImport("tui/dist/index.js","@earendil-works/pi-tui"),piAiCompatEntry=path3.resolve(__dirname,"pi-ai-extension-view.js"),piAiModelsEntry=resolveWorkspaceOrImport("ai/dist/models.js","@earendil-works/pi-ai/models"),piAiOauthEntry=resolveWorkspaceOrImport("ai/dist/oauth.js","@earendil-works/pi-ai/oauth"),piAiProvidersEntry=resolveWorkspaceOrImport("ai/dist/providers/all.js","@earendil-works/pi-ai/providers/all");return _aliases={"@earendil-works/pi-coding-agent":piCodingAgentEntry,[DISTRIBUTION_PACKAGE_NAME]:piCodingAgentEntry,"@earendil-works/pi-agent-core":piAgentCoreEntry,"@earendil-works/pi-tui":piTuiEntry,"@earendil-works/pi-ai/providers/all":piAiProvidersEntry,"@earendil-works/pi-ai/compat":piAiCompatEntry,"@earendil-works/pi-ai/models":piAiModelsEntry,"@earendil-works/pi-ai/oauth":piAiOauthEntry,"@earendil-works/pi-ai":piAiCompatEntry,"@mariozechner/pi-coding-agent":piCodingAgentEntry,"@mariozechner/pi-agent-core":piAgentCoreEntry,"@mariozechner/pi-tui":piTuiEntry,"@mariozechner/pi-ai/providers/all":piAiProvidersEntry,"@mariozechner/pi-ai/compat":piAiCompatEntry,"@mariozechner/pi-ai/models":piAiModelsEntry,"@mariozechner/pi-ai/oauth":piAiOauthEntry,"@mariozechner/pi-ai":piAiCompatEntry,typebox:typeboxEntry,"typebox/compile":typeboxCompileEntry,"typebox/value":typeboxValueEntry,"@sinclair/typebox":typeboxEntry,"@sinclair/typebox/compile":typeboxCompileEntry,"@sinclair/typebox/value":typeboxValueEntry},_aliases}var extensionCacheCwd,extensionCacheGeneration=0,extensionCache=new Map;function clearExtensionCache(){extensionCache.clear(),extensionCacheCwd=void 0,extensionCacheGeneration++}function useExtensionCacheCwd(cwd){let resolvedCwd=resolvePath(cwd);return extensionCacheCwd!==void 0&&!pathsEqual(extensionCacheCwd,resolvedCwd)&&clearExtensionCache(),extensionCacheCwd=resolvedCwd,{cwd:resolvedCwd,generation:extensionCacheGeneration}}function createExtensionRuntime(){let notInitialized=()=>{throw new Error("Extension runtime not initialized. Action methods cannot be called during extension loading.")},state2={},eventBusUnsubscribers=new Set,assertActive=()=>{if(state2.staleMessage)throw new Error(state2.staleMessage)},runtime={sendMessage:notInitialized,sendUserMessage:notInitialized,appendEntry:notInitialized,setSessionName:notInitialized,getSessionName:notInitialized,setLabel:notInitialized,getActiveTools:notInitialized,getAllTools:notInitialized,getSettings:notInitialized,setActiveTools:notInitialized,refreshTools:()=>{},getCommands:notInitialized,setModel:()=>Promise.reject(new Error("Extension runtime not initialized")),getThinkingLevel:notInitialized,setThinkingLevel:notInitialized,flagValues:new Map,pendingProviderRegistrations:[],pendingNativeProviderRegistrations:[],mcpServers:new McpServerRegistry,pendingVirtualModelRegistrations:[],createContext:notInitialized,assertActive,invalidate:message=>{if(!state2.staleMessage){state2.staleMessage=message??"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().";for(let unsubscribe of eventBusUnsubscribers)unsubscribe();eventBusUnsubscribers.clear()}},trackEventBusSubscription:unsubscribe=>{let active=!0,trackedUnsubscribe=()=>{active&&(active=!1,eventBusUnsubscribers.delete(trackedUnsubscribe),unsubscribe())};return eventBusUnsubscribers.add(trackedUnsubscribe),trackedUnsubscribe},registerProvider:(name,config,extensionPath="<unknown>")=>{runtime.pendingProviderRegistrations.push({name,config,extensionPath})},registerNativeProvider:(provider,extensionPath="<unknown>")=>{runtime.pendingNativeProviderRegistrations.push({provider,extensionPath})},unregisterProvider:name=>{runtime.pendingProviderRegistrations=runtime.pendingProviderRegistrations.filter(r=>r.name!==name),runtime.pendingNativeProviderRegistrations=runtime.pendingNativeProviderRegistrations.filter(r=>r.provider.id!==name)},registerVirtualModel:(definition,extensionPath="<unknown>")=>{runtime.pendingVirtualModelRegistrations.push({definition,extensionPath})},unregisterVirtualModel:(provider,id)=>{runtime.pendingVirtualModelRegistrations=runtime.pendingVirtualModelRegistrations.filter(({definition})=>definition.provider!==provider||definition.id!==id)}};return runtime}function createExtensionAPI(extension,runtime,cwd,eventBus){let pendingFlagValues=new Map,pendingRuntimeChanges=[],loadingUnsubscribers=[],state2="loading",assertActive=()=>{if(state2==="failed")throw new Error(`Extension "${extension.path}" failed to load and its API is no longer active.`);runtime.assertActive()},applyRuntimeChange=change=>{state2==="loading"?pendingRuntimeChanges.push(change):change()},clearPending=()=>{pendingFlagValues.clear(),pendingRuntimeChanges.length=0,loadingUnsubscribers.length=0};return{api:{on(event,handler){assertActive();let registeredHandler=(...args)=>handler(...args),list=extension.handlers.get(event)??[];return list.push(registeredHandler),extension.handlers.set(event,list),()=>{let handlers=extension.handlers.get(event);if(!handlers)return;let handlerIndex=handlers.indexOf(registeredHandler);handlerIndex!==-1&&(handlers.splice(handlerIndex,1),handlers.length===0&&extension.handlers.delete(event))}},registerTool(tool){if(assertActive(),typeof tool.parameters!="object"||tool.parameters===null||Array.isArray(tool.parameters))throw new Error(`Tool "${tool.name}" registered by extension "${extension.path}" must define an object parameter schema.`);extension.tools.set(tool.name,{definition:tool,sourceInfo:extension.sourceInfo}),runtime.refreshTools()},registerCommand(name,options){if(assertActive(),typeof name!="string"||name.length===0)throw new Error(`Command registered by extension "${extension.path}" must have a non-empty string name. Use pi.registerCommand("name", { description, handler }).`);if(typeof options?.handler!="function")throw new Error(`Command "/${name}" registered by extension "${extension.path}" must define handler().`);extension.commands.set(name,{name,sourceInfo:extension.sourceInfo,...options})},registerShortcut(shortcut,options){assertActive(),extension.shortcuts.set(shortcut,{shortcut,extensionPath:extension.path,...options})},registerFlag(name,options){if(assertActive(),options.default!==void 0&&typeof options.default!==options.type)throw new Error(`Invalid default for flag "${name}": expected ${options.type}, got ${typeof options.default}`);extension.flags.set(name,{name,extensionPath:extension.path,...options}),options.default!==void 0&&!runtime.flagValues.has(name)&&(state2==="loading"?pendingFlagValues.has(name)||pendingFlagValues.set(name,options.default):runtime.flagValues.set(name,options.default))},registerMessageRenderer(customType,renderer){assertActive(),extension.messageRenderers.set(customType,renderer)},registerMarkdownTransformer(transformer){assertActive(),extension.markdownTransformer=transformer},registerEntryRenderer(customType,renderer){assertActive(),extension.entryRenderers??=new Map,extension.entryRenderers.set(customType,renderer)},registerToolRenderer(resolver){assertActive(),extension.toolRenderers??=[],extension.toolRenderers.push(resolver)},getFlag(name){if(assertActive(),!!extension.flags.has(name))return runtime.flagValues.has(name)?runtime.flagValues.get(name):pendingFlagValues.get(name)},sendMessage(message,options){assertActive(),runtime.sendMessage(message,options)},sendUserMessage(content,options){assertActive(),runtime.sendUserMessage(content,options)},appendEntry(customType,data){assertActive(),runtime.appendEntry(customType,data)},setSessionName(name){assertActive(),runtime.setSessionName(name)},getSessionName(){return assertActive(),runtime.getSessionName()},setLabel(entryId,label){assertActive(),runtime.setLabel(entryId,label)},exec(command,args,options){return assertActive(),execCommand(command,args,options?.cwd??cwd,options)},getActiveTools(){return assertActive(),runtime.getActiveTools()},getAllTools(){return assertActive(),runtime.getAllTools()},getSettings(){return assertActive(),runtime.getSettings()},setActiveTools(toolNames){assertActive(),runtime.setActiveTools(toolNames)},getCommands(){return assertActive(),runtime.getCommands()},setModel(model){return assertActive(),runtime.setModel(model)},getThinkingLevel(){return assertActive(),runtime.getThinkingLevel()},setThinkingLevel(level){assertActive(),runtime.setThinkingLevel(level)},registerProvider(providerOrName,config){if(assertActive(),typeof providerOrName=="string"){if(!config)throw new Error("Provider config is required when registering by name");applyRuntimeChange(()=>runtime.registerProvider(providerOrName,config,extension.path));return}applyRuntimeChange(()=>runtime.registerNativeProvider(providerOrName,extension.path))},unregisterProvider(name){assertActive(),applyRuntimeChange(()=>runtime.unregisterProvider(name,extension.path))},registerMcpServer(name,config){assertActive();let validated=validateMcpServerConfig(name,config);if(typeof validated=="string")throw new Error(`Invalid MCP server registered by extension "${extension.path}": ${validated}`);let owner=runtime.mcpServers.get(name)?.extensionPath;if(owner!==void 0&&owner!==extension.path)throw new Error(`MCP server "${name}" is already registered by extension "${owner}"`);let clash=runtime.mcpServers.list().find(server2=>server2.name!==name&&mcpNamespace(server2.name)===mcpNamespace(name));if(clash)throw new Error(`MCP server "${name}" conflicts with registered server "${clash.name}"`);let server={name,config:structuredClone(validated),extensionPath:extension.path};applyRuntimeChange(()=>runtime.mcpServers.register(server))},unregisterMcpServer(name){assertActive(),applyRuntimeChange(()=>runtime.mcpServers.unregister(name,extension.path))},getMcpServers(){return assertActive(),runtime.mcpServers.list()},registerVirtualModel(model){assertActive();let definition={...model,route:request=>model.route(request,runtime.createContext())};applyRuntimeChange(()=>runtime.registerVirtualModel(definition,extension.path))},unregisterVirtualModel(provider,id){assertActive(),applyRuntimeChange(()=>runtime.unregisterVirtualModel(provider,id))},events:{emit(channel,data){assertActive(),eventBus.emit(channel,data)},on(channel,handler){assertActive();let unsubscribe=runtime.trackEventBusSubscription(eventBus.on(channel,handler));return state2==="loading"&&loadingUnsubscribers.push(unsubscribe),unsubscribe}}},commit:()=>{if(state2==="loading"){runtime.assertActive();for(let[name,value]of pendingFlagValues)runtime.flagValues.has(name)||runtime.flagValues.set(name,value);for(let apply of pendingRuntimeChanges)apply();state2="active",clearPending()}},discard:()=>{if(state2==="loading"){state2="failed";for(let unsubscribe of loadingUnsubscribers)unsubscribe();clearPending()}}}}function isCurrentCacheToken(cacheToken){return cacheToken!==void 0&&extensionCacheCwd===cacheToken.cwd&&extensionCacheGeneration===cacheToken.generation}async function loadExtensionModule(extensionPath,cacheToken){if(isCurrentCacheToken(cacheToken)){let cachedFactory=extensionCache.get(extensionPath);if(cachedFactory)return cachedFactory}let createJitiImpl=await getCreateJiti(),resolutionOptions=usesEmbeddedModules?{virtualModules:await getVirtualModules(),tryNative:!1}:isTypeScriptSourceRuntime?{virtualModules:await getVirtualModules(),tsconfigPaths:!0}:{alias:getAliases()},factory=await createJitiImpl(import.meta.url,{moduleCache:!1,...resolutionOptions}).import(extensionPath,{default:!0});if(typeof factory=="function")return isCurrentCacheToken(cacheToken)&&extensionCache.set(extensionPath,factory),factory}function createExtension(extensionPath,resolvedPath){let source=getSyntheticPathSource(extensionPath)??"local",baseDir=isSyntheticPath(extensionPath)?void 0:path3.dirname(resolvedPath);return{path:extensionPath,resolvedPath,sourceInfo:createSyntheticSourceInfo(extensionPath,{source,baseDir}),handlers:new Map,tools:new Map,messageRenderers:new Map,entryRenderers:new Map,commands:new Map,flags:new Map,shortcuts:new Map}}async function initializeExtension(factory,extensionPath,resolvedPath,cwd,eventBus,runtime){let extension=createExtension(extensionPath,resolvedPath),load=createExtensionAPI(extension,runtime,cwd,eventBus);try{await factory(load.api),load.commit()}catch(error){throw load.discard(),error}return time(`${extensionPath} factory`,"extensions"),extension}async function loadExtension(extensionPath,cwd,eventBus,runtime,cacheToken){let resolvedPath=resolvePath(extensionPath,cwd,{normalizeUnicodeSpaces:!0});try{let factory=await loadExtensionModule(resolvedPath,cacheToken);return time(`${extensionPath} module import`,"extensions"),factory?{extension:await initializeExtension(factory,extensionPath,resolvedPath,cwd,eventBus,runtime),error:null}:{extension:null,error:`Extension does not export a valid factory function: ${extensionPath}`}}catch(err){return{extension:null,error:`Failed to load extension: ${err instanceof Error?err.message:String(err)}`}}}async function loadExtensionFromFactory(factory,cwd,eventBus,runtime,extensionPath="<inline>"){let resolvedCwd=resolvePath(cwd);return initializeExtension(factory,extensionPath,extensionPath,resolvedCwd,eventBus,runtime)}async function loadExtensionsInternal(paths,cwd,eventBus,runtime,useCache=!1){let extensions=[],errors=[],warnings=[],cacheToken=useCache?useExtensionCacheCwd(cwd):void 0,resolvedCwd=cacheToken?.cwd??resolvePath(cwd),resolvedEventBus=eventBus??createEventBus(),resolvedRuntime=runtime??createExtensionRuntime();for(let extPath of paths){let{extension,error}=await loadExtension(extPath,resolvedCwd,resolvedEventBus,resolvedRuntime,cacheToken);if(error){errors.push({path:extPath,error});continue}extension&&extensions.push(extension)}return{extensions,errors,warnings,runtime:resolvedRuntime}}async function loadExtensions(paths,cwd,eventBus,runtime){return loadExtensionsInternal(paths,cwd,eventBus,runtime)}async function loadExtensionsCached(paths,cwd,eventBus,runtime){return loadExtensionsInternal(paths,cwd,eventBus,runtime,!0)}function isExtensionFile(name){return name.endsWith(".ts")||name.endsWith(".js")}function resolveExtensionEntries2(dir){let packageJsonPath=path3.join(dir,"package.json");if(fs2.existsSync(packageJsonPath)){let manifest=readPiManifest(packageJsonPath);if(manifest?.extensions?.length){let entries=[];for(let extPath of manifest.extensions){let resolvedExtPath=path3.resolve(dir,extPath);fs2.existsSync(resolvedExtPath)&&entries.push(resolvedExtPath)}if(entries.length>0)return entries}}let indexTs=path3.join(dir,"index.ts"),indexJs=path3.join(dir,"index.js");return fs2.existsSync(indexTs)?[indexTs]:fs2.existsSync(indexJs)?[indexJs]:null}function discoverExtensionsInDir(dir){if(!fs2.existsSync(dir))return[];let discovered=[];try{let entries=fs2.readdirSync(dir,{withFileTypes:!0});for(let entry of entries){let entryPath=path3.join(dir,entry.name);if((entry.isFile()||entry.isSymbolicLink())&&isExtensionFile(entry.name)){discovered.push(entryPath);continue}if(entry.isDirectory()||entry.isSymbolicLink()){let entries2=resolveExtensionEntries2(entryPath);entries2&&discovered.push(...entries2)}}}catch{return[]}return discovered}async function discoverAndLoadExtensions(configuredPaths,cwd,agentDir=getAgentDir(),eventBus){let resolvedCwd=resolvePath(cwd),resolvedAgentDir=resolvePath(agentDir),allPaths=[],seen=new Set,addPaths=paths=>{for(let p of paths){let resolved=path3.resolve(p);seen.has(resolved)||(seen.add(resolved),allPaths.push(p))}},localExtDir=path3.join(resolvedCwd,CONFIG_DIR_NAME,"extensions");addPaths(discoverExtensionsInDir(localExtDir));let globalExtDir=path3.join(resolvedAgentDir,"extensions");addPaths(discoverExtensionsInDir(globalExtDir));for(let p of configuredPaths){let resolved=resolvePath(p,resolvedCwd,{normalizeUnicodeSpaces:!0});if(fs2.existsSync(resolved)&&fs2.statSync(resolved).isDirectory()){let entries=resolveExtensionEntries2(resolved);if(entries){addPaths(entries);continue}addPaths(discoverExtensionsInDir(resolved));continue}addPaths([resolved])}return loadExtensions(allPaths,resolvedCwd,eventBus)}var ModelRegistry=class{constructor(runtime){this.runtime=runtime}getRuntime(){return this.runtime}refresh(options){return this.runtime.refresh(options)}getError(){return this.runtime.getError()}getAll(){return[...this.runtime.getModels()]}getAvailable(){return[...this.runtime.getAvailableSnapshot()]}find(provider,modelId){return this.runtime.getModel(provider,modelId)}findOfType(type,provider,modelId){return this.runtime.getModelOfType(type,provider,modelId)}hasConfiguredAuth(model){return this.runtime.hasConfiguredAuth(model.provider)}async getApiKeyAndHeaders(model){try{let resolution=await this.runtime.getAuth(model);if(!resolution){let compatibility=this.runtime.getCompatibilityRequestConfig(model);return compatibility.authHeader?{ok:!1,error:`No API key found for "${model.provider}"`}:{ok:!0,headers:compatibility.headers}}return{ok:!0,apiKey:resolution.auth.apiKey,headers:resolution.auth.headers,...resolution.auth.baseUrl?{baseUrl:resolution.auth.baseUrl}:{},env:resolution.env}}catch(error){let cause=error instanceof Error?error.cause:void 0,message=cause instanceof Error?cause.message:error instanceof Error?error.message:String(error);return{ok:!1,error:message==="authHeader requires a resolved API key"?`No API key found for "${model.provider}"`:message}}}getProviderAuthStatus(provider){return this.runtime.getProviderAuthStatus(provider)}getProvider(provider){return this.runtime.getProvider(provider)}stream(model,context,options){return this.runtime.stream(model,context,options)}streamSimple(model,context,options){return this.runtime.streamSimple(model,context,options)}complete(model,context,options){return this.runtime.complete(model,context,options)}getModelsOfType(type,provider){return this.runtime.getModelsOfType(type,provider)}getAvailableOfType(type,provider,options){return this.runtime.getAvailableOfType(type,provider,options)}getModelOfType(type,provider,modelId){return this.runtime.getModelOfType(type,provider,modelId)}classify(model,context,options){return this.runtime.classify(model,context,options)}generateImages(model,context,options){return this.runtime.generateImages(model,context,options)}getProviderDisplayName(provider){return this.runtime.getProvider(provider)?.name??provider}getProviderAuth(provider){return this.runtime.getAuth(provider)}async getApiKeyForProvider(provider){try{return(await this.runtime.getAuth(provider))?.auth.apiKey}catch{return}}isUsingOAuth(model){return this.runtime.isUsingOAuth(model.provider)}registerProvider(providerOrName,config){if(typeof providerOrName=="string"){if(!config)throw new Error("Provider config is required when registering by name");this.runtime.registerProvider(providerOrName,config);return}this.runtime.registerNativeProvider(providerOrName)}unregisterProvider(providerName){this.runtime.unregisterProvider(providerName)}registerVirtualModel(definition){this.runtime.registerVirtualModel(definition)}unregisterVirtualModel(providerName,id){this.runtime.unregisterVirtualModel(providerName,id)}getRegisteredProviderConfig(providerName){return this.runtime.getRegisteredProviderConfig(providerName)}getRegisteredNativeProvider(providerName){return this.runtime.getRegisteredNativeProvider(providerName)}getRegisteredProviderIds(){return this.runtime.getRegisteredProviderIds()}};import{randomUUID as randomUUID3}from"node:crypto";function prependText(text,result2){return{text:boundText(result2?.text?`${text}
703
+ ${result2.text}`:text),truncated:result2?.truncated??!1}}function mergeFacts(base=[],terminal){let labels=new Set(terminal.map(([label])=>label));return boundFacts([...base.filter(([label])=>!labels.has(label)),...terminal])}var Execution=class{constructor(host,record,execution){this.controller=new AbortController,this.modeListeners=new Set,this.releaseParentSignal=()=>{},this.phase="queued",this.host=host,this.record=record,this.run=execution.run,this.kind=execution.kind,this.concurrency=execution.concurrency,this.placement=execution.background?"detaching":"caller",this.reason=execution.background?"submitted":"detached",this.onUpdate=execution.onUpdate,this.caller=new Promise((resolve18,reject)=>{this.resolveCaller=resolve18,this.rejectCaller=reject}),this.done=record.settlement;let parent=execution.signal;if(parent){let abort=()=>{(this.placement==="caller"||this.phase==="preflight")&&this.cancel()};parent.addEventListener("abort",abort,{once:!0}),this.releaseParentSignal=()=>parent.removeEventListener("abort",abort)}let task=record.task;this.control={id:task.id,signal:this.controller.signal,get mode(){return task.mode},onModeChange:listener=>this.onModeChange(listener),accept:()=>this.accept(),publish:update=>this.publish(update),attachOutput:(path10,cleanup)=>this.attachOutput(path10,cleanup),cancel:()=>{this.cancel()}}}get task(){return this.record.task}get aborted(){return this.controller.signal.aborted}get queued(){return this.phase==="queued"}get holdsBackgroundSlot(){return this.phase!=="settled"&&this.placement!=="caller"}get detachable(){return this.phase!=="settled"&&this.placement==="caller"&&!this.aborted}releaseParent(){this.releaseParentSignal(),this.releaseParentSignal=()=>{},this.onUpdate=void 0}start(){if(this.phase==="queued"){if(this.host.closed){this.cancel();return}this.phase="preflight",this.record.update(task=>{task.status="running"});try{this.running=Promise.resolve(this.run(this.control)),this.running.then(completion=>this.finish(completion),error=>this.finish(void 0,error))}catch(error){this.finish(void 0,error)}}}handOffIfQueued(){this.phase==="queued"&&this.handoff()&&this.announceBackground()}detach(){this.placement="detaching";let released=this.handoff();return()=>{released&&this.announceBackground()}}cancel(){return this.phase==="settled"||this.aborted?!1:(this.record.update(task=>{task.status="stopping"}),this.controller.abort(),this.phase==="queued"&&this.finish(void 0,new Error("Task cancelled before it started.")),this.host.emit(),!0)}onModeChange(listener){return this.phase==="settled"||this.host.closed?()=>{}:(this.modeListeners.add(listener),()=>{this.modeListeners.delete(listener)})}accept(){this.phase!=="preflight"||this.host.closed||this.aborted||(this.phase="accepted",this.placement==="detaching"&&this.releaseParent(),queueMicrotask(()=>this.handoffIfRunning()),this.host.emit())}handoffIfRunning(){let settled=!1,markSettled=()=>{settled=!0};this.running?.then(markSettled,markSettled),Promise.resolve().then(()=>{!settled&&this.handoff()&&this.announceBackground()})}handoff(){return this.placement!=="detaching"||this.phase!=="queued"&&this.phase!=="accepted"||this.host.closed||!this.record.visible||this.aborted?!1:(this.placement="background",this.record.update(task=>{task.mode="background"}),this.releaseParent(),this.resolveCaller({kind:"background",task:this.record.snapshot(),reason:this.reason}),!0)}announceBackground(){for(let listener of[...this.modeListeners])try{listener("background")}catch{}this.host.emit()}publish(update){if(!(this.phase==="settled"||this.host.closed)){if(this.record.update(task=>{task.result=resultText(update.result),update.display!==void 0&&(task.display=boundTaskDisplay(update.display))}),update.usage!==void 0&&(this.usage=structuredClone(update.usage)),this.placement==="caller")try{this.onUpdate?.(update.result)}catch{}this.host.emit()}}attachOutput(path10,cleanup){if(this.phase==="settled"){if(cleanup)throw new Error("Task execution has settled");return}if(Buffer.byteLength(path10)>TASK_PATH_BYTES)throw new Error("Task output path is too large");this.record.attachOutput(path10,cleanup),this.host.emit()}finish(completion,error){let record=this.record;if(this.phase==="settled")return;this.phase="settled",this.modeListeners.clear(),this.releaseParent();let status=completion?completion.status??(this.aborted?"cancelled":"completed"):this.aborted?"cancelled":"failed";record.update(task=>{task.endedAt=Date.now(),task.status=status,task.display=completion?.display===void 0?void 0:boundTaskText(completion.display),completion?(task.result=resultText(completion.result),completion.error!==void 0&&(task.error=boundText(completion.error,TASK_ERROR_BYTES)),completion.facts&&(task.facts=mergeFacts(task.facts,completion.facts))):(task.error=errorText(error),task.result=prependText(task.error,task.result))});let diagnostic=record.task.error,warning;try{this.host.settle(record.snapshot(),completion?.usage??completion?.result.usage??this.usage)}catch(accountingError){let notice=`Usage settlement failed: ${errorText(accountingError)}`;warning=notice,record.update(task=>{task.error=boundText([task.error,notice].filter(Boolean).join(`
704
704
  `),2*TASK_ERROR_BYTES),task.result=prependText(notice,task.result)})}if(this.usage=void 0,this.placement!=="background")if(!completion)this.rejectCaller(error);else{let{usage:_usage,...result2}=completion.result;warning&&(result2.content=[{type:"text",text:warning},...result2.content]),this.resolveCaller({kind:"result",result:result2,status,error:diagnostic})}record.settle(),this.host.released(this)}};var TASKS_READ_MIN_BYTES=256;function clampReadBytes(bytes2){return Math.max(TASKS_READ_MIN_BYTES,boundReadBytes(bytes2))}function defaultReadMode(task){return task.output==="report"?"head":"tail"}var EXPIRED_OUTPUT="Output has expired: the managed log was released; showing the stored result.";function freeze(value){if(value!==null&&typeof value=="object"&&!Object.isFrozen(value)){for(let child of Object.values(value))freeze(child);Object.freeze(value)}return value}var TaskRecord=class _TaskRecord{constructor(task){this.onBranch=!0,this.pins=0,this.working=task,this.task=task,this.settlement=new Promise(resolve18=>{this.resolveSettlement=resolve18})}static restored(task,readError){let record=new _TaskRecord(task);return record.expiredReason=readError,record.settle(),record}get settled(){return isTaskTerminal(this.working.status)}settle(){this.resolveSettlement()}update(mutate){try{mutate(this.working)}finally{this.frozen=void 0}}snapshot(){return this.frozen??=freeze(structuredClone(this.working)),this.frozen}get visible(){return this.onBranch}setVisible(visible){this.onBranch=visible}pin(){this.pins++;let released=!1;return()=>{released||(released=!0,this.pins--)}}get inHistory(){return this.settled&&this.pins===0}get readError(){return this.expiredReason}attachOutput(path10,cleanup){if(this.cleanup)throw new Error("Managed output is already registered");this.cleanup=cleanup,this.update(task=>{task.outputPath=path10})}expireOutput(){if(!this.settled||this.pins>0||!this.cleanup)return;let cleanup=this.cleanup;return this.cleanup=void 0,this.update(task=>{task.outputPath=void 0}),this.expiredReason=EXPIRED_OUTPUT,cleanup}};function laneId(execution){return execution.concurrency?`${execution.kind}:${execution.concurrency.key}`:void 0}var TaskScheduler=class{constructor(){this.lanes=new Map}schedule(execution){let id=laneId(execution);if(id===void 0){execution.start();return}let lane=this.lanes.get(id);lane||(lane={running:new Set,waiting:[]},this.lanes.set(id,lane)),lane.waiting.push(execution),this.pump(id,lane)}release(execution){let id=laneId(execution),lane=id===void 0?void 0:this.lanes.get(id);if(!lane||id===void 0)return;lane.running.delete(execution);let index3=lane.waiting.indexOf(execution);index3>=0&&lane.waiting.splice(index3,1),this.pump(id,lane)}pump(id,lane){for(;lane.waiting.length>0&&lane.running.size<lane.waiting[0].concurrency.limit;){let next=lane.waiting.shift();lane.running.add(next),next.start()}lane.running.size===0&&lane.waiting.length===0&&this.lanes.get(id)===lane&&this.lanes.delete(id)}};var isForeground=task=>task.mode==="foreground";function selectRestorable(tasks,limits){let newest=new Map;for(let task of tasks){let previous=newest.get(task.id);previous&&previous.endedAt>task.endedAt||(newest.delete(task.id),newest.set(task.id,task))}let oldestFirst=[...newest.values()].sort((left,right)=>left.endedAt-right.endedAt),newestOf=(group,room)=>group.slice(Math.max(0,group.length-room)),keep=new Set([...newestOf(oldestFirst.filter(isForeground),limits.foreground),...newestOf(oldestFirst.filter(task=>!isForeground(task)),limits.background)]),kept=oldestFirst.filter(task=>keep.has(task)),dropped=Math.max(0,kept.length-limits.total);if(dropped===0)return kept;let doomed=new Set([...kept.filter(isForeground),...kept.filter(task=>!isForeground(task))].slice(0,dropped));return kept.filter(task=>!doomed.has(task))}var TaskStore=class{constructor(maxHistory,maxRetained,isClosed,onCleanupError){this.records=new Map,this.cleanups=new Set,this.maxHistory=maxHistory,this.maxRetained=maxRetained,this.isClosed=isClosed,this.onCleanupError=onCleanupError}get closed(){return this.isClosed()}get(id){return this.records.get(id)}match(prefix){return this.all().filter(({task})=>task.id.startsWith(prefix)||task.id.slice(task.kind.length+1).startsWith(prefix))}add(record){this.records.set(record.task.id,record)}all(){return[...this.records.values()]}unsettled(){return this.all().filter(record=>!record.settled)}visible(){return this.all().filter(record=>record.visible)}retainedCount(){return this.records.size+this.cleanups.size}cleanupsDone(){return Promise.all(this.cleanups)}restoreHistory(records,toolResults=new Map){if(this.closed)return;let history=this.historyRecords(),foreground=history.filter(record=>isForeground(record.task)).length,foregroundCapacity=Math.max(0,this.maxHistory-foreground),backgroundCapacity=Math.max(0,this.maxHistory-(history.length-foreground)),capacity=Math.max(0,Math.min(foregroundCapacity+backgroundCapacity,this.maxRetained-this.retainedCount())),saved=[];for(let value of records){let task=readVersionedTask(value);if(!task)continue;let existing=this.records.get(task.id);if(existing){existing.settled&&existing.setVisible(!0);continue}saved.push(task)}let selected=selectRestorable(saved,{foreground:foregroundCapacity,background:backgroundCapacity,total:capacity});for(let task of selected){let content=toolResults.get(task.toolCallId);!task.result&&content&&(task.result=resultText({content,details:void 0}));let expired=task.outputPath!==void 0;task.outputPath=void 0,this.add(TaskRecord.restored(task,expired?EXPIRED_OUTPUT:void 0))}}cleanupOutput(record){let cleanup=record.expireOutput();if(!cleanup)return;let pending=Promise.resolve().then(cleanup).catch(error=>{try{this.onCleanupError?.(errorText(error,"Task cleanup failed"))}catch{}}).finally(()=>this.cleanups.delete(pending));this.cleanups.add(pending)}historyRecords(){return this.all().filter(record=>record.inHistory)}trim(){if(this.closed){for(let record of this.records.values())this.cleanupOutput(record);return}let history=this.historyRecords(),expired=history.filter(record=>!record.visible);for(let inline of[!1,!0]){let group=history.filter(record=>record.visible&&isForeground(record.task)===inline);group.sort((left,right)=>(left.task.endedAt??0)-(right.task.endedAt??0)),expired.push(...group.slice(0,Math.max(0,group.length-this.maxHistory)))}for(let record of expired)this.records.delete(record.task.id),this.cleanupOutput(record)}};var TaskRuntime=class{constructor(options={}){this.executions=new Map,this.scheduler=new TaskScheduler,this.listeners=new Set,this._closed=!1,this.options=options,this.configuredEnabled=options.enabled??!1,this.maxBackground=Math.max(1,finiteLimit(options.maxBackground,8,128)),this.maxHistory=finiteLimit(options.maxHistory,32,1024),this.maxRetained=this.maxBackground+2*Math.max(1,this.maxHistory)+this.maxHistory,this.store=new TaskStore(this.maxHistory,this.maxRetained,()=>this.closed,options.onCleanupError);let runtime=this;this.host={get closed(){return runtime.closed},emit:()=>this.emit(),settle:(task,usage)=>this.options.onSettled?.(task,usage),released:execution=>{this.executions.delete(execution.task.id),this.scheduler.release(execution),this.store.trim(),this.emit()}}}get closed(){return this._closed}get session(){return this.options.session}restoreHistory(records,toolResults){this.store.restoreHistory(records,toolResults)}get enabled(){return this.configuredEnabled&&!this.closed}setEnabled(enabled){this.configuredEnabled=enabled,this.emit()}refresh(){this.emit()}get admitsBackground(){return this.enabled&&(this.options.canManageBackground?.()??!0)}backgroundActive(){return[...this.executions.values()].filter(execution=>execution.holdsBackgroundSlot).length}limitError(){return new Error(`Background task limit reached (${this.maxBackground}); stop or wait for a background task, or run in the foreground.`)}async execute(execution){if(this.closed)throw new Error("Task service is closed");if(execution.background){if(!this.enabled)throw new Error(TASK_BACKGROUND_REJECTION);if(!this.admitsBackground)throw new Error(TASK_MANAGEMENT_REJECTION);if(this.backgroundActive()>=this.maxBackground)throw this.limitError();if(this.store.retainedCount()>=this.maxRetained)throw new Error("Task history retention limit reached; deliver pending notifications or release task pins and delivery leases")}if(execution.signal?.aborted)throw execution.signal.reason??new Error("Execution aborted");if(!TASK_KIND_PATTERN.test(execution.kind))throw new Error("Invalid task source");let concurrency=execution.concurrency;if(concurrency&&(!concurrency.key||!Number.isSafeInteger(concurrency.limit)||concurrency.limit<1))throw new Error("Invalid task concurrency");let anchorId=this.options.anchor?.()??null;if(anchorId!==null&&Buffer.byteLength(anchorId)>8192)throw new Error("Task branch anchor is too large");let task={id:`${execution.kind}-${randomUUID3()}`,kind:execution.kind,label:boundText(execution.label??execution.kind,TASK_LABEL_BYTES),title:boundText(execution.title,TASK_TITLE_BYTES),output:execution.output??"log",...execution.input?{input:boundInput(execution.input)}:{},...execution.facts?.length?{facts:boundFacts(execution.facts)}:{},toolCallId:boundText(execution.toolCallId,512),anchorId,mode:"foreground",status:"queued",startedAt:Date.now()},record=new TaskRecord(task),active=new Execution(this.host,record,execution);return this.store.add(record),this.executions.set(task.id,active),this.scheduler.schedule(active),active.handOffIfQueued(),this.emit(),active.caller}detachable(record){return this.executions.get(record.task.id)?.detachable??!1}detachForeground(){if(!this.admitsBackground)return 0;let eligible=[...this.executions.values()].filter(execution=>execution.detachable).sort((left,right)=>left.task.startedAt-right.task.startedAt);if(!eligible.length)return 0;let free=this.maxBackground-this.backgroundActive();if(free<=0)throw this.limitError();return this.detachAll(eligible.slice(0,free))}canDetach(id){let record=this.lookup(id);return this.admitsBackground&&this.backgroundActive()<this.maxBackground&&this.detachable(record)}detach(id){let record=this.lookup(id);if(!this.admitsBackground||!this.detachable(record))return!1;if(this.backgroundActive()>=this.maxBackground)throw this.limitError();return this.detachAll([this.executions.get(record.task.id)]),!0}detachAll(executions){let notifications=executions.map(execution=>execution.detach());for(let notify of notifications)notify();return this.emit(),executions.length}list(){return this.store.visible().map(record=>record.snapshot())}lookup(id){let exact=this.store.get(id);if(exact)return exact;let matches=this.store.match(id);if(!id||matches.length!==1)throw new TaskLookupError(matches.length>1?"ambiguous":"unknown",matches.map(record=>record.snapshot()));return matches[0]}get(id){return this.lookup(id).snapshot()}async read(id,options={}){let record=this.lookup(id),release2=this.retain(record.task.id);try{let task=record.snapshot(),window={...options,mode:options.mode??defaultReadMode(task)};if(task.outputPath)try{return{task,...await readOutputSlice(task.outputPath,window)}}catch(error){return{task,readError:boundText(`Output could not be read: ${errorText(error)}`,4096),...sliceText(this.resultText(task),window)}}return{task,readError:record.readError,...sliceText(this.resultText(task),window)}}finally{release2()}}resultText(task){return task.result?.text||task.error||"No output yet."}kill(id){return this.cancel(this.lookup(id))}cancel(record){return this.executions.get(record.task.id)?.cancel()??!1}subscribe(listener){return this.closed?()=>{}:(this.listeners.add(listener),()=>{this.listeners.delete(listener)})}retain(id){return this.pin(this.lookup(id))}pin(record){let release2=record.pin();return()=>{release2(),this.store.trim()}}close(){if(!this.closed){this._closed=!0,this.listeners.clear();for(let record of this.store.all())this.executions.get(record.task.id)?.releaseParent(),this.cancel(record);this.options.onClosed?.(),this.store.trim()}}async shutdown(graceMs=2e3){this.close(),await this.drain(this.store.all(),graceMs)}activeOutsideBranch(ancestors){return this.store.unsettled().filter(record=>record.task.anchorId!==null&&!ancestors.has(record.task.anchorId)).map(record=>record.snapshot())}async cancelOutsideBranch(ancestors){let records=this.store.all();for(let record of records)record.setVisible(record.task.anchorId===null||ancestors.has(record.task.anchorId));let outside=records.filter(record=>!record.visible);for(let record of outside)this.cancel(record);this.store.trim(),this.emit(),await this.drain(outside,2e3)}async drain(records,graceMs){let timer;try{await Promise.race([Promise.all(records.map(record=>this.executions.get(record.task.id)?.done)).then(()=>this.store.cleanupsDone()),new Promise(resolve18=>{timer=setTimeout(resolve18,finiteLimit(graceMs,2e3,6e4))})])}finally{timer!==void 0&&clearTimeout(timer)}}emit(){if(!this.closed)for(let listener of[...this.listeners]){if(this.closed)break;try{listener()}catch{}}}};var Diff2=class{diff(oldStr,newStr,options={}){let callback;typeof options=="function"?(callback=options,options={}):"callback"in options&&(callback=options.callback);let oldString=this.castInput(oldStr,options),newString=this.castInput(newStr,options),oldTokens=this.removeEmpty(this.tokenize(oldString,options)),newTokens=this.removeEmpty(this.tokenize(newString,options));return this.diffWithOptionsObj(oldTokens,newTokens,options,callback)}diffWithOptionsObj(oldTokens,newTokens,options,callback){var _a;let done=value=>{if(value=this.postProcess(value,options),callback){setTimeout(function(){callback(value)},0);return}else return value},newLen=newTokens.length,oldLen=oldTokens.length,editLength=1,maxEditLength=newLen+oldLen;options.maxEditLength!=null&&(maxEditLength=Math.min(maxEditLength,options.maxEditLength));let maxExecutionTime=(_a=options.timeout)!==null&&_a!==void 0?_a:1/0,abortAfterTimestamp=Date.now()+maxExecutionTime,bestPath=[{oldPos:-1,lastComponent:void 0}],newPos=this.extractCommon(bestPath[0],newTokens,oldTokens,0,options);if(bestPath[0].oldPos+1>=oldLen&&newPos+1>=newLen)return done(this.buildValues(bestPath[0].lastComponent,newTokens,oldTokens));let minDiagonalToConsider=-1/0,maxDiagonalToConsider=1/0,execEditLength=()=>{for(let diagonalPath=Math.max(minDiagonalToConsider,-editLength);diagonalPath<=Math.min(maxDiagonalToConsider,editLength);diagonalPath+=2){let basePath,removePath=bestPath[diagonalPath-1],addPath=bestPath[diagonalPath+1];removePath&&(bestPath[diagonalPath-1]=void 0);let canAdd=!1;if(addPath){let addPathNewPos=addPath.oldPos-diagonalPath;canAdd=addPath&&0<=addPathNewPos&&addPathNewPos<newLen}let canRemove=removePath&&removePath.oldPos+1<oldLen;if(!canAdd&&!canRemove){bestPath[diagonalPath]=void 0;continue}if(!canRemove||canAdd&&removePath.oldPos<addPath.oldPos?basePath=this.addToPath(addPath,!0,!1,0,options):basePath=this.addToPath(removePath,!1,!0,1,options),newPos=this.extractCommon(basePath,newTokens,oldTokens,diagonalPath,options),basePath.oldPos+1>=oldLen&&newPos+1>=newLen)return done(this.buildValues(basePath.lastComponent,newTokens,oldTokens))||!0;bestPath[diagonalPath]=basePath,basePath.oldPos+1>=oldLen&&(maxDiagonalToConsider=Math.min(maxDiagonalToConsider,diagonalPath-1)),newPos+1>=newLen&&(minDiagonalToConsider=Math.max(minDiagonalToConsider,diagonalPath+1))}editLength++};if(callback)(function exec(){setTimeout(function(){if(editLength>maxEditLength||Date.now()>abortAfterTimestamp)return callback(void 0);execEditLength()||exec()},0)})();else for(;editLength<=maxEditLength&&Date.now()<=abortAfterTimestamp;){let ret=execEditLength();if(ret)return ret}}addToPath(path10,added,removed,oldPosInc,options){let last=path10.lastComponent;return last&&!options.oneChangePerToken&&last.added===added&&last.removed===removed?{oldPos:path10.oldPos+oldPosInc,lastComponent:{count:last.count+1,added,removed,previousComponent:last.previousComponent}}:{oldPos:path10.oldPos+oldPosInc,lastComponent:{count:1,added,removed,previousComponent:last}}}extractCommon(basePath,newTokens,oldTokens,diagonalPath,options){let newLen=newTokens.length,oldLen=oldTokens.length,oldPos=basePath.oldPos,newPos=oldPos-diagonalPath,commonCount=0;for(;newPos+1<newLen&&oldPos+1<oldLen&&this.equals(oldTokens[oldPos+1],newTokens[newPos+1],options);)newPos++,oldPos++,commonCount++,options.oneChangePerToken&&(basePath.lastComponent={count:1,previousComponent:basePath.lastComponent,added:!1,removed:!1});return commonCount&&!options.oneChangePerToken&&(basePath.lastComponent={count:commonCount,previousComponent:basePath.lastComponent,added:!1,removed:!1}),basePath.oldPos=oldPos,newPos}equals(left,right,options){return options.comparator?options.comparator(left,right):left===right||!!options.ignoreCase&&left.toLowerCase()===right.toLowerCase()}removeEmpty(array){let ret=[];for(let i=0;i<array.length;i++)array[i]&&ret.push(array[i]);return ret}castInput(value,options){return value}tokenize(value,options){return Array.from(value)}join(chars){return chars.join("")}postProcess(changeObjects,options){return changeObjects}get useLongestToken(){return!1}buildValues(lastComponent,newTokens,oldTokens){let components=[],nextComponent;for(;lastComponent;)components.push(lastComponent),nextComponent=lastComponent.previousComponent,delete lastComponent.previousComponent,lastComponent=nextComponent;components.reverse();let componentLen=components.length,componentPos=0,newPos=0,oldPos=0;for(;componentPos<componentLen;componentPos++){let component=components[componentPos];if(component.removed)component.value=this.join(oldTokens.slice(oldPos,oldPos+component.count)),oldPos+=component.count;else{if(!component.added&&this.useLongestToken){let value=newTokens.slice(newPos,newPos+component.count);value=value.map(function(value2,i){let oldValue=oldTokens[oldPos+i];return oldValue.length>value2.length?oldValue:value2}),component.value=this.join(value)}else component.value=this.join(newTokens.slice(newPos,newPos+component.count));newPos+=component.count,component.added||(oldPos+=component.count)}}return components}};function longestCommonPrefix(str1,str22){let i;for(i=0;i<str1.length&&i<str22.length;i++)if(str1[i]!=str22[i])return str1.slice(0,i);return str1.slice(0,i)}function longestCommonSuffix(str1,str22){let i;if(!str1||!str22||str1[str1.length-1]!=str22[str22.length-1])return"";for(i=0;i<str1.length&&i<str22.length;i++)if(str1[str1.length-(i+1)]!=str22[str22.length-(i+1)])return str1.slice(-i);return str1.slice(-i)}function replacePrefix(string,oldPrefix,newPrefix){if(string.slice(0,oldPrefix.length)!=oldPrefix)throw Error(`string ${JSON.stringify(string)} doesn't start with prefix ${JSON.stringify(oldPrefix)}; this is a bug`);return newPrefix+string.slice(oldPrefix.length)}function replaceSuffix(string,oldSuffix,newSuffix){if(!oldSuffix)return string+newSuffix;if(string.slice(-oldSuffix.length)!=oldSuffix)throw Error(`string ${JSON.stringify(string)} doesn't end with suffix ${JSON.stringify(oldSuffix)}; this is a bug`);return string.slice(0,-oldSuffix.length)+newSuffix}function removePrefix(string,oldPrefix){return replacePrefix(string,oldPrefix,"")}function removeSuffix(string,oldSuffix){return replaceSuffix(string,oldSuffix,"")}function maximumOverlap(string1,string2){return string2.slice(0,overlapCount(string1,string2))}function overlapCount(a,b){let startA=0;a.length>b.length&&(startA=a.length-b.length);let endB=b.length;a.length<b.length&&(endB=a.length);let map=Array(endB),k=0;map[0]=0;for(let j=1;j<endB;j++){for(b[j]==b[k]?map[j]=map[k]:map[j]=k;k>0&&b[j]!=b[k];)k=map[k];b[j]==b[k]&&k++}k=0;for(let i=startA;i<a.length;i++){for(;k>0&&a[i]!=b[k];)k=map[k];a[i]==b[k]&&k++}return k}function segment(string,segmenter3){let parts=[];for(let segmentObj of Array.from(segmenter3.segment(string))){let segment2=segmentObj.segment;parts.length&&/\s/.test(parts[parts.length-1])&&/\s/.test(segment2)?parts[parts.length-1]+=segment2:parts.push(segment2)}return parts}function trailingWs(string,segmenter3){if(segmenter3)return leadingAndTrailingWs(string,segmenter3)[1];let i;for(i=string.length-1;i>=0&&string[i].match(/\s/);i--);return string.substring(i+1)}function leadingWs(string,segmenter3){if(segmenter3)return leadingAndTrailingWs(string,segmenter3)[0];let match2=string.match(/^\s*/);return match2?match2[0]:""}function leadingAndTrailingWs(string,segmenter3){if(!segmenter3)return[leadingWs(string),trailingWs(string)];if(segmenter3.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');let segments=segment(string,segmenter3),firstSeg=segments[0],lastSeg=segments[segments.length-1],head=/\s/.test(firstSeg)?firstSeg:"",tail=/\s/.test(lastSeg)?lastSeg:"";return[head,tail]}var extendedWordChars="a-zA-Z0-9_\\u{AD}\\u{C0}-\\u{D6}\\u{D8}-\\u{F6}\\u{F8}-\\u{2C6}\\u{2C8}-\\u{2D7}\\u{2DE}-\\u{2FF}\\u{1E00}-\\u{1EFF}",tokenizeIncludingWhitespace=new RegExp(`[${extendedWordChars}]+|\\s+|[^${extendedWordChars}]`,"ug"),WordDiff=class extends Diff2{equals(left,right,options){return options.ignoreCase&&(left=left.toLowerCase(),right=right.toLowerCase()),left.trim()===right.trim()}tokenize(value,options={}){let parts;if(options.intlSegmenter){let segmenter3=options.intlSegmenter;if(segmenter3.resolvedOptions().granularity!="word")throw new Error('The segmenter passed must have a granularity of "word"');parts=segment(value,segmenter3)}else parts=value.match(tokenizeIncludingWhitespace)||[];let tokens2=[],prevPart=null;return parts.forEach(part=>{/\s/.test(part)?prevPart==null?tokens2.push(part):tokens2.push(tokens2.pop()+part):prevPart!=null&&/\s/.test(prevPart)?tokens2[tokens2.length-1]==prevPart?tokens2.push(tokens2.pop()+part):tokens2.push(prevPart+part):tokens2.push(part),prevPart=part}),tokens2}join(tokens2){return tokens2.map((token,i)=>i==0?token:token.replace(/^\s+/,"")).join("")}postProcess(changes,options){if(!changes||options.oneChangePerToken)return changes;let lastKeep=null,insertion=null,deletion=null;return changes.forEach(change=>{change.added?insertion=change:change.removed?deletion=change:((insertion||deletion)&&dedupeWhitespaceInChangeObjects(lastKeep,deletion,insertion,change,options.intlSegmenter),lastKeep=change,insertion=null,deletion=null)}),(insertion||deletion)&&dedupeWhitespaceInChangeObjects(lastKeep,deletion,insertion,null,options.intlSegmenter),changes}},wordDiff=new WordDiff;function diffWords(oldStr,newStr,options){return options?.ignoreWhitespace!=null&&!options.ignoreWhitespace?diffWordsWithSpace(oldStr,newStr,options):wordDiff.diff(oldStr,newStr,options)}function dedupeWhitespaceInChangeObjects(startKeep,deletion,insertion,endKeep,segmenter3){if(deletion&&insertion){let[oldWsPrefix,oldWsSuffix]=leadingAndTrailingWs(deletion.value,segmenter3),[newWsPrefix,newWsSuffix]=leadingAndTrailingWs(insertion.value,segmenter3);if(startKeep){let commonWsPrefix=longestCommonPrefix(oldWsPrefix,newWsPrefix);startKeep.value=replaceSuffix(startKeep.value,newWsPrefix,commonWsPrefix),deletion.value=removePrefix(deletion.value,commonWsPrefix),insertion.value=removePrefix(insertion.value,commonWsPrefix)}if(endKeep){let commonWsSuffix=longestCommonSuffix(oldWsSuffix,newWsSuffix);endKeep.value=replacePrefix(endKeep.value,newWsSuffix,commonWsSuffix),deletion.value=removeSuffix(deletion.value,commonWsSuffix),insertion.value=removeSuffix(insertion.value,commonWsSuffix)}}else if(insertion){if(startKeep){let ws=leadingWs(insertion.value,segmenter3);insertion.value=insertion.value.substring(ws.length)}if(endKeep){let ws=leadingWs(endKeep.value,segmenter3);endKeep.value=endKeep.value.substring(ws.length)}}else if(startKeep&&endKeep){let newWsFull=leadingWs(endKeep.value,segmenter3),[delWsStart,delWsEnd]=leadingAndTrailingWs(deletion.value,segmenter3),newWsStart=longestCommonPrefix(newWsFull,delWsStart);deletion.value=removePrefix(deletion.value,newWsStart);let newWsEnd=longestCommonSuffix(removePrefix(newWsFull,newWsStart),delWsEnd);deletion.value=removeSuffix(deletion.value,newWsEnd),endKeep.value=replacePrefix(endKeep.value,newWsFull,newWsEnd),startKeep.value=replaceSuffix(startKeep.value,newWsFull,newWsFull.slice(0,newWsFull.length-newWsEnd.length))}else if(endKeep){let endKeepWsPrefix=leadingWs(endKeep.value,segmenter3),deletionWsSuffix=trailingWs(deletion.value,segmenter3),overlap=maximumOverlap(deletionWsSuffix,endKeepWsPrefix);deletion.value=removeSuffix(deletion.value,overlap)}else if(startKeep){let startKeepWsSuffix=trailingWs(startKeep.value,segmenter3),deletionWsPrefix=leadingWs(deletion.value,segmenter3),overlap=maximumOverlap(startKeepWsSuffix,deletionWsPrefix);deletion.value=removePrefix(deletion.value,overlap)}}var WordsWithSpaceDiff=class extends Diff2{tokenize(value){let regex=new RegExp(`(\\r?\\n)|[${extendedWordChars}]+|[^\\S\\n\\r]+|[^${extendedWordChars}]`,"ug");return value.match(regex)||[]}},wordsWithSpaceDiff=new WordsWithSpaceDiff;function diffWordsWithSpace(oldStr,newStr,options){return wordsWithSpaceDiff.diff(oldStr,newStr,options)}var LineDiff=class extends Diff2{constructor(){super(...arguments),this.tokenize=tokenize2}equals(left,right,options){return options.ignoreWhitespace?((!options.newlineIsToken||!left.includes(`
705
705
  `))&&(left=left.trim()),(!options.newlineIsToken||!right.includes(`
706
706
  `))&&(right=right.trim())):options.ignoreNewlineAtEof&&!options.newlineIsToken&&(left.endsWith(`
@@ -927,7 +927,7 @@ Some tools override it with toolExposure.`:""}`,items:(server.connection?.tools?
927
927
  `)},pickServer=async(name,ctx,options2)=>{if(name){let server=findServer(name);return server?options2.eligible(server)||ctx.ui.notify(options2.none,"error"):ctx.ui.notify(`No MCP server named "${name}".`,"error"),server&&options2.eligible(server)?server:void 0}let candidates=servers.filter(options2.eligible);if(candidates.length===0){ctx.ui.notify(options2.none,"info");return}let preferred=candidates.filter(options2.preferred);if(candidates.length===1)return candidates[0];if(preferred.length===1)return preferred[0];let choice=await ctx.ui.select("MCP server",candidates.map(server=>server.entry.name));return candidates.find(server=>server.entry.name===choice)},usesOAuth=server=>server.connection?.oauthUrl!==void 0,oauthPick={eligible:usesOAuth,preferred:server=>server.connection?.state==="needs-auth",none:"No enabled MCP server uses OAuth. Only HTTP servers without an Authorization header do."},loginCommand=async(server,ctx)=>{let{name}=server.entry;if(!ctx.hasUI){ctx.ui.notify(`Signing in to MCP server "${name}" requires interactive mode.`,"error");return}let{signal}=session,failure;if(ctx.mode==="tui"?await showMcpManager(ctx,async ui=>{failure=await signInWithUi(ui,server)}):failure=await signIn(server,{showAuthorizationUrl:url=>{ctx.ui.notify(`Sign in to MCP server "${name}" in your browser:
928
928
  ${url.href}`,"info"),openUrl(url.href)},promptForRedirectUrl:signal2=>ctx.ui.input(`Waiting for sign-in to "${name}". If the browser cannot reach this machine, paste the URL it was redirected to.`,"http://127.0.0.1:.../callback?code=...",{signal:signal2})}),!signal.aborted){if(failure){ctx.ui.notify(failure,failure==="Sign-in cancelled."?"info":"error");return}ensureDiscoveryActive(ctx),ctx.ui.notify(`Signed in to MCP server "${name}" (${server.connection?.tools.length??0} tools).`,"info")}};pi.on("session_start",(_event,ctx)=>{let loaded=(options.loadConfig??defaultLoadConfig)(ctx);configErrors=loaded.errors,projectConfig=loaded.projectConfig,autoEnableCodemode=loaded.autoEnableCodemode??!0,warnedUnreachable=!1,waitedForStartup=!1,sessionCwd=ctx.cwd,modelRegistry=ctx.modelRegistry,session=new AbortController;let{signal}=session;configuredEntries=loaded.servers;let registered2=registeredServers();overridden=registered2.overridden,servers=[...loaded.servers.map(entry=>({entry})),...registered2.servers],emitChange(),ensureDiscoveryActive(ctx);let enabled=servers.filter(isEnabled);if(enabled.length===0){reportProblems(ctx);return}let runtime=new Promise(resolve18=>setImmediate(resolve18)).then(()=>loadMcpRuntime());pending=Promise.all(enabled.map(server=>startConnection(server,runtime))).then(()=>{signal.aborted||reportProblems(ctx)}).catch(error=>{try{ctx.ui.notify(`MCP failed to load: ${errorMessage3(error)}`,"error")}catch{}})});let waitForDirectServers=async ctx=>{if(waitedForStartup)return;waitedForStartup=!0;let ready=servers.flatMap(server=>isEnabled(server)&&hasDirectTools(server.entry)&&server.ready?[server.ready]:[]);if(ready.length===0)return;let timer,finished=await Promise.race([Promise.all(ready).then(()=>!0),new Promise(resolve18=>{timer=setTimeout(()=>resolve18(!1),startupWaitMs)})]);clearTimeout(timer),finished||ctx.ui.notify("MCP servers are still connecting; their tools become available once connected.","info")};pi.on("before_agent_start",async(event,ctx)=>{await waitForDirectServers(ctx);let{sections}=event.systemPromptOptions,section=renderServersSection(servers);section?sections[MCP_SERVERS_SECTION]=section:delete sections[MCP_SERVERS_SECTION]}),pi.on("tool_call",async(event,ctx)=>{let tool=pi.getAllTools().find(candidate=>candidate.name===event.toolName);if(!tool)return;let readyServers=servers.filter(server=>isEnabled(server)&&server.ready);if(readyServers.length===0)return;let waiting=[],reach=tool.reachesTools?.(event.input);if(reach!==void 0)waiting=readyServers.filter(server=>reachesServer(reach,server.entry.name));else if(RESOURCE_TOOL_NAMES.has(tool.name))waiting=readyServers;else{let owner=toolOwners.get(event.toolName)?.split("\0",1)[0];waiting=readyServers.filter(server=>server.entry.name===owner)}await waitForServers(waiting,ctx.signal)}),pi.on("turn_start",async(_event,ctx)=>{tokensAtSignIn.size>0&&await reconnectSignedIn(ctx)}),pi.on("mcp_servers_change",async(_event,ctx)=>{let{signal}=session;if(signal.aborted)return;let registered2=registeredServers();overridden=registered2.overridden;let next=new Map(registered2.servers.map(server=>[server.entry.name,server])),removed=servers.filter(server=>server.entry.scope==="extension"&&next.get(server.entry.name)?.registeredConfig!==server.registeredConfig);servers=servers.filter(server=>!removed.includes(server));for(let server of removed)hideTools(server.entry.name);let added=registered2.servers.filter(server=>!findServer(server.entry.name));servers.push(...added),emitChange(),ensureDiscoveryActive(ctx),await Promise.all(removed.map(server=>server.connection?.close()));let connecting=added.filter(isEnabled);if(!(signal.aborted||connecting.length===0)){try{if(await Promise.all(connecting.map(server=>startConnection(server))),signal.aborted){await Promise.all(connecting.map(server=>server.connection?.close()));return}}catch(error){ctx.ui.notify(`MCP failed to load: ${errorMessage3(error)}`,"error");return}signal.aborted||reportProblems(ctx,connecting)}}),pi.on("session_shutdown",async()=>{session.abort();let closing=connections();servers=[],emitChange(),await Promise.all([...backgroundActions,...closing.map(connection=>connection.close())])}),pi.registerCommand("mcp",{description:"Manage MCP servers: sign in, reconnect, enable or disable, and change exposure",getArgumentCompletions:prefix=>{let[action,server,...rest]=prefix.trimStart().split(/\s+/);if(rest.length>0)return null;if(server===void 0)return["login","logout","reconnect"].filter(item=>item.startsWith(action??"")).map(item=>({value:`${item} `,label:item}));if(action!=="login"&&action!=="logout"&&action!=="reconnect")return null;let items=servers.filter(candidate=>action==="reconnect"?candidate.connection!==void 0:usesOAuth(candidate)).filter(candidate=>candidate.entry.name.startsWith(server)).map(candidate=>({value:`${action} ${candidate.entry.name}`,label:candidate.entry.name,description:describeState(candidate)}));return items.length>0?items:null},handler:async(args,ctx)=>{let[action,name,...extra]=args.trim().split(/\s+/).filter(Boolean);if(action===void 0){ctx.mode==="tui"?await showMcpManager(ctx,ui=>manage(ui,ctx)):(await pending,ctx.ui.notify(formatStatus(),"info"));return}if(extra.length>0){ctx.ui.notify(MCP_USAGE,"warning");return}switch(await pending,action){case"login":{let server=await pickServer(name,ctx,oauthPick);server&&await loginCommand(server,ctx);return}case"logout":{let server=await pickServer(name,ctx,oauthPick);if(!server)return;let removed=await signOut(server);ctx.ui.notify(removed?`Signed out of MCP server "${server.entry.name}".`:`No stored credentials for MCP server "${server.entry.name}".`,"info");return}case"reconnect":{let server=await pickServer(name,ctx,{eligible:candidate=>candidate.connection!==void 0,preferred:candidate=>candidate.connection?.state==="failed"||candidate.connection?.state==="disconnected",none:"No enabled MCP server to reconnect."});if(!server)return;let failure=await reconnect(server);failure?ctx.ui.notify(failure,"error"):(ensureDiscoveryActive(ctx),ctx.ui.notify(`Reconnected to MCP server "${server.entry.name}" (${describeState(server)}).`,"info"));return}default:ctx.ui.notify(MCP_USAGE,"warning")}}})}}function defaultLoadConfig(ctx){return loadMcpConfig({agentDir:getAgentDir(),cwd:ctx.cwd,projectTrusted:ctx.isProjectTrusted()})}var mcp_default=createMcpExtension();function createToolSearchExtension(){return pi=>{pi.registerTool({...createToolSearchToolDefinition({tools:pi}),defaultActive:!1})}}var tool_search_default=createToolSearchExtension();var BorderedLoader=class extends Container{constructor(tui,theme2,message,options){super(),this.cancellable=options?.cancellable??!0;let borderColor=s=>theme2.fg("border",s);this.addChild(new DynamicBorder(borderColor)),this.cancellable?this.loader=new CancellableLoader(tui,s=>theme2.fg("accent",s),s=>theme2.fg("muted",s),message):(this.signalController=new AbortController,this.loader=new Loader(tui,s=>theme2.fg("accent",s),s=>theme2.fg("muted",s),message)),this.addChild(this.loader),this.cancellable&&(this.addChild(new Spacer(1)),this.addChild(new Text(keyHint("tui.select.cancel","cancel"),1,0))),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder(borderColor))}get signal(){return this.cancellable?this.loader.signal:this.signalController?.signal??new AbortController().signal}set onAbort(fn){this.cancellable&&(this.loader.onAbort=fn)}handleInput(data){this.cancellable&&this.loader.handleInput(data)}dispose(){"dispose"in this.loader&&typeof this.loader.dispose=="function"?this.loader.dispose():"stop"in this.loader&&typeof this.loader.stop=="function"&&this.loader.stop()}};var import_cross_spawn=__toESM(require_cross_spawn(),1);import{mkdtempSync,readFileSync as readFileSync12,rmSync as rmSync3,writeFileSync as writeFileSync7}from"node:fs";import{tmpdir as tmpdir2}from"node:os";import{join as join21}from"node:path";function parseEditorCommand(command){let args=[],current="",quote,started=!1;for(let char of command.trim()){if(quote){char===quote?quote=void 0:current+=char,started=!0;continue}if(char==='"'||char==="'"){quote=char,started=!0;continue}if(/\s/u.test(char)){started&&(args.push(current),current="",started=!1);continue}current+=char,started=!0}return started&&args.push(current),args}async function editInExternalEditor(options){let directory=mkdtempSync(join21(tmpdir2(),"pi-editor-")),filePath=join21(directory,"prompt.md");try{writeFileSync7(filePath,options.content,"utf-8");let[editor,...editorArgs]=parseEditorCommand(options.command);if(!editor)return{status:"failed",message:`Failed to launch external editor: ${options.command}`};process.stdout.write(`Launching external editor: ${options.command}
929
929
  Pi will resume when the editor exits.
930
- `);let exit=await new Promise(resolve18=>{let child=(0,import_cross_spawn.default)(editor,[...editorArgs,filePath],{stdio:"inherit"});child.on("error",()=>resolve18(null)),child.on("close",(code,signal)=>resolve18(code??signal))});return exit===null?{status:"failed",message:`Failed to launch external editor: ${options.command}`}:exit!==0?{status:"failed",message:`External editor exited with ${typeof exit=="number"?`code ${exit}`:exit}; prompt unchanged`}:{status:"complete",content:stripBom(readFileSync12(filePath,"utf-8")).replace(/\n$/,"")}}finally{try{rmSync3(directory,{recursive:!0,force:!0})}catch{}}}var ExtensionEditorComponent=class extends Container{get focused(){return this._focused}set focused(value){this._focused=value,this.editor.focused=value}constructor(tui,keybindings,title,prefill,onSubmit,onCancel,options,externalEditorCommand){super(),this.externalEditorStatus=new Text("",1,0),this._focused=!1,this.tui=tui,this.keybindings=keybindings,this.externalEditorCommand=externalEditorCommand||process.env.VISUAL||process.env.EDITOR||(process.platform==="win32"?"notepad":"nano"),this.onSubmitCallback=onSubmit,this.onCancelCallback=onCancel;let{description,...editorOptions}=options??{};this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("accent",title),1,0)),description&&(this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("text",description),1,0))),this.addChild(new Spacer(1)),this.editor=new Editor(tui,getEditorTheme(),editorOptions),prefill&&this.editor.setText(prefill),this.editor.onSubmit=text=>{this.onSubmitCallback(text)},this.addChild(this.editor),this.addChild(this.externalEditorStatus),this.addChild(new Spacer(1));let hint=keyHint("tui.select.confirm","submit")+" "+keyHint("tui.input.newLine","newline")+" "+keyHint("tui.select.cancel","cancel")+` ${keyHint("app.editor.external","external editor")}`;this.addChild(new Text(hint,1,0)),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}handleInput(keyData){if(getKeybindings().matches(keyData,"tui.select.cancel")){this.onCancelCallback();return}if(this.keybindings.matches(keyData,"app.editor.external")){this.handleOpenExternalEditor();return}this.editor.handleInput(keyData)}async handleOpenExternalEditor(){let content=this.editor.getText();this.tui.stop();try{let result2=await editInExternalEditor({command:this.externalEditorCommand,content});this.externalEditorStatus.setText(result2.status==="failed"?theme.fg("warning",result2.message):""),result2.status==="complete"&&this.editor.setText(result2.content)}finally{this.tui.start(),this.tui.requestRender(!0)}}};function createMarkdownTransform(messageType,isStreaming,transformers,messageId,timestamp){return(markdown,availableWidth)=>applyMarkdownTransformers(markdown,{messageType,isStreaming:isStreaming(),availableWidth,messageId,timestamp},transformers)}function applyMarkdownTransformers(markdown,context,transformers){let transformedMarkdown=markdown;for(let transformer of transformers)try{let transformed=transformer(transformedMarkdown,context);typeof transformed=="string"&&(transformedMarkdown=transformed)}catch{}return transformedMarkdown}var OSC133_ZONE_START="\x1B]133;A\x07",OSC133_ZONE_END="\x1B]133;B\x07",OSC133_ZONE_FINAL="\x1B]133;C\x07",PROMPT_MARKER="\u276F",GUTTER_WIDTH=2,UserMessageComponent=class extends Container{constructor(text,markdownTheme=getMarkdownTheme(),outputPad=1,markdownTransformers=[],messageId,timestamp){super(),this.navigationAnchorOffsets=new Map,this.text=text,this.markdownTheme=markdownTheme,this.outputPad=outputPad,this.markdownTransformers=markdownTransformers,this.messageId=messageId,this.timestamp=timestamp,this.rebuild()}getNavigationSummary(){return this.text.replaceAll(/\s+/g," ").trim()}getNavigationAnchorOffset(width){let cached=this.navigationAnchorOffsets.get(width);if(cached!==void 0)return cached;let offset=this.render(width).findIndex(line=>stripTerminalSequences(line).trim().length>0),anchorOffset=offset<0?0:offset;return this.navigationAnchorOffsets.set(width,anchorOffset),anchorOffset}setOutputPad(padding){this.outputPad=padding,this.rebuild()}invalidate(){super.invalidate(),this.navigationAnchorOffsets.clear(),this.rendered=void 0}handleMouse(){}rebuild(){this.navigationAnchorOffsets.clear(),this.rendered=void 0,this.clear(),this.markdown=new Markdown(this.text,0,0,this.markdownTheme,{color:content=>theme.fg("userMessageText",content),bgColor:content=>theme.bg("userMessageBg",content)},{preserveOrderedListMarkers:!0,preserveBackslashEscapes:!0,transform:createMarkdownTransform("user",()=>!1,this.markdownTransformers,this.messageId,this.timestamp)}),this.addChild(this.markdown)}render(width){let padding=Math.max(0,Math.floor(this.outputPad)),source=this.markdown.render(Math.max(1,width-padding*2-GUTTER_WIDTH));if(this.rendered?.width===width&&this.rendered.source===source)return this.rendered.lines;if(source.length===0)return[];let fill=text=>theme.bg("userMessageBg",text),indent=" ".repeat(padding),marker=fill(`${indent}${theme.fg("muted",PROMPT_MARKER)} `),hanging=fill(" ".repeat(padding+GUTTER_WIDTH)),trailing=padding>0?fill(indent):"",lines=source.map((line,index3)=>`${index3===0?marker:hanging}${line}${trailing}`);return lines[lines.length-1]=OSC133_ZONE_END+OSC133_ZONE_FINAL+lines[lines.length-1],lines[0]=OSC133_ZONE_START+lines[0],this.rendered={width,source,lines},lines}};var ARMIN_WIDTH=31,ARMIN_HEIGHT=36,WIDTH=ARMIN_WIDTH,HEIGHT=ARMIN_HEIGHT,BITS=[255,255,255,127,255,240,255,127,255,237,255,127,255,219,255,127,255,183,255,127,255,119,254,127,63,248,254,127,223,255,254,127,223,63,252,127,159,195,251,127,111,252,244,127,247,15,247,127,247,255,247,127,247,255,227,127,247,7,232,127,239,248,103,112,15,255,187,111,241,0,208,91,253,63,236,83,193,255,239,87,159,253,238,95,159,252,174,95,31,120,172,95,63,0,80,108,127,0,220,119,255,192,63,120,255,1,248,127,255,3,156,120,255,7,140,124,255,15,206,120,255,255,207,127,255,255,207,120,255,255,223,120,255,255,223,125,255,255,63,126,255,255,255,127],BYTES_PER_ROW=Math.ceil(WIDTH/8),DISPLAY_HEIGHT=Math.ceil(HEIGHT/2),EFFECTS=["typewriter","scanline","rain","fade","crt","glitch","dissolve"];function isArminPixel(x,y){if(y>=HEIGHT)return!1;let byteIndex=y*BYTES_PER_ROW+Math.floor(x/8),bitIndex=x%8;return(BITS[byteIndex]>>bitIndex&1)===0}function getChar(x,row){let upper=isArminPixel(x,row*2),lower=isArminPixel(x,row*2+1);return upper&&lower?"\u2588":upper?"\u2580":lower?"\u2584":" "}function buildFinalGrid(){let grid=[];for(let row=0;row<DISPLAY_HEIGHT;row++){let line=[];for(let x=0;x<WIDTH;x++)line.push(getChar(x,row));grid.push(line)}return grid}var ArminComponent=class{constructor(ui){this.interval=null,this.effectState={},this.cachedLines=[],this.cachedWidth=0,this.gridVersion=0,this.cachedVersion=-1,this.ui=ui,this.effect=EFFECTS[Math.floor(Math.random()*EFFECTS.length)],this.finalGrid=buildFinalGrid(),this.currentGrid=this.createEmptyGrid(),this.initEffect(),this.startAnimation()}invalidate(){this.cachedWidth=0}render(width){if(width===this.cachedWidth&&this.cachedVersion===this.gridVersion)return this.cachedLines;let padding=1,availableWidth=width-padding;this.cachedLines=this.currentGrid.map(row=>{let clipped2=row.slice(0,availableWidth).join(""),padRight=Math.max(0,width-padding-clipped2.length);return` ${theme.fg("accent",clipped2)}${" ".repeat(padRight)}`});let message="ARMIN SAYS HI",msgPadRight=Math.max(0,width-padding-message.length);return this.cachedLines.push(` ${theme.fg("accent",message)}${" ".repeat(msgPadRight)}`),this.cachedWidth=width,this.cachedVersion=this.gridVersion,this.cachedLines}createEmptyGrid(){return Array.from({length:DISPLAY_HEIGHT},()=>Array(WIDTH).fill(" "))}initEffect(){switch(this.effect){case"typewriter":this.effectState={pos:0};break;case"scanline":this.effectState={row:0};break;case"rain":this.effectState={drops:Array.from({length:WIDTH},()=>({y:-Math.floor(Math.random()*DISPLAY_HEIGHT*2),settled:0}))};break;case"fade":{let positions=[];for(let row=0;row<DISPLAY_HEIGHT;row++)for(let x=0;x<WIDTH;x++)positions.push([row,x]);for(let i=positions.length-1;i>0;i--){let j=Math.floor(Math.random()*(i+1));[positions[i],positions[j]]=[positions[j],positions[i]]}this.effectState={positions,idx:0};break}case"crt":this.effectState={expansion:0};break;case"glitch":this.effectState={phase:0,glitchFrames:8};break;case"dissolve":{this.currentGrid=Array.from({length:DISPLAY_HEIGHT},()=>Array.from({length:WIDTH},()=>{let chars=[" ","\u2591","\u2592","\u2593","\u2588","\u2580","\u2584"];return chars[Math.floor(Math.random()*chars.length)]}));let dissolvePositions=[];for(let row=0;row<DISPLAY_HEIGHT;row++)for(let x=0;x<WIDTH;x++)dissolvePositions.push([row,x]);for(let i=dissolvePositions.length-1;i>0;i--){let j=Math.floor(Math.random()*(i+1));[dissolvePositions[i],dissolvePositions[j]]=[dissolvePositions[j],dissolvePositions[i]]}this.effectState={positions:dissolvePositions,idx:0};break}}}startAnimation(){let fps=this.effect==="glitch"?60:30;this.interval=setInterval(()=>{let done=this.tickEffect();this.updateDisplay(),this.ui.requestRender(),done&&this.stopAnimation()},1e3/fps)}stopAnimation(){this.interval&&(clearInterval(this.interval),this.interval=null)}tickEffect(){switch(this.effect){case"typewriter":return this.tickTypewriter();case"scanline":return this.tickScanline();case"rain":return this.tickRain();case"fade":return this.tickFade();case"crt":return this.tickCrt();case"glitch":return this.tickGlitch();case"dissolve":return this.tickDissolve();default:return!0}}tickTypewriter(){let state2=this.effectState,pixelsPerFrame=3;for(let i=0;i<pixelsPerFrame;i++){let row=Math.floor(state2.pos/WIDTH),x=state2.pos%WIDTH;if(row>=DISPLAY_HEIGHT)return!0;this.currentGrid[row][x]=this.finalGrid[row][x],state2.pos++}return!1}tickScanline(){let state2=this.effectState;if(state2.row>=DISPLAY_HEIGHT)return!0;for(let x=0;x<WIDTH;x++)this.currentGrid[state2.row][x]=this.finalGrid[state2.row][x];return state2.row++,!1}tickRain(){let state2=this.effectState,allSettled=!0;this.currentGrid=this.createEmptyGrid();for(let x=0;x<WIDTH;x++){let drop=state2.drops[x];for(let row=DISPLAY_HEIGHT-1;row>=DISPLAY_HEIGHT-drop.settled;row--)row>=0&&(this.currentGrid[row][x]=this.finalGrid[row][x]);if(drop.settled>=DISPLAY_HEIGHT)continue;allSettled=!1;let targetRow=-1;for(let row=DISPLAY_HEIGHT-1-drop.settled;row>=0;row--)if(this.finalGrid[row][x]!==" "){targetRow=row;break}drop.y++,drop.y>=0&&drop.y<DISPLAY_HEIGHT&&(targetRow>=0&&drop.y>=targetRow?(drop.settled=DISPLAY_HEIGHT-targetRow,drop.y=-Math.floor(Math.random()*5)-1):this.currentGrid[drop.y][x]="\u2593")}return allSettled}tickFade(){let state2=this.effectState,pixelsPerFrame=15;for(let i=0;i<pixelsPerFrame;i++){if(state2.idx>=state2.positions.length)return!0;let[row,x]=state2.positions[state2.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state2.idx++}return!1}tickCrt(){let state2=this.effectState,midRow=Math.floor(DISPLAY_HEIGHT/2);this.currentGrid=this.createEmptyGrid();let top=midRow-state2.expansion,bottom=midRow+state2.expansion;for(let row=Math.max(0,top);row<=Math.min(DISPLAY_HEIGHT-1,bottom);row++)for(let x=0;x<WIDTH;x++)this.currentGrid[row][x]=this.finalGrid[row][x];return state2.expansion++,state2.expansion>DISPLAY_HEIGHT}tickGlitch(){let state2=this.effectState;return state2.phase<state2.glitchFrames?(this.currentGrid=this.finalGrid.map(row=>{let offset=Math.floor(Math.random()*7)-3,glitchRow=[...row];if(Math.random()<.3)return glitchRow.slice(offset).concat(glitchRow.slice(0,offset)).slice(0,WIDTH);if(Math.random()<.2){let swapRow=Math.floor(Math.random()*DISPLAY_HEIGHT);return[...this.finalGrid[swapRow]]}return glitchRow}),state2.phase++,!1):(this.currentGrid=this.finalGrid.map(row=>[...row]),!0)}tickDissolve(){let state2=this.effectState,pixelsPerFrame=20;for(let i=0;i<pixelsPerFrame;i++){if(state2.idx>=state2.positions.length)return!0;let[row,x]=state2.positions[state2.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state2.idx++}return!1}updateDisplay(){this.gridVersion++}dispose(){this.stopAnimation()}};var OSC133_ZONE_START2="\x1B]133;A\x07",OSC133_ZONE_END2="\x1B]133;B\x07",OSC133_ZONE_FINAL2="\x1B]133;C\x07",SETTLED_THINKING_LABEL="Thoughts",THINKING_PREVIEW_LINES=3,THINKING_PREVIEW_INDENT=2;function isVisibleAssistantBlock(block){return block.type==="text"&&block.text.trim().length>0||block.type==="thinking"&&block.thinking.trim().length>0}function styleThinkingText(text){return theme.italic(theme.fg("thinkingText",text))}function createThinkingLabel(label,outputPad){return new Text(styleThinkingText(label),outputPad,0)}var ThinkingRollingPreview=class{constructor(text,paddingX){this.body=new Text(styleThinkingText(text),paddingX,0)}invalidate(){this.body.invalidate()}render(width){return width<=0?[]:this.body.render(width).slice(-THINKING_PREVIEW_LINES)}};function createCollapsedThinking(active,text,label,outputPad){if(!active)return createThinkingLabel(SETTLED_THINKING_LABEL,outputPad);let container=new Container;return container.addChild(createThinkingLabel(label,outputPad)),container.addChild(new ThinkingRollingPreview(text,outputPad+THINKING_PREVIEW_INDENT)),container}var AssistantMessageComponent=class extends Container{constructor(message,hideThinkingBlock=!1,markdownTheme=getMarkdownTheme(),hiddenThinkingLabel="Thinking...",outputPad=1,markdownTransformers=[],messageId,timestamp){super(),this.hasToolCalls=!1,this.isStreaming=!1,this.thinkingVisibilityOverrides=new Map,this.markdownSlots=[],this.hideThinkingBlock=hideThinkingBlock,this.markdownTheme=markdownTheme,this.hiddenThinkingLabel=hiddenThinkingLabel,this.outputPad=outputPad,this.markdownTransformers=markdownTransformers,this.messageId=messageId,this.timestamp=timestamp,this.contentContainer=new Container,this.addChild(this.contentContainer),message&&this.updateContent(message)}invalidate(){super.invalidate(),this.lastMessage&&this.updateContent(this.lastMessage)}setHideThinkingBlock(hide){this.hideThinkingBlock=hide,this.thinkingVisibilityOverrides.clear(),this.lastMessage&&this.updateContent(this.lastMessage)}setHiddenThinkingLabel(label){this.hiddenThinkingLabel=label,this.lastMessage&&this.updateContent(this.lastMessage)}setOutputPad(padding){this.outputPad=padding,this.markdownSlots=[],this.lastMessage&&this.updateContent(this.lastMessage)}render(width){let lines=super.render(width);return this.hasToolCalls||lines.length===0||(lines[0]=OSC133_ZONE_START2+lines[0],lines[lines.length-1]=OSC133_ZONE_END2+OSC133_ZONE_FINAL2+lines[lines.length-1]),lines}updateContent(message,isStreaming=this.isStreaming){this.lastMessage=message,this.isStreaming=isStreaming,this.contentContainer.clear();let previousSlots=this.markdownSlots;this.markdownSlots=[];let markdownBlock2=(kind,text,create)=>{let slot=previousSlots[this.markdownSlots.length],markdown=slot?.kind===kind?slot.markdown:create();return markdown.setText(text),this.markdownSlots.push({kind,markdown}),markdown},needsSpacer=!0,addVisibleChild=child=>{needsSpacer&&(this.contentContainer.addChild(new Spacer(1)),needsSpacer=!1),this.contentContainer.addChild(child)},thinkingRunIndex=0;for(let i=0;i<message.content.length;i++){let content=message.content[i];if(content.type==="text"&&content.text.trim()){let text=content.text.trim();addVisibleChild(markdownBlock2("text",text,()=>new Markdown(text,this.outputPad,0,this.markdownTheme,void 0,{transform:createMarkdownTransform("assistant",()=>this.isStreaming,this.markdownTransformers,this.messageId,this.timestamp)})))}else if(content.type==="thinking"){let thinkingBlocks=[];for(;i<message.content.length;i++){let thinkingContent=message.content[i];if(thinkingContent.type!=="thinking")break;let thinking2=thinkingContent.thinking.trim();thinking2&&thinkingBlocks.push(thinking2)}if(i--,thinkingBlocks.length===0)continue;let isActiveThinking=this.isStreaming&&!message.content.slice(i+1).some(block=>isVisibleAssistantBlock(block)||block.type==="toolCall"),runIndex=thinkingRunIndex++,hidden=this.thinkingVisibilityOverrides.get(runIndex)??this.hideThinkingBlock;if(hidden&&!this.hiddenThinkingLabel.trim())continue;let thinking=thinkingBlocks.join(`
930
+ `);let exit=await new Promise(resolve18=>{let child=(0,import_cross_spawn.default)(editor,[...editorArgs,filePath],{stdio:"inherit"});child.on("error",()=>resolve18(null)),child.on("close",(code,signal)=>resolve18(code??signal))});return exit===null?{status:"failed",message:`Failed to launch external editor: ${options.command}`}:exit!==0?{status:"failed",message:`External editor exited with ${typeof exit=="number"?`code ${exit}`:exit}; prompt unchanged`}:{status:"complete",content:stripBom(readFileSync12(filePath,"utf-8")).replace(/\n$/,"")}}finally{try{rmSync3(directory,{recursive:!0,force:!0})}catch{}}}var ExtensionEditorComponent=class extends Container{get focused(){return this._focused}set focused(value){this._focused=value,this.editor.focused=value}constructor(tui,keybindings,title,prefill,onSubmit,onCancel,options,externalEditorCommand){super(),this.externalEditorStatus=new Text("",1,0),this._focused=!1,this.tui=tui,this.keybindings=keybindings,this.externalEditorCommand=externalEditorCommand||process.env.VISUAL||process.env.EDITOR||(process.platform==="win32"?"notepad":"nano"),this.onSubmitCallback=onSubmit,this.onCancelCallback=onCancel;let{description,...editorOptions}=options??{};this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("accent",title),1,0)),description&&(this.addChild(new Spacer(1)),this.addChild(new Text(theme.fg("text",description),1,0))),this.addChild(new Spacer(1)),this.editor=new Editor(tui,getEditorTheme(),editorOptions),prefill&&this.editor.setText(prefill),this.editor.onSubmit=text=>{this.onSubmitCallback(text)},this.addChild(this.editor),this.addChild(this.externalEditorStatus),this.addChild(new Spacer(1));let hint=keyHint("tui.select.confirm","submit")+" "+keyHint("tui.input.newLine","newline")+" "+keyHint("tui.select.cancel","cancel")+` ${keyHint("app.editor.external","external editor")}`;this.addChild(new Text(hint,1,0)),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}handleInput(keyData){if(getKeybindings().matches(keyData,"tui.select.cancel")){this.onCancelCallback();return}if(this.keybindings.matches(keyData,"app.editor.external")){this.handleOpenExternalEditor();return}this.editor.handleInput(keyData)}async handleOpenExternalEditor(){let content=this.editor.getText();this.tui.stop();try{let result2=await editInExternalEditor({command:this.externalEditorCommand,content});this.externalEditorStatus.setText(result2.status==="failed"?theme.fg("warning",result2.message):""),result2.status==="complete"&&this.editor.setText(result2.content)}finally{this.tui.start(),this.tui.requestRender(!0)}}};function createMarkdownTransform(messageType,isStreaming,transformers,messageId,timestamp){return(markdown,availableWidth)=>applyMarkdownTransformers(markdown,{messageType,isStreaming:isStreaming(),availableWidth,messageId,timestamp},transformers)}function applyMarkdownTransformers(markdown,context,transformers){let transformedMarkdown=markdown;for(let transformer of transformers)try{let transformed=transformer(transformedMarkdown,context);typeof transformed=="string"&&(transformedMarkdown=transformed)}catch{}return transformedMarkdown}var OSC133_ZONE_START="\x1B]133;A\x07",OSC133_ZONE_END="\x1B]133;B\x07",OSC133_ZONE_FINAL="\x1B]133;C\x07",PROMPT_MARKER="\u276F",GUTTER_WIDTH=2,UserMessageComponent=class extends Container{constructor(text,markdownTheme=getMarkdownTheme(),outputPad=1,markdownTransformers=[],messageId,timestamp){super(),this.navigationAnchorOffsets=new Map,this.text=text,this.markdownTheme=markdownTheme,this.outputPad=outputPad,this.markdownTransformers=markdownTransformers,this.messageId=messageId,this.timestamp=timestamp,this.rebuild()}getNavigationSummary(){return this.text.replaceAll(/\s+/g," ").trim()}getNavigationAnchorOffset(width){let cached=this.navigationAnchorOffsets.get(width);if(cached!==void 0)return cached;let offset=this.render(width).findIndex(line=>stripTerminalSequences(line).trim().length>0),anchorOffset=offset<0?0:offset;return this.navigationAnchorOffsets.set(width,anchorOffset),anchorOffset}setOutputPad(padding){this.outputPad=padding,this.rebuild()}invalidate(){super.invalidate(),this.navigationAnchorOffsets.clear(),this.rendered=void 0}handleMouse(){}rebuild(){this.navigationAnchorOffsets.clear(),this.rendered=void 0,this.clear(),this.markdown=new Markdown(this.text,0,0,this.markdownTheme,{color:content=>theme.fg("userMessageText",content),bgColor:content=>theme.bg("userMessageBg",content)},{preserveOrderedListMarkers:!0,preserveBackslashEscapes:!0,transform:createMarkdownTransform("user",()=>!1,this.markdownTransformers,this.messageId,this.timestamp)}),this.addChild(this.markdown)}render(width){let padding=Math.max(0,Math.floor(this.outputPad)),source=this.markdown.render(Math.max(1,width-padding*2-GUTTER_WIDTH));if(this.rendered?.width===width&&this.rendered.source===source)return this.rendered.lines;if(source.length===0)return[];let fill=text=>theme.bg("userMessageBg",text),indent=" ".repeat(padding),marker2=fill(`${indent}${theme.fg("muted",PROMPT_MARKER)} `),hanging=fill(" ".repeat(padding+GUTTER_WIDTH)),trailing=padding>0?fill(indent):"",lines=source.map((line,index3)=>`${index3===0?marker2:hanging}${line}${trailing}`);return lines[lines.length-1]=OSC133_ZONE_END+OSC133_ZONE_FINAL+lines[lines.length-1],lines[0]=OSC133_ZONE_START+lines[0],this.rendered={width,source,lines},lines}};var ARMIN_WIDTH=31,ARMIN_HEIGHT=36,WIDTH=ARMIN_WIDTH,HEIGHT=ARMIN_HEIGHT,BITS=[255,255,255,127,255,240,255,127,255,237,255,127,255,219,255,127,255,183,255,127,255,119,254,127,63,248,254,127,223,255,254,127,223,63,252,127,159,195,251,127,111,252,244,127,247,15,247,127,247,255,247,127,247,255,227,127,247,7,232,127,239,248,103,112,15,255,187,111,241,0,208,91,253,63,236,83,193,255,239,87,159,253,238,95,159,252,174,95,31,120,172,95,63,0,80,108,127,0,220,119,255,192,63,120,255,1,248,127,255,3,156,120,255,7,140,124,255,15,206,120,255,255,207,127,255,255,207,120,255,255,223,120,255,255,223,125,255,255,63,126,255,255,255,127],BYTES_PER_ROW=Math.ceil(WIDTH/8),DISPLAY_HEIGHT=Math.ceil(HEIGHT/2),EFFECTS=["typewriter","scanline","rain","fade","crt","glitch","dissolve"];function isArminPixel(x,y){if(y>=HEIGHT)return!1;let byteIndex=y*BYTES_PER_ROW+Math.floor(x/8),bitIndex=x%8;return(BITS[byteIndex]>>bitIndex&1)===0}function getChar(x,row){let upper=isArminPixel(x,row*2),lower=isArminPixel(x,row*2+1);return upper&&lower?"\u2588":upper?"\u2580":lower?"\u2584":" "}function buildFinalGrid(){let grid=[];for(let row=0;row<DISPLAY_HEIGHT;row++){let line=[];for(let x=0;x<WIDTH;x++)line.push(getChar(x,row));grid.push(line)}return grid}var ArminComponent=class{constructor(ui){this.interval=null,this.effectState={},this.cachedLines=[],this.cachedWidth=0,this.gridVersion=0,this.cachedVersion=-1,this.ui=ui,this.effect=EFFECTS[Math.floor(Math.random()*EFFECTS.length)],this.finalGrid=buildFinalGrid(),this.currentGrid=this.createEmptyGrid(),this.initEffect(),this.startAnimation()}invalidate(){this.cachedWidth=0}render(width){if(width===this.cachedWidth&&this.cachedVersion===this.gridVersion)return this.cachedLines;let padding=1,availableWidth=width-padding;this.cachedLines=this.currentGrid.map(row=>{let clipped2=row.slice(0,availableWidth).join(""),padRight=Math.max(0,width-padding-clipped2.length);return` ${theme.fg("accent",clipped2)}${" ".repeat(padRight)}`});let message="ARMIN SAYS HI",msgPadRight=Math.max(0,width-padding-message.length);return this.cachedLines.push(` ${theme.fg("accent",message)}${" ".repeat(msgPadRight)}`),this.cachedWidth=width,this.cachedVersion=this.gridVersion,this.cachedLines}createEmptyGrid(){return Array.from({length:DISPLAY_HEIGHT},()=>Array(WIDTH).fill(" "))}initEffect(){switch(this.effect){case"typewriter":this.effectState={pos:0};break;case"scanline":this.effectState={row:0};break;case"rain":this.effectState={drops:Array.from({length:WIDTH},()=>({y:-Math.floor(Math.random()*DISPLAY_HEIGHT*2),settled:0}))};break;case"fade":{let positions=[];for(let row=0;row<DISPLAY_HEIGHT;row++)for(let x=0;x<WIDTH;x++)positions.push([row,x]);for(let i=positions.length-1;i>0;i--){let j=Math.floor(Math.random()*(i+1));[positions[i],positions[j]]=[positions[j],positions[i]]}this.effectState={positions,idx:0};break}case"crt":this.effectState={expansion:0};break;case"glitch":this.effectState={phase:0,glitchFrames:8};break;case"dissolve":{this.currentGrid=Array.from({length:DISPLAY_HEIGHT},()=>Array.from({length:WIDTH},()=>{let chars=[" ","\u2591","\u2592","\u2593","\u2588","\u2580","\u2584"];return chars[Math.floor(Math.random()*chars.length)]}));let dissolvePositions=[];for(let row=0;row<DISPLAY_HEIGHT;row++)for(let x=0;x<WIDTH;x++)dissolvePositions.push([row,x]);for(let i=dissolvePositions.length-1;i>0;i--){let j=Math.floor(Math.random()*(i+1));[dissolvePositions[i],dissolvePositions[j]]=[dissolvePositions[j],dissolvePositions[i]]}this.effectState={positions:dissolvePositions,idx:0};break}}}startAnimation(){let fps=this.effect==="glitch"?60:30;this.interval=setInterval(()=>{let done=this.tickEffect();this.updateDisplay(),this.ui.requestRender(),done&&this.stopAnimation()},1e3/fps)}stopAnimation(){this.interval&&(clearInterval(this.interval),this.interval=null)}tickEffect(){switch(this.effect){case"typewriter":return this.tickTypewriter();case"scanline":return this.tickScanline();case"rain":return this.tickRain();case"fade":return this.tickFade();case"crt":return this.tickCrt();case"glitch":return this.tickGlitch();case"dissolve":return this.tickDissolve();default:return!0}}tickTypewriter(){let state2=this.effectState,pixelsPerFrame=3;for(let i=0;i<pixelsPerFrame;i++){let row=Math.floor(state2.pos/WIDTH),x=state2.pos%WIDTH;if(row>=DISPLAY_HEIGHT)return!0;this.currentGrid[row][x]=this.finalGrid[row][x],state2.pos++}return!1}tickScanline(){let state2=this.effectState;if(state2.row>=DISPLAY_HEIGHT)return!0;for(let x=0;x<WIDTH;x++)this.currentGrid[state2.row][x]=this.finalGrid[state2.row][x];return state2.row++,!1}tickRain(){let state2=this.effectState,allSettled=!0;this.currentGrid=this.createEmptyGrid();for(let x=0;x<WIDTH;x++){let drop=state2.drops[x];for(let row=DISPLAY_HEIGHT-1;row>=DISPLAY_HEIGHT-drop.settled;row--)row>=0&&(this.currentGrid[row][x]=this.finalGrid[row][x]);if(drop.settled>=DISPLAY_HEIGHT)continue;allSettled=!1;let targetRow=-1;for(let row=DISPLAY_HEIGHT-1-drop.settled;row>=0;row--)if(this.finalGrid[row][x]!==" "){targetRow=row;break}drop.y++,drop.y>=0&&drop.y<DISPLAY_HEIGHT&&(targetRow>=0&&drop.y>=targetRow?(drop.settled=DISPLAY_HEIGHT-targetRow,drop.y=-Math.floor(Math.random()*5)-1):this.currentGrid[drop.y][x]="\u2593")}return allSettled}tickFade(){let state2=this.effectState,pixelsPerFrame=15;for(let i=0;i<pixelsPerFrame;i++){if(state2.idx>=state2.positions.length)return!0;let[row,x]=state2.positions[state2.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state2.idx++}return!1}tickCrt(){let state2=this.effectState,midRow=Math.floor(DISPLAY_HEIGHT/2);this.currentGrid=this.createEmptyGrid();let top=midRow-state2.expansion,bottom=midRow+state2.expansion;for(let row=Math.max(0,top);row<=Math.min(DISPLAY_HEIGHT-1,bottom);row++)for(let x=0;x<WIDTH;x++)this.currentGrid[row][x]=this.finalGrid[row][x];return state2.expansion++,state2.expansion>DISPLAY_HEIGHT}tickGlitch(){let state2=this.effectState;return state2.phase<state2.glitchFrames?(this.currentGrid=this.finalGrid.map(row=>{let offset=Math.floor(Math.random()*7)-3,glitchRow=[...row];if(Math.random()<.3)return glitchRow.slice(offset).concat(glitchRow.slice(0,offset)).slice(0,WIDTH);if(Math.random()<.2){let swapRow=Math.floor(Math.random()*DISPLAY_HEIGHT);return[...this.finalGrid[swapRow]]}return glitchRow}),state2.phase++,!1):(this.currentGrid=this.finalGrid.map(row=>[...row]),!0)}tickDissolve(){let state2=this.effectState,pixelsPerFrame=20;for(let i=0;i<pixelsPerFrame;i++){if(state2.idx>=state2.positions.length)return!0;let[row,x]=state2.positions[state2.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state2.idx++}return!1}updateDisplay(){this.gridVersion++}dispose(){this.stopAnimation()}};var OSC133_ZONE_START2="\x1B]133;A\x07",OSC133_ZONE_END2="\x1B]133;B\x07",OSC133_ZONE_FINAL2="\x1B]133;C\x07",SETTLED_THINKING_LABEL="Thoughts",THINKING_PREVIEW_LINES=3,THINKING_PREVIEW_INDENT=2;function isVisibleAssistantBlock(block){return block.type==="text"&&block.text.trim().length>0||block.type==="thinking"&&block.thinking.trim().length>0}function styleThinkingText(text){return theme.italic(theme.fg("thinkingText",text))}function createThinkingLabel(label,outputPad){return new Text(styleThinkingText(label),outputPad,0)}var ThinkingRollingPreview=class{constructor(text,paddingX){this.body=new Text(styleThinkingText(text),paddingX,0)}invalidate(){this.body.invalidate()}render(width){return width<=0?[]:this.body.render(width).slice(-THINKING_PREVIEW_LINES)}};function createCollapsedThinking(active,text,label,outputPad){if(!active)return createThinkingLabel(SETTLED_THINKING_LABEL,outputPad);let container=new Container;return container.addChild(createThinkingLabel(label,outputPad)),container.addChild(new ThinkingRollingPreview(text,outputPad+THINKING_PREVIEW_INDENT)),container}var AssistantMessageComponent=class extends Container{constructor(message,hideThinkingBlock=!1,markdownTheme=getMarkdownTheme(),hiddenThinkingLabel="Thinking...",outputPad=1,markdownTransformers=[],messageId,timestamp){super(),this.hasToolCalls=!1,this.isStreaming=!1,this.thinkingVisibilityOverrides=new Map,this.markdownSlots=[],this.hideThinkingBlock=hideThinkingBlock,this.markdownTheme=markdownTheme,this.hiddenThinkingLabel=hiddenThinkingLabel,this.outputPad=outputPad,this.markdownTransformers=markdownTransformers,this.messageId=messageId,this.timestamp=timestamp,this.contentContainer=new Container,this.addChild(this.contentContainer),message&&this.updateContent(message)}invalidate(){super.invalidate(),this.lastMessage&&this.updateContent(this.lastMessage)}setHideThinkingBlock(hide){this.hideThinkingBlock=hide,this.thinkingVisibilityOverrides.clear(),this.lastMessage&&this.updateContent(this.lastMessage)}setHiddenThinkingLabel(label){this.hiddenThinkingLabel=label,this.lastMessage&&this.updateContent(this.lastMessage)}setOutputPad(padding){this.outputPad=padding,this.markdownSlots=[],this.lastMessage&&this.updateContent(this.lastMessage)}render(width){let lines=super.render(width);return this.hasToolCalls||lines.length===0||(lines[0]=OSC133_ZONE_START2+lines[0],lines[lines.length-1]=OSC133_ZONE_END2+OSC133_ZONE_FINAL2+lines[lines.length-1]),lines}updateContent(message,isStreaming=this.isStreaming){this.lastMessage=message,this.isStreaming=isStreaming,this.contentContainer.clear();let previousSlots=this.markdownSlots;this.markdownSlots=[];let markdownBlock2=(kind,text,create)=>{let slot=previousSlots[this.markdownSlots.length],markdown=slot?.kind===kind?slot.markdown:create();return markdown.setText(text),this.markdownSlots.push({kind,markdown}),markdown},needsSpacer=!0,addVisibleChild=child=>{needsSpacer&&(this.contentContainer.addChild(new Spacer(1)),needsSpacer=!1),this.contentContainer.addChild(child)},thinkingRunIndex=0;for(let i=0;i<message.content.length;i++){let content=message.content[i];if(content.type==="text"&&content.text.trim()){let text=content.text.trim();addVisibleChild(markdownBlock2("text",text,()=>new Markdown(text,this.outputPad,0,this.markdownTheme,void 0,{transform:createMarkdownTransform("assistant",()=>this.isStreaming,this.markdownTransformers,this.messageId,this.timestamp)})))}else if(content.type==="thinking"){let thinkingBlocks=[];for(;i<message.content.length;i++){let thinkingContent=message.content[i];if(thinkingContent.type!=="thinking")break;let thinking2=thinkingContent.thinking.trim();thinking2&&thinkingBlocks.push(thinking2)}if(i--,thinkingBlocks.length===0)continue;let isActiveThinking=this.isStreaming&&!message.content.slice(i+1).some(block=>isVisibleAssistantBlock(block)||block.type==="toolCall"),runIndex=thinkingRunIndex++,hidden=this.thinkingVisibilityOverrides.get(runIndex)??this.hideThinkingBlock;if(hidden&&!this.hiddenThinkingLabel.trim())continue;let thinking=thinkingBlocks.join(`
931
931
 
932
932
  `),thinkingComponent=hidden?createCollapsedThinking(isActiveThinking,thinking,this.hiddenThinkingLabel,this.outputPad):markdownBlock2("thinking",thinking,()=>new Markdown(thinking,this.outputPad,0,this.markdownTheme,{color:text=>theme.fg("thinkingText",text),italic:!0},{transform:createMarkdownTransform("assistant-thinking",()=>this.isStreaming,this.markdownTransformers,this.messageId,this.timestamp)}));addVisibleChild(new MouseRegion(thinkingComponent,event=>{if(!(event.type!=="click"||event.button!=="left"))return this.thinkingVisibilityOverrides.set(runIndex,!hidden),this.lastMessage&&this.updateContent(this.lastMessage),{handled:!0}})),needsSpacer=!0}}let hasToolCalls=message.content.some(c=>c.type==="toolCall");if(this.hasToolCalls=hasToolCalls,message.stopReason==="length")this.contentContainer.addChild(new Spacer(1)),this.contentContainer.addChild(new Text(theme.fg("error","Response was truncated before completion."),this.outputPad,0));else if(!hasToolCalls){if(message.stopReason==="aborted"){let abortMessage=message.errorMessage&&message.errorMessage!=="Request was aborted"?message.errorMessage:"Operation aborted";this.contentContainer.addChild(new Spacer(1)),this.contentContainer.addChild(new Text(theme.fg("error",abortMessage),this.outputPad,0))}else if(message.stopReason==="error"){let errorMsg=message.errorMessage||"Unknown error";this.contentContainer.addChild(new Spacer(1)),this.contentContainer.addChild(new Text(theme.fg("error",`Error: ${errorMsg}`),this.outputPad,0))}}}};var PREVIEW_LINES=20,BashExecutionComponent=class extends Container{constructor(command,ui,excludeFromContext=!1,outputPad=1){super(),this.outputLines=[],this.status="running",this.exitCode=void 0,this.expanded=!1,this.command=command,this.colorKey=excludeFromContext?"dim":"bashMode",this.outputPad=outputPad;let borderColor=str3=>theme.fg(this.colorKey,str3);this.addChild(new Spacer(1)),this.addChild(new DynamicBorder(borderColor)),this.contentContainer=new Container,this.addChild(this.contentContainer),this.loader=new Loader(ui,spinner=>theme.fg(this.colorKey,spinner),text=>theme.fg("muted",text),`Running... (${keyText("tui.select.cancel")} to cancel)`),this.addChild(new DynamicBorder(borderColor)),this.updateDisplay()}setExpanded(expanded){this.expanded=expanded,this.updateDisplay()}setOutputPad(outputPad){this.outputPad=outputPad,this.updateDisplay()}invalidate(){super.invalidate(),this.updateDisplay()}appendOutput(chunk){let newLines=stripAnsi(chunk).replace(/\r\n/g,`
933
933
  `).replace(/\r/g,`
@@ -1135,14 +1135,14 @@ changes anytime in settings.json.`),1,0)),this.addChild(new Spacer(1)),this.addO
1135
1135
  ${message}`,[{label:"Yes",value:!0},{label:"No",value:!1}])??!1,input:async(title,placeholder)=>{if(options.hasUI&&options.mode==="interactive")return showStartupInput(options.settingsManager,title,placeholder)},notify:(message,type="info")=>{if(options.mode!=="interactive"){let color=type==="error"?source_default.red:type==="warning"?source_default.yellow:source_default.cyan;console.error(color(message))}}}}}async function selectSession(currentSessionsLoader,allSessionsLoader,settingsManager){let ui=await createStartupTui(settingsManager);return new Promise(resolve18=>{let keybindings=KeybindingsManager2.create();setKeybindings(keybindings);let resolved=!1,selector=new SessionSelectorComponent(currentSessionsLoader,allSessionsLoader,path10=>{resolved||(resolved=!0,ui.stop(),resolve18(path10))},()=>{resolved||(resolved=!0,ui.stop(),resolve18(null))},()=>{ui.stop(),process.exit(0)},()=>ui.requestRender(),{showRenameHint:!1,keybindings});ui.addChild(selector),ui.setFocus(selector.getSessionList()),startStartupTui(ui,settingsManager)})}function formatProjectTrustPrompt(cwd){return`Trust project folder?
1136
1136
  ${cwd}
1137
1137
 
1138
- This allows ${APP_NAME} to load ${CONFIG_DIR_NAME} settings and resources, install missing project packages, and execute project extensions.`}async function selectProjectTrustOption(cwd,ctx){let options=getProjectTrustOptions(cwd,{includeSessionOnly:!0}),selected=await ctx.ui.select(formatProjectTrustPrompt(cwd),options.map(option=>option.label));return options.find(option=>option.label===selected)}function saveProjectTrustPromptResult(trustStore,result2){result2.updates.length>0&&trustStore.setMany(result2.updates)}async function resolveProjectTrusted(options){if(options.trustOverride!==void 0)return options.trustOverride;if(!hasTrustRequiringProjectResources(options.cwd))return options.trustStore.get(options.cwd)??!0;if(options.extensionsResult){let{result:result2,errors}=await emitProjectTrustEvent(options.extensionsResult,{type:"project_trust",cwd:options.cwd},options.projectTrustContext);for(let error of errors)options.onExtensionError?.(`Extension "${error.extensionPath}" project_trust error: ${error.error}`);if(result2){let trusted=result2.trusted==="yes";return result2.remember===!0&&options.trustStore.set(options.cwd,trusted),trusted}}let decision=options.trustStore.get(options.cwd);if(decision!==null)return decision;switch(options.defaultProjectTrust??SETTINGS_DEFAULTS.defaultProjectTrust){case"always":return!0;case"never":return!1;case"ask":break}if(!options.projectTrustContext.hasUI)return!1;let selected=await selectProjectTrustOption(options.cwd,options.projectTrustContext);return selected!==void 0?(saveProjectTrustPromptResult(options.trustStore,selected),selected.trusted):!1}function collectSettingsDiagnostics(settingsManager){return settingsManager.drainErrors().map(({scope,path:path10,error})=>({type:"warning",message:path10?`Invalid settings file ${path10}: ${error.message}`:`Invalid ${scope} settings: ${error.message}`}))}function deduplicateDiagnostics(diagnostics){let seen=new Set;return diagnostics.filter(diagnostic=>{let key=`${diagnostic.type}\0${diagnostic.message}`;return seen.has(key)?!1:(seen.add(key),!0)})}registerKeybindings({"app.btw.close":{defaultKeys:"escape",description:"Close the BTW conversation"},"app.btw.cancel":{defaultKeys:"ctrl+c",description:"Stop the BTW answer, or close when idle"},"app.btw.scrollUp":{defaultKeys:"up",description:"Scroll BTW up when the editor is empty"},"app.btw.scrollDown":{defaultKeys:"down",description:"Scroll BTW down when the editor is empty"}});function registerListKeybindings(){registerKeybindings({"app.list.toggle":{defaultKeys:"space",description:"Toggle selected list item"}})}registerListKeybindings();registerKeybindings({"app.provider.switchPaneLeft":{defaultKeys:"left",description:"/provider: focus the left pane"},"app.provider.switchPaneRight":{defaultKeys:"right",description:"/provider: focus the right pane"},"app.provider.removeEntry":{defaultKeys:"ctrl+x",description:"/provider: remove the selected compat or dictionary entry"}});registerListKeybindings();var TASK_KEYBINDINGS={"app.tasks.detach":{defaultKeys:"ctrl+b",description:"Move foreground tasks to the background"},"app.tasks.previousTab":{defaultKeys:"left",description:"Show Output in the focused task inspector"},"app.tasks.nextTab":{defaultKeys:"right",description:"Show Details in the focused task inspector"},"app.tasks.kill":{defaultKeys:"k",description:"Stop the selected task"},"app.tasks.confirmStop":{defaultKeys:"enter",description:"Confirm stopping the selected task"},"app.tasks.detachSelected":{defaultKeys:"b",description:"Move the selected task to the background"},"app.tasks.search":{defaultKeys:"/",description:"Search retained task identities and labels"},"app.tasks.follow":{defaultKeys:"f",description:"Follow the selected task's output"},"app.tasks.top":{defaultKeys:"home",description:"Go to the top of the task list or preview"},"app.tasks.bottom":{defaultKeys:"end",description:"Go to the bottom of the task list or preview"},"app.tasks.nextFocus":{defaultKeys:"tab",description:"Switch between task list and inspector"},"app.tasks.previousFocus":{defaultKeys:"shift+tab",description:"Switch between task inspector and list"},"app.tasks.help":{defaultKeys:"?",description:"Show task controls"}};registerKeybindings(TASK_KEYBINDINGS);registerReservedKeybindings("app.tasks.detach");registerKeybindingHelpSection({id:"tasks",title:"Tasks",rows:[{action:"app.tasks.detach",description:TASK_KEYBINDINGS["app.tasks.detach"].description},{action:"app.tasks.detachSelected",description:`${TASK_KEYBINDINGS["app.tasks.detachSelected"].description} (while /tasks is open)`}]});var AgentSettingsHost=class extends Container{constructor(tui,theme2,keys){super(),this.accepting=!1,this.active=!1,this.disposed=!1,this.tui=tui,this.theme=theme2,this.keys=keys}get focused(){return this.active}set focused(value){this.active=value,this.page&&isFocusable(this.page)&&(this.page.focused=value)}show(create){return new Promise(resolve18=>{if(this.disposed)return;let answered=!1,page=create(this.tui,this.theme,this.keys,result2=>{answered||this.disposed||(answered=!0,this.accepting=!1,resolve18(result2))});this.replacePage(page),this.accepting=!0})}handleInput(data){this.accepting&&this.page?.handleInput?.(data)}handleMouse(event){return this.accepting?super.handleMouse(event):void 0}dispose(){this.disposed||(this.disposed=!0,this.accepting=!1,this.disposePage(),this.clear())}replacePage(page){this.disposePage(),this.page=page,this.clear(),this.addChild(page),isFocusable(page)&&(page.focused=this.active),this.tui.requestRender()}disposePage(){let previous=this.page;this.page=void 0,previous&&isFocusable(previous)&&(previous.focused=!1),previous?.dispose?.()}};var FOLLOW=" \xB7 Follow current session",FOLLOW_SHORT=" \xB7 follow",VALUE_PRIORITY_WIDTH=12,COMPACT_PRIORITY_WIDTH=4,AgentSettingsPanel=class{constructor(tui,theme2,keys,rows,selected,onSelect,onCancel){this.rowLines=[],this.tui=tui,this.theme=theme2,this.keys=keys,this.rows=rows,this.onSelect=onSelect,this.onCancel=onCancel,this.selectedIndex=Math.max(0,rows.findIndex(row=>row.action===selected));let labels=rows.flatMap(row=>row.field?[visibleWidth(row.label)]:[]);this.labelWidth=Math.max(0,...labels)+2}render(width){if(width<1)return[];let border=this.theme.fg("borderMuted","\u2500".repeat(width)),lines=[this.theme.fg("accent",this.theme.bold("Agent Settings")),border];this.rowLines=[];for(let[index3,row]of this.rows.entries())lines.length>2&&lines.push(""),this.rowLines.push(lines.length),lines.push(this.renderRow(row,index3===this.selectedIndex,width));return lines.push(border,...wrapTextWithAnsi(this.theme.fg("dim",this.hints()),width)),lines.map(line=>truncateToWidth(line,width))}handleInput(data){if(this.keys.matches(data,"tui.select.up"))this.move(-1);else if(this.keys.matches(data,"tui.select.down"))this.move(1);else if(this.keys.matches(data,"tui.select.confirm"))this.select(this.selectedIndex);else if(this.keys.matches(data,"tui.select.cancel")){this.onCancel();return}else return;this.tui.requestRender()}handleMouse(event){let index3=this.rowLines.indexOf(event.y);if(!(index3<0||event.button!=="left")){if(event.type==="press")return this.selectedIndex=index3,{handled:!0,focus:!0};if(event.type==="click")return this.selectedIndex=index3,this.select(index3),{handled:!0,focus:!0}}}invalidate(){this.rowLines=[]}move(delta){let count=this.rows.length;this.selectedIndex=(this.selectedIndex+delta+count)%count}select(index3){let row=this.rows[index3];row&&this.onSelect(row.action)}renderRow(row,active,width){let cursor=active?this.theme.fg("accent","\u203A "):" ",label=row.field?row.label+" ".repeat(this.labelWidth-visibleWidth(row.label)):row.label,heading=cursor+this.theme.fg(active?"accent":"muted",label);return row.field?truncateToWidth(heading+this.renderValue(row.field,Math.max(0,width-visibleWidth(heading))),width):truncateToWidth(heading,width)}renderValue(field2,width){if(width<1)return"";let follow=this.followText(field2,width),status=field2.status??"",statusWidth=status?visibleWidth(status)+1:0,value=truncateToWidth(field2.value,Math.max(0,width-visibleWidth(follow)-statusWidth),"\u2026"),head=value+(status?`${value?" ":""}${status}`:""),styled=this.theme.fg(field2.tone??"text",truncateToWidth(head,width));return follow&&width-visibleWidth(styled)>=visibleWidth(follow)?styled+this.theme.fg("dim",follow):styled}followText(field2,width){if(!field2.following)return"";let available=width-(field2.status?visibleWidth(field2.status)+1:0);return visibleWidth(FOLLOW)+VALUE_PRIORITY_WIDTH<=available?FOLLOW:visibleWidth(FOLLOW_SHORT)+COMPACT_PRIORITY_WIDTH<=available?FOLLOW_SHORT:""}hints(){let navigation=[this.key("tui.select.up"),this.key("tui.select.down")].filter(Boolean).join("/"),confirm=this.key("tui.select.confirm"),cancel=this.key("tui.select.cancel");return[navigation&&`${navigation} navigate`,confirm&&`${confirm} change`,cancel&&`${cancel} close`].filter(Boolean).join(" \xB7 ")}key(action){return keyLabel(action,{keybindings:this.keys})}};var AGENT_SETTINGS_NAMESPACE="agent";function inspectAgentSettings(ctx){let raw=ctx.getExtensionSettings(AGENT_SETTINGS_NAMESPACE),model,invalidModel;raw.model!==void 0&&(typeof raw.model=="string"&&raw.model.includes("/")?model=raw.model:invalidModel=raw.model);let thinking,invalidThinking;return raw.thinking!==void 0&&(typeof raw.thinking=="string"&&THINKING_LEVEL_OPTIONS.includes(raw.thinking)?thinking=raw.thinking:invalidThinking=raw.thinking),{model,thinking,invalidModel,invalidThinking}}function readAgentSettings(ctx){let inspection=inspectAgentSettings(ctx);if(inspection.invalidModel!==void 0)throw new Error("Invalid Agent model setting. Choose a model with /agent.");if(inspection.invalidThinking!==void 0)throw new Error("Invalid Agent effort setting. Choose an effort level with /agent.");return{model:inspection.model,thinking:inspection.thinking}}function resolveAgentModel(ctx,reference){if(!reference)return ctx.model?{model:ctx.model,available:!0}:void 0;let slash=reference.indexOf("/");if(slash<=0)return;let model=ctx.modelRuntime.getModel(reference.slice(0,slash),reference.slice(slash+1));if(!model)return;let available=ctx.modelRuntime.getAvailableSnapshot().some(item=>item.provider===model.provider&&item.id===model.id);return{model,available}}function requestedEffort(ctx,settings){return settings.thinking??ctx.thinkingLevel??DEFAULT_THINKING_LEVEL}function supportedEffort(model,requested){return clampThinkingLevel(model,requested)}function resolveAgentConfiguration(ctx){let settings=readAgentSettings(ctx),resolution=resolveAgentModel(ctx,settings.model);if(!resolution)throw settings.model?new Error(`Agent model is unavailable: ${settings.model}`):new Error("Agent has no model to follow. Choose one with /agent.");return{model:resolution.model,thinking:supportedEffort(resolution.model,requestedEffort(ctx,settings)),settings}}async function saveAgentSettings(ctx,patch){let next={...ctx.getExtensionSettings(AGENT_SETTINGS_NAMESPACE)};patch.model===null||patch.model===""?delete next.model:patch.model!==void 0&&(next.model=patch.model),patch.thinking===null?delete next.thinking:patch.thinking!==void 0&&(next.thinking=patch.thinking),await ctx.setExtensionSettings(AGENT_SETTINGS_NAMESPACE,next)}async function selectAgentModel(ctx,host,current){let saved=resolveAgentModel(ctx,current)?.model,selected=await host.show((tui,_theme,_keys,done)=>new ModelSelectorComponent(tui,saved??ctx.model,ctx.modelRuntime,ctx.scopedModels,done,()=>done(void 0)));return selected?`${selected.provider}/${selected.id}`:void 0}async function selectAgentThinking(ctx,host,settings,model){let requested=requestedEffort(ctx,settings),current=model?supportedEffort(model,requested):requested,available=model?getSupportedThinkingLevels(model):[...THINKING_LEVEL_OPTIONS];return host.show((_tui,_theme,_keys,done)=>new ThinkingSelectorComponent(current,available,done,()=>done(void 0)))}function formatInvalidValue(value){let text="";try{text=typeof value=="string"?value:JSON.stringify(value)??""}catch{}return truncateHead(text,{maxLines:1,maxBytes:80}).content}function invalidField(raw){return{value:formatInvalidValue(raw),status:"[invalid]",tone:"error"}}function describeModel2(inspection,resolution){return inspection.invalidModel!==void 0?invalidField(inspection.invalidModel):resolution?{value:`${resolution.model.provider}/${resolution.model.id}`,following:inspection.model===void 0,...resolution.available?{}:{status:"[unavailable]",tone:"warning"}}:{value:inspection.model??"",status:"[unavailable]",tone:"warning"}}function describeEffort(ctx,inspection,model){if(inspection.invalidThinking!==void 0)return invalidField(inspection.invalidThinking);let requested=requestedEffort(ctx,inspection),following=inspection.thinking===void 0;if(!model)return{value:requested,following,status:"[unresolved]",tone:"warning"};let effective=supportedEffort(model,requested);return effective===requested?{value:requested,following}:{value:`${requested} \u2192 ${effective}`,following,tone:"warning"}}function hasOverrides(inspection){return inspection.model!==void 0||inspection.thinking!==void 0||inspection.invalidModel!==void 0||inspection.invalidThinking!==void 0}function settingsRows(ctx,inspection,resolution){return[{action:"model",label:"Model",field:describeModel2(inspection,resolution)},{action:"thinking",label:"Effort",field:describeEffort(ctx,inspection,resolution?.model)},{action:"reset",label:"Reset to follow current session"}]}async function openAgentSettings(ctx){if(ctx.mode!=="tui"){try{let settings=readAgentSettings(ctx);ctx.ui.notify(`Agent model: ${settings.model??"Follow current session"} \xB7 Effort: ${settings.thinking??"Follow current session"}`,"info")}catch(error){ctx.ui.notify(error instanceof Error?error.message:String(error),"error")}return}let outcome=await ctx.ui.custom((tui,theme2,keys,done)=>{let host=new AgentSettingsHost(tui,theme2,keys);return runAgentSettings(ctx,host).then(()=>done(void 0),error=>done({error})),host});if(outcome)throw outcome.error}async function runAgentSettings(ctx,host){let selectedAction="model";for(;;){let inspection;try{inspection=inspectAgentSettings(ctx)}catch(error){ctx.ui.notify(error instanceof Error?error.message:String(error),"error");return}let resolution=inspection.invalidModel!==void 0?void 0:resolveAgentModel(ctx,inspection.model),action=await host.show((tui,theme2,keys,done)=>new AgentSettingsPanel(tui,theme2,keys,settingsRows(ctx,inspection,resolution),selectedAction,done,()=>done(void 0)));if(!action)return;selectedAction=action;try{if(action==="reset"){if(!hasOverrides(inspection))continue;await saveAgentSettings(ctx,{model:null,thinking:null}),ctx.ui.notify("Agent settings: Follow current session","info")}else if(action==="model"){let selected=await selectAgentModel(ctx,host,inspection.model??"");if(selected===void 0||selected===inspection.model)continue;await saveAgentSettings(ctx,{model:selected}),ctx.ui.notify(`Agent model: ${selected}`,"info")}else if(action==="thinking"){let selected=await selectAgentThinking(ctx,host,inspection,resolution?.model);if(selected===void 0||selected===inspection.thinking&&inspection.invalidThinking===void 0)continue;await saveAgentSettings(ctx,{thinking:selected}),ctx.ui.notify(`Agent effort: ${selected}`,"info")}}catch(error){ctx.ui.notify(`Could not save Agent settings: ${error instanceof Error?error.message:String(error)}`,"error")}}}import{isAbsolute as isAbsolute6,relative as relative7,sep as sep10,win32}from"node:path";var SPINNER_BLOOM=["\xB7","\u2722","\u273C","\u2736","\u273B","\u273D"],STATUS_SPINNER_FRAMES=[...SPINNER_BLOOM,...[...SPINNER_BLOOM].reverse()],STATUS_SPINNER_INTERVAL_MS=120;function statusSpinnerFrame(now){let frame3=Math.floor(now/STATUS_SPINNER_INTERVAL_MS)%STATUS_SPINNER_FRAMES.length;return STATUS_SPINNER_FRAMES[frame3]??STATUS_SPINNER_FRAMES[0]??"\xB7"}function statusMarker(status,opts){switch(status){case"running":return{glyph:opts?.now!==void 0?statusSpinnerFrame(opts.now):"\u203A",color:"accent"};case"completed":return{glyph:"\u2713",color:"success"};case"failed":return{glyph:"\xD7",color:"error"};case"timeout":return{glyph:"\xD7",color:"warning"};case"cancelled":case"stopping":case"partial":return{glyph:"\u25CB",color:"warning"};case"queued":return{glyph:"\u25CB",color:"muted"};default:return{glyph:"\u2022",color:"muted"}}}function formatDuration(ms){if(ms<500)return"<1s";let seconds=Math.round(ms/1e3);if(seconds<60)return`${seconds}s`;let minutes=Math.floor(seconds/60);if(minutes<60){let remainder2=seconds%60;return remainder2===0?`${minutes}m`:`${minutes}m ${remainder2}s`}let hours=Math.floor(minutes/60),remainder=minutes%60;return remainder===0?`${hours}h`:`${hours}h ${remainder}m`}var NAME_COLUMN_MAX=8,ERROR_LINE_CHARS=160;function clipText(text,bytes2){return Buffer.byteLength(text)<=bytes2?text:`${boundText(text,Math.max(1,bytes2-1))}\u2026`}function compactArguments(args){try{return clipText(JSON.stringify(args)??String(args),512).replace(/\s+/gu," ")}catch{return"{\u2026}"}}function isQualifiedAbsolute(path10){return process.platform==="win32"?/^(?:[A-Za-z]:[\\/]|[\\/]{2})/u.test(path10):isAbsolute6(path10)}function relativeToCwd(path10,cwd){if(!cwd||!isQualifiedAbsolute(path10)||!isQualifiedAbsolute(cwd))return path10;let rel=relative7(cwd,path10);return rel===""?".":rel===".."||rel.startsWith(`..${sep10}`)||isAbsolute6(rel)||win32.isAbsolute(rel)?path10:rel.split(sep10).join("/")}function activityTarget(name,args,cwd){if(!args||typeof args!="object"||Array.isArray(args))return compactArguments(args);let record=args,keys=name==="bash"||name==="powershell"?["command"]:name==="grep"||name==="find"?["pattern","path"]:["path","pattern","command"];for(let key of keys){let value=record[key];if(typeof value!="string"||!value.trim())continue;let text=((key==="command"?value.split(/\r?\n/).find(line=>line.trim()):value)??value).trim().replace(/[ \t]+/gu," ");return clipText(key==="path"?relativeToCwd(text,cwd):text,160)}return compactArguments(args)}function targetOf(activity){if(activity.target)return activity.target;try{return activityTarget(activity.name,JSON.parse(activity.args))}catch{return activity.args}}function formatActivityDuration(ms){if(ms===void 0)return"";let millis=Math.round(ms);if(millis<1e3)return`${millis}ms`;let tenths=Math.round(ms/100)/10;return tenths<60?`${tenths.toFixed(1)}s`:formatDuration(ms)}var TASK_STATUS={running:"running",ok:"completed",error:"failed",cancelled:"cancelled"};function activityMarker(status,now){return statusMarker(TASK_STATUS[status],now===void 0?void 0:{now})}function activityGlyph(status){return activityMarker(status).glyph}function nameColumnWidth(activities){return Math.min(NAME_COLUMN_MAX,Math.max(0,...activities.map(activity=>activity.name.length)))}function paddedName(activity,width){return targetOf(activity)?activity.name.padEnd(width):activity.name}function errorLine(error){let line=(error.split(/\r?\n/u).find(part=>part.trim())??"").replace(/\s+/gu," ").trim(),chars=Array.from(line);return chars.length>ERROR_LINE_CHARS?`${chars.slice(0,ERROR_LINE_CHARS-1).join("")}\u2026`:line}function activityText(activity,nameWidth=nameColumnWidth([activity])){let target=targetOf(activity),duration=formatActivityDuration(activity.durationMs),line=`${activityGlyph(activity.status)} ${paddedName(activity,nameWidth)}${target?` ${target}`:""}${duration?` \xB7 ${duration}`:""}`,error=activity.error?errorLine(activity.error):"";return error?`${line}
1139
- ${" ".repeat(3+nameWidth)}${error}`:line}function earlierLabel(earlier){return`\u2026 ${earlier} earlier tool ${earlier===1?"call":"calls"}`}function activitiesText(activities,earlier=0){let width=nameColumnWidth(activities),rows=activities.map(activity=>activityText(activity,width));return(earlier>0?[earlierLabel(earlier),...rows]:rows).join(`
1140
- `)}var SEPARATOR_WIDTH=3;function oneLine(text){return sanitizeBinaryOutput(stripTerminalSequences(text)).replace(/\s+/gu," ").trim()}function shownDuration(activity,now){return activity.status==="running"?activity.startedAt===void 0?"":formatActivityDuration(Math.max(0,now-activity.startedAt)):formatActivityDuration(activity.durationMs)}function headWidth(row,nameWidth){return visibleWidth(row.marker.glyph)+1+Math.max(nameWidth,visibleWidth(row.name))+1}function activityRow(row,nameWidth,durationWidth,tableWidth,theme2){let{marker,name,target,duration}=row,padding=" ".repeat(Math.max(0,nameWidth-visibleWidth(name))),head=`${theme2.fg(marker.color,marker.glyph)} ${theme2.fg("toolTitle",name)}${padding}`,durationPad=" ".repeat(Math.max(0,durationWidth-visibleWidth(duration))),tail=duration?`${theme2.fg("dim"," \xB7 ")}${durationPad}${theme2.fg("dim",duration)}`:"";if(!target&&!tail)return truncateToWidth(head.trimEnd(),tableWidth,"\u2026");let room=tableWidth-headWidth(row,nameWidth)-(tail?SEPARATOR_WIDTH+durationWidth:0);if(room<2)return truncateToWidth(`${head} ${theme2.fg("muted",target)}${tail}`,tableWidth,"\u2026");let clipped2=truncateToWidth(target,room,"\u2026");return tail?`${head} ${theme2.fg("muted",clipped2)}${" ".repeat(room-visibleWidth(clipped2))}${tail}`:`${head} ${theme2.fg("muted",clipped2)}`}function activityLines(activities,width,theme2,now=Date.now()){if(width<=0)return[];let nameWidth=nameColumnWidth(activities),rows=activities.map(activity=>({activity,marker:activityMarker(activity.status,now),name:oneLine(activity.name),target:oneLine(targetOf(activity)),duration:shownDuration(activity,now)})),durationWidth=Math.max(0,...rows.map(row=>visibleWidth(row.duration))),tailWidth=durationWidth?SEPARATOR_WIDTH+durationWidth:0,naturalWidth=Math.max(0,...rows.map(row=>headWidth(row,nameWidth)+visibleWidth(row.target)+tailWidth)),tableWidth=Math.min(width,naturalWidth),lines=[];for(let row of rows){lines.push(activityRow(row,nameWidth,durationWidth,tableWidth,theme2));let error=row.activity.error?oneLine(errorLine(row.activity.error)):"";error&&lines.push(truncateToWidth(`${" ".repeat(3+nameWidth)}${theme2.fg("error",error)}`,width,"\u2026"))}return lines}var EXPANDED_ACTIVITIES=5,AgentCallComponent=class{constructor(theme2){this.title="",this.parts={},this.theme=theme2}update(theme2,title,parts){this.theme=theme2,this.title=singleLine2(title,160),this.parts=parts}render(width){if(width<=0)return[];let heading=this.theme.fg("toolTitle",this.theme.bold("Agent")),available=width-visibleWidth(heading)-1;if(available<=0)return[truncateToWidth(heading,width,"")];let{diagnostic,duration,tasks}=this.parts,fullSuffix=[duration,tasks].filter(Boolean).join(" \xB7 "),suffix=truncateToWidth(visibleWidth(fullSuffix)<=available?fullSuffix:tasks??duration??"",available,"\u2026"),contentWidth=Math.max(0,available-visibleWidth(suffix)-(suffix?3:0)),shownDiagnostic=truncateToWidth(diagnostic??"",contentWidth,"\u2026"),titleWidth=Math.max(0,contentWidth-visibleWidth(shownDiagnostic)-(shownDiagnostic?3:0)),title=truncateToWidth(this.title,titleWidth,"\u2026"),parts=[title?this.theme.fg("muted",title):void 0,shownDiagnostic?this.theme.fg("dim",shownDiagnostic):void 0,suffix?this.theme.fg("dim",suffix):void 0].filter(Boolean);return[heading+(parts.length?` ${parts.join(this.theme.fg("dim"," \xB7 "))}`:"")]}invalidate(){}};function detailsOf(result2){let details=result2?.details;return details?.version===2&&typeof details.state=="string"?details:void 0}function singleLine2(text,bytes2=120){return clipText(text.replace(/\s+/gu," ").trim(),bytes2)}function errorOf(result2,details){if(details&&"error"in details&&details.error)return singleLine2(details.error,240);let output=result2?getTextOutput(result2,!1).trim():"",marker=output.lastIndexOf("Error:");return singleLine2(marker>=0?output.slice(marker+6):output.split(`
1138
+ This allows ${APP_NAME} to load ${CONFIG_DIR_NAME} settings and resources, install missing project packages, and execute project extensions.`}async function selectProjectTrustOption(cwd,ctx){let options=getProjectTrustOptions(cwd,{includeSessionOnly:!0}),selected=await ctx.ui.select(formatProjectTrustPrompt(cwd),options.map(option=>option.label));return options.find(option=>option.label===selected)}function saveProjectTrustPromptResult(trustStore,result2){result2.updates.length>0&&trustStore.setMany(result2.updates)}async function resolveProjectTrusted(options){if(options.trustOverride!==void 0)return options.trustOverride;if(!hasTrustRequiringProjectResources(options.cwd))return options.trustStore.get(options.cwd)??!0;if(options.extensionsResult){let{result:result2,errors}=await emitProjectTrustEvent(options.extensionsResult,{type:"project_trust",cwd:options.cwd},options.projectTrustContext);for(let error of errors)options.onExtensionError?.(`Extension "${error.extensionPath}" project_trust error: ${error.error}`);if(result2){let trusted=result2.trusted==="yes";return result2.remember===!0&&options.trustStore.set(options.cwd,trusted),trusted}}let decision=options.trustStore.get(options.cwd);if(decision!==null)return decision;switch(options.defaultProjectTrust??SETTINGS_DEFAULTS.defaultProjectTrust){case"always":return!0;case"never":return!1;case"ask":break}if(!options.projectTrustContext.hasUI)return!1;let selected=await selectProjectTrustOption(options.cwd,options.projectTrustContext);return selected!==void 0?(saveProjectTrustPromptResult(options.trustStore,selected),selected.trusted):!1}function collectSettingsDiagnostics(settingsManager){return settingsManager.drainErrors().map(({scope,path:path10,error})=>({type:"warning",message:path10?`Invalid settings file ${path10}: ${error.message}`:`Invalid ${scope} settings: ${error.message}`}))}function deduplicateDiagnostics(diagnostics){let seen=new Set;return diagnostics.filter(diagnostic=>{let key=`${diagnostic.type}\0${diagnostic.message}`;return seen.has(key)?!1:(seen.add(key),!0)})}registerKeybindings({"app.btw.close":{defaultKeys:"escape",description:"Close the BTW conversation"},"app.btw.cancel":{defaultKeys:"ctrl+c",description:"Stop the BTW answer, or close when idle"},"app.btw.scrollUp":{defaultKeys:"up",description:"Scroll BTW up when the editor is empty"},"app.btw.scrollDown":{defaultKeys:"down",description:"Scroll BTW down when the editor is empty"}});function registerListKeybindings(){registerKeybindings({"app.list.toggle":{defaultKeys:"space",description:"Toggle selected list item"}})}registerListKeybindings();registerKeybindings({"app.provider.switchPaneLeft":{defaultKeys:"left",description:"/provider: focus the left pane"},"app.provider.switchPaneRight":{defaultKeys:"right",description:"/provider: focus the right pane"},"app.provider.removeEntry":{defaultKeys:"ctrl+x",description:"/provider: remove the selected compat or dictionary entry"}});registerListKeybindings();var TASK_KEYBINDINGS={"app.tasks.detach":{defaultKeys:"ctrl+b",description:"Move foreground tasks to the background"},"app.tasks.previousTab":{defaultKeys:"left",description:"Show Output in the focused task inspector"},"app.tasks.nextTab":{defaultKeys:"right",description:"Show Details in the focused task inspector"},"app.tasks.kill":{defaultKeys:"k",description:"Stop the selected task"},"app.tasks.confirmStop":{defaultKeys:"enter",description:"Confirm stopping the selected task"},"app.tasks.detachSelected":{defaultKeys:"b",description:"Move the selected task to the background"},"app.tasks.search":{defaultKeys:"/",description:"Search retained task identities and labels"},"app.tasks.follow":{defaultKeys:"f",description:"Follow the selected task's output"},"app.tasks.top":{defaultKeys:"home",description:"Go to the top of the task list or preview"},"app.tasks.bottom":{defaultKeys:"end",description:"Go to the bottom of the task list or preview"},"app.tasks.nextFocus":{defaultKeys:"tab",description:"Switch between task list and inspector"},"app.tasks.previousFocus":{defaultKeys:"shift+tab",description:"Switch between task inspector and list"},"app.tasks.help":{defaultKeys:"?",description:"Show task controls"}};registerKeybindings(TASK_KEYBINDINGS);registerReservedKeybindings("app.tasks.detach");registerKeybindingHelpSection({id:"tasks",title:"Tasks",rows:[{action:"app.tasks.detach",description:TASK_KEYBINDINGS["app.tasks.detach"].description},{action:"app.tasks.detachSelected",description:`${TASK_KEYBINDINGS["app.tasks.detachSelected"].description} (while /tasks is open)`}]});var AgentSettingsHost=class extends Container{constructor(tui,theme2,keys){super(),this.accepting=!1,this.active=!1,this.disposed=!1,this.tui=tui,this.theme=theme2,this.keys=keys}get focused(){return this.active}set focused(value){this.active=value,this.page&&isFocusable(this.page)&&(this.page.focused=value)}show(create){return new Promise(resolve18=>{if(this.disposed)return;let answered=!1,page=create(this.tui,this.theme,this.keys,result2=>{answered||this.disposed||(answered=!0,this.accepting=!1,resolve18(result2))});this.replacePage(page),this.accepting=!0})}handleInput(data){this.accepting&&this.page?.handleInput?.(data)}handleMouse(event){return this.accepting?super.handleMouse(event):void 0}dispose(){this.disposed||(this.disposed=!0,this.accepting=!1,this.disposePage(),this.clear())}replacePage(page){this.disposePage(),this.page=page,this.clear(),this.addChild(page),isFocusable(page)&&(page.focused=this.active),this.tui.requestRender()}disposePage(){let previous=this.page;this.page=void 0,previous&&isFocusable(previous)&&(previous.focused=!1),previous?.dispose?.()}};var FOLLOW=" \xB7 Follow current session",FOLLOW_SHORT=" \xB7 follow",VALUE_PRIORITY_WIDTH=12,COMPACT_PRIORITY_WIDTH=4,AgentSettingsPanel=class{constructor(tui,theme2,keys,rows,selected,onSelect,onCancel){this.rowLines=[],this.tui=tui,this.theme=theme2,this.keys=keys,this.rows=rows,this.onSelect=onSelect,this.onCancel=onCancel,this.selectedIndex=Math.max(0,rows.findIndex(row=>row.action===selected));let labels=rows.flatMap(row=>row.field?[visibleWidth(row.label)]:[]);this.labelWidth=Math.max(0,...labels)+2}render(width){if(width<1)return[];let border=this.theme.fg("borderMuted","\u2500".repeat(width)),lines=[this.theme.fg("accent",this.theme.bold("Agent Settings")),border];this.rowLines=[];for(let[index3,row]of this.rows.entries())lines.length>2&&lines.push(""),this.rowLines.push(lines.length),lines.push(this.renderRow(row,index3===this.selectedIndex,width));return lines.push(border,...wrapTextWithAnsi(this.theme.fg("dim",this.hints()),width)),lines.map(line=>truncateToWidth(line,width))}handleInput(data){if(this.keys.matches(data,"tui.select.up"))this.move(-1);else if(this.keys.matches(data,"tui.select.down"))this.move(1);else if(this.keys.matches(data,"tui.select.confirm"))this.select(this.selectedIndex);else if(this.keys.matches(data,"tui.select.cancel")){this.onCancel();return}else return;this.tui.requestRender()}handleMouse(event){let index3=this.rowLines.indexOf(event.y);if(!(index3<0||event.button!=="left")){if(event.type==="press")return this.selectedIndex=index3,{handled:!0,focus:!0};if(event.type==="click")return this.selectedIndex=index3,this.select(index3),{handled:!0,focus:!0}}}invalidate(){this.rowLines=[]}move(delta){let count=this.rows.length;this.selectedIndex=(this.selectedIndex+delta+count)%count}select(index3){let row=this.rows[index3];row&&this.onSelect(row.action)}renderRow(row,active,width){let cursor=active?this.theme.fg("accent","\u203A "):" ",label=row.field?row.label+" ".repeat(this.labelWidth-visibleWidth(row.label)):row.label,heading=cursor+this.theme.fg(active?"accent":"muted",label);return row.field?truncateToWidth(heading+this.renderValue(row.field,Math.max(0,width-visibleWidth(heading))),width):truncateToWidth(heading,width)}renderValue(field2,width){if(width<1)return"";let follow=this.followText(field2,width),status=field2.status??"",statusWidth=status?visibleWidth(status)+1:0,value=truncateToWidth(field2.value,Math.max(0,width-visibleWidth(follow)-statusWidth),"\u2026"),head=value+(status?`${value?" ":""}${status}`:""),styled=this.theme.fg(field2.tone??"text",truncateToWidth(head,width));return follow&&width-visibleWidth(styled)>=visibleWidth(follow)?styled+this.theme.fg("dim",follow):styled}followText(field2,width){if(!field2.following)return"";let available=width-(field2.status?visibleWidth(field2.status)+1:0);return visibleWidth(FOLLOW)+VALUE_PRIORITY_WIDTH<=available?FOLLOW:visibleWidth(FOLLOW_SHORT)+COMPACT_PRIORITY_WIDTH<=available?FOLLOW_SHORT:""}hints(){let navigation=[this.key("tui.select.up"),this.key("tui.select.down")].filter(Boolean).join("/"),confirm=this.key("tui.select.confirm"),cancel=this.key("tui.select.cancel");return[navigation&&`${navigation} navigate`,confirm&&`${confirm} change`,cancel&&`${cancel} close`].filter(Boolean).join(" \xB7 ")}key(action){return keyLabel(action,{keybindings:this.keys})}};var AGENT_SETTINGS_NAMESPACE="agent";function inspectAgentSettings(ctx){let raw=ctx.getExtensionSettings(AGENT_SETTINGS_NAMESPACE),model,invalidModel;raw.model!==void 0&&(typeof raw.model=="string"&&raw.model.includes("/")?model=raw.model:invalidModel=raw.model);let thinking,invalidThinking;return raw.thinking!==void 0&&(typeof raw.thinking=="string"&&THINKING_LEVEL_OPTIONS.includes(raw.thinking)?thinking=raw.thinking:invalidThinking=raw.thinking),{model,thinking,invalidModel,invalidThinking}}function readAgentSettings(ctx){let inspection=inspectAgentSettings(ctx);if(inspection.invalidModel!==void 0)throw new Error("Invalid Agent model setting. Choose a model with /agent.");if(inspection.invalidThinking!==void 0)throw new Error("Invalid Agent effort setting. Choose an effort level with /agent.");return{model:inspection.model,thinking:inspection.thinking}}function resolveAgentModel(ctx,reference){if(!reference)return ctx.model?{model:ctx.model,available:!0}:void 0;let slash=reference.indexOf("/");if(slash<=0)return;let model=ctx.modelRuntime.getModel(reference.slice(0,slash),reference.slice(slash+1));if(!model)return;let available=ctx.modelRuntime.getAvailableSnapshot().some(item=>item.provider===model.provider&&item.id===model.id);return{model,available}}function requestedEffort(ctx,settings){return settings.thinking??ctx.thinkingLevel??DEFAULT_THINKING_LEVEL}function supportedEffort(model,requested){return clampThinkingLevel(model,requested)}function resolveAgentConfiguration(ctx){let settings=readAgentSettings(ctx),resolution=resolveAgentModel(ctx,settings.model);if(!resolution)throw settings.model?new Error(`Agent model is unavailable: ${settings.model}`):new Error("Agent has no model to follow. Choose one with /agent.");return{model:resolution.model,thinking:supportedEffort(resolution.model,requestedEffort(ctx,settings)),settings}}async function saveAgentSettings(ctx,patch){let next={...ctx.getExtensionSettings(AGENT_SETTINGS_NAMESPACE)};patch.model===null||patch.model===""?delete next.model:patch.model!==void 0&&(next.model=patch.model),patch.thinking===null?delete next.thinking:patch.thinking!==void 0&&(next.thinking=patch.thinking),await ctx.setExtensionSettings(AGENT_SETTINGS_NAMESPACE,next)}async function selectAgentModel(ctx,host,current){let saved=resolveAgentModel(ctx,current)?.model,selected=await host.show((tui,_theme,_keys,done)=>new ModelSelectorComponent(tui,saved??ctx.model,ctx.modelRuntime,ctx.scopedModels,done,()=>done(void 0)));return selected?`${selected.provider}/${selected.id}`:void 0}async function selectAgentThinking(ctx,host,settings,model){let requested=requestedEffort(ctx,settings),current=model?supportedEffort(model,requested):requested,available=model?getSupportedThinkingLevels(model):[...THINKING_LEVEL_OPTIONS];return host.show((_tui,_theme,_keys,done)=>new ThinkingSelectorComponent(current,available,done,()=>done(void 0)))}function formatInvalidValue(value){let text="";try{text=typeof value=="string"?value:JSON.stringify(value)??""}catch{}return truncateHead(text,{maxLines:1,maxBytes:80}).content}function invalidField(raw){return{value:formatInvalidValue(raw),status:"[invalid]",tone:"error"}}function describeModel2(inspection,resolution){return inspection.invalidModel!==void 0?invalidField(inspection.invalidModel):resolution?{value:`${resolution.model.provider}/${resolution.model.id}`,following:inspection.model===void 0,...resolution.available?{}:{status:"[unavailable]",tone:"warning"}}:{value:inspection.model??"",status:"[unavailable]",tone:"warning"}}function describeEffort(ctx,inspection,model){if(inspection.invalidThinking!==void 0)return invalidField(inspection.invalidThinking);let requested=requestedEffort(ctx,inspection),following=inspection.thinking===void 0;if(!model)return{value:requested,following,status:"[unresolved]",tone:"warning"};let effective=supportedEffort(model,requested);return effective===requested?{value:requested,following}:{value:`${requested} \u2192 ${effective}`,following,tone:"warning"}}function hasOverrides(inspection){return inspection.model!==void 0||inspection.thinking!==void 0||inspection.invalidModel!==void 0||inspection.invalidThinking!==void 0}function settingsRows(ctx,inspection,resolution){return[{action:"model",label:"Model",field:describeModel2(inspection,resolution)},{action:"thinking",label:"Effort",field:describeEffort(ctx,inspection,resolution?.model)},{action:"reset",label:"Reset to follow current session"}]}async function openAgentSettings(ctx){if(ctx.mode!=="tui"){try{let settings=readAgentSettings(ctx);ctx.ui.notify(`Agent model: ${settings.model??"Follow current session"} \xB7 Effort: ${settings.thinking??"Follow current session"}`,"info")}catch(error){ctx.ui.notify(error instanceof Error?error.message:String(error),"error")}return}let outcome=await ctx.ui.custom((tui,theme2,keys,done)=>{let host=new AgentSettingsHost(tui,theme2,keys);return runAgentSettings(ctx,host).then(()=>done(void 0),error=>done({error})),host});if(outcome)throw outcome.error}async function runAgentSettings(ctx,host){let selectedAction="model";for(;;){let inspection;try{inspection=inspectAgentSettings(ctx)}catch(error){ctx.ui.notify(error instanceof Error?error.message:String(error),"error");return}let resolution=inspection.invalidModel!==void 0?void 0:resolveAgentModel(ctx,inspection.model),action=await host.show((tui,theme2,keys,done)=>new AgentSettingsPanel(tui,theme2,keys,settingsRows(ctx,inspection,resolution),selectedAction,done,()=>done(void 0)));if(!action)return;selectedAction=action;try{if(action==="reset"){if(!hasOverrides(inspection))continue;await saveAgentSettings(ctx,{model:null,thinking:null}),ctx.ui.notify("Agent settings: Follow current session","info")}else if(action==="model"){let selected=await selectAgentModel(ctx,host,inspection.model??"");if(selected===void 0||selected===inspection.model)continue;await saveAgentSettings(ctx,{model:selected}),ctx.ui.notify(`Agent model: ${selected}`,"info")}else if(action==="thinking"){let selected=await selectAgentThinking(ctx,host,inspection,resolution?.model);if(selected===void 0||selected===inspection.thinking&&inspection.invalidThinking===void 0)continue;await saveAgentSettings(ctx,{thinking:selected}),ctx.ui.notify(`Agent effort: ${selected}`,"info")}}catch(error){ctx.ui.notify(`Could not save Agent settings: ${error instanceof Error?error.message:String(error)}`,"error")}}}import{isAbsolute as isAbsolute6,relative as relative7,sep as sep10,win32}from"node:path";function clipText(text,bytes2){return Buffer.byteLength(text)<=bytes2?text:`${boundText(text,Math.max(1,bytes2-1))}\u2026`}function compactArguments(args){try{return clipText(JSON.stringify(args)??String(args),512).replace(/\s+/gu," ")}catch{return"{\u2026}"}}function isQualifiedAbsolute(path10){return process.platform==="win32"?/^(?:[A-Za-z]:[\\/]|[\\/]{2})/u.test(path10):isAbsolute6(path10)}function relativeToCwd(path10,cwd){if(!cwd||!isQualifiedAbsolute(path10)||!isQualifiedAbsolute(cwd))return path10;let rel=relative7(cwd,path10);return rel===""?".":rel===".."||rel.startsWith(`..${sep10}`)||isAbsolute6(rel)||win32.isAbsolute(rel)?path10:rel.split(sep10).join("/")}function activityTarget(name,args,cwd){if(!args||typeof args!="object"||Array.isArray(args))return compactArguments(args);let record=args,keys=name==="bash"||name==="powershell"?["command"]:name==="grep"||name==="find"?["pattern","path"]:["path","pattern","command"];for(let key of keys){let value=record[key];if(typeof value!="string"||!value.trim())continue;let text=((key==="command"?value.split(/\r?\n/).find(line=>line.trim()):value)??value).trim().replace(/[ \t]+/gu," ");return clipText(key==="path"?relativeToCwd(text,cwd):text,160)}return compactArguments(args)}function targetOf(activity){if(activity.target)return activity.target;try{return activityTarget(activity.name,JSON.parse(activity.args))}catch{return activity.args}}function formatDuration(ms){if(ms<500)return"<1s";let seconds=Math.round(ms/1e3);if(seconds<60)return`${seconds}s`;let minutes=Math.floor(seconds/60);if(minutes<60){let remainder2=seconds%60;return remainder2===0?`${minutes}m`:`${minutes}m ${remainder2}s`}let hours=Math.floor(minutes/60),remainder=minutes%60;return remainder===0?`${hours}h`:`${hours}h ${remainder}m`}var NAME_COLUMN_MAX=8,ERROR_LINE_CHARS=160,TASK_STATUS={running:"running",ok:"completed",error:"failed",cancelled:"cancelled"};function activityStatusAsTaskStatus(status){return TASK_STATUS[status]}function formatTaskActivityDuration(ms){if(ms===void 0)return"";let millis=Math.round(ms);if(millis<1e3)return`${millis}ms`;let tenths=Math.round(ms/100)/10;return tenths<60?`${tenths.toFixed(1)}s`:formatDuration(ms)}function taskActivityNameWidth(activities){return Math.min(NAME_COLUMN_MAX,Math.max(0,...activities.map(activity=>activity.name.length)))}function taskActivityErrorLine(error){let line=(error.split(/\r?\n/u).find(part=>part.trim())??"").replace(/\s+/gu," ").trim(),chars=Array.from(line);return chars.length>ERROR_LINE_CHARS?`${chars.slice(0,ERROR_LINE_CHARS-1).join("")}\u2026`:line}function earlierTaskActivitiesLabel(earlier){return`\u2026 ${earlier} earlier tool ${earlier===1?"call":"calls"}`}var PLAIN_GLYPH={running:"\u203A",ok:"\u2713",error:"\xD7",cancelled:"\u25CB"};function taskActivityText(activity,nameWidth=taskActivityNameWidth([activity])){let target=activity.target??"",name=target?activity.name.padEnd(nameWidth):activity.name,duration=formatTaskActivityDuration(activity.durationMs),line=`${PLAIN_GLYPH[activity.status]} ${name}${target?` ${target}`:""}${duration?` \xB7 ${duration}`:""}`,error=activity.error?taskActivityErrorLine(activity.error):"";return error?`${line}
1139
+ ${" ".repeat(3+nameWidth)}${error}`:line}function taskActivitiesText(activities,earlier=0){let width=taskActivityNameWidth(activities),rows=activities.map(activity=>taskActivityText(activity,width));return(earlier>0?[earlierTaskActivitiesLabel(earlier),...rows]:rows).join(`
1140
+ `)}var SPINNER_BLOOM=["\xB7","\u2722","\u273C","\u2736","\u273B","\u273D"],STATUS_SPINNER_FRAMES=[...SPINNER_BLOOM,...[...SPINNER_BLOOM].reverse()],STATUS_SPINNER_INTERVAL_MS=120;function statusSpinnerFrame(now){let frame3=Math.floor(now/STATUS_SPINNER_INTERVAL_MS)%STATUS_SPINNER_FRAMES.length;return STATUS_SPINNER_FRAMES[frame3]??STATUS_SPINNER_FRAMES[0]??"\xB7"}function statusMarker(status,opts){switch(status){case"running":return{glyph:opts?.now!==void 0?statusSpinnerFrame(opts.now):"\u203A",color:"accent"};case"completed":return{glyph:"\u2713",color:"success"};case"failed":return{glyph:"\xD7",color:"error"};case"timeout":return{glyph:"\xD7",color:"warning"};case"cancelled":case"stopping":case"partial":return{glyph:"\u25CB",color:"warning"};case"queued":return{glyph:"\u25CB",color:"muted"};default:return{glyph:"\u2022",color:"muted"}}}var SEPARATOR_WIDTH=3;function oneLine(text){return sanitizeBinaryOutput(stripTerminalSequences(text)).replace(/\s+/gu," ").trim()}function marker(status,now){return statusMarker(activityStatusAsTaskStatus(status),{now})}function shownDuration(activity,now){return activity.status==="running"?activity.startedAt===void 0?"":formatTaskActivityDuration(Math.max(0,now-activity.startedAt)):formatTaskActivityDuration(activity.durationMs)}function headWidth(row,nameWidth){return visibleWidth(row.marker.glyph)+1+Math.max(nameWidth,visibleWidth(row.name))+1}function activityRow(row,nameWidth,durationWidth,tableWidth,theme2){let{marker:marker2,name,target,duration}=row,padding=" ".repeat(Math.max(0,nameWidth-visibleWidth(name))),head=`${theme2.fg(marker2.color,marker2.glyph)} ${theme2.fg("toolTitle",name)}${padding}`,durationPad=" ".repeat(Math.max(0,durationWidth-visibleWidth(duration))),tail=duration?`${theme2.fg("dim"," \xB7 ")}${durationPad}${theme2.fg("dim",duration)}`:"";if(!target&&!tail)return truncateToWidth(head.trimEnd(),tableWidth,"\u2026");let room=tableWidth-headWidth(row,nameWidth)-(tail?SEPARATOR_WIDTH+durationWidth:0);if(room<2)return truncateToWidth(`${head} ${theme2.fg("muted",target)}${tail}`,tableWidth,"\u2026");let clipped2=truncateToWidth(target,room,"\u2026");return tail?`${head} ${theme2.fg("muted",clipped2)}${" ".repeat(room-visibleWidth(clipped2))}${tail}`:`${head} ${theme2.fg("muted",clipped2)}`}function taskActivityLines(activities,width,theme2,earlier=0,now=Date.now()){if(width<=0)return[];let nameWidth=taskActivityNameWidth(activities),rows=activities.map(activity=>({activity,marker:marker(activity.status,now),name:oneLine(activity.name),target:oneLine(activity.target??""),duration:shownDuration(activity,now)})),durationWidth=Math.max(0,...rows.map(row=>visibleWidth(row.duration))),tailWidth=durationWidth?SEPARATOR_WIDTH+durationWidth:0,naturalWidth=Math.max(0,...rows.map(row=>headWidth(row,nameWidth)+visibleWidth(row.target)+tailWidth)),tableWidth=Math.min(width,naturalWidth),lines=[];if(earlier>0){let label=earlierTaskActivitiesLabel(earlier);lines.push(truncateToWidth(theme2.fg("dim",label),width,"\u2026"))}for(let row of rows){lines.push(activityRow(row,nameWidth,durationWidth,tableWidth,theme2));let error=row.activity.error?oneLine(taskActivityErrorLine(row.activity.error)):"";error&&lines.push(truncateToWidth(`${" ".repeat(3+nameWidth)}${theme2.fg("error",error)}`,width,"\u2026"))}return lines}function activityLines(activities,width,theme2,now=Date.now()){return taskActivityLines(activities.map(activity=>({...activity,target:targetOf(activity)})),width,theme2,0,now)}var EXPANDED_ACTIVITIES=5,AgentCallComponent=class{constructor(theme2){this.title="",this.parts={},this.theme=theme2}update(theme2,title,parts){this.theme=theme2,this.title=singleLine2(title,160),this.parts=parts}render(width){if(width<=0)return[];let heading=this.theme.fg("toolTitle",this.theme.bold("Agent")),available=width-visibleWidth(heading)-1;if(available<=0)return[truncateToWidth(heading,width,"")];let{diagnostic,duration,tasks}=this.parts,fullSuffix=[duration,tasks].filter(Boolean).join(" \xB7 "),suffix=truncateToWidth(visibleWidth(fullSuffix)<=available?fullSuffix:tasks??duration??"",available,"\u2026"),contentWidth=Math.max(0,available-visibleWidth(suffix)-(suffix?3:0)),shownDiagnostic=truncateToWidth(diagnostic??"",contentWidth,"\u2026"),titleWidth=Math.max(0,contentWidth-visibleWidth(shownDiagnostic)-(shownDiagnostic?3:0)),title=truncateToWidth(this.title,titleWidth,"\u2026"),parts=[title?this.theme.fg("muted",title):void 0,shownDiagnostic?this.theme.fg("dim",shownDiagnostic):void 0,suffix?this.theme.fg("dim",suffix):void 0].filter(Boolean);return[heading+(parts.length?` ${parts.join(this.theme.fg("dim"," \xB7 "))}`:"")]}invalidate(){}};function detailsOf(result2){let details=result2?.details;return details?.version===2&&typeof details.state=="string"?details:void 0}function singleLine2(text,bytes2=120){return clipText(text.replace(/\s+/gu," ").trim(),bytes2)}function errorOf(result2,details){if(details&&"error"in details&&details.error)return singleLine2(details.error,240);let output=result2?getTextOutput(result2,!1).trim():"",marker2=output.lastIndexOf("Error:");return singleLine2(marker2>=0?output.slice(marker2+6):output.split(`
1141
1141
  `)[0]||"Failed",240)}function statusParts(context,details){let status=details?.state;if(status==="background")return toolTimerText(context,!1),{diagnostic:"Background",tasks:"/tasks"};let duration=toolTimerText(context,context.isPartial)?.replace(/^(?:Took|Elapsed) /,""),tasks=details?.taskId?"/tasks":void 0;if(context.isPartial||status==="running"){let latest=details?.state==="running"?details.activities.at(-1):void 0,activity=latest?`${latest.name}${targetOf(latest)?` ${targetOf(latest)}`:""}`:"Starting\u2026";return{diagnostic:context.expanded?void 0:activity,duration}}return status==="cancelled"?{diagnostic:"Cancelled",duration,tasks}:status==="failed"||status==="timeout"||context.isError?{diagnostic:errorOf(context.result,details),duration,tasks}:{duration,tasks}}var agentRenderers={renderCall(args,theme2,context){startToolTimer(context);let input2=args,title=typeof input2.description=="string"&&input2.description.trim()?input2.description:typeof input2.prompt=="string"?input2.prompt:"Delegated task",parts=statusParts(context,detailsOf(context.result)),component=context.lastComponent instanceof AgentCallComponent?context.lastComponent:new AgentCallComponent(theme2);return component.update(theme2,title,parts),component},renderResult(result2,options,theme2,context){let component=context.lastComponent??new Container;component.clear();let details=detailsOf(result2);if(details?.state!=="running"||!options.expanded)return component;let shown=details.activities.slice(-EXPANDED_ACTIVITIES);return component.addChild({render:width=>activityLines(shown,width,theme2),invalidate(){}}),component}};import{existsSync as existsSync19}from"node:fs";import{mkdir}from"node:fs/promises";import{join as join27}from"node:path";var MORE_RESERVE_BYTES=16;async function prepareArtifacts(sessionArtifactDir,taskId,parentSession){if(!sessionArtifactDir)return;let dir=join27(sessionArtifactDir,"agents",taskId);try{await mkdir(dir,{recursive:!0})}catch{return}return{dir,reportPath:join27(dir,"report.md"),transcriptPath:join27(dir,"transcript.jsonl"),parentSession}}function savedTranscript(artifacts){return artifacts&&existsSync19(artifacts.transcriptPath)?artifacts.transcriptPath:void 0}function fitList(items,bytes2){let full=items.join(", ");if(Buffer.byteLength(full)<=bytes2)return full;let shown=0,used=0;for(let item of items){let next=used+Buffer.byteLength(item)+(shown?2:0);if(next>bytes2-MORE_RESERVE_BYTES)break;used=next,shown++}return items.length===1?clipText(full,bytes2):shown===0?`${clipText(items[0]??"",bytes2-MORE_RESERVE_BYTES)} +${items.length-1} more`:`${items.slice(0,shown).join(", ")} +${items.length-shown} more`}function emptyUsage(){return{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}function cacheHitPercent({input:input2,cacheRead,cacheWrite}){let promptTokens=input2+cacheRead+cacheWrite;return(cacheRead>0||cacheWrite>0)&&promptTokens>0?cacheRead/promptTokens*100:void 0}function assistantText(message){return message.role!=="assistant"?"":message.content.filter(block=>block.type==="text").map(block=>block.text).join(`
1142
1142
  `)}function finalAssistantText(messages){for(let index3=messages.length-1;index3>=0;index3--){let text=assistantText(messages[index3]);if(text.trim())return text}return""}function toolErrorText(result2){let text=result2.content?.filter(block=>block.type==="text").map(block=>block.text??"").join(`
1143
1143
  `);return clipText(text||"Tool call failed.",1e3)}var EDIT_TOOLS=new Set(["edit","write"]),EDITED_LINE_BYTES=1024,EDITED_LINE_PREFIX="Edited (edit/write): ",AgentProgress=class{constructor(control,cwd){this.activities=[],this.counted=new WeakSet,this.calls=0,this.failedCalls=0,this.pendingEdits=new Map,this.attempts=new Map,this.usage=emptyUsage(),this.latest="",this.control=control,this.cwd=cwd}handle(event){switch(event.type){case"message_end":if(event.message.role!=="assistant")return;this.last=event.message,this.counted.has(event.message)||(this.counted.add(event.message),this.usage=combineUsage(this.usage,event.message.usage));return;case"compaction_end":event.result?.usage&&(this.usage=combineUsage(this.usage,event.result.usage));return;case"tool_execution_start":this.calls++,EDIT_TOOLS.has(event.toolName)&&this.trackEditStart(event.toolCallId,event.args),this.latest=[event.toolName,activityTarget(event.toolName,event.args)].filter(Boolean).join(" "),this.activities.push({id:event.toolCallId,name:event.toolName,args:compactArguments(event.args),target:activityTarget(event.toolName,event.args,this.cwd),status:"running",startedAt:Date.now()}),this.activities.length>50&&this.activities.shift();break;case"tool_execution_end":{let key=this.pendingEdits.get(event.toolCallId);this.pendingEdits.delete(event.toolCallId);let attempt2=key===void 0?void 0:this.attempts.get(key);attempt2&&!event.isError&&(attempt2.changed=!0),event.isError&&!this.control.signal.aborted&&this.failedCalls++;let activity=this.activities.findLast(item=>item.id===event.toolCallId);if(!activity)return;activity.status=this.control.signal.aborted?"cancelled":event.isError?"error":"ok",activity.durationMs=event.durationMs,event.isError&&(activity.error=toolErrorText(event.result));break}default:return}this.publish()}publish(){this.control.publish({result:{content:[{type:"text",text:this.status()}],details:{version:2,state:"running",taskId:this.control.id,activities:structuredClone(this.activities)}},display:this.display(),usage:this.usage})}outcome(){let last=this.last;return this.control.signal.aborted||last?.stopReason==="aborted"?{status:"cancelled",error:"Agent cancelled."}:!last||last.stopReason==="error"||last.stopReason==="length"?{status:"failed",error:clipText(last?.errorMessage||"Agent ended without a complete report.",4096)}:{status:"completed"}}facts(report,artifacts){let facts=[["Tool calls",`${this.calls}${this.failedCalls?` \xB7 ${this.failedCalls} failed`:""}`]],edited=this.editedFiles();edited.length&&facts.push(["Edited",fitList(edited,TASK_FACT_BYTES)]),report.reportPath&&facts.push(["Report",report.reportPath]);let transcript=savedTranscript(artifacts);return transcript&&facts.push(["Transcript",transcript]),facts}complete(status,error,report,artifacts){let edited=this.editedFiles(),line=edited.length?`
1144
1144
 
1145
- ${EDITED_LINE_PREFIX}${fitList(edited,EDITED_LINE_BYTES-EDITED_LINE_PREFIX.length)}`:"";return{status,error,usage:this.usage,facts:this.facts(report,artifacts),result:{content:[{type:"text",text:report.text+line}],details:{version:2,state:status,taskId:this.control.id,...error?{error}:{}},...status==="completed"?{}:{isError:!0}}}}editedFiles(){return[...this.attempts.values()].filter(attempt2=>attempt2.changed).map(attempt2=>attempt2.display)}trackEditStart(id,args){let path10=args?.path;if(typeof path10!="string"||!path10.trim())return;let resolved=this.cwd?resolveToCwd(path10,this.cwd):path10,key=process.platform==="win32"?resolved.toLowerCase():resolved;this.attempts.has(key)||this.attempts.set(key,{display:relativeToCwd(resolved,this.cwd),changed:!1}),this.pendingEdits.set(id,key)}status(){return this.latest?`Agent running \xB7 ${`${this.calls} tool ${this.calls===1?"call":"calls"}`} \xB7 latest: ${this.latest}`:"Agent running; no tool calls yet."}display(){return this.activities.length?activitiesText(this.activities,this.calls-this.activities.length):""}};import{unlink as unlink3,writeFile as writeFile2}from"node:fs/promises";var REPORT_FILE_MODE=384;function boundedReport(text,fullOutputPath){if(Buffer.byteLength(text)<=24576)return text;let notice=fullOutputPath?`
1145
+ ${EDITED_LINE_PREFIX}${fitList(edited,EDITED_LINE_BYTES-EDITED_LINE_PREFIX.length)}`:"";return{status,error,usage:this.usage,facts:this.facts(report,artifacts),result:{content:[{type:"text",text:report.text+line}],details:{version:2,state:status,taskId:this.control.id,...error?{error}:{}},...status==="completed"?{}:{isError:!0}}}}editedFiles(){return[...this.attempts.values()].filter(attempt2=>attempt2.changed).map(attempt2=>attempt2.display)}trackEditStart(id,args){let path10=args?.path;if(typeof path10!="string"||!path10.trim())return;let resolved=this.cwd?resolveToCwd(path10,this.cwd):path10,key=process.platform==="win32"?resolved.toLowerCase():resolved;this.attempts.has(key)||this.attempts.set(key,{display:relativeToCwd(resolved,this.cwd),changed:!1}),this.pendingEdits.set(id,key)}status(){return this.latest?`Agent running \xB7 ${`${this.calls} tool ${this.calls===1?"call":"calls"}`} \xB7 latest: ${this.latest}`:"Agent running; no tool calls yet."}display(){let earlierActivities=this.calls-this.activities.length;return{text:taskActivitiesText(this.activities,earlierActivities),truncated:!1,activities:this.activities,earlierActivities}}};import{unlink as unlink3,writeFile as writeFile2}from"node:fs/promises";var REPORT_FILE_MODE=384;function boundedReport(text,fullOutputPath){if(Buffer.byteLength(text)<=24576)return text;let notice=fullOutputPath?`
1146
1146
 
1147
1147
  [Agent output truncated. Full output: ${fullOutputPath}]`:`
1148
1148
 
@@ -1239,12 +1239,12 @@ The llama.cpp server needs HF_TOKEN with access.`,["Continue","Back"])!=="Contin
1239
1239
  ${details.id}`,options);if(!choice||(quantization=details.quantizations[options.indexOf(choice)]?.name,!quantization))return}let model=quantization?`${details.id}:${quantization}`:details.id,result2=await runWithProgress(ui,{title:"Downloading model",model,initialMessage:"Starting\u2026",cancelTitle:"Stop download?",cancelMessage:model,run:(signal,update)=>client.downloadAndWait(model,update,signal),cancel:()=>client.unload(model)});result2.cancelled||(await syncCatalog(ctx,client,result2.value),ctx.ui.notify(`Downloaded ${model}`))};pi.registerCommand("llama",{description:"Manage llama.cpp router models",handler:async(_args,ctx)=>{if(ctx.mode!=="tui"){ctx.ui.notify("/llama is available in interactive mode","warning");return}let client=await configuredClient(ctx);client&&await showLlamaUi(ctx,async ui=>{let readCatalog2=async()=>{for(;;)try{return await syncCatalog(ctx,client)}catch(error){if(await ui.connectionError(client.serverUrl,connectionErrorMessage(error))==="close")return}},catalog=await readCatalog2();if(catalog)for(;;){let action=await ui.showModels(client.serverUrl,catalog);if(action.type==="close")return;let actionError;try{action.type==="download"?await downloadModel(ctx,ui,client):modelIsLoaded(action.model)?await unloadModel(ctx,ui,client,action.model):action.model.status.value==="unloaded"?await loadModel(ctx,ui,client,catalog,action.model):ctx.ui.notify(`${action.model.id} is ${action.model.status.value}`,"warning")}catch(error){actionError=error}let refreshed=await readCatalog2();if(!refreshed)return;catalog=refreshed,actionError&&!isConnectionError(actionError)&&ctx.ui.notify(actionError instanceof Error?actionError.message:String(actionError),"error")}})}})}var COMMAND_NAME="provider",COMMAND_DESCRIPTION="Manage models.json providers: connection, API type, and models",NO_UI_WARNING="/provider requires interactive TUI mode.",NO_MODELS_FILE_WARNING="models.json is disabled for this runtime (custom SDK configuration), so /provider is unavailable.",API_TYPES=["openai-responses","openai-completions","anthropic-messages","google-generative-ai","azure-openai-responses","openai-codex-responses","mistral-conversations","google-vertex","bedrock-converse-stream","pi-messages"],INPUT_TYPES=["text","image"],THINKING_LEVELS3=["off","minimal","low","medium","high","xhigh","max"],PROBE_LIMITS={timeoutMs:1e4,maxBodyBytes:4194304,maxErrorBytes:4096,maxErrorChars:400,maxModels:2e3,maxPages:5},MAX_CANDIDATES=8,REFRESH_TIMEOUT_MS=15e3;function formatError(error){return error instanceof Error?error.message:String(error)}function plural(count,word){return count===1?word:word.endsWith("y")?`${word.slice(0,-1)}ies`:`${word}s`}function truncate3(value,max){return value.length<=max?value:`${value.slice(0,Math.max(0,max-1))}\u2026`}function maskApiKey(value){return!value||value.startsWith("$")||value.startsWith("!")?value:value.length<=8?"\u2022\u2022\u2022\u2022\u2022\u2022":`\u2022\u2022\u2022\u2022\u2022\u2022${value.slice(-4)}`}var import_proper_lockfile2=__toESM(require_proper_lockfile(),1);import{randomUUID as randomUUID9}from"node:crypto";import{mkdir as mkdir2,readFile as readFile5,realpath as realpath2,rename,rm as rm2,writeFile as writeFile3}from"node:fs/promises";import{dirname as dirname18,join as join29}from"node:path";var indexCache;function builtinCatalogIndex(){if(indexCache)return indexCache;let entries=[];for(let providerId of getBuiltinProviders())for(let model of getBuiltinModels(providerId))entries.push({providerId,model});return indexCache=entries,entries}function isBuiltinProviderId(providerId){return getBuiltinProviders().includes(providerId)}function builtinDefaults(providerId,modelId,api){if(!isBuiltinProviderId(providerId))return{};let models=getBuiltinModels(providerId);if(models.length===0)return{};let found=(modelId?models.find(model=>model.id===modelId):void 0)??(api?models.find(model=>model.api===api):void 0)??models.find(model=>model.api==="openai-completions")??models[0];return{api:found.api,baseUrl:found.baseUrl}}function normalizeId(id){return(id.includes("/")?id.slice(id.lastIndexOf("/")+1):id).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function sortTier(matches,preferredApi){return matches.sort((a,b)=>{if(preferredApi){let aPreferred=a.entry.model.api===preferredApi?0:1,bPreferred=b.entry.model.api===preferredApi?0:1;if(aPreferred!==bPreferred)return aPreferred-bPreferred}return a.entry.model.id.localeCompare(b.entry.model.id)})}function matchBuiltinModels(query,preferredApi,max=MAX_CANDIDATES){let trimmed=query.trim();if(!trimmed)return[];let index3=builtinCatalogIndex(),normalizedQuery=normalizeId(trimmed),exact=[],normalized=[],consumed=new Set;for(let entry of index3)entry.model.id===trimmed?(exact.push({entry,tier:"exact"}),consumed.add(entry)):normalizeId(entry.model.id)===normalizedQuery&&(normalized.push({entry,tier:"normalized"}),consumed.add(entry));let remaining=sortTier(index3.filter(entry=>!consumed.has(entry)).map(entry=>({entry,tier:"fuzzy"})),preferredApi),fuzzy=fuzzyFilter(remaining,trimmed,({entry})=>`${entry.model.id} ${entry.model.name} ${entry.providerId}`);return[...sortTier(exact,preferredApi),...sortTier(normalized,preferredApi),...fuzzy].slice(0,max)}var DEFAULT_CONTEXT_WINDOW=128e3,DEFAULT_MAX_TOKENS=16384;function formatCostRates(cost){return`$${cost.input} / $${cost.output} in/out (cache $${cost.cacheRead} / $${cost.cacheWrite})`}function computeFieldChanges(current,reference,effectiveApi){let changes=[],unset=key=>current[key]===void 0;changes.push({field:"name",patches:[{path:["name"],value:reference.name}],checked:unset("name")&&reference.name!==reference.id,applicable:!0,currentText:current.name??`not set (falls back to id${current.id?` "${current.id}"`:""})`,referenceText:reference.name}),changes.push({field:"reasoning",patches:[{path:["reasoning"],value:reference.reasoning}],checked:unset("reasoning")&&reference.reasoning===!0,applicable:!0,currentText:current.reasoning===void 0?"false (default)":String(current.reasoning),referenceText:String(reference.reasoning)}),changes.push({field:"input",patches:[{path:["input"],value:reference.input}],checked:unset("input"),applicable:!0,currentText:current.input?current.input.join(", "):"text (default)",referenceText:reference.input.join(", ")}),changes.push({field:"contextWindow",patches:[{path:["contextWindow"],value:reference.contextWindow}],checked:unset("contextWindow"),applicable:!0,currentText:current.contextWindow===void 0?`${DEFAULT_CONTEXT_WINDOW} (default)`:String(current.contextWindow),referenceText:String(reference.contextWindow)}),changes.push({field:"maxTokens",patches:[{path:["maxTokens"],value:reference.maxTokens}],checked:unset("maxTokens"),applicable:!0,currentText:current.maxTokens===void 0?`${DEFAULT_MAX_TOKENS} (default)`:String(current.maxTokens),referenceText:String(reference.maxTokens)});let sameApi=effectiveApi!==void 0&&reference.api===effectiveApi;if(reference.thinkingLevelMap&&Object.keys(reference.thinkingLevelMap).length>0){let details=Object.entries(reference.thinkingLevelMap).map(([level,target])=>`${level}: ${target===null?"null (hidden)":target}`);changes.push({field:"thinkingLevelMap",patches:sameApi?Object.entries(reference.thinkingLevelMap).map(([level,value])=>({path:["thinkingLevelMap",level],value})):[],checked:!1,applicable:sameApi,currentText:current.thinkingLevelMap?`${Object.keys(current.thinkingLevelMap).length} ${plural(Object.keys(current.thinkingLevelMap).length,"mapping")}`:"not set",referenceText:`${details.length} ${plural(details.length,"mapping")}`,referenceDetails:details})}if(reference.compat&&Object.keys(reference.compat).length>0){let patches=[];if(sameApi)for(let[key,value]of Object.entries(reference.compat))if(["chatTemplateKwargs","chatTemplateArgs","openRouterRouting","vercelGatewayRouting"].includes(key)&&value!==null&&typeof value=="object"&&!Array.isArray(value))for(let[entry,item]of Object.entries(value))patches.push({path:["compat",key,entry],value:item});else patches.push({path:["compat",key],value});let details=Object.entries(reference.compat).map(([key,value])=>`${key}: ${JSON.stringify(value)}`);changes.push({field:"compat",patches,checked:!1,applicable:sameApi,currentText:current.compat?`${Object.keys(current.compat).length} ${plural(Object.keys(current.compat).length,"entry")}`:"not set",referenceText:`${details.length} ${plural(details.length,"entry")}`,referenceDetails:details})}if(reference.cost){let{input:input2,output,cacheRead,cacheWrite}=reference.cost,rates={input:input2,output,cacheRead,cacheWrite};changes.push({field:"cost",patches:current.cost?Object.entries(rates).map(([rate,value])=>({path:["cost",rate],value})):[{path:["cost"],value:rates}],checked:!1,applicable:!0,currentText:current.cost?formatCostRates(current.cost):"all 0 (default)",referenceText:formatCostRates(reference.cost),referenceDetails:[`input: $${reference.cost.input} / M tokens`,`output: $${reference.cost.output} / M tokens`,`cacheRead: $${reference.cost.cacheRead} / M tokens`,`cacheWrite: $${reference.cost.cacheWrite} / M tokens`],referenceHasTiers:Array.isArray(reference.cost.tiers)&&reference.cost.tiers.length>0})}return changes}function hasProviderSettings(provider){return!!(provider&&(provider.baseUrl||provider.apiKey||provider.headers||provider.compat||provider.oauth||provider.authHeader!==void 0||provider.models?.length||Object.keys(provider.modelOverrides??{}).length))}function effectiveModelSettings(providerId,provider,model={}){let fallback=builtinDefaults(providerId,model.id,model.api??provider?.api);return{api:model.api??provider?.api??fallback.api,baseUrl:model.baseUrl??provider?.baseUrl??fallback.baseUrl}}var DELETE=Symbol("provider-store-delete");function setPath(root,path10,value){let current=root;for(let segment2 of path10.slice(0,-1)){let next=Object.hasOwn(current,segment2)?current[segment2]:void 0;if(typeof next=="object"&&next!==null&&!Array.isArray(next))current=next;else{let created={};Object.defineProperty(current,segment2,{value:created,writable:!0,enumerable:!0,configurable:!0}),current=created}}let leaf=path10[path10.length-1];value===DELETE?delete current[leaf]:Object.defineProperty(current,leaf,{value:structuredClone(value),writable:!0,enumerable:!0,configurable:!0})}function isPlainObject2(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function jsonEquals(a,b){if(a===b)return!0;if(Array.isArray(a)&&Array.isArray(b))return a.length===b.length&&a.every((entry,index3)=>jsonEquals(entry,b[index3]));if(isPlainObject2(a)&&isPlainObject2(b)){let aKeys=Object.keys(a).sort(),bKeys=Object.keys(b).sort();return aKeys.length===bKeys.length&&aKeys.every((key,index3)=>key===bKeys[index3]&&jsonEquals(a[key],b[key]))}return!1}function cloneValue(value){return value===DELETE?value:structuredClone(value)}async function readDocument(path10){let rawText;try{rawText=await readFile5(path10,"utf8")}catch(error){if(error.code==="ENOENT")return{exists:!1,doc:{providers:{}}};throw error}let parsed=JSON.parse(stripJsonComments(stripBom(rawText)));if(!isPlainObject2(parsed))throw new Error("models.json root must be a JSON object.");let doc=parsed;if(!isPlainObject2(doc.providers))throw new Error('models.json "providers" must be an object.');return{exists:!0,doc,rawText}}var ModelsJsonStore=class _ModelsJsonStore{constructor(path10,baseline){this.ops=[],this.seq=0,this.backedUp=!1,this.batching=!1,this.saveChain=Promise.resolve(),this.drafts=new Set,this.lastSaveResult={kind:"clean"},this.path=path10,this.baseline=baseline,this.view=structuredClone(baseline)}static async load(path10){let normalized=normalizePath(path10),disk;try{normalized=await realpath2(normalized).catch(error=>{if(error.code==="ENOENT")return normalized;throw error}),disk=await readDocument(normalized)}catch(error){return{ok:!1,error:`Failed to parse models.json: ${formatError(error)}
1240
1240
 
1241
1241
  File: ${normalized}`}}if(disk.exists){let validationError=(await ModelConfig.load(normalized)).getError();if(validationError)return{ok:!1,error:validationError}}return{ok:!0,store:new _ModelsJsonStore(normalized,disk.doc)}}getDoc(){return this.view}getProviderIds(){return[...new Set([...Object.keys(this.view.providers),...this.ops.map(op=>op.providerId)])]}getProvider(providerId){return Object.hasOwn(this.view.providers,providerId)?this.view.providers[providerId]:void 0}ensureProviderView(providerId){Object.hasOwn(this.view.providers,providerId)||(this.drafts.add(providerId),this.recomputeView())}isDraftProvider(providerId){return!Object.hasOwn(this.baseline.providers,providerId)&&Object.hasOwn(this.view.providers,providerId)}getModels(providerId){let provider=this.getProvider(providerId);return Array.isArray(provider?.models)?provider.models:[]}getModel(providerId,modelId){return this.getModels(providerId).find(model=>model.id===modelId)}get pendingCount(){return this.ops.length}get saveFailed(){return this.lastSaveResult.kind==="error"||this.lastSaveResult.kind==="invalid"}getPendingError(providerId){let pending=this.ops.filter(op=>providerId===void 0||op.providerId===providerId);if(pending.length!==0)return this.lastSaveResult.kind==="error"||this.lastSaveResult.kind==="invalid"?this.lastSaveResult.error:`${pending.length} change(s) are not saved; retry or discard before continuing.`}retrySave(){this.ops.length>0&&this.scheduleSave()}discardPending(){this.ops=[],this.drafts.clear(),this.recomputeView()}enqueue(op){this.ops.push(op),this.recomputeView(),this.scheduleSave()}nextSeq(){return++this.seq}setProviderField(providerId,path10,value){this.enqueue({kind:"set",seq:this.nextSeq(),providerId,path:path10,value:cloneValue(value),createProvider:!Object.hasOwn(this.baseline.providers,providerId)})}setModelField(providerId,modelId,path10,value){this.enqueue({kind:"set",seq:this.nextSeq(),providerId,modelId,path:path10,value:cloneValue(value),createProvider:!Object.hasOwn(this.baseline.providers,providerId)})}addModel(providerId,model){this.enqueue({kind:"addModel",seq:this.nextSeq(),providerId,model:structuredClone(model),createProvider:!Object.hasOwn(this.baseline.providers,providerId)})}removeModel(providerId,modelId){this.enqueue({kind:"removeModel",seq:this.nextSeq(),providerId,modelId})}async renameModel(providerId,oldId,newId){await this.flush();let pendingError=this.getPendingError(providerId);if(pendingError)return pendingError;let before=this.getModel(providerId,oldId);if(!before)return"The model no longer exists.";let seq=this.nextSeq();if(this.enqueue({kind:"renameModel",seq,providerId,oldId,newId}),await this.flush(),this.ops.some(op=>op.seq===seq))return this.ops=this.ops.filter(op=>op.seq!==seq),this.recomputeView(),this.getPendingError(providerId)??"Failed to save models.json.";let renamed=this.getModel(providerId,newId);return renamed&&jsonEquals(renamed,{...before,id:newId})?void 0:"The model changed on disk; reopen it before renaming."}removeProvider(providerId){this.enqueue({kind:"removeProvider",seq:this.nextSeq(),providerId})}batch(mutate){this.batching=!0;try{mutate()}finally{this.batching=!1}this.ops.length>0&&this.scheduleSave()}discardProviderDraft(providerId){this.drafts.delete(providerId),!Object.hasOwn(this.baseline.providers,providerId)&&(this.ops=this.ops.filter(op=>op.providerId!==providerId),this.recomputeView())}recomputeView(){let view=structuredClone(this.baseline);for(let id of this.drafts)ensureProvider(view,id);for(let op of this.ops)applyOp(view,op);this.view=view}scheduleSave(){this.batching||(this.saveChain=this.saveChain.catch(()=>{}).then(async()=>{let result2=await this.save();this.lastSaveResult=result2,result2.kind!=="clean"&&this.onSaveResult?.(result2)}))}async flush(){let pending;do pending=this.saveChain,await pending;while(pending!==this.saveChain)}async save(){if(this.ops.length===0)return{kind:"clean"};try{return await withFileMutationQueue(this.path,async()=>{await mkdir2(dirname18(this.path),{recursive:!0});let compromised,release2=await import_proper_lockfile2.default.lock(this.path,{realpath:!1,stale:3e4,retries:{retries:20,factor:1.2,minTimeout:50,maxTimeout:250},onCompromised:error=>{compromised=error}}),result2;try{result2=await this.saveLocked(()=>{if(compromised)throw compromised})}catch(error){result2={kind:"error",error:`Failed to save models.json: ${formatError(error)}`}}try{await release2()}catch(error){!compromised&&result2.kind!=="error"&&result2.kind!=="invalid"&&(result2={kind:"error",error:`Could not release the models.json lock: ${formatError(error)}`})}return result2})}catch(error){return{kind:"error",error:`Failed to access models.json for saving: ${formatError(error)}`}}}async saveLocked(assertLock){let tempPath=join29(dirname18(this.path),`.models.${randomUUID9()}.tmp`);try{assertLock();let disk;try{disk=await readDocument(this.path)}catch(error){return{kind:"error",error:`models.json changed on disk and is unreadable: ${formatError(error)}`}}let working=structuredClone(disk.doc),batch=this.ops.filter(op=>{let provider=this.getProvider(op.providerId);return Object.hasOwn(disk.doc.providers,op.providerId)||!provider||Object.keys(provider).length===0||hasProviderSettings(provider)});for(let op of batch)applyOp(working,op);pruneEmptyNewProviders(working,disk.doc);let settle=()=>{let settled=new Set(batch.map(op=>op.seq));this.ops=this.ops.filter(op=>!settled.has(op.seq)),this.recomputeView()};if(jsonEquals(working,disk.doc))return this.baseline=disk.doc,settle(),{kind:"saved",applied:batch.length};let candidate=`${JSON.stringify(working,null,2)}
1242
- `;await writeFile3(tempPath,candidate,{encoding:"utf8",mode:384});let validationError=(await ModelConfig.load(tempPath)).getError();if(validationError)return{kind:"invalid",error:validationError};let latest=await readDocument(this.path);if(latest.exists!==disk.exists||latest.rawText!==disk.rawText)throw new Error("models.json changed while saving; the edits were kept for retry.");return!this.backedUp&&disk.exists&&disk.rawText!==void 0&&(await writeFile3(`${this.path}.bak`,disk.rawText,{encoding:"utf8",mode:384}),this.backedUp=!0),assertLock(),await rename(tempPath,this.path),this.baseline=working,settle(),{kind:"saved",applied:batch.length}}finally{await rm2(tempPath,{force:!0}).catch(()=>{})}}};function ensureProvider(doc,providerId){let existing=Object.hasOwn(doc.providers,providerId)?doc.providers[providerId]:void 0;if(existing)return existing;let created={};return Object.defineProperty(doc.providers,providerId,{value:created,writable:!0,enumerable:!0,configurable:!0}),created}function applyOp(doc,op){switch(op.kind){case"set":{let provider=ensureProvider(doc,op.providerId);if(op.modelId===void 0){setPath(provider,op.path,op.value);return}let model=(Array.isArray(provider.models)?provider.models:[]).find(entry=>entry.id===op.modelId);model&&setPath(model,op.path,op.value);return}case"addModel":{let provider=ensureProvider(doc,op.providerId),models=Array.isArray(provider.models)?provider.models:[],index3=models.findIndex(entry=>entry.id===op.model.id),clone=structuredClone(op.model);index3>=0?models[index3]=clone:models.push(clone),provider.models=models;return}case"removeModel":{let provider=doc.providers[op.providerId],models=Array.isArray(provider?.models)?provider.models:void 0;if(!provider||!models)return;provider.models=models.filter(entry=>entry.id!==op.modelId);return}case"renameModel":{let provider=doc.providers[op.providerId],models=Array.isArray(provider?.models)?provider.models:void 0;if(!models)return;let model=models.find(entry=>entry.id===op.oldId);model&&!models.some(entry=>entry.id===op.newId)&&(model.id=op.newId);return}case"removeProvider":{delete doc.providers[op.providerId];return}}}function pruneEmptyNewProviders(working,disk){for(let[providerId,provider]of Object.entries(working.providers))Object.hasOwn(disk.providers,providerId)||isPlainObject2(provider)&&Object.keys(provider).length===0&&delete working.providers[providerId]}var RefreshCoordinator=class{constructor(runtime){this.pending=new Map,this.changed=new Set,this.revision=0,this.runtime=runtime}touch(providerId){this.pending.set(providerId,++this.revision),this.changed.add(providerId)}get touchedProviders(){return[...this.changed]}async refreshNow(providerId,signal){return this.run([providerId],signal)}async flush(signal){let providers=[...this.pending.keys()];return providers.length===0?{ok:!0,aborted:!1,errors:[]}:this.run(providers,signal)}async run(providers,signal){let revisions=new Map(providers.map(id=>[id,this.pending.get(id)])),combined=AbortSignal.any([...signal?[signal]:[],AbortSignal.timeout(REFRESH_TIMEOUT_MS)]),errors=[];try{let result2=await this.runtime.refresh({allowNetwork:!1,providers,signal:combined});for(let[providerId,error]of result2.errors)errors.push(`${providerId}: ${formatError(error)}`);let configError=this.runtime.getError();configError&&errors.push(configError);let aborted=result2.aborted||combined.aborted;aborted&&errors.length===0&&errors.push("Refresh was cancelled or timed out.");let ok=errors.length===0&&!aborted;if(ok)for(let id of providers)this.pending.get(id)===revisions.get(id)&&this.pending.delete(id);return{ok,aborted,errors}}catch(error){return errors.push(formatError(error)),{ok:!1,aborted:combined.aborted,errors}}}};async function probeProviderModels(opts){let baseUrl;try{baseUrl=new URL(opts.baseUrl)}catch{return{ok:!1,error:"Base URL is not a valid URL."}}if(baseUrl.protocol!=="http:"&&baseUrl.protocol!=="https:")return{ok:!1,error:`Unsupported protocol: ${baseUrl.protocol}`};if(baseUrl.username||baseUrl.password||baseUrl.hash)return{ok:!1,error:"Base URL must not contain credentials or a fragment."};if(opts.signal?.aborted)return{ok:!1,error:"Cancelled."};let controller=new AbortController,timeoutMs=opts.timeoutMs??PROBE_LIMITS.timeoutMs,timer=setTimeout(()=>controller.abort(),timeoutMs),onOuterAbort=()=>controller.abort();opts.signal?.addEventListener("abort",onOuterAbort,{once:!0});let doFetch=opts.fetch??globalThis.fetch,getPage=async(url,headers)=>{let response=await doFetch(url,{method:"GET",headers,signal:controller.signal});if(!response.ok){let body2=await readResponseTextBounded(response,{maxBytes:PROBE_LIMITS.maxErrorBytes,signal:controller.signal});return{ok:!1,status:response.status,error:`HTTP ${response.status}${body2?`: ${safeErrorText(body2,opts.auth).slice(0,PROBE_LIMITS.maxErrorChars)}`:""}`}}let text=await readResponseTextBounded(response,{maxBytes:PROBE_LIMITS.maxBodyBytes,overflowMessage:`Response exceeds ${PROBE_LIMITS.maxBodyBytes} bytes.`,signal:controller.signal});try{return{ok:!0,json:JSON.parse(text)}}catch{return{ok:!1,error:"Model catalog response is not JSON."}}};try{let url=modelCatalogUrl(baseUrl,opts.api),headers=buildHeaders(opts.auth,opts.api),page=await getPage(url,headers),retry=page.ok?void 0:openAIStyleRetry(baseUrl,opts.auth,opts.api,{url,headers,status:page.status});if(!page.ok&&retry){let retried=await getPage(retry.url,retry.headers);if(!retried.ok)return{ok:!1,error:safeErrorText(`${url.href} \u2192 HTTP ${page.status}; OpenAI-style retry ${retry.url.href} \u2192 ${retried.error}`,opts.auth)};({url,headers}=retry),page=retried}if(!page.ok)return{ok:!1,error:page.error};let models=parseCatalogModels(page.json);if(models===null)return{ok:!1,error:"JSON has no supported OpenAI-style data[] or models[] catalog with model ids. Add models manually if this endpoint uses another catalog format."};let json=page.json;for(let pages=1;opts.api==="anthropic-messages"&&pages<PROBE_LIMITS.maxPages&&models.length<PROBE_LIMITS.maxModels;pages++){let cursor=nextPageCursor(json);if(!cursor)break;let nextUrl=new URL(url.href);nextUrl.searchParams.set("after_id",cursor),nextUrl.searchParams.set("limit","1000");let next=await getPage(nextUrl,headers),more=next.ok?parseCatalogModels(next.json):null;if(!next.ok||!more||(models.push(...more),nextPageCursor(next.json)===cursor))break;json=next.json}let sorted=dedupeSort(models),truncated=sorted.length>PROBE_LIMITS.maxModels||declaresMorePages(json);return{ok:!0,models:sorted.slice(0,PROBE_LIMITS.maxModels),truncated}}catch(error){return controller.signal.aborted?{ok:!1,error:opts.signal?.aborted?"Cancelled.":`Timed out after ${timeoutMs}ms.`}:{ok:!1,error:safeErrorText(formatError(error),opts.auth)}}finally{clearTimeout(timer),opts.signal?.removeEventListener("abort",onOuterAbort)}}function modelCatalogUrl(base,api){let url=new URL(base.href),path10=url.pathname.replace(/\/+$/,"");return url.pathname=api==="anthropic-messages"&&!path10.endsWith("/v1")?`${path10}/v1/models`:`${path10}/models`,url}function openAIStyleRetry(base,auth,api,first){if(api!=="anthropic-messages"||![401,403,404].includes(first.status??0)||Object.keys(auth?.headers??{}).some(key=>key.toLowerCase()==="authorization"))return;let root=new URL(base.href);root.pathname=root.pathname.replace(/\/+$/,"").replace(/\/anthropic$/i,"");let url=modelCatalogUrl(root,api),headers=buildHeaders(auth,void 0);return url.href===first.url.href&&headers.get("authorization")===first.headers.get("authorization")?void 0:{url,headers}}function safeErrorText(text,auth){for(let value of[auth?.apiKey,...Object.values(auth?.headers??{})]){if(typeof value!="string"||!value)continue;text=text.replaceAll(value,"[redacted]");let token=value.replace(/^Bearer\s+/i,"");token!==value&&token&&(text=text.replaceAll(token,"[redacted]"))}return stripTerminalSequences(text)}function buildHeaders(auth,api){let headers=new Headers;headers.set("accept","application/json");let configured=auth?.headers??{};api==="anthropic-messages"&&headers.set("anthropic-version","2023-06-01");let hasAuthorization=!1;for(let[key,value]of Object.entries(configured))key.toLowerCase()==="authorization"&&(hasAuthorization=!0),typeof value=="string"?headers.set(key,value):value===null&&headers.delete(key);if(!auth?.apiKey||hasAuthorization)return headers;let lower=name=>Object.keys(configured).some(key=>key.toLowerCase()===name);return api==="anthropic-messages"?(auth.apiKey.includes("sk-ant-oat")?headers.set("authorization",`Bearer ${auth.apiKey}`):(lower("x-api-key")||headers.set("x-api-key",auth.apiKey),lower("anthropic-version")||headers.set("anthropic-version","2023-06-01")),headers):api==="google-generative-ai"||api==="google-vertex"?(lower("x-goog-api-key")||headers.set("x-goog-api-key",auth.apiKey),headers):(headers.set("authorization",`Bearer ${auth.apiKey}`),headers)}function declaresMorePages(json){return typeof json=="object"&&json!==null&&"has_more"in json&&json.has_more===!0}function nextPageCursor(json){if(!declaresMorePages(json))return;let lastId=json.last_id;return typeof lastId=="string"&&lastId?lastId:void 0}var CONTEXT_WINDOW_FIELDS=["context_window","context_window.tokens","context_length","top_provider.context_length","max_input_tokens","max_context_length","max_model_len","context_size","metadata.context_length"],MAX_TOKENS_FIELDS=["max_output_tokens","max_completion_tokens","top_provider.max_completion_tokens","max_tokens","max_output_length"],INPUT_MODALITY_FIELDS=["input_modalities","architecture.input_modalities","modalities.input"],IMAGE_FLAG_FIELDS=["supports_vision","enable_vision_input","capabilities.vision","capabilities.image_input.supported"],REASONING_FLAG_FIELDS=["reasoning","supports_reasoning","enable_reason","capabilities.reasoning","capabilities.thinking.supported"],REASONING_LEVEL_FIELDS=["effort.supported_levels","reasoning_effort_support_list"],CAPABILITY_LIST_FIELDS=["supported_parameters","tags","features","supported_features","metadata.tags"];function fieldAt(record,path10){let value=record;for(let key of path10.split(".")){if(!value||typeof value!="object"||Array.isArray(value))return;value=value[key]}return value}function listAt(record,path10){let value=fieldAt(record,path10);return Array.isArray(value)?value.filter(entry=>typeof entry=="string").map(entry=>entry.toLowerCase()):[]}function declaredLimit(record,paths){let limit;for(let path10 of paths){let value=fieldAt(record,path10);typeof value=="number"&&Number.isSafeInteger(value)&&value>0&&(limit=Math.min(limit??value,value))}return limit}function declaresImageInput(record){return INPUT_MODALITY_FIELDS.some(path10=>listAt(record,path10).includes("image"))||IMAGE_FLAG_FIELDS.some(path10=>fieldAt(record,path10)===!0)||CAPABILITY_LIST_FIELDS.some(path10=>listAt(record,path10).includes("vision"))}function declaresReasoning(record){return REASONING_FLAG_FIELDS.some(path10=>fieldAt(record,path10)===!0)||REASONING_LEVEL_FIELDS.some(path10=>listAt(record,path10).length>0)||CAPABILITY_LIST_FIELDS.some(path10=>listAt(record,path10).includes("reasoning"))}function parseCatalogModels(json){if(!json||typeof json!="object")return null;let payload=json,data=Array.isArray(json)?json:Array.isArray(payload.models)?payload.models:payload.data;if(!Array.isArray(data))return null;let models=[];for(let item of data){if(!item||typeof item!="object")continue;let record=item,id=(typeof record.id=="string"?record.id.trim():"")||(typeof record.slug=="string"?record.slug.trim():"");if(!id)continue;let displayName=typeof record.name=="string"&&record.name.trim()?record.name.trim():void 0,anthropicName=typeof record.display_name=="string"&&record.display_name.trim()?record.display_name.trim():typeof record.displayName=="string"?record.displayName.trim():void 0,name=(displayName??anthropicName)!==id?displayName??anthropicName:void 0,model=name?{id,name}:{id},contextWindow=declaredLimit(record,CONTEXT_WINDOW_FIELDS);contextWindow&&(model.contextWindow=contextWindow);let maxTokens=declaredLimit(record,MAX_TOKENS_FIELDS);maxTokens&&(model.maxTokens=maxTokens),declaresImageInput(record)&&(model.input=["text","image"]),declaresReasoning(record)&&(model.reasoning=!0),models.push(model)}return data.length>0&&models.length===0?null:models}function dedupeSort(models){let map=new Map;for(let model of models)map.has(model.id)||map.set(model.id,model);return[...map.values()].sort((a,b)=>a.id.localeCompare(b.id))}async function fetchProviderModels(options,signal){let{store,refresher,runtime,providerId}=options,deadline=AbortSignal.any([signal,AbortSignal.timeout(PROBE_LIMITS.timeoutMs)]);try{await raceWithAbortSignal(store.flush(),deadline);let unsaved=store.getPendingError(providerId);if(unsaved)return{ok:!1,error:`Save the provider changes before fetching: ${unsaved}`};let provider=store.getProvider(providerId),settings=effectiveModelSettings(providerId,provider);if(!settings.baseUrl)return{ok:!1,error:"Set a baseUrl under API Auth first."};let sync=await refresher.refreshNow(providerId,deadline);if(deadline.throwIfAborted(),!sync.ok)return{ok:!1,error:`The provider did not reload: ${sync.errors.join("; ")}`};let resolved=await raceWithAbortSignal(runtime.getAuth(providerId,{signal:deadline}),deadline),configured=provider?.apiKey!==void 0||provider?.authHeader===!0||Object.keys(provider?.headers??{}).length>0||runtime.getProviderAuthStatus(providerId).configured;if(!resolved&&configured)return{ok:!1,error:"Configured credentials or headers did not resolve; check the provider authentication."};let result2=await probeProviderModels({baseUrl:resolved?.auth.baseUrl??settings.baseUrl,auth:resolved?.auth,api:settings.api,signal:deadline});return deadline.throwIfAborted(),result2}catch(error){return deadline.aborted?{ok:!1,error:signal.aborted?"Cancelled.":"Timed out while preparing or fetching the model catalog."}:{ok:!1,error:formatError(error)}}}async function importProviderModels(options,models,signal){let{store,refresher,providerId}=options;await raceWithAbortSignal(store.flush(),signal);let unsaved=store.getPendingError(providerId);if(unsaved)return unsaved;let settings=effectiveModelSettings(providerId,store.getProvider(providerId));if(!settings.api||!settings.baseUrl)return"Set baseUrl and API Type under API Auth before importing models.";let existing=new Set(store.getModels(providerId).map(model=>model.id)),fresh=models.filter(model=>existing.has(model.id)?!1:(existing.add(model.id),!0));if(fresh.length===0)return;signal.throwIfAborted(),options.edits.addModels(fresh),await store.flush();let saveError=store.getPendingError(providerId);if(saveError)return saveError;let outcome=await refresher.refreshNow(providerId,signal);if(!outcome.ok)return`Models were saved, but refresh failed: ${outcome.errors.join("; ")}`}var ProviderEdits=class{constructor(store,providerId,refresher,refresh){this.renaming=!1,this.store=store,this.providerId=providerId,this.refresher=refresher,this.refresh=refresh}changed(){(!this.store.isDraftProvider(this.providerId)||hasProviderSettings(this.store.getProvider(this.providerId)))&&this.refresher.touch(this.providerId),this.refresh()}setProviderField(path10,value){this.store.setProviderField(this.providerId,path10,value),this.changed()}removeProvider(){this.store.removeProvider(this.providerId),this.changed()}removeModel(modelId){this.store.removeModel(this.providerId,modelId),this.changed()}batch(apply){this.store.batch(apply)}addModels(models){this.store.batch(()=>{for(let model of models)this.store.addModel(this.providerId,model)}),models.length>0&&this.changed()}draft(){let fields={};return{isDraft:!0,read:()=>fields,setField:(path10,value)=>{setPath(fields,path10,value),this.refresh()}}}commitDraft(draft){let fields=draft.read(),id=(fields.id??"").trim();if(!id)return"Model id is required.";if(this.store.getModel(this.providerId,id))return`Model "${id}" already exists.`;let settings=effectiveModelSettings(this.providerId,this.store.getProvider(this.providerId),fields);if(!settings.api)return"Cannot resolve an api \u2014 set one under Model-Specific API or the provider's API Auth.";if(!settings.baseUrl)return"Cannot resolve a baseUrl \u2014 set one under Model-Specific API or the provider's API Auth.";this.store.addModel(this.providerId,{...fields,id}),this.changed()}model(modelId,onRename){let id=modelId,snapshot;return{isDraft:!1,read:()=>snapshot??this.store.getModel(this.providerId,id)??{id},setField:(path10,value)=>{this.store.setModelField(this.providerId,id,path10,value),this.changed()},rename:async newId=>{let oldId=id;snapshot=this.store.getModel(this.providerId,id),this.renaming=!0;try{let error=await this.store.renameModel(this.providerId,id,newId);if(error)return error;id=newId,this.changed();return}finally{snapshot=void 0,this.renaming=!1,onRename(oldId,id)}}}}};var CURSOR2="\u203A",PASTE_START="\x1B[200~",PASTE_END="\x1B[201~",ValueEditor=class{constructor(callbacks){this.input=new Input({prompt:""}),this.input.onSubmit=callbacks.onCommit,this.input.onEscape=callbacks.onCancel}beginOverwrite(firstData){this.input.setValue(""),firstData&&this.input.handleInput(firstData)}reset(value){this.beginTweak(value)}beginTweak(current){this.input.setValue(""),this.input.handleInput(PASTE_START+current+PASTE_END),this.input.setValue(current)}get value(){return this.input.getValue()}handleInput(data){this.input.handleInput(data)}renderLine(width){return this.input.render(Math.max(1,width))[0]??""}get focused(){return this.input.focused}set focused(value){this.input.focused=value}};function renderKeyValueLine(theme2,opts){let lit2=opts.active&&opts.paneFocused,marker=lit2?theme2.fg("accent",`${CURSOR2} `):" ",keyPrefix=opts.keyLabel===void 0?"":`${opts.keyLabel}: `,keyColor=lit2?"accent":"text",note=opts.note?theme2.fg("dim",` ${opts.note}`):"";if(opts.editing){let body2=opts.editing.renderLine(Math.max(1,opts.width-visibleWidth(marker)-visibleWidth(keyPrefix)));return truncateToWidth(marker+theme2.fg(keyColor,keyPrefix)+theme2.fg(keyColor,body2)+note,opts.width)}let valueColor=opts.unset?"dim":keyColor,line=marker+theme2.fg(keyColor,keyPrefix)+theme2.fg(valueColor,opts.valueText??"")+note;return truncateToWidth(line,opts.width)}function renderPlainLine(theme2,text,opts){let lit2=(opts.active??!1)&&(opts.paneFocused??!1),marker=lit2?theme2.fg("accent",`${CURSOR2} `):" ",check=opts.checked===void 0?"":opts.checked?"[x] ":"[ ] ",color=opts.dim?"dim":lit2?"accent":"text",note=opts.note?theme2.fg("dim",` ${opts.note}`):"",line=marker+theme2.fg(color,check+text)+note;return truncateToWidth(line,opts.width)}function renderInfoLine(theme2,text,width){return truncateToWidth(theme2.fg("dim",text),width)}function windowLines(theme2,lines,height,scroll,indicator){let top=Math.max(0,Math.min(scroll?.top??0,lines.length)),bottom=Math.max(0,Math.min(scroll?.bottom??0,lines.length-top)),head=lines.slice(0,top),tail=bottom>0?lines.slice(lines.length-bottom):[],middle=lines.slice(top,lines.length-bottom),cursor=Math.max(0,Math.min((scroll?.cursor??0)-top,Math.max(0,middle.length-1))),padToHeight=rows=>{let out=rows.slice(0,height);for(;out.length<height;)out.push("");return out},avail=height-head.length-tail.length;if(middle.length<=avail)return padToHeight([...head,...middle,...tail]);let slots=Math.max(1,avail-1),start=Math.max(0,Math.min(cursor-Math.floor(slots/2),middle.length-slots)),note=indicator?.(cursor+1,middle.length)??theme2.fg("dim",` (${cursor+1}/${middle.length})`);return padToHeight([...head,...middle.slice(start,start+slots),note,...tail])}function isPrintableInput(data){if(!data)return!1;if(data.startsWith(PASTE_START)||decodeKittyPrintable(data)!==void 0)return!0;if(data.includes("\x1B")||data.includes("\r")||data.includes(`
1243
- `))return!1;for(let char of data){let code=char.codePointAt(0);if(code<32||code===127)return!1}return!0}function truncateMiddle2(text,maxWidth){if(visibleWidth(text)<=maxWidth)return text;if(maxWidth<=4)return truncateToWidth(text,maxWidth);let headWidth2=Math.ceil((maxWidth-1)/2),tailWidth=maxWidth-1-headWidth2,head="",headUsed=0;for(let char of text){let charWidth=visibleWidth(char);if(headUsed+charWidth>headWidth2)break;head+=char,headUsed+=charWidth}let tail="",tailUsed=0;for(let char of[...text].reverse()){let charWidth=visibleWidth(char);if(tailUsed+charWidth>tailWidth)break;tail=char+tail,tailUsed+=charWidth}return`${head}\u2026${tail}`}var InfoPane=class{constructor(host,lines,onConfirm){this.focused=!1,this.host=host,this.lines=lines,this.onConfirm=onConfirm}render(width){return this.focused&&this.onConfirm?this.lines.map((line,index3)=>index3>0?renderInfoLine(this.host.theme,line,width):truncateToWidth(this.host.theme.fg("accent",`${CURSOR2} `)+this.host.theme.fg("text",line),width)):this.lines.map(line=>renderInfoLine(this.host.theme,line,width))}handleInput(data){if(this.host.keybindings.matches(data,"tui.select.cancel")){this.host.popPane();return}this.onConfirm&&this.host.keybindings.matches(data,"tui.select.confirm")&&this.onConfirm()}setFocused(focused){this.focused=focused}hints(){let hints=[];return this.onConfirm&&hints.push(keyHint("tui.select.confirm","proceed")),hints.push(keyHint("tui.select.cancel","back")),hints.join(" ")}},ConfirmPane=class{constructor(host,message,actionLabel,action){this.crumb="Confirm",this.index=1,this.focused=!1,this.host=host,this.message=message,this.actionLabel=actionLabel,this.action=action}render(width){let theme2=this.host.theme;return[truncateToWidth(theme2.fg("warning",this.message),width),renderPlainLine(theme2,this.actionLabel,{active:this.index===0,paneFocused:this.focused,width}),renderPlainLine(theme2,"Cancel",{active:this.index===1,paneFocused:this.focused,width})]}handleInput(data){let kb=this.host.keybindings;if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down")){this.index=this.index===0?1:0,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}kb.matches(data,"tui.select.confirm")&&(this.index===0?this.action():this.host.popPane())}setFocused(focused){this.focused=focused}hints(){return[keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","cancel")].join(" ")}};function moveSelection(keys,data,index3,count){let delta=keys.matches(data,"tui.select.up")?-1:keys.matches(data,"tui.select.down")?1:void 0;return delta===void 0?void 0:count===0?0:(index3+delta+count)%count}var ChoicePane=class{constructor(host,crumb,options){this.focused=!1,this.host=host,this.crumb=crumb,this.options=options,this.index=Math.max(0,options.choices().findIndex(choice=>choice.value===options.current()))}render(width){let lines=this.options.choices().map((choice,index3)=>renderPlainLine(this.host.theme,`${choice.value===this.options.current()?"\u25CF":"\u25CB"} ${choice.label}`,{active:index3===this.index,paneFocused:this.focused,dim:choice.dim,width}));return this.error&&lines.push(renderInfoLine(this.host.theme,this.error,width)),lines}scrollWindow(){return{cursor:this.index,bottom:this.error?1:0}}handleInput(data){let choices=this.options.choices(),next=moveSelection(this.host.keybindings,data,this.index,choices.length);if(next!==void 0)this.index=next,this.host.refresh();else if(this.host.keybindings.matches(data,"tui.select.cancel"))this.host.popPane();else if(this.host.keybindings.matches(data,"tui.select.confirm")||this.host.keybindings.matches(data,"app.list.toggle")){let choice=choices[this.index];if(!choice)return;this.error=this.options.choose(choice.value),this.error?this.host.refresh():this.host.popPane()}}setFocused(focused){this.focused=focused}hints(){return[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","select"),keyHint("tui.select.cancel","back")].join(" ")}},InlineEdit=class{constructor(refresh){this.refresh=refresh}get editing(){return this.active!==void 0}editor(key){return this.active?.key===key?this.active.editor:void 0}setFocused(focused){this.active&&(this.active.editor.focused=focused)}begin(key,current,mode,focused,commit,firstData){let editor=new ValueEditor({onCommit:value=>{this.error=commit(value),this.error||(this.active=void 0),this.refresh()},onCancel:()=>{this.active=void 0,this.error=void 0,this.refresh()}});this.active={key,editor},editor.focused=focused,mode==="overwrite"?editor.beginOverwrite(firstData):editor.beginTweak(current),this.refresh()}handleInput(data,keys){return this.active?(!keys.matches(data,"tui.select.up")&&!keys.matches(data,"tui.select.down")&&this.active.editor.handleInput(data),this.refresh(),!0):!1}};function formatTokens2(count){return count<1e3?count.toString():count<1e4?`${(count/1e3).toFixed(1)}k`:count<1e6?`${Math.round(count/1e3)}k`:count<1e7?`${(count/1e6).toFixed(1)}M`:`${Math.round(count/1e6)}M`}function metadataNote(model){let parts=[model.contextWindow?`${formatTokens2(model.contextWindow)} ctx`:"",model.maxTokens?`${formatTokens2(model.maxTokens)} out`:"",model.input?.includes("image")?"img":"",model.reasoning?"think":""].filter(Boolean);return parts.length>0?`\xB7 ${parts.join(" \xB7 ")}`:void 0}var FetchModelsPane=class{constructor(host){this.state={type:"idle"},this.query="",this.index=0,this.checked=new Set,this.focused=!1,this.disposed=!1,this.host=host,this.search=new ValueEditor({onCommit:()=>this.importChecked(),onCancel:()=>this.exitResults()})}start(){if(this.disposed||this.state.type==="loading"||this.state.type==="importing"||!this.catalogUrl())return;let controller=new AbortController;this.state={type:"loading",controller},this.host.refresh(),this.host.runFetch(controller.signal).then(result2=>{if(!(this.disposed||controller.signal.aborted||this.state.type!=="loading"||this.state.controller!==controller)){if(result2.ok)this.state={type:"results",catalog:result2},this.checked=new Set,this.query="",this.search.reset(""),this.index=0,this.search.focused=this.focused,this.host.setFetchStatus(`\xB7 ${result2.models.length} models`);else{if(result2.error==="Cancelled.")return;this.state={type:"error",message:result2.error},this.host.setFetchStatus("\xB7 failed")}this.host.refresh()}}).catch(error=>{this.disposed||controller.signal.aborted||this.state.type!=="loading"||this.state.controller!==controller||(this.state={type:"error",message:error instanceof Error?error.message:String(error)},this.host.setFetchStatus("\xB7 failed"),this.host.refresh())})}existingIds(){return new Set(this.host.store.getModels(this.host.providerId).map(model=>model.id))}catalogUrl(){let baseUrl=this.host.store.getProvider(this.host.providerId)?.baseUrl;try{return baseUrl?modelCatalogUrl(new URL(baseUrl),this.host.effectiveApi()).href:void 0}catch{return}}rows(){if(this.state.type!=="results"&&this.state.type!=="importing")return[];let existing=this.existingIds(),rows=this.state.catalog.models.map(model=>({model,added:existing.has(model.id)})),query=this.query.trim().toLowerCase();return query?rows.filter(row=>row.model.id.toLowerCase().includes(query)||row.model.name?.toLowerCase().includes(query)):rows}render(width){let theme2=this.host.theme,catalogUrl=this.catalogUrl();switch(this.state.type){case"idle":return catalogUrl?[renderPlainLine(theme2,"Fetch Models",{active:!0,paneFocused:this.focused,note:`\xB7 from ${truncateMiddle2(catalogUrl,Math.max(10,width-22))}`,width})]:[renderInfoLine(theme2,"Set a baseUrl under API Auth first.",width)];case"loading":return[renderInfoLine(theme2,`Fetching ${catalogUrl??""} \u2026`,width),renderInfoLine(theme2,"Esc cancels the request.",width)];case"error":return[theme2.fg("error",truncate3(this.state.message,Math.max(10,width-2))),renderInfoLine(theme2,"Enter retries; Esc goes back.",width)];case"importing":case"results":{let lines=[];this.state.catalog.truncated&&lines.push(renderInfoLine(theme2,"The catalog was truncated; refine manually if a model is missing.",width)),lines.push(this.search.renderLine(width));let rows=this.rows();for(let[rowIndex,row]of rows.entries()){if(row.added){lines.push(renderPlainLine(theme2,row.model.id,{active:rowIndex===this.index,paneFocused:this.focused,dim:!0,note:"\xB7 Added",width}));continue}lines.push(renderPlainLine(theme2,row.model.name?`${row.model.id} \xB7 ${row.model.name}`:row.model.id,{checked:this.checked.has(row.model.id),active:rowIndex===this.index,paneFocused:this.focused,note:metadataNote(row.model),width}))}rows.length===0&&lines.push(renderInfoLine(theme2,"No matching models.",width));let addedCount=rows.filter(row=>row.added).length;return lines.push(renderInfoLine(theme2,`${this.checked.size} selected \xB7 ${rows.length} shown${addedCount?` \xB7 ${addedCount} already added`:""}`,width)),this.state.type==="importing"&&lines.push(renderInfoLine(theme2,"Importing\u2026",width)),this.state.type==="results"&&this.state.error&&lines.push(theme2.fg("error",truncate3(this.state.error,Math.max(10,width-2)))),lines}}}scrollWindow(){if(this.state.type!=="results"&&this.state.type!=="importing")return{};let top=(this.state.catalog.truncated?1:0)+1,bottom=1+(this.state.type==="importing"||this.state.error?1:0);return{top,bottom,cursor:top+this.index}}handleInput(data){let kb=this.host.keybindings;switch(this.state.type){case"idle":if(kb.matches(data,"tui.select.confirm")){this.start();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}return;case"loading":if(kb.matches(data,"tui.select.cancel")){this.state.controller.abort(),this.state={type:"idle"},this.host.refresh();return}return;case"error":if(kb.matches(data,"tui.select.confirm")){this.start();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}return;case"importing":case"results":this.handleResultsInput(data);return}}handleResultsInput(data){let kb=this.host.keybindings,rows=this.rows(),next=moveSelection(kb,data,this.index,rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"app.list.toggle")){let row=rows[this.index];if(!row||row.added||this.state.type==="importing")return;this.checked.has(row.model.id)?this.checked.delete(row.model.id):this.checked.add(row.model.id),this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.exitResults();return}if(kb.matches(data,"tui.select.confirm")){this.importChecked();return}let before=this.query;this.search.handleInput(data),this.query=this.search.value,this.query!==before&&(this.index=0),this.host.refresh()}importChecked(){if(this.state.type!=="results")return;let chosen;if(this.checked.size===0){let row=this.rows()[this.index];if(!row||row.added)return;chosen=[row.model]}else chosen=this.state.catalog.models.filter(model=>this.checked.has(model.id));let controller=new AbortController,catalog=this.state.catalog;this.state={type:"importing",catalog,controller},this.host.refresh(),this.host.importModels(chosen,controller.signal).then(error=>{if(!(this.disposed||controller.signal.aborted||this.state.type!=="importing"||this.state.controller!==controller)){if(error)return this.state={type:"results",catalog,error},this.host.setFetchStatus("\xB7 import failed"),this.host.refresh();this.host.setFetchStatus(`\xB7 ${this.host.store.getModels(this.host.providerId).length} models`),this.state={type:"idle"},this.host.popPane()}}).catch(error=>{this.disposed||controller.signal.aborted||this.state.type!=="importing"||this.state.controller!==controller||(this.state={type:"results",catalog,error:error instanceof Error?error.message:String(error)},this.host.refresh())})}exitResults(){(this.state.type==="loading"||this.state.type==="importing")&&this.state.controller.abort(),this.state={type:"idle"},this.checked=new Set,this.host.popPane()}setFocused(focused){this.focused=focused,this.search.focused=focused&&(this.state.type==="results"||this.state.type==="importing")}isEditing(){return this.state.type==="results"||this.state.type==="importing"}dispose(){this.disposed=!0,(this.state.type==="loading"||this.state.type==="importing")&&this.state.controller.abort()}hints(){switch(this.state.type){case"loading":return keyHint("tui.select.cancel","cancel request");case"importing":case"results":return[rawKeyHint("type","filter"),keyHint("app.list.toggle","check"),keyHint("tui.select.confirm","import"),keyHint("tui.select.cancel","discard")].join(" ");case"error":return[keyHint("tui.select.confirm","retry"),keyHint("tui.select.cancel","back")].join(" ");default:return this.catalogUrl()?[keyHint("tui.select.confirm","fetch"),keyHint("tui.select.cancel","back")].join(" "):keyHint("tui.select.cancel","back")}}};function formatContext(model){let ctx=model.contextWindow>=1e3?`${Math.round(model.contextWindow/1024)}k`:String(model.contextWindow);return`${model.api} \xB7 ${ctx} ctx${model.reasoning?" \xB7 reasoning":""}`}var BuiltinCandidatesPane=class{constructor(host,model){this.crumb="Use Built-in Data",this.index=0,this.focused=!1,this.host=host,this.model=model,this.query=this.model.read().id??"",this.search=new ValueEditor({onCommit:()=>this.pickCurrent(),onCancel:()=>this.host.popPane()}),this.search.reset(this.query)}candidates(){return matchBuiltinModels(this.query,this.host.effectiveApi(this.model.read()))}render(width){let theme2=this.host.theme,lines=[this.search.renderLine(width)],matches=this.candidates();matches.length===0&&lines.push(renderInfoLine(theme2,"No builtin candidates \u2014 keep configuring manually.",width));for(let[rowIndex,match2]of matches.entries()){let{providerId,model}=match2.entry,label=`${providerId} / ${model.id}`,note=(match2.tier==="exact"?"exact \xB7 ":"")+`${model.name!==model.id?`${model.name} \xB7 `:""}${formatContext(model)}`;lines.push(renderPlainLine(theme2,label,{active:rowIndex===this.index,paneFocused:this.focused,note,width}))}return lines.push(renderInfoLine(theme2,"Candidates are a reference only; the configured id is never rewritten.",width)),lines}scrollWindow(){return{top:1,bottom:1,cursor:1+this.index}}pickCurrent(){let entry=this.candidates()[this.index]?.entry;entry&&this.host.pushPane(new BuiltinPreviewPane(this.host,this.model,entry))}handleInput(data){let kb=this.host.keybindings,count=this.candidates().length,next=moveSelection(kb,data,this.index,count);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.pickCurrent();return}let before=this.query;this.search.handleInput(data),this.query=this.search.value,this.query!==before&&(this.index=0),this.host.refresh()}setFocused(focused){this.focused=focused,this.search.focused=focused}isEditing(){return!0}hints(){return[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","preview"),keyHint("tui.select.cancel","back")].join(" ")}},BuiltinPreviewPane=class{constructor(host,model,reference){this.crumb="Use Built-in Data \xB7 preview",this.index=0,this.focused=!1,this.host=host,this.model=model,this.reference=reference;let current=model.read();this.snapshot=structuredClone(current),this.snapshotApi=host.effectiveApi(current),this.changes=computeFieldChanges(current,reference.model,host.effectiveApi(current)),this.checked=this.changes.map(change=>change.checked&&change.applicable)}rowCount(){return this.changes.length+1}render(width){let theme2=this.host.theme,lines=[renderInfoLine(theme2,`reference: ${this.reference.providerId} / ${this.reference.model.id}`,width)];for(let[rowIndex,change]of this.changes.entries()){let active=rowIndex===this.index,expandable=change.referenceDetails!==void 0,note=change.applicable?void 0:"\xB7 view only";if(lines.push(renderPlainLine(theme2,`${change.field}: ${change.currentText} \u2192 ${change.referenceText}`,{checked:change.applicable?this.checked[rowIndex]:void 0,active,paneFocused:this.focused,note,width})),this.expanded===rowIndex&&expandable){for(let detail of change.referenceDetails)lines.push(renderInfoLine(theme2,` ${detail}`,width));change.referenceHasTiers&&lines.push(renderInfoLine(theme2," reference has cost tiers \u2014 tiers are never imported.",width))}}return lines.push(renderPlainLine(theme2,"Apply Selected Fields",{active:this.index===this.changes.length,paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){let cursor=1+this.index;if(this.expanded!==void 0&&this.expanded<this.index){let change=this.changes[this.expanded];change.referenceDetails&&(cursor+=change.referenceDetails.length+(change.referenceHasTiers?1:0))}return{top:1,bottom:this.error?1:0,cursor}}handleInput(data){let kb=this.host.keybindings,next=moveSelection(kb,data,this.index,this.rowCount());if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.list.toggle")){let change=this.changes[this.index];if(!change)return;if(!change.applicable){this.expanded=this.expanded===this.index?void 0:this.index,this.host.refresh();return}this.checked[this.index]=!this.checked[this.index],this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){if(this.index===this.changes.length){this.apply();return}let change=this.changes[this.index];change.referenceDetails?this.expanded=this.expanded===this.index?void 0:this.index:change.applicable&&(this.checked[this.index]=!this.checked[this.index]),this.host.refresh();return}}apply(){let current=this.model.read();if(this.host.effectiveApi(current)!==this.snapshotApi){this.error="The API changed since this preview opened; reopen to continue.",this.host.refresh();return}if(!current.id||!jsonEquals(current,this.snapshot)){this.error="The model changed since this preview opened; reopen to continue.",this.host.refresh();return}let chosen=this.changes.filter((_,rowIndex)=>this.checked[rowIndex]&&this.changes[rowIndex].applicable);if(chosen.length===0){this.host.popPane();return}this.host.edits.batch(()=>{for(let change of chosen)for(let patch of change.patches)this.model.setField(patch.path,patch.value)}),this.host.notify(`Applied ${chosen.length} field${chosen.length===1?"":"s"} from ${this.reference.providerId} / ${this.reference.model.id}.`,"info"),this.host.popPane(),this.host.popPane()}setFocused(focused){this.focused=focused}hints(){return[keyHint("app.list.toggle","check"),keyHint("tui.select.confirm","details / apply"),keyHint("tui.select.cancel","back")].join(" ")}};var THINKING_VARIABLES=["thinking.enabled","thinking.effort","thinking.budget"],SESSION_AFFINITY=["openai","openai-nosession","openrouter"],OPENAI_COMPLETIONS_FIELDS=[{key:"supportsStore",kind:"boolean",note:"Accepts the `store` parameter"},{key:"supportsDeveloperRole",kind:"boolean",note:"Accepts `developer` role messages"},{key:"supportsReasoningEffort",kind:"boolean",note:"Accepts `reasoning_effort`"},{key:"supportsUsageInStreaming",kind:"boolean",note:"Streams usage chunks"},{key:"supportsFinishReason",kind:"boolean",note:"Reports finish reasons"},{key:"maxTokensField",kind:"enum",options:["max_completion_tokens","max_tokens"],note:"Token limit field name"},{key:"requiresToolResultName",kind:"boolean",note:"Tool results need a `name`"},{key:"requiresAssistantAfterToolResult",kind:"boolean",note:"Needs assistant message after tool results"},{key:"requiresThinkingAsText",kind:"boolean",note:"Thinking must be plain text"},{key:"requiresReasoningContentOnAssistantMessages",kind:"boolean",note:"Assistant messages must carry reasoning content"},{key:"thinkingFormat",kind:"enum",options:["openai","openrouter","together","baseten","deepseek","zai","qwen","chat-template","qwen-chat-template","string-thinking","ant-ling"],note:"Reasoning payload format"},{key:"chatTemplateKwargs",kind:"stringMap",note:"Extra chat-template kwargs (open dictionary)"},{key:"chatTemplateArgs",kind:"stringMap",note:"Extra chat-template args (open dictionary)"},{key:"cacheControlFormat",kind:"enum",options:["anthropic"],note:"Cache-control payload format"},{key:"openRouterRouting",kind:"json",note:"OpenRouter routing preferences object"},{key:"vercelGatewayRouting",kind:"json",note:"Vercel AI Gateway routing object"},{key:"supportsOpenAIGrammarTools",kind:"boolean",note:"Grammar-constrained tool calls"},{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"},{key:"sendSessionAffinityHeaders",kind:"boolean",note:"Send session affinity headers"},{key:"supportsMidConvoSystemMessages",kind:"boolean",note:"Accepts mid-conversation system messages"},{key:"supportsMidConvoToolAdditions",kind:"boolean",note:"System messages can add tools mid-conversation"},{key:"sessionAffinityFormat",kind:"enum",options:SESSION_AFFINITY,note:"Affinity header format"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"vllmPriority",kind:"number",note:"vLLM scheduling priority"},{key:"zaiToolStream",kind:"boolean",note:"Z.AI streaming tool calls"},{key:"supportsThinkingTokenBudget",kind:"boolean",note:"Enable the thinking-token budget alias"},{key:"thinkingTokenBudgetField",kind:"enum",options:["thinking_token_budget","thinking_budget","thinking_budget_tokens"],note:"Thinking budget field"}],OPENAI_RESPONSES_FIELDS=[{key:"supportsDeveloperRole",kind:"boolean",note:"Accepts `developer` role messages"},{key:"sessionAffinityFormat",kind:"enum",options:SESSION_AFFINITY,note:"Affinity header format"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"},{key:"supportsOpenAIGrammarTools",kind:"boolean",note:"Grammar-constrained tool calls"},{key:"supportsAdditionalTools",kind:"boolean",note:"Accepts additional hosted tools"},{key:"supportsToolSearch",kind:"boolean",note:"Tool search support"},{key:"supportsMaxOutputTokens",kind:"boolean",note:"Accepts `max_output_tokens`"},{key:"supportsExplicitPromptCacheMode",kind:"boolean",note:"Explicit prompt caching"}],ANTHROPIC_MESSAGES_FIELDS=[{key:"supportsEagerToolInputStreaming",kind:"boolean",note:"Streams tool input eagerly"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"sendSessionAffinityHeaders",kind:"boolean",note:"Send session affinity headers"},{key:"supportsCacheControlOnTools",kind:"boolean",note:"Cache control on tool definitions"},{key:"supportsTemperature",kind:"boolean",note:"Accepts `temperature`"},{key:"forceAdaptiveThinking",kind:"boolean",note:"Force adaptive thinking mode"},{key:"allowEmptySignature",kind:"boolean",note:"Tolerate empty thinking signatures"},{key:"supportsStrictTools",kind:"boolean",note:"Strict tool schemas"},{key:"supportsMidConvoEffort",kind:"boolean",note:"Effort changes mid-conversation"},{key:"supportsMidConvoSystemMessages",kind:"boolean",note:"Accepts mid-conversation system messages"},{key:"supportsMidConvoToolChanges",kind:"boolean",note:"Accepts mid-conversation tool changes"},{key:"allowedFallbackModels",kind:"json",note:"Server-side refusal fallback models"}],BEDROCK_FIELDS=[{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"}];function compatFieldsForApi(api){switch(api){case"openai-completions":return OPENAI_COMPLETIONS_FIELDS;case"openai-responses":return OPENAI_RESPONSES_FIELDS;case"azure-openai-responses":return OPENAI_RESPONSES_FIELDS.filter(field2=>["supportsDeveloperRole","supportsStrictMode","supportsOpenAIGrammarTools"].includes(field2.key));case"openai-codex-responses":return OPENAI_RESPONSES_FIELDS.filter(field2=>["supportsStrictMode","supportsOpenAIGrammarTools","supportsAdditionalTools","supportsToolSearch"].includes(field2.key));case"anthropic-messages":return ANTHROPIC_MESSAGES_FIELDS;case"bedrock-converse-stream":return BEDROCK_FIELDS;default:return[]}}function compatFieldFor(api,key){return compatFieldsForApi(api).find(field2=>field2.key===key)}var completionsCompatValidator=Compile(OpenAICompletionsCompatSchema);function validateCompletionsCompat(value){if(!completionsCompatValidator.Check(value))return completionsCompatValidator.Errors(value).slice(0,5).map(error=>{let path10=error.instancePath.replace(/^\//,"").replace(/\//g,"."),required=error.keyword==="required"?error.params.requiredProperties?.[0]:void 0;return`${required?path10?`${path10}.${required}`:required:path10||"root"}: ${error.message}`}).join("; ")}function validateJsonCompatValue(key,text){let value;try{value=JSON.parse(text)}catch{return"Value is not valid JSON."}return validateCompletionsCompat({[key]:value})}function validateChatTemplateKwarg(value){if(value!==null&&typeof value=="object"&&!Array.isArray(value)&&!Object.keys(value).every(key=>key==="$var"||key==="omitWhenOff"))return'Only "$var" and "omitWhenOff" are allowed.';let error=validateCompletionsCompat({chatTemplateKwargs:{value}});return error?`Value must be a scalar or valid $var reference: ${error}`:void 0}function compatObject(handle){let compat=handle.read().compat;return typeof compat=="object"&&compat!==null&&!Array.isArray(compat)?compat:{}}function scalarText(value){return value===null?"null":typeof value=="string"||typeof value=="number"||typeof value=="boolean"?String(value):JSON.stringify(value)??String(value)}var DICT_VALUE_KINDS=["string","number","boolean","null","$var"],VAR_OPTIONS=THINKING_VARIABLES,DictPane=class{constructor(host,model,dictKey){this.index=0,this.mode={type:"list"},this.focused=!1,this.host=host,this.model=model,this.dictKey=dictKey,this.crumb=`compat \xB7 ${dictKey}`}dict(){let value=compatObject(this.model)[this.dictKey];return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:{}}entries(){return Object.entries(this.dict())}render(width){let theme2=this.host.theme,lines=[renderInfoLine(theme2,"free-form keys; values: string \xB7 number \xB7 boolean \xB7 null \xB7 $var",width)];if(this.mode.type!=="list")return lines.push(...this.renderMode(width)),this.error&&lines.push(renderInfoLine(theme2,this.error,width)),lines;let entries=this.entries();for(let[rowIndex,[key,value]]of entries.entries()){let active=rowIndex===this.index;lines.push(renderKeyValueLine(theme2,{keyLabel:key,valueText:scalarText(value),active,paneFocused:this.focused,width}))}return lines.push(renderPlainLine(theme2,"+ Add Entry",{active:this.index===entries.length&&this.mode.type==="list",paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){return this.mode.type!=="list"?{top:1,bottom:this.error?1:0}:{top:1,bottom:this.error?1:0,cursor:1+this.index}}renderMode(width){let theme2=this.host.theme,mode=this.mode;switch(mode.type){case"keyEdit":return[renderInfoLine(theme2,"new key:",width),mode.editor.renderLine(width)];case"kindPick":return[renderInfoLine(theme2,`${mode.key} \xB7 value kind`,width),...DICT_VALUE_KINDS.map((kind,kindIndex)=>renderPlainLine(theme2,kind,{active:kindIndex===mode.index,paneFocused:this.focused,width}))];case"valueEdit":return[renderInfoLine(theme2,`${mode.key} \xB7 ${mode.kind}`,width),renderKeyValueLine(theme2,{keyLabel:mode.key,active:!0,paneFocused:this.focused,editing:mode.editor,width})];case"boolPick":return[renderInfoLine(theme2,`${mode.key} \xB7 boolean`,width),...["true","false"].map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];case"varPick":return[renderInfoLine(theme2,`${mode.key} \xB7 $var`,width),...VAR_OPTIONS.map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];case"omitPick":return[renderInfoLine(theme2,`${mode.key} \xB7 omitWhenOff`,width),...["default","true","false"].map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];default:return[]}}handleInput(data){let kb=this.host.keybindings,mode=this.mode;switch(mode.type){case"keyEdit":case"valueEdit":if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;mode.editor.handleInput(data),this.host.refresh();return;case"kindPick":this.handlePick(data,mode,DICT_VALUE_KINDS.length,index3=>{let key=mode.key,kind=DICT_VALUE_KINDS[index3];this.startValueForKind(key,kind)});return;case"boolPick":this.handlePick(data,mode,2,index3=>{let key=mode.key;this.mode={type:"list"},this.writeEntry(key,index3===0)});return;case"varPick":this.handlePick(data,mode,VAR_OPTIONS.length,index3=>{let key=mode.key;this.mode={type:"omitPick",key,$var:VAR_OPTIONS[index3],index:0},this.host.refresh()});return;case"omitPick":this.handlePick(data,mode,3,index3=>{this.mode={type:"list"},this.writeEntry(mode.key,index3===0?{$var:mode.$var}:{$var:mode.$var,omitWhenOff:index3===1})});return;case"list":this.handleList(data);return}}handlePick(data,mode,count,choose2){let kb=this.host.keybindings,index3=mode.index;if(kb.matches(data,"tui.select.up")){mode.index=index3===0?count-1:index3-1,this.host.refresh();return}if(kb.matches(data,"tui.select.down")){mode.index=(index3+1)%count,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"list"},this.host.refresh();return}kb.matches(data,"tui.select.confirm")&&choose2(index3)}handleList(data){let kb=this.host.keybindings,rowCount=this.entries().length+1,next=moveSelection(kb,data,this.index,rowCount);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.provider.removeEntry")){let entry=this.entries()[this.index];if(!entry)return;this.model.setField(["compat",this.dictKey,entry[0]],DELETE),this.index=Math.max(0,Math.min(this.index,this.entries().length-1));return}if(kb.matches(data,"tui.select.confirm")||kb.matches(data,"app.list.toggle")){let entry=this.entries()[this.index];if(!entry){let editor2=new ValueEditor({onCommit:raw=>{let key2=raw.trim();if(!key2)return this.error="Key must be non-empty.",this.host.refresh();if(Object.hasOwn(this.dict(),key2))return this.error=`"${key2}" already exists.`,this.host.refresh();this.error=void 0,this.mode={type:"kindPick",key:key2,index:0},this.host.refresh()},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor2.focused=this.focused,this.mode={type:"keyEdit",editor:editor2},this.host.refresh();return}let[key,value]=entry;if(typeof value=="boolean"){this.writeEntry(key,!value);return}if(value===null)return;if(typeof value=="object"){let record=value;if(record.$var==="thinking.enabled"||record.$var==="thinking.effort"||record.$var==="thinking.budget"){this.mode={type:"omitPick",key,$var:record.$var,index:record.omitWhenOff===void 0?0:record.omitWhenOff?1:2},this.host.refresh();return}return}let kind=typeof value=="number"?"number":"string",editor=new ValueEditor({onCommit:raw=>this.commitScalar(key,kind,raw),onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor.beginTweak(String(value)),editor.focused=this.focused,this.mode={type:"valueEdit",key,kind,editor},this.host.refresh();return}}startValueForKind(key,kind){switch(kind){case"string":case"number":{let editor=new ValueEditor({onCommit:raw=>this.commitScalar(key,kind,raw),onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor.focused=this.focused,this.mode={type:"valueEdit",key,kind,editor},this.host.refresh();return}case"boolean":this.mode={type:"boolPick",key,index:0},this.host.refresh();return;case"null":this.mode={type:"list"},this.writeEntry(key,null);return;case"$var":this.mode={type:"varPick",key,index:0},this.host.refresh();return}}commitScalar(key,kind,raw){let value=raw;if(kind==="number"){let parsed=Number(raw.trim());if(!Number.isFinite(parsed)){this.error=`${key} must be a number.`,this.host.refresh();return}value=parsed}let invalid=validateChatTemplateKwarg(value);if(invalid){this.error=invalid,this.host.refresh();return}this.error=void 0,this.mode={type:"list"},this.writeEntry(key,value)}writeEntry(key,value){let invalid=validateChatTemplateKwarg(value);if(invalid){this.error=invalid,this.host.refresh();return}this.model.setField(["compat",this.dictKey,key],value)}setFocused(focused){this.focused=focused,(this.mode.type==="keyEdit"||this.mode.type==="valueEdit")&&(this.mode.editor.focused=focused)}isEditing(){return this.mode.type==="keyEdit"||this.mode.type==="valueEdit"}hints(){switch(this.mode.type){case"keyEdit":case"valueEdit":return[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" ");case"list":return[keyHint("tui.select.confirm","edit / add"),keyHint("app.provider.removeEntry","remove"),keyHint("tui.select.cancel","back")].join(" ");default:return[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","cancel")].join(" ")}}};function compatObject2(handle){let compat=handle.read().compat;return typeof compat=="object"&&compat!==null&&!Array.isArray(compat)?compat:{}}function scalarText2(value){return value===null?"null":typeof value=="string"||typeof value=="number"||typeof value=="boolean"?String(value):JSON.stringify(value)??String(value)}var CompatPane=class{constructor(host,model){this.crumb="compat",this.index=0,this.mode={type:"list"},this.focused=!1,this.host=host,this.model=model}entries(){return Object.entries(compatObject2(this.model))}effectiveApi(){return this.host.effectiveApi(this.model.read())}rowCount(){return this.entries().length+1}render(width){let theme2=this.host.theme,api=this.effectiveApi(),lines=[renderInfoLine(theme2,api?`effective api: ${api}`:"effective api: unresolved \u2014 set API Type",width)];if(this.mode.type==="chooseValue"){let mode=this.mode;lines.push(renderKeyValueLine(theme2,{keyLabel:mode.key,valueText:"choose a value",active:!0,paneFocused:this.focused,width}));for(let[index3,option]of mode.options.entries())lines.push(renderPlainLine(theme2,option,{active:index3===mode.index,paneFocused:this.focused,width}));return lines}let known=api?compatFieldsForApi(api):[],entries=this.entries(),editingKey=this.mode.type==="list"?void 0:this.mode.key;editingKey!==void 0&&!entries.some(([key])=>key===editingKey)&&entries.push([editingKey,void 0]),known.length===0&&entries.length===0&&lines.push(renderInfoLine(theme2,`No compat fields are known for ${api??"this api"}.`,width));for(let[rowIndex,[key,value]]of entries.entries()){let active=rowIndex===this.index,field2=api?compatFieldFor(api,key):void 0,editing=this.mode.type==="editValue"&&this.mode.key===key?this.mode.editor:void 0,note=field2?void 0:`\xB7 not used by ${api??"this api"}`;lines.push(renderKeyValueLine(theme2,{keyLabel:key,valueText:value===void 0?"not set":scalarText2(value),active,paneFocused:this.focused,editing,note,width}))}return lines.push(renderPlainLine(theme2,"+ Add Entry",{active:this.index===entries.length&&this.mode.type==="list",paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){return this.mode.type==="chooseValue"?{top:1,cursor:2+this.mode.index}:{top:1,bottom:this.error?1:0,cursor:1+this.index}}handleInput(data){let kb=this.host.keybindings;if(this.mode.type==="editValue"){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.mode.editor.handleInput(data),this.host.refresh();return}if(this.mode.type==="chooseValue"){let mode=this.mode;if(kb.matches(data,"tui.select.up")){this.mode={...mode,index:mode.index===0?mode.options.length-1:mode.index-1},this.host.refresh();return}if(kb.matches(data,"tui.select.down")){this.mode={...mode,index:(mode.index+1)%mode.options.length},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"list"},this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){let option=mode.options[mode.index];this.mode={type:"list"},this.writeValue(mode.key,this.parseChosen(option))}return}let next=moveSelection(kb,data,this.index,this.rowCount());if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.provider.removeEntry")){let entry=this.entries()[this.index];if(!entry)return;let[key]=entry;this.model.setField(["compat",key],DELETE),this.index=Math.min(this.index,this.rowCount()-2<0?0:this.rowCount()-2);return}if(kb.matches(data,"app.list.toggle")||kb.matches(data,"tui.select.confirm")){this.activateRow();return}}activateRow(){let entries=this.entries();if(this.index===entries.length){let api=this.effectiveApi();if(!api){this.fail("Set API Type first \u2014 compat fields depend on the effective api.");return}if(compatFieldsForApi(api).length===0){this.fail(`No compat fields are known for ${api}.`);return}let taken=new Set(entries.map(([key2])=>key2));this.host.pushPane(new CompatKeyPickerPane(this.host,api,taken,key2=>this.beginValueEntry(key2)));return}let[key,value]=entries[this.index],field2=this.effectiveApi()?compatFieldFor(this.effectiveApi(),key):void 0;if(!field2){this.beginJsonEdit(key,value);return}switch(field2.kind){case"boolean":this.writeValue(key,value!==!0);return;case"enum":this.mode={type:"chooseValue",key,options:field2.options,index:0},this.host.refresh();return;case"number":this.beginTextEdit(key,value);return;case"json":this.beginJsonEdit(key,value);return;case"stringMap":this.host.pushPane(new DictPane(this.host,this.model,key));return}}beginValueEntry(key){let api=this.effectiveApi(),field2=compatFieldFor(api,key);switch(field2.kind){case"boolean":this.mode={type:"chooseValue",key,options:["true","false"],index:0},this.host.refresh();return;case"enum":this.mode={type:"chooseValue",key,options:field2.options,index:0},this.host.refresh();return;case"number":this.beginTextEdit(key,void 0);return;case"json":this.beginJsonEdit(key,void 0);return;case"stringMap":this.writeValue(key,{}),this.host.pushPane(new DictPane(this.host,this.model,key));return}}beginTextEdit(key,current){let editor=new ValueEditor({onCommit:raw=>{let parsed=Number(raw.trim());if(!Number.isFinite(parsed))return this.error=`${key} must be a number.`,this.host.refresh();this.error=void 0,this.mode={type:"list"},this.writeValue(key,parsed)},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});current!==void 0&&editor.beginTweak(String(current)),editor.focused=this.focused,this.mode={type:"editValue",key,editor},this.host.refresh()}beginJsonEdit(key,current){let editor=new ValueEditor({onCommit:raw=>{let text=raw.trim();if(!text){this.mode={type:"list"},this.writeValue(key,DELETE);return}let shapeError=validateJsonCompatValue(key,text);if(shapeError)return this.error=shapeError,this.host.refresh();this.error=void 0,this.mode={type:"list"},this.writeValue(key,JSON.parse(text))},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});current!==void 0&&editor.beginTweak(JSON.stringify(current)),editor.focused=this.focused,this.mode={type:"editValue",key,editor},this.host.refresh()}parseChosen(option){return option==="true"?!0:option==="false"?!1:option}writeValue(key,value){this.model.setField(["compat",key],value)}fail(message){this.error=message,this.host.refresh()}setFocused(focused){this.focused=focused,this.mode.type==="editValue"&&(this.mode.editor.focused=focused)}isEditing(){return this.mode.type==="editValue"}hints(){return this.mode.type==="editValue"?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):this.mode.type==="chooseValue"?[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","set"),keyHint("tui.select.cancel","cancel")].join(" "):[keyHint("tui.select.confirm","edit"),keyHint("app.list.toggle","toggle"),keyHint("app.provider.removeEntry","remove"),keyHint("tui.select.cancel","back")].join(" ")}},CompatKeyPickerPane=class{constructor(host,api,taken,onPick){this.crumb="compat \xB7 new entry",this.query="",this.index=0,this.focused=!1,this.host=host,this.api=api,this.taken=taken,this.onPick=onPick,this.editor=new ValueEditor({onCommit:()=>this.pickCurrent(),onCancel:()=>this.host.popPane()})}candidates(){let available=compatFieldsForApi(this.api).filter(field2=>!this.taken.has(field2.key)),query=this.query.trim();return query?fuzzyFilter(available,query,field2=>`${field2.key} ${field2.note??""}`):available}render(width){let theme2=this.host.theme,lines=[this.editor.renderLine(width)],candidates=this.candidates();candidates.length===0&&lines.push(renderInfoLine(theme2,"No remaining known fields.",width));for(let[rowIndex,field2]of candidates.entries())lines.push(renderPlainLine(theme2,field2.key,{active:rowIndex===this.index,paneFocused:this.focused,note:field2.note?`\xB7 ${field2.kind} \u2014 ${truncate3(field2.note,30)}`:`\xB7 ${field2.kind}`,width}));return lines}scrollWindow(){return{top:1,cursor:1+this.index}}pickCurrent(){let field2=this.candidates()[this.index];field2&&(this.host.popPane(),this.onPick(field2.key))}handleInput(data){let kb=this.host.keybindings;if(kb.matches(data,"tui.select.up")){let count=this.candidates().length;count>0&&(this.index=this.index===0?count-1:this.index-1),this.host.refresh();return}if(kb.matches(data,"tui.select.down")){let count=this.candidates().length;count>0&&(this.index=(this.index+1)%count),this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.pickCurrent();return}let before=this.query;this.editor.handleInput(data),this.query=this.editor.value,this.query!==before&&(this.index=0),this.host.refresh()}setFocused(focused){this.focused=focused,this.editor.focused=focused}isEditing(){return!0}hints(){return[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","back")].join(" ")}};function baseUrlHint(api){switch(api){case"openai-responses":case"openai-completions":case"openai-codex-responses":return"baseUrl includes the version path, e.g. https://api.openai.com/v1";case"anthropic-messages":return"baseUrl is the bare origin \u2014 /v1/messages is added automatically";case"mistral-conversations":return"baseUrl is the bare origin \u2014 /v1 is added automatically";case"google-generative-ai":return"baseUrl includes the version path, e.g. https://generativelanguage.googleapis.com/v1beta";default:return}}function validateBaseUrlValue(value){let url;try{url=new URL(value)}catch{return"baseUrl must be a valid URL."}if(url.protocol!=="http:"&&url.protocol!=="https:")return`Unsupported protocol: ${url.protocol}`;if(url.username||url.password||url.hash)return"baseUrl must not contain credentials or a fragment."}var ApiAuthPane=class{constructor(host,registry){this.rows=["baseUrl","apiKey","apiType"],this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.registry=registry}provider(){return this.host.store.getProvider(this.host.providerId)}scrollWindow(){return{cursor:this.index,bottom:this.bottomNoteCount()}}bottomNoteCount(){let status=this.registry.getProviderAuthStatus(this.host.providerId),hint=baseUrlHint(this.provider()?.api);return(this.edit.error?1:0)+(status.configured?1:0)+1+(hint?1:0)}render(width){let theme2=this.host.theme,provider=this.provider(),lines=[];for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index,value=provider?.[row==="apiType"?"api":row];lines.push(renderKeyValueLine(theme2,{keyLabel:row==="apiType"?"API Type":row,valueText:value?row==="apiKey"?maskApiKey(value):value:"not set",unset:!value,active,paneFocused:this.focused,editing:row==="apiType"?void 0:this.edit.editor(row),width}))}this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2))));let status=this.registry.getProviderAuthStatus(this.host.providerId);status.configured&&status.source==="stored"?lines.push(renderInfoLine(theme2,"A stored credential (auth.json) takes precedence over the apiKey here.",width)):status.configured&&status.source==="environment"&&lines.push(renderInfoLine(theme2,`An environment variable (${status.label??"env"}) currently provides the key.`,width)),lines.push(renderInfoLine(theme2,"Values are stored raw; $VAR / !command references resolve at request time.",width));let hint=baseUrlHint(provider?.api);return hint&&lines.push(renderInfoLine(theme2,hint,width)),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.rows[this.index]==="apiType"?this.host.pushPane(createProviderApiPane(this.host)):this.beginEdit("tweak");return}if(isPrintableInput(data)){if(this.rows[this.index]==="apiType")return;this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let row=this.rows[this.index];row!=="apiType"&&this.edit.begin(row,this.provider()?.[row]??"",mode,this.focused,value=>this.commit(row,value),firstData)}commit(row,raw){let value=raw.trim();if(row==="baseUrl"&&value){let invalid=validateBaseUrlValue(value);if(invalid)return invalid}if(row==="baseUrl"&&!value){let builtin=builtinDefaults(this.host.providerId).baseUrl!==void 0,modelsCovered=this.host.store.getModels(this.host.providerId).every(model=>model.baseUrl!==void 0);if(!builtin&&!modelsCovered&&this.host.store.getModels(this.host.providerId).length>0)return"baseUrl cannot be removed while models rely on it."}this.host.edits.setProviderField([row],value===""?DELETE:value)}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("tui.select.cancel","back")].join(" ")}};function createProviderApiPane(host){let current=()=>host.store.getProvider(host.providerId)?.api;return new ChoicePane(host,"API Type",{current,choices:()=>{let fallback=builtinDefaults(host.providerId).api,label=fallback?`not set (built-in default: ${fallback})`:"not set (models define their own)",values=[void 0,...API_TYPES],value=current();return value&&!values.includes(value)&&values.push(value),values.map(value2=>({value:value2,label:value2??label,dim:value2===void 0}))},choose:api=>{if(api===void 0){let uncovered=host.store.getModels(host.providerId).filter(model=>!model.api&&!builtinDefaults(host.providerId,model.id).api);if(uncovered.length)return uncovered.length===1?`Model "${uncovered[0].id}" resolves its API from here \u2014 give it a model-level API first.`:`${uncovered.length} ${plural(uncovered.length,"model")} resolve their API from here \u2014 give them model-level APIs first.`}host.edits.setProviderField(["api"],api??DELETE)}})}var REASONING_OPTIONS=[{label:"true",value:!0},{label:"false",value:!1},{label:"default (false)",value:void 0}];function createReasoningPane(host,model){return new ChoicePane(host,"reasoning",{current:()=>model.read().reasoning,choices:()=>REASONING_OPTIONS.map(option=>({...option,dim:option.value===void 0})),choose:value=>{model.setField(["reasoning"],value===void 0?DELETE:value)}})}var InputTypesPane=class{constructor(host,model){this.crumb="input",this.index=0,this.focused=!1,this.host=host,this.model=model}selected(){return new Set(this.model.read().input??["text"])}render(width){let theme2=this.host.theme,selected=this.selected(),lines=INPUT_TYPES.map((type,rowIndex)=>renderPlainLine(theme2,type,{checked:selected.has(type),active:rowIndex===this.index,paneFocused:this.focused,width}));return this.model.read().input===void 0&&lines.push(renderInfoLine(theme2,"Not set \u2014 the runtime default is [text].",width)),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings,next=moveSelection(kb,data,this.index,INPUT_TYPES.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"app.list.toggle")){let type=INPUT_TYPES[this.index],selected=this.selected();if(selected.has(type)){if(selected.size===1){this.error="At least one input type must stay selected.",this.host.refresh();return}selected.delete(type)}else selected.add(type);this.error=void 0;let next2=INPUT_TYPES.filter(entry=>selected.has(entry));this.model.setField(["input"],[...next2]);return}if(kb.matches(data,"tui.select.confirm")||kb.matches(data,"tui.select.cancel")){this.host.popPane();return}}setFocused(focused){this.focused=focused}hints(){return[keyHint("app.list.toggle","toggle"),keyHint("tui.select.confirm","done"),keyHint("tui.select.cancel","back")].join(" ")}},COST_RATES=["input","output","cacheRead","cacheWrite"],CostPane=class{constructor(host,model){this.crumb="cost",this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.model=model}cost(){let cost=this.model.read().cost;if(cost)return{input:cost.input,output:cost.output,cacheRead:cost.cacheRead,cacheWrite:cost.cacheWrite}}render(width){let theme2=this.host.theme,cost=this.cost(),lines=[];for(let[rowIndex,rate]of COST_RATES.entries()){let value=cost?.[rate];lines.push(renderKeyValueLine(theme2,{keyLabel:rate,valueText:value===void 0?"0 (default)":`$${value} / M tokens`,unset:value===void 0,active:rowIndex===this.index,paneFocused:this.focused,editing:this.edit.editor(rate),width}))}let tiers=this.model.read().cost?.tiers;return tiers&&tiers.length>0&&lines.push(renderInfoLine(theme2,`tiers: ${tiers.length} (read-only; kept as-is)`,width)),this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,COST_RATES.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.beginEdit("tweak");return}if(isPrintableInput(data)){this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let rate=COST_RATES[this.index],current=this.cost()?.[rate];this.edit.begin(rate,current===void 0?"":String(current),mode,this.focused,value=>this.commit(rate,value),firstData)}commit(rate,raw){let value=raw.trim(),parsed=value===""?0:Number(value);if(!Number.isFinite(parsed)||parsed<0)return"cost rates must be finite non-negative numbers.";this.model.read().cost?this.model.setField(["cost",rate],parsed):this.model.setField(["cost"],{input:0,output:0,cacheRead:0,cacheWrite:0,[rate]:parsed})}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit"),keyHint("tui.select.cancel","back")].join(" ")}},ModelSpecificApiPane=class{constructor(host,model){this.crumb="Model-Specific API",this.rows=["baseUrl","apiType"],this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.model=model}inherited(key){let provider=this.host.store.getProvider(this.host.providerId),providerValue=key==="api"?provider?.api:provider?.baseUrl;if(providerValue)return{value:providerValue,via:"provider"};let current=this.model.read(),effective=key==="api"?this.host.effectiveApi(current):this.host.effectiveBaseUrl(current);return effective?{value:effective,via:"built-in"}:void 0}render(width){let theme2=this.host.theme,current=this.model.read(),lines=[];for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index,key=row==="apiType"?"api":row,override=current[key],inherited=override?void 0:this.inherited(key);lines.push(renderKeyValueLine(theme2,{keyLabel:row==="apiType"?"API Type":row,valueText:override??inherited?.value??"not set",unset:!override,note:inherited?`\xB7 ${inherited.via}`:void 0,active,paneFocused:this.focused,editing:row==="baseUrl"?this.edit.editor(row):void 0,width}))}this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2))));let hint=baseUrlHint(this.host.effectiveApi(current));return hint&&lines.push(renderInfoLine(theme2,hint,width)),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.rows[this.index]==="apiType"?this.host.pushPane(createModelApiPane(this.host,this.model)):this.beginEdit("tweak");return}if(isPrintableInput(data)){if(this.rows[this.index]==="apiType")return;this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let base=this.model.read().baseUrl??this.inherited("baseUrl")?.value??"";this.edit.begin("baseUrl",base,mode,this.focused,value=>this.commit(value),firstData)}commit(raw){let value=raw.trim();if(value){let invalid=validateBaseUrlValue(value);if(invalid)return invalid}this.model.setField(["baseUrl"],value===""?DELETE:value)}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("tui.select.cancel","back")].join(" ")}};function createModelApiPane(host,model){let fallback=()=>{let provider=host.store.getProvider(host.providerId);return provider?.api??builtinDefaults(host.providerId,model.read().id,provider?.api).api};return new ChoicePane(host,"API Type",{current:()=>model.read().api,choices:()=>{let providerApi=host.store.getProvider(host.providerId)?.api,inherited=fallback(),label=providerApi?`provider: ${providerApi}`:inherited?`built-in: ${inherited}`:"no provider or built-in API",values=[void 0,...API_TYPES],current=model.read().api;return current&&!values.includes(current)&&values.push(current),values.map(value=>({value,label:value??label,dim:value===void 0}))},choose:value=>{if(value===void 0&&!fallback())return"Nothing to inherit \u2014 pick an API.";model.setField(["api"],value??DELETE)}})}var ThinkingMapPane=class{constructor(host,model){this.crumb="thinkingLevelMap",this.mode={type:"levels"},this.index=0,this.focused=!1,this.host=host,this.model=model}map(){return this.model.read().thinkingLevelMap??{}}render(width){let theme2=this.host.theme,lines=[];if(this.model.read().reasoning!==!0&&lines.push(renderInfoLine(theme2,"reasoning is not true \u2014 the map is stored but currently has no effect.",width)),this.mode.type==="levels")for(let[rowIndex,level]of THINKING_LEVELS3.entries()){let value=this.map()[level],status=value===void 0?"default":value===null?"null (hidden)":value;lines.push(renderKeyValueLine(theme2,{keyLabel:level,valueText:status,unset:value===void 0,active:rowIndex===this.index,paneFocused:this.focused,width}))}else if(this.mode.type==="choice"){lines.push(renderInfoLine(theme2,`${this.mode.level} \xB7 mapping`,width));for(let[choiceIndex,label]of["String target (provider effort)","Hidden (null)","Default (remove key)"].entries())lines.push(renderPlainLine(theme2,label,{active:choiceIndex===this.mode.index,paneFocused:this.focused,width}))}else lines.push(renderInfoLine(theme2,`${this.mode.level} \xB7 non-empty provider effort`,width)),lines.push(renderKeyValueLine(theme2,{keyLabel:this.mode.level,active:!0,paneFocused:this.focused,editing:this.editor,width}));return this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings;if(this.mode.type==="target"){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.editor?.handleInput(data),this.host.refresh();return}if(this.mode.type==="choice"){if(kb.matches(data,"tui.select.up")){this.mode={...this.mode,index:this.mode.index===0?2:this.mode.index-1},this.host.refresh();return}if(kb.matches(data,"tui.select.down")){this.mode={...this.mode,index:(this.mode.index+1)%3},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"levels"},this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){let{level,index:index3}=this.mode;if(index3===0){let editor=new ValueEditor({onCommit:value=>{let target=value.trim();if(!target)return this.error="A string target must be non-empty; use Hidden for null.",this.host.refresh();this.error=void 0,this.mode={type:"levels"},this.editor=void 0,this.model.setField(["thinkingLevelMap",level],target)},onCancel:()=>{this.editor=void 0,this.mode={type:"levels"},this.host.refresh()}});this.editor=editor,editor.focused=this.focused;let existing=this.map()[level];typeof existing=="string"&&editor.beginTweak(existing),this.mode={type:"target",level},this.host.refresh();return}this.mode={type:"levels"},this.model.setField(["thinkingLevelMap",level],index3===1?null:DELETE);return}return}let next=moveSelection(kb,data,this.index,THINKING_LEVELS3.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){this.mode={type:"choice",level:THINKING_LEVELS3[this.index],index:0},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}}setFocused(focused){this.focused=focused,this.editor&&(this.editor.focused=focused&&this.mode.type==="target")}isEditing(){return this.mode.type==="target"}hints(){return this.mode.type==="target"?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","back")].join(" "):[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm",this.mode.type==="choice"?"set":"edit"),keyHint("tui.select.cancel","back")].join(" ")}};var DEFAULT_CONTEXT_WINDOW2=128e3,DEFAULT_MAX_TOKENS2=16384,ModelFieldsPane=class{constructor(host,model){this.index=0,this.focused=!1,this.renaming=!1,this.disposed=!1,this.host=host,this.model=model;let rows=[{kind:"text",key:"id"},{kind:"text",key:"name"},{kind:"reasoning"},{kind:"subpage",key:"thinkingLevelMap"},{kind:"subpage",key:"input"},{kind:"subpage",key:"cost"},{kind:"number",key:"contextWindow"},{kind:"number",key:"maxTokens"},{kind:"subpage",key:"compat"}];model.isDraft?rows.push({kind:"modelApi"}):rows.push({kind:"builtin"},{kind:"modelApi"},{kind:"deleteModel"}),this.rows=rows}startEditingId(){this.index=0,this.beginEdit("overwrite")}draftEmpty(){return this.model.isDraft&&Object.keys(this.model.read()).length===0}render(width){let theme2=this.host.theme,current=this.model.read(),lines=[],api=this.host.effectiveApi(current);lines.push(renderInfoLine(theme2,api?`api: ${api}${current.api?" (model)":""}`:"api: none resolved \u2014 see Model-Specific API below",width));for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index;lines.push(this.renderRow(row,current,active,width))}return this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),this.renaming&&lines.push(renderInfoLine(theme2,"Saving model id\u2026",width)),lines}scrollWindow(){return{top:1,bottom:(this.error?1:0)+(this.renaming?1:0),cursor:1+this.index}}renderRow(row,current,active,width){let theme2=this.host.theme,editing=this.editingRow===row?this.editing:void 0;switch(row.kind){case"text":{let value=current[row.key],unsetText=row.key==="id"?"required":"falls back to id";return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:value??`not set (${unsetText})`,unset:!value,active,paneFocused:this.focused,editing,width})}case"reasoning":{let value=current.reasoning;return renderKeyValueLine(theme2,{keyLabel:"reasoning",valueText:value===void 0?"false (default)":String(value),unset:value===void 0,active,paneFocused:this.focused,width})}case"subpage":{let summary=this.subpageSummary(row.key,current);return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:summary.text,unset:summary.unset,active,paneFocused:this.focused,width})}case"number":{let value=current[row.key],fallback=row.key==="contextWindow"?DEFAULT_CONTEXT_WINDOW2:DEFAULT_MAX_TOKENS2;return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:value===void 0?`${fallback} (default)`:String(value),unset:value===void 0,active,paneFocused:this.focused,editing,width})}case"builtin":{let id=current.id,count=id?matchBuiltinModels(id,this.host.effectiveApi(current)).length:0;return renderKeyValueLine(theme2,{valueText:"Use Built-in Data",active,paneFocused:this.focused,note:id?`\xB7 ${count} ${plural(count,"candidate")}`:"\xB7 set id first",width})}case"modelApi":return renderKeyValueLine(theme2,{valueText:"Model-Specific API",active,paneFocused:this.focused,note:`\xB7 ${this.modelApiSummary(current)}`,width});case"deleteModel":return renderKeyValueLine(theme2,{valueText:"Delete Model",active,paneFocused:this.focused,width})}}modelApiSummary(current){let overrides=[current.baseUrl?"baseUrl":"",current.api?"API Type":""].filter(Boolean);if(overrides.length>0)return overrides.join(" + ");let provider=this.host.store.getProvider(this.host.providerId);return provider?.api||provider?.baseUrl?"provider defaults":this.host.effectiveApi(current)||this.host.effectiveBaseUrl(current)?"built-in defaults":"not set"}subpageSummary(key,current){switch(key){case"thinkingLevelMap":{let map=current.thinkingLevelMap,count=map?Object.keys(map).length:0;return count>0?{text:`${count} ${plural(count,"mapping")}`,unset:!1}:{text:"default",unset:!0}}case"input":return current.input?{text:`[${current.input.join(", ")}]`,unset:!1}:{text:"[text] (default)",unset:!0};case"cost":{let cost=current.cost;return cost?{text:`$${cost.input} / $${cost.output} in/out`,unset:!1}:{text:"all 0 (default)",unset:!0}}case"compat":{let compat=current.compat,count=compat?Object.keys(compat).length:0;if(count>0)return{text:`${count} ${count===1?"entry":"entries"}`,unset:!1};let inherited=this.host.store.getProvider(this.host.providerId)?.compat,inheritedCount=inherited?Object.keys(inherited).length:0;return inheritedCount>0?{text:`${inheritedCount} from provider`,unset:!0}:{text:"none",unset:!0}}}}handleInput(data){if(this.renaming||this.disposed)return;let kb=this.host.keybindings;if(this.editing){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.editing.handleInput(data),this.host.refresh();return}let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){if(!this.model.isDraft){this.host.popPane();return}if(this.draftEmpty()){this.host.discardModelDraft();return}let label=this.model.read().name??this.model.read().id??"New Model";this.host.confirm(`Discard the new model "${label}"? Its fields are not saved.`,"Discard Model",()=>this.host.discardModelDraft());return}if(kb.matches(data,"app.list.toggle")){this.toggleRow();return}if(kb.matches(data,"tui.select.confirm")){this.enterRow();return}if(isPrintableInput(data)){this.overwriteRow(data);return}}toggleRow(){if(this.rows[this.index].kind!=="reasoning")return;let current=this.model.read().reasoning;this.model.setField(["reasoning"],current!==!0)}enterRow(){let row=this.rows[this.index];switch(row.kind){case"text":case"number":this.beginEdit("tweak");return;case"reasoning":this.host.pushPane(createReasoningPane(this.host,this.model));return;case"subpage":this.pushSubpage(row.key);return;case"modelApi":this.host.pushPane(new ModelSpecificApiPane(this.host,this.model));return;case"builtin":{if(!this.model.read().id){this.host.notify("Set the model id first.","warning");return}this.host.pushPane(new BuiltinCandidatesPane(this.host,this.model));return}case"deleteModel":{let id=this.model.read().id;if(!id)return;if(this.host.isCurrentModel(id)){this.host.notify("The current model cannot be deleted; switch models with /model first.","error");return}this.host.confirm(`Delete model "${id}" from ${this.host.providerId}?`,"Delete Model",()=>{this.host.edits.removeModel(id),this.host.onModelRemoved(id)});return}}}overwriteRow(data){let row=this.rows[this.index];if(row.kind==="text"||row.kind==="number"){this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let row=this.rows[this.index];if(row.kind!=="text"&&row.kind!=="number")return;let current=this.model.read()[row.key],editor=new ValueEditor({onCommit:value=>this.commitText(row,value),onCancel:()=>{if(this.editing=void 0,this.editingRow=void 0,this.error=void 0,this.draftEmpty()){this.host.discardModelDraft();return}this.host.refresh()}});this.editing=editor,this.editingRow=row,editor.focused=this.focused,mode==="overwrite"?editor.beginOverwrite(firstData):editor.beginTweak(current===void 0?"":String(current)),this.host.refresh()}commitText(row,raw){let value=raw.trim(),finish=error=>{if(this.error=error,error){this.host.refresh();return}this.editing=void 0,this.editingRow=void 0,this.host.refresh()};if(row.key==="id"){if(!value){finish("id is required and cannot be empty.");return}if(this.model.isDraft){this.model.setField(["id"],value),finish(this.host.commitModelDraft());return}let current=this.model.read().id;if(!current){finish("Missing current id.");return}if(value===current){finish();return}if(this.host.isCurrentModel(current)){finish("The current model's id cannot be renamed; switch models with /model first.");return}if(this.host.store.getModel(this.host.providerId,value)){finish(`Model "${value}" already exists.`);return}this.renaming=!0,this.host.refresh(),this.model.rename(value).then(error=>{this.renaming=!1,this.disposed||finish(error)},error=>{this.renaming=!1,this.disposed||finish(error instanceof Error?error.message:String(error))});return}if(row.key==="name"){this.model.setField(["name"],value===""?DELETE:value),finish();return}if(value===""){this.model.setField([row.key],DELETE),finish();return}let parsed=Number(value);if(!Number.isSafeInteger(parsed)||parsed<=0){finish(`${row.key} must be a positive integer.`);return}this.model.setField([row.key],parsed),finish()}pushSubpage(key){switch(key){case"thinkingLevelMap":this.host.pushPane(new ThinkingMapPane(this.host,this.model));return;case"input":this.host.pushPane(new InputTypesPane(this.host,this.model));return;case"cost":this.host.pushPane(new CostPane(this.host,this.model));return;case"compat":this.host.pushPane(new CompatPane(this.host,this.model));return}}setFocused(focused){this.focused=focused,this.editing&&(this.editing.focused=focused)}isEditing(){return this.editing!==void 0||this.renaming}dispose(){this.disposed=!0}hints(){return this.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("app.list.toggle","toggle"),keyHint("tui.select.cancel",this.model.isDraft?"discard":"back")].join(" ")}};var LEFT_WIDTH_MIN=16,LEFT_WIDTH_MAX=40,BODY_ROWS=14,DOUBLE_PANE_MIN_WIDTH=72,MIN_WIDTH=32;function padTo(line,width){let missing=width-visibleWidth(line);return missing>0?line+" ".repeat(missing):line}function leftItemKey(item){if(!item)return"";switch(item.kind){case"model":return`model:${item.modelId}`;case"section":return`section:${item.label}`;default:return item.kind}}var ProviderEditorScreen=class{constructor(tui,theme2,keybindings,done,options){this.leftItems=[],this.leftIndex=0,this.focusPane="left",this.stack=[],this.disposed=!1,this._focused=!1,this.tui=tui,this.theme=theme2,this.keybindings=keybindings,this.done=done,this.options=options,this.edits=new ProviderEdits(options.store,options.providerId,options.refresher,()=>this.refresh()),this.host=this.createHost(),this.rebuildLeftItems(),this.leftIndex=this.selectableIndex(0),this.resetRightStack()}get focused(){return this._focused}set focused(value){this._focused=value,this.topPane()?.setFocused(value&&this.focusPane==="right")}invalidate(){this.cache=void 0}dispose(){if(!this.disposed){this.disposed=!0;for(let pane of this.stack)pane.dispose?.();this.stack=[],hasProviderSettings(this.options.store.getProvider(this.options.providerId))||this.options.store.discardProviderDraft(this.options.providerId)}}render(width){if(this.cache&&this.cache.width===width)return this.cache.lines;let lines=this.renderFrame(width);return this.cache={width,lines},lines}handleInput(data){if(this.focusPane==="right"){let pane=this.topPane();if(pane&&!pane.isEditing?.()&&this.keybindings.matches(data,"app.provider.switchPaneLeft")){pane.setFocused(!1),this.focusPane="left",this.refresh();return}pane?.handleInput(data);return}let kb=this.keybindings;if(kb.matches(data,"tui.select.up")){this.moveLeft(-1);return}if(kb.matches(data,"tui.select.down")){this.moveLeft(1);return}if(kb.matches(data,"app.provider.switchPaneRight")){this.activateLeftItem("inspect");return}if(kb.matches(data,"tui.select.confirm")){this.activateLeftItem("activate");return}kb.matches(data,"tui.select.cancel")&&this.done("back")}syncFromStore(){if(this.disposed||this.edits.renaming)return;let selected=this.leftItems[this.leftIndex],selectedKey=leftItemKey(selected);this.rebuildLeftItems();let nextIndex=this.leftItems.findIndex(item=>leftItemKey(item)===selectedKey);this.leftIndex=nextIndex>=0?nextIndex:this.selectableIndex(Math.min(this.leftIndex,Math.max(0,this.leftItems.length-1))),nextIndex<0&&selected?.kind==="model"&&this.resetRightStack(),this.refresh()}rebuildLeftItems(){let items=[{kind:"section",label:"SETUP"},{kind:"apiAuth"},{kind:"fetch"},{kind:"section",label:"MODELS"}];for(let model of this.options.store.getModels(this.options.providerId))items.push({kind:"model",modelId:model.id});this.draft&&items.push({kind:"draft"}),items.push({kind:"section",label:"MANAGE"},{kind:"addModel"},{kind:"deleteProvider"}),this.leftItems=items}selectableIndex(start){let index3=this.leftItems.findIndex((item,i)=>i>=start&&item.kind!=="section");return index3>=0?index3:this.leftItems.findIndex(item=>item.kind!=="section")}moveLeft(delta){let selectable=this.leftItems.map((item,index3)=>({item,index:index3})).filter(entry=>entry.item.kind!=="section");if(selectable.length===0)return;let position=selectable.findIndex(entry=>entry.index===this.leftIndex),next=selectable[(position+delta+selectable.length)%selectable.length];next.index!==this.leftIndex&&(this.leftIndex=next.index,this.resetRightStack(),this.refresh())}activateLeftItem(via){let item=this.leftItems[this.leftIndex];if(item)switch(item.kind){case"apiAuth":case"model":case"draft":this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return;case"fetch":if(this.focusPane="right",via==="activate"){let pane=this.topPane();pane instanceof FetchModelsPane&&pane.start()}this.topPane()?.setFocused(this._focused),this.refresh();return;case"addModel":{if(via==="inspect"){this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return}this.draft||(this.draft=this.edits.draft(),this.rebuildLeftItems());let draftIndex=this.leftItems.findIndex(entry=>entry.kind==="draft");draftIndex>=0&&(this.leftIndex=draftIndex),this.resetRightStack(),this.focusPane="right";let pane=this.topPane();pane?.setFocused(this._focused),pane instanceof ModelFieldsPane&&!this.draft.read().id&&pane.startEditingId(),this.refresh();return}case"deleteProvider":{if(via==="inspect"){this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return}if(this.options.currentModel?.provider===this.options.providerId){this.host.notify("The current model's provider cannot be deleted; switch models with /model first.","error");return}let builtin=isBuiltinProviderId(this.options.providerId);this.host.confirm(`Delete provider "${this.options.providerId}" from models.json?`+(builtin?" The built-in catalog remains and its models may reappear.":"")+" Stored credentials in auth.json are kept.","Delete provider",()=>{this.edits.removeProvider(),this.done("deleted")});return}default:return}}renderLeft(width){let theme2=this.theme,focused=this.focusPane==="left",rows=[],renderRow=index3=>{let item=this.leftItems[index3];return item.kind==="section"?theme2.fg("dim",item.label):this.renderLeftItem(item,index3===this.leftIndex,focused,width)};if(this.leftItems.length<=BODY_ROWS)for(let index3=0;index3<this.leftItems.length;index3++)rows.push(renderRow(index3));else{let slots=BODY_ROWS-1,start=Math.max(0,Math.min(this.leftIndex-Math.floor(slots/2),this.leftItems.length-slots));for(let index3=start;index3<start+slots;index3++)rows.push(renderRow(index3));let selectable=this.leftItems.filter(item=>item.kind!=="section"),position=selectable.indexOf(this.leftItems[this.leftIndex]);rows.push(theme2.fg("dim",` (${position+1}/${selectable.length})`))}for(;rows.length<BODY_ROWS;)rows.push("");return rows}leftItemContent(item){let store=this.options.store,text,note;switch(item.kind){case"apiAuth":text="API Auth";break;case"fetch":text="Fetch Models",note=this.fetchStatus;break;case"model":{let model=store.getModel(this.options.providerId,item.modelId);text=model?modelDisplayName(model):item.modelId;break}case"draft":{text=this.draft?.read().name??this.draft?.read().id??"New Model",note="\xB7 draft";break}case"addModel":text="+ Add model";break;case"deleteProvider":text="Delete provider";break;default:text=""}let dim=item.kind==="draft"&&!this.draft?.read().name&&!this.draft?.read().id;return{text,note,dim}}renderLeftItem(item,active,focused,width){let theme2=this.theme,lit2=active&&focused,marker=lit2?theme2.fg("accent",`${CURSOR2} `):" ",style=(text2,dim2=!1)=>theme2.fg(lit2?"accent":dim2?"dim":"text",text2),{text:label,note,dim}=this.leftItemContent(item),text=label;if(item.kind==="model"||item.kind==="draft"){let budget=Math.max(8,width-2-(note?visibleWidth(note)+1:0));text=truncateMiddle2(text,budget)}let noteText=note?theme2.fg("dim",` ${note}`):"";return truncateToWidth(marker+style(text,dim)+noteText,width)}topPane(){return this.stack[this.stack.length-1]}pushPane(pane){this.topPane()?.setFocused(!1),this.focusPane="right",this.stack.push(pane),pane.setFocused(this._focused&&this.focusPane==="right"),this.refresh()}popPane(){if(this.stack.length<=1){this.topPane()?.setFocused(!1),this.focusPane="left",this.refresh();return}let pane=this.stack.pop();pane?.setFocused(!1),pane?.dispose?.(),this.topPane()?.setFocused(this._focused&&this.focusPane==="right"),this.refresh()}resetRightStack(){for(let pane of this.stack)pane.dispose?.();let item=this.leftItems[this.leftIndex];this.stack=[this.createBasePane(item)],this.topPane()?.setFocused(this._focused&&this.focusPane==="right")}createBasePane(item){switch(item?.kind){case"apiAuth":return new ApiAuthPane(this.host,this.options.registry);case"fetch":return new FetchModelsPane(this.host);case"model":return new ModelFieldsPane(this.host,this.persistedHandle(item.modelId));case"draft":return new ModelFieldsPane(this.host,this.draft);case"addModel":return new InfoPane(this.host,["Press Enter to create a model.","A draft is kept in memory until its id is set; Esc on the draft discards it."],()=>this.activateLeftItem("activate"));case"deleteProvider":return new InfoPane(this.host,["Press Enter to delete this provider from models.json."],()=>this.activateLeftItem("activate"));default:return new InfoPane(this.host,[])}}persistedHandle(modelId){return this.edits.model(modelId,(oldId,newId)=>{let selected=this.leftItems[this.leftIndex];selected?.kind==="model"&&selected.modelId===oldId&&(selected.modelId=newId),this.syncFromStore()})}createHost(){let store=this.options.store,providerId=this.options.providerId;return{theme:this.theme,keybindings:this.keybindings,store,edits:this.edits,providerId,pushPane:pane=>this.pushPane(pane),popPane:()=>this.popPane(),refresh:()=>this.refresh(),notify:(message,type)=>this.options.notify(message,type),effectiveApi:model=>effectiveModelSettings(providerId,store.getProvider(providerId),model).api,effectiveBaseUrl:model=>effectiveModelSettings(providerId,store.getProvider(providerId),model).baseUrl,commitModelDraft:()=>this.commitModelDraft(),discardModelDraft:()=>this.discardModelDraft(),isCurrentModel:modelId=>this.options.currentModel?.provider===providerId&&this.options.currentModel.id===modelId,setFetchStatus:status=>{this.fetchStatus=status,this.refresh()},runFetch:signal=>fetchProviderModels(this.options,signal),importModels:async(models,signal)=>{let error=await importProviderModels({...this.options,edits:this.edits},models,signal);return this.disposed||this.syncFromStore(),error},confirm:(message,actionLabel,action)=>this.pushPane(new ConfirmPane(this.host,message,actionLabel,action)),onModelRemoved:()=>{for(this.rebuildLeftItems(),this.leftIndex=Math.min(this.leftIndex,this.leftItems.length-1);this.leftIndex>0&&this.leftItems[this.leftIndex]?.kind==="section";)this.leftIndex--;this.leftItems[this.leftIndex]?.kind==="section"&&(this.leftIndex=this.selectableIndex(0)),this.focusPane="left",this.resetRightStack(),this.refresh()}}}discardModelDraft(){if(!this.draft)return;this.draft=void 0,this.rebuildLeftItems();let addIndex=this.leftItems.findIndex(item=>item.kind==="addModel");this.leftIndex=addIndex>=0?addIndex:this.selectableIndex(0),this.focusPane="left",this.resetRightStack(),this.refresh()}commitModelDraft(){let draft=this.draft;if(!draft)return"No model draft.";let error=this.edits.commitDraft(draft);if(error)return error;let id=draft.read().id.trim();this.draft=void 0,this.rebuildLeftItems();let index3=this.leftItems.findIndex(item=>item.kind==="model"&&item.modelId===id);index3>=0&&(this.leftIndex=index3),this.resetRightStack(),this.refresh()}refresh(){this.invalidate(),this.tui.requestRender()}renderFrame(width){let theme2=this.theme,border=new DynamicBorder(text=>theme2.fg("border",text)).render(width)[0];if(width<MIN_WIDTH)return[border,truncateToWidth(theme2.fg("warning",` /provider needs at least ${MIN_WIDTH} columns`),width),border];let title=this.renderTitle(width),body2;if(width<DOUBLE_PANE_MIN_WIDTH)body2=this.focusPane==="left"?this.renderLeft(width):this.renderRight(width);else{let leftWidth=this.computeLeftWidth(width),rightWidth=width-leftWidth-3,separator=theme2.fg("border"," \u2502 "),leftLines=this.renderLeft(leftWidth),rightLines=this.renderRight(rightWidth);body2=[];for(let row=0;row<BODY_ROWS;row++){let left=padTo(truncateToWidth(leftLines[row]??"",leftWidth),leftWidth),right=truncateToWidth(rightLines[row]??"",rightWidth);body2.push(left+separator+right)}}let footerLines=this.renderFooter(width);return[border,title,border,...body2,border,...footerLines,border]}renderRight(width){let pane=this.topPane(),paneLines=pane?windowLines(this.theme,pane.render(width),BODY_ROWS-1,pane.scrollWindow?.()):[];return[this.renderPaneTitle(width),...paneLines]}renderPaneTitle(width){let item=this.leftItems[this.leftIndex],base="";switch(item?.kind){case"apiAuth":base="Connection";break;case"fetch":base="Discover models";break;case"model":{let model=this.options.store.getModel(this.options.providerId,item.modelId);base=model?modelDisplayName(model):item.modelId;break}case"draft":base="New model";break;case"addModel":base="Add model";break;case"deleteProvider":base="Delete provider";break}let crumb=this.stack.length>1?this.topPane()?.crumb:void 0,title=crumb?[base,crumb].filter(Boolean).join(" / "):base;return truncateToWidth(this.theme.fg("text",this.theme.bold(title)),width)}computeLeftWidth(width){let longest=12;for(let item of this.leftItems){if(item.kind==="section")continue;let{text,note}=this.leftItemContent(item),label=text+(note?` ${note}`:"");longest=Math.max(longest,visibleWidth(label))}let fit=Math.max(LEFT_WIDTH_MIN,Math.min(LEFT_WIDTH_MAX,longest+2));return Math.min(fit,Math.max(LEFT_WIDTH_MIN,Math.floor(width*.45)))}renderTitle(width){let theme2=this.theme,title=theme2.fg("accent",theme2.bold(` Providers / ${this.options.providerId}`)),status=this.options.store.pendingCount===0?"":this.options.store.saveFailed?"Save failed":"Saving\u2026";if(!status)return truncateToWidth(title,width);let styledStatus=theme2.fg(this.options.store.saveFailed?"error":"dim",status),statusWidth=visibleWidth(status);if(statusWidth+1>=width)return truncateToWidth(styledStatus,width);let left=truncateToWidth(title,width-statusWidth-1);return padTo(left,width-statusWidth)+styledStatus}renderFooter(width){if(this.focusPane==="right"){let paneHints=this.topPane()?.hints()??"";if(width<DOUBLE_PANE_MIN_WIDTH){let arrowHint=keyHint("app.provider.switchPaneLeft","nav"),combined=[paneHints,arrowHint].filter(Boolean).join(" ");return[truncateToWidth(visibleWidth(combined)<=width?combined:paneHints,width)]}let hints2=[paneHints,keyHint("app.provider.switchPaneLeft","focus left")].filter(Boolean).join(" ");return[truncateToWidth(hints2,width)]}let hints=[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm",this.leftActivateLabel()),keyHint("app.provider.switchPaneRight","focus right"),keyHint("tui.select.cancel","back")].join(" ");return[truncateToWidth(hints,width)]}leftActivateLabel(){switch(this.leftItems[this.leftIndex]?.kind){case"fetch":return"fetch";case"addModel":return"create";case"deleteProvider":return"delete";default:return"open"}}};function modelDisplayName(model){return model.name??model.id}var LIST_ROWS=12,ProviderListScreen=class{constructor(tui,theme2,keybindings,done,store){this.mode="list",this.query="",this.index=0,this.active=!1,this.tui=tui,this.theme=theme2,this.keybindings=keybindings,this.done=done,this.store=store,this.input=new ValueEditor({onCommit:()=>this.confirm(),onCancel:()=>this.cancel()})}get focused(){return this.active}set focused(value){this.active=value,this.input.focused=value}invalidate(){}filtered(){let ids=this.store.getProviderIds();return this.query.trim()?fuzzyFilter(ids,this.query,id=>id):ids}render(width){let theme2=this.theme,border=new DynamicBorder(text=>theme2.fg("border",text)).render(width)[0]??"",title=this.mode==="list"?" Providers":" New provider",lines=[border,truncateToWidth(theme2.fg("accent",theme2.bold(title)),width),border,renderKeyValueLine(theme2,{keyLabel:this.mode==="list"?"Search":"Provider id",active:!1,paneFocused:this.active,editing:this.input,width}),""],area=[];if(this.mode==="list"){let entries=this.filtered(),total=entries.length+1;this.index=Math.min(this.index,total-1);let rows=[];for(let row=0;row<total;row++){let id=entries[row-1];rows.push(renderPlainLine(theme2,row===0?"+ Add provider":id,{active:row===this.index,paneFocused:this.active,width}))}if(entries.length===0){let query=this.query.trim();rows.push(renderInfoLine(theme2,query?`No providers match \u201C${query}\u201D.`:"No providers configured.",width)),rows.push(renderInfoLine(theme2,query?`Enter will create provider \u201C${query}\u201D.`:"Enter starts a new provider.",width))}area.push(...windowLines(theme2,rows,LIST_ROWS,{cursor:this.index}))}else{let id=this.input.value.trim();area.push(renderInfoLine(theme2,id?`This becomes the providers.${id} key in models.json.`:"Choose a unique provider id.",width)),this.error&&area.push(truncateToWidth(theme2.fg("error",this.error),width))}for(;area.length<LIST_ROWS;)area.push("");let hints=this.mode==="newProvider"?[keyHint("tui.input.submit","create"),keyHint("tui.select.cancel","cancel")]:[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","open"),keyHint("tui.select.cancel","close")];return[...lines,...area,border,truncateToWidth(hints.join(" "),width),border]}handleInput(data){let kb=this.keybindings;if(kb.matches(data,"tui.select.cancel")){this.cancel();return}if(this.mode==="list"){let total=this.filtered().length+1;if(kb.matches(data,"tui.select.up"))this.index=(this.index+total-1)%total;else if(kb.matches(data,"tui.select.down"))this.index=(this.index+1)%total;else if(kb.matches(data,"tui.select.confirm")){this.confirm();return}else{let previous=this.query;this.input.handleInput(data),this.query=this.input.value,this.query!==previous&&(this.index=this.query&&this.filtered().length>0?1:0)}}else this.input.handleInput(data);this.tui.requestRender()}confirm(){if(this.mode==="newProvider"){let id=this.input.value.trim();if(!id)this.error="Provider id must be non-empty.";else if(this.store.getProviderIds().includes(id))this.error="This provider id already exists.";else{this.store.ensureProviderView(id),this.done({kind:"open",providerId:id});return}}else if(this.index===0)this.mode="newProvider",this.error=void 0,this.input.reset(this.query);else{let id=this.filtered()[this.index-1];id&&this.done({kind:"open",providerId:id})}this.tui.requestRender()}cancel(){if(this.mode==="list"){this.done({kind:"close"});return}this.mode="list",this.error=void 0,this.input.reset(this.query),this.tui.requestRender()}};var ProviderTuiSession=class extends Container{constructor(tui){super(),this.controller=new AbortController,this.active=!1,this.tui=tui}get signal(){return this.controller.signal}get focused(){return this.active}set focused(value){this.active=value,this.screen&&isFocusable(this.screen)&&(this.screen.focused=value)}setScreen(screen){if(this.signal.aborted){screen.dispose?.();return}this.disposeScreen(),this.screen=screen,this.clear(),this.addChild(screen),this.tui.setFocus(this),this.tui.requestRender()}handleInput(data){this.signal.aborted||this.screen?.handleInput?.(data)}dispose(){this.signal.aborted||(this.controller.abort(),this.disposeScreen(),this.clear())}disposeScreen(){let previous=this.screen;this.screen=void 0,previous&&isFocusable(previous)&&(previous.focused=!1),previous?.dispose?.()}};var SavingScreen=class extends Container{constructor(theme2,keybindings,onCancel){super(),this.keybindings=keybindings,this.onCancel=onCancel,this.addChild(new DynamicBorder(text=>theme2.fg("border",text))),this.addChild(new Text(theme2.fg("muted","Saving provider changes and updating models\u2026"),1,1)),this.addChild(new Text(keyHint("tui.select.cancel","return to providers"),1,0)),this.addChild(new DynamicBorder(text=>theme2.fg("border",text)))}handleInput(data){this.keybindings.matches(data,"tui.select.cancel")&&this.onCancel()}};function createProviderErrorScreen(tui,done,error){return new ExtensionSelectorComponent("models.json cannot be edited",["Back"],done,done,{tui,description:`${truncate3(error,2400)}
1242
+ `;await writeFile3(tempPath,candidate,{encoding:"utf8",mode:384});let validationError=(await ModelConfig.load(tempPath)).getError();if(validationError)return{kind:"invalid",error:validationError};let latest=await readDocument(this.path);if(latest.exists!==disk.exists||latest.rawText!==disk.rawText)throw new Error("models.json changed while saving; the edits were kept for retry.");return!this.backedUp&&disk.exists&&disk.rawText!==void 0&&(await writeFile3(`${this.path}.bak`,disk.rawText,{encoding:"utf8",mode:384}),this.backedUp=!0),assertLock(),await rename(tempPath,this.path),this.baseline=working,settle(),{kind:"saved",applied:batch.length}}finally{await rm2(tempPath,{force:!0}).catch(()=>{})}}};function ensureProvider(doc,providerId){let existing=Object.hasOwn(doc.providers,providerId)?doc.providers[providerId]:void 0;if(existing)return existing;let created={};return Object.defineProperty(doc.providers,providerId,{value:created,writable:!0,enumerable:!0,configurable:!0}),created}function applyOp(doc,op){switch(op.kind){case"set":{let provider=ensureProvider(doc,op.providerId);if(op.modelId===void 0){setPath(provider,op.path,op.value);return}let model=(Array.isArray(provider.models)?provider.models:[]).find(entry=>entry.id===op.modelId);model&&setPath(model,op.path,op.value);return}case"addModel":{let provider=ensureProvider(doc,op.providerId),models=Array.isArray(provider.models)?provider.models:[],index3=models.findIndex(entry=>entry.id===op.model.id),clone=structuredClone(op.model);index3>=0?models[index3]=clone:models.push(clone),provider.models=models;return}case"removeModel":{let provider=doc.providers[op.providerId],models=Array.isArray(provider?.models)?provider.models:void 0;if(!provider||!models)return;provider.models=models.filter(entry=>entry.id!==op.modelId);return}case"renameModel":{let provider=doc.providers[op.providerId],models=Array.isArray(provider?.models)?provider.models:void 0;if(!models)return;let model=models.find(entry=>entry.id===op.oldId);model&&!models.some(entry=>entry.id===op.newId)&&(model.id=op.newId);return}case"removeProvider":{delete doc.providers[op.providerId];return}}}function pruneEmptyNewProviders(working,disk){for(let[providerId,provider]of Object.entries(working.providers))Object.hasOwn(disk.providers,providerId)||isPlainObject2(provider)&&Object.keys(provider).length===0&&delete working.providers[providerId]}var RefreshCoordinator=class{constructor(runtime){this.pending=new Map,this.changed=new Set,this.revision=0,this.runtime=runtime}touch(providerId){this.pending.set(providerId,++this.revision),this.changed.add(providerId)}get touchedProviders(){return[...this.changed]}async refreshNow(providerId,signal){return this.run([providerId],signal)}async flush(signal){let providers=[...this.pending.keys()];return providers.length===0?{ok:!0,aborted:!1,errors:[]}:this.run(providers,signal)}async run(providers,signal){let revisions=new Map(providers.map(id=>[id,this.pending.get(id)])),combined=AbortSignal.any([...signal?[signal]:[],AbortSignal.timeout(REFRESH_TIMEOUT_MS)]),errors=[];try{let result2=await this.runtime.refresh({allowNetwork:!1,providers,signal:combined});for(let[providerId,error]of result2.errors)errors.push(`${providerId}: ${formatError(error)}`);let configError=this.runtime.getError();configError&&errors.push(configError);let aborted=result2.aborted||combined.aborted;aborted&&errors.length===0&&errors.push("Refresh was cancelled or timed out.");let ok=errors.length===0&&!aborted;if(ok)for(let id of providers)this.pending.get(id)===revisions.get(id)&&this.pending.delete(id);return{ok,aborted,errors}}catch(error){return errors.push(formatError(error)),{ok:!1,aborted:combined.aborted,errors}}}};async function probeProviderModels(opts){let baseUrl;try{baseUrl=new URL(opts.baseUrl)}catch{return{ok:!1,error:"Base URL is not a valid URL."}}if(baseUrl.protocol!=="http:"&&baseUrl.protocol!=="https:")return{ok:!1,error:`Unsupported protocol: ${baseUrl.protocol}`};if(baseUrl.username||baseUrl.password||baseUrl.hash)return{ok:!1,error:"Base URL must not contain credentials or a fragment."};if(opts.signal?.aborted)return{ok:!1,error:"Cancelled."};let controller=new AbortController,timeoutMs=opts.timeoutMs??PROBE_LIMITS.timeoutMs,timer=setTimeout(()=>controller.abort(),timeoutMs),onOuterAbort=()=>controller.abort();opts.signal?.addEventListener("abort",onOuterAbort,{once:!0});let doFetch=opts.fetch??globalThis.fetch,getPage=async(url,headers)=>{let response=await doFetch(url,{method:"GET",headers,signal:controller.signal});if(!response.ok){let body2=await readResponseTextBounded(response,{maxBytes:PROBE_LIMITS.maxErrorBytes,signal:controller.signal});return{ok:!1,status:response.status,error:`HTTP ${response.status}${body2?`: ${safeErrorText(body2,opts.auth).slice(0,PROBE_LIMITS.maxErrorChars)}`:""}`}}let text=await readResponseTextBounded(response,{maxBytes:PROBE_LIMITS.maxBodyBytes,overflowMessage:`Response exceeds ${PROBE_LIMITS.maxBodyBytes} bytes.`,signal:controller.signal});try{return{ok:!0,json:JSON.parse(text)}}catch{return{ok:!1,error:"Model catalog response is not JSON."}}};try{let url=modelCatalogUrl(baseUrl,opts.api),headers=buildHeaders(opts.auth,opts.api),page=await getPage(url,headers),retry=page.ok?void 0:openAIStyleRetry(baseUrl,opts.auth,opts.api,{url,headers,status:page.status});if(!page.ok&&retry){let retried=await getPage(retry.url,retry.headers);if(!retried.ok)return{ok:!1,error:safeErrorText(`${url.href} \u2192 HTTP ${page.status}; OpenAI-style retry ${retry.url.href} \u2192 ${retried.error}`,opts.auth)};({url,headers}=retry),page=retried}if(!page.ok)return{ok:!1,error:page.error};let models=parseCatalogModels(page.json);if(models===null)return{ok:!1,error:"JSON has no supported OpenAI-style data[] or models[] catalog with model ids. Add models manually if this endpoint uses another catalog format."};let json=page.json;for(let pages=1;opts.api==="anthropic-messages"&&pages<PROBE_LIMITS.maxPages&&models.length<PROBE_LIMITS.maxModels;pages++){let cursor=nextPageCursor(json);if(!cursor)break;let nextUrl=new URL(url.href);nextUrl.searchParams.set("after_id",cursor),nextUrl.searchParams.set("limit","1000");let next=await getPage(nextUrl,headers),more=next.ok?parseCatalogModels(next.json):null;if(!next.ok||!more||(models.push(...more),nextPageCursor(next.json)===cursor))break;json=next.json}let sorted=dedupeSort(models),truncated=sorted.length>PROBE_LIMITS.maxModels||declaresMorePages(json);return{ok:!0,models:sorted.slice(0,PROBE_LIMITS.maxModels),truncated}}catch(error){return controller.signal.aborted?{ok:!1,error:opts.signal?.aborted?"Cancelled.":`Timed out after ${timeoutMs}ms.`}:{ok:!1,error:safeErrorText(formatError(error),opts.auth)}}finally{clearTimeout(timer),opts.signal?.removeEventListener("abort",onOuterAbort)}}function modelCatalogUrl(base,api){let url=new URL(base.href),path10=url.pathname.replace(/\/+$/,"");return url.pathname=api==="anthropic-messages"&&!path10.endsWith("/v1")?`${path10}/v1/models`:`${path10}/models`,url}function openAIStyleRetry(base,auth,api,first){if(api!=="anthropic-messages"||![401,403,404].includes(first.status??0)||Object.keys(auth?.headers??{}).some(key=>key.toLowerCase()==="authorization"))return;let root=new URL(base.href);root.pathname=root.pathname.replace(/\/+$/,"").replace(/\/anthropic$/i,"");let url=modelCatalogUrl(root,api),headers=buildHeaders(auth,void 0);return url.href===first.url.href&&headers.get("authorization")===first.headers.get("authorization")?void 0:{url,headers}}function safeErrorText(text,auth){for(let value of[auth?.apiKey,...Object.values(auth?.headers??{})]){if(typeof value!="string"||!value)continue;text=text.replaceAll(value,"[redacted]");let token=value.replace(/^Bearer\s+/i,"");token!==value&&token&&(text=text.replaceAll(token,"[redacted]"))}return stripTerminalSequences(text)}function buildHeaders(auth,api){let headers=new Headers;headers.set("accept","application/json");let configured=auth?.headers??{};api==="anthropic-messages"&&headers.set("anthropic-version","2023-06-01");let hasAuthorization=!1;for(let[key,value]of Object.entries(configured))key.toLowerCase()==="authorization"&&(hasAuthorization=!0),typeof value=="string"?headers.set(key,value):value===null&&headers.delete(key);if(!auth?.apiKey||hasAuthorization)return headers;let lower=name=>Object.keys(configured).some(key=>key.toLowerCase()===name);return api==="anthropic-messages"?(auth.apiKey.includes("sk-ant-oat")?headers.set("authorization",`Bearer ${auth.apiKey}`):(lower("x-api-key")||headers.set("x-api-key",auth.apiKey),lower("anthropic-version")||headers.set("anthropic-version","2023-06-01")),headers):api==="google-generative-ai"||api==="google-vertex"?(lower("x-goog-api-key")||headers.set("x-goog-api-key",auth.apiKey),headers):(headers.set("authorization",`Bearer ${auth.apiKey}`),headers)}function declaresMorePages(json){return typeof json=="object"&&json!==null&&"has_more"in json&&json.has_more===!0}function nextPageCursor(json){if(!declaresMorePages(json))return;let lastId=json.last_id;return typeof lastId=="string"&&lastId?lastId:void 0}var CONTEXT_WINDOW_FIELDS=["context_window","context_window.tokens","context_length","top_provider.context_length","max_input_tokens","max_context_length","max_model_len","context_size","metadata.context_length"],MAX_TOKENS_FIELDS=["max_output_tokens","max_completion_tokens","top_provider.max_completion_tokens","max_tokens","max_output_length"],INPUT_MODALITY_FIELDS=["input_modalities","architecture.input_modalities","modalities.input"],IMAGE_FLAG_FIELDS=["supports_vision","enable_vision_input","capabilities.vision","capabilities.image_input.supported"],REASONING_FLAG_FIELDS=["reasoning","supports_reasoning","enable_reason","capabilities.reasoning","capabilities.thinking.supported"],REASONING_LEVEL_FIELDS=["effort.supported_levels","reasoning_effort_support_list"],CAPABILITY_LIST_FIELDS=["supported_parameters","tags","features","supported_features","metadata.tags"];function fieldAt(record,path10){let value=record;for(let key of path10.split(".")){if(!value||typeof value!="object"||Array.isArray(value))return;value=value[key]}return value}function listAt(record,path10){let value=fieldAt(record,path10);return Array.isArray(value)?value.filter(entry=>typeof entry=="string").map(entry=>entry.toLowerCase()):[]}function declaredLimit(record,paths){let limit;for(let path10 of paths){let value=fieldAt(record,path10);typeof value=="number"&&Number.isSafeInteger(value)&&value>0&&(limit=Math.min(limit??value,value))}return limit}function declaresImageInput(record){return INPUT_MODALITY_FIELDS.some(path10=>listAt(record,path10).includes("image"))||IMAGE_FLAG_FIELDS.some(path10=>fieldAt(record,path10)===!0)||CAPABILITY_LIST_FIELDS.some(path10=>listAt(record,path10).includes("vision"))}function declaresReasoning(record){return REASONING_FLAG_FIELDS.some(path10=>fieldAt(record,path10)===!0)||REASONING_LEVEL_FIELDS.some(path10=>listAt(record,path10).length>0)||CAPABILITY_LIST_FIELDS.some(path10=>listAt(record,path10).includes("reasoning"))}function parseCatalogModels(json){if(!json||typeof json!="object")return null;let payload=json,data=Array.isArray(json)?json:Array.isArray(payload.models)?payload.models:payload.data;if(!Array.isArray(data))return null;let models=[];for(let item of data){if(!item||typeof item!="object")continue;let record=item,id=(typeof record.id=="string"?record.id.trim():"")||(typeof record.slug=="string"?record.slug.trim():"");if(!id)continue;let displayName=typeof record.name=="string"&&record.name.trim()?record.name.trim():void 0,anthropicName=typeof record.display_name=="string"&&record.display_name.trim()?record.display_name.trim():typeof record.displayName=="string"?record.displayName.trim():void 0,name=(displayName??anthropicName)!==id?displayName??anthropicName:void 0,model=name?{id,name}:{id},contextWindow=declaredLimit(record,CONTEXT_WINDOW_FIELDS);contextWindow&&(model.contextWindow=contextWindow);let maxTokens=declaredLimit(record,MAX_TOKENS_FIELDS);maxTokens&&(model.maxTokens=maxTokens),declaresImageInput(record)&&(model.input=["text","image"]),declaresReasoning(record)&&(model.reasoning=!0),models.push(model)}return data.length>0&&models.length===0?null:models}function dedupeSort(models){let map=new Map;for(let model of models)map.has(model.id)||map.set(model.id,model);return[...map.values()].sort((a,b)=>a.id.localeCompare(b.id))}async function fetchProviderModels(options,signal){let{store,refresher,runtime,providerId}=options,deadline=AbortSignal.any([signal,AbortSignal.timeout(PROBE_LIMITS.timeoutMs)]);try{await raceWithAbortSignal(store.flush(),deadline);let unsaved=store.getPendingError(providerId);if(unsaved)return{ok:!1,error:`Save the provider changes before fetching: ${unsaved}`};let provider=store.getProvider(providerId),settings=effectiveModelSettings(providerId,provider);if(!settings.baseUrl)return{ok:!1,error:"Set a baseUrl under API Auth first."};let sync=await refresher.refreshNow(providerId,deadline);if(deadline.throwIfAborted(),!sync.ok)return{ok:!1,error:`The provider did not reload: ${sync.errors.join("; ")}`};let resolved=await raceWithAbortSignal(runtime.getAuth(providerId,{signal:deadline}),deadline),configured=provider?.apiKey!==void 0||provider?.authHeader===!0||Object.keys(provider?.headers??{}).length>0||runtime.getProviderAuthStatus(providerId).configured;if(!resolved&&configured)return{ok:!1,error:"Configured credentials or headers did not resolve; check the provider authentication."};let result2=await probeProviderModels({baseUrl:resolved?.auth.baseUrl??settings.baseUrl,auth:resolved?.auth,api:settings.api,signal:deadline});return deadline.throwIfAborted(),result2}catch(error){return deadline.aborted?{ok:!1,error:signal.aborted?"Cancelled.":"Timed out while preparing or fetching the model catalog."}:{ok:!1,error:formatError(error)}}}async function importProviderModels(options,models,signal){let{store,refresher,providerId}=options;await raceWithAbortSignal(store.flush(),signal);let unsaved=store.getPendingError(providerId);if(unsaved)return unsaved;let settings=effectiveModelSettings(providerId,store.getProvider(providerId));if(!settings.api||!settings.baseUrl)return"Set baseUrl and API Type under API Auth before importing models.";let existing=new Set(store.getModels(providerId).map(model=>model.id)),fresh=models.filter(model=>existing.has(model.id)?!1:(existing.add(model.id),!0));if(fresh.length===0)return;signal.throwIfAborted(),options.edits.addModels(fresh),await store.flush();let saveError=store.getPendingError(providerId);if(saveError)return saveError;let outcome=await refresher.refreshNow(providerId,signal);if(!outcome.ok)return`Models were saved, but refresh failed: ${outcome.errors.join("; ")}`}var ProviderEdits=class{constructor(store,providerId,refresher,refresh){this.renaming=!1,this.store=store,this.providerId=providerId,this.refresher=refresher,this.refresh=refresh}changed(){(!this.store.isDraftProvider(this.providerId)||hasProviderSettings(this.store.getProvider(this.providerId)))&&this.refresher.touch(this.providerId),this.refresh()}setProviderField(path10,value){this.store.setProviderField(this.providerId,path10,value),this.changed()}removeProvider(){this.store.removeProvider(this.providerId),this.changed()}removeModel(modelId){this.store.removeModel(this.providerId,modelId),this.changed()}batch(apply){this.store.batch(apply)}addModels(models){this.store.batch(()=>{for(let model of models)this.store.addModel(this.providerId,model)}),models.length>0&&this.changed()}draft(){let fields={};return{isDraft:!0,read:()=>fields,setField:(path10,value)=>{setPath(fields,path10,value),this.refresh()}}}commitDraft(draft){let fields=draft.read(),id=(fields.id??"").trim();if(!id)return"Model id is required.";if(this.store.getModel(this.providerId,id))return`Model "${id}" already exists.`;let settings=effectiveModelSettings(this.providerId,this.store.getProvider(this.providerId),fields);if(!settings.api)return"Cannot resolve an api \u2014 set one under Model-Specific API or the provider's API Auth.";if(!settings.baseUrl)return"Cannot resolve a baseUrl \u2014 set one under Model-Specific API or the provider's API Auth.";this.store.addModel(this.providerId,{...fields,id}),this.changed()}model(modelId,onRename){let id=modelId,snapshot;return{isDraft:!1,read:()=>snapshot??this.store.getModel(this.providerId,id)??{id},setField:(path10,value)=>{this.store.setModelField(this.providerId,id,path10,value),this.changed()},rename:async newId=>{let oldId=id;snapshot=this.store.getModel(this.providerId,id),this.renaming=!0;try{let error=await this.store.renameModel(this.providerId,id,newId);if(error)return error;id=newId,this.changed();return}finally{snapshot=void 0,this.renaming=!1,onRename(oldId,id)}}}}};var CURSOR2="\u203A",PASTE_START="\x1B[200~",PASTE_END="\x1B[201~",ValueEditor=class{constructor(callbacks){this.input=new Input({prompt:""}),this.input.onSubmit=callbacks.onCommit,this.input.onEscape=callbacks.onCancel}beginOverwrite(firstData){this.input.setValue(""),firstData&&this.input.handleInput(firstData)}reset(value){this.beginTweak(value)}beginTweak(current){this.input.setValue(""),this.input.handleInput(PASTE_START+current+PASTE_END),this.input.setValue(current)}get value(){return this.input.getValue()}handleInput(data){this.input.handleInput(data)}renderLine(width){return this.input.render(Math.max(1,width))[0]??""}get focused(){return this.input.focused}set focused(value){this.input.focused=value}};function renderKeyValueLine(theme2,opts){let lit2=opts.active&&opts.paneFocused,marker2=lit2?theme2.fg("accent",`${CURSOR2} `):" ",keyPrefix=opts.keyLabel===void 0?"":`${opts.keyLabel}: `,keyColor=lit2?"accent":"text",note=opts.note?theme2.fg("dim",` ${opts.note}`):"";if(opts.editing){let body2=opts.editing.renderLine(Math.max(1,opts.width-visibleWidth(marker2)-visibleWidth(keyPrefix)));return truncateToWidth(marker2+theme2.fg(keyColor,keyPrefix)+theme2.fg(keyColor,body2)+note,opts.width)}let valueColor=opts.unset?"dim":keyColor,line=marker2+theme2.fg(keyColor,keyPrefix)+theme2.fg(valueColor,opts.valueText??"")+note;return truncateToWidth(line,opts.width)}function renderPlainLine(theme2,text,opts){let lit2=(opts.active??!1)&&(opts.paneFocused??!1),marker2=lit2?theme2.fg("accent",`${CURSOR2} `):" ",check=opts.checked===void 0?"":opts.checked?"[x] ":"[ ] ",color=opts.dim?"dim":lit2?"accent":"text",note=opts.note?theme2.fg("dim",` ${opts.note}`):"",line=marker2+theme2.fg(color,check+text)+note;return truncateToWidth(line,opts.width)}function renderInfoLine(theme2,text,width){return truncateToWidth(theme2.fg("dim",text),width)}function windowLines(theme2,lines,height,scroll,indicator){let top=Math.max(0,Math.min(scroll?.top??0,lines.length)),bottom=Math.max(0,Math.min(scroll?.bottom??0,lines.length-top)),head=lines.slice(0,top),tail=bottom>0?lines.slice(lines.length-bottom):[],middle=lines.slice(top,lines.length-bottom),cursor=Math.max(0,Math.min((scroll?.cursor??0)-top,Math.max(0,middle.length-1))),padToHeight=rows=>{let out=rows.slice(0,height);for(;out.length<height;)out.push("");return out},avail=height-head.length-tail.length;if(middle.length<=avail)return padToHeight([...head,...middle,...tail]);let slots=Math.max(1,avail-1),start=Math.max(0,Math.min(cursor-Math.floor(slots/2),middle.length-slots)),note=indicator?.(cursor+1,middle.length)??theme2.fg("dim",` (${cursor+1}/${middle.length})`);return padToHeight([...head,...middle.slice(start,start+slots),note,...tail])}function isPrintableInput(data){if(!data)return!1;if(data.startsWith(PASTE_START)||decodeKittyPrintable(data)!==void 0)return!0;if(data.includes("\x1B")||data.includes("\r")||data.includes(`
1243
+ `))return!1;for(let char of data){let code=char.codePointAt(0);if(code<32||code===127)return!1}return!0}function truncateMiddle2(text,maxWidth){if(visibleWidth(text)<=maxWidth)return text;if(maxWidth<=4)return truncateToWidth(text,maxWidth);let headWidth2=Math.ceil((maxWidth-1)/2),tailWidth=maxWidth-1-headWidth2,head="",headUsed=0;for(let char of text){let charWidth=visibleWidth(char);if(headUsed+charWidth>headWidth2)break;head+=char,headUsed+=charWidth}let tail="",tailUsed=0;for(let char of[...text].reverse()){let charWidth=visibleWidth(char);if(tailUsed+charWidth>tailWidth)break;tail=char+tail,tailUsed+=charWidth}return`${head}\u2026${tail}`}var InfoPane=class{constructor(host,lines,onConfirm){this.focused=!1,this.host=host,this.lines=lines,this.onConfirm=onConfirm}render(width){return this.focused&&this.onConfirm?this.lines.map((line,index3)=>index3>0?renderInfoLine(this.host.theme,line,width):truncateToWidth(this.host.theme.fg("accent",`${CURSOR2} `)+this.host.theme.fg("text",line),width)):this.lines.map(line=>renderInfoLine(this.host.theme,line,width))}handleInput(data){if(this.host.keybindings.matches(data,"tui.select.cancel")){this.host.popPane();return}this.onConfirm&&this.host.keybindings.matches(data,"tui.select.confirm")&&this.onConfirm()}setFocused(focused){this.focused=focused}hints(){let hints=[];return this.onConfirm&&hints.push(keyHint("tui.select.confirm","proceed")),hints.push(keyHint("tui.select.cancel","back")),hints.join(" ")}},ConfirmPane=class{constructor(host,message,actionLabel,action){this.crumb="Confirm",this.index=1,this.focused=!1,this.host=host,this.message=message,this.actionLabel=actionLabel,this.action=action}render(width){let theme2=this.host.theme;return[truncateToWidth(theme2.fg("warning",this.message),width),renderPlainLine(theme2,this.actionLabel,{active:this.index===0,paneFocused:this.focused,width}),renderPlainLine(theme2,"Cancel",{active:this.index===1,paneFocused:this.focused,width})]}handleInput(data){let kb=this.host.keybindings;if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down")){this.index=this.index===0?1:0,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}kb.matches(data,"tui.select.confirm")&&(this.index===0?this.action():this.host.popPane())}setFocused(focused){this.focused=focused}hints(){return[keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","cancel")].join(" ")}};function moveSelection(keys,data,index3,count){let delta=keys.matches(data,"tui.select.up")?-1:keys.matches(data,"tui.select.down")?1:void 0;return delta===void 0?void 0:count===0?0:(index3+delta+count)%count}var ChoicePane=class{constructor(host,crumb,options){this.focused=!1,this.host=host,this.crumb=crumb,this.options=options,this.index=Math.max(0,options.choices().findIndex(choice=>choice.value===options.current()))}render(width){let lines=this.options.choices().map((choice,index3)=>renderPlainLine(this.host.theme,`${choice.value===this.options.current()?"\u25CF":"\u25CB"} ${choice.label}`,{active:index3===this.index,paneFocused:this.focused,dim:choice.dim,width}));return this.error&&lines.push(renderInfoLine(this.host.theme,this.error,width)),lines}scrollWindow(){return{cursor:this.index,bottom:this.error?1:0}}handleInput(data){let choices=this.options.choices(),next=moveSelection(this.host.keybindings,data,this.index,choices.length);if(next!==void 0)this.index=next,this.host.refresh();else if(this.host.keybindings.matches(data,"tui.select.cancel"))this.host.popPane();else if(this.host.keybindings.matches(data,"tui.select.confirm")||this.host.keybindings.matches(data,"app.list.toggle")){let choice=choices[this.index];if(!choice)return;this.error=this.options.choose(choice.value),this.error?this.host.refresh():this.host.popPane()}}setFocused(focused){this.focused=focused}hints(){return[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","select"),keyHint("tui.select.cancel","back")].join(" ")}},InlineEdit=class{constructor(refresh){this.refresh=refresh}get editing(){return this.active!==void 0}editor(key){return this.active?.key===key?this.active.editor:void 0}setFocused(focused){this.active&&(this.active.editor.focused=focused)}begin(key,current,mode,focused,commit,firstData){let editor=new ValueEditor({onCommit:value=>{this.error=commit(value),this.error||(this.active=void 0),this.refresh()},onCancel:()=>{this.active=void 0,this.error=void 0,this.refresh()}});this.active={key,editor},editor.focused=focused,mode==="overwrite"?editor.beginOverwrite(firstData):editor.beginTweak(current),this.refresh()}handleInput(data,keys){return this.active?(!keys.matches(data,"tui.select.up")&&!keys.matches(data,"tui.select.down")&&this.active.editor.handleInput(data),this.refresh(),!0):!1}};function formatTokens2(count){return count<1e3?count.toString():count<1e4?`${(count/1e3).toFixed(1)}k`:count<1e6?`${Math.round(count/1e3)}k`:count<1e7?`${(count/1e6).toFixed(1)}M`:`${Math.round(count/1e6)}M`}function metadataNote(model){let parts=[model.contextWindow?`${formatTokens2(model.contextWindow)} ctx`:"",model.maxTokens?`${formatTokens2(model.maxTokens)} out`:"",model.input?.includes("image")?"img":"",model.reasoning?"think":""].filter(Boolean);return parts.length>0?`\xB7 ${parts.join(" \xB7 ")}`:void 0}var FetchModelsPane=class{constructor(host){this.state={type:"idle"},this.query="",this.index=0,this.checked=new Set,this.focused=!1,this.disposed=!1,this.host=host,this.search=new ValueEditor({onCommit:()=>this.importChecked(),onCancel:()=>this.exitResults()})}start(){if(this.disposed||this.state.type==="loading"||this.state.type==="importing"||!this.catalogUrl())return;let controller=new AbortController;this.state={type:"loading",controller},this.host.refresh(),this.host.runFetch(controller.signal).then(result2=>{if(!(this.disposed||controller.signal.aborted||this.state.type!=="loading"||this.state.controller!==controller)){if(result2.ok)this.state={type:"results",catalog:result2},this.checked=new Set,this.query="",this.search.reset(""),this.index=0,this.search.focused=this.focused,this.host.setFetchStatus(`\xB7 ${result2.models.length} models`);else{if(result2.error==="Cancelled.")return;this.state={type:"error",message:result2.error},this.host.setFetchStatus("\xB7 failed")}this.host.refresh()}}).catch(error=>{this.disposed||controller.signal.aborted||this.state.type!=="loading"||this.state.controller!==controller||(this.state={type:"error",message:error instanceof Error?error.message:String(error)},this.host.setFetchStatus("\xB7 failed"),this.host.refresh())})}existingIds(){return new Set(this.host.store.getModels(this.host.providerId).map(model=>model.id))}catalogUrl(){let baseUrl=this.host.store.getProvider(this.host.providerId)?.baseUrl;try{return baseUrl?modelCatalogUrl(new URL(baseUrl),this.host.effectiveApi()).href:void 0}catch{return}}rows(){if(this.state.type!=="results"&&this.state.type!=="importing")return[];let existing=this.existingIds(),rows=this.state.catalog.models.map(model=>({model,added:existing.has(model.id)})),query=this.query.trim().toLowerCase();return query?rows.filter(row=>row.model.id.toLowerCase().includes(query)||row.model.name?.toLowerCase().includes(query)):rows}render(width){let theme2=this.host.theme,catalogUrl=this.catalogUrl();switch(this.state.type){case"idle":return catalogUrl?[renderPlainLine(theme2,"Fetch Models",{active:!0,paneFocused:this.focused,note:`\xB7 from ${truncateMiddle2(catalogUrl,Math.max(10,width-22))}`,width})]:[renderInfoLine(theme2,"Set a baseUrl under API Auth first.",width)];case"loading":return[renderInfoLine(theme2,`Fetching ${catalogUrl??""} \u2026`,width),renderInfoLine(theme2,"Esc cancels the request.",width)];case"error":return[theme2.fg("error",truncate3(this.state.message,Math.max(10,width-2))),renderInfoLine(theme2,"Enter retries; Esc goes back.",width)];case"importing":case"results":{let lines=[];this.state.catalog.truncated&&lines.push(renderInfoLine(theme2,"The catalog was truncated; refine manually if a model is missing.",width)),lines.push(this.search.renderLine(width));let rows=this.rows();for(let[rowIndex,row]of rows.entries()){if(row.added){lines.push(renderPlainLine(theme2,row.model.id,{active:rowIndex===this.index,paneFocused:this.focused,dim:!0,note:"\xB7 Added",width}));continue}lines.push(renderPlainLine(theme2,row.model.name?`${row.model.id} \xB7 ${row.model.name}`:row.model.id,{checked:this.checked.has(row.model.id),active:rowIndex===this.index,paneFocused:this.focused,note:metadataNote(row.model),width}))}rows.length===0&&lines.push(renderInfoLine(theme2,"No matching models.",width));let addedCount=rows.filter(row=>row.added).length;return lines.push(renderInfoLine(theme2,`${this.checked.size} selected \xB7 ${rows.length} shown${addedCount?` \xB7 ${addedCount} already added`:""}`,width)),this.state.type==="importing"&&lines.push(renderInfoLine(theme2,"Importing\u2026",width)),this.state.type==="results"&&this.state.error&&lines.push(theme2.fg("error",truncate3(this.state.error,Math.max(10,width-2)))),lines}}}scrollWindow(){if(this.state.type!=="results"&&this.state.type!=="importing")return{};let top=(this.state.catalog.truncated?1:0)+1,bottom=1+(this.state.type==="importing"||this.state.error?1:0);return{top,bottom,cursor:top+this.index}}handleInput(data){let kb=this.host.keybindings;switch(this.state.type){case"idle":if(kb.matches(data,"tui.select.confirm")){this.start();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}return;case"loading":if(kb.matches(data,"tui.select.cancel")){this.state.controller.abort(),this.state={type:"idle"},this.host.refresh();return}return;case"error":if(kb.matches(data,"tui.select.confirm")){this.start();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}return;case"importing":case"results":this.handleResultsInput(data);return}}handleResultsInput(data){let kb=this.host.keybindings,rows=this.rows(),next=moveSelection(kb,data,this.index,rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"app.list.toggle")){let row=rows[this.index];if(!row||row.added||this.state.type==="importing")return;this.checked.has(row.model.id)?this.checked.delete(row.model.id):this.checked.add(row.model.id),this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.exitResults();return}if(kb.matches(data,"tui.select.confirm")){this.importChecked();return}let before=this.query;this.search.handleInput(data),this.query=this.search.value,this.query!==before&&(this.index=0),this.host.refresh()}importChecked(){if(this.state.type!=="results")return;let chosen;if(this.checked.size===0){let row=this.rows()[this.index];if(!row||row.added)return;chosen=[row.model]}else chosen=this.state.catalog.models.filter(model=>this.checked.has(model.id));let controller=new AbortController,catalog=this.state.catalog;this.state={type:"importing",catalog,controller},this.host.refresh(),this.host.importModels(chosen,controller.signal).then(error=>{if(!(this.disposed||controller.signal.aborted||this.state.type!=="importing"||this.state.controller!==controller)){if(error)return this.state={type:"results",catalog,error},this.host.setFetchStatus("\xB7 import failed"),this.host.refresh();this.host.setFetchStatus(`\xB7 ${this.host.store.getModels(this.host.providerId).length} models`),this.state={type:"idle"},this.host.popPane()}}).catch(error=>{this.disposed||controller.signal.aborted||this.state.type!=="importing"||this.state.controller!==controller||(this.state={type:"results",catalog,error:error instanceof Error?error.message:String(error)},this.host.refresh())})}exitResults(){(this.state.type==="loading"||this.state.type==="importing")&&this.state.controller.abort(),this.state={type:"idle"},this.checked=new Set,this.host.popPane()}setFocused(focused){this.focused=focused,this.search.focused=focused&&(this.state.type==="results"||this.state.type==="importing")}isEditing(){return this.state.type==="results"||this.state.type==="importing"}dispose(){this.disposed=!0,(this.state.type==="loading"||this.state.type==="importing")&&this.state.controller.abort()}hints(){switch(this.state.type){case"loading":return keyHint("tui.select.cancel","cancel request");case"importing":case"results":return[rawKeyHint("type","filter"),keyHint("app.list.toggle","check"),keyHint("tui.select.confirm","import"),keyHint("tui.select.cancel","discard")].join(" ");case"error":return[keyHint("tui.select.confirm","retry"),keyHint("tui.select.cancel","back")].join(" ");default:return this.catalogUrl()?[keyHint("tui.select.confirm","fetch"),keyHint("tui.select.cancel","back")].join(" "):keyHint("tui.select.cancel","back")}}};function formatContext(model){let ctx=model.contextWindow>=1e3?`${Math.round(model.contextWindow/1024)}k`:String(model.contextWindow);return`${model.api} \xB7 ${ctx} ctx${model.reasoning?" \xB7 reasoning":""}`}var BuiltinCandidatesPane=class{constructor(host,model){this.crumb="Use Built-in Data",this.index=0,this.focused=!1,this.host=host,this.model=model,this.query=this.model.read().id??"",this.search=new ValueEditor({onCommit:()=>this.pickCurrent(),onCancel:()=>this.host.popPane()}),this.search.reset(this.query)}candidates(){return matchBuiltinModels(this.query,this.host.effectiveApi(this.model.read()))}render(width){let theme2=this.host.theme,lines=[this.search.renderLine(width)],matches=this.candidates();matches.length===0&&lines.push(renderInfoLine(theme2,"No builtin candidates \u2014 keep configuring manually.",width));for(let[rowIndex,match2]of matches.entries()){let{providerId,model}=match2.entry,label=`${providerId} / ${model.id}`,note=(match2.tier==="exact"?"exact \xB7 ":"")+`${model.name!==model.id?`${model.name} \xB7 `:""}${formatContext(model)}`;lines.push(renderPlainLine(theme2,label,{active:rowIndex===this.index,paneFocused:this.focused,note,width}))}return lines.push(renderInfoLine(theme2,"Candidates are a reference only; the configured id is never rewritten.",width)),lines}scrollWindow(){return{top:1,bottom:1,cursor:1+this.index}}pickCurrent(){let entry=this.candidates()[this.index]?.entry;entry&&this.host.pushPane(new BuiltinPreviewPane(this.host,this.model,entry))}handleInput(data){let kb=this.host.keybindings,count=this.candidates().length,next=moveSelection(kb,data,this.index,count);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.pickCurrent();return}let before=this.query;this.search.handleInput(data),this.query=this.search.value,this.query!==before&&(this.index=0),this.host.refresh()}setFocused(focused){this.focused=focused,this.search.focused=focused}isEditing(){return!0}hints(){return[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","preview"),keyHint("tui.select.cancel","back")].join(" ")}},BuiltinPreviewPane=class{constructor(host,model,reference){this.crumb="Use Built-in Data \xB7 preview",this.index=0,this.focused=!1,this.host=host,this.model=model,this.reference=reference;let current=model.read();this.snapshot=structuredClone(current),this.snapshotApi=host.effectiveApi(current),this.changes=computeFieldChanges(current,reference.model,host.effectiveApi(current)),this.checked=this.changes.map(change=>change.checked&&change.applicable)}rowCount(){return this.changes.length+1}render(width){let theme2=this.host.theme,lines=[renderInfoLine(theme2,`reference: ${this.reference.providerId} / ${this.reference.model.id}`,width)];for(let[rowIndex,change]of this.changes.entries()){let active=rowIndex===this.index,expandable=change.referenceDetails!==void 0,note=change.applicable?void 0:"\xB7 view only";if(lines.push(renderPlainLine(theme2,`${change.field}: ${change.currentText} \u2192 ${change.referenceText}`,{checked:change.applicable?this.checked[rowIndex]:void 0,active,paneFocused:this.focused,note,width})),this.expanded===rowIndex&&expandable){for(let detail of change.referenceDetails)lines.push(renderInfoLine(theme2,` ${detail}`,width));change.referenceHasTiers&&lines.push(renderInfoLine(theme2," reference has cost tiers \u2014 tiers are never imported.",width))}}return lines.push(renderPlainLine(theme2,"Apply Selected Fields",{active:this.index===this.changes.length,paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){let cursor=1+this.index;if(this.expanded!==void 0&&this.expanded<this.index){let change=this.changes[this.expanded];change.referenceDetails&&(cursor+=change.referenceDetails.length+(change.referenceHasTiers?1:0))}return{top:1,bottom:this.error?1:0,cursor}}handleInput(data){let kb=this.host.keybindings,next=moveSelection(kb,data,this.index,this.rowCount());if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.list.toggle")){let change=this.changes[this.index];if(!change)return;if(!change.applicable){this.expanded=this.expanded===this.index?void 0:this.index,this.host.refresh();return}this.checked[this.index]=!this.checked[this.index],this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){if(this.index===this.changes.length){this.apply();return}let change=this.changes[this.index];change.referenceDetails?this.expanded=this.expanded===this.index?void 0:this.index:change.applicable&&(this.checked[this.index]=!this.checked[this.index]),this.host.refresh();return}}apply(){let current=this.model.read();if(this.host.effectiveApi(current)!==this.snapshotApi){this.error="The API changed since this preview opened; reopen to continue.",this.host.refresh();return}if(!current.id||!jsonEquals(current,this.snapshot)){this.error="The model changed since this preview opened; reopen to continue.",this.host.refresh();return}let chosen=this.changes.filter((_,rowIndex)=>this.checked[rowIndex]&&this.changes[rowIndex].applicable);if(chosen.length===0){this.host.popPane();return}this.host.edits.batch(()=>{for(let change of chosen)for(let patch of change.patches)this.model.setField(patch.path,patch.value)}),this.host.notify(`Applied ${chosen.length} field${chosen.length===1?"":"s"} from ${this.reference.providerId} / ${this.reference.model.id}.`,"info"),this.host.popPane(),this.host.popPane()}setFocused(focused){this.focused=focused}hints(){return[keyHint("app.list.toggle","check"),keyHint("tui.select.confirm","details / apply"),keyHint("tui.select.cancel","back")].join(" ")}};var THINKING_VARIABLES=["thinking.enabled","thinking.effort","thinking.budget"],SESSION_AFFINITY=["openai","openai-nosession","openrouter"],OPENAI_COMPLETIONS_FIELDS=[{key:"supportsStore",kind:"boolean",note:"Accepts the `store` parameter"},{key:"supportsDeveloperRole",kind:"boolean",note:"Accepts `developer` role messages"},{key:"supportsReasoningEffort",kind:"boolean",note:"Accepts `reasoning_effort`"},{key:"supportsUsageInStreaming",kind:"boolean",note:"Streams usage chunks"},{key:"supportsFinishReason",kind:"boolean",note:"Reports finish reasons"},{key:"maxTokensField",kind:"enum",options:["max_completion_tokens","max_tokens"],note:"Token limit field name"},{key:"requiresToolResultName",kind:"boolean",note:"Tool results need a `name`"},{key:"requiresAssistantAfterToolResult",kind:"boolean",note:"Needs assistant message after tool results"},{key:"requiresThinkingAsText",kind:"boolean",note:"Thinking must be plain text"},{key:"requiresReasoningContentOnAssistantMessages",kind:"boolean",note:"Assistant messages must carry reasoning content"},{key:"thinkingFormat",kind:"enum",options:["openai","openrouter","together","baseten","deepseek","zai","qwen","chat-template","qwen-chat-template","string-thinking","ant-ling"],note:"Reasoning payload format"},{key:"chatTemplateKwargs",kind:"stringMap",note:"Extra chat-template kwargs (open dictionary)"},{key:"chatTemplateArgs",kind:"stringMap",note:"Extra chat-template args (open dictionary)"},{key:"cacheControlFormat",kind:"enum",options:["anthropic"],note:"Cache-control payload format"},{key:"openRouterRouting",kind:"json",note:"OpenRouter routing preferences object"},{key:"vercelGatewayRouting",kind:"json",note:"Vercel AI Gateway routing object"},{key:"supportsOpenAIGrammarTools",kind:"boolean",note:"Grammar-constrained tool calls"},{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"},{key:"sendSessionAffinityHeaders",kind:"boolean",note:"Send session affinity headers"},{key:"supportsMidConvoSystemMessages",kind:"boolean",note:"Accepts mid-conversation system messages"},{key:"supportsMidConvoToolAdditions",kind:"boolean",note:"System messages can add tools mid-conversation"},{key:"sessionAffinityFormat",kind:"enum",options:SESSION_AFFINITY,note:"Affinity header format"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"vllmPriority",kind:"number",note:"vLLM scheduling priority"},{key:"zaiToolStream",kind:"boolean",note:"Z.AI streaming tool calls"},{key:"supportsThinkingTokenBudget",kind:"boolean",note:"Enable the thinking-token budget alias"},{key:"thinkingTokenBudgetField",kind:"enum",options:["thinking_token_budget","thinking_budget","thinking_budget_tokens"],note:"Thinking budget field"}],OPENAI_RESPONSES_FIELDS=[{key:"supportsDeveloperRole",kind:"boolean",note:"Accepts `developer` role messages"},{key:"sessionAffinityFormat",kind:"enum",options:SESSION_AFFINITY,note:"Affinity header format"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"},{key:"supportsOpenAIGrammarTools",kind:"boolean",note:"Grammar-constrained tool calls"},{key:"supportsAdditionalTools",kind:"boolean",note:"Accepts additional hosted tools"},{key:"supportsToolSearch",kind:"boolean",note:"Tool search support"},{key:"supportsMaxOutputTokens",kind:"boolean",note:"Accepts `max_output_tokens`"},{key:"supportsExplicitPromptCacheMode",kind:"boolean",note:"Explicit prompt caching"}],ANTHROPIC_MESSAGES_FIELDS=[{key:"supportsEagerToolInputStreaming",kind:"boolean",note:"Streams tool input eagerly"},{key:"supportsLongCacheRetention",kind:"boolean",note:"Long-lived prompt cache retention"},{key:"sendSessionAffinityHeaders",kind:"boolean",note:"Send session affinity headers"},{key:"supportsCacheControlOnTools",kind:"boolean",note:"Cache control on tool definitions"},{key:"supportsTemperature",kind:"boolean",note:"Accepts `temperature`"},{key:"forceAdaptiveThinking",kind:"boolean",note:"Force adaptive thinking mode"},{key:"allowEmptySignature",kind:"boolean",note:"Tolerate empty thinking signatures"},{key:"supportsStrictTools",kind:"boolean",note:"Strict tool schemas"},{key:"supportsMidConvoEffort",kind:"boolean",note:"Effort changes mid-conversation"},{key:"supportsMidConvoSystemMessages",kind:"boolean",note:"Accepts mid-conversation system messages"},{key:"supportsMidConvoToolChanges",kind:"boolean",note:"Accepts mid-conversation tool changes"},{key:"allowedFallbackModels",kind:"json",note:"Server-side refusal fallback models"}],BEDROCK_FIELDS=[{key:"supportsStrictMode",kind:"boolean",note:"Strict tool schemas"}];function compatFieldsForApi(api){switch(api){case"openai-completions":return OPENAI_COMPLETIONS_FIELDS;case"openai-responses":return OPENAI_RESPONSES_FIELDS;case"azure-openai-responses":return OPENAI_RESPONSES_FIELDS.filter(field2=>["supportsDeveloperRole","supportsStrictMode","supportsOpenAIGrammarTools"].includes(field2.key));case"openai-codex-responses":return OPENAI_RESPONSES_FIELDS.filter(field2=>["supportsStrictMode","supportsOpenAIGrammarTools","supportsAdditionalTools","supportsToolSearch"].includes(field2.key));case"anthropic-messages":return ANTHROPIC_MESSAGES_FIELDS;case"bedrock-converse-stream":return BEDROCK_FIELDS;default:return[]}}function compatFieldFor(api,key){return compatFieldsForApi(api).find(field2=>field2.key===key)}var completionsCompatValidator=Compile(OpenAICompletionsCompatSchema);function validateCompletionsCompat(value){if(!completionsCompatValidator.Check(value))return completionsCompatValidator.Errors(value).slice(0,5).map(error=>{let path10=error.instancePath.replace(/^\//,"").replace(/\//g,"."),required=error.keyword==="required"?error.params.requiredProperties?.[0]:void 0;return`${required?path10?`${path10}.${required}`:required:path10||"root"}: ${error.message}`}).join("; ")}function validateJsonCompatValue(key,text){let value;try{value=JSON.parse(text)}catch{return"Value is not valid JSON."}return validateCompletionsCompat({[key]:value})}function validateChatTemplateKwarg(value){if(value!==null&&typeof value=="object"&&!Array.isArray(value)&&!Object.keys(value).every(key=>key==="$var"||key==="omitWhenOff"))return'Only "$var" and "omitWhenOff" are allowed.';let error=validateCompletionsCompat({chatTemplateKwargs:{value}});return error?`Value must be a scalar or valid $var reference: ${error}`:void 0}function compatObject(handle){let compat=handle.read().compat;return typeof compat=="object"&&compat!==null&&!Array.isArray(compat)?compat:{}}function scalarText(value){return value===null?"null":typeof value=="string"||typeof value=="number"||typeof value=="boolean"?String(value):JSON.stringify(value)??String(value)}var DICT_VALUE_KINDS=["string","number","boolean","null","$var"],VAR_OPTIONS=THINKING_VARIABLES,DictPane=class{constructor(host,model,dictKey){this.index=0,this.mode={type:"list"},this.focused=!1,this.host=host,this.model=model,this.dictKey=dictKey,this.crumb=`compat \xB7 ${dictKey}`}dict(){let value=compatObject(this.model)[this.dictKey];return typeof value=="object"&&value!==null&&!Array.isArray(value)?value:{}}entries(){return Object.entries(this.dict())}render(width){let theme2=this.host.theme,lines=[renderInfoLine(theme2,"free-form keys; values: string \xB7 number \xB7 boolean \xB7 null \xB7 $var",width)];if(this.mode.type!=="list")return lines.push(...this.renderMode(width)),this.error&&lines.push(renderInfoLine(theme2,this.error,width)),lines;let entries=this.entries();for(let[rowIndex,[key,value]]of entries.entries()){let active=rowIndex===this.index;lines.push(renderKeyValueLine(theme2,{keyLabel:key,valueText:scalarText(value),active,paneFocused:this.focused,width}))}return lines.push(renderPlainLine(theme2,"+ Add Entry",{active:this.index===entries.length&&this.mode.type==="list",paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){return this.mode.type!=="list"?{top:1,bottom:this.error?1:0}:{top:1,bottom:this.error?1:0,cursor:1+this.index}}renderMode(width){let theme2=this.host.theme,mode=this.mode;switch(mode.type){case"keyEdit":return[renderInfoLine(theme2,"new key:",width),mode.editor.renderLine(width)];case"kindPick":return[renderInfoLine(theme2,`${mode.key} \xB7 value kind`,width),...DICT_VALUE_KINDS.map((kind,kindIndex)=>renderPlainLine(theme2,kind,{active:kindIndex===mode.index,paneFocused:this.focused,width}))];case"valueEdit":return[renderInfoLine(theme2,`${mode.key} \xB7 ${mode.kind}`,width),renderKeyValueLine(theme2,{keyLabel:mode.key,active:!0,paneFocused:this.focused,editing:mode.editor,width})];case"boolPick":return[renderInfoLine(theme2,`${mode.key} \xB7 boolean`,width),...["true","false"].map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];case"varPick":return[renderInfoLine(theme2,`${mode.key} \xB7 $var`,width),...VAR_OPTIONS.map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];case"omitPick":return[renderInfoLine(theme2,`${mode.key} \xB7 omitWhenOff`,width),...["default","true","false"].map((option,optionIndex)=>renderPlainLine(theme2,option,{active:optionIndex===mode.index,paneFocused:this.focused,width}))];default:return[]}}handleInput(data){let kb=this.host.keybindings,mode=this.mode;switch(mode.type){case"keyEdit":case"valueEdit":if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;mode.editor.handleInput(data),this.host.refresh();return;case"kindPick":this.handlePick(data,mode,DICT_VALUE_KINDS.length,index3=>{let key=mode.key,kind=DICT_VALUE_KINDS[index3];this.startValueForKind(key,kind)});return;case"boolPick":this.handlePick(data,mode,2,index3=>{let key=mode.key;this.mode={type:"list"},this.writeEntry(key,index3===0)});return;case"varPick":this.handlePick(data,mode,VAR_OPTIONS.length,index3=>{let key=mode.key;this.mode={type:"omitPick",key,$var:VAR_OPTIONS[index3],index:0},this.host.refresh()});return;case"omitPick":this.handlePick(data,mode,3,index3=>{this.mode={type:"list"},this.writeEntry(mode.key,index3===0?{$var:mode.$var}:{$var:mode.$var,omitWhenOff:index3===1})});return;case"list":this.handleList(data);return}}handlePick(data,mode,count,choose2){let kb=this.host.keybindings,index3=mode.index;if(kb.matches(data,"tui.select.up")){mode.index=index3===0?count-1:index3-1,this.host.refresh();return}if(kb.matches(data,"tui.select.down")){mode.index=(index3+1)%count,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"list"},this.host.refresh();return}kb.matches(data,"tui.select.confirm")&&choose2(index3)}handleList(data){let kb=this.host.keybindings,rowCount=this.entries().length+1,next=moveSelection(kb,data,this.index,rowCount);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.provider.removeEntry")){let entry=this.entries()[this.index];if(!entry)return;this.model.setField(["compat",this.dictKey,entry[0]],DELETE),this.index=Math.max(0,Math.min(this.index,this.entries().length-1));return}if(kb.matches(data,"tui.select.confirm")||kb.matches(data,"app.list.toggle")){let entry=this.entries()[this.index];if(!entry){let editor2=new ValueEditor({onCommit:raw=>{let key2=raw.trim();if(!key2)return this.error="Key must be non-empty.",this.host.refresh();if(Object.hasOwn(this.dict(),key2))return this.error=`"${key2}" already exists.`,this.host.refresh();this.error=void 0,this.mode={type:"kindPick",key:key2,index:0},this.host.refresh()},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor2.focused=this.focused,this.mode={type:"keyEdit",editor:editor2},this.host.refresh();return}let[key,value]=entry;if(typeof value=="boolean"){this.writeEntry(key,!value);return}if(value===null)return;if(typeof value=="object"){let record=value;if(record.$var==="thinking.enabled"||record.$var==="thinking.effort"||record.$var==="thinking.budget"){this.mode={type:"omitPick",key,$var:record.$var,index:record.omitWhenOff===void 0?0:record.omitWhenOff?1:2},this.host.refresh();return}return}let kind=typeof value=="number"?"number":"string",editor=new ValueEditor({onCommit:raw=>this.commitScalar(key,kind,raw),onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor.beginTweak(String(value)),editor.focused=this.focused,this.mode={type:"valueEdit",key,kind,editor},this.host.refresh();return}}startValueForKind(key,kind){switch(kind){case"string":case"number":{let editor=new ValueEditor({onCommit:raw=>this.commitScalar(key,kind,raw),onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});editor.focused=this.focused,this.mode={type:"valueEdit",key,kind,editor},this.host.refresh();return}case"boolean":this.mode={type:"boolPick",key,index:0},this.host.refresh();return;case"null":this.mode={type:"list"},this.writeEntry(key,null);return;case"$var":this.mode={type:"varPick",key,index:0},this.host.refresh();return}}commitScalar(key,kind,raw){let value=raw;if(kind==="number"){let parsed=Number(raw.trim());if(!Number.isFinite(parsed)){this.error=`${key} must be a number.`,this.host.refresh();return}value=parsed}let invalid=validateChatTemplateKwarg(value);if(invalid){this.error=invalid,this.host.refresh();return}this.error=void 0,this.mode={type:"list"},this.writeEntry(key,value)}writeEntry(key,value){let invalid=validateChatTemplateKwarg(value);if(invalid){this.error=invalid,this.host.refresh();return}this.model.setField(["compat",this.dictKey,key],value)}setFocused(focused){this.focused=focused,(this.mode.type==="keyEdit"||this.mode.type==="valueEdit")&&(this.mode.editor.focused=focused)}isEditing(){return this.mode.type==="keyEdit"||this.mode.type==="valueEdit"}hints(){switch(this.mode.type){case"keyEdit":case"valueEdit":return[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" ");case"list":return[keyHint("tui.select.confirm","edit / add"),keyHint("app.provider.removeEntry","remove"),keyHint("tui.select.cancel","back")].join(" ");default:return[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","cancel")].join(" ")}}};function compatObject2(handle){let compat=handle.read().compat;return typeof compat=="object"&&compat!==null&&!Array.isArray(compat)?compat:{}}function scalarText2(value){return value===null?"null":typeof value=="string"||typeof value=="number"||typeof value=="boolean"?String(value):JSON.stringify(value)??String(value)}var CompatPane=class{constructor(host,model){this.crumb="compat",this.index=0,this.mode={type:"list"},this.focused=!1,this.host=host,this.model=model}entries(){return Object.entries(compatObject2(this.model))}effectiveApi(){return this.host.effectiveApi(this.model.read())}rowCount(){return this.entries().length+1}render(width){let theme2=this.host.theme,api=this.effectiveApi(),lines=[renderInfoLine(theme2,api?`effective api: ${api}`:"effective api: unresolved \u2014 set API Type",width)];if(this.mode.type==="chooseValue"){let mode=this.mode;lines.push(renderKeyValueLine(theme2,{keyLabel:mode.key,valueText:"choose a value",active:!0,paneFocused:this.focused,width}));for(let[index3,option]of mode.options.entries())lines.push(renderPlainLine(theme2,option,{active:index3===mode.index,paneFocused:this.focused,width}));return lines}let known=api?compatFieldsForApi(api):[],entries=this.entries(),editingKey=this.mode.type==="list"?void 0:this.mode.key;editingKey!==void 0&&!entries.some(([key])=>key===editingKey)&&entries.push([editingKey,void 0]),known.length===0&&entries.length===0&&lines.push(renderInfoLine(theme2,`No compat fields are known for ${api??"this api"}.`,width));for(let[rowIndex,[key,value]]of entries.entries()){let active=rowIndex===this.index,field2=api?compatFieldFor(api,key):void 0,editing=this.mode.type==="editValue"&&this.mode.key===key?this.mode.editor:void 0,note=field2?void 0:`\xB7 not used by ${api??"this api"}`;lines.push(renderKeyValueLine(theme2,{keyLabel:key,valueText:value===void 0?"not set":scalarText2(value),active,paneFocused:this.focused,editing,note,width}))}return lines.push(renderPlainLine(theme2,"+ Add Entry",{active:this.index===entries.length&&this.mode.type==="list",paneFocused:this.focused,width})),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}scrollWindow(){return this.mode.type==="chooseValue"?{top:1,cursor:2+this.mode.index}:{top:1,bottom:this.error?1:0,cursor:1+this.index}}handleInput(data){let kb=this.host.keybindings;if(this.mode.type==="editValue"){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.mode.editor.handleInput(data),this.host.refresh();return}if(this.mode.type==="chooseValue"){let mode=this.mode;if(kb.matches(data,"tui.select.up")){this.mode={...mode,index:mode.index===0?mode.options.length-1:mode.index-1},this.host.refresh();return}if(kb.matches(data,"tui.select.down")){this.mode={...mode,index:(mode.index+1)%mode.options.length},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"list"},this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){let option=mode.options[mode.index];this.mode={type:"list"},this.writeValue(mode.key,this.parseChosen(option))}return}let next=moveSelection(kb,data,this.index,this.rowCount());if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"app.provider.removeEntry")){let entry=this.entries()[this.index];if(!entry)return;let[key]=entry;this.model.setField(["compat",key],DELETE),this.index=Math.min(this.index,this.rowCount()-2<0?0:this.rowCount()-2);return}if(kb.matches(data,"app.list.toggle")||kb.matches(data,"tui.select.confirm")){this.activateRow();return}}activateRow(){let entries=this.entries();if(this.index===entries.length){let api=this.effectiveApi();if(!api){this.fail("Set API Type first \u2014 compat fields depend on the effective api.");return}if(compatFieldsForApi(api).length===0){this.fail(`No compat fields are known for ${api}.`);return}let taken=new Set(entries.map(([key2])=>key2));this.host.pushPane(new CompatKeyPickerPane(this.host,api,taken,key2=>this.beginValueEntry(key2)));return}let[key,value]=entries[this.index],field2=this.effectiveApi()?compatFieldFor(this.effectiveApi(),key):void 0;if(!field2){this.beginJsonEdit(key,value);return}switch(field2.kind){case"boolean":this.writeValue(key,value!==!0);return;case"enum":this.mode={type:"chooseValue",key,options:field2.options,index:0},this.host.refresh();return;case"number":this.beginTextEdit(key,value);return;case"json":this.beginJsonEdit(key,value);return;case"stringMap":this.host.pushPane(new DictPane(this.host,this.model,key));return}}beginValueEntry(key){let api=this.effectiveApi(),field2=compatFieldFor(api,key);switch(field2.kind){case"boolean":this.mode={type:"chooseValue",key,options:["true","false"],index:0},this.host.refresh();return;case"enum":this.mode={type:"chooseValue",key,options:field2.options,index:0},this.host.refresh();return;case"number":this.beginTextEdit(key,void 0);return;case"json":this.beginJsonEdit(key,void 0);return;case"stringMap":this.writeValue(key,{}),this.host.pushPane(new DictPane(this.host,this.model,key));return}}beginTextEdit(key,current){let editor=new ValueEditor({onCommit:raw=>{let parsed=Number(raw.trim());if(!Number.isFinite(parsed))return this.error=`${key} must be a number.`,this.host.refresh();this.error=void 0,this.mode={type:"list"},this.writeValue(key,parsed)},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});current!==void 0&&editor.beginTweak(String(current)),editor.focused=this.focused,this.mode={type:"editValue",key,editor},this.host.refresh()}beginJsonEdit(key,current){let editor=new ValueEditor({onCommit:raw=>{let text=raw.trim();if(!text){this.mode={type:"list"},this.writeValue(key,DELETE);return}let shapeError=validateJsonCompatValue(key,text);if(shapeError)return this.error=shapeError,this.host.refresh();this.error=void 0,this.mode={type:"list"},this.writeValue(key,JSON.parse(text))},onCancel:()=>{this.mode={type:"list"},this.error=void 0,this.host.refresh()}});current!==void 0&&editor.beginTweak(JSON.stringify(current)),editor.focused=this.focused,this.mode={type:"editValue",key,editor},this.host.refresh()}parseChosen(option){return option==="true"?!0:option==="false"?!1:option}writeValue(key,value){this.model.setField(["compat",key],value)}fail(message){this.error=message,this.host.refresh()}setFocused(focused){this.focused=focused,this.mode.type==="editValue"&&(this.mode.editor.focused=focused)}isEditing(){return this.mode.type==="editValue"}hints(){return this.mode.type==="editValue"?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):this.mode.type==="chooseValue"?[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","set"),keyHint("tui.select.cancel","cancel")].join(" "):[keyHint("tui.select.confirm","edit"),keyHint("app.list.toggle","toggle"),keyHint("app.provider.removeEntry","remove"),keyHint("tui.select.cancel","back")].join(" ")}},CompatKeyPickerPane=class{constructor(host,api,taken,onPick){this.crumb="compat \xB7 new entry",this.query="",this.index=0,this.focused=!1,this.host=host,this.api=api,this.taken=taken,this.onPick=onPick,this.editor=new ValueEditor({onCommit:()=>this.pickCurrent(),onCancel:()=>this.host.popPane()})}candidates(){let available=compatFieldsForApi(this.api).filter(field2=>!this.taken.has(field2.key)),query=this.query.trim();return query?fuzzyFilter(available,query,field2=>`${field2.key} ${field2.note??""}`):available}render(width){let theme2=this.host.theme,lines=[this.editor.renderLine(width)],candidates=this.candidates();candidates.length===0&&lines.push(renderInfoLine(theme2,"No remaining known fields.",width));for(let[rowIndex,field2]of candidates.entries())lines.push(renderPlainLine(theme2,field2.key,{active:rowIndex===this.index,paneFocused:this.focused,note:field2.note?`\xB7 ${field2.kind} \u2014 ${truncate3(field2.note,30)}`:`\xB7 ${field2.kind}`,width}));return lines}scrollWindow(){return{top:1,cursor:1+this.index}}pickCurrent(){let field2=this.candidates()[this.index];field2&&(this.host.popPane(),this.onPick(field2.key))}handleInput(data){let kb=this.host.keybindings;if(kb.matches(data,"tui.select.up")){let count=this.candidates().length;count>0&&(this.index=this.index===0?count-1:this.index-1),this.host.refresh();return}if(kb.matches(data,"tui.select.down")){let count=this.candidates().length;count>0&&(this.index=(this.index+1)%count),this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.pickCurrent();return}let before=this.query;this.editor.handleInput(data),this.query=this.editor.value,this.query!==before&&(this.index=0),this.host.refresh()}setFocused(focused){this.focused=focused,this.editor.focused=focused}isEditing(){return!0}hints(){return[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","choose"),keyHint("tui.select.cancel","back")].join(" ")}};function baseUrlHint(api){switch(api){case"openai-responses":case"openai-completions":case"openai-codex-responses":return"baseUrl includes the version path, e.g. https://api.openai.com/v1";case"anthropic-messages":return"baseUrl is the bare origin \u2014 /v1/messages is added automatically";case"mistral-conversations":return"baseUrl is the bare origin \u2014 /v1 is added automatically";case"google-generative-ai":return"baseUrl includes the version path, e.g. https://generativelanguage.googleapis.com/v1beta";default:return}}function validateBaseUrlValue(value){let url;try{url=new URL(value)}catch{return"baseUrl must be a valid URL."}if(url.protocol!=="http:"&&url.protocol!=="https:")return`Unsupported protocol: ${url.protocol}`;if(url.username||url.password||url.hash)return"baseUrl must not contain credentials or a fragment."}var ApiAuthPane=class{constructor(host,registry){this.rows=["baseUrl","apiKey","apiType"],this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.registry=registry}provider(){return this.host.store.getProvider(this.host.providerId)}scrollWindow(){return{cursor:this.index,bottom:this.bottomNoteCount()}}bottomNoteCount(){let status=this.registry.getProviderAuthStatus(this.host.providerId),hint=baseUrlHint(this.provider()?.api);return(this.edit.error?1:0)+(status.configured?1:0)+1+(hint?1:0)}render(width){let theme2=this.host.theme,provider=this.provider(),lines=[];for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index,value=provider?.[row==="apiType"?"api":row];lines.push(renderKeyValueLine(theme2,{keyLabel:row==="apiType"?"API Type":row,valueText:value?row==="apiKey"?maskApiKey(value):value:"not set",unset:!value,active,paneFocused:this.focused,editing:row==="apiType"?void 0:this.edit.editor(row),width}))}this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2))));let status=this.registry.getProviderAuthStatus(this.host.providerId);status.configured&&status.source==="stored"?lines.push(renderInfoLine(theme2,"A stored credential (auth.json) takes precedence over the apiKey here.",width)):status.configured&&status.source==="environment"&&lines.push(renderInfoLine(theme2,`An environment variable (${status.label??"env"}) currently provides the key.`,width)),lines.push(renderInfoLine(theme2,"Values are stored raw; $VAR / !command references resolve at request time.",width));let hint=baseUrlHint(provider?.api);return hint&&lines.push(renderInfoLine(theme2,hint,width)),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.rows[this.index]==="apiType"?this.host.pushPane(createProviderApiPane(this.host)):this.beginEdit("tweak");return}if(isPrintableInput(data)){if(this.rows[this.index]==="apiType")return;this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let row=this.rows[this.index];row!=="apiType"&&this.edit.begin(row,this.provider()?.[row]??"",mode,this.focused,value=>this.commit(row,value),firstData)}commit(row,raw){let value=raw.trim();if(row==="baseUrl"&&value){let invalid=validateBaseUrlValue(value);if(invalid)return invalid}if(row==="baseUrl"&&!value){let builtin=builtinDefaults(this.host.providerId).baseUrl!==void 0,modelsCovered=this.host.store.getModels(this.host.providerId).every(model=>model.baseUrl!==void 0);if(!builtin&&!modelsCovered&&this.host.store.getModels(this.host.providerId).length>0)return"baseUrl cannot be removed while models rely on it."}this.host.edits.setProviderField([row],value===""?DELETE:value)}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("tui.select.cancel","back")].join(" ")}};function createProviderApiPane(host){let current=()=>host.store.getProvider(host.providerId)?.api;return new ChoicePane(host,"API Type",{current,choices:()=>{let fallback=builtinDefaults(host.providerId).api,label=fallback?`not set (built-in default: ${fallback})`:"not set (models define their own)",values=[void 0,...API_TYPES],value=current();return value&&!values.includes(value)&&values.push(value),values.map(value2=>({value:value2,label:value2??label,dim:value2===void 0}))},choose:api=>{if(api===void 0){let uncovered=host.store.getModels(host.providerId).filter(model=>!model.api&&!builtinDefaults(host.providerId,model.id).api);if(uncovered.length)return uncovered.length===1?`Model "${uncovered[0].id}" resolves its API from here \u2014 give it a model-level API first.`:`${uncovered.length} ${plural(uncovered.length,"model")} resolve their API from here \u2014 give them model-level APIs first.`}host.edits.setProviderField(["api"],api??DELETE)}})}var REASONING_OPTIONS=[{label:"true",value:!0},{label:"false",value:!1},{label:"default (false)",value:void 0}];function createReasoningPane(host,model){return new ChoicePane(host,"reasoning",{current:()=>model.read().reasoning,choices:()=>REASONING_OPTIONS.map(option=>({...option,dim:option.value===void 0})),choose:value=>{model.setField(["reasoning"],value===void 0?DELETE:value)}})}var InputTypesPane=class{constructor(host,model){this.crumb="input",this.index=0,this.focused=!1,this.host=host,this.model=model}selected(){return new Set(this.model.read().input??["text"])}render(width){let theme2=this.host.theme,selected=this.selected(),lines=INPUT_TYPES.map((type,rowIndex)=>renderPlainLine(theme2,type,{checked:selected.has(type),active:rowIndex===this.index,paneFocused:this.focused,width}));return this.model.read().input===void 0&&lines.push(renderInfoLine(theme2,"Not set \u2014 the runtime default is [text].",width)),this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings,next=moveSelection(kb,data,this.index,INPUT_TYPES.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"app.list.toggle")){let type=INPUT_TYPES[this.index],selected=this.selected();if(selected.has(type)){if(selected.size===1){this.error="At least one input type must stay selected.",this.host.refresh();return}selected.delete(type)}else selected.add(type);this.error=void 0;let next2=INPUT_TYPES.filter(entry=>selected.has(entry));this.model.setField(["input"],[...next2]);return}if(kb.matches(data,"tui.select.confirm")||kb.matches(data,"tui.select.cancel")){this.host.popPane();return}}setFocused(focused){this.focused=focused}hints(){return[keyHint("app.list.toggle","toggle"),keyHint("tui.select.confirm","done"),keyHint("tui.select.cancel","back")].join(" ")}},COST_RATES=["input","output","cacheRead","cacheWrite"],CostPane=class{constructor(host,model){this.crumb="cost",this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.model=model}cost(){let cost=this.model.read().cost;if(cost)return{input:cost.input,output:cost.output,cacheRead:cost.cacheRead,cacheWrite:cost.cacheWrite}}render(width){let theme2=this.host.theme,cost=this.cost(),lines=[];for(let[rowIndex,rate]of COST_RATES.entries()){let value=cost?.[rate];lines.push(renderKeyValueLine(theme2,{keyLabel:rate,valueText:value===void 0?"0 (default)":`$${value} / M tokens`,unset:value===void 0,active:rowIndex===this.index,paneFocused:this.focused,editing:this.edit.editor(rate),width}))}let tiers=this.model.read().cost?.tiers;return tiers&&tiers.length>0&&lines.push(renderInfoLine(theme2,`tiers: ${tiers.length} (read-only; kept as-is)`,width)),this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,COST_RATES.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.beginEdit("tweak");return}if(isPrintableInput(data)){this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let rate=COST_RATES[this.index],current=this.cost()?.[rate];this.edit.begin(rate,current===void 0?"":String(current),mode,this.focused,value=>this.commit(rate,value),firstData)}commit(rate,raw){let value=raw.trim(),parsed=value===""?0:Number(value);if(!Number.isFinite(parsed)||parsed<0)return"cost rates must be finite non-negative numbers.";this.model.read().cost?this.model.setField(["cost",rate],parsed):this.model.setField(["cost"],{input:0,output:0,cacheRead:0,cacheWrite:0,[rate]:parsed})}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit"),keyHint("tui.select.cancel","back")].join(" ")}},ModelSpecificApiPane=class{constructor(host,model){this.crumb="Model-Specific API",this.rows=["baseUrl","apiType"],this.index=0,this.focused=!1,this.host=host,this.edit=new InlineEdit(()=>host.refresh()),this.model=model}inherited(key){let provider=this.host.store.getProvider(this.host.providerId),providerValue=key==="api"?provider?.api:provider?.baseUrl;if(providerValue)return{value:providerValue,via:"provider"};let current=this.model.read(),effective=key==="api"?this.host.effectiveApi(current):this.host.effectiveBaseUrl(current);return effective?{value:effective,via:"built-in"}:void 0}render(width){let theme2=this.host.theme,current=this.model.read(),lines=[];for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index,key=row==="apiType"?"api":row,override=current[key],inherited=override?void 0:this.inherited(key);lines.push(renderKeyValueLine(theme2,{keyLabel:row==="apiType"?"API Type":row,valueText:override??inherited?.value??"not set",unset:!override,note:inherited?`\xB7 ${inherited.via}`:void 0,active,paneFocused:this.focused,editing:row==="baseUrl"?this.edit.editor(row):void 0,width}))}this.edit.error&&lines.push(theme2.fg("error",truncate3(this.edit.error,Math.max(10,width-2))));let hint=baseUrlHint(this.host.effectiveApi(current));return hint&&lines.push(renderInfoLine(theme2,hint,width)),lines}handleInput(data){let kb=this.host.keybindings;if(this.edit.handleInput(data,kb))return;let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}if(kb.matches(data,"tui.select.confirm")){this.rows[this.index]==="apiType"?this.host.pushPane(createModelApiPane(this.host,this.model)):this.beginEdit("tweak");return}if(isPrintableInput(data)){if(this.rows[this.index]==="apiType")return;this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let base=this.model.read().baseUrl??this.inherited("baseUrl")?.value??"";this.edit.begin("baseUrl",base,mode,this.focused,value=>this.commit(value),firstData)}commit(raw){let value=raw.trim();if(value){let invalid=validateBaseUrlValue(value);if(invalid)return invalid}this.model.setField(["baseUrl"],value===""?DELETE:value)}setFocused(focused){this.focused=focused,this.edit.setFocused(focused)}isEditing(){return this.edit.editing}hints(){return this.edit.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("tui.select.cancel","back")].join(" ")}};function createModelApiPane(host,model){let fallback=()=>{let provider=host.store.getProvider(host.providerId);return provider?.api??builtinDefaults(host.providerId,model.read().id,provider?.api).api};return new ChoicePane(host,"API Type",{current:()=>model.read().api,choices:()=>{let providerApi=host.store.getProvider(host.providerId)?.api,inherited=fallback(),label=providerApi?`provider: ${providerApi}`:inherited?`built-in: ${inherited}`:"no provider or built-in API",values=[void 0,...API_TYPES],current=model.read().api;return current&&!values.includes(current)&&values.push(current),values.map(value=>({value,label:value??label,dim:value===void 0}))},choose:value=>{if(value===void 0&&!fallback())return"Nothing to inherit \u2014 pick an API.";model.setField(["api"],value??DELETE)}})}var ThinkingMapPane=class{constructor(host,model){this.crumb="thinkingLevelMap",this.mode={type:"levels"},this.index=0,this.focused=!1,this.host=host,this.model=model}map(){return this.model.read().thinkingLevelMap??{}}render(width){let theme2=this.host.theme,lines=[];if(this.model.read().reasoning!==!0&&lines.push(renderInfoLine(theme2,"reasoning is not true \u2014 the map is stored but currently has no effect.",width)),this.mode.type==="levels")for(let[rowIndex,level]of THINKING_LEVELS3.entries()){let value=this.map()[level],status=value===void 0?"default":value===null?"null (hidden)":value;lines.push(renderKeyValueLine(theme2,{keyLabel:level,valueText:status,unset:value===void 0,active:rowIndex===this.index,paneFocused:this.focused,width}))}else if(this.mode.type==="choice"){lines.push(renderInfoLine(theme2,`${this.mode.level} \xB7 mapping`,width));for(let[choiceIndex,label]of["String target (provider effort)","Hidden (null)","Default (remove key)"].entries())lines.push(renderPlainLine(theme2,label,{active:choiceIndex===this.mode.index,paneFocused:this.focused,width}))}else lines.push(renderInfoLine(theme2,`${this.mode.level} \xB7 non-empty provider effort`,width)),lines.push(renderKeyValueLine(theme2,{keyLabel:this.mode.level,active:!0,paneFocused:this.focused,editing:this.editor,width}));return this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),lines}handleInput(data){let kb=this.host.keybindings;if(this.mode.type==="target"){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.editor?.handleInput(data),this.host.refresh();return}if(this.mode.type==="choice"){if(kb.matches(data,"tui.select.up")){this.mode={...this.mode,index:this.mode.index===0?2:this.mode.index-1},this.host.refresh();return}if(kb.matches(data,"tui.select.down")){this.mode={...this.mode,index:(this.mode.index+1)%3},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.mode={type:"levels"},this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){let{level,index:index3}=this.mode;if(index3===0){let editor=new ValueEditor({onCommit:value=>{let target=value.trim();if(!target)return this.error="A string target must be non-empty; use Hidden for null.",this.host.refresh();this.error=void 0,this.mode={type:"levels"},this.editor=void 0,this.model.setField(["thinkingLevelMap",level],target)},onCancel:()=>{this.editor=void 0,this.mode={type:"levels"},this.host.refresh()}});this.editor=editor,editor.focused=this.focused;let existing=this.map()[level];typeof existing=="string"&&editor.beginTweak(existing),this.mode={type:"target",level},this.host.refresh();return}this.mode={type:"levels"},this.model.setField(["thinkingLevelMap",level],index3===1?null:DELETE);return}return}let next=moveSelection(kb,data,this.index,THINKING_LEVELS3.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.confirm")){this.mode={type:"choice",level:THINKING_LEVELS3[this.index],index:0},this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){this.host.popPane();return}}setFocused(focused){this.focused=focused,this.editor&&(this.editor.focused=focused&&this.mode.type==="target")}isEditing(){return this.mode.type==="target"}hints(){return this.mode.type==="target"?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","back")].join(" "):[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm",this.mode.type==="choice"?"set":"edit"),keyHint("tui.select.cancel","back")].join(" ")}};var DEFAULT_CONTEXT_WINDOW2=128e3,DEFAULT_MAX_TOKENS2=16384,ModelFieldsPane=class{constructor(host,model){this.index=0,this.focused=!1,this.renaming=!1,this.disposed=!1,this.host=host,this.model=model;let rows=[{kind:"text",key:"id"},{kind:"text",key:"name"},{kind:"reasoning"},{kind:"subpage",key:"thinkingLevelMap"},{kind:"subpage",key:"input"},{kind:"subpage",key:"cost"},{kind:"number",key:"contextWindow"},{kind:"number",key:"maxTokens"},{kind:"subpage",key:"compat"}];model.isDraft?rows.push({kind:"modelApi"}):rows.push({kind:"builtin"},{kind:"modelApi"},{kind:"deleteModel"}),this.rows=rows}startEditingId(){this.index=0,this.beginEdit("overwrite")}draftEmpty(){return this.model.isDraft&&Object.keys(this.model.read()).length===0}render(width){let theme2=this.host.theme,current=this.model.read(),lines=[],api=this.host.effectiveApi(current);lines.push(renderInfoLine(theme2,api?`api: ${api}${current.api?" (model)":""}`:"api: none resolved \u2014 see Model-Specific API below",width));for(let[rowIndex,row]of this.rows.entries()){let active=rowIndex===this.index;lines.push(this.renderRow(row,current,active,width))}return this.error&&lines.push(theme2.fg("error",truncate3(this.error,Math.max(10,width-2)))),this.renaming&&lines.push(renderInfoLine(theme2,"Saving model id\u2026",width)),lines}scrollWindow(){return{top:1,bottom:(this.error?1:0)+(this.renaming?1:0),cursor:1+this.index}}renderRow(row,current,active,width){let theme2=this.host.theme,editing=this.editingRow===row?this.editing:void 0;switch(row.kind){case"text":{let value=current[row.key],unsetText=row.key==="id"?"required":"falls back to id";return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:value??`not set (${unsetText})`,unset:!value,active,paneFocused:this.focused,editing,width})}case"reasoning":{let value=current.reasoning;return renderKeyValueLine(theme2,{keyLabel:"reasoning",valueText:value===void 0?"false (default)":String(value),unset:value===void 0,active,paneFocused:this.focused,width})}case"subpage":{let summary=this.subpageSummary(row.key,current);return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:summary.text,unset:summary.unset,active,paneFocused:this.focused,width})}case"number":{let value=current[row.key],fallback=row.key==="contextWindow"?DEFAULT_CONTEXT_WINDOW2:DEFAULT_MAX_TOKENS2;return renderKeyValueLine(theme2,{keyLabel:row.key,valueText:value===void 0?`${fallback} (default)`:String(value),unset:value===void 0,active,paneFocused:this.focused,editing,width})}case"builtin":{let id=current.id,count=id?matchBuiltinModels(id,this.host.effectiveApi(current)).length:0;return renderKeyValueLine(theme2,{valueText:"Use Built-in Data",active,paneFocused:this.focused,note:id?`\xB7 ${count} ${plural(count,"candidate")}`:"\xB7 set id first",width})}case"modelApi":return renderKeyValueLine(theme2,{valueText:"Model-Specific API",active,paneFocused:this.focused,note:`\xB7 ${this.modelApiSummary(current)}`,width});case"deleteModel":return renderKeyValueLine(theme2,{valueText:"Delete Model",active,paneFocused:this.focused,width})}}modelApiSummary(current){let overrides=[current.baseUrl?"baseUrl":"",current.api?"API Type":""].filter(Boolean);if(overrides.length>0)return overrides.join(" + ");let provider=this.host.store.getProvider(this.host.providerId);return provider?.api||provider?.baseUrl?"provider defaults":this.host.effectiveApi(current)||this.host.effectiveBaseUrl(current)?"built-in defaults":"not set"}subpageSummary(key,current){switch(key){case"thinkingLevelMap":{let map=current.thinkingLevelMap,count=map?Object.keys(map).length:0;return count>0?{text:`${count} ${plural(count,"mapping")}`,unset:!1}:{text:"default",unset:!0}}case"input":return current.input?{text:`[${current.input.join(", ")}]`,unset:!1}:{text:"[text] (default)",unset:!0};case"cost":{let cost=current.cost;return cost?{text:`$${cost.input} / $${cost.output} in/out`,unset:!1}:{text:"all 0 (default)",unset:!0}}case"compat":{let compat=current.compat,count=compat?Object.keys(compat).length:0;if(count>0)return{text:`${count} ${count===1?"entry":"entries"}`,unset:!1};let inherited=this.host.store.getProvider(this.host.providerId)?.compat,inheritedCount=inherited?Object.keys(inherited).length:0;return inheritedCount>0?{text:`${inheritedCount} from provider`,unset:!0}:{text:"none",unset:!0}}}}handleInput(data){if(this.renaming||this.disposed)return;let kb=this.host.keybindings;if(this.editing){if(kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.down"))return;this.editing.handleInput(data),this.host.refresh();return}let next=moveSelection(kb,data,this.index,this.rows.length);if(next!==void 0){this.index=next,this.host.refresh();return}if(kb.matches(data,"tui.select.cancel")){if(!this.model.isDraft){this.host.popPane();return}if(this.draftEmpty()){this.host.discardModelDraft();return}let label=this.model.read().name??this.model.read().id??"New Model";this.host.confirm(`Discard the new model "${label}"? Its fields are not saved.`,"Discard Model",()=>this.host.discardModelDraft());return}if(kb.matches(data,"app.list.toggle")){this.toggleRow();return}if(kb.matches(data,"tui.select.confirm")){this.enterRow();return}if(isPrintableInput(data)){this.overwriteRow(data);return}}toggleRow(){if(this.rows[this.index].kind!=="reasoning")return;let current=this.model.read().reasoning;this.model.setField(["reasoning"],current!==!0)}enterRow(){let row=this.rows[this.index];switch(row.kind){case"text":case"number":this.beginEdit("tweak");return;case"reasoning":this.host.pushPane(createReasoningPane(this.host,this.model));return;case"subpage":this.pushSubpage(row.key);return;case"modelApi":this.host.pushPane(new ModelSpecificApiPane(this.host,this.model));return;case"builtin":{if(!this.model.read().id){this.host.notify("Set the model id first.","warning");return}this.host.pushPane(new BuiltinCandidatesPane(this.host,this.model));return}case"deleteModel":{let id=this.model.read().id;if(!id)return;if(this.host.isCurrentModel(id)){this.host.notify("The current model cannot be deleted; switch models with /model first.","error");return}this.host.confirm(`Delete model "${id}" from ${this.host.providerId}?`,"Delete Model",()=>{this.host.edits.removeModel(id),this.host.onModelRemoved(id)});return}}}overwriteRow(data){let row=this.rows[this.index];if(row.kind==="text"||row.kind==="number"){this.beginEdit("overwrite",data);return}}beginEdit(mode,firstData){let row=this.rows[this.index];if(row.kind!=="text"&&row.kind!=="number")return;let current=this.model.read()[row.key],editor=new ValueEditor({onCommit:value=>this.commitText(row,value),onCancel:()=>{if(this.editing=void 0,this.editingRow=void 0,this.error=void 0,this.draftEmpty()){this.host.discardModelDraft();return}this.host.refresh()}});this.editing=editor,this.editingRow=row,editor.focused=this.focused,mode==="overwrite"?editor.beginOverwrite(firstData):editor.beginTweak(current===void 0?"":String(current)),this.host.refresh()}commitText(row,raw){let value=raw.trim(),finish=error=>{if(this.error=error,error){this.host.refresh();return}this.editing=void 0,this.editingRow=void 0,this.host.refresh()};if(row.key==="id"){if(!value){finish("id is required and cannot be empty.");return}if(this.model.isDraft){this.model.setField(["id"],value),finish(this.host.commitModelDraft());return}let current=this.model.read().id;if(!current){finish("Missing current id.");return}if(value===current){finish();return}if(this.host.isCurrentModel(current)){finish("The current model's id cannot be renamed; switch models with /model first.");return}if(this.host.store.getModel(this.host.providerId,value)){finish(`Model "${value}" already exists.`);return}this.renaming=!0,this.host.refresh(),this.model.rename(value).then(error=>{this.renaming=!1,this.disposed||finish(error)},error=>{this.renaming=!1,this.disposed||finish(error instanceof Error?error.message:String(error))});return}if(row.key==="name"){this.model.setField(["name"],value===""?DELETE:value),finish();return}if(value===""){this.model.setField([row.key],DELETE),finish();return}let parsed=Number(value);if(!Number.isSafeInteger(parsed)||parsed<=0){finish(`${row.key} must be a positive integer.`);return}this.model.setField([row.key],parsed),finish()}pushSubpage(key){switch(key){case"thinkingLevelMap":this.host.pushPane(new ThinkingMapPane(this.host,this.model));return;case"input":this.host.pushPane(new InputTypesPane(this.host,this.model));return;case"cost":this.host.pushPane(new CostPane(this.host,this.model));return;case"compat":this.host.pushPane(new CompatPane(this.host,this.model));return}}setFocused(focused){this.focused=focused,this.editing&&(this.editing.focused=focused)}isEditing(){return this.editing!==void 0||this.renaming}dispose(){this.disposed=!0}hints(){return this.editing?[keyHint("tui.input.submit","save"),keyHint("tui.select.cancel","cancel")].join(" "):[rawKeyHint("type","overwrite"),keyHint("tui.select.confirm","edit / open"),keyHint("app.list.toggle","toggle"),keyHint("tui.select.cancel",this.model.isDraft?"discard":"back")].join(" ")}};var LEFT_WIDTH_MIN=16,LEFT_WIDTH_MAX=40,BODY_ROWS=14,DOUBLE_PANE_MIN_WIDTH=72,MIN_WIDTH=32;function padTo(line,width){let missing=width-visibleWidth(line);return missing>0?line+" ".repeat(missing):line}function leftItemKey(item){if(!item)return"";switch(item.kind){case"model":return`model:${item.modelId}`;case"section":return`section:${item.label}`;default:return item.kind}}var ProviderEditorScreen=class{constructor(tui,theme2,keybindings,done,options){this.leftItems=[],this.leftIndex=0,this.focusPane="left",this.stack=[],this.disposed=!1,this._focused=!1,this.tui=tui,this.theme=theme2,this.keybindings=keybindings,this.done=done,this.options=options,this.edits=new ProviderEdits(options.store,options.providerId,options.refresher,()=>this.refresh()),this.host=this.createHost(),this.rebuildLeftItems(),this.leftIndex=this.selectableIndex(0),this.resetRightStack()}get focused(){return this._focused}set focused(value){this._focused=value,this.topPane()?.setFocused(value&&this.focusPane==="right")}invalidate(){this.cache=void 0}dispose(){if(!this.disposed){this.disposed=!0;for(let pane of this.stack)pane.dispose?.();this.stack=[],hasProviderSettings(this.options.store.getProvider(this.options.providerId))||this.options.store.discardProviderDraft(this.options.providerId)}}render(width){if(this.cache&&this.cache.width===width)return this.cache.lines;let lines=this.renderFrame(width);return this.cache={width,lines},lines}handleInput(data){if(this.focusPane==="right"){let pane=this.topPane();if(pane&&!pane.isEditing?.()&&this.keybindings.matches(data,"app.provider.switchPaneLeft")){pane.setFocused(!1),this.focusPane="left",this.refresh();return}pane?.handleInput(data);return}let kb=this.keybindings;if(kb.matches(data,"tui.select.up")){this.moveLeft(-1);return}if(kb.matches(data,"tui.select.down")){this.moveLeft(1);return}if(kb.matches(data,"app.provider.switchPaneRight")){this.activateLeftItem("inspect");return}if(kb.matches(data,"tui.select.confirm")){this.activateLeftItem("activate");return}kb.matches(data,"tui.select.cancel")&&this.done("back")}syncFromStore(){if(this.disposed||this.edits.renaming)return;let selected=this.leftItems[this.leftIndex],selectedKey=leftItemKey(selected);this.rebuildLeftItems();let nextIndex=this.leftItems.findIndex(item=>leftItemKey(item)===selectedKey);this.leftIndex=nextIndex>=0?nextIndex:this.selectableIndex(Math.min(this.leftIndex,Math.max(0,this.leftItems.length-1))),nextIndex<0&&selected?.kind==="model"&&this.resetRightStack(),this.refresh()}rebuildLeftItems(){let items=[{kind:"section",label:"SETUP"},{kind:"apiAuth"},{kind:"fetch"},{kind:"section",label:"MODELS"}];for(let model of this.options.store.getModels(this.options.providerId))items.push({kind:"model",modelId:model.id});this.draft&&items.push({kind:"draft"}),items.push({kind:"section",label:"MANAGE"},{kind:"addModel"},{kind:"deleteProvider"}),this.leftItems=items}selectableIndex(start){let index3=this.leftItems.findIndex((item,i)=>i>=start&&item.kind!=="section");return index3>=0?index3:this.leftItems.findIndex(item=>item.kind!=="section")}moveLeft(delta){let selectable=this.leftItems.map((item,index3)=>({item,index:index3})).filter(entry=>entry.item.kind!=="section");if(selectable.length===0)return;let position=selectable.findIndex(entry=>entry.index===this.leftIndex),next=selectable[(position+delta+selectable.length)%selectable.length];next.index!==this.leftIndex&&(this.leftIndex=next.index,this.resetRightStack(),this.refresh())}activateLeftItem(via){let item=this.leftItems[this.leftIndex];if(item)switch(item.kind){case"apiAuth":case"model":case"draft":this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return;case"fetch":if(this.focusPane="right",via==="activate"){let pane=this.topPane();pane instanceof FetchModelsPane&&pane.start()}this.topPane()?.setFocused(this._focused),this.refresh();return;case"addModel":{if(via==="inspect"){this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return}this.draft||(this.draft=this.edits.draft(),this.rebuildLeftItems());let draftIndex=this.leftItems.findIndex(entry=>entry.kind==="draft");draftIndex>=0&&(this.leftIndex=draftIndex),this.resetRightStack(),this.focusPane="right";let pane=this.topPane();pane?.setFocused(this._focused),pane instanceof ModelFieldsPane&&!this.draft.read().id&&pane.startEditingId(),this.refresh();return}case"deleteProvider":{if(via==="inspect"){this.focusPane="right",this.topPane()?.setFocused(this._focused),this.refresh();return}if(this.options.currentModel?.provider===this.options.providerId){this.host.notify("The current model's provider cannot be deleted; switch models with /model first.","error");return}let builtin=isBuiltinProviderId(this.options.providerId);this.host.confirm(`Delete provider "${this.options.providerId}" from models.json?`+(builtin?" The built-in catalog remains and its models may reappear.":"")+" Stored credentials in auth.json are kept.","Delete provider",()=>{this.edits.removeProvider(),this.done("deleted")});return}default:return}}renderLeft(width){let theme2=this.theme,focused=this.focusPane==="left",rows=[],renderRow=index3=>{let item=this.leftItems[index3];return item.kind==="section"?theme2.fg("dim",item.label):this.renderLeftItem(item,index3===this.leftIndex,focused,width)};if(this.leftItems.length<=BODY_ROWS)for(let index3=0;index3<this.leftItems.length;index3++)rows.push(renderRow(index3));else{let slots=BODY_ROWS-1,start=Math.max(0,Math.min(this.leftIndex-Math.floor(slots/2),this.leftItems.length-slots));for(let index3=start;index3<start+slots;index3++)rows.push(renderRow(index3));let selectable=this.leftItems.filter(item=>item.kind!=="section"),position=selectable.indexOf(this.leftItems[this.leftIndex]);rows.push(theme2.fg("dim",` (${position+1}/${selectable.length})`))}for(;rows.length<BODY_ROWS;)rows.push("");return rows}leftItemContent(item){let store=this.options.store,text,note;switch(item.kind){case"apiAuth":text="API Auth";break;case"fetch":text="Fetch Models",note=this.fetchStatus;break;case"model":{let model=store.getModel(this.options.providerId,item.modelId);text=model?modelDisplayName(model):item.modelId;break}case"draft":{text=this.draft?.read().name??this.draft?.read().id??"New Model",note="\xB7 draft";break}case"addModel":text="+ Add model";break;case"deleteProvider":text="Delete provider";break;default:text=""}let dim=item.kind==="draft"&&!this.draft?.read().name&&!this.draft?.read().id;return{text,note,dim}}renderLeftItem(item,active,focused,width){let theme2=this.theme,lit2=active&&focused,marker2=lit2?theme2.fg("accent",`${CURSOR2} `):" ",style=(text2,dim2=!1)=>theme2.fg(lit2?"accent":dim2?"dim":"text",text2),{text:label,note,dim}=this.leftItemContent(item),text=label;if(item.kind==="model"||item.kind==="draft"){let budget=Math.max(8,width-2-(note?visibleWidth(note)+1:0));text=truncateMiddle2(text,budget)}let noteText=note?theme2.fg("dim",` ${note}`):"";return truncateToWidth(marker2+style(text,dim)+noteText,width)}topPane(){return this.stack[this.stack.length-1]}pushPane(pane){this.topPane()?.setFocused(!1),this.focusPane="right",this.stack.push(pane),pane.setFocused(this._focused&&this.focusPane==="right"),this.refresh()}popPane(){if(this.stack.length<=1){this.topPane()?.setFocused(!1),this.focusPane="left",this.refresh();return}let pane=this.stack.pop();pane?.setFocused(!1),pane?.dispose?.(),this.topPane()?.setFocused(this._focused&&this.focusPane==="right"),this.refresh()}resetRightStack(){for(let pane of this.stack)pane.dispose?.();let item=this.leftItems[this.leftIndex];this.stack=[this.createBasePane(item)],this.topPane()?.setFocused(this._focused&&this.focusPane==="right")}createBasePane(item){switch(item?.kind){case"apiAuth":return new ApiAuthPane(this.host,this.options.registry);case"fetch":return new FetchModelsPane(this.host);case"model":return new ModelFieldsPane(this.host,this.persistedHandle(item.modelId));case"draft":return new ModelFieldsPane(this.host,this.draft);case"addModel":return new InfoPane(this.host,["Press Enter to create a model.","A draft is kept in memory until its id is set; Esc on the draft discards it."],()=>this.activateLeftItem("activate"));case"deleteProvider":return new InfoPane(this.host,["Press Enter to delete this provider from models.json."],()=>this.activateLeftItem("activate"));default:return new InfoPane(this.host,[])}}persistedHandle(modelId){return this.edits.model(modelId,(oldId,newId)=>{let selected=this.leftItems[this.leftIndex];selected?.kind==="model"&&selected.modelId===oldId&&(selected.modelId=newId),this.syncFromStore()})}createHost(){let store=this.options.store,providerId=this.options.providerId;return{theme:this.theme,keybindings:this.keybindings,store,edits:this.edits,providerId,pushPane:pane=>this.pushPane(pane),popPane:()=>this.popPane(),refresh:()=>this.refresh(),notify:(message,type)=>this.options.notify(message,type),effectiveApi:model=>effectiveModelSettings(providerId,store.getProvider(providerId),model).api,effectiveBaseUrl:model=>effectiveModelSettings(providerId,store.getProvider(providerId),model).baseUrl,commitModelDraft:()=>this.commitModelDraft(),discardModelDraft:()=>this.discardModelDraft(),isCurrentModel:modelId=>this.options.currentModel?.provider===providerId&&this.options.currentModel.id===modelId,setFetchStatus:status=>{this.fetchStatus=status,this.refresh()},runFetch:signal=>fetchProviderModels(this.options,signal),importModels:async(models,signal)=>{let error=await importProviderModels({...this.options,edits:this.edits},models,signal);return this.disposed||this.syncFromStore(),error},confirm:(message,actionLabel,action)=>this.pushPane(new ConfirmPane(this.host,message,actionLabel,action)),onModelRemoved:()=>{for(this.rebuildLeftItems(),this.leftIndex=Math.min(this.leftIndex,this.leftItems.length-1);this.leftIndex>0&&this.leftItems[this.leftIndex]?.kind==="section";)this.leftIndex--;this.leftItems[this.leftIndex]?.kind==="section"&&(this.leftIndex=this.selectableIndex(0)),this.focusPane="left",this.resetRightStack(),this.refresh()}}}discardModelDraft(){if(!this.draft)return;this.draft=void 0,this.rebuildLeftItems();let addIndex=this.leftItems.findIndex(item=>item.kind==="addModel");this.leftIndex=addIndex>=0?addIndex:this.selectableIndex(0),this.focusPane="left",this.resetRightStack(),this.refresh()}commitModelDraft(){let draft=this.draft;if(!draft)return"No model draft.";let error=this.edits.commitDraft(draft);if(error)return error;let id=draft.read().id.trim();this.draft=void 0,this.rebuildLeftItems();let index3=this.leftItems.findIndex(item=>item.kind==="model"&&item.modelId===id);index3>=0&&(this.leftIndex=index3),this.resetRightStack(),this.refresh()}refresh(){this.invalidate(),this.tui.requestRender()}renderFrame(width){let theme2=this.theme,border=new DynamicBorder(text=>theme2.fg("border",text)).render(width)[0];if(width<MIN_WIDTH)return[border,truncateToWidth(theme2.fg("warning",` /provider needs at least ${MIN_WIDTH} columns`),width),border];let title=this.renderTitle(width),body2;if(width<DOUBLE_PANE_MIN_WIDTH)body2=this.focusPane==="left"?this.renderLeft(width):this.renderRight(width);else{let leftWidth=this.computeLeftWidth(width),rightWidth=width-leftWidth-3,separator=theme2.fg("border"," \u2502 "),leftLines=this.renderLeft(leftWidth),rightLines=this.renderRight(rightWidth);body2=[];for(let row=0;row<BODY_ROWS;row++){let left=padTo(truncateToWidth(leftLines[row]??"",leftWidth),leftWidth),right=truncateToWidth(rightLines[row]??"",rightWidth);body2.push(left+separator+right)}}let footerLines=this.renderFooter(width);return[border,title,border,...body2,border,...footerLines,border]}renderRight(width){let pane=this.topPane(),paneLines=pane?windowLines(this.theme,pane.render(width),BODY_ROWS-1,pane.scrollWindow?.()):[];return[this.renderPaneTitle(width),...paneLines]}renderPaneTitle(width){let item=this.leftItems[this.leftIndex],base="";switch(item?.kind){case"apiAuth":base="Connection";break;case"fetch":base="Discover models";break;case"model":{let model=this.options.store.getModel(this.options.providerId,item.modelId);base=model?modelDisplayName(model):item.modelId;break}case"draft":base="New model";break;case"addModel":base="Add model";break;case"deleteProvider":base="Delete provider";break}let crumb=this.stack.length>1?this.topPane()?.crumb:void 0,title=crumb?[base,crumb].filter(Boolean).join(" / "):base;return truncateToWidth(this.theme.fg("text",this.theme.bold(title)),width)}computeLeftWidth(width){let longest=12;for(let item of this.leftItems){if(item.kind==="section")continue;let{text,note}=this.leftItemContent(item),label=text+(note?` ${note}`:"");longest=Math.max(longest,visibleWidth(label))}let fit=Math.max(LEFT_WIDTH_MIN,Math.min(LEFT_WIDTH_MAX,longest+2));return Math.min(fit,Math.max(LEFT_WIDTH_MIN,Math.floor(width*.45)))}renderTitle(width){let theme2=this.theme,title=theme2.fg("accent",theme2.bold(` Providers / ${this.options.providerId}`)),status=this.options.store.pendingCount===0?"":this.options.store.saveFailed?"Save failed":"Saving\u2026";if(!status)return truncateToWidth(title,width);let styledStatus=theme2.fg(this.options.store.saveFailed?"error":"dim",status),statusWidth=visibleWidth(status);if(statusWidth+1>=width)return truncateToWidth(styledStatus,width);let left=truncateToWidth(title,width-statusWidth-1);return padTo(left,width-statusWidth)+styledStatus}renderFooter(width){if(this.focusPane==="right"){let paneHints=this.topPane()?.hints()??"";if(width<DOUBLE_PANE_MIN_WIDTH){let arrowHint=keyHint("app.provider.switchPaneLeft","nav"),combined=[paneHints,arrowHint].filter(Boolean).join(" ");return[truncateToWidth(visibleWidth(combined)<=width?combined:paneHints,width)]}let hints2=[paneHints,keyHint("app.provider.switchPaneLeft","focus left")].filter(Boolean).join(" ");return[truncateToWidth(hints2,width)]}let hints=[rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm",this.leftActivateLabel()),keyHint("app.provider.switchPaneRight","focus right"),keyHint("tui.select.cancel","back")].join(" ");return[truncateToWidth(hints,width)]}leftActivateLabel(){switch(this.leftItems[this.leftIndex]?.kind){case"fetch":return"fetch";case"addModel":return"create";case"deleteProvider":return"delete";default:return"open"}}};function modelDisplayName(model){return model.name??model.id}var LIST_ROWS=12,ProviderListScreen=class{constructor(tui,theme2,keybindings,done,store){this.mode="list",this.query="",this.index=0,this.active=!1,this.tui=tui,this.theme=theme2,this.keybindings=keybindings,this.done=done,this.store=store,this.input=new ValueEditor({onCommit:()=>this.confirm(),onCancel:()=>this.cancel()})}get focused(){return this.active}set focused(value){this.active=value,this.input.focused=value}invalidate(){}filtered(){let ids=this.store.getProviderIds();return this.query.trim()?fuzzyFilter(ids,this.query,id=>id):ids}render(width){let theme2=this.theme,border=new DynamicBorder(text=>theme2.fg("border",text)).render(width)[0]??"",title=this.mode==="list"?" Providers":" New provider",lines=[border,truncateToWidth(theme2.fg("accent",theme2.bold(title)),width),border,renderKeyValueLine(theme2,{keyLabel:this.mode==="list"?"Search":"Provider id",active:!1,paneFocused:this.active,editing:this.input,width}),""],area=[];if(this.mode==="list"){let entries=this.filtered(),total=entries.length+1;this.index=Math.min(this.index,total-1);let rows=[];for(let row=0;row<total;row++){let id=entries[row-1];rows.push(renderPlainLine(theme2,row===0?"+ Add provider":id,{active:row===this.index,paneFocused:this.active,width}))}if(entries.length===0){let query=this.query.trim();rows.push(renderInfoLine(theme2,query?`No providers match \u201C${query}\u201D.`:"No providers configured.",width)),rows.push(renderInfoLine(theme2,query?`Enter will create provider \u201C${query}\u201D.`:"Enter starts a new provider.",width))}area.push(...windowLines(theme2,rows,LIST_ROWS,{cursor:this.index}))}else{let id=this.input.value.trim();area.push(renderInfoLine(theme2,id?`This becomes the providers.${id} key in models.json.`:"Choose a unique provider id.",width)),this.error&&area.push(truncateToWidth(theme2.fg("error",this.error),width))}for(;area.length<LIST_ROWS;)area.push("");let hints=this.mode==="newProvider"?[keyHint("tui.input.submit","create"),keyHint("tui.select.cancel","cancel")]:[rawKeyHint("type","filter"),rawKeyHint("\u2191\u2193","move"),keyHint("tui.select.confirm","open"),keyHint("tui.select.cancel","close")];return[...lines,...area,border,truncateToWidth(hints.join(" "),width),border]}handleInput(data){let kb=this.keybindings;if(kb.matches(data,"tui.select.cancel")){this.cancel();return}if(this.mode==="list"){let total=this.filtered().length+1;if(kb.matches(data,"tui.select.up"))this.index=(this.index+total-1)%total;else if(kb.matches(data,"tui.select.down"))this.index=(this.index+1)%total;else if(kb.matches(data,"tui.select.confirm")){this.confirm();return}else{let previous=this.query;this.input.handleInput(data),this.query=this.input.value,this.query!==previous&&(this.index=this.query&&this.filtered().length>0?1:0)}}else this.input.handleInput(data);this.tui.requestRender()}confirm(){if(this.mode==="newProvider"){let id=this.input.value.trim();if(!id)this.error="Provider id must be non-empty.";else if(this.store.getProviderIds().includes(id))this.error="This provider id already exists.";else{this.store.ensureProviderView(id),this.done({kind:"open",providerId:id});return}}else if(this.index===0)this.mode="newProvider",this.error=void 0,this.input.reset(this.query);else{let id=this.filtered()[this.index-1];id&&this.done({kind:"open",providerId:id})}this.tui.requestRender()}cancel(){if(this.mode==="list"){this.done({kind:"close"});return}this.mode="list",this.error=void 0,this.input.reset(this.query),this.tui.requestRender()}};var ProviderTuiSession=class extends Container{constructor(tui){super(),this.controller=new AbortController,this.active=!1,this.tui=tui}get signal(){return this.controller.signal}get focused(){return this.active}set focused(value){this.active=value,this.screen&&isFocusable(this.screen)&&(this.screen.focused=value)}setScreen(screen){if(this.signal.aborted){screen.dispose?.();return}this.disposeScreen(),this.screen=screen,this.clear(),this.addChild(screen),this.tui.setFocus(this),this.tui.requestRender()}handleInput(data){this.signal.aborted||this.screen?.handleInput?.(data)}dispose(){this.signal.aborted||(this.controller.abort(),this.disposeScreen(),this.clear())}disposeScreen(){let previous=this.screen;this.screen=void 0,previous&&isFocusable(previous)&&(previous.focused=!1),previous?.dispose?.()}};var SavingScreen=class extends Container{constructor(theme2,keybindings,onCancel){super(),this.keybindings=keybindings,this.onCancel=onCancel,this.addChild(new DynamicBorder(text=>theme2.fg("border",text))),this.addChild(new Text(theme2.fg("muted","Saving provider changes and updating models\u2026"),1,1)),this.addChild(new Text(keyHint("tui.select.cancel","return to providers"),1,0)),this.addChild(new DynamicBorder(text=>theme2.fg("border",text)))}handleInput(data){this.keybindings.matches(data,"tui.select.cancel")&&this.onCancel()}};function createProviderErrorScreen(tui,done,error){return new ExtensionSelectorComponent("models.json cannot be edited",["Back"],done,done,{tui,description:`${truncate3(error,2400)}
1244
1244
 
1245
1245
  Fix the file manually and open /provider again.`})}function createProviderApp(tui,theme2,keybindings,done,options){let{store,registry,runtime}=options,session=new ProviderTuiSession(tui),refresher=new RefreshCoordinator(runtime),activeEditor,closing;function notify(message,type){session.signal.aborted||options.notify(message,type)}store.onSaveResult=result2=>{session.signal.aborted||((result2.kind==="invalid"||result2.kind==="error")&&notify(result2.error,"error"),activeEditor?.syncFromStore(),tui.requestRender())};function showList(){session.signal.aborted||(activeEditor=void 0,session.setScreen(new ProviderListScreen(tui,theme2,keybindings,result2=>{result2.kind==="close"?requestClose():openProvider(result2.providerId)},store)))}function openProvider(providerId){if(!store.getProviderIds().includes(providerId)){notify(`No provider ${JSON.stringify(providerId)} in models.json.`,"warning"),showList();return}activeEditor=new ProviderEditorScreen(tui,theme2,keybindings,showList,{store,refresher,providerId,registry,runtime,currentModel:options.getCurrentModel(),notify}),session.setScreen(activeEditor)}function showUnsaved(error){let back="Return to providers",retry="Retry saving",discard="Discard unsaved changes and close";session.setScreen(new ExtensionSelectorComponent("Some changes are not saved",[back,retry,discard],choice=>{if(choice===back){showList();return}choice===retry&&store.retrySave(),choice===discard&&store.discardPending(),requestClose()},showList,{tui,description:truncate3(error,2400)}))}function requestClose(){if(closing||session.signal.aborted)return;let controller=new AbortController;closing=controller;let signal=AbortSignal.any([session.signal,controller.signal]);activeEditor=void 0,session.setScreen(new SavingScreen(theme2,keybindings,()=>{controller.abort(),closing=void 0,showList()})),finishClose(controller,signal)}async function finishClose(controller,signal){try{if(await store.flush(),signal.aborted)return;let unsaved=store.getPendingError();if(unsaved){closing=void 0,showUnsaved(unsaved);return}let outcome=await refresher.flush(signal);if(signal.aborted)return;outcome.ok||notify(`Changes saved, but model refresh failed: ${outcome.errors.join("; ")}`,"warning");let current=options.getCurrentModel();if(current&&refresher.touchedProviders.includes(current.provider)){let refreshed=registry.find(current.provider,current.id);refreshed&&!await options.setModel(refreshed)&&notify("Reselect the current model with /model to apply its updated configuration.","warning"),refreshed||notify("The current model is no longer available; select another with /model.","warning")}signal.aborted||done()}catch(error){signal.aborted||(notify(formatError(error),"error"),showList())}finally{closing===controller&&(closing=void 0)}}return options.initialProviderId?openProvider(options.initialProviderId):showList(),session}function providerExtension(pi){let modelsPath;pi.on("session_start",(_event,ctx)=>{modelsPath=ctx.modelRuntime.getModelsPath()}),pi.registerCommand(COMMAND_NAME,{description:COMMAND_DESCRIPTION,getArgumentCompletions:async prefix=>{if(!modelsPath)return null;let load=await ModelsJsonStore.load(modelsPath);if(!load.ok)return null;let query=prefix.trim().toLowerCase(),items=load.store.getProviderIds().filter(id=>id.toLowerCase().startsWith(query)).map(id=>{let count=load.store.getModels(id).length;return{value:id,label:id,description:`${String(count)} ${plural(count,"model")}`}});return items.length?items:null},handler:async(args,ctx)=>{if(!ctx.hasUI||ctx.mode!=="tui"){ctx.ui.notify(NO_UI_WARNING,"warning");return}let path10=ctx.modelRuntime.getModelsPath();if(modelsPath=path10,!path10){ctx.ui.notify(NO_MODELS_FILE_WARNING,"warning");return}try{let load=await ModelsJsonStore.load(path10);if(!load.ok){await ctx.ui.custom((tui,_theme,_keybindings,done)=>createProviderErrorScreen(tui,done,load.error));return}await ctx.ui.custom((tui,theme2,keybindings,done)=>createProviderApp(tui,theme2,keybindings,done,{store:load.store,runtime:ctx.modelRuntime,registry:ctx.modelRegistry,getCurrentModel:()=>ctx.model,setModel:model=>pi.setModel(model),notify:(message,type)=>ctx.ui.notify(message,type),initialProviderId:args.trim()||void 0}))}catch(error){ctx.ui.notify(formatError(error),"error")}}})}var QUESTION_TOOL_NAME="question",QUESTION_LABEL="Question",QUESTION_DESCRIPTION="Ask the user 1-4 structured multiple-choice questions and return their selections. Never author an 'Other'-style option or a vague label like 'Option A' \u2014 the UI adds a custom-answer path itself. If you recommend an option, put it first and append ' (Recommended)' to its label.",QUESTION_PROMPT_SNIPPET="Ask the user structured multiple-choice questions when blocked on a decision only they can make",QUESTION_PROMPT_GUIDELINES=["Use `question` only for decisions you cannot resolve from the request, the code, or sensible defaults (direction, preference, permissions, destructive choices); for everything else choose a reasonable default and state it.","Batch related decisions into one `question` call (1-4 questions); ask no more than needed to unblock the next step.","Treat `question` answers as decisions: act on them without re-litigating, and do not re-ask unless circumstances change."];var DetailPane=class{constructor(){this.key="",this.offset=0,this.maxOffset=0,this.pageRows=1,this.pendingPages=0}reset(){this.key="",this.offset=0,this.maxOffset=0,this.pendingPages=0}page(key,direction){this.key!==key&&this.reset(),this.key=key,this.pendingPages+=direction}render(key,title,content,width,rows,scrollHint,theme2){this.key!==key&&(this.reset(),this.key=key);let bodyRows=Math.max(1,rows-2),wasAtEnd=this.maxOffset>0&&this.offset===this.maxOffset;this.maxOffset=Math.max(0,content.length-bodyRows),this.pageRows=Math.max(1,bodyRows-1);let anchored=wasAtEnd?this.maxOffset:this.offset;this.offset=Math.max(0,Math.min(this.maxOffset,anchored+this.pendingPages*this.pageRows)),this.pendingPages=0;let body2=content.slice(this.offset,this.offset+bodyRows);if(rows<3)return body2.slice(0,rows);let lines=[theme2.fg("muted",truncateToWidth(` ${title.replace(/\s+/gu," ")}`,width)),...body2];if(this.maxOffset>0){for(;lines.length<rows-1;)lines.push("");let range2=`${this.offset+1}\u2013${this.offset+body2.length}/${content.length}`;lines.push(theme2.fg("dim",truncateToWidth(` ${range2}${scrollHint?` \u2022 ${scrollHint}`:""}`,width)))}return lines}};function ruleBorder(theme2,width,color="accent"){return theme2.fg(color,"\u2500".repeat(Math.max(0,width)))}function wrapWithPrefix(prefix,text,width,outputLines2){let prefixWidth=visibleWidth(prefix);if(prefixWidth>=width){for(let line of wrapTextWithAnsi(prefix+text,width))outputLines2.push(line);return}let wrappedLines=wrapTextWithAnsi(text,width-prefixWidth),continuationPrefix=" ".repeat(prefixWidth);for(let lineIndex=0;lineIndex<wrappedLines.length;lineIndex++)outputLines2.push(`${lineIndex===0?prefix:continuationPrefix}${wrappedLines[lineIndex]}`)}function moreOptionsHint(direction,count){let arrow=direction==="up"?"\u2191":"\u2193";return count<=0?`${arrow} more ${direction==="up"?"above":"below"}`:`${arrow} ${count} more option${count===1?"":"s"}`}function windowItems(items,focus,rows){let count=items.length,total=items.reduce((sum,item)=>sum+item.height,0),build2=(first,last,contentRows)=>({first,last,contentRows,showAbove:first>0,showBelow:last<count-1,hiddenAbove:items.slice(0,first).filter(item=>item.countsAsOption).length,hiddenBelow:items.slice(last+1).filter(item=>item.countsAsOption).length});if(total<=rows)return build2(0,count-1,rows);let windowFor=contentRows=>{let first=focus,last=focus,used=items[focus].height;for(let grew=!0;grew;)grew=!1,last+1<count&&used+items[last+1].height<=contentRows&&(last++,used+=items[last].height,grew=!0),first>0&&used+items[first-1].height<=contentRows&&(first--,used+=items[first].height,grew=!0);return build2(first,last,contentRows)};if(rows<=2)return{...windowFor(Math.max(1,rows)),showAbove:!1,showBelow:!1};let window=windowFor(rows-2);return window.first===0||window.last===count-1?windowFor(rows-1):window}var PreviewLinesCache=class{constructor(){this.cache=new Map}get(previewText,width,compute){let byWidth=this.cache.get(previewText);byWidth||(byWidth=new Map,this.cache.set(previewText,byWidth));let lines=byWidth.get(width);return lines||(lines=compute(),byWidth.set(width,lines)),lines}},WidthCachedRender=class{invalidate(){this.cachedLines=void 0}get(width,height,compute){return this.cachedLines!==void 0&&this.cachedWidth===width&&this.cachedHeight===height?this.cachedLines:(this.cachedLines=compute(width,height),this.cachedWidth=width,this.cachedHeight=height,this.cachedLines)}};var QUESTION_LIMITS={questionChars:400,headerChars:32,optionLabelChars:80,optionDescriptionChars:300,previewChars:8e3,userTextChars:4e3,modelResultChars:12e3},TRUNCATION_FOLLOW_UP="Ask the user a focused follow-up question to clarify the omitted portion.";var DECLINE_MESSAGE="User declined to answer the questions.",CLARIFICATION_MESSAGE="The user wants to discuss these questions before choosing an answer.",ENVELOPE_PREFIX="User decisions:",ENVELOPE_SUFFIX="Continue with these decisions in mind.",CLARIFICATION_FOLLOW_UP="Explain the trade-offs or ask what the user would like clarified.",SHORTENED_NOTICE=`
1246
1246
 
1247
- [Long answers or notes were shortened where marked "chars truncated". ${TRUNCATION_FOLLOW_UP}]`;function buildToolResult(text,details){return{content:[{type:"text",text}],details}}function fairShare(lengths2,budget){let sorted=[...lengths2].sort((a,b)=>a-b),remaining=budget;for(let index3=0;index3<sorted.length;index3++){let share=Math.floor(remaining/(sorted.length-index3));if(sorted[index3]>share)return Math.max(0,share);remaining-=sorted[index3]}return Number.POSITIVE_INFINITY}function shorten(text,cap){if(text.length<=cap)return text;let marker=`\u2026${text.length} chars truncated\u2026`;return truncateMiddle(text,Math.max(0,cap-marker.length)).content}function boundedAnswers(answers,envelope){let full=envelope(answers.map(answer=>answerSegment(answer,text=>text)).join(`
1247
+ [Long answers or notes were shortened where marked "chars truncated". ${TRUNCATION_FOLLOW_UP}]`;function buildToolResult(text,details){return{content:[{type:"text",text}],details}}function fairShare(lengths2,budget){let sorted=[...lengths2].sort((a,b)=>a-b),remaining=budget;for(let index3=0;index3<sorted.length;index3++){let share=Math.floor(remaining/(sorted.length-index3));if(sorted[index3]>share)return Math.max(0,share);remaining-=sorted[index3]}return Number.POSITIVE_INFINITY}function shorten(text,cap){if(text.length<=cap)return text;let marker2=`\u2026${text.length} chars truncated\u2026`;return truncateMiddle(text,Math.max(0,cap-marker2.length)).content}function boundedAnswers(answers,envelope){let full=envelope(answers.map(answer=>answerSegment(answer,text=>text)).join(`
1248
1248
 
1249
1249
  `));if(full.length<=QUESTION_LIMITS.modelResultChars)return full;let lengths2=[];for(let answer of answers)answerSegment(answer,text=>(lengths2.push(text.length),text));let fixed=full.length-lengths2.reduce((sum,length)=>sum+length,0)+SHORTENED_NOTICE.length,cap=fairShare(lengths2,QUESTION_LIMITS.modelResultChars-fixed),body2=answers.map(answer=>answerSegment(answer,text=>shorten(text,cap))).join(`
1250
1250
 
@@ -1258,7 +1258,7 @@ Partial answers so far:
1258
1258
  ${body2}`):DECLINE_MESSAGE;return buildToolResult(text,{answers,outcome:"cancelled",cancelled:!0})}function clarificationResult(answers=[]){let envelope=body2=>`${CLARIFICATION_MESSAGE}${body2?` Partial answers so far:
1259
1259
  ${body2}`:""}
1260
1260
 
1261
- ${CLARIFICATION_FOLLOW_UP}`;return buildToolResult(answers.length?boundedAnswers(answers,envelope):envelope(""),{answers,outcome:"needs_clarification",cancelled:!1})}var OTHER_OPTION={kind:"other",label:"Type something"};function newQuestionState(question2){return{focus:0,draft:question2.multiSelect?{kind:"multi",selected:new Set}:{kind:"single"},notes:new Map}}function displayOptions(question2){return[...question2.options.map((option,optionIndex)=>({...option,kind:"option",optionIndex})),OTHER_OPTION]}function hasAnswer(state2){let draft=state2.draft;return draft.kind==="single"?draft.choice!==void 0:draft.selected.size>0||draft.custom?.selected===!0}function customText(state2){let draft=state2.draft;return draft.kind==="multi"?draft.custom?.text:draft.choice?.kind==="custom"?draft.choice.text:void 0}function isSelected(state2,option){let draft=state2.draft;return draft.kind==="multi"?option.kind==="other"?draft.custom?.selected===!0:draft.selected.has(option.optionIndex):option.kind==="other"?draft.choice?.kind==="custom":draft.choice?.kind==="option"&&draft.choice.index===option.optionIndex}function firstUnanswered(states){let index3=states.findIndex(state2=>!hasAnswer(state2));return index3===-1?void 0:index3}function selectedNotes(question2,state2,indices){let notes=[];for(let index3 of indices){let text=state2.notes.get(index3)?.trim();text&&notes.push({option:question2.options[index3].label,text})}return notes.length?notes:void 0}function orderedAnswers(questions,states){let answers=[];for(let questionIndex=0;questionIndex<questions.length;questionIndex++){let question2=questions[questionIndex],draft=states[questionIndex].draft,base={questionIndex,question:question2.question,header:question2.header};if(draft.kind==="single"){let choice=draft.choice;if(choice?.kind==="custom"&&answers.push({...base,kind:"custom",answer:choice.text}),choice?.kind==="option"){let option=question2.options[choice.index],notes2=selectedNotes(question2,states[questionIndex],[choice.index]);answers.push({...base,kind:"option",answer:option.label,...option.preview?{preview:option.preview}:{},...notes2?{notes:notes2}:{}})}continue}if(!hasAnswer(states[questionIndex]))continue;let indices=[...draft.selected].sort((a,b)=>a-b),selected=indices.map(index3=>question2.options[index3].label);draft.custom?.selected&&selected.push(draft.custom.text);let notes=selectedNotes(question2,states[questionIndex],indices);answers.push({...base,kind:"multi",answer:null,selected,...notes?{notes}:{}})}return answers}var DIALOG_MAX_FRACTION=.5,DIALOG_MIN_ROWS=16,VIEWPORT_SCROLL_STEP=4;function dialogRowBudget(terminalRows){let rows=Math.max(1,Math.floor(terminalRows));return Math.min(rows,Math.max(DIALOG_MIN_ROWS,Math.floor(rows*DIALOG_MAX_FRACTION)))}function applyVerticalViewport(lines,width,maxRows,theme2,options={}){if(lines.length<=maxRows)return{lines,start:0,maxStart:0};if(maxRows<5){let anchor=Math.max(0,Math.min(lines.length-1,options.anchorLine??0)),start2=Math.max(0,Math.min(lines.length-maxRows,anchor-Math.floor(maxRows/2)));return{lines:lines.slice(start2,start2+maxRows),start:start2,maxStart:lines.length-maxRows}}let first=lines[0]??"",last=lines[lines.length-1]??"",body2=lines.slice(1,-1),contentRows=maxRows-4,maxStart=Math.max(0,body2.length-contentRows),anchorInBody=Math.max(0,Math.min(body2.length-1,(options.anchorLine??1)-1)),requestedStart=options.preferredStart??Math.max(0,anchorInBody-Math.floor(contentRows/2)),start=Math.max(0,Math.min(maxStart,requestedStart)),bottomHidden=Math.max(0,body2.length-start-contentRows),indicator=text=>theme2.fg("dim",truncateToWidth(text,Math.max(1,width)));return{lines:[first,start>0?indicator(`\u2191 ${start} rows hidden`):"",...body2.slice(start,start+contentRows),bottomHidden>0?indicator(`\u2193 ${bottomHidden} rows hidden`):"",last],start,maxStart}}function detailKey(snapshot){return`${snapshot.current}:${snapshot.states[snapshot.current].focus}:${snapshot.mode.kind==="chat"}`}var joinHints=(...hints)=>hints.filter(Boolean).join(" \u2022 "),QuestionDialogView=class{constructor(theme2,keybindings){this.details=new DetailPane,this.previews=new PreviewLinesCache,this.reviewScroll=0,this.reviewMaxScroll=0,this.theme=theme2,this.keybindings=keybindings}resetScroll(){this.details.reset(),this.reviewScroll=0,this.reviewMaxScroll=0}pageDetails(snapshot,direction){this.details.page(detailKey(snapshot),direction)}scrollReview(direction){this.reviewScroll=Math.max(0,Math.min(this.reviewMaxScroll,this.reviewScroll+direction*VIEWPORT_SCROLL_STEP))}render(snapshot,width,terminalRows){let theme2=this.theme,lines=[],renderWidth=Math.max(1,width),maxRows=dialogRowBudget(terminalRows);if(lines.push(ruleBorder(theme2,renderWidth)),this.renderTabs(snapshot,renderWidth,lines),snapshot.mode.kind==="review"){this.renderReview(snapshot,renderWidth,lines),lines.push(ruleBorder(theme2,renderWidth));let viewport=applyVerticalViewport(lines,renderWidth,maxRows,theme2,{preferredStart:this.reviewScroll});return this.reviewMaxScroll=viewport.maxStart,this.reviewScroll=viewport.start,viewport.lines}let{mode,options,editor}=snapshot,question2=snapshot.questions[snapshot.current],state2=snapshot.states[snapshot.current],isMulti=state2.draft.kind==="multi",chat2=mode.kind==="chat",editing=mode.kind==="custom"||mode.kind==="notes";wrapWithPrefix(" ",theme2.fg("text",question2.question),renderWidth,lines);let footerLines=this.renderFooter(snapshot,renderWidth,`1-${Math.min(9,options.length)}`),areaRows=Math.max(1,maxRows-lines.length-footerLines.length),sideBySide=!editing&&renderWidth>=72,listWidth=sideBySide?Math.min(Math.floor((renderWidth-3)/2),Math.max(24,...options.map((option,index3)=>6+visibleWidth(`${index3+1}. ${option.label.replace(/\s+/gu," ")}`)+2))):renderWidth,detailWidth=sideBySide?renderWidth-listWidth-3:renderWidth,custom=customText(state2),optionLines=[],items=[],focusItem=chat2?options.length-1:state2.focus;for(let index3=0;index3<options.length;index3++){let option=options[index3],focused=!chat2&&index3===state2.focus,selected=isSelected(state2,option),marker=isMulti?option.kind==="other"&&custom===void 0?" ":selected?theme2.fg("success","[x]"):theme2.fg("dim","[ ]"):" ",focusArrow=focused?theme2.fg("accent","\u2192"):" ",note=option.kind==="option"&&state2.notes.has(option.optionIndex)?theme2.fg("success"," +note"):"",otherText=option.kind==="other"?custom:void 0,labelText=(otherText?`${option.label} \u270E ${otherText}`:option.label).replace(/\s+/gu," "),checkmark=selected&&!isMulti?" \u2713":"",label=`${index3+1}. ${labelText}${checkmark}${note}`,color=focused?"accent":selected?"success":"text",row=truncateToWidth(`${focusArrow} ${marker} ${theme2.fg(color,label)}`,listWidth);optionLines.push(focused?theme2.bg("selectedBg",row+" ".repeat(Math.max(0,listWidth-visibleWidth(row)))):row),items.push({height:1,countsAsOption:!0})}if(editing){let start=optionLines.length,label=mode.kind==="notes"?`Notes for ${question2.options[mode.option].label}:`:"Your answer:";optionLines.push(theme2.fg("muted",truncateToWidth(` ${label}`,listWidth)));for(let line of editor.render(Math.max(1,listWidth-2)))optionLines.push(` ${line}`);items.push({height:optionLines.length-start,countsAsOption:!1}),focusItem=items.length-1}let regionStart=lines.length,focusRow;if(editing){let windowed=this.windowOptionLines(optionLines,items,focusItem,areaRows,renderWidth);focusRow=windowed.focusRow,lines.push(...windowed.rows)}else{let option=options[state2.focus],content=[],hasPreview=!chat2&&option.kind==="option"&&!!option.preview,title=chat2?"Chat about this":`${hasPreview?"Preview":"Details"} \xB7 ${option.label}`;if(!chat2&&visibleWidth(`${state2.focus+1}. ${option.label.replace(/\s+/gu," ")}`)>listWidth-6&&wrapWithPrefix(" ",theme2.fg("text",option.label),detailWidth,content),chat2)wrapWithPrefix(" ",theme2.fg("muted","Discuss this question before choosing an answer."),detailWidth,content);else if(option.kind==="option"){wrapWithPrefix(" ",theme2.fg("muted",option.description),detailWidth,content);let note=state2.notes.get(option.optionIndex);note&&wrapWithPrefix(" ",theme2.fg("success",`Note: ${note}`),detailWidth,content),hasPreview&&option.preview&&content.push("",...this.previewLines(option.preview,detailWidth))}else wrapWithPrefix(" ",theme2.fg("muted",custom||"Write your own answer instead of choosing an option."),detailWidth,content);let optionRows=sideBySide?areaRows:Math.max(1,Math.min(options.length,areaRows-4)),detailRows=sideBySide?areaRows:Math.max(1,areaRows-optionRows),left=this.windowOptionLines(optionLines,items,focusItem,optionRows,listWidth),right=this.details.render(detailKey(snapshot),title,content,detailWidth,detailRows,this.keyGroupAction(["app.question.pageUp","app.question.pageDown"],"scroll"),theme2);if(focusRow=left.focusRow,sideBySide)for(let row=0;row<Math.max(left.rows.length,right.length);row++){let leftText=left.rows[row]??"",leftPadded=leftText+" ".repeat(Math.max(0,listWidth-visibleWidth(leftText)));lines.push(`${leftPadded}${theme2.fg("dim"," \u2502 ")}${right[row]??""}`)}else lines.push(...left.rows,...right)}let anchorLine=regionStart+focusRow;return lines.push(...footerLines),applyVerticalViewport(lines,renderWidth,maxRows,theme2,{anchorLine}).lines}keyAction(keybinding,action){let label=keyLabel(keybinding,{keybindings:this.keybindings});return label?`${label} ${action}`:""}keyGroupAction(bindings,action){let labels=bindings.map(binding=>keyLabel(binding,{keybindings:this.keybindings})).filter(Boolean).join("/");return labels?`${labels} ${action}`:""}previewLines(previewText,width){return this.previews.get(previewText,width,()=>new Markdown(previewText,1,0,getMarkdownTheme()).render(Math.max(1,width)))}renderTabs(snapshot,renderWidth,lines){let{questions,states,current,mode}=snapshot,theme2=this.theme;if(questions.length<2)return;let tabCount=questions.length+1,headerWidth=Math.max(4,Math.floor((renderWidth-tabCount*5)/tabCount)),reviewing=mode.kind==="review",tabs=[...questions.map((question2,index3)=>{let answered=hasAnswer(states[index3]),label=` ${answered?"\u25A0":"\u25A1"} ${truncateToWidth(question2.header,headerWidth)} `;return!reviewing&&index3===current?theme2.bg("selectedBg",theme2.fg(answered?"success":"text",label)):theme2.fg(answered?"success":"muted",label)}),reviewing?theme2.bg("selectedBg",theme2.fg("text"," \u2713 Submit ")):theme2.fg(firstUnanswered(states)===void 0?"success":"dim"," \u2713 Submit ")].join(" ");wrapWithPrefix(" ",tabs,renderWidth,lines)}renderReview(snapshot,renderWidth,lines){let theme2=this.theme;wrapWithPrefix(" ",theme2.fg("accent","Review answers"),renderWidth,lines),lines.push("");for(let answer of orderedAnswers(snapshot.questions,snapshot.states)){wrapWithPrefix(" ",theme2.fg("text",`${answer.questionIndex+1}. ${answer.question}`),renderWidth,lines),wrapWithPrefix(" ",theme2.fg("success",answerScalar(answer)),renderWidth,lines);for(let note of answer.notes??[])wrapWithPrefix(" ",theme2.fg("muted",`Note for ${note.option}: ${note.text}`),renderWidth,lines);lines.push("")}wrapWithPrefix(" ",theme2.fg("dim",joinHints(this.keyAction("tui.select.confirm","submit"),this.keyAction("tui.select.cancel","edit last question"),this.keyGroupAction(["tui.select.up","tui.select.down"],"scroll"))),renderWidth,lines)}renderFooter(snapshot,renderWidth,digitRange){let theme2=this.theme,{mode}=snapshot,state2=snapshot.states[snapshot.current],isMulti=state2.draft.kind==="multi",chat2=mode.kind==="chat",lines=[];wrapWithPrefix(`${chat2?theme2.fg("accent","\u2192"):" "} `,theme2.fg(chat2?"accent":"text","Chat about this"),renderWidth,lines),state2.warning&&(lines.push(""),wrapWithPrefix(" ",theme2.fg("warning",state2.warning),renderWidth,lines));let submitLabel=keyLabel("tui.input.submit"),editorSubmit=action=>submitLabel?`${submitLabel} ${action}`:"",questionsHint=snapshot.questions.length>1?this.keyGroupAction(["tui.editor.cursorLeft","tui.editor.cursorRight"],"questions"):"",hints;mode.kind==="notes"?hints=joinHints(editorSubmit("save notes"),this.keyAction("tui.select.cancel","back")):mode.kind==="custom"?hints=joinHints(editorSubmit(isMulti?"save custom answer":"continue"),this.keyAction("tui.select.cancel","back")):chat2?hints=joinHints(this.keyAction("tui.select.confirm","discuss"),this.keyAction("tui.select.up","return to options"),this.keyAction("tui.select.cancel","cancel")):hints=joinHints(this.keyGroupAction(["tui.select.up","tui.select.down"],"navigate"),`${digitRange} ${isMulti?"toggle":"select"}`,isMulti?this.keyAction("app.list.toggle","toggle focused"):"",this.keyAction("tui.input.tab","notes/custom"),this.keyAction("tui.select.confirm",isMulti?"continue":"select"),questionsHint,this.keyAction("tui.select.cancel","cancel"));let hintLine="";for(let hint of hints.split(" \u2022 ")){let joined=hintLine?`${hintLine} \u2022 ${hint}`:hint;hintLine&&visibleWidth(joined)>renderWidth-1?(wrapWithPrefix(" ",theme2.fg("dim",hintLine),renderWidth,lines),hintLine=hint):hintLine=joined}return hintLine&&wrapWithPrefix(" ",theme2.fg("dim",hintLine),renderWidth,lines),lines.push(ruleBorder(theme2,renderWidth)),lines}windowOptionLines(optionLines,items,focus,rows,width){let theme2=this.theme,window=windowItems(items,focus,rows),rowsBefore=count=>items.slice(0,count).reduce((sum,item)=>sum+item.height,0),from=rowsBefore(window.first),block=optionLines.slice(from,rowsBefore(window.last+1)),visible=applyVerticalViewport(block,width,window.contentRows,theme2,{anchorLine:Math.max(0,block.findIndex(line=>line.includes(CURSOR_MARKER)))}).lines;if(!window.showAbove&&!window.showBelow)return{rows:visible,focusRow:rowsBefore(focus)-from};let hint=(direction,count)=>theme2.fg("dim",` ${truncateToWidth(moreOptionsHint(direction,count),Math.max(1,width-1))}`),spare=Array.from({length:Math.max(0,window.contentRows-visible.length)},()=>"");return{rows:[...window.showAbove?[hint("up",window.hiddenAbove)]:[],...visible,...window.showBelow?[hint("down",window.hiddenBelow)]:[],...spare],focusRow:(window.showAbove?1:0)+rowsBefore(focus)-from}}};function createQuestionDialog(questions,signal){return(tui,theme2,keybindings,done)=>{let states=questions.map(newQuestionState),optionsByQuestion=questions.map(displayOptions),current=0,mode={kind:"choose"},dialogFocused=!1,finished=!1,cache2=new WidthCachedRender,view=new QuestionDialogView(theme2,keybindings),editor=new Editor(tui,{borderColor:s=>theme2.fg("accent",s),selectList:{selectedPrefix:t=>theme2.fg("accent",t),selectedText:t=>theme2.fg("accent",t),description:t=>theme2.fg("muted",t),scrollInfo:t=>theme2.fg("dim",t),noMatch:t=>theme2.fg("warning",t)}}),keyMatches=(data,keybinding)=>keybindings.matches(data,keybinding),state2=()=>states[current],options=()=>optionsByQuestion[current],isEditing=()=>mode.kind==="custom"||mode.kind==="notes",snapshot=()=>({questions,states,current,options:options(),mode,editor});function refresh(){cache2.invalidate(),tui.requestRender()}function setMode(next,editorText=""){mode=next,view.resetScroll(),editor.setText(editorText),editor.focused=dialogFocused&&isEditing(),refresh()}function finish(outcome){finished||(finished=!0,done({outcome,answers:orderedAnswers(questions,states)}))}function discardEdit(){let draft=state2().draft;mode.kind==="notes"&&draft.kind==="single"&&(draft.choice=mode.previous)}let onAbort=()=>{discardEdit(),finish("cancelled")};signal?.aborted?onAbort():signal?.addEventListener("abort",onAbort,{once:!0});function goTo(index3,warning){current=Math.max(0,Math.min(questions.length-1,index3)),warning&&(state2().warning=warning),setMode({kind:"choose"})}function advance(){if(questions.length===1&&state2().draft.kind==="single"){finish("answered");return}let missing=firstUnanswered(states);missing===void 0?setMode({kind:"review"}):goTo(missing)}function editCustom(){setMode({kind:"custom"},customText(state2())??"")}function editNotes(option){let target=state2(),draft=target.draft;if(option.kind==="other"){editCustom();return}if(draft.kind==="multi"&&!draft.selected.has(option.optionIndex)){target.warning="Select the option first, then add notes.",refresh();return}let previous=draft.kind==="single"?draft.choice:void 0;draft.kind==="single"&&(draft.choice={kind:"option",index:option.optionIndex},target.warning=void 0),setMode({kind:"notes",option:option.optionIndex,previous},target.notes.get(option.optionIndex)??"")}function pickSingle(option){let target=state2();if(target.draft.kind==="single"){if(option.kind==="other"){target.draft.choice?.kind==="custom"?advance():editCustom();return}target.draft.choice={kind:"option",index:option.optionIndex},target.warning=void 0,advance()}}function toggleMulti(option){let target=state2(),draft=target.draft;if(draft.kind==="multi"){if(target.warning=void 0,option.kind==="option")draft.selected.delete(option.optionIndex)||draft.selected.add(option.optionIndex);else if(draft.custom)draft.custom.selected=!draft.custom.selected;else{let tabKey=keyLabel("tui.input.tab",{keybindings});target.warning=tabKey?`Press ${tabKey} to type a custom answer.`:"Choose Type something to type a custom answer."}refresh()}}function submitMulti(){let target=state2();if(hasAnswer(target)){target.warning=void 0,advance();return}target.warning="Select at least one option, type a custom answer, or cancel the questions.",refresh()}editor.onSubmit=value=>{let target=state2(),text=value.trim();if(text.length>QUESTION_LIMITS.userTextChars){target.warning=`Keep notes and custom answers under ${QUESTION_LIMITS.userTextChars} characters.`,editor.setText(text),refresh();return}target.warning=void 0;let draft=target.draft;if(mode.kind==="notes"){text?target.notes.set(mode.option,text):target.notes.delete(mode.option),setMode({kind:"choose"});return}if(!text){setMode({kind:"choose"});return}if(draft.kind==="multi"){draft.custom={text,selected:!0},target.focus=options().length-1,setMode({kind:"choose"});return}draft.choice={kind:"custom",text},setMode({kind:"choose"}),advance()};function handleReviewInput(data){if(keyMatches(data,"tui.select.up")||keyMatches(data,"tui.select.down"))view.scrollReview(keyMatches(data,"tui.select.up")?-1:1),refresh();else if(keyMatches(data,"tui.select.confirm")){let missing=firstUnanswered(states);missing===void 0?finish("answered"):goTo(missing,"Answer this question before submitting.")}else(keyMatches(data,"tui.editor.cursorLeft")||keyMatches(data,"tui.select.cancel"))&&goTo(questions.length-1)}function handleEditorInput(data){if(keyMatches(data,"tui.select.cancel")){discardEdit(),setMode({kind:"choose"});return}editor.handleInput(data),refresh()}function handleChoiceInput(data){let chat2=mode.kind==="chat",target=state2(),choices=options(),multi=target.draft.kind==="multi";if(keyMatches(data,"tui.editor.cursorLeft"))current>0&&goTo(current-1);else if(keyMatches(data,"tui.editor.cursorRight"))current<questions.length-1?goTo(current+1):firstUnanswered(states)===void 0&&setMode({kind:"review"});else if(keyMatches(data,"app.question.pageUp")||keyMatches(data,"app.question.pageDown"))view.pageDetails(snapshot(),keyMatches(data,"app.question.pageUp")?-1:1),refresh();else if(keyMatches(data,"tui.select.up")){if(target.warning=void 0,chat2){target.focus=choices.length-1,setMode({kind:"choose"});return}target.focus=Math.max(0,target.focus-1),refresh()}else if(keyMatches(data,"tui.select.down")){if(chat2)return;target.warning=void 0,target.focus<choices.length-1?(target.focus++,refresh()):setMode({kind:"chat"})}else if(keyMatches(data,"tui.input.tab"))chat2||editNotes(choices[target.focus]);else if(data.length===1&&data>="1"&&data<="9"){let index3=data.charCodeAt(0)-49,option=choices[index3];if(!option)return;target.focus=index3,target.warning=void 0,chat2&&setMode({kind:"choose"}),multi?toggleMulti(option):pickSingle(option)}else if(chat2)keyMatches(data,"tui.select.confirm")?finish("needs_clarification"):keyMatches(data,"tui.select.cancel")&&finish("cancelled");else if(multi&&keyMatches(data,"app.list.toggle"))toggleMulti(choices[target.focus]);else if(keyMatches(data,"tui.select.confirm")){let option=choices[target.focus];multi?option.kind==="other"&&customText(target)===void 0?editCustom():submitMulti():pickSingle(option)}else keyMatches(data,"tui.select.cancel")&&finish("cancelled")}function render2(width){return cache2.get(width,tui.terminal.rows,(renderWidth,rows)=>view.render(snapshot(),renderWidth,rows))}return{get focused(){return dialogFocused},set focused(value){dialogFocused=value,editor.focused=dialogFocused&&isEditing()},render:render2,invalidate:()=>{cache2.invalidate()},handleInput(data){mode.kind==="review"?handleReviewInput(data):isEditing()?handleEditorInput(data):handleChoiceInput(data)},dispose(){signal?.removeEventListener("abort",onAbort)}}}}var MAX_RENDERED_QUESTIONS=4,MAX_RENDERED_ANSWERS=4,MAX_RENDERED_SELECTIONS=5,MAX_RENDERED_ANSWER_CHARS=400,MAX_RENDERED_NOTE_CHARS=400,MAX_RENDERED_ERROR_CHARS=400,MAX_RENDERED_VALIDATION_SUMMARY_CHARS=240,MAX_RENDERED_FALLBACK_CHARS=1e3;function safeRecord(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)?value:void 0}function safeValue(record,key){try{return record[key]}catch{return}}function truncate4(text,limit){return text.length>limit?`${text.slice(0,Math.max(0,limit-1))}\u2026`:text}function oneLine2(value,limit){return typeof value=="string"?truncate4(value.replace(/\s+/gu," ").trim(),limit):""}function questionsFromArgs(args){let record=safeRecord(args);if(!record)return[];let rawQuestions=safeValue(record,"questions");if(!Array.isArray(rawQuestions))return[];let questions=[];for(let rawQuestion of rawQuestions.slice(0,MAX_RENDERED_QUESTIONS)){let question2=safeRecord(rawQuestion);if(!question2)continue;let rawHeader=safeValue(question2,"header");if(typeof rawHeader!="string")continue;let header2=oneLine2(rawHeader,QUESTION_LIMITS.headerChars)||`Decision ${questions.length+1}`;questions.push({header:header2,question:oneLine2(safeValue(question2,"question"),QUESTION_LIMITS.questionChars),multiSelect:safeValue(question2,"multiSelect")===!0})}return questions}function resultFallback(result2){if(!Array.isArray(result2.content))return"";let blocks=[];for(let rawBlock of result2.content.slice(0,8)){let block=safeRecord(rawBlock);if(!block||safeValue(block,"type")!=="text")continue;let text=safeValue(block,"text");typeof text=="string"&&blocks.push(text)}return truncate4(blocks.join(`
1261
+ ${CLARIFICATION_FOLLOW_UP}`;return buildToolResult(answers.length?boundedAnswers(answers,envelope):envelope(""),{answers,outcome:"needs_clarification",cancelled:!1})}var OTHER_OPTION={kind:"other",label:"Type something"};function newQuestionState(question2){return{focus:0,draft:question2.multiSelect?{kind:"multi",selected:new Set}:{kind:"single"},notes:new Map}}function displayOptions(question2){return[...question2.options.map((option,optionIndex)=>({...option,kind:"option",optionIndex})),OTHER_OPTION]}function hasAnswer(state2){let draft=state2.draft;return draft.kind==="single"?draft.choice!==void 0:draft.selected.size>0||draft.custom?.selected===!0}function customText(state2){let draft=state2.draft;return draft.kind==="multi"?draft.custom?.text:draft.choice?.kind==="custom"?draft.choice.text:void 0}function isSelected(state2,option){let draft=state2.draft;return draft.kind==="multi"?option.kind==="other"?draft.custom?.selected===!0:draft.selected.has(option.optionIndex):option.kind==="other"?draft.choice?.kind==="custom":draft.choice?.kind==="option"&&draft.choice.index===option.optionIndex}function firstUnanswered(states){let index3=states.findIndex(state2=>!hasAnswer(state2));return index3===-1?void 0:index3}function selectedNotes(question2,state2,indices){let notes=[];for(let index3 of indices){let text=state2.notes.get(index3)?.trim();text&&notes.push({option:question2.options[index3].label,text})}return notes.length?notes:void 0}function orderedAnswers(questions,states){let answers=[];for(let questionIndex=0;questionIndex<questions.length;questionIndex++){let question2=questions[questionIndex],draft=states[questionIndex].draft,base={questionIndex,question:question2.question,header:question2.header};if(draft.kind==="single"){let choice=draft.choice;if(choice?.kind==="custom"&&answers.push({...base,kind:"custom",answer:choice.text}),choice?.kind==="option"){let option=question2.options[choice.index],notes2=selectedNotes(question2,states[questionIndex],[choice.index]);answers.push({...base,kind:"option",answer:option.label,...option.preview?{preview:option.preview}:{},...notes2?{notes:notes2}:{}})}continue}if(!hasAnswer(states[questionIndex]))continue;let indices=[...draft.selected].sort((a,b)=>a-b),selected=indices.map(index3=>question2.options[index3].label);draft.custom?.selected&&selected.push(draft.custom.text);let notes=selectedNotes(question2,states[questionIndex],indices);answers.push({...base,kind:"multi",answer:null,selected,...notes?{notes}:{}})}return answers}var DIALOG_MAX_FRACTION=.5,DIALOG_MIN_ROWS=16,VIEWPORT_SCROLL_STEP=4;function dialogRowBudget(terminalRows){let rows=Math.max(1,Math.floor(terminalRows));return Math.min(rows,Math.max(DIALOG_MIN_ROWS,Math.floor(rows*DIALOG_MAX_FRACTION)))}function applyVerticalViewport(lines,width,maxRows,theme2,options={}){if(lines.length<=maxRows)return{lines,start:0,maxStart:0};if(maxRows<5){let anchor=Math.max(0,Math.min(lines.length-1,options.anchorLine??0)),start2=Math.max(0,Math.min(lines.length-maxRows,anchor-Math.floor(maxRows/2)));return{lines:lines.slice(start2,start2+maxRows),start:start2,maxStart:lines.length-maxRows}}let first=lines[0]??"",last=lines[lines.length-1]??"",body2=lines.slice(1,-1),contentRows=maxRows-4,maxStart=Math.max(0,body2.length-contentRows),anchorInBody=Math.max(0,Math.min(body2.length-1,(options.anchorLine??1)-1)),requestedStart=options.preferredStart??Math.max(0,anchorInBody-Math.floor(contentRows/2)),start=Math.max(0,Math.min(maxStart,requestedStart)),bottomHidden=Math.max(0,body2.length-start-contentRows),indicator=text=>theme2.fg("dim",truncateToWidth(text,Math.max(1,width)));return{lines:[first,start>0?indicator(`\u2191 ${start} rows hidden`):"",...body2.slice(start,start+contentRows),bottomHidden>0?indicator(`\u2193 ${bottomHidden} rows hidden`):"",last],start,maxStart}}function detailKey(snapshot){return`${snapshot.current}:${snapshot.states[snapshot.current].focus}:${snapshot.mode.kind==="chat"}`}var joinHints=(...hints)=>hints.filter(Boolean).join(" \u2022 "),QuestionDialogView=class{constructor(theme2,keybindings){this.details=new DetailPane,this.previews=new PreviewLinesCache,this.reviewScroll=0,this.reviewMaxScroll=0,this.theme=theme2,this.keybindings=keybindings}resetScroll(){this.details.reset(),this.reviewScroll=0,this.reviewMaxScroll=0}pageDetails(snapshot,direction){this.details.page(detailKey(snapshot),direction)}scrollReview(direction){this.reviewScroll=Math.max(0,Math.min(this.reviewMaxScroll,this.reviewScroll+direction*VIEWPORT_SCROLL_STEP))}render(snapshot,width,terminalRows){let theme2=this.theme,lines=[],renderWidth=Math.max(1,width),maxRows=dialogRowBudget(terminalRows);if(lines.push(ruleBorder(theme2,renderWidth)),this.renderTabs(snapshot,renderWidth,lines),snapshot.mode.kind==="review"){this.renderReview(snapshot,renderWidth,lines),lines.push(ruleBorder(theme2,renderWidth));let viewport=applyVerticalViewport(lines,renderWidth,maxRows,theme2,{preferredStart:this.reviewScroll});return this.reviewMaxScroll=viewport.maxStart,this.reviewScroll=viewport.start,viewport.lines}let{mode,options,editor}=snapshot,question2=snapshot.questions[snapshot.current],state2=snapshot.states[snapshot.current],isMulti=state2.draft.kind==="multi",chat2=mode.kind==="chat",editing=mode.kind==="custom"||mode.kind==="notes";wrapWithPrefix(" ",theme2.fg("text",question2.question),renderWidth,lines);let footerLines=this.renderFooter(snapshot,renderWidth,`1-${Math.min(9,options.length)}`),areaRows=Math.max(1,maxRows-lines.length-footerLines.length),sideBySide=!editing&&renderWidth>=72,listWidth=sideBySide?Math.min(Math.floor((renderWidth-3)/2),Math.max(24,...options.map((option,index3)=>6+visibleWidth(`${index3+1}. ${option.label.replace(/\s+/gu," ")}`)+2))):renderWidth,detailWidth=sideBySide?renderWidth-listWidth-3:renderWidth,custom=customText(state2),optionLines=[],items=[],focusItem=chat2?options.length-1:state2.focus;for(let index3=0;index3<options.length;index3++){let option=options[index3],focused=!chat2&&index3===state2.focus,selected=isSelected(state2,option),marker2=isMulti?option.kind==="other"&&custom===void 0?" ":selected?theme2.fg("success","[x]"):theme2.fg("dim","[ ]"):" ",focusArrow=focused?theme2.fg("accent","\u2192"):" ",note=option.kind==="option"&&state2.notes.has(option.optionIndex)?theme2.fg("success"," +note"):"",otherText=option.kind==="other"?custom:void 0,labelText=(otherText?`${option.label} \u270E ${otherText}`:option.label).replace(/\s+/gu," "),checkmark=selected&&!isMulti?" \u2713":"",label=`${index3+1}. ${labelText}${checkmark}${note}`,color=focused?"accent":selected?"success":"text",row=truncateToWidth(`${focusArrow} ${marker2} ${theme2.fg(color,label)}`,listWidth);optionLines.push(focused?theme2.bg("selectedBg",row+" ".repeat(Math.max(0,listWidth-visibleWidth(row)))):row),items.push({height:1,countsAsOption:!0})}if(editing){let start=optionLines.length,label=mode.kind==="notes"?`Notes for ${question2.options[mode.option].label}:`:"Your answer:";optionLines.push(theme2.fg("muted",truncateToWidth(` ${label}`,listWidth)));for(let line of editor.render(Math.max(1,listWidth-2)))optionLines.push(` ${line}`);items.push({height:optionLines.length-start,countsAsOption:!1}),focusItem=items.length-1}let regionStart=lines.length,focusRow;if(editing){let windowed=this.windowOptionLines(optionLines,items,focusItem,areaRows,renderWidth);focusRow=windowed.focusRow,lines.push(...windowed.rows)}else{let option=options[state2.focus],content=[],hasPreview=!chat2&&option.kind==="option"&&!!option.preview,title=chat2?"Chat about this":`${hasPreview?"Preview":"Details"} \xB7 ${option.label}`;if(!chat2&&visibleWidth(`${state2.focus+1}. ${option.label.replace(/\s+/gu," ")}`)>listWidth-6&&wrapWithPrefix(" ",theme2.fg("text",option.label),detailWidth,content),chat2)wrapWithPrefix(" ",theme2.fg("muted","Discuss this question before choosing an answer."),detailWidth,content);else if(option.kind==="option"){wrapWithPrefix(" ",theme2.fg("muted",option.description),detailWidth,content);let note=state2.notes.get(option.optionIndex);note&&wrapWithPrefix(" ",theme2.fg("success",`Note: ${note}`),detailWidth,content),hasPreview&&option.preview&&content.push("",...this.previewLines(option.preview,detailWidth))}else wrapWithPrefix(" ",theme2.fg("muted",custom||"Write your own answer instead of choosing an option."),detailWidth,content);let optionRows=sideBySide?areaRows:Math.max(1,Math.min(options.length,areaRows-4)),detailRows=sideBySide?areaRows:Math.max(1,areaRows-optionRows),left=this.windowOptionLines(optionLines,items,focusItem,optionRows,listWidth),right=this.details.render(detailKey(snapshot),title,content,detailWidth,detailRows,this.keyGroupAction(["app.question.pageUp","app.question.pageDown"],"scroll"),theme2);if(focusRow=left.focusRow,sideBySide)for(let row=0;row<Math.max(left.rows.length,right.length);row++){let leftText=left.rows[row]??"",leftPadded=leftText+" ".repeat(Math.max(0,listWidth-visibleWidth(leftText)));lines.push(`${leftPadded}${theme2.fg("dim"," \u2502 ")}${right[row]??""}`)}else lines.push(...left.rows,...right)}let anchorLine=regionStart+focusRow;return lines.push(...footerLines),applyVerticalViewport(lines,renderWidth,maxRows,theme2,{anchorLine}).lines}keyAction(keybinding,action){let label=keyLabel(keybinding,{keybindings:this.keybindings});return label?`${label} ${action}`:""}keyGroupAction(bindings,action){let labels=bindings.map(binding=>keyLabel(binding,{keybindings:this.keybindings})).filter(Boolean).join("/");return labels?`${labels} ${action}`:""}previewLines(previewText,width){return this.previews.get(previewText,width,()=>new Markdown(previewText,1,0,getMarkdownTheme()).render(Math.max(1,width)))}renderTabs(snapshot,renderWidth,lines){let{questions,states,current,mode}=snapshot,theme2=this.theme;if(questions.length<2)return;let tabCount=questions.length+1,headerWidth=Math.max(4,Math.floor((renderWidth-tabCount*5)/tabCount)),reviewing=mode.kind==="review",tabs=[...questions.map((question2,index3)=>{let answered=hasAnswer(states[index3]),label=` ${answered?"\u25A0":"\u25A1"} ${truncateToWidth(question2.header,headerWidth)} `;return!reviewing&&index3===current?theme2.bg("selectedBg",theme2.fg(answered?"success":"text",label)):theme2.fg(answered?"success":"muted",label)}),reviewing?theme2.bg("selectedBg",theme2.fg("text"," \u2713 Submit ")):theme2.fg(firstUnanswered(states)===void 0?"success":"dim"," \u2713 Submit ")].join(" ");wrapWithPrefix(" ",tabs,renderWidth,lines)}renderReview(snapshot,renderWidth,lines){let theme2=this.theme;wrapWithPrefix(" ",theme2.fg("accent","Review answers"),renderWidth,lines),lines.push("");for(let answer of orderedAnswers(snapshot.questions,snapshot.states)){wrapWithPrefix(" ",theme2.fg("text",`${answer.questionIndex+1}. ${answer.question}`),renderWidth,lines),wrapWithPrefix(" ",theme2.fg("success",answerScalar(answer)),renderWidth,lines);for(let note of answer.notes??[])wrapWithPrefix(" ",theme2.fg("muted",`Note for ${note.option}: ${note.text}`),renderWidth,lines);lines.push("")}wrapWithPrefix(" ",theme2.fg("dim",joinHints(this.keyAction("tui.select.confirm","submit"),this.keyAction("tui.select.cancel","edit last question"),this.keyGroupAction(["tui.select.up","tui.select.down"],"scroll"))),renderWidth,lines)}renderFooter(snapshot,renderWidth,digitRange){let theme2=this.theme,{mode}=snapshot,state2=snapshot.states[snapshot.current],isMulti=state2.draft.kind==="multi",chat2=mode.kind==="chat",lines=[];wrapWithPrefix(`${chat2?theme2.fg("accent","\u2192"):" "} `,theme2.fg(chat2?"accent":"text","Chat about this"),renderWidth,lines),state2.warning&&(lines.push(""),wrapWithPrefix(" ",theme2.fg("warning",state2.warning),renderWidth,lines));let submitLabel=keyLabel("tui.input.submit"),editorSubmit=action=>submitLabel?`${submitLabel} ${action}`:"",questionsHint=snapshot.questions.length>1?this.keyGroupAction(["tui.editor.cursorLeft","tui.editor.cursorRight"],"questions"):"",hints;mode.kind==="notes"?hints=joinHints(editorSubmit("save notes"),this.keyAction("tui.select.cancel","back")):mode.kind==="custom"?hints=joinHints(editorSubmit(isMulti?"save custom answer":"continue"),this.keyAction("tui.select.cancel","back")):chat2?hints=joinHints(this.keyAction("tui.select.confirm","discuss"),this.keyAction("tui.select.up","return to options"),this.keyAction("tui.select.cancel","cancel")):hints=joinHints(this.keyGroupAction(["tui.select.up","tui.select.down"],"navigate"),`${digitRange} ${isMulti?"toggle":"select"}`,isMulti?this.keyAction("app.list.toggle","toggle focused"):"",this.keyAction("tui.input.tab","notes/custom"),this.keyAction("tui.select.confirm",isMulti?"continue":"select"),questionsHint,this.keyAction("tui.select.cancel","cancel"));let hintLine="";for(let hint of hints.split(" \u2022 ")){let joined=hintLine?`${hintLine} \u2022 ${hint}`:hint;hintLine&&visibleWidth(joined)>renderWidth-1?(wrapWithPrefix(" ",theme2.fg("dim",hintLine),renderWidth,lines),hintLine=hint):hintLine=joined}return hintLine&&wrapWithPrefix(" ",theme2.fg("dim",hintLine),renderWidth,lines),lines.push(ruleBorder(theme2,renderWidth)),lines}windowOptionLines(optionLines,items,focus,rows,width){let theme2=this.theme,window=windowItems(items,focus,rows),rowsBefore=count=>items.slice(0,count).reduce((sum,item)=>sum+item.height,0),from=rowsBefore(window.first),block=optionLines.slice(from,rowsBefore(window.last+1)),visible=applyVerticalViewport(block,width,window.contentRows,theme2,{anchorLine:Math.max(0,block.findIndex(line=>line.includes(CURSOR_MARKER)))}).lines;if(!window.showAbove&&!window.showBelow)return{rows:visible,focusRow:rowsBefore(focus)-from};let hint=(direction,count)=>theme2.fg("dim",` ${truncateToWidth(moreOptionsHint(direction,count),Math.max(1,width-1))}`),spare=Array.from({length:Math.max(0,window.contentRows-visible.length)},()=>"");return{rows:[...window.showAbove?[hint("up",window.hiddenAbove)]:[],...visible,...window.showBelow?[hint("down",window.hiddenBelow)]:[],...spare],focusRow:(window.showAbove?1:0)+rowsBefore(focus)-from}}};function createQuestionDialog(questions,signal){return(tui,theme2,keybindings,done)=>{let states=questions.map(newQuestionState),optionsByQuestion=questions.map(displayOptions),current=0,mode={kind:"choose"},dialogFocused=!1,finished=!1,cache2=new WidthCachedRender,view=new QuestionDialogView(theme2,keybindings),editor=new Editor(tui,{borderColor:s=>theme2.fg("accent",s),selectList:{selectedPrefix:t=>theme2.fg("accent",t),selectedText:t=>theme2.fg("accent",t),description:t=>theme2.fg("muted",t),scrollInfo:t=>theme2.fg("dim",t),noMatch:t=>theme2.fg("warning",t)}}),keyMatches=(data,keybinding)=>keybindings.matches(data,keybinding),state2=()=>states[current],options=()=>optionsByQuestion[current],isEditing=()=>mode.kind==="custom"||mode.kind==="notes",snapshot=()=>({questions,states,current,options:options(),mode,editor});function refresh(){cache2.invalidate(),tui.requestRender()}function setMode(next,editorText=""){mode=next,view.resetScroll(),editor.setText(editorText),editor.focused=dialogFocused&&isEditing(),refresh()}function finish(outcome){finished||(finished=!0,done({outcome,answers:orderedAnswers(questions,states)}))}function discardEdit(){let draft=state2().draft;mode.kind==="notes"&&draft.kind==="single"&&(draft.choice=mode.previous)}let onAbort=()=>{discardEdit(),finish("cancelled")};signal?.aborted?onAbort():signal?.addEventListener("abort",onAbort,{once:!0});function goTo(index3,warning){current=Math.max(0,Math.min(questions.length-1,index3)),warning&&(state2().warning=warning),setMode({kind:"choose"})}function advance(){if(questions.length===1&&state2().draft.kind==="single"){finish("answered");return}let missing=firstUnanswered(states);missing===void 0?setMode({kind:"review"}):goTo(missing)}function editCustom(){setMode({kind:"custom"},customText(state2())??"")}function editNotes(option){let target=state2(),draft=target.draft;if(option.kind==="other"){editCustom();return}if(draft.kind==="multi"&&!draft.selected.has(option.optionIndex)){target.warning="Select the option first, then add notes.",refresh();return}let previous=draft.kind==="single"?draft.choice:void 0;draft.kind==="single"&&(draft.choice={kind:"option",index:option.optionIndex},target.warning=void 0),setMode({kind:"notes",option:option.optionIndex,previous},target.notes.get(option.optionIndex)??"")}function pickSingle(option){let target=state2();if(target.draft.kind==="single"){if(option.kind==="other"){target.draft.choice?.kind==="custom"?advance():editCustom();return}target.draft.choice={kind:"option",index:option.optionIndex},target.warning=void 0,advance()}}function toggleMulti(option){let target=state2(),draft=target.draft;if(draft.kind==="multi"){if(target.warning=void 0,option.kind==="option")draft.selected.delete(option.optionIndex)||draft.selected.add(option.optionIndex);else if(draft.custom)draft.custom.selected=!draft.custom.selected;else{let tabKey=keyLabel("tui.input.tab",{keybindings});target.warning=tabKey?`Press ${tabKey} to type a custom answer.`:"Choose Type something to type a custom answer."}refresh()}}function submitMulti(){let target=state2();if(hasAnswer(target)){target.warning=void 0,advance();return}target.warning="Select at least one option, type a custom answer, or cancel the questions.",refresh()}editor.onSubmit=value=>{let target=state2(),text=value.trim();if(text.length>QUESTION_LIMITS.userTextChars){target.warning=`Keep notes and custom answers under ${QUESTION_LIMITS.userTextChars} characters.`,editor.setText(text),refresh();return}target.warning=void 0;let draft=target.draft;if(mode.kind==="notes"){text?target.notes.set(mode.option,text):target.notes.delete(mode.option),setMode({kind:"choose"});return}if(!text){setMode({kind:"choose"});return}if(draft.kind==="multi"){draft.custom={text,selected:!0},target.focus=options().length-1,setMode({kind:"choose"});return}draft.choice={kind:"custom",text},setMode({kind:"choose"}),advance()};function handleReviewInput(data){if(keyMatches(data,"tui.select.up")||keyMatches(data,"tui.select.down"))view.scrollReview(keyMatches(data,"tui.select.up")?-1:1),refresh();else if(keyMatches(data,"tui.select.confirm")){let missing=firstUnanswered(states);missing===void 0?finish("answered"):goTo(missing,"Answer this question before submitting.")}else(keyMatches(data,"tui.editor.cursorLeft")||keyMatches(data,"tui.select.cancel"))&&goTo(questions.length-1)}function handleEditorInput(data){if(keyMatches(data,"tui.select.cancel")){discardEdit(),setMode({kind:"choose"});return}editor.handleInput(data),refresh()}function handleChoiceInput(data){let chat2=mode.kind==="chat",target=state2(),choices=options(),multi=target.draft.kind==="multi";if(keyMatches(data,"tui.editor.cursorLeft"))current>0&&goTo(current-1);else if(keyMatches(data,"tui.editor.cursorRight"))current<questions.length-1?goTo(current+1):firstUnanswered(states)===void 0&&setMode({kind:"review"});else if(keyMatches(data,"app.question.pageUp")||keyMatches(data,"app.question.pageDown"))view.pageDetails(snapshot(),keyMatches(data,"app.question.pageUp")?-1:1),refresh();else if(keyMatches(data,"tui.select.up")){if(target.warning=void 0,chat2){target.focus=choices.length-1,setMode({kind:"choose"});return}target.focus=Math.max(0,target.focus-1),refresh()}else if(keyMatches(data,"tui.select.down")){if(chat2)return;target.warning=void 0,target.focus<choices.length-1?(target.focus++,refresh()):setMode({kind:"chat"})}else if(keyMatches(data,"tui.input.tab"))chat2||editNotes(choices[target.focus]);else if(data.length===1&&data>="1"&&data<="9"){let index3=data.charCodeAt(0)-49,option=choices[index3];if(!option)return;target.focus=index3,target.warning=void 0,chat2&&setMode({kind:"choose"}),multi?toggleMulti(option):pickSingle(option)}else if(chat2)keyMatches(data,"tui.select.confirm")?finish("needs_clarification"):keyMatches(data,"tui.select.cancel")&&finish("cancelled");else if(multi&&keyMatches(data,"app.list.toggle"))toggleMulti(choices[target.focus]);else if(keyMatches(data,"tui.select.confirm")){let option=choices[target.focus];multi?option.kind==="other"&&customText(target)===void 0?editCustom():submitMulti():pickSingle(option)}else keyMatches(data,"tui.select.cancel")&&finish("cancelled")}function render2(width){return cache2.get(width,tui.terminal.rows,(renderWidth,rows)=>view.render(snapshot(),renderWidth,rows))}return{get focused(){return dialogFocused},set focused(value){dialogFocused=value,editor.focused=dialogFocused&&isEditing()},render:render2,invalidate:()=>{cache2.invalidate()},handleInput(data){mode.kind==="review"?handleReviewInput(data):isEditing()?handleEditorInput(data):handleChoiceInput(data)},dispose(){signal?.removeEventListener("abort",onAbort)}}}}var MAX_RENDERED_QUESTIONS=4,MAX_RENDERED_ANSWERS=4,MAX_RENDERED_SELECTIONS=5,MAX_RENDERED_ANSWER_CHARS=400,MAX_RENDERED_NOTE_CHARS=400,MAX_RENDERED_ERROR_CHARS=400,MAX_RENDERED_VALIDATION_SUMMARY_CHARS=240,MAX_RENDERED_FALLBACK_CHARS=1e3;function safeRecord(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)?value:void 0}function safeValue(record,key){try{return record[key]}catch{return}}function truncate4(text,limit){return text.length>limit?`${text.slice(0,Math.max(0,limit-1))}\u2026`:text}function oneLine2(value,limit){return typeof value=="string"?truncate4(value.replace(/\s+/gu," ").trim(),limit):""}function questionsFromArgs(args){let record=safeRecord(args);if(!record)return[];let rawQuestions=safeValue(record,"questions");if(!Array.isArray(rawQuestions))return[];let questions=[];for(let rawQuestion of rawQuestions.slice(0,MAX_RENDERED_QUESTIONS)){let question2=safeRecord(rawQuestion);if(!question2)continue;let rawHeader=safeValue(question2,"header");if(typeof rawHeader!="string")continue;let header2=oneLine2(rawHeader,QUESTION_LIMITS.headerChars)||`Decision ${questions.length+1}`;questions.push({header:header2,question:oneLine2(safeValue(question2,"question"),QUESTION_LIMITS.questionChars),multiSelect:safeValue(question2,"multiSelect")===!0})}return questions}function resultFallback(result2){if(!Array.isArray(result2.content))return"";let blocks=[];for(let rawBlock of result2.content.slice(0,8)){let block=safeRecord(rawBlock);if(!block||safeValue(block,"type")!=="text")continue;let text=safeValue(block,"text");typeof text=="string"&&blocks.push(text)}return truncate4(blocks.join(`
1262
1262
  `),MAX_RENDERED_FALLBACK_CHARS)}function validationSummary(text){let match2=/^Validation failed for tool\s+"question":\s*([\s\S]*?)(?:\r?\n\s*\r?\nReceived arguments:|$)/u.exec(text.trim());if(!match2)return;let errors=match2[1].split(/\r?\n/u).map(line=>line.trim().replace(/^-\s*/u,"")).filter(Boolean);return{summary:`Invalid arguments \xB7 ${oneLine2(errors[0],MAX_RENDERED_VALIDATION_SUMMARY_CHARS)||"schema validation failed"}`,hiddenErrors:Math.max(0,errors.length-1)}}function renderFallbackResult(result2,expanded,theme2){let fallback=resultFallback(result2);if(!fallback)return new Text("Question result unavailable",0,0);let validation=validationSummary(fallback);if(!validation||expanded)return new Text(fallback,0,0);let moreErrors=validation.hiddenErrors>0?` \xB7 +${validation.hiddenErrors} more`:"",expandKey=keyLabel("app.tools.expand"),hint=theme2.fg("muted",expandKey?` (${expandKey} to expand)`:" (more details available)");return new Text(`${theme2.fg("error",validation.summary)}${theme2.fg("muted",moreErrors)}${hint}`,0,0)}function normalizeAnswer(value,index3){let raw=safeRecord(value);if(!raw)return;let rawHeader=safeValue(raw,"header");if(typeof rawHeader!="string")return;let header2=oneLine2(rawHeader,QUESTION_LIMITS.headerChars)||`Decision ${index3+1}`,text;if(safeValue(raw,"kind")==="multi"){let rawSelected=safeValue(raw,"selected");text=Array.isArray(rawSelected)?rawSelected.slice(0,MAX_RENDERED_SELECTIONS).map((entry,selectedIndex)=>typeof entry!="string"?"":oneLine2(entry,MAX_RENDERED_ANSWER_CHARS)||`Option ${selectedIndex+1}`).filter(Boolean).join(", "):""}else text=oneLine2(safeValue(raw,"answer"),MAX_RENDERED_ANSWER_CHARS);let rawNotes=safeValue(raw,"notes"),notes=Array.isArray(rawNotes)?rawNotes.slice(0,MAX_RENDERED_ANSWERS).map(entry=>{let note=safeRecord(entry);if(!note)return;let option=oneLine2(safeValue(note,"option"),QUESTION_LIMITS.optionLabelChars),text2=oneLine2(safeValue(note,"text"),MAX_RENDERED_NOTE_CHARS);return option&&text2?{option,text:text2}:void 0}).filter(note=>note!==void 0):[];return{header:header2,text:text||"(no input)",notes}}function normalizeDetails(value){let raw=safeRecord(value);if(!raw)return;let outcome=safeValue(raw,"outcome");if(outcome!=="answered"&&outcome!=="cancelled"&&outcome!=="needs_clarification"&&outcome!=="error")return;let rawAnswers=safeValue(raw,"answers"),answers=Array.isArray(rawAnswers)?rawAnswers.slice(0,MAX_RENDERED_ANSWERS).map((answer,index3)=>normalizeAnswer(answer,index3)).filter(answer=>answer!==void 0):[],message=oneLine2(safeValue(raw,"message"),MAX_RENDERED_ERROR_CHARS);return{answers,outcome,...message?{message}:{}}}function errorMessage6(details){return details.message??"The question tool could not continue"}function answerLines(answers,theme2){return answers.map(answer=>{let notes=answer.notes.map(note=>`
1263
1263
  ${theme2.fg("muted",` Note for ${note.option}: ${note.text}`)}`);return`${theme2.fg("accent",answer.header)}: ${theme2.fg("text",answer.text)}${notes.join("")}`})}function renderOutcome(title,details,expanded,theme2){return!expanded||details.answers.length===0?new Text(title,0,0):new Text(`${title}
1264
1264
  ${answerLines(details.answers,theme2).join(`
@@ -1399,12 +1399,12 @@ ${hidden} more records not shown.`:""}${foregroundOmissionNote(foregroundOmitted
1399
1399
  `)}function firstCommandLine(command){return(command.split(/\r?\n/).find(candidate=>candidate.trim().length>0)??command).trim()}function fileNameOf(path10){return path10.replace(/\\/g,"/").split("/").at(-1)??path10}var RESULT_EXPAND_LIMIT=4e3;function capForTranscript(text,limit,mode="tail"){return text.length<=limit?text:mode==="head"?`${text.slice(0,limit)}\u2026`:`\u2026${text.slice(-limit)}`}function renderTasksCall(args,theme2,_context){switch(args.action){case"read":{let mode=args.mode?` ${args.mode}`:"",size=args.bytes!==void 0?` ${formatSize(args.bytes)}`:"";return new Text(`${theme2.fg("toolTitle",theme2.bold("tasks read "))}${theme2.fg("accent",args.taskId??"")}${theme2.fg("muted",`${mode}${size}`)}`,0,0)}case"kill":return new Text(`${theme2.fg("toolTitle",theme2.bold("tasks kill "))}${theme2.fg("accent",args.taskId??"")}`,0,0);case"list":return new Text(theme2.fg("toolTitle",theme2.bold("tasks list")),0,0);default:{let action=typeof args.action=="string"?` ${theme2.fg("dim",args.action)}`:"";return new Text(`${theme2.fg("toolTitle",theme2.bold("tasks"))}${action}`,0,0)}}}function renderTasksResult(result2,options,theme2,context){let details=result2.details,summary=details&&!context.isError?resultSummaryLine(details,theme2,options.expanded):void 0;if(summary===void 0||details===void 0){let text=result2.content.find(part=>part.type==="text")?.text??"";return new Text(theme2.fg("toolOutput",text.trimEnd()),0,0)}let container=new Container;if(container.addChild(new TruncatedText(summary,1,0)),options.expanded){let text=result2.content.find(part=>part.type==="text")?.text??"",mode=details.action==="read"?details.mode:void 0;container.addChild(new Text("",0,0)),container.addChild(new Text(theme2.fg("toolOutput",capForTranscript(text,RESULT_EXPAND_LIMIT,mode).trimEnd()),1,0))}return container}function resultSummaryLine(details,theme2,expanded){let shownPath=path10=>expanded?path10:fileNameOf(path10),mark=status=>{let{color,glyph}=statusView(status);return theme2.fg(color,glyph)};switch(details.action){case"read":{let size=details.sliceBytes!==details.totalBytes?`${details.mode} ${formatSize(details.sliceBytes)} of ${formatSize(details.totalBytes)}`:formatSize(details.totalBytes);return`${theme2.fg("muted","\u2192 ")}${theme2.fg("accent",details.taskId)}${theme2.fg("muted",`${details.status?` ${statusName(details.status)} \xB7`:""} ${size}${details.outputPath?` \xB7 ${shownPath(details.outputPath)}`:""}`)}`}case"kill":{let status=details.status??(details.requested?"stopping":"cancelled");return`${mark(status)} ${theme2.fg("accent",details.taskId)}${theme2.fg("muted",` ${statusName(status)}${details.requested?" \xB7 cancellation requested":""}`)}`}case"list":{let hidden=details.hidden>0?` \xB7 ${details.hidden} more finished`:"",omitted=details.foregroundOmitted?` \xB7 ${details.foregroundOmitted} foreground omitted`:"";return theme2.fg("muted",`${details.running} running \xB7 ${details.finished} finished${hidden}${omitted}`)}default:return}}function createTasksToolDefinition(){return{name:TASKS_TOOL_NAME,label:TASKS_TOOL_NAME,description:TASKS_TOOL_DESCRIPTION,promptSnippet:TASKS_PROMPT_SNIPPET,promptGuidelines:TASKS_PROMPT_GUIDELINES,parameters:tasksSchema,constrainedSampling:{type:"json_schema",strict:"prefer"},async execute(_toolCallId,params,_signal,_onUpdate,ctx){try{switch(params.action){case"read":return await runRead(ctx.tasks,params);case"kill":return runKill(ctx.tasks,params);case"list":return runList(ctx.tasks)}}catch(error){let message=error instanceof Error?error.message:String(error);throw new Error(boundedText(message))}},renderCall:renderTasksCall,renderResult:renderTasksResult}}var toolStyle={marker:{glyph:"\u25CF",color:{pending:"warning",success:"success",error:"error"}},rail:{glyph:"\u2502",color:"dim"},gap:{afterTool:0,afterMultilineTool:1,afterOther:1},collapsed:{headerOnly:new Set(["read","grep","find","ls"]),fallbackLines:10},fallbackArgsWidth:120};function toolStatus(state2){return state2.isPartial?"pending":state2.isError?"error":"success"}function toolMarkerColor(status){return toolStyle.marker.color[status]}function cellWidth(){return Math.max(visibleWidth(toolStyle.marker.glyph),visibleWidth(toolStyle.rail.glyph))}function gutterWidth(){return cellWidth()+1}function gutterCell(glyph,color){return`${theme.fg(color,glyph)}${" ".repeat(cellWidth()-visibleWidth(glyph)+1)}`}function isBlankLine(line){return line===""||stripAnsi(line).trim()===""}function dropLeadingBlankLines(lines){let start=0;for(;start<lines.length&&isBlankLine(lines[start]);)start++;return lines.slice(start)}var FramedComponent=class{constructor(component,kind,markerColor){this.component=component,this.kind=kind,this.markerColor=markerColor}render(width){let rendered=this.component.render(Math.max(1,width-gutterWidth())),lines=this.kind==="body"?dropLeadingBlankLines(rendered):rendered.length>1?[rendered[0],...dropLeadingBlankLines(rendered.slice(1))]:rendered;if(lines.length===0)return[];let rail=gutterCell(toolStyle.rail.glyph,toolStyle.rail.color),bareRail=theme.fg(toolStyle.rail.color,toolStyle.rail.glyph);return lines.map((line,index3)=>index3===0&&this.kind==="header"?`${gutterCell(toolStyle.marker.glyph,this.markerColor())}${line}`:isBlankLine(line)?bareRail:`${rail}${line}`)}invalidate(){this.component.invalidate()}};var SOURCE_LIMIT=64*1024,SAVED_ROWS=4;function savedText(message){let content=message.content,text="",clipped2=!1;if(typeof content=="string")text=content.slice(0,SOURCE_LIMIT),clipped2=content.length>SOURCE_LIMIT;else if(Array.isArray(content)){let visited2=0;for(let block of content){if(++visited2>256){clipped2=!0;break}if(!block||block.type!=="text"||typeof block.text!="string")continue;let next=`${text?`
1400
1400
  `:""}${block.text.slice(0,SOURCE_LIMIT+1)}`,remaining=SOURCE_LIMIT-text.length;if(text+=next.slice(0,remaining),next.length>remaining||block.text.length>SOURCE_LIMIT){clipped2=!0;break}}}return{text:cleanTaskText(text),clipped:clipped2}}function completionView(message){let task=readVersionedTask(message.details);if(!task){let{text,clipped:clipped2}=savedText(message);return{kind:"saved",body:text,truncated:clipped2}}return{kind:"task",label:cleanTaskText(task.label),title:cleanTaskText(task.title),duration:runtimeLabel(task),status:task.status,id:cleanTaskText(task.id),diagnostic:task.error===void 0?void 0:cleanTaskText(task.error)}}function shortId(id){return id.replace(/^(.+)-([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,"$1-$2")}var CompletionNotice=class{constructor(view,options,theme2){this.view=view,this.options=options,this.theme=theme2}invalidate(){}render(width){return width<1?[]:new FramedComponent({render:contentWidth=>this.renderContent(contentWidth),invalidate(){}},"header",()=>this.view.kind==="task"?statusView(this.view.status).color:"muted").render(width).map(line=>truncateToWidth(line,width,""))}renderContent(width){if(!Number.isFinite(width)||width<1)return[];let view=this.view,theme2=this.theme,padding=Math.min(Math.max(0,Math.floor(this.options.outputPad||0)-1),Math.floor((width-1)/2)),inner=width-padding*2,lines=[];if(view.kind==="task"){let duration=view.duration?` \xB7 ${view.duration}`:"";lines.push(`${theme2.fg("toolTitle",theme2.bold(view.label))}${theme2.fg("muted",` \xB7 Background ${statusName(view.status).toLowerCase()}${duration}`)}${theme2.fg("dim",` \xB7 ${shortId(view.id)}`)}`);let summary=view.title.split(`
1401
1401
  `).find(line=>line.trim())??view.title;summary&&lines.push(theme2.fg("toolOutput",summary)),view.diagnostic&&lines.push(theme2.fg(statusView(view.status).color,view.diagnostic))}else{lines.push(`${theme2.fg("toolTitle",theme2.bold("Notification"))}${theme2.fg("muted"," \xB7 Background result received")}`);let body2=wrapTextWithAnsi(view.body,inner).filter(line=>line.trim());for(let line of body2.slice(0,SAVED_ROWS))lines.push(theme2.fg("toolOutput",line));(body2.length>SAVED_ROWS||view.truncated)&&lines.push(theme2.fg("dim","\u2026 saved text shortened; the original message remains in session history"))}return lines.map(line=>" ".repeat(padding)+truncateToWidth(line,inner,"\u2026")+" ".repeat(padding))}};function renderTaskCompletion(message,options,theme2){let view;try{view=completionView(message)}catch{view={kind:"saved",body:"The saved notification could not be interpreted. Its original message remains in session history.",truncated:!1}}return new CompletionNotice(view,options,theme2)}var TaskViewport=class{constructor(tails=!1){this.scroll=0,this.entries=[],this.height=1,this.start=0,this.tailing=tails,this.following=tails}get follow(){return this.following}retarget(tails){this.tailing=tails,this.following=tails,this.scroll=0,this.anchor=void 0}layout(lines,width,height){this.height=Math.max(1,height),(lines!==this.wrapped?.lines||width!==this.wrapped.width)&&(this.wrapped={lines,width},this.entries=lines.flatMap((line,index3)=>{let column=0;return wrapTextWithAnsi(line,Math.max(1,width)).map(text=>{let entry={text,line:index3,column};return column+=visibleWidth(text),entry})}));let offset=this.scroll;if(this.anchor){let anchor=this.anchor,first=this.entries.findIndex(entry=>entry.line===anchor.line);if(first>=0)for(offset=first;offset+1<this.entries.length&&this.entries[offset+1].line===anchor.line&&this.entries[offset+1].column<=anchor.column;)offset++}return this.start=this.following?this.max:Math.min(offset,this.max),this.entries.slice(this.start,this.start+this.height).map(entry=>entry.text)}get max(){return Math.max(0,this.entries.length-this.height)}move(direction,page){this.scroll=Math.max(0,Math.min(this.max,this.start+direction*(page?this.height:1)));let entry=this.entries[this.scroll];this.anchor=entry?{line:entry.line,column:entry.column}:void 0,this.following=this.tailing&&direction>0&&this.scroll===this.max}jump(bottom){this.scroll=bottom?this.max:0;let entry=this.entries[this.scroll];this.anchor=entry?{line:entry.line,column:entry.column}:void 0,this.following=bottom&&this.tailing}get overflows(){return this.entries.length>this.height}get range(){return`${this.entries.length?this.start+1:0}\u2013${Math.min(this.start+this.height,this.entries.length)}/${this.entries.length}`}};function detailLines(task,theme2,width){let input2=task.input&&{...task.input,label:cleanTaskText(task.input.label),text:cleanTaskText(task.input.text)},inputLines=input2?input2.language?highlightCode(input2.text,input2.language):input2.text.split(`
1402
- `):[],rows=[["Task ID",task.id]];task.error&&rows.push(["Error",cleanTaskText(task.error).replace(/\n/g," "),"warning"]),input2?inputLines.length<=1&&rows.push([input2.label,inputLines[0]??""]):rows.push(["Title",cleanTaskText(task.title)]);for(let[label,value]of task.facts??[])rows.push([cleanTaskText(label),cleanTaskText(value)]);let shownAsFact=task.facts?.some(([,value])=>value===task.outputPath);task.outputPath&&!shownAsFact&&rows.push([task.output==="log"?"Log":"Full report",cleanTaskText(task.outputPath)]);let labelWidth=Math.max(9,...rows.map(([label])=>visibleWidth(label)))+1,valueWidth=Math.max(1,width-labelWidth),lines=rows.flatMap(([label,value,tone])=>wrapTextWithAnsi(value,valueWidth).map((line,index3)=>(index3?" ".repeat(labelWidth):label+" ".repeat(labelWidth-visibleWidth(label)))+(tone?theme2.fg(tone,line):line)));return input2&&inputLines.length>1&&lines.push("",theme2.fg("accent",input2.label),...inputLines),input2?.truncated&&lines.push(theme2.fg("warning",`[Saved ${input2.label.toLowerCase()} truncated.]`)),lines}function streamsLog(task){return task.output==="log"&&task.outputPath!==void 0}function outputLines(task,read,theme2,width){let empty=task.status==="completed"?"Completed with no output.":isTaskTerminal(task.status)?"No saved output.":"No output yet.",fromLog=streamsLog(task)&&read!==void 0&&!read.readError,human=task.display?.text?task.display:void 0,published=human??task.result,text=cleanTaskText((fromLog?read.text:published?.text)||empty),output=!fromLog&&!human&&task.output==="report"&&task.status==="completed"?new Markdown(text,0,0,getMarkdownTheme(),{color:line=>theme2.fg("toolOutput",line)}).render(Math.max(1,width)):text.split(`
1403
- `).map(line=>theme2.fg("toolOutput",line));return read?.readError&&output.unshift(theme2.fg("warning","Log unavailable; showing saved result.")),!fromLog&&published?.truncated&&output.push(theme2.fg("warning",human?"Output truncated.":"Saved result truncated.")),output}function tailsOutput(task){return task.output==="log"||!isTaskTerminal(task.status)}var TaskInspector=class{constructor(options){this.positions=new Map,this.reading=!1,this.disposed=!1,this.options=options}get position(){let id=this.task?.id,position=id?this.positions.get(id):void 0;return position||(position={info:new TaskViewport,output:new TaskViewport(!0)},id&&this.positions.set(id,position)),position}select(task){if(this.disposed)return;if(this.task?.id!==task?.id){let release2=task?this.options.host.retain(task.id):void 0,previous=this.release;this.release=release2,previous?.()}if(this.task=task,!task)return;let position=this.position,tails=tailsOutput(task);position.tails!==tails&&(position.tails=tails,position.output.retarget(tails))}prune(ids){for(let id of this.positions.keys())ids.has(id)||this.positions.delete(id)}invalidate(){this.outputCache=void 0,this.detailCache=void 0}async refresh(){let task=this.task,terminalFallback=task?.output==="log"&&isTaskTerminal(task.status);if(this.disposed||!task||!streamsLog(task)&&!terminalFallback||this.reading)return;let position=this.position;if(!(position.read&&(!position.output.follow||isTaskTerminal(position.read.task.status)))){this.reading=!0;try{let read=await this.options.host.read(task.id,{mode:"tail",bytes:49152});if(this.disposed||this.task?.id!==task.id||!position.output.follow&&position.read)return;position.read=read}catch(error){!this.disposed&&this.task?.id===task.id&&(position.output.follow||!position.read)&&(position.read={task,text:"",readError:`Cannot read output: ${cleanTaskText(String(error))}`,totalBytes:0,truncated:!1})}finally{this.reading=!1,this.disposed||this.options.requestRender(),!this.disposed&&this.task?.id!==task.id&&await this.refresh()}}}output(width){let task=this.task;if(!task)return[];let read=this.position.read,cache2=this.outputCache;return(cache2?.task!==task||cache2.read!==read||cache2.width!==width)&&(this.outputCache={task,read,width,lines:outputLines(task,read,this.options.theme,width)}),this.outputCache.lines}details(width){let task=this.task;if(!task)return[];let cache2=this.detailCache;return(cache2?.task!==task||cache2.width!==width)&&(this.detailCache={task,width,lines:detailLines(task,this.options.theme,width)}),this.detailCache.lines}dispose(){this.disposed||(this.disposed=!0,this.release?.(),this.release=void 0,this.positions.clear())}};var FEEDBACK_GLYPH={warning:"!",error:"\xD7"},GAP=3;function dropToFit(items,room,separator){let kept=[...items],width=()=>kept.reduce((sum,item)=>sum+visibleWidth(item.text),0)+visibleWidth(separator)*(kept.length-1);for(;kept.length>1&&width()>room;){let drop=0;for(let[index3,item]of kept.entries())item.priority>=kept[drop].priority&&(drop=index3);kept.splice(drop,1)}return kept}function compose(env,spec){let{width,y,theme:theme2}=env,hits=[],escapeWidth=visibleWidth(spec.escape.text),room=Math.max(0,width-escapeWidth-GAP),showEscape=!0,left;if(spec.feedback){let message=`${FEEDBACK_GLYPH[spec.feedback.tone]} ${spec.feedback.text}`;showEscape=visibleWidth(message)<=room,left=theme2.fg(spec.feedback.tone,truncateToWidth(message,showEscape?room:width,"\u2026"))}else{let x=0,kept=dropToFit(spec.items,room,spec.separator);for(let item of kept)item.action&&hits.push({x,y,width:visibleWidth(item.text),action:item.action}),x+=visibleWidth(item.text)+visibleWidth(spec.separator);left=theme2.fg(spec.tone,truncateToWidth(kept.map(item=>item.text).join(spec.separator),room,"\u2026"))}let gap=Math.max(0,width-visibleWidth(left)-(showEscape?escapeWidth:0));return showEscape&&spec.escape.action&&hits.push({x:width-escapeWidth,y,width:escapeWidth,action:spec.escape.action}),{line:left+" ".repeat(gap)+(showEscape?theme2.fg(spec.tone,spec.escape.text):""),hits}}var BACK={kind:"back"};function browseFooter(env,view){let{hint}=env,items=[],add=(text,priority,action)=>items.push({text,priority,action}),arrows=`${hint("tui.select.up")} / ${hint("tui.select.down")}`;view.focus==="list"?(add(`${arrows} tasks`,5),add(`${hint("tui.select.confirm")} open`,4,{kind:"open"}),add(`${hint("app.tasks.search")} find`,3,{kind:"key",key:"app.tasks.search"})):(add(`${arrows} scroll`,5),view.split&&add(`${hint("app.tasks.nextFocus")} tasks`,6,{kind:"key",key:"app.tasks.nextFocus"}),add(`${hint("app.tasks.previousTab")} output`,6,{kind:"tab",tab:"output"}),add(`${hint("app.tasks.nextTab")} details`,6,{kind:"tab",tab:"info"})),view.stoppable&&add(`${hint("app.tasks.kill")} stop`,2,{kind:"key",key:"app.tasks.kill"}),view.detachable&&add(`${hint("app.tasks.detachSelected")} background`,2,{kind:"key",key:"app.tasks.detachSelected"}),add(`${hint("app.tasks.help")} keys`,1,{kind:"key",key:"app.tasks.help"});let back=!view.split&&view.focus==="inspector";return compose(env,{items,separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} ${back?"back":"close"}`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function searchFooter(env){let{hint}=env;return compose(env,{items:[{text:`${hint("tui.select.up")} / ${hint("tui.select.down")} choose`,priority:2},{text:`${hint("tui.select.confirm")} locate`,priority:1}],separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} cancel`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function helpFooter(env){let{hint}=env;return compose(env,{items:[{text:`${hint("tui.select.up")} / ${hint("tui.select.down")} scroll`,priority:1}],separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} back`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function confirmStopFooter(env,target){let{hint,width}=env,confirm=`${hint("app.tasks.confirmStop")} stop`,cancel=`${hint("tui.select.cancel")} cancel`,separator=" ",room=width-visibleWidth(cancel)-GAP-visibleWidth(separator+confirm),bare=`Stop ${target.source}?`,spare=room-visibleWidth(`Stop ${target.source} ""?`),question2=spare>=4?`Stop ${target.source} "${truncateToWidth(target.title,spare,"\u2026")}"?`:bare;return compose(env,{items:[{text:question2,priority:0},{text:confirm,priority:0,action:{kind:"key",key:"app.tasks.confirmStop"}}],separator,escape:{text:cancel,priority:0,action:BACK},tone:"warning"})}var TITLE_INDENT=3,fitCell=(text,width)=>truncateToWidth(text,Math.max(1,width),"\u2026",!0);function framePane(options){let{width,theme:theme2,rows}=options,border=text=>theme2.fg(options.accent?"borderAccent":"borderMuted",text),inner=Math.max(1,width-2),room=Math.max(0,width-5),title=options.title&&room>0?truncateToWidth(options.title,room,"\u2026"):"",status=options.status&&room>0?truncateToWidth(options.status,room,"\u2026"):"",top=title?border("\u250C\u2500 ")+title+border(` ${"\u2500".repeat(Math.max(0,width-5-visibleWidth(title)))}\u2510`):border(`\u250C${"\u2500".repeat(Math.max(0,width-2))}\u2510`),statusWidth=visibleWidth(status),bottom=status?border(`\u2514${"\u2500".repeat(Math.max(0,width-5-statusWidth))} `)+status+border(" \u2500\u2518"):border(`\u2514${"\u2500".repeat(Math.max(0,width-2))}\u2518`);return{lines:[top,...rows.map((row,index3)=>index3===options.divider?border(`\u251C${"\u2500".repeat(Math.max(0,width-2))}\u2524`):border("\u2502")+fitCell(row,inner)+border("\u2502")),bottom],status:{x:Math.max(0,width-3-statusWidth),width:statusWidth}}}function helpRows(hint,theme2){let keys=(...bindings)=>[...new Set(bindings.map(hint).filter(Boolean))].join(" / "),listPage=keys("tui.select.pageUp","tui.select.pageDown"),inspectorPage=keys("tui.editor.pageUp","tui.editor.pageDown"),paging=listPage===inspectorPage?[[listPage,"Page the list or inspector"]]:[[listPage,"Page the list"],[inspectorPage,"Page the inspector"]],sections=[["Navigate",[[keys("tui.select.up","tui.select.down"),"Select a task, or scroll the inspector"],...paging,[keys("app.tasks.top","app.tasks.bottom"),"Top or bottom"],[hint("tui.select.confirm"),"Open the selected task"],[keys("app.tasks.nextFocus","app.tasks.previousFocus"),"Switch between list and inspector"]]],["View",[[keys("app.tasks.previousTab","app.tasks.nextTab"),"Output or Details, in the inspector"],[hint("app.tasks.follow"),"Follow the latest output, or load the final output"],[hint("app.tasks.search"),"Find a task; Enter locates it, Esc restores the selection"]]],["Act",[[hint("app.tasks.kill"),`Stop the selected task; ${hint("app.tasks.confirmStop")} confirms`],[hint("app.tasks.detachSelected"),"Move the selected foreground task to the background"],[hint("app.tasks.detach"),"Move every foreground execution to the background"],[hint("tui.select.cancel"),"Close search, help or confirmation; otherwise go back from the inspector in a narrow terminal, or close the panel"]]]],keyWidth=Math.max(...sections.flatMap(([,rows])=>rows.map(([key])=>visibleWidth(key))))+2;return sections.flatMap(([title,entries],index3)=>[...index3?[""]:[],theme2.fg("accent",title),...entries.map(([key,label])=>` ${key}${" ".repeat(keyWidth-visibleWidth(key))}${label}`)])}function isStoppable(task){return!isTaskTerminal(task.status)&&task.status!=="stopping"}var TaskSelection=class{constructor(state2){this.all=[],this.rows=[],this.state=state2}get selected(){return this.rows.find(task=>task.id===this.state.selectedId)}get activeCount(){return this.all.filter(task=>!isTaskTerminal(task.status)).length}sync(all,query=""){this.all=all,this.refresh(query)}select(id,query=""){this.state.selectedId=id,this.refresh(query)}selectStartedSinceClose(){let{closedAt}=this.state;if(closedAt===void 0)return;let fresh=this.rows.filter(task=>task.startedAt>closedAt);fresh.length&&this.select(fresh.reduce((a,b)=>b.startedAt>a.startedAt?b:a).id)}refresh(query=""){let{selectedId}=this.state,active=this.all.filter(task=>!isTaskTerminal(task.status)).sort((a,b)=>b.startedAt-a.startedAt||a.id.localeCompare(b.id)),history=this.all.filter(task=>isTaskTerminal(task.status)).sort((a,b)=>(b.endedAt??0)-(a.endedAt??0)||a.id.localeCompare(b.id)),rows=[...active,...history],search2=query.toLocaleLowerCase().trim();this.rows=search2?rows.filter(task=>`${task.title}
1402
+ `):[],rows=[["Task ID",task.id]];task.error&&rows.push(["Error",cleanTaskText(task.error).replace(/\n/g," "),"warning"]),input2?inputLines.length<=1&&rows.push([input2.label,inputLines[0]??""]):rows.push(["Title",cleanTaskText(task.title)]);for(let[label,value]of task.facts??[])rows.push([cleanTaskText(label),cleanTaskText(value)]);let shownAsFact=task.facts?.some(([,value])=>value===task.outputPath);task.outputPath&&!shownAsFact&&rows.push([task.output==="log"?"Log":"Full report",cleanTaskText(task.outputPath)]);let labelWidth=Math.max(9,...rows.map(([label])=>visibleWidth(label)))+1,valueWidth=Math.max(1,width-labelWidth),lines=rows.flatMap(([label,value,tone])=>wrapTextWithAnsi(value,valueWidth).map((line,index3)=>(index3?" ".repeat(labelWidth):label+" ".repeat(labelWidth-visibleWidth(label)))+(tone?theme2.fg(tone,line):line)));return input2&&inputLines.length>1&&lines.push("",theme2.fg("accent",input2.label),...inputLines),input2?.truncated&&lines.push(theme2.fg("warning",`[Saved ${input2.label.toLowerCase()} truncated.]`)),lines}function streamsLog(task){return task.output==="log"&&task.outputPath!==void 0}function outputLines(task,read,theme2,width){let empty=task.status==="completed"?"Completed with no output.":isTaskTerminal(task.status)?"No saved output.":"No output yet.",fromLog=streamsLog(task)&&read!==void 0&&!read.readError,human=task.display?.text||task.display?.activities?.length?task.display:void 0,published=human??task.result,text=cleanTaskText((fromLog?read.text:published?.text)||empty),activities=!fromLog&&!isTaskTerminal(task.status)&&human?.activities?.length?human.activities:void 0,markdown=!fromLog&&!human&&task.output==="report"&&task.status==="completed",output=activities?taskActivityLines(activities,Math.max(1,width),theme2,human?.earlierActivities??0):markdown?new Markdown(text,0,0,getMarkdownTheme(),{color:line=>theme2.fg("toolOutput",line)}).render(Math.max(1,width)):text.split(`
1403
+ `).map(line=>theme2.fg("toolOutput",line));return read?.readError&&output.unshift(theme2.fg("warning","Log unavailable; showing saved result.")),!fromLog&&published?.truncated&&output.push(theme2.fg("warning",human?"Output truncated.":"Saved result truncated.")),output}function tailsOutput(task){return task.output==="log"||!isTaskTerminal(task.status)}var TaskInspector=class{constructor(options){this.positions=new Map,this.reading=!1,this.disposed=!1,this.options=options}get position(){let id=this.task?.id,position=id?this.positions.get(id):void 0;return position||(position={info:new TaskViewport,output:new TaskViewport(!0)},id&&this.positions.set(id,position)),position}select(task){if(this.disposed)return;if(this.task?.id!==task?.id){let release2=task?this.options.host.retain(task.id):void 0,previous=this.release;this.release=release2,previous?.()}if(this.task=task,!task)return;let position=this.position,tails=tailsOutput(task);position.tails!==tails&&(position.tails=tails,position.output.retarget(tails))}prune(ids){for(let id of this.positions.keys())ids.has(id)||this.positions.delete(id)}invalidate(){this.outputCache=void 0,this.detailCache=void 0}async refresh(){let task=this.task,terminalFallback=task?.output==="log"&&isTaskTerminal(task.status);if(this.disposed||!task||!streamsLog(task)&&!terminalFallback||this.reading)return;let position=this.position;if(!(position.read&&(!position.output.follow||isTaskTerminal(position.read.task.status)))){this.reading=!0;try{let read=await this.options.host.read(task.id,{mode:"tail",bytes:49152});if(this.disposed||this.task?.id!==task.id||!position.output.follow&&position.read)return;position.read=read}catch(error){!this.disposed&&this.task?.id===task.id&&(position.output.follow||!position.read)&&(position.read={task,text:"",readError:`Cannot read output: ${cleanTaskText(String(error))}`,totalBytes:0,truncated:!1})}finally{this.reading=!1,this.disposed||this.options.requestRender(),!this.disposed&&this.task?.id!==task.id&&await this.refresh()}}}output(width){let task=this.task;if(!task)return[];let read=this.position.read,cache2=this.outputCache;return(!isTaskTerminal(task.status)&&task.display?.activities?.length||cache2?.task!==task||cache2.read!==read||cache2.width!==width)&&(this.outputCache={task,read,width,lines:outputLines(task,read,this.options.theme,width)}),this.outputCache.lines}details(width){let task=this.task;if(!task)return[];let cache2=this.detailCache;return(cache2?.task!==task||cache2.width!==width)&&(this.detailCache={task,width,lines:detailLines(task,this.options.theme,width)}),this.detailCache.lines}dispose(){this.disposed||(this.disposed=!0,this.release?.(),this.release=void 0,this.positions.clear())}};var FEEDBACK_GLYPH={warning:"!",error:"\xD7"},GAP=3;function dropToFit(items,room,separator){let kept=[...items],width=()=>kept.reduce((sum,item)=>sum+visibleWidth(item.text),0)+visibleWidth(separator)*(kept.length-1);for(;kept.length>1&&width()>room;){let drop=0;for(let[index3,item]of kept.entries())item.priority>=kept[drop].priority&&(drop=index3);kept.splice(drop,1)}return kept}function compose(env,spec){let{width,y,theme:theme2}=env,hits=[],escapeWidth=visibleWidth(spec.escape.text),room=Math.max(0,width-escapeWidth-GAP),showEscape=!0,left;if(spec.feedback){let message=`${FEEDBACK_GLYPH[spec.feedback.tone]} ${spec.feedback.text}`;showEscape=visibleWidth(message)<=room,left=theme2.fg(spec.feedback.tone,truncateToWidth(message,showEscape?room:width,"\u2026"))}else{let x=0,kept=dropToFit(spec.items,room,spec.separator);for(let item of kept)item.action&&hits.push({x,y,width:visibleWidth(item.text),action:item.action}),x+=visibleWidth(item.text)+visibleWidth(spec.separator);left=theme2.fg(spec.tone,truncateToWidth(kept.map(item=>item.text).join(spec.separator),room,"\u2026"))}let gap=Math.max(0,width-visibleWidth(left)-(showEscape?escapeWidth:0));return showEscape&&spec.escape.action&&hits.push({x:width-escapeWidth,y,width:escapeWidth,action:spec.escape.action}),{line:left+" ".repeat(gap)+(showEscape?theme2.fg(spec.tone,spec.escape.text):""),hits}}var BACK={kind:"back"};function browseFooter(env,view){let{hint}=env,items=[],add=(text,priority,action)=>items.push({text,priority,action}),arrows=`${hint("tui.select.up")} / ${hint("tui.select.down")}`;view.focus==="list"?(add(`${arrows} tasks`,5),add(`${hint("tui.select.confirm")} open`,4,{kind:"open"}),add(`${hint("app.tasks.search")} find`,3,{kind:"key",key:"app.tasks.search"})):(add(`${arrows} scroll`,5),view.split&&add(`${hint("app.tasks.nextFocus")} tasks`,6,{kind:"key",key:"app.tasks.nextFocus"}),add(`${hint("app.tasks.previousTab")} output`,6,{kind:"tab",tab:"output"}),add(`${hint("app.tasks.nextTab")} details`,6,{kind:"tab",tab:"info"})),view.stoppable&&add(`${hint("app.tasks.kill")} stop`,2,{kind:"key",key:"app.tasks.kill"}),view.detachable&&add(`${hint("app.tasks.detachSelected")} background`,2,{kind:"key",key:"app.tasks.detachSelected"}),add(`${hint("app.tasks.help")} keys`,1,{kind:"key",key:"app.tasks.help"});let back=!view.split&&view.focus==="inspector";return compose(env,{items,separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} ${back?"back":"close"}`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function searchFooter(env){let{hint}=env;return compose(env,{items:[{text:`${hint("tui.select.up")} / ${hint("tui.select.down")} choose`,priority:2},{text:`${hint("tui.select.confirm")} locate`,priority:1}],separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} cancel`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function helpFooter(env){let{hint}=env;return compose(env,{items:[{text:`${hint("tui.select.up")} / ${hint("tui.select.down")} scroll`,priority:1}],separator:" \xB7 ",escape:{text:`${hint("tui.select.cancel")} back`,priority:0,action:BACK},tone:"dim",feedback:env.feedback})}function confirmStopFooter(env,target){let{hint,width}=env,confirm=`${hint("app.tasks.confirmStop")} stop`,cancel=`${hint("tui.select.cancel")} cancel`,separator=" ",room=width-visibleWidth(cancel)-GAP-visibleWidth(separator+confirm),bare=`Stop ${target.source}?`,spare=room-visibleWidth(`Stop ${target.source} ""?`),question2=spare>=4?`Stop ${target.source} "${truncateToWidth(target.title,spare,"\u2026")}"?`:bare;return compose(env,{items:[{text:question2,priority:0},{text:confirm,priority:0,action:{kind:"key",key:"app.tasks.confirmStop"}}],separator,escape:{text:cancel,priority:0,action:BACK},tone:"warning"})}var TITLE_INDENT=3,fitCell=(text,width)=>truncateToWidth(text,Math.max(1,width),"\u2026",!0);function framePane(options){let{width,theme:theme2,rows}=options,border=text=>theme2.fg(options.accent?"borderAccent":"borderMuted",text),inner=Math.max(1,width-2),room=Math.max(0,width-5),title=options.title&&room>0?truncateToWidth(options.title,room,"\u2026"):"",status=options.status&&room>0?truncateToWidth(options.status,room,"\u2026"):"",top=title?border("\u250C\u2500 ")+title+border(` ${"\u2500".repeat(Math.max(0,width-5-visibleWidth(title)))}\u2510`):border(`\u250C${"\u2500".repeat(Math.max(0,width-2))}\u2510`),statusWidth=visibleWidth(status),bottom=status?border(`\u2514${"\u2500".repeat(Math.max(0,width-5-statusWidth))} `)+status+border(" \u2500\u2518"):border(`\u2514${"\u2500".repeat(Math.max(0,width-2))}\u2518`);return{lines:[top,...rows.map((row,index3)=>index3===options.divider?border(`\u251C${"\u2500".repeat(Math.max(0,width-2))}\u2524`):border("\u2502")+fitCell(row,inner)+border("\u2502")),bottom],status:{x:Math.max(0,width-3-statusWidth),width:statusWidth}}}function helpRows(hint,theme2){let keys=(...bindings)=>[...new Set(bindings.map(hint).filter(Boolean))].join(" / "),listPage=keys("tui.select.pageUp","tui.select.pageDown"),inspectorPage=keys("tui.editor.pageUp","tui.editor.pageDown"),paging=listPage===inspectorPage?[[listPage,"Page the list or inspector"]]:[[listPage,"Page the list"],[inspectorPage,"Page the inspector"]],sections=[["Navigate",[[keys("tui.select.up","tui.select.down"),"Select a task, or scroll the inspector"],...paging,[keys("app.tasks.top","app.tasks.bottom"),"Top or bottom"],[hint("tui.select.confirm"),"Open the selected task"],[keys("app.tasks.nextFocus","app.tasks.previousFocus"),"Switch between list and inspector"]]],["View",[[keys("app.tasks.previousTab","app.tasks.nextTab"),"Output or Details, in the inspector"],[hint("app.tasks.follow"),"Follow the latest output, or load the final output"],[hint("app.tasks.search"),"Find a task; Enter locates it, Esc restores the selection"]]],["Act",[[hint("app.tasks.kill"),`Stop the selected task; ${hint("app.tasks.confirmStop")} confirms`],[hint("app.tasks.detachSelected"),"Move the selected foreground task to the background"],[hint("app.tasks.detach"),"Move every foreground execution to the background"],[hint("tui.select.cancel"),"Close search, help or confirmation; otherwise go back from the inspector in a narrow terminal, or close the panel"]]]],keyWidth=Math.max(...sections.flatMap(([,rows])=>rows.map(([key])=>visibleWidth(key))))+2;return sections.flatMap(([title,entries],index3)=>[...index3?[""]:[],theme2.fg("accent",title),...entries.map(([key,label])=>` ${key}${" ".repeat(keyWidth-visibleWidth(key))}${label}`)])}function isStoppable(task){return!isTaskTerminal(task.status)&&task.status!=="stopping"}var TaskSelection=class{constructor(state2){this.all=[],this.rows=[],this.state=state2}get selected(){return this.rows.find(task=>task.id===this.state.selectedId)}get activeCount(){return this.all.filter(task=>!isTaskTerminal(task.status)).length}sync(all,query=""){this.all=all,this.refresh(query)}select(id,query=""){this.state.selectedId=id,this.refresh(query)}selectStartedSinceClose(){let{closedAt}=this.state;if(closedAt===void 0)return;let fresh=this.rows.filter(task=>task.startedAt>closedAt);fresh.length&&this.select(fresh.reduce((a,b)=>b.startedAt>a.startedAt?b:a).id)}refresh(query=""){let{selectedId}=this.state,active=this.all.filter(task=>!isTaskTerminal(task.status)).sort((a,b)=>b.startedAt-a.startedAt||a.id.localeCompare(b.id)),history=this.all.filter(task=>isTaskTerminal(task.status)).sort((a,b)=>(b.endedAt??0)-(a.endedAt??0)||a.id.localeCompare(b.id)),rows=[...active,...history],search2=query.toLocaleLowerCase().trim();this.rows=search2?rows.filter(task=>`${task.title}
1404
1404
  ${task.input?.text??""}
1405
1405
  ${task.label}
1406
1406
  ${task.kind}
1407
- ${task.id}`.toLocaleLowerCase().includes(search2)):rows,this.rows.some(task=>task.id===selectedId)||(this.state.selectedId=this.rows[0]?.id)}};function renderListPane(env,rect,options){let{theme:theme2,selection,list}=env,innerWidth=rect.width-2,rowsHeight=Math.max(1,rect.height-2-(options.searchRow===void 0?0:1)),visible=list.render(selection,theme2,innerWidth,rowsHeight,options.stopTargetId),first=options.searchRow===void 0?0:1,hits=[];options.interactive&&visible.forEach((row,index3)=>{row.taskId&&hits.push({x:rect.x+1,y:rect.y+1+first+index3,width:innerWidth,action:{kind:"select",taskId:row.taskId}})});let active=selection.rows.filter(task=>!isTaskTerminal(task.status)).length,finished=selection.rows.length-active,counts=[active?`${active} active`:"",finished?`${finished} finished`:""].filter(Boolean),title=theme2.fg("text","Tasks")+(counts.length?theme2.fg("muted",` \xB7 ${counts.join(" \xB7 ")}`):""),rows=options.searchRow===void 0?visible.map(row=>row.text):[options.searchRow,...visible.map(row=>row.text)];return{lines:framePane({width:rect.width,theme:theme2,accent:options.active,title,status:list.range?theme2.fg("muted",list.range):void 0,rows:Array.from({length:rect.height-2},(_,i)=>rows[i]??"")}).lines,hits,pageSize:Math.max(1,rowsHeight-2)}}function metaLine(task,theme2){return[theme2.fg("muted",cleanTaskText(task.label)),theme2.fg(statusView(task.status).color,statusName(task.status)),theme2.fg("muted",modeName(task.mode)),theme2.fg("muted",runtimeLabel(task))].filter(Boolean).join(theme2.fg("dim"," \xB7 "))}function readingState(task,inspector,hint){let{output}=inspector.position,terminal=isTaskTerminal(task.status);if(output.follow)return{text:terminal?"Finished":"Live",followable:!1};let follow=hint("app.tasks.follow");return{text:terminal?`Finished \xB7 ${follow} load final output`:`Browsing \xB7 ${follow} follow`,followable:!0}}function renderInspectorPane(env,rect,options){let{theme:theme2,selection,inspector,hint}=env,innerWidth=rect.width-2,innerHeight=rect.height-2,task=inspector.task,tab=selection.state.tab,hits=[],tabs=[["output","Output"],["info","Details"]],tabX=rect.x+TITLE_INDENT,title=tabs.map(([id,label])=>(options.interactive&&hits.push({x:tabX,y:rect.y,width:visibleWidth(label),action:{kind:"tab",tab:id}}),tabX+=visibleWidth(label)+2,theme2.style(label,tab===id?{fg:"text",underline:!0}:{fg:"muted"}))).join(" "),rows=[],status="",followWidth=0,divider;if(task){rows.push(theme2.style(cleanTaskText(firstCommandLine(task.title)),{fg:"text",bold:!0}),metaLine(task,theme2),""),divider=rows.length-1;let position=inspector.position,read=position.read,diagnostics=[task.error,read?.readError].filter(text=>!!text).map(cleanTaskText);tab==="output"&&diagnostics.length&&rows.push(theme2.fg("warning",diagnostics.join(" \xB7 ").replace(/\n/g," ")));let body2=Math.max(1,innerHeight-rows.length);if(tab==="info")rows.push(...position.info.layout(inspector.details(innerWidth),innerWidth,body2)),position.info.overflows&&(status=theme2.fg("muted",position.info.range));else if(rows.push(...position.output.layout(inspector.output(innerWidth),innerWidth,body2)),streamsLog(task)){let reading=readingState(task,inspector,hint);status=theme2.fg("muted",reading.text),read?.truncated&&(status+=theme2.fg("muted",` \xB7 Tail preview: ${formatSize(taskReadBytes(read))} of ${formatSize(read.totalBytes)}`)),followWidth=reading.followable?visibleWidth(reading.text):0}else position.output.overflows&&(status=theme2.fg("muted",position.output.range))}else rows.push(theme2.fg("muted","Select a task to inspect its result."));let frame3=framePane({width:rect.width,theme:theme2,accent:options.active,title,status:status||void 0,rows:Array.from({length:innerHeight},(_,i)=>rows[i]??""),divider});return options.interactive&&followWidth&&hits.push({x:rect.x+frame3.status.x,y:rect.y+rect.height-1,width:Math.min(followWidth,frame3.status.width),action:{kind:"key",key:"app.tasks.follow"}}),{lines:frame3.lines,hits}}var SPLIT_MIN_WIDTH=100,MIN_WIDTH2=60,MIN_HEIGHT=14;function listWidthFor(width){return Math.min(60,Math.max(34,Math.round(width*.4)))}function paneRects(width,height){let rows=height-1;if(width<SPLIT_MIN_WIDTH){let full={x:0,y:0,width,height:rows};return{split:!1,list:full,inspector:full}}let listWidth=listWidthFor(width);return{split:!0,list:{x:0,y:0,width:listWidth,height:rows},inspector:{x:listWidth+1,y:0,width:width-listWidth-1,height:rows}}}function renderTasksLayout(options){let{width,height,theme:theme2,mode}=options;if(width<1||height<1)return{lines:[],hits:[],regions:[],split:!1,listPageSize:1};let hint=key=>keyLabel(key,{keybindings:options.keybindings});if(width<MIN_WIDTH2||height<MIN_HEIGHT)return renderTooSmall(options,hint);let rects=paneRects(width,height),env={width,y:height-1,theme:theme2,hint,feedback:options.feedback},body2,footer;switch(mode.kind){case"help":{body2=renderHelpPane(options,hint,{x:0,y:0,width,height:height-1}),footer=helpFooter(env);break}case"search":{body2=renderPanes(options,hint,rects),footer=searchFooter(env);break}case"confirmStop":{body2=renderPanes(options,hint,rects);let target=options.selection.all.find(task=>task.id===mode.taskId);footer=confirmStopFooter(env,{source:cleanTaskText(target?.label??"task"),title:cleanTaskText(firstCommandLine(target?.title??mode.taskId))});break}case"browse":{body2=renderPanes(options,hint,rects);let task=options.inspector.task;footer=browseFooter(env,{focus:options.focus,split:rects.split,stoppable:!!task&&isStoppable(task),detachable:!!task&&options.canDetach(task.id)});break}}return{lines:[...body2.lines,footer.line],hits:[...body2.hits,...footer.hits],regions:body2.regions,split:rects.split,listPageSize:body2.pageSize??Math.max(1,rects.list.height-4)}}function renderPanes(options,hint,rects){let{theme:theme2,selection,inspector,list,focus,mode}=options,showList=rects.split||focus==="list",showInspector=rects.split||focus==="inspector",browsing=mode.kind==="browse",searching=mode.kind==="search",listPane=showList?renderListPane({theme:theme2,selection,list},rects.list,{active:rects.split&&focus==="list",interactive:browsing||searching,searchRow:mode.kind==="search"?mode.input.render(rects.list.width-2).join(""):void 0,stopTargetId:mode.kind==="confirmStop"?mode.taskId:void 0}):void 0,inspectorPane=showInspector?renderInspectorPane({theme:theme2,selection,inspector,hint},rects.inspector,{active:rects.split&&focus==="inspector",interactive:browsing}):void 0,regions=[];return listPane&&(browsing||searching)&&regions.push({pane:"list",...rects.list}),inspectorPane&&browsing&&regions.push({pane:"inspector",...rects.inspector}),{lines:listPane&&inspectorPane?listPane.lines.map((line,i)=>`${line} ${inspectorPane.lines[i]}`):(listPane??inspectorPane).lines,hits:[...listPane?.hits??[],...inspectorPane?.hits??[]],regions,pageSize:listPane?.pageSize??Math.max(1,rects.list.height-4)}}function renderHelpPane(options,hint,rect){let{theme:theme2,mode}=options;if(mode.kind!=="help")throw new Error("help pane requires help mode");let inner=rect.width-2,rows=mode.viewport.layout(helpRows(hint,theme2),inner,rect.height-2);return{lines:framePane({width:rect.width,theme:theme2,accent:!1,title:theme2.fg("text","Task controls"),status:mode.viewport.overflows?theme2.fg("muted",mode.viewport.range):void 0,rows:Array.from({length:rect.height-2},(_,i)=>rows[i]??"")}).lines,hits:[],regions:[{pane:"help",...rect}]}}function renderTooSmall(options,hint){let{width,height,theme:theme2}=options,result2={lines:[],hits:[],regions:[],split:!1,listPageSize:1,tooSmall:!0},message="Terminal too small for /tasks. Enlarge the window to continue.",close=`${hint("tui.select.cancel")} close`,boxWidth=Math.min(width,46),inner=boxWidth-2,wrapped=wrapTextWithAnsi(message,inner).map(line=>theme2.fg("warning",line)),spacious=[theme2.fg("text","Tasks"),"",...wrapped,"",theme2.fg("dim",close)],tight=[theme2.fg("text","Tasks"),...wrapped,theme2.fg("dim",close)],body2=height>=spacious.length+2?spacious:tight;if(inner>=16&&height>=body2.length+2){let box2=framePane({width:boxWidth,theme:theme2,accent:!1,rows:body2}).lines,left=Math.floor((width-boxWidth)/2),top=Math.max(0,Math.floor((height-box2.length)/2)),blank=" ".repeat(width);result2.lines=[...Array.from({length:top},()=>blank),...box2.map(line=>" ".repeat(left)+line+" ".repeat(width-left-boxWidth)),...Array.from({length:height-top-box2.length},()=>blank)],result2.hits.push({x:left+1,y:top+body2.length,width:visibleWidth(close),action:{kind:"back"}})}else for(result2.lines=["Tasks",message,close].slice(0,height).map(line=>fitCell(line,width));result2.lines.length<height;)result2.lines.push(" ".repeat(width));return result2}var SELF_EVIDENT=new Set(["running","completed","failed"]);function rowMeta(task,duplicate,stopTarget,theme2){return[stopTarget?theme2.fg("warning","stop?"):"",SELF_EVIDENT.has(task.status)?"":theme2.fg("muted",statusName(task.status)),duplicate?theme2.fg("muted",task.id.slice(-8)):"",theme2.fg("muted",runtimeLabel(task))].filter(Boolean).join(theme2.fg("muted"," \xB7 "))}var TaskList=class{constructor(){this.start=0,this.height=1,this.rows=[],this.selectedLine=-1,this.reveal=!1}showSelection(){this.reveal=!0}scroll(delta){this.start=Math.max(0,Math.min(Math.max(0,this.rows.length-this.height),this.start+delta))}render(selection,theme2,width,height,stopTargetId){let rows=[],labels=selection.rows.map(task=>cleanTaskText(task.label)),labelWidth=Math.max(0,...labels.map(label=>visibleWidth(label))),titles=selection.rows.map(task=>cleanTaskText(firstCommandLine(task.title))),group="",selectedLine=-1;for(let[index3,task]of selection.rows.entries()){let nextGroup=isTaskTerminal(task.status)?"Finished":"Active";nextGroup!==group&&(rows.push({text:theme2.fg("dim",nextGroup)}),group=nextGroup);let selected=task.id===selection.state.selectedId;selected&&(selectedLine=rows.length);let marker=statusView(task.status,{now:Date.now()}),label=labels[index3],duplicate=titles.some((title2,other)=>other!==index3&&title2===titles[index3]),meta=rowMeta(task,duplicate,task.id===stopTargetId,theme2),source=labelWidth?`${label}${" ".repeat(labelWidth-visibleWidth(label))} `:"",head=visibleWidth(marker.glyph)+1+visibleWidth(source),title=truncateToWidth(titles[index3],Math.max(1,width-head-visibleWidth(meta)-1),"\u2026"),gap=Math.max(1,width-head-visibleWidth(title)-visibleWidth(meta)),text=`${theme2.fg(marker.color,marker.glyph)} ${theme2.fg("dim",source)}${theme2.fg("text",title)}${" ".repeat(gap)}${meta}`,padded=truncateToWidth(text,width,"\u2026",!0);rows.push({text:selected?theme2.getBgAnsi("selectedBg")==="\x1B[49m"?theme2.style(stripTerminalSequences(padded),{inverse:!0}):theme2.bg("selectedBg",padded):padded,taskId:task.id})}rows.length||rows.push({text:theme2.fg("muted",selection.all.length?"No matching tasks.":"No retained tasks.")});let sameSelection=this.selectedId===selection.state.selectedId,selectedWasVisible=sameSelection&&this.selectedLine>=this.start&&this.selectedLine<this.start+this.height&&selectedLine>=0;if(selectedWasVisible)this.start+=selectedLine-this.selectedLine;else{let anchor=this.rows[this.start]?.taskId,next=anchor?rows.findIndex(row=>row.taskId===anchor):-1;next>=0&&(this.start=next)}if(selectedLine>=0&&(!sameSelection||this.reveal||selectedWasVisible)){let top=rows[selectedLine-1]?.taskId===void 0?selectedLine-1:selectedLine;top<this.start?this.start=Math.max(0,top):selectedLine>=this.start+height&&(this.start=selectedLine+1-height)}return this.start=Math.max(0,Math.min(Math.max(0,rows.length-height),this.start)),this.rows=rows,this.height=height,this.selectedId=selection.state.selectedId,this.selectedLine=selectedLine,this.reveal=!1,rows.slice(this.start,this.start+height)}get range(){if(this.rows.length<=this.height)return"";let ids=this.rows.flatMap(row=>row.taskId?[row.taskId]:[]),visible=this.rows.slice(this.start,this.start+this.height).flatMap(row=>row.taskId?[row.taskId]:[]);return`${ids.indexOf(visible[0])+1}-${ids.indexOf(visible.at(-1))+1} of ${ids.length}`}};var BROWSE={kind:"browse"},FEEDBACK_MS=4e3,QUERY_LIMIT=512,actions=["app.tasks.search","app.tasks.kill","app.tasks.detachSelected","app.tasks.previousTab","app.tasks.nextTab","app.tasks.follow","app.tasks.top","app.tasks.bottom","app.tasks.nextFocus","app.tasks.previousFocus","app.tasks.help"];function unavailableReason(task){if(isTaskTerminal(task.status))return"Task already finished.";if(task.status==="stopping")return"Task is already stopping."}var TasksMenu=class{constructor(options){this.focused=!1,this.list=new TaskList,this.mode=BROWSE,this.focus="list",this.dirty=!0,this.tickQueued=!1,this.refreshQueued=!1,this.disposed=!1,this.options=options,this.width=options.tui.terminal.columns,this.selection=new TaskSelection(options.state??{tab:"output"}),this.inspector=new TaskInspector({host:options.host,theme:options.theme,requestRender:()=>options.tui.requestRender()}),this.sync(),this.selection.selectStartedSinceClose(),this.inspector.select(this.selection.selected),this.list.showSelection(),this.unsubscribe=options.host.subscribe(()=>{this.dirty=!0,this.queueTick(),options.tui.requestRender()}),this.pollTimer=setInterval(()=>{this.queueTick(!0),this.selection.activeCount&&options.tui.requestRender()},options.pollIntervalMs??1e3),this.pollTimer.unref?.(),this.queueTick(!0)}get query(){return this.mode.kind==="search"?this.mode.input.getValue().slice(0,QUERY_LIMIT):""}select(id){this.selection.select(id,this.query)}sync(){if(this.disposed||!this.dirty)return;this.dirty=!1,this.selection.sync(this.options.host.list(),this.query),this.inspector.select(this.selection.selected),this.inspector.prune(new Set(this.selection.all.map(task=>task.id)));let selected=this.selection.selected;this.mode.kind==="confirmStop"&&(this.mode.taskId!==selected?.id||isTaskTerminal(selected.status))&&this.setMode(BROWSE);let animates=this.selection.all.some(task=>task.status==="running");animates&&!this.animationTimer?(this.animationTimer=setInterval(()=>this.options.tui.requestRender(),STATUS_SPINNER_INTERVAL_MS),this.animationTimer.unref?.()):animates||(clearInterval(this.animationTimer),this.animationTimer=void 0)}queueTick(refresh=!1){this.disposed||(this.refreshQueued||=refresh,!this.tickQueued&&(this.tickQueued=!0,Promise.resolve().then(async()=>{if(this.tickQueued=!1,this.disposed)return;let refresh2=this.refreshQueued;this.refreshQueued=!1,this.sync(),(refresh2||this.inspector.task&&isTaskTerminal(this.inspector.task.status))&&await this.inspector.refresh()}).catch(()=>{})))}invalidate(){this.inspector.invalidate()}setMode(next){this.mode=next}notify(tone,text){this.clearFeedback(),this.feedback={tone,text},this.feedbackTimer=setTimeout(()=>{this.feedbackTimer=void 0,this.feedback=void 0,this.disposed||this.options.tui.requestRender()},FEEDBACK_MS),this.feedbackTimer.unref?.()}clearFeedback(){clearTimeout(this.feedbackTimer),this.feedbackTimer=void 0,this.feedback=void 0}escape(){switch(this.mode.kind){case"search":this.finishSearch(!0);break;case"help":case"confirmStop":this.setMode(BROWSE);break;case"browse":this.layout&&!this.layout.tooSmall&&!this.layout.split&&this.focus==="inspector"?this.focus="list":this.close();break}}close(){this.dispose(),this.options.onClose()}selectedChanged(){this.mode.kind==="confirmStop"&&this.setMode(BROWSE),this.list.showSelection(),this.inspector.select(this.selection.selected),this.queueTick(!0)}requestStop(){let task=this.selection.selected;if(!task)return;let reason=unavailableReason(task);reason?this.notify("warning",reason):this.setMode({kind:"confirmStop",taskId:task.id})}confirmStop(){let mode=this.mode;if(mode.kind!=="confirmStop")return;this.setMode(BROWSE);let task=this.selection.selected;mode.taskId!==task?.id||isTaskTerminal(task.status)||this.options.host.kill(mode.taskId)||this.notify("warning","No new cancellation requested.")}detachSelected(){let task=this.selection.selected;if(!task)return;let reason=unavailableReason(task)??(task.mode==="background"?"Task is already in the background.":"");if(reason){this.notify("warning",reason);return}try{this.options.host.detach(task.id)||this.notify("warning","This task cannot move to background.")}catch(error){this.notify("warning",cleanTaskText(error instanceof Error?error.message:String(error)))}}startSearch(){let input2=new Input({prompt:"Find task: ",placeholder:"title, command, kind or ID"});input2.focused=!0,this.setMode({kind:"search",restore:{id:this.selection.state.selectedId,focus:this.focus},input:input2}),this.focus="list"}finishSearch(cancel){let mode=this.mode;if(mode.kind!=="search")return;let id=cancel?mode.restore.id:this.selection.state.selectedId;!cancel&&!id||(this.focus=cancel?mode.restore.focus:"list",this.setMode(BROWSE),this.select(id),this.selectedChanged())}open(){this.focus==="list"&&this.selection.selected&&(this.focus="inspector")}action(key){switch(key){case"app.tasks.search":this.startSearch();break;case"app.tasks.previousTab":case"app.tasks.nextTab":this.focus==="inspector"&&(this.selection.state.tab=key==="app.tasks.previousTab"?"output":"info");break;case"app.tasks.nextFocus":case"app.tasks.previousFocus":this.focus=this.focus==="list"?"inspector":"list";break;case"app.tasks.follow":this.focus==="inspector"&&this.selection.state.tab==="output"&&(this.inspector.position.output.jump(!0),this.queueTick(!0));break;case"app.tasks.top":case"app.tasks.bottom":this.focus==="list"?(this.select(key==="app.tasks.top"?this.selection.rows[0]?.id:this.selection.rows.at(-1)?.id),this.selectedChanged()):this.inspector.position[this.selection.state.tab].jump(key==="app.tasks.bottom");break;case"app.tasks.kill":this.requestStop();break;case"app.tasks.confirmStop":this.confirmStop();break;case"app.tasks.detachSelected":this.detachSelected();break;case"app.tasks.help":this.setMode({kind:"help",viewport:new TaskViewport});break}}perform(action){switch(action.kind){case"select":this.select(action.taskId),this.selectedChanged(),this.focus="list",this.mode.kind==="search"&&this.finishSearch(!1);break;case"tab":this.focus="inspector",this.selection.state.tab=action.tab;break;case"key":action.key==="app.tasks.follow"&&(this.focus="inspector"),this.action(action.key);break;case"open":this.open();break;case"back":this.escape();break}}move(direction,page=!1){if(this.mode.kind==="help"){this.mode.viewport.move(direction,page);return}if(this.focus==="list"){let rows=this.selection.rows;if(!rows.length)return;let index3=rows.findIndex(task=>task.id===this.selection.state.selectedId),next=page?Math.max(0,Math.min(rows.length-1,index3+direction*(this.layout?.listPageSize??1))):(index3+direction+rows.length)%rows.length;this.select(rows[next]?.id),this.selectedChanged()}else this.inspector.position[this.selection.state.tab].move(direction,page)}handleInput(data){if(!this.disposed){this.sync(),this.render(this.width),this.clearFeedback();try{if(this.layout?.tooSmall)this.options.keybindings.matches(data,"tui.select.cancel")&&this.escape();else switch(this.mode.kind){case"help":this.helpInput(this.mode.viewport,data);break;case"search":this.searchInput(this.mode.input,data);break;case"confirmStop":this.confirmInput(data);break;case"browse":this.browseInput(data);break}}catch(error){this.notify("error",cleanTaskText(error instanceof Error?error.message:String(error)))}this.disposed||(this.queueTick(!0),this.options.tui.requestRender())}}helpInput(viewport,data){let kb=this.options.keybindings;kb.matches(data,"tui.select.cancel")||kb.matches(data,"app.tasks.help")?this.setMode(BROWSE):kb.matches(data,"app.tasks.top")||kb.matches(data,"app.tasks.bottom")?viewport.jump(kb.matches(data,"app.tasks.bottom")):kb.matches(data,"tui.select.up")||kb.matches(data,"tui.editor.pageUp")?viewport.move(-1,kb.matches(data,"tui.editor.pageUp")):(kb.matches(data,"tui.select.down")||kb.matches(data,"tui.editor.pageDown"))&&viewport.move(1,kb.matches(data,"tui.editor.pageDown"))}searchInput(input2,data){let kb=this.options.keybindings;kb.matches(data,"tui.select.cancel")?this.escape():kb.matches(data,"tui.select.confirm")?this.finishSearch(!1):kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.pageUp")?this.move(-1,kb.matches(data,"tui.select.pageUp")):kb.matches(data,"tui.select.down")||kb.matches(data,"tui.select.pageDown")?this.move(1,kb.matches(data,"tui.select.pageDown")):(input2.handleInput(data),this.selection.refresh(this.query),this.selectedChanged())}confirmInput(data){let kb=this.options.keybindings;kb.matches(data,"app.tasks.confirmStop")?this.confirmStop():kb.matches(data,"tui.select.cancel")&&this.escape()}browseInput(data){let kb=this.options.keybindings;if(kb.matches(data,"tui.select.cancel")){this.escape();return}let pageUp=kb.matches(data,this.focus==="list"?"tui.select.pageUp":"tui.editor.pageUp"),pageDown=kb.matches(data,this.focus==="list"?"tui.select.pageDown":"tui.editor.pageDown");if(pageUp||kb.matches(data,"tui.select.up"))this.move(-1,pageUp);else if(pageDown||kb.matches(data,"tui.select.down"))this.move(1,pageDown);else if(kb.matches(data,"tui.select.confirm"))this.open();else{let key=actions.find(key2=>kb.matches(data,key2));key&&this.action(key)}}handleMouse(event){if(this.disposed||event.ctrl||event.alt||event.shift)return;this.clearFeedback(),this.render(event.width);let layout=this.layout,region=layout.regions.find(r=>event.y>=r.y&&event.y<r.y+r.height&&event.x>=r.x&&event.x<r.x+r.width);if(event.type==="wheel"&&event.wheelDelta){if(region){let delta=Math.sign(event.wheelDelta)*Math.min(20,Math.abs(event.wheelDelta));region.pane==="help"?this.mode.kind==="help"&&this.mode.viewport.move(delta,!1):region.pane==="list"?this.list.scroll(delta):this.inspector.position[this.selection.state.tab].move(delta,!1)}}else if(event.type==="click"&&event.button==="left"){let hit=layout.hits.find(hit2=>hit2.y===event.y&&event.x>=hit2.x&&event.x<hit2.x+hit2.width);try{hit?this.perform(hit.action):region&&region.pane!=="help"&&(this.focus=region.pane)}catch(error){this.notify("error",cleanTaskText(error instanceof Error?error.message:String(error)))}}else return;return this.queueTick(!0),this.options.tui.requestRender(),{handled:!0,focus:event.type==="click"}}render(width){return this.width=width,this.sync(),this.layout=renderTasksLayout({width,height:this.options.tui.terminal.rows,theme:this.options.theme,keybindings:this.options.keybindings,selection:this.selection,inspector:this.inspector,list:this.list,focus:this.focus,mode:this.mode,feedback:this.feedback,canDetach:id=>this.canDetach(id)}),this.layout.lines}canDetach(id){try{return this.options.host.canDetach(id)}catch{return!1}}dispose(){this.disposed||(this.disposed=!0,this.selection.state.closedAt=Date.now(),clearInterval(this.pollTimer),clearInterval(this.animationTimer),this.clearFeedback(),this.unsubscribe(),this.inspector.dispose())}};function bindTasksUI(ctx){let state2={tab:"output"},unsubscribe,unsubscribeDetachKey,closeMenu,hintTimer,start=()=>{unsubscribe?.(),unsubscribeDetachKey?.();let update=()=>{clearTimeout(hintTimer),hintTimer=void 0;let all=ctx.tasks.list(),background=all.filter(task=>task.mode==="background"&&!isTaskTerminal(task.status)).length,parts=[];background&&(parts.push(theme.fg("text",`${background} background task${background===1?"":"s"}`)),parts.push(theme.fg("accent","/tasks")+theme.fg("muted"," to view")));let detachKey=keyLabel("app.tasks.detach"),now=Date.now(),movable=all.filter(task=>ctx.tasks.canDetach(task.id)),waits=movable.map(task=>task.startedAt+1e4-now).filter(wait=>wait>0);detachKey&&movable.length>waits.length&&parts.push(theme.fg("accent",detachKey)+theme.fg("muted"," to run in background")),detachKey&&waits.length>0&&(hintTimer=setTimeout(update,Math.min(...waits)),hintTimer.unref?.()),ctx.ui.setStatus("background",parts.length?parts.join(theme.fg("dim"," \xB7 ")):void 0)};unsubscribe=ctx.tasks.subscribe(update),unsubscribeDetachKey=ctx.ui.onTerminalInput(data=>{if(!getKeybindings().matches(data,"app.tasks.detach"))return;let count;try{count=ctx.tasks.detachForeground()}catch(error){return ctx.ui.notify(error instanceof Error?error.message:String(error),"warning"),{consume:!0}}if(count!==0)return ctx.ui.notify(`Moved ${count} execution${count===1?"":"s"} to the background. Use /tasks to manage tasks.`),{consume:!0}}),update()},dispose=()=>{unsubscribe?.(),unsubscribe=void 0,unsubscribeDetachKey?.(),unsubscribeDetachKey=void 0,clearTimeout(hintTimer),hintTimer=void 0,closeMenu?.(),closeMenu=void 0,ctx.ui.setStatus("background",void 0)};return start(),{dispose,open:async()=>{closeMenu?.(),await ctx.ui.custom((tui,theme2,keybindings,done)=>{let close=()=>{closeMenu===close&&(closeMenu=void 0),done()};return closeMenu=close,new TasksMenu({state:state2,tui,theme:theme2,keybindings,host:ctx.tasks,onClose:close})},{overlay:!0,overlayOptions:{anchor:"center",width:"100%",maxHeight:"100%"}})}}}async function confirmStopBranchTasks(stopped,confirm){if(stopped.length===0)return!0;let shown=stopped.slice(0,5).map(task=>` ${cleanTaskText(firstCommandLine(task.title))}`);return stopped.length>shown.length&&shown.push(` \u2026and ${stopped.length-shown.length} more`),confirm(`Stop ${stopped.length} running task${stopped.length===1?"":"s"}?`,`They were started on the branch you are leaving and will be cancelled:
1407
+ ${task.id}`.toLocaleLowerCase().includes(search2)):rows,this.rows.some(task=>task.id===selectedId)||(this.state.selectedId=this.rows[0]?.id)}};function renderListPane(env,rect,options){let{theme:theme2,selection,list}=env,innerWidth=rect.width-2,rowsHeight=Math.max(1,rect.height-2-(options.searchRow===void 0?0:1)),visible=list.render(selection,theme2,innerWidth,rowsHeight,options.stopTargetId),first=options.searchRow===void 0?0:1,hits=[];options.interactive&&visible.forEach((row,index3)=>{row.taskId&&hits.push({x:rect.x+1,y:rect.y+1+first+index3,width:innerWidth,action:{kind:"select",taskId:row.taskId}})});let active=selection.rows.filter(task=>!isTaskTerminal(task.status)).length,finished=selection.rows.length-active,counts=[active?`${active} active`:"",finished?`${finished} finished`:""].filter(Boolean),title=theme2.fg("text","Tasks")+(counts.length?theme2.fg("muted",` \xB7 ${counts.join(" \xB7 ")}`):""),rows=options.searchRow===void 0?visible.map(row=>row.text):[options.searchRow,...visible.map(row=>row.text)];return{lines:framePane({width:rect.width,theme:theme2,accent:options.active,title,status:list.range?theme2.fg("muted",list.range):void 0,rows:Array.from({length:rect.height-2},(_,i)=>rows[i]??"")}).lines,hits,pageSize:Math.max(1,rowsHeight-2)}}function metaLine(task,theme2){return[theme2.fg("muted",cleanTaskText(task.label)),theme2.fg(statusView(task.status).color,statusName(task.status)),theme2.fg("muted",modeName(task.mode)),theme2.fg("muted",runtimeLabel(task))].filter(Boolean).join(theme2.fg("dim"," \xB7 "))}function readingState(task,inspector,hint){let{output}=inspector.position,terminal=isTaskTerminal(task.status);if(output.follow)return{text:terminal?"Finished":"Live",followable:!1};let follow=hint("app.tasks.follow");return{text:terminal?`Finished \xB7 ${follow} load final output`:`Browsing \xB7 ${follow} follow`,followable:!0}}function renderInspectorPane(env,rect,options){let{theme:theme2,selection,inspector,hint}=env,innerWidth=rect.width-2,innerHeight=rect.height-2,task=inspector.task,tab=selection.state.tab,hits=[],tabs=[["output","Output"],["info","Details"]],tabX=rect.x+TITLE_INDENT,title=tabs.map(([id,label])=>(options.interactive&&hits.push({x:tabX,y:rect.y,width:visibleWidth(label),action:{kind:"tab",tab:id}}),tabX+=visibleWidth(label)+2,theme2.style(label,tab===id?{fg:"text",underline:!0}:{fg:"muted"}))).join(" "),rows=[],status="",followWidth=0,divider;if(task){rows.push(theme2.style(cleanTaskText(firstCommandLine(task.title)),{fg:"text",bold:!0}),metaLine(task,theme2),""),divider=rows.length-1;let position=inspector.position,read=position.read,diagnostics=[task.error,read?.readError].filter(text=>!!text).map(cleanTaskText);tab==="output"&&diagnostics.length&&rows.push(theme2.fg("warning",diagnostics.join(" \xB7 ").replace(/\n/g," ")));let body2=Math.max(1,innerHeight-rows.length);if(tab==="info")rows.push(...position.info.layout(inspector.details(innerWidth),innerWidth,body2)),position.info.overflows&&(status=theme2.fg("muted",position.info.range));else if(rows.push(...position.output.layout(inspector.output(innerWidth),innerWidth,body2)),streamsLog(task)){let reading=readingState(task,inspector,hint);status=theme2.fg("muted",reading.text),read?.truncated&&(status+=theme2.fg("muted",` \xB7 Tail preview: ${formatSize(taskReadBytes(read))} of ${formatSize(read.totalBytes)}`)),followWidth=reading.followable?visibleWidth(reading.text):0}else position.output.overflows&&(status=theme2.fg("muted",position.output.range))}else rows.push(theme2.fg("muted","Select a task to inspect its result."));let frame3=framePane({width:rect.width,theme:theme2,accent:options.active,title,status:status||void 0,rows:Array.from({length:innerHeight},(_,i)=>rows[i]??""),divider});return options.interactive&&followWidth&&hits.push({x:rect.x+frame3.status.x,y:rect.y+rect.height-1,width:Math.min(followWidth,frame3.status.width),action:{kind:"key",key:"app.tasks.follow"}}),{lines:frame3.lines,hits}}var SPLIT_MIN_WIDTH=100,MIN_WIDTH2=60,MIN_HEIGHT=14;function listWidthFor(width){return Math.min(60,Math.max(34,Math.round(width*.4)))}function paneRects(width,height){let rows=height-1;if(width<SPLIT_MIN_WIDTH){let full={x:0,y:0,width,height:rows};return{split:!1,list:full,inspector:full}}let listWidth=listWidthFor(width);return{split:!0,list:{x:0,y:0,width:listWidth,height:rows},inspector:{x:listWidth+1,y:0,width:width-listWidth-1,height:rows}}}function renderTasksLayout(options){let{width,height,theme:theme2,mode}=options;if(width<1||height<1)return{lines:[],hits:[],regions:[],split:!1,listPageSize:1};let hint=key=>keyLabel(key,{keybindings:options.keybindings});if(width<MIN_WIDTH2||height<MIN_HEIGHT)return renderTooSmall(options,hint);let rects=paneRects(width,height),env={width,y:height-1,theme:theme2,hint,feedback:options.feedback},body2,footer;switch(mode.kind){case"help":{body2=renderHelpPane(options,hint,{x:0,y:0,width,height:height-1}),footer=helpFooter(env);break}case"search":{body2=renderPanes(options,hint,rects),footer=searchFooter(env);break}case"confirmStop":{body2=renderPanes(options,hint,rects);let target=options.selection.all.find(task=>task.id===mode.taskId);footer=confirmStopFooter(env,{source:cleanTaskText(target?.label??"task"),title:cleanTaskText(firstCommandLine(target?.title??mode.taskId))});break}case"browse":{body2=renderPanes(options,hint,rects);let task=options.inspector.task;footer=browseFooter(env,{focus:options.focus,split:rects.split,stoppable:!!task&&isStoppable(task),detachable:!!task&&options.canDetach(task.id)});break}}return{lines:[...body2.lines,footer.line],hits:[...body2.hits,...footer.hits],regions:body2.regions,split:rects.split,listPageSize:body2.pageSize??Math.max(1,rects.list.height-4)}}function renderPanes(options,hint,rects){let{theme:theme2,selection,inspector,list,focus,mode}=options,showList=rects.split||focus==="list",showInspector=rects.split||focus==="inspector",browsing=mode.kind==="browse",searching=mode.kind==="search",listPane=showList?renderListPane({theme:theme2,selection,list},rects.list,{active:rects.split&&focus==="list",interactive:browsing||searching,searchRow:mode.kind==="search"?mode.input.render(rects.list.width-2).join(""):void 0,stopTargetId:mode.kind==="confirmStop"?mode.taskId:void 0}):void 0,inspectorPane=showInspector?renderInspectorPane({theme:theme2,selection,inspector,hint},rects.inspector,{active:rects.split&&focus==="inspector",interactive:browsing}):void 0,regions=[];return listPane&&(browsing||searching)&&regions.push({pane:"list",...rects.list}),inspectorPane&&browsing&&regions.push({pane:"inspector",...rects.inspector}),{lines:listPane&&inspectorPane?listPane.lines.map((line,i)=>`${line} ${inspectorPane.lines[i]}`):(listPane??inspectorPane).lines,hits:[...listPane?.hits??[],...inspectorPane?.hits??[]],regions,pageSize:listPane?.pageSize??Math.max(1,rects.list.height-4)}}function renderHelpPane(options,hint,rect){let{theme:theme2,mode}=options;if(mode.kind!=="help")throw new Error("help pane requires help mode");let inner=rect.width-2,rows=mode.viewport.layout(helpRows(hint,theme2),inner,rect.height-2);return{lines:framePane({width:rect.width,theme:theme2,accent:!1,title:theme2.fg("text","Task controls"),status:mode.viewport.overflows?theme2.fg("muted",mode.viewport.range):void 0,rows:Array.from({length:rect.height-2},(_,i)=>rows[i]??"")}).lines,hits:[],regions:[{pane:"help",...rect}]}}function renderTooSmall(options,hint){let{width,height,theme:theme2}=options,result2={lines:[],hits:[],regions:[],split:!1,listPageSize:1,tooSmall:!0},message="Terminal too small for /tasks. Enlarge the window to continue.",close=`${hint("tui.select.cancel")} close`,boxWidth=Math.min(width,46),inner=boxWidth-2,wrapped=wrapTextWithAnsi(message,inner).map(line=>theme2.fg("warning",line)),spacious=[theme2.fg("text","Tasks"),"",...wrapped,"",theme2.fg("dim",close)],tight=[theme2.fg("text","Tasks"),...wrapped,theme2.fg("dim",close)],body2=height>=spacious.length+2?spacious:tight;if(inner>=16&&height>=body2.length+2){let box2=framePane({width:boxWidth,theme:theme2,accent:!1,rows:body2}).lines,left=Math.floor((width-boxWidth)/2),top=Math.max(0,Math.floor((height-box2.length)/2)),blank=" ".repeat(width);result2.lines=[...Array.from({length:top},()=>blank),...box2.map(line=>" ".repeat(left)+line+" ".repeat(width-left-boxWidth)),...Array.from({length:height-top-box2.length},()=>blank)],result2.hits.push({x:left+1,y:top+body2.length,width:visibleWidth(close),action:{kind:"back"}})}else for(result2.lines=["Tasks",message,close].slice(0,height).map(line=>fitCell(line,width));result2.lines.length<height;)result2.lines.push(" ".repeat(width));return result2}var SELF_EVIDENT=new Set(["running","completed","failed"]);function rowMeta(task,duplicate,stopTarget,theme2){return[stopTarget?theme2.fg("warning","stop?"):"",SELF_EVIDENT.has(task.status)?"":theme2.fg("muted",statusName(task.status)),duplicate?theme2.fg("muted",task.id.slice(-8)):"",theme2.fg("muted",runtimeLabel(task))].filter(Boolean).join(theme2.fg("muted"," \xB7 "))}var TaskList=class{constructor(){this.start=0,this.height=1,this.rows=[],this.selectedLine=-1,this.reveal=!1}showSelection(){this.reveal=!0}scroll(delta){this.start=Math.max(0,Math.min(Math.max(0,this.rows.length-this.height),this.start+delta))}render(selection,theme2,width,height,stopTargetId){let rows=[],labels=selection.rows.map(task=>cleanTaskText(task.label)),labelWidth=Math.max(0,...labels.map(label=>visibleWidth(label))),titles=selection.rows.map(task=>cleanTaskText(firstCommandLine(task.title))),group="",selectedLine=-1;for(let[index3,task]of selection.rows.entries()){let nextGroup=isTaskTerminal(task.status)?"Finished":"Active";nextGroup!==group&&(rows.push({text:theme2.fg("dim",nextGroup)}),group=nextGroup);let selected=task.id===selection.state.selectedId;selected&&(selectedLine=rows.length);let marker2=statusView(task.status,{now:Date.now()}),label=labels[index3],duplicate=titles.some((title2,other)=>other!==index3&&title2===titles[index3]),meta=rowMeta(task,duplicate,task.id===stopTargetId,theme2),source=labelWidth?`${label}${" ".repeat(labelWidth-visibleWidth(label))} `:"",head=visibleWidth(marker2.glyph)+1+visibleWidth(source),title=truncateToWidth(titles[index3],Math.max(1,width-head-visibleWidth(meta)-1),"\u2026"),gap=Math.max(1,width-head-visibleWidth(title)-visibleWidth(meta)),text=`${theme2.fg(marker2.color,marker2.glyph)} ${theme2.fg("dim",source)}${theme2.fg("text",title)}${" ".repeat(gap)}${meta}`,padded=truncateToWidth(text,width,"\u2026",!0);rows.push({text:selected?theme2.getBgAnsi("selectedBg")==="\x1B[49m"?theme2.style(stripTerminalSequences(padded),{inverse:!0}):theme2.bg("selectedBg",padded):padded,taskId:task.id})}rows.length||rows.push({text:theme2.fg("muted",selection.all.length?"No matching tasks.":"No retained tasks.")});let sameSelection=this.selectedId===selection.state.selectedId,selectedWasVisible=sameSelection&&this.selectedLine>=this.start&&this.selectedLine<this.start+this.height&&selectedLine>=0;if(selectedWasVisible)this.start+=selectedLine-this.selectedLine;else{let anchor=this.rows[this.start]?.taskId,next=anchor?rows.findIndex(row=>row.taskId===anchor):-1;next>=0&&(this.start=next)}if(selectedLine>=0&&(!sameSelection||this.reveal||selectedWasVisible)){let top=rows[selectedLine-1]?.taskId===void 0?selectedLine-1:selectedLine;top<this.start?this.start=Math.max(0,top):selectedLine>=this.start+height&&(this.start=selectedLine+1-height)}return this.start=Math.max(0,Math.min(Math.max(0,rows.length-height),this.start)),this.rows=rows,this.height=height,this.selectedId=selection.state.selectedId,this.selectedLine=selectedLine,this.reveal=!1,rows.slice(this.start,this.start+height)}get range(){if(this.rows.length<=this.height)return"";let ids=this.rows.flatMap(row=>row.taskId?[row.taskId]:[]),visible=this.rows.slice(this.start,this.start+this.height).flatMap(row=>row.taskId?[row.taskId]:[]);return`${ids.indexOf(visible[0])+1}-${ids.indexOf(visible.at(-1))+1} of ${ids.length}`}};var BROWSE={kind:"browse"},FEEDBACK_MS=4e3,QUERY_LIMIT=512,actions=["app.tasks.search","app.tasks.kill","app.tasks.detachSelected","app.tasks.previousTab","app.tasks.nextTab","app.tasks.follow","app.tasks.top","app.tasks.bottom","app.tasks.nextFocus","app.tasks.previousFocus","app.tasks.help"];function unavailableReason(task){if(isTaskTerminal(task.status))return"Task already finished.";if(task.status==="stopping")return"Task is already stopping."}var TasksMenu=class{constructor(options){this.focused=!1,this.list=new TaskList,this.mode=BROWSE,this.focus="list",this.dirty=!0,this.tickQueued=!1,this.refreshQueued=!1,this.disposed=!1,this.options=options,this.width=options.tui.terminal.columns,this.selection=new TaskSelection(options.state??{tab:"output"}),this.inspector=new TaskInspector({host:options.host,theme:options.theme,requestRender:()=>options.tui.requestRender()}),this.sync(),this.selection.selectStartedSinceClose(),this.inspector.select(this.selection.selected),this.list.showSelection(),this.unsubscribe=options.host.subscribe(()=>{this.dirty=!0,this.queueTick(),options.tui.requestRender()}),this.pollTimer=setInterval(()=>{this.queueTick(!0),this.selection.activeCount&&options.tui.requestRender()},options.pollIntervalMs??1e3),this.pollTimer.unref?.(),this.queueTick(!0)}get query(){return this.mode.kind==="search"?this.mode.input.getValue().slice(0,QUERY_LIMIT):""}select(id){this.selection.select(id,this.query)}sync(){if(this.disposed||!this.dirty)return;this.dirty=!1,this.selection.sync(this.options.host.list(),this.query),this.inspector.select(this.selection.selected),this.inspector.prune(new Set(this.selection.all.map(task=>task.id)));let selected=this.selection.selected;this.mode.kind==="confirmStop"&&(this.mode.taskId!==selected?.id||isTaskTerminal(selected.status))&&this.setMode(BROWSE);let animates=this.selection.all.some(task=>task.status==="running");animates&&!this.animationTimer?(this.animationTimer=setInterval(()=>this.options.tui.requestRender(),STATUS_SPINNER_INTERVAL_MS),this.animationTimer.unref?.()):animates||(clearInterval(this.animationTimer),this.animationTimer=void 0)}queueTick(refresh=!1){this.disposed||(this.refreshQueued||=refresh,!this.tickQueued&&(this.tickQueued=!0,Promise.resolve().then(async()=>{if(this.tickQueued=!1,this.disposed)return;let refresh2=this.refreshQueued;this.refreshQueued=!1,this.sync(),(refresh2||this.inspector.task&&isTaskTerminal(this.inspector.task.status))&&await this.inspector.refresh()}).catch(()=>{})))}invalidate(){this.inspector.invalidate()}setMode(next){this.mode=next}notify(tone,text){this.clearFeedback(),this.feedback={tone,text},this.feedbackTimer=setTimeout(()=>{this.feedbackTimer=void 0,this.feedback=void 0,this.disposed||this.options.tui.requestRender()},FEEDBACK_MS),this.feedbackTimer.unref?.()}clearFeedback(){clearTimeout(this.feedbackTimer),this.feedbackTimer=void 0,this.feedback=void 0}escape(){switch(this.mode.kind){case"search":this.finishSearch(!0);break;case"help":case"confirmStop":this.setMode(BROWSE);break;case"browse":this.layout&&!this.layout.tooSmall&&!this.layout.split&&this.focus==="inspector"?this.focus="list":this.close();break}}close(){this.dispose(),this.options.onClose()}selectedChanged(){this.mode.kind==="confirmStop"&&this.setMode(BROWSE),this.list.showSelection(),this.inspector.select(this.selection.selected),this.queueTick(!0)}requestStop(){let task=this.selection.selected;if(!task)return;let reason=unavailableReason(task);reason?this.notify("warning",reason):this.setMode({kind:"confirmStop",taskId:task.id})}confirmStop(){let mode=this.mode;if(mode.kind!=="confirmStop")return;this.setMode(BROWSE);let task=this.selection.selected;mode.taskId!==task?.id||isTaskTerminal(task.status)||this.options.host.kill(mode.taskId)||this.notify("warning","No new cancellation requested.")}detachSelected(){let task=this.selection.selected;if(!task)return;let reason=unavailableReason(task)??(task.mode==="background"?"Task is already in the background.":"");if(reason){this.notify("warning",reason);return}try{this.options.host.detach(task.id)||this.notify("warning","This task cannot move to background.")}catch(error){this.notify("warning",cleanTaskText(error instanceof Error?error.message:String(error)))}}startSearch(){let input2=new Input({prompt:"Find task: ",placeholder:"title, command, kind or ID"});input2.focused=!0,this.setMode({kind:"search",restore:{id:this.selection.state.selectedId,focus:this.focus},input:input2}),this.focus="list"}finishSearch(cancel){let mode=this.mode;if(mode.kind!=="search")return;let id=cancel?mode.restore.id:this.selection.state.selectedId;!cancel&&!id||(this.focus=cancel?mode.restore.focus:"list",this.setMode(BROWSE),this.select(id),this.selectedChanged())}open(){this.focus==="list"&&this.selection.selected&&(this.focus="inspector")}action(key){switch(key){case"app.tasks.search":this.startSearch();break;case"app.tasks.previousTab":case"app.tasks.nextTab":this.focus==="inspector"&&(this.selection.state.tab=key==="app.tasks.previousTab"?"output":"info");break;case"app.tasks.nextFocus":case"app.tasks.previousFocus":this.focus=this.focus==="list"?"inspector":"list";break;case"app.tasks.follow":this.focus==="inspector"&&this.selection.state.tab==="output"&&(this.inspector.position.output.jump(!0),this.queueTick(!0));break;case"app.tasks.top":case"app.tasks.bottom":this.focus==="list"?(this.select(key==="app.tasks.top"?this.selection.rows[0]?.id:this.selection.rows.at(-1)?.id),this.selectedChanged()):this.inspector.position[this.selection.state.tab].jump(key==="app.tasks.bottom");break;case"app.tasks.kill":this.requestStop();break;case"app.tasks.confirmStop":this.confirmStop();break;case"app.tasks.detachSelected":this.detachSelected();break;case"app.tasks.help":this.setMode({kind:"help",viewport:new TaskViewport});break}}perform(action){switch(action.kind){case"select":this.select(action.taskId),this.selectedChanged(),this.focus="list",this.mode.kind==="search"&&this.finishSearch(!1);break;case"tab":this.focus="inspector",this.selection.state.tab=action.tab;break;case"key":action.key==="app.tasks.follow"&&(this.focus="inspector"),this.action(action.key);break;case"open":this.open();break;case"back":this.escape();break}}move(direction,page=!1){if(this.mode.kind==="help"){this.mode.viewport.move(direction,page);return}if(this.focus==="list"){let rows=this.selection.rows;if(!rows.length)return;let index3=rows.findIndex(task=>task.id===this.selection.state.selectedId),next=page?Math.max(0,Math.min(rows.length-1,index3+direction*(this.layout?.listPageSize??1))):(index3+direction+rows.length)%rows.length;this.select(rows[next]?.id),this.selectedChanged()}else this.inspector.position[this.selection.state.tab].move(direction,page)}handleInput(data){if(!this.disposed){this.sync(),this.render(this.width),this.clearFeedback();try{if(this.layout?.tooSmall)this.options.keybindings.matches(data,"tui.select.cancel")&&this.escape();else switch(this.mode.kind){case"help":this.helpInput(this.mode.viewport,data);break;case"search":this.searchInput(this.mode.input,data);break;case"confirmStop":this.confirmInput(data);break;case"browse":this.browseInput(data);break}}catch(error){this.notify("error",cleanTaskText(error instanceof Error?error.message:String(error)))}this.disposed||(this.queueTick(!0),this.options.tui.requestRender())}}helpInput(viewport,data){let kb=this.options.keybindings;kb.matches(data,"tui.select.cancel")||kb.matches(data,"app.tasks.help")?this.setMode(BROWSE):kb.matches(data,"app.tasks.top")||kb.matches(data,"app.tasks.bottom")?viewport.jump(kb.matches(data,"app.tasks.bottom")):kb.matches(data,"tui.select.up")||kb.matches(data,"tui.editor.pageUp")?viewport.move(-1,kb.matches(data,"tui.editor.pageUp")):(kb.matches(data,"tui.select.down")||kb.matches(data,"tui.editor.pageDown"))&&viewport.move(1,kb.matches(data,"tui.editor.pageDown"))}searchInput(input2,data){let kb=this.options.keybindings;kb.matches(data,"tui.select.cancel")?this.escape():kb.matches(data,"tui.select.confirm")?this.finishSearch(!1):kb.matches(data,"tui.select.up")||kb.matches(data,"tui.select.pageUp")?this.move(-1,kb.matches(data,"tui.select.pageUp")):kb.matches(data,"tui.select.down")||kb.matches(data,"tui.select.pageDown")?this.move(1,kb.matches(data,"tui.select.pageDown")):(input2.handleInput(data),this.selection.refresh(this.query),this.selectedChanged())}confirmInput(data){let kb=this.options.keybindings;kb.matches(data,"app.tasks.confirmStop")?this.confirmStop():kb.matches(data,"tui.select.cancel")&&this.escape()}browseInput(data){let kb=this.options.keybindings;if(kb.matches(data,"tui.select.cancel")){this.escape();return}let pageUp=kb.matches(data,this.focus==="list"?"tui.select.pageUp":"tui.editor.pageUp"),pageDown=kb.matches(data,this.focus==="list"?"tui.select.pageDown":"tui.editor.pageDown");if(pageUp||kb.matches(data,"tui.select.up"))this.move(-1,pageUp);else if(pageDown||kb.matches(data,"tui.select.down"))this.move(1,pageDown);else if(kb.matches(data,"tui.select.confirm"))this.open();else{let key=actions.find(key2=>kb.matches(data,key2));key&&this.action(key)}}handleMouse(event){if(this.disposed||event.ctrl||event.alt||event.shift)return;this.clearFeedback(),this.render(event.width);let layout=this.layout,region=layout.regions.find(r=>event.y>=r.y&&event.y<r.y+r.height&&event.x>=r.x&&event.x<r.x+r.width);if(event.type==="wheel"&&event.wheelDelta){if(region){let delta=Math.sign(event.wheelDelta)*Math.min(20,Math.abs(event.wheelDelta));region.pane==="help"?this.mode.kind==="help"&&this.mode.viewport.move(delta,!1):region.pane==="list"?this.list.scroll(delta):this.inspector.position[this.selection.state.tab].move(delta,!1)}}else if(event.type==="click"&&event.button==="left"){let hit=layout.hits.find(hit2=>hit2.y===event.y&&event.x>=hit2.x&&event.x<hit2.x+hit2.width);try{hit?this.perform(hit.action):region&&region.pane!=="help"&&(this.focus=region.pane)}catch(error){this.notify("error",cleanTaskText(error instanceof Error?error.message:String(error)))}}else return;return this.queueTick(!0),this.options.tui.requestRender(),{handled:!0,focus:event.type==="click"}}render(width){return this.width=width,this.sync(),this.layout=renderTasksLayout({width,height:this.options.tui.terminal.rows,theme:this.options.theme,keybindings:this.options.keybindings,selection:this.selection,inspector:this.inspector,list:this.list,focus:this.focus,mode:this.mode,feedback:this.feedback,canDetach:id=>this.canDetach(id)}),this.layout.lines}canDetach(id){try{return this.options.host.canDetach(id)}catch{return!1}}dispose(){this.disposed||(this.disposed=!0,this.selection.state.closedAt=Date.now(),clearInterval(this.pollTimer),clearInterval(this.animationTimer),this.clearFeedback(),this.unsubscribe(),this.inspector.dispose())}};function bindTasksUI(ctx){let state2={tab:"output"},unsubscribe,unsubscribeDetachKey,closeMenu,hintTimer,start=()=>{unsubscribe?.(),unsubscribeDetachKey?.();let update=()=>{clearTimeout(hintTimer),hintTimer=void 0;let all=ctx.tasks.list(),background=all.filter(task=>task.mode==="background"&&!isTaskTerminal(task.status)).length,parts=[];background&&(parts.push(theme.fg("text",`${background} background task${background===1?"":"s"}`)),parts.push(theme.fg("accent","/tasks")+theme.fg("muted"," to view")));let detachKey=keyLabel("app.tasks.detach"),now=Date.now(),movable=all.filter(task=>ctx.tasks.canDetach(task.id)),waits=movable.map(task=>task.startedAt+1e4-now).filter(wait=>wait>0);detachKey&&movable.length>waits.length&&parts.push(theme.fg("accent",detachKey)+theme.fg("muted"," to run in background")),detachKey&&waits.length>0&&(hintTimer=setTimeout(update,Math.min(...waits)),hintTimer.unref?.()),ctx.ui.setStatus("background",parts.length?parts.join(theme.fg("dim"," \xB7 ")):void 0)};unsubscribe=ctx.tasks.subscribe(update),unsubscribeDetachKey=ctx.ui.onTerminalInput(data=>{if(!getKeybindings().matches(data,"app.tasks.detach"))return;let count;try{count=ctx.tasks.detachForeground()}catch(error){return ctx.ui.notify(error instanceof Error?error.message:String(error),"warning"),{consume:!0}}if(count!==0)return ctx.ui.notify(`Moved ${count} execution${count===1?"":"s"} to the background. Use /tasks to manage tasks.`),{consume:!0}}),update()},dispose=()=>{unsubscribe?.(),unsubscribe=void 0,unsubscribeDetachKey?.(),unsubscribeDetachKey=void 0,clearTimeout(hintTimer),hintTimer=void 0,closeMenu?.(),closeMenu=void 0,ctx.ui.setStatus("background",void 0)};return start(),{dispose,open:async()=>{closeMenu?.(),await ctx.ui.custom((tui,theme2,keybindings,done)=>{let close=()=>{closeMenu===close&&(closeMenu=void 0),done()};return closeMenu=close,new TasksMenu({state:state2,tui,theme:theme2,keybindings,host:ctx.tasks,onClose:close})},{overlay:!0,overlayOptions:{anchor:"center",width:"100%",maxHeight:"100%"}})}}}async function confirmStopBranchTasks(stopped,confirm){if(stopped.length===0)return!0;let shown=stopped.slice(0,5).map(task=>` ${cleanTaskText(firstCommandLine(task.title))}`);return stopped.length>shown.length&&shown.push(` \u2026and ${stopped.length-shown.length} more`),confirm(`Stop ${stopped.length} running task${stopped.length===1?"":"s"}?`,`They were started on the branch you are leaving and will be cancelled:
1408
1408
  ${shown.join(`
1409
1409
  `)}`)}function tasksExtension(pi){let ui,bind=ctx=>{ui?.dispose(),ui=bindTasksUI(ctx)};pi.on("session_start",(_event,ctx)=>bind(ctx)),pi.on("session_shutdown",()=>{ui?.dispose(),ui=void 0}),pi.on("session_before_tree",async(event,ctx)=>{if(!ctx.hasUI)return;let stopped=ctx.tasks.session?.stoppedByTreeNavigation(event.preparation.targetId)??[];if(!await confirmStopBranchTasks(stopped,(title,message)=>ctx.ui.confirm(title,message)))return{cancel:!0}}),pi.registerTool(createTasksToolDefinition()),pi.registerMessageRenderer("task-completion",renderTaskCompletion),pi.registerCommand("tasks",{description:"View and manage session tasks",handler:async(_args,ctx)=>{if(ctx.mode!=="tui"){let tasks=ctx.tasks.list().filter(task=>task.mode==="background");ctx.ui.notify(boundedText(tasks.slice(0,10).map(describeTaskLine).join(`
1410
1410
  `))||"No background tasks.","info");return}ui||bind(ctx),await ui.open()}})}function formatFallbackArgs(args){if(!args||typeof args!="object")return"";let entries=Object.entries(args);if(entries.length===0)return"";let summary=entries.map(([key,value])=>{try{return`${key}=${JSON.stringify(value)??String(value)}`}catch{return`${key}=${String(value)}`}}).join(" ").replace(/\s+/g," ");return truncateToWidth(summary,toolStyle.fallbackArgsWidth,"...")}function createCallFallback(toolName,args,expanded=!1){if(expanded)return new Text(formatToolCallWithArgs(toolName,args,theme,!0),0,0);let summary=formatFallbackArgs(args),suffix=summary?theme.fg("dim",`(${summary})`):"";return new Text(`${theme.fg("toolTitle",theme.bold(toolName))}${suffix}`,0,0)}var FallbackResultComponent=class{constructor(output,expanded){this.output=output,this.expanded=expanded}render(width){let styledOutput=theme.fg("toolOutput",this.output);if(this.expanded)return new Text(styledOutput,0,0).render(width);let preview=truncateToVisualLines(styledOutput,toolStyle.collapsed.fallbackLines,width);if(preview.skippedCount<=0)return preview.visualLines;let noun=preview.skippedCount===1?"line":"lines",hint=theme.fg("muted",`... (${preview.skippedCount} earlier ${noun},`)+` ${keyHint("app.tools.expand","to expand")}${theme.fg("muted",")")}`;return[truncateToWidth(hint,width,"..."),...preview.visualLines]}invalidate(){}};var builtInRenderers;function builtInResultRenderer(toolName){return builtInRenderers??=createAllToolRenderers(),builtInRenderers[toolName]?.renderResult}function createToolShell(toolName,definition){let resultRenderer=definition?.renderResult;return{get gap(){return toolStyle.gap},frame(component,kind,context){return new FramedComponent(component,kind,()=>toolMarkerColor(toolStatus(context)))},renderCall(args,_theme,context){return createCallFallback(toolName,args,context.expanded)},renderResult(result2,_options,_theme,context){let output=getTextOutput(result2,context.showImages);return output?new FallbackResultComponent(output,context.expanded):new Container},shouldHideResult(context){if(context.expanded||context.isError||!toolStyle.collapsed.headerOnly.has(toolName))return!1;let builtIn=builtInResultRenderer(toolName);return builtIn!==void 0&&builtIn===resultRenderer}}}function withToolShell(toolName,definition){return definition?.renderShell==="self"||definition?.shell?definition:{...definition??{},shell:createToolShell(toolName,definition)}}function toolPresentation(pi){pi.registerToolRenderer((toolName,next)=>withToolShell(toolName,next()))}var builtInExtensions=[{name:"Agent",factory:agentExtension,replaceable:!0,builtin:!0},{name:"codemode",factory:codemode_default,replaceable:!0,builtin:!0},{name:"mcp",factory:mcp_default,replaceable:!0,builtin:!0},{name:"tool-search",factory:tool_search_default,replaceable:!0,builtin:!0},{name:"cached-compaction",factory:cachedCompaction,replaceable:!0,builtin:!0},{name:"llama.cpp",factory:llamaExtension,builtin:!0},{name:"btw",factory:btwExtension,builtin:!0},{name:"deepwiki",factory:deepwiki,builtin:!0},{name:"provider",factory:providerExtension,builtin:!0},{name:"question",factory:question,builtin:!0},{name:"run-summary",factory:runSummary,replaceable:!0,builtin:!0},{name:"statusline",factory:statusline,builtin:!0},{name:"tool-presentation",factory:toolPresentation,builtin:!0},{name:"tasks",factory:tasksExtension,replaceable:!0,builtin:!0},{name:"search",factory:search,builtin:!0},{name:"shell-paths",factory:shellPathsExtension,builtin:!0}];var loadMcpCommand=()=>import("./cli-LAZQG54B.js");import{existsSync as existsSync22,mkdirSync as mkdirSync10,readdirSync as readdirSync8,readFileSync as readFileSync20,renameSync as renameSync2,rmSync as rmSync6,writeFileSync as writeFileSync10}from"fs";import{dirname as dirname20,join as join31}from"path";var MIGRATION_GUIDE_URL="https://github.com/earendil-works/pi/blob/main/packages/coding-agent/CHANGELOG.md#extensions-migration",EXTENSIONS_DOC_URL="https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/extensions.md";function migrateAuthToAuthJson(){let agentDir=getAgentDir(),authPath=join31(agentDir,"auth.json"),oauthPath=join31(agentDir,"oauth.json"),settingsPath=join31(agentDir,"settings.json");if(existsSync22(authPath))return[];let migrated={},providers=[];if(existsSync22(oauthPath))try{let oauth=JSON.parse(stripBom(readFileSync20(oauthPath,"utf-8")));for(let[provider,cred]of Object.entries(oauth))migrated[provider]={type:"oauth",...cred},providers.push(provider);renameSync2(oauthPath,`${oauthPath}.migrated`)}catch{}if(existsSync22(settingsPath))try{let content=readFileSync20(settingsPath,"utf-8"),settings=JSON.parse(stripBom(content));if(settings.apiKeys&&typeof settings.apiKeys=="object"){for(let[provider,key]of Object.entries(settings.apiKeys))!migrated[provider]&&typeof key=="string"&&(migrated[provider]={type:"api_key",key},providers.push(provider));delete settings.apiKeys,writeFileSync10(settingsPath,JSON.stringify(settings,null,2))}}catch{}return Object.keys(migrated).length>0&&(mkdirSync10(dirname20(authPath),{recursive:!0}),writeFileSync10(authPath,JSON.stringify(migrated,null,2),{mode:384})),providers}function migrateSessionsFromAgentRoot(){let agentDir=getAgentDir(),files;try{files=readdirSync8(agentDir).filter(f=>f.endsWith(".jsonl")).map(f=>join31(agentDir,f))}catch{return}if(files.length!==0)for(let file of files)try{let firstLine3=readFileSync20(file,"utf8").split(`
@@ -1422,7 +1422,7 @@ See the built-in themes (dark.json, light.json) for reference values.`),otherErr
1422
1422
 
1423
1423
  Other errors:
1424
1424
  ${otherErrors.join(`
1425
- `)}`),new Error(errorMessage7)}return json}import{existsSync as existsSync24,mkdirSync as mkdirSync12,mkdtempSync as mkdtempSync3,readdirSync as readdirSync9,readFileSync as readFileSync21,renameSync as renameSync4,rmSync as rmSync8,writeFileSync as writeFileSync11}from"node:fs";import{join as join34,resolve as resolve17}from"node:path";var import_proper_lockfile3=__toESM(require_proper_lockfile(),1);import{basename as basename13,dirname as dirname21,join as join32,relative as relative10}from"node:path";var PACKAGE_FILTER_KEYS=["extensions","skills","prompts","themes"];function collapsePackageEntry(packages,index3,scope){let pkg=packages[index3];typeof pkg!="object"||pkg.skillInvocationOverrides!==void 0||PACKAGE_FILTER_KEYS.some(key=>pkg[key]!==void 0)||(pkg.autoload!==!1?packages[index3]=pkg.source:scope==="project"&&packages.splice(index3,1))}function stateInvocation(state2){return state2==="on"?"model-and-user":state2==="user-only"?"user-only":void 0}var SkillRows=class{constructor(host,settingsManager,packageManager){this.host=host,this.settingsManager=settingsManager,this.invocation=new SkillInvocationPolicy(settingsManager,packageManager)}toggle(item){if(this.host.writeScope()==="project"){let state2=this.nextProjectState(item);return this.setProjectState(item,state2)?state2==="inherit"?this.inheritedState(item)!=="off":state2!=="off":void 0}let current=this.effectiveState(item),next=current==="on"?"user-only":current==="user-only"?"off":"on";return this.setGlobalState(item,next),next!=="off"}checkbox(item){if(this.host.writeScope()==="project"){let state3=this.projectState(item);if(state3==="on")return theme.fg("success","[+]");if(state3==="user-only")return theme.fg("accent","[u]");if(state3==="off")return theme.fg("warning","[-]");if(state3==="load"){let effectiveState=this.effectiveState(item);return effectiveState==="user-only"?theme.fg("accent","[u]"):effectiveState==="off"?theme.fg("warning","[-]"):theme.fg("success","[+]")}let inheritedState=this.inheritedState(item);return theme.fg("dim",inheritedState==="on"?"[x]":inheritedState==="user-only"?"[u]":"[ ]")}let state2=this.effectiveState(item);return state2==="on"?theme.fg("success","[x]"):state2==="user-only"?theme.fg("accent","[u]"):theme.fg("dim","[ ]")}suffix(item){if(this.host.writeScope()==="project"){let state2=this.projectState(item);return state2==="on"?theme.fg("muted"," project on"):state2==="user-only"?theme.fg("muted"," project user only"):state2==="off"?theme.fg("muted"," project off"):state2==="load"?theme.fg("muted"," project load"):this.host.isInheritedGlobalItem(item)?theme.fg("dim"," inherited global"):""}return this.effectiveState(item)==="user-only"?theme.fg("accent"," user only"):""}dimmed(item){return this.host.writeScope()==="project"&&this.host.isInheritedGlobalItem(item)&&this.projectState(item)==="inherit"}effectiveState(item){let scopes=this.host.writeScope()==="project"?["project","user"]:["user"];return resolveSkillEffectiveState({enabled:item.enabled,invocationOverride:this.invocation.resolve(item.path,item.metadata,scopes),frontmatterDisableModelInvocation:item.frontmatterDisableModelInvocation})}inheritedState(item){return resolveSkillEffectiveState({enabled:this.host.getInheritedEnabled(item),invocationOverride:this.invocation.resolve(item.path,item.metadata,["user"]),frontmatterDisableModelInvocation:item.frontmatterDisableModelInvocation})}nextProjectState(item){let states=["on","user-only","off"],inheritedIndex=states.indexOf(this.inheritedState(item)),sequence=[...states.slice(inheritedIndex+1),...states.slice(0,inheritedIndex+1)],current=this.projectState(item);if(current==="inherit")return sequence[0];if(current==="load")return"inherit";let currentIndex=sequence.indexOf(current);return sequence[currentIndex+1]??"inherit"}projectState(item){if(this.host.writeScope()!=="project")return"inherit";let loadState=this.host.getProjectOverrideState(item);if(loadState==="unload")return"off";let layer=this.invocation.layer("project",item.metadata),invocation=layer?matchInvocation(layer,item.path).override:void 0;return invocation?invocation==="user-only"?"user-only":"on":loadState}setGlobalState(item,state2){this.host.setGlobalEnabled(item,state2!=="off"),this.setInvocationOverride(item,"user",stateInvocation(state2))}setProjectState(item,state2){let loadState=state2==="inherit"?"inherit":state2==="off"?"unload":"load";return this.host.setProjectResourceOverride(item,loadState)?(this.setInvocationOverride(item,"project",stateInvocation(state2)),!0):!1}setInvocationOverride(item,scope,override){let layer=this.invocation.layer(scope,item.metadata);if(!layer)return;let overrides=withInvocation(layer,item.path,override);if(item.metadata.origin==="top-level"){scope==="project"?this.settingsManager.setProjectSkillInvocationOverrides(overrides):this.settingsManager.setSkillInvocationOverrides(overrides);return}let packages=[...(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]],pkgIndex=this.invocation.findPackage(scope,item.metadata),current=packages[pkgIndex];current===void 0||typeof current=="string"&&!overrides||(packages[pkgIndex]={...typeof current=="string"?{source:current}:current,skillInvocationOverrides:overrides},collapsePackageEntry(packages,pkgIndex,scope),scope==="project"?this.settingsManager.setProjectPackages(packages):this.settingsManager.setPackages(packages))}};function hasResourcePattern(patterns,pattern){let normalized=pattern.replace(/\\/g,"/");for(let candidate of patterns)if(candidate.replace(/\\/g,"/")===normalized)return!0;return!1}var RESOURCE_TYPE_LABELS={extensions:"Extensions",skills:"Skills",prompts:"Prompts",themes:"Themes"};function formatBaseDir(baseDir){let displayPath2=shortenHomePath(baseDir).replace(/\\/g,"/");return displayPath2.endsWith("/")?displayPath2:`${displayPath2}/`}function getGroupLabel(metadata,agentDir){return metadata.origin==="package"?`${metadata.source} (${metadata.scope})`:metadata.source==="builtin"?metadata.scope==="user"?"Built-in":"Built-in (project override)":metadata.source==="auto"?metadata.baseDir?metadata.scope==="user"?`User (${formatBaseDir(metadata.baseDir)})`:`Project (${formatBaseDir(metadata.baseDir)})`:metadata.scope==="user"?`User (${formatBaseDir(agentDir)})`:`Project (${CONFIG_DIR_NAME}/)`:metadata.scope==="user"?"User settings":"Project settings"}function buildGroups(resolved,agentDir){let groupMap=new Map,addToGroup=(resources,resourceType)=>{for(let res of resources){let{path:path10,enabled,metadata}=res,groupKey2=`${metadata.origin}:${metadata.scope}:${metadata.source}:${metadata.baseDir??""}`;groupMap.has(groupKey2)||groupMap.set(groupKey2,{key:groupKey2,label:getGroupLabel(metadata,agentDir),scope:metadata.scope,origin:metadata.origin,source:metadata.source,subgroups:[]});let group=groupMap.get(groupKey2),subgroupKey=`${groupKey2}:${resourceType}`,subgroup=group.subgroups.find(sg=>sg.type===resourceType);subgroup||(subgroup={type:resourceType,label:RESOURCE_TYPE_LABELS[resourceType],items:[]},group.subgroups.push(subgroup));let fileName=basename13(path10),parentFolder=basename13(dirname21(path10)),displayName;metadata.source==="builtin"?displayName=path10.slice(BUILTIN_PATH_PREFIX.length):resourceType==="extensions"&&parentFolder!=="extensions"?displayName=`${parentFolder}/${fileName}`:resourceType==="skills"&&fileName==="SKILL.md"?displayName=parentFolder:displayName=fileName,subgroup.items.push({path:path10,enabled,metadata,resourceType,displayName,groupKey:groupKey2,subgroupKey,frontmatterDisableModelInvocation:resourceType==="skills"?readSkillDisableModelInvocation(path10):void 0})}};addToGroup(resolved.extensions,"extensions"),addToGroup(resolved.skills,"skills"),addToGroup(resolved.prompts,"prompts"),addToGroup(resolved.themes,"themes");let groups=Array.from(groupMap.values());groups.sort((a,b)=>a.origin!==b.origin?a.origin==="package"?-1:1:a.scope!==b.scope?a.scope==="user"?-1:1:a.source.localeCompare(b.source));let typeOrder={extensions:0,skills:1,prompts:2,themes:3};for(let group of groups){group.subgroups.sort((a,b)=>typeOrder[a.type]-typeOrder[b.type]);for(let subgroup of group.subgroups)subgroup.items.sort((a,b)=>a.displayName.localeCompare(b.displayName))}return groups}var ConfigSelectorHeader=class{constructor(writeScope,projectModeAvailable){this.writeScope=writeScope,this.projectModeAvailable=projectModeAvailable}setWriteScope(writeScope){this.writeScope=writeScope}invalidate(){}render(width){let title=theme.bold(this.writeScope==="project"?"Project Local Resources":"Global Resources"),sep12=theme.fg("muted"," \xB7 "),switchHint=this.projectModeAvailable?keyHint("tui.input.tab","switch mode")+sep12:"",actionHint=rawKeyHint("space","change"),hint=switchHint+actionHint+sep12+rawKeyHint("esc","close"),spacing=Math.max(1,width-visibleWidth(title)-visibleWidth(hint)),scopeHint=this.writeScope==="project"?theme.fg("muted",`${CONFIG_DIR_NAME}/settings.json \xB7 inherited global resources are dimmed`):theme.fg("muted",`~/${CONFIG_DIR_NAME}/agent/settings.json`);return[truncateToWidth(`${title}${" ".repeat(spacing)}${hint}`,width,""),truncateToWidth(scopeHint,width,"")]}},ResourceList=class{get focused(){return this._focused}set focused(value){this._focused=value,this.searchInput.focused=value}constructor(groupsByScope,settingsManager,cwd,agentDir,terminalHeight,writeScope="global"){this.flatItems=[],this.filteredItems=[],this.selectedIndex=0,this._focused=!1,this.groupsByScope=groupsByScope,this.settingsManager=settingsManager,this.cwd=cwd,this.agentDir=agentDir,this.writeScope=writeScope,this.inheritedEnabledByKey=this.buildInheritedEnabledMap(groupsByScope.global),this.packageManager=new DefaultPackageManager({cwd,agentDir,settingsManager}),this.skills=new SkillRows({writeScope:()=>this.writeScope,getProjectOverrideState:item=>this.getProjectOverrideState(item),setProjectResourceOverride:(item,state2)=>this.setProjectResourceOverride(item,state2),setGlobalEnabled:(item,enabled)=>item.metadata.origin==="top-level"?this.toggleTopLevelResource(item,enabled):this.togglePackageResource(item,enabled),getInheritedEnabled:item=>this.getInheritedEnabled(item),isInheritedGlobalItem:item=>this.isInheritedGlobalItem(item)},settingsManager,this.packageManager),this.searchInput=new Input;let chrome=8;this.maxVisible=Math.max(5,(terminalHeight??24)-chrome),this.buildFlatList(),this.filteredItems=[...this.flatItems]}setWriteScope(writeScope){this.writeScope=writeScope,this.buildFlatList(),this.filterItems(this.searchInput.getValue())}get groups(){return this.groupsByScope[this.writeScope]}buildInheritedEnabledMap(groups){let result2=new Map;for(let group of groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)result2.set(this.getResourceItemKey(item),item.enabled);return result2}buildFlatList(){this.flatItems=[];for(let group of this.groups){this.flatItems.push({type:"group",group});for(let subgroup of group.subgroups){this.flatItems.push({type:"subgroup",subgroup,group});for(let item of subgroup.items)this.flatItems.push({type:"item",item})}}this.selectedIndex=this.flatItems.findIndex(e=>e.type==="item"),this.selectedIndex<0&&(this.selectedIndex=0)}findNextItem(fromIndex,direction){let idx=fromIndex+direction;for(;idx>=0&&idx<this.filteredItems.length;){if(this.filteredItems[idx].type==="item")return idx;idx+=direction}return fromIndex}filterItems(query){if(!query.trim()){this.filteredItems=[...this.flatItems],this.selectFirstItem();return}let lowerQuery=query.toLowerCase(),matchingItems=new Set,matchingSubgroups=new Set,matchingGroups=new Set;for(let entry of this.flatItems)if(entry.type==="item"){let item=entry.item;(item.displayName.toLowerCase().includes(lowerQuery)||item.resourceType.toLowerCase().includes(lowerQuery)||item.path.toLowerCase().includes(lowerQuery))&&matchingItems.add(item)}for(let group of this.groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)matchingItems.has(item)&&(matchingSubgroups.add(subgroup),matchingGroups.add(group));this.filteredItems=[];for(let entry of this.flatItems)entry.type==="group"&&matchingGroups.has(entry.group)?this.filteredItems.push(entry):entry.type==="subgroup"&&matchingSubgroups.has(entry.subgroup)?this.filteredItems.push(entry):entry.type==="item"&&matchingItems.has(entry.item)&&this.filteredItems.push(entry);this.selectFirstItem()}selectFirstItem(){let firstItemIndex=this.filteredItems.findIndex(e=>e.type==="item");this.selectedIndex=firstItemIndex>=0?firstItemIndex:0}updateItem(item,enabled){item.enabled=enabled,this.writeScope==="global"&&this.inheritedEnabledByKey.set(this.getResourceItemKey(item),enabled);for(let group of this.groups)for(let subgroup of group.subgroups){let found=subgroup.items.find(i=>i.path===item.path&&i.resourceType===item.resourceType);if(found){found.enabled=enabled;return}}}invalidate(){}render(width){let lines=[];if(lines.push(...this.searchInput.render(width)),lines.push(""),this.filteredItems.length===0)return lines.push(theme.fg("muted"," No resources found")),lines;let startIndex=Math.max(0,Math.min(this.selectedIndex-Math.floor(this.maxVisible/2),this.filteredItems.length-this.maxVisible)),endIndex2=Math.min(startIndex+this.maxVisible,this.filteredItems.length);for(let i=startIndex;i<endIndex2;i++){let entry=this.filteredItems[i],isSelected2=i===this.selectedIndex;if(entry.type==="group"){let inherited=this.writeScope==="project"&&entry.group.scope==="user",label=theme.bold(`${entry.group.label}${inherited?" \xB7 inherited global":""}`),groupLine=theme.fg(inherited?"dim":"accent",label);lines.push(truncateToWidth(` ${groupLine}`,width,""))}else if(entry.type==="subgroup"){let color=this.writeScope==="project"&&entry.group.scope==="user"?"dim":"muted",subgroupLine=theme.fg(color,entry.subgroup.label);lines.push(truncateToWidth(` ${subgroupLine}`,width,""))}else{let item=entry.item,cursor=isSelected2?"> ":" ",dimmed=this.isDimmedItem(item),nameText=isSelected2&&!dimmed?theme.bold(item.displayName):item.displayName,name=dimmed?theme.fg("dim",nameText):nameText,prefix=`${cursor} ${this.renderCheckbox(item)} `,suffix=this.getItemSuffix(item),nameWidth=Math.max(1,width-visibleWidth(prefix)-visibleWidth(suffix)),renderedName=truncateToWidth(name,nameWidth,"...");lines.push(truncateToWidth(`${prefix}${renderedName}${suffix}`,width,"..."))}}if(startIndex>0||endIndex2<this.filteredItems.length){let itemCount=this.filteredItems.filter(e=>e.type==="item").length,currentItemIndex=this.filteredItems.slice(0,this.selectedIndex).filter(e=>e.type==="item").length+1;lines.push(theme.fg("dim",` (${currentItemIndex}/${itemCount})`))}return lines}handleInput(data){let kb=getKeybindings();if(kb.matches(data,"tui.select.up")){this.selectedIndex=this.findNextItem(this.selectedIndex,-1);return}if(kb.matches(data,"tui.select.down")){this.selectedIndex=this.findNextItem(this.selectedIndex,1);return}if(kb.matches(data,"tui.select.pageUp")){let target=Math.max(0,this.selectedIndex-this.maxVisible);for(;target<this.filteredItems.length&&this.filteredItems[target].type!=="item";)target++;target<this.filteredItems.length&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.pageDown")){let target=Math.min(this.filteredItems.length-1,this.selectedIndex+this.maxVisible);for(;target>=0&&this.filteredItems[target].type!=="item";)target--;target>=0&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.cancel")){this.onCancel?.();return}if(matchesKey(data,"ctrl+c")){this.onExit?.();return}if(kb.matches(data,"tui.input.tab")){this.onSwitchMode?.();return}if(data===" "||kb.matches(data,"tui.select.confirm")){let entry=this.filteredItems[this.selectedIndex];if(entry?.type==="item"&&(this.writeScope==="project"||this.getItemScope(entry.item)==="user")){let newEnabled=this.toggleResource(entry.item);newEnabled!==void 0&&(this.updateItem(entry.item,newEnabled),this.onToggle?.(entry.item,newEnabled))}return}this.searchInput.handleInput(data),this.filterItems(this.searchInput.getValue())}toggleResource(item){if(item.resourceType==="skills")return this.skills.toggle(item);if(this.writeScope==="project"){let state2=this.getNextOverrideState(item);return this.setProjectResourceOverride(item,state2)?state2==="inherit"?this.getInheritedEnabled(item):state2==="load":void 0}let enabled=!item.enabled;return item.metadata.origin==="top-level"?this.toggleTopLevelResource(item,enabled):this.togglePackageResource(item,enabled),enabled}toggleTopLevelResource(item,enabled){let scope=item.metadata.scope,settings=scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings(),arrayKey=item.resourceType,current=settings[arrayKey]??[],pattern=this.getResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),scope==="project"?arrayKey==="extensions"?this.settingsManager.setProjectExtensionPaths(updated):arrayKey==="skills"?this.settingsManager.setProjectSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setProjectThemePaths(updated):arrayKey==="extensions"?this.settingsManager.setExtensionPaths(updated):arrayKey==="skills"?this.settingsManager.setSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setThemePaths(updated)}togglePackageResource(item,enabled){let scope=item.metadata.scope,packages=[...(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]],pkgIndex=packages.findIndex(pkg2=>(typeof pkg2=="string"?pkg2:pkg2.source)===item.metadata.source);if(pkgIndex===-1)return;let pkg=packages[pkgIndex];typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let arrayKey=item.resourceType,current=pkg[arrayKey]??[],pattern=this.getPackageResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),pkg[arrayKey]=updated.length>0?updated:void 0,["extensions","skills","prompts","themes"].some(k=>pkg[k]!==void 0)||(packages[pkgIndex]=pkg.source),scope==="project"?this.settingsManager.setProjectPackages(packages):this.settingsManager.setPackages(packages)}renderCheckbox(item){if(item.resourceType==="skills")return this.skills.checkbox(item);if(this.writeScope==="project"){let state2=this.getProjectOverrideState(item);return state2==="load"?theme.fg("success","[+]"):state2==="unload"?theme.fg("warning","[-]"):theme.fg("dim",item.enabled?"[x]":"[ ]")}return item.enabled?theme.fg("success","[x]"):theme.fg("dim","[ ]")}getItemSuffix(item){if(item.resourceType==="skills")return this.skills.suffix(item);if(this.writeScope!=="project")return"";let state2=this.getProjectOverrideState(item);return state2==="load"?theme.fg("muted"," project load"):state2==="unload"?theme.fg("muted"," project unload"):this.isInheritedGlobalItem(item)?theme.fg("dim"," inherited global"):""}isDimmedItem(item){return item.resourceType==="skills"?this.skills.dimmed(item):this.writeScope==="project"&&this.isInheritedGlobalItem(item)&&this.getProjectOverrideState(item)==="inherit"}setProjectResourceOverride(item,state2){return item.metadata.origin==="top-level"?this.setProjectTopLevelOverride(item,state2):this.setProjectPackageOverride(item,state2)}setProjectTopLevelOverride(item,state2){let current=this.settingsManager.getProjectSettings()[item.resourceType]??[],pattern=this.isInheritedGlobalItem(item)?item.path:this.getResourcePatternForScope(item,"project"),patterns=this.getTopLevelOverridePatterns(item,"project"),updated=current.filter(entry=>{let target=this.getPatternEntryTarget(entry);return(entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-"))&&patterns.has(target)?!1:!(state2==="inherit"&&this.isInheritedGlobalItem(item)&&target===pattern)});return state2!=="inherit"&&(this.isInheritedGlobalItem(item)&&item.metadata.source!=="builtin"&&!updated.includes(pattern)&&updated.push(pattern),updated.push(`${state2==="load"?"+":"-"}${pattern}`)),this.setProjectTopLevelPaths(item.resourceType,updated),!0}setProjectTopLevelPaths(key,paths){key==="extensions"?this.settingsManager.setProjectExtensionPaths(paths):key==="skills"?this.settingsManager.setProjectSkillPaths(paths):key==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(paths):this.settingsManager.setProjectThemePaths(paths)}setProjectPackageOverride(item,state2){let packages=[...this.settingsManager.getProjectSettings().packages??[]],pkgIndex=packages.findIndex(pkg2=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg2=="string"?pkg2:pkg2.source,"project"));if(pkgIndex===-1){if(state2==="inherit")return!1;packages.push(this.createPackageOverrideSource(item)),pkgIndex=packages.length-1}let pkg=packages[pkgIndex];if(pkg===void 0)return!1;typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let pattern=this.getPackageResourcePattern(item),updated=(pkg[item.resourceType]??[]).filter(entry=>this.getPatternEntryTarget(entry)!==pattern);return state2!=="inherit"&&updated.push(`${state2==="load"?"+":"-"}${pattern}`),pkg[item.resourceType]=updated.length>0?updated:void 0,collapsePackageEntry(packages,pkgIndex,"project"),this.settingsManager.setProjectPackages(packages),!0}getNextOverrideState(item){let state2=this.getProjectOverrideState(item),inheritedEnabled=this.getInheritedEnabled(item);return state2==="inherit"?inheritedEnabled?"unload":"load":state2==="unload"?inheritedEnabled?"load":"inherit":inheritedEnabled?"inherit":"unload"}getProjectOverrideState(item){if(this.writeScope!=="project")return"inherit";if(item.metadata.origin==="top-level")return this.getOverrideStateFromEntries(this.settingsManager.getProjectSettings()[item.resourceType]??[],this.getTopLevelOverridePatterns(item,"project"),!1);let pkg=this.findMatchingPackageSource(item,"project");if(typeof pkg!="object")return"inherit";let entries=pkg[item.resourceType];return entries===void 0?"inherit":this.getOverrideStateFromEntries(entries,this.getPackageOverridePatterns(item),pkg.autoload!==!1)}getOverrideStateFromEntries(entries,patterns,emptyArrayIsUnload){if(entries.length===0&&emptyArrayIsUnload)return"unload";let state2="inherit";for(let entry of entries)hasResourcePattern(patterns,this.getPatternEntryTarget(entry))&&(entry.startsWith("!")||entry.startsWith("-")?state2="unload":state2="load");return state2}getInheritedEnabled(item){return this.inheritedEnabledByKey.get(this.getResourceItemKey(item))??(this.getItemScope(item)==="user"?item.enabled:!0)}isInheritedGlobalItem(item){return this.getItemScope(item)==="user"||this.inheritedEnabledByKey.has(this.getResourceItemKey(item))}getTopLevelOverridePatterns(item,scope){let baseDir=this.getTopLevelBaseDir(scope),patterns=new Set([this.getResourcePatternForScope(item,scope),item.path,relative10(baseDir,item.path)]);if(item.metadata.baseDir&&patterns.add(relative10(item.metadata.baseDir,item.path)),item.resourceType==="skills"&&basename13(item.path)==="SKILL.md"){let parentDir=dirname21(item.path);patterns.add(parentDir),patterns.add(relative10(baseDir,parentDir)),item.metadata.baseDir&&patterns.add(relative10(item.metadata.baseDir,parentDir))}return patterns}getResourcePatternForScope(item,scope){let sourceScope=this.getItemScope(item);if(scope!==sourceScope||item.metadata.source==="builtin")return item.path;let baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(sourceScope);return relative10(baseDir,item.path)}createPackageOverrideSource(item){let source=item.metadata.source;if(!isLocalPath(source))return{source,autoload:!1};let sourcePath=resolvePath(source,this.getTopLevelBaseDir(this.getItemScope(item)),{trim:!0});return{source:relative10(this.getTopLevelBaseDir("project"),sourcePath)||".",autoload:!1}}packageSourceStringMatches(leftSource,leftScope,rightSource,rightScope){return this.packageManager.getPackageIdentity(leftSource,leftScope)===this.packageManager.getPackageIdentity(rightSource,rightScope)}findMatchingPackageSource(item,targetScope){return((targetScope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]).find(pkg=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg=="string"?pkg:pkg.source,targetScope))}getPatternEntryTarget(entry){return entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-")?entry.slice(1):entry}getResourceItemKey(item){return`${item.resourceType}:${getResourcePathKey(item.path)}`}getItemScope(item){return item.metadata.scope==="project"?"project":"user"}getTopLevelBaseDir(scope){return scope==="project"?join32(this.cwd,CONFIG_DIR_NAME):this.agentDir}getResourcePattern(item){if(item.metadata.source==="builtin")return item.path;let scope=item.metadata.scope,baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(scope);return relative10(baseDir,item.path)}getPackageResourcePattern(item){let baseDir=item.metadata.baseDir??dirname21(item.path);return relative10(baseDir,item.path)}getPackageOverridePatterns(item){let pattern=this.getPackageResourcePattern(item);if(item.resourceType!=="skills")return new Set([pattern]);let patterns=new Set([pattern,item.path]);return basename13(item.path)==="SKILL.md"&&patterns.add(dirname21(pattern)).add(dirname21(item.path)),patterns}},ConfigSelectorComponent=class extends Container{get focused(){return this._focused}set focused(value){this._focused=value,this.resourceList.focused=value}constructor(resolvedPaths,settingsManager,cwd,agentDir,onClose,onExit,requestRender,terminalHeight,writeScope="global",projectModeAvailable=!0){super(),this._focused=!1,this.writeScope=writeScope;let groupsByScope={global:buildGroups(resolvedPaths.global,agentDir),project:buildGroups(resolvedPaths.project,agentDir)};this.addChild(new Spacer(1)),this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.header=new ConfigSelectorHeader(this.writeScope,projectModeAvailable),this.addChild(this.header),this.addChild(new Spacer(1)),this.resourceList=new ResourceList(groupsByScope,settingsManager,cwd,agentDir,terminalHeight,this.writeScope),this.resourceList.onCancel=onClose,this.resourceList.onExit=onExit,this.resourceList.onToggle=()=>requestRender(),projectModeAvailable&&(this.resourceList.onSwitchMode=()=>{this.switchWriteScope(),requestRender()}),this.addChild(this.resourceList),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}switchWriteScope(){this.writeScope=this.writeScope==="global"?"project":"global",this.header.setWriteScope(this.writeScope),this.resourceList.setWriteScope(this.writeScope)}getResourceList(){return this.resourceList}};async function selectConfig(options){return initTheme(options.settingsManager.getTheme(),!0),new Promise(resolve18=>{let ui=new TuiMainScreen(new ProcessTerminal,options.settingsManager.getShowHardwareCursor(),options.agentDir);ui.setClearOnShrink(options.settingsManager.getClearOnShrink());let resolved=!1,selector=new ConfigSelectorComponent(options.resolvedPaths,options.settingsManager,options.cwd,options.agentDir,()=>{resolved||(resolved=!0,ui.stop(),stopThemeWatcher(),resolve18())},()=>{ui.stop(),stopThemeWatcher(),process.exit(0)},()=>ui.requestRender(),ui.terminal.rows,options.writeScope,options.projectModeAvailable);ui.addChild(selector),ui.setFocus(selector.getResourceList()),ui.start()})}import{randomUUID as randomUUID11}from"node:crypto";import{copyFileSync as copyFileSync2,existsSync as existsSync23,mkdirSync as mkdirSync11,renameSync as renameSync3,rmSync as rmSync7}from"node:fs";import{basename as basename14,dirname as dirname22,join as join33,relative as relative11,resolve as resolve16,toNamespacedPath}from"node:path";var QUARANTINE_DIR_NAME=".pi-native-quarantine";function normalizePath2(path10){return toNamespacedPath(resolve16(path10))}function getQuarantineRoot(packageDir){let current=resolve16(packageDir);for(;;){if(basename14(current).toLowerCase()==="node_modules")return join33(current,QUARANTINE_DIR_NAME);let parent=dirname22(current);if(parent===current)return;current=parent}}function getLoadedSharedObjectsInPackageDir(packageDir){let sharedObjects=process.report.getReport().sharedObjects;if(!Array.isArray(sharedObjects))return[];let root=normalizePath2(packageDir).toLowerCase(),seen=new Set,loadedFiles=[];for(let value of sharedObjects){if(typeof value!="string")continue;let filePath=normalizePath2(value),comparisonPath=filePath.toLowerCase();getCwdRelativePath(comparisonPath,root)===void 0||seen.has(comparisonPath)||(seen.add(comparisonPath),loadedFiles.push(filePath))}return loadedFiles}function cleanupWindowsSelfUpdateQuarantine(packageDir){let quarantineRoot=getQuarantineRoot(packageDir);if(quarantineRoot)try{rmSync7(quarantineRoot,{recursive:!0,force:!0})}catch{}}function quarantineWindowsNativeDependencies(packageDir){let resolvedPackageDir=normalizePath2(packageDir),quarantineRoot=getQuarantineRoot(resolvedPackageDir);if(!quarantineRoot)return;let loadedFiles=getLoadedSharedObjectsInPackageDir(resolvedPackageDir);if(loadedFiles.length===0)return;let quarantineRunDir=join33(quarantineRoot,`${Date.now()}-${process.pid}-${randomUUID11()}`);for(let loadedFile of loadedFiles){if(!existsSync23(loadedFile))continue;let quarantinePath=join33(quarantineRunDir,relative11(resolvedPackageDir,loadedFile));mkdirSync11(dirname22(quarantinePath),{recursive:!0}),renameSync3(loadedFile,quarantinePath),copyFileSync2(quarantinePath,loadedFile)}}var DEFAULT_INSTALLER_API_BASE="https://pi.dev/api/installer/releases",MANAGED_INSTALL_MARKER="managed-install.json",MANAGED_RELEASE_VERSION_RE=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function getActiveManagedInstallRoot(){let configuredRoot=process.env.PI_MANAGED_INSTALL_ROOT?.trim();if(!configuredRoot)return;let managedRoot=resolve17(configuredRoot),releasesDir=canonicalizePath(join34(managedRoot,"releases"));if(getCwdRelativePath(canonicalizePath(getPackageDir()),releasesDir)===void 0)return;let markerPath=join34(managedRoot,MANAGED_INSTALL_MARKER);try{let marker=JSON.parse(stripBom(readFileSync21(markerPath,"utf8")));if(marker.kind!=="pi-managed-install"||marker.schemaVersion!==1||marker.layout!=="releases-v1")throw new Error}catch{throw new Error(`Managed install marker is missing or invalid: ${markerPath}`)}return managedRoot}async function fetchInstallerArtifact(url,label){let response=await fetch(url,{headers:{"User-Agent":getPiUserAgent(VERSION)}});if(!response.ok)throw new Error(`Could not download managed installer ${label} from ${url}: HTTP ${response.status}`);return await response.text()}async function runManagedNpmCi(stageDir){let args=["ci","--ignore-scripts","--omit=dev","--include=optional","--no-fund","--no-audit","--loglevel=error","--progress=false"],code=await waitForChildProcess(spawnProcess("npm",args,{cwd:stageDir,stdio:"inherit"}));if(code!==0)throw new Error(`npm ${args.join(" ")} exited with code ${code??"unknown"}`)}function verifyManagedRelease(releaseDir,expectedVersion){let binPath=join34(releaseDir,"node_modules",".bin",process.platform==="win32"?`${APP_NAME}.cmd`:APP_NAME),result2=spawnProcessSync(binPath,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(result2.error||result2.status!==0){let reason=result2.error?.message||result2.stderr.trim()||`exit code ${result2.status??"unknown"}`;throw new Error(`Could not verify managed Pi ${expectedVersion}: ${reason}`)}let installedVersion=result2.stdout.trim();if(installedVersion!==expectedVersion)throw new Error(`Managed Pi smoke test returned version ${installedVersion}; expected ${expectedVersion}.`)}function activateManagedRelease(managedRoot,version2){let currentPath=join34(managedRoot,"current-version"),temporaryPath=join34(managedRoot,`current-version.tmp.${process.pid}-${Date.now()}`);try{writeFileSync11(temporaryPath,`${version2}
1425
+ `)}`),new Error(errorMessage7)}return json}import{existsSync as existsSync24,mkdirSync as mkdirSync12,mkdtempSync as mkdtempSync3,readdirSync as readdirSync9,readFileSync as readFileSync21,renameSync as renameSync4,rmSync as rmSync8,writeFileSync as writeFileSync11}from"node:fs";import{join as join34,resolve as resolve17}from"node:path";var import_proper_lockfile3=__toESM(require_proper_lockfile(),1);import{basename as basename13,dirname as dirname21,join as join32,relative as relative10}from"node:path";var PACKAGE_FILTER_KEYS=["extensions","skills","prompts","themes"];function collapsePackageEntry(packages,index3,scope){let pkg=packages[index3];typeof pkg!="object"||pkg.skillInvocationOverrides!==void 0||PACKAGE_FILTER_KEYS.some(key=>pkg[key]!==void 0)||(pkg.autoload!==!1?packages[index3]=pkg.source:scope==="project"&&packages.splice(index3,1))}function stateInvocation(state2){return state2==="on"?"model-and-user":state2==="user-only"?"user-only":void 0}var SkillRows=class{constructor(host,settingsManager,packageManager){this.host=host,this.settingsManager=settingsManager,this.invocation=new SkillInvocationPolicy(settingsManager,packageManager)}toggle(item){if(this.host.writeScope()==="project"){let state2=this.nextProjectState(item);return this.setProjectState(item,state2)?state2==="inherit"?this.inheritedState(item)!=="off":state2!=="off":void 0}let current=this.effectiveState(item),next=current==="on"?"user-only":current==="user-only"?"off":"on";return this.setGlobalState(item,next),next!=="off"}checkbox(item){if(this.host.writeScope()==="project"){let state3=this.projectState(item);if(state3==="on")return theme.fg("success","[+]");if(state3==="user-only")return theme.fg("accent","[u]");if(state3==="off")return theme.fg("warning","[-]");if(state3==="load"){let effectiveState=this.effectiveState(item);return effectiveState==="user-only"?theme.fg("accent","[u]"):effectiveState==="off"?theme.fg("warning","[-]"):theme.fg("success","[+]")}let inheritedState=this.inheritedState(item);return theme.fg("dim",inheritedState==="on"?"[x]":inheritedState==="user-only"?"[u]":"[ ]")}let state2=this.effectiveState(item);return state2==="on"?theme.fg("success","[x]"):state2==="user-only"?theme.fg("accent","[u]"):theme.fg("dim","[ ]")}suffix(item){if(this.host.writeScope()==="project"){let state2=this.projectState(item);return state2==="on"?theme.fg("muted"," project on"):state2==="user-only"?theme.fg("muted"," project user only"):state2==="off"?theme.fg("muted"," project off"):state2==="load"?theme.fg("muted"," project load"):this.host.isInheritedGlobalItem(item)?theme.fg("dim"," inherited global"):""}return this.effectiveState(item)==="user-only"?theme.fg("accent"," user only"):""}dimmed(item){return this.host.writeScope()==="project"&&this.host.isInheritedGlobalItem(item)&&this.projectState(item)==="inherit"}effectiveState(item){let scopes=this.host.writeScope()==="project"?["project","user"]:["user"];return resolveSkillEffectiveState({enabled:item.enabled,invocationOverride:this.invocation.resolve(item.path,item.metadata,scopes),frontmatterDisableModelInvocation:item.frontmatterDisableModelInvocation})}inheritedState(item){return resolveSkillEffectiveState({enabled:this.host.getInheritedEnabled(item),invocationOverride:this.invocation.resolve(item.path,item.metadata,["user"]),frontmatterDisableModelInvocation:item.frontmatterDisableModelInvocation})}nextProjectState(item){let states=["on","user-only","off"],inheritedIndex=states.indexOf(this.inheritedState(item)),sequence=[...states.slice(inheritedIndex+1),...states.slice(0,inheritedIndex+1)],current=this.projectState(item);if(current==="inherit")return sequence[0];if(current==="load")return"inherit";let currentIndex=sequence.indexOf(current);return sequence[currentIndex+1]??"inherit"}projectState(item){if(this.host.writeScope()!=="project")return"inherit";let loadState=this.host.getProjectOverrideState(item);if(loadState==="unload")return"off";let layer=this.invocation.layer("project",item.metadata),invocation=layer?matchInvocation(layer,item.path).override:void 0;return invocation?invocation==="user-only"?"user-only":"on":loadState}setGlobalState(item,state2){this.host.setGlobalEnabled(item,state2!=="off"),this.setInvocationOverride(item,"user",stateInvocation(state2))}setProjectState(item,state2){let loadState=state2==="inherit"?"inherit":state2==="off"?"unload":"load";return this.host.setProjectResourceOverride(item,loadState)?(this.setInvocationOverride(item,"project",stateInvocation(state2)),!0):!1}setInvocationOverride(item,scope,override){let layer=this.invocation.layer(scope,item.metadata);if(!layer)return;let overrides=withInvocation(layer,item.path,override);if(item.metadata.origin==="top-level"){scope==="project"?this.settingsManager.setProjectSkillInvocationOverrides(overrides):this.settingsManager.setSkillInvocationOverrides(overrides);return}let packages=[...(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]],pkgIndex=this.invocation.findPackage(scope,item.metadata),current=packages[pkgIndex];current===void 0||typeof current=="string"&&!overrides||(packages[pkgIndex]={...typeof current=="string"?{source:current}:current,skillInvocationOverrides:overrides},collapsePackageEntry(packages,pkgIndex,scope),scope==="project"?this.settingsManager.setProjectPackages(packages):this.settingsManager.setPackages(packages))}};function hasResourcePattern(patterns,pattern){let normalized=pattern.replace(/\\/g,"/");for(let candidate of patterns)if(candidate.replace(/\\/g,"/")===normalized)return!0;return!1}var RESOURCE_TYPE_LABELS={extensions:"Extensions",skills:"Skills",prompts:"Prompts",themes:"Themes"};function formatBaseDir(baseDir){let displayPath2=shortenHomePath(baseDir).replace(/\\/g,"/");return displayPath2.endsWith("/")?displayPath2:`${displayPath2}/`}function getGroupLabel(metadata,agentDir){return metadata.origin==="package"?`${metadata.source} (${metadata.scope})`:metadata.source==="builtin"?metadata.scope==="user"?"Built-in":"Built-in (project override)":metadata.source==="auto"?metadata.baseDir?metadata.scope==="user"?`User (${formatBaseDir(metadata.baseDir)})`:`Project (${formatBaseDir(metadata.baseDir)})`:metadata.scope==="user"?`User (${formatBaseDir(agentDir)})`:`Project (${CONFIG_DIR_NAME}/)`:metadata.scope==="user"?"User settings":"Project settings"}function buildGroups(resolved,agentDir){let groupMap=new Map,addToGroup=(resources,resourceType)=>{for(let res of resources){let{path:path10,enabled,metadata}=res,groupKey2=`${metadata.origin}:${metadata.scope}:${metadata.source}:${metadata.baseDir??""}`;groupMap.has(groupKey2)||groupMap.set(groupKey2,{key:groupKey2,label:getGroupLabel(metadata,agentDir),scope:metadata.scope,origin:metadata.origin,source:metadata.source,subgroups:[]});let group=groupMap.get(groupKey2),subgroupKey=`${groupKey2}:${resourceType}`,subgroup=group.subgroups.find(sg=>sg.type===resourceType);subgroup||(subgroup={type:resourceType,label:RESOURCE_TYPE_LABELS[resourceType],items:[]},group.subgroups.push(subgroup));let fileName=basename13(path10),parentFolder=basename13(dirname21(path10)),displayName;metadata.source==="builtin"?displayName=path10.slice(BUILTIN_PATH_PREFIX.length):resourceType==="extensions"&&parentFolder!=="extensions"?displayName=`${parentFolder}/${fileName}`:resourceType==="skills"&&fileName==="SKILL.md"?displayName=parentFolder:displayName=fileName,subgroup.items.push({path:path10,enabled,metadata,resourceType,displayName,groupKey:groupKey2,subgroupKey,frontmatterDisableModelInvocation:resourceType==="skills"?readSkillDisableModelInvocation(path10):void 0})}};addToGroup(resolved.extensions,"extensions"),addToGroup(resolved.skills,"skills"),addToGroup(resolved.prompts,"prompts"),addToGroup(resolved.themes,"themes");let groups=Array.from(groupMap.values());groups.sort((a,b)=>a.origin!==b.origin?a.origin==="package"?-1:1:a.scope!==b.scope?a.scope==="user"?-1:1:a.source.localeCompare(b.source));let typeOrder={extensions:0,skills:1,prompts:2,themes:3};for(let group of groups){group.subgroups.sort((a,b)=>typeOrder[a.type]-typeOrder[b.type]);for(let subgroup of group.subgroups)subgroup.items.sort((a,b)=>a.displayName.localeCompare(b.displayName))}return groups}var ConfigSelectorHeader=class{constructor(writeScope,projectModeAvailable){this.writeScope=writeScope,this.projectModeAvailable=projectModeAvailable}setWriteScope(writeScope){this.writeScope=writeScope}invalidate(){}render(width){let title=theme.bold(this.writeScope==="project"?"Project Local Resources":"Global Resources"),sep12=theme.fg("muted"," \xB7 "),switchHint=this.projectModeAvailable?keyHint("tui.input.tab","switch mode")+sep12:"",actionHint=rawKeyHint("space","change"),hint=switchHint+actionHint+sep12+rawKeyHint("esc","close"),spacing=Math.max(1,width-visibleWidth(title)-visibleWidth(hint)),scopeHint=this.writeScope==="project"?theme.fg("muted",`${CONFIG_DIR_NAME}/settings.json \xB7 inherited global resources are dimmed`):theme.fg("muted",`~/${CONFIG_DIR_NAME}/agent/settings.json`);return[truncateToWidth(`${title}${" ".repeat(spacing)}${hint}`,width,""),truncateToWidth(scopeHint,width,"")]}},ResourceList=class{get focused(){return this._focused}set focused(value){this._focused=value,this.searchInput.focused=value}constructor(groupsByScope,settingsManager,cwd,agentDir,terminalHeight,writeScope="global"){this.flatItems=[],this.filteredItems=[],this.selectedIndex=0,this._focused=!1,this.groupsByScope=groupsByScope,this.settingsManager=settingsManager,this.cwd=cwd,this.agentDir=agentDir,this.writeScope=writeScope,this.inheritedEnabledByKey=this.buildInheritedEnabledMap(groupsByScope.global),this.packageManager=new DefaultPackageManager({cwd,agentDir,settingsManager}),this.skills=new SkillRows({writeScope:()=>this.writeScope,getProjectOverrideState:item=>this.getProjectOverrideState(item),setProjectResourceOverride:(item,state2)=>this.setProjectResourceOverride(item,state2),setGlobalEnabled:(item,enabled)=>item.metadata.origin==="top-level"?this.toggleTopLevelResource(item,enabled):this.togglePackageResource(item,enabled),getInheritedEnabled:item=>this.getInheritedEnabled(item),isInheritedGlobalItem:item=>this.isInheritedGlobalItem(item)},settingsManager,this.packageManager),this.searchInput=new Input;let chrome=8;this.maxVisible=Math.max(5,(terminalHeight??24)-chrome),this.buildFlatList(),this.filteredItems=[...this.flatItems]}setWriteScope(writeScope){this.writeScope=writeScope,this.buildFlatList(),this.filterItems(this.searchInput.getValue())}get groups(){return this.groupsByScope[this.writeScope]}buildInheritedEnabledMap(groups){let result2=new Map;for(let group of groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)result2.set(this.getResourceItemKey(item),item.enabled);return result2}buildFlatList(){this.flatItems=[];for(let group of this.groups){this.flatItems.push({type:"group",group});for(let subgroup of group.subgroups){this.flatItems.push({type:"subgroup",subgroup,group});for(let item of subgroup.items)this.flatItems.push({type:"item",item})}}this.selectedIndex=this.flatItems.findIndex(e=>e.type==="item"),this.selectedIndex<0&&(this.selectedIndex=0)}findNextItem(fromIndex,direction){let idx=fromIndex+direction;for(;idx>=0&&idx<this.filteredItems.length;){if(this.filteredItems[idx].type==="item")return idx;idx+=direction}return fromIndex}filterItems(query){if(!query.trim()){this.filteredItems=[...this.flatItems],this.selectFirstItem();return}let lowerQuery=query.toLowerCase(),matchingItems=new Set,matchingSubgroups=new Set,matchingGroups=new Set;for(let entry of this.flatItems)if(entry.type==="item"){let item=entry.item;(item.displayName.toLowerCase().includes(lowerQuery)||item.resourceType.toLowerCase().includes(lowerQuery)||item.path.toLowerCase().includes(lowerQuery))&&matchingItems.add(item)}for(let group of this.groups)for(let subgroup of group.subgroups)for(let item of subgroup.items)matchingItems.has(item)&&(matchingSubgroups.add(subgroup),matchingGroups.add(group));this.filteredItems=[];for(let entry of this.flatItems)entry.type==="group"&&matchingGroups.has(entry.group)?this.filteredItems.push(entry):entry.type==="subgroup"&&matchingSubgroups.has(entry.subgroup)?this.filteredItems.push(entry):entry.type==="item"&&matchingItems.has(entry.item)&&this.filteredItems.push(entry);this.selectFirstItem()}selectFirstItem(){let firstItemIndex=this.filteredItems.findIndex(e=>e.type==="item");this.selectedIndex=firstItemIndex>=0?firstItemIndex:0}updateItem(item,enabled){item.enabled=enabled,this.writeScope==="global"&&this.inheritedEnabledByKey.set(this.getResourceItemKey(item),enabled);for(let group of this.groups)for(let subgroup of group.subgroups){let found=subgroup.items.find(i=>i.path===item.path&&i.resourceType===item.resourceType);if(found){found.enabled=enabled;return}}}invalidate(){}render(width){let lines=[];if(lines.push(...this.searchInput.render(width)),lines.push(""),this.filteredItems.length===0)return lines.push(theme.fg("muted"," No resources found")),lines;let startIndex=Math.max(0,Math.min(this.selectedIndex-Math.floor(this.maxVisible/2),this.filteredItems.length-this.maxVisible)),endIndex2=Math.min(startIndex+this.maxVisible,this.filteredItems.length);for(let i=startIndex;i<endIndex2;i++){let entry=this.filteredItems[i],isSelected2=i===this.selectedIndex;if(entry.type==="group"){let inherited=this.writeScope==="project"&&entry.group.scope==="user",label=theme.bold(`${entry.group.label}${inherited?" \xB7 inherited global":""}`),groupLine=theme.fg(inherited?"dim":"accent",label);lines.push(truncateToWidth(` ${groupLine}`,width,""))}else if(entry.type==="subgroup"){let color=this.writeScope==="project"&&entry.group.scope==="user"?"dim":"muted",subgroupLine=theme.fg(color,entry.subgroup.label);lines.push(truncateToWidth(` ${subgroupLine}`,width,""))}else{let item=entry.item,cursor=isSelected2?"> ":" ",dimmed=this.isDimmedItem(item),nameText=isSelected2&&!dimmed?theme.bold(item.displayName):item.displayName,name=dimmed?theme.fg("dim",nameText):nameText,prefix=`${cursor} ${this.renderCheckbox(item)} `,suffix=this.getItemSuffix(item),nameWidth=Math.max(1,width-visibleWidth(prefix)-visibleWidth(suffix)),renderedName=truncateToWidth(name,nameWidth,"...");lines.push(truncateToWidth(`${prefix}${renderedName}${suffix}`,width,"..."))}}if(startIndex>0||endIndex2<this.filteredItems.length){let itemCount=this.filteredItems.filter(e=>e.type==="item").length,currentItemIndex=this.filteredItems.slice(0,this.selectedIndex).filter(e=>e.type==="item").length+1;lines.push(theme.fg("dim",` (${currentItemIndex}/${itemCount})`))}return lines}handleInput(data){let kb=getKeybindings();if(kb.matches(data,"tui.select.up")){this.selectedIndex=this.findNextItem(this.selectedIndex,-1);return}if(kb.matches(data,"tui.select.down")){this.selectedIndex=this.findNextItem(this.selectedIndex,1);return}if(kb.matches(data,"tui.select.pageUp")){let target=Math.max(0,this.selectedIndex-this.maxVisible);for(;target<this.filteredItems.length&&this.filteredItems[target].type!=="item";)target++;target<this.filteredItems.length&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.pageDown")){let target=Math.min(this.filteredItems.length-1,this.selectedIndex+this.maxVisible);for(;target>=0&&this.filteredItems[target].type!=="item";)target--;target>=0&&(this.selectedIndex=target);return}if(kb.matches(data,"tui.select.cancel")){this.onCancel?.();return}if(matchesKey(data,"ctrl+c")){this.onExit?.();return}if(kb.matches(data,"tui.input.tab")){this.onSwitchMode?.();return}if(data===" "||kb.matches(data,"tui.select.confirm")){let entry=this.filteredItems[this.selectedIndex];if(entry?.type==="item"&&(this.writeScope==="project"||this.getItemScope(entry.item)==="user")){let newEnabled=this.toggleResource(entry.item);newEnabled!==void 0&&(this.updateItem(entry.item,newEnabled),this.onToggle?.(entry.item,newEnabled))}return}this.searchInput.handleInput(data),this.filterItems(this.searchInput.getValue())}toggleResource(item){if(item.resourceType==="skills")return this.skills.toggle(item);if(this.writeScope==="project"){let state2=this.getNextOverrideState(item);return this.setProjectResourceOverride(item,state2)?state2==="inherit"?this.getInheritedEnabled(item):state2==="load":void 0}let enabled=!item.enabled;return item.metadata.origin==="top-level"?this.toggleTopLevelResource(item,enabled):this.togglePackageResource(item,enabled),enabled}toggleTopLevelResource(item,enabled){let scope=item.metadata.scope,settings=scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings(),arrayKey=item.resourceType,current=settings[arrayKey]??[],pattern=this.getResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),scope==="project"?arrayKey==="extensions"?this.settingsManager.setProjectExtensionPaths(updated):arrayKey==="skills"?this.settingsManager.setProjectSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setProjectThemePaths(updated):arrayKey==="extensions"?this.settingsManager.setExtensionPaths(updated):arrayKey==="skills"?this.settingsManager.setSkillPaths(updated):arrayKey==="prompts"?this.settingsManager.setPromptTemplatePaths(updated):arrayKey==="themes"&&this.settingsManager.setThemePaths(updated)}togglePackageResource(item,enabled){let scope=item.metadata.scope,packages=[...(scope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]],pkgIndex=packages.findIndex(pkg2=>(typeof pkg2=="string"?pkg2:pkg2.source)===item.metadata.source);if(pkgIndex===-1)return;let pkg=packages[pkgIndex];typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let arrayKey=item.resourceType,current=pkg[arrayKey]??[],pattern=this.getPackageResourcePattern(item),disablePattern=`-${pattern}`,enablePattern=`+${pattern}`,updated=current.filter(p=>(p.startsWith("!")||p.startsWith("+")||p.startsWith("-")?p.slice(1):p)!==pattern);enabled?updated.push(enablePattern):updated.push(disablePattern),pkg[arrayKey]=updated.length>0?updated:void 0,["extensions","skills","prompts","themes"].some(k=>pkg[k]!==void 0)||(packages[pkgIndex]=pkg.source),scope==="project"?this.settingsManager.setProjectPackages(packages):this.settingsManager.setPackages(packages)}renderCheckbox(item){if(item.resourceType==="skills")return this.skills.checkbox(item);if(this.writeScope==="project"){let state2=this.getProjectOverrideState(item);return state2==="load"?theme.fg("success","[+]"):state2==="unload"?theme.fg("warning","[-]"):theme.fg("dim",item.enabled?"[x]":"[ ]")}return item.enabled?theme.fg("success","[x]"):theme.fg("dim","[ ]")}getItemSuffix(item){if(item.resourceType==="skills")return this.skills.suffix(item);if(this.writeScope!=="project")return"";let state2=this.getProjectOverrideState(item);return state2==="load"?theme.fg("muted"," project load"):state2==="unload"?theme.fg("muted"," project unload"):this.isInheritedGlobalItem(item)?theme.fg("dim"," inherited global"):""}isDimmedItem(item){return item.resourceType==="skills"?this.skills.dimmed(item):this.writeScope==="project"&&this.isInheritedGlobalItem(item)&&this.getProjectOverrideState(item)==="inherit"}setProjectResourceOverride(item,state2){return item.metadata.origin==="top-level"?this.setProjectTopLevelOverride(item,state2):this.setProjectPackageOverride(item,state2)}setProjectTopLevelOverride(item,state2){let current=this.settingsManager.getProjectSettings()[item.resourceType]??[],pattern=this.isInheritedGlobalItem(item)?item.path:this.getResourcePatternForScope(item,"project"),patterns=this.getTopLevelOverridePatterns(item,"project"),updated=current.filter(entry=>{let target=this.getPatternEntryTarget(entry);return(entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-"))&&patterns.has(target)?!1:!(state2==="inherit"&&this.isInheritedGlobalItem(item)&&target===pattern)});return state2!=="inherit"&&(this.isInheritedGlobalItem(item)&&item.metadata.source!=="builtin"&&!updated.includes(pattern)&&updated.push(pattern),updated.push(`${state2==="load"?"+":"-"}${pattern}`)),this.setProjectTopLevelPaths(item.resourceType,updated),!0}setProjectTopLevelPaths(key,paths){key==="extensions"?this.settingsManager.setProjectExtensionPaths(paths):key==="skills"?this.settingsManager.setProjectSkillPaths(paths):key==="prompts"?this.settingsManager.setProjectPromptTemplatePaths(paths):this.settingsManager.setProjectThemePaths(paths)}setProjectPackageOverride(item,state2){let packages=[...this.settingsManager.getProjectSettings().packages??[]],pkgIndex=packages.findIndex(pkg2=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg2=="string"?pkg2:pkg2.source,"project"));if(pkgIndex===-1){if(state2==="inherit")return!1;packages.push(this.createPackageOverrideSource(item)),pkgIndex=packages.length-1}let pkg=packages[pkgIndex];if(pkg===void 0)return!1;typeof pkg=="string"&&(pkg={source:pkg},packages[pkgIndex]=pkg);let pattern=this.getPackageResourcePattern(item),updated=(pkg[item.resourceType]??[]).filter(entry=>this.getPatternEntryTarget(entry)!==pattern);return state2!=="inherit"&&updated.push(`${state2==="load"?"+":"-"}${pattern}`),pkg[item.resourceType]=updated.length>0?updated:void 0,collapsePackageEntry(packages,pkgIndex,"project"),this.settingsManager.setProjectPackages(packages),!0}getNextOverrideState(item){let state2=this.getProjectOverrideState(item),inheritedEnabled=this.getInheritedEnabled(item);return state2==="inherit"?inheritedEnabled?"unload":"load":state2==="unload"?inheritedEnabled?"load":"inherit":inheritedEnabled?"inherit":"unload"}getProjectOverrideState(item){if(this.writeScope!=="project")return"inherit";if(item.metadata.origin==="top-level")return this.getOverrideStateFromEntries(this.settingsManager.getProjectSettings()[item.resourceType]??[],this.getTopLevelOverridePatterns(item,"project"),!1);let pkg=this.findMatchingPackageSource(item,"project");if(typeof pkg!="object")return"inherit";let entries=pkg[item.resourceType];return entries===void 0?"inherit":this.getOverrideStateFromEntries(entries,this.getPackageOverridePatterns(item),pkg.autoload!==!1)}getOverrideStateFromEntries(entries,patterns,emptyArrayIsUnload){if(entries.length===0&&emptyArrayIsUnload)return"unload";let state2="inherit";for(let entry of entries)hasResourcePattern(patterns,this.getPatternEntryTarget(entry))&&(entry.startsWith("!")||entry.startsWith("-")?state2="unload":state2="load");return state2}getInheritedEnabled(item){return this.inheritedEnabledByKey.get(this.getResourceItemKey(item))??(this.getItemScope(item)==="user"?item.enabled:!0)}isInheritedGlobalItem(item){return this.getItemScope(item)==="user"||this.inheritedEnabledByKey.has(this.getResourceItemKey(item))}getTopLevelOverridePatterns(item,scope){let baseDir=this.getTopLevelBaseDir(scope),patterns=new Set([this.getResourcePatternForScope(item,scope),item.path,relative10(baseDir,item.path)]);if(item.metadata.baseDir&&patterns.add(relative10(item.metadata.baseDir,item.path)),item.resourceType==="skills"&&basename13(item.path)==="SKILL.md"){let parentDir=dirname21(item.path);patterns.add(parentDir),patterns.add(relative10(baseDir,parentDir)),item.metadata.baseDir&&patterns.add(relative10(item.metadata.baseDir,parentDir))}return patterns}getResourcePatternForScope(item,scope){let sourceScope=this.getItemScope(item);if(scope!==sourceScope||item.metadata.source==="builtin")return item.path;let baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(sourceScope);return relative10(baseDir,item.path)}createPackageOverrideSource(item){let source=item.metadata.source;if(!isLocalPath(source))return{source,autoload:!1};let sourcePath=resolvePath(source,this.getTopLevelBaseDir(this.getItemScope(item)),{trim:!0});return{source:relative10(this.getTopLevelBaseDir("project"),sourcePath)||".",autoload:!1}}packageSourceStringMatches(leftSource,leftScope,rightSource,rightScope){return this.packageManager.getPackageIdentity(leftSource,leftScope)===this.packageManager.getPackageIdentity(rightSource,rightScope)}findMatchingPackageSource(item,targetScope){return((targetScope==="project"?this.settingsManager.getProjectSettings():this.settingsManager.getGlobalSettings()).packages??[]).find(pkg=>this.packageSourceStringMatches(item.metadata.source,this.getItemScope(item),typeof pkg=="string"?pkg:pkg.source,targetScope))}getPatternEntryTarget(entry){return entry.startsWith("!")||entry.startsWith("+")||entry.startsWith("-")?entry.slice(1):entry}getResourceItemKey(item){return`${item.resourceType}:${getResourcePathKey(item.path)}`}getItemScope(item){return item.metadata.scope==="project"?"project":"user"}getTopLevelBaseDir(scope){return scope==="project"?join32(this.cwd,CONFIG_DIR_NAME):this.agentDir}getResourcePattern(item){if(item.metadata.source==="builtin")return item.path;let scope=item.metadata.scope,baseDir=item.metadata.baseDir??this.getTopLevelBaseDir(scope);return relative10(baseDir,item.path)}getPackageResourcePattern(item){let baseDir=item.metadata.baseDir??dirname21(item.path);return relative10(baseDir,item.path)}getPackageOverridePatterns(item){let pattern=this.getPackageResourcePattern(item);if(item.resourceType!=="skills")return new Set([pattern]);let patterns=new Set([pattern,item.path]);return basename13(item.path)==="SKILL.md"&&patterns.add(dirname21(pattern)).add(dirname21(item.path)),patterns}},ConfigSelectorComponent=class extends Container{get focused(){return this._focused}set focused(value){this._focused=value,this.resourceList.focused=value}constructor(resolvedPaths,settingsManager,cwd,agentDir,onClose,onExit,requestRender,terminalHeight,writeScope="global",projectModeAvailable=!0){super(),this._focused=!1,this.writeScope=writeScope;let groupsByScope={global:buildGroups(resolvedPaths.global,agentDir),project:buildGroups(resolvedPaths.project,agentDir)};this.addChild(new Spacer(1)),this.addChild(new DynamicBorder),this.addChild(new Spacer(1)),this.header=new ConfigSelectorHeader(this.writeScope,projectModeAvailable),this.addChild(this.header),this.addChild(new Spacer(1)),this.resourceList=new ResourceList(groupsByScope,settingsManager,cwd,agentDir,terminalHeight,this.writeScope),this.resourceList.onCancel=onClose,this.resourceList.onExit=onExit,this.resourceList.onToggle=()=>requestRender(),projectModeAvailable&&(this.resourceList.onSwitchMode=()=>{this.switchWriteScope(),requestRender()}),this.addChild(this.resourceList),this.addChild(new Spacer(1)),this.addChild(new DynamicBorder)}switchWriteScope(){this.writeScope=this.writeScope==="global"?"project":"global",this.header.setWriteScope(this.writeScope),this.resourceList.setWriteScope(this.writeScope)}getResourceList(){return this.resourceList}};async function selectConfig(options){return initTheme(options.settingsManager.getTheme(),!0),new Promise(resolve18=>{let ui=new TuiMainScreen(new ProcessTerminal,options.settingsManager.getShowHardwareCursor(),options.agentDir);ui.setClearOnShrink(options.settingsManager.getClearOnShrink());let resolved=!1,selector=new ConfigSelectorComponent(options.resolvedPaths,options.settingsManager,options.cwd,options.agentDir,()=>{resolved||(resolved=!0,ui.stop(),stopThemeWatcher(),resolve18())},()=>{ui.stop(),stopThemeWatcher(),process.exit(0)},()=>ui.requestRender(),ui.terminal.rows,options.writeScope,options.projectModeAvailable);ui.addChild(selector),ui.setFocus(selector.getResourceList()),ui.start()})}import{randomUUID as randomUUID11}from"node:crypto";import{copyFileSync as copyFileSync2,existsSync as existsSync23,mkdirSync as mkdirSync11,renameSync as renameSync3,rmSync as rmSync7}from"node:fs";import{basename as basename14,dirname as dirname22,join as join33,relative as relative11,resolve as resolve16,toNamespacedPath}from"node:path";var QUARANTINE_DIR_NAME=".pi-native-quarantine";function normalizePath2(path10){return toNamespacedPath(resolve16(path10))}function getQuarantineRoot(packageDir){let current=resolve16(packageDir);for(;;){if(basename14(current).toLowerCase()==="node_modules")return join33(current,QUARANTINE_DIR_NAME);let parent=dirname22(current);if(parent===current)return;current=parent}}function getLoadedSharedObjectsInPackageDir(packageDir){let sharedObjects=process.report.getReport().sharedObjects;if(!Array.isArray(sharedObjects))return[];let root=normalizePath2(packageDir).toLowerCase(),seen=new Set,loadedFiles=[];for(let value of sharedObjects){if(typeof value!="string")continue;let filePath=normalizePath2(value),comparisonPath=filePath.toLowerCase();getCwdRelativePath(comparisonPath,root)===void 0||seen.has(comparisonPath)||(seen.add(comparisonPath),loadedFiles.push(filePath))}return loadedFiles}function cleanupWindowsSelfUpdateQuarantine(packageDir){let quarantineRoot=getQuarantineRoot(packageDir);if(quarantineRoot)try{rmSync7(quarantineRoot,{recursive:!0,force:!0})}catch{}}function quarantineWindowsNativeDependencies(packageDir){let resolvedPackageDir=normalizePath2(packageDir),quarantineRoot=getQuarantineRoot(resolvedPackageDir);if(!quarantineRoot)return;let loadedFiles=getLoadedSharedObjectsInPackageDir(resolvedPackageDir);if(loadedFiles.length===0)return;let quarantineRunDir=join33(quarantineRoot,`${Date.now()}-${process.pid}-${randomUUID11()}`);for(let loadedFile of loadedFiles){if(!existsSync23(loadedFile))continue;let quarantinePath=join33(quarantineRunDir,relative11(resolvedPackageDir,loadedFile));mkdirSync11(dirname22(quarantinePath),{recursive:!0}),renameSync3(loadedFile,quarantinePath),copyFileSync2(quarantinePath,loadedFile)}}var DEFAULT_INSTALLER_API_BASE="https://pi.dev/api/installer/releases",MANAGED_INSTALL_MARKER="managed-install.json",MANAGED_RELEASE_VERSION_RE=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function getActiveManagedInstallRoot(){let configuredRoot=process.env.PI_MANAGED_INSTALL_ROOT?.trim();if(!configuredRoot)return;let managedRoot=resolve17(configuredRoot),releasesDir=canonicalizePath(join34(managedRoot,"releases"));if(getCwdRelativePath(canonicalizePath(getPackageDir()),releasesDir)===void 0)return;let markerPath=join34(managedRoot,MANAGED_INSTALL_MARKER);try{let marker2=JSON.parse(stripBom(readFileSync21(markerPath,"utf8")));if(marker2.kind!=="pi-managed-install"||marker2.schemaVersion!==1||marker2.layout!=="releases-v1")throw new Error}catch{throw new Error(`Managed install marker is missing or invalid: ${markerPath}`)}return managedRoot}async function fetchInstallerArtifact(url,label){let response=await fetch(url,{headers:{"User-Agent":getPiUserAgent(VERSION)}});if(!response.ok)throw new Error(`Could not download managed installer ${label} from ${url}: HTTP ${response.status}`);return await response.text()}async function runManagedNpmCi(stageDir){let args=["ci","--ignore-scripts","--omit=dev","--include=optional","--no-fund","--no-audit","--loglevel=error","--progress=false"],code=await waitForChildProcess(spawnProcess("npm",args,{cwd:stageDir,stdio:"inherit"}));if(code!==0)throw new Error(`npm ${args.join(" ")} exited with code ${code??"unknown"}`)}function verifyManagedRelease(releaseDir,expectedVersion){let binPath=join34(releaseDir,"node_modules",".bin",process.platform==="win32"?`${APP_NAME}.cmd`:APP_NAME),result2=spawnProcessSync(binPath,["--version"],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(result2.error||result2.status!==0){let reason=result2.error?.message||result2.stderr.trim()||`exit code ${result2.status??"unknown"}`;throw new Error(`Could not verify managed Pi ${expectedVersion}: ${reason}`)}let installedVersion=result2.stdout.trim();if(installedVersion!==expectedVersion)throw new Error(`Managed Pi smoke test returned version ${installedVersion}; expected ${expectedVersion}.`)}function activateManagedRelease(managedRoot,version2){let currentPath=join34(managedRoot,"current-version"),temporaryPath=join34(managedRoot,`current-version.tmp.${process.pid}-${Date.now()}`);try{writeFileSync11(temporaryPath,`${version2}
1426
1426
  `),renameSync4(temporaryPath,currentPath)}finally{rmSync8(temporaryPath,{force:!0})}}function pruneManagedReleases(managedRoot,activeVersion){let releasesRoot=join34(managedRoot,"releases"),entries;try{entries=readdirSync9(releasesRoot)}catch{return}for(let entry of entries)if(!(entry===activeVersion||entry===VERSION||!MANAGED_RELEASE_VERSION_RE.test(entry)))try{rmSync8(join34(releasesRoot,entry),{force:!0,recursive:!0})}catch{}}function cleanupManagedStaging(managedRoot){let stagingRoot=join34(managedRoot,"staging");try{for(let entry of readdirSync9(stagingRoot))entry.startsWith("update-")&&rmSync8(join34(stagingRoot,entry),{force:!0,recursive:!0})}catch{}}function cleanupManagedInstall(){let managedRoot;try{managedRoot=getActiveManagedInstallRoot()}catch{return}if(managedRoot)try{let releaseLock=import_proper_lockfile3.default.lockSync(join34(managedRoot,"update"),{realpath:!1});try{cleanupManagedStaging(managedRoot)}finally{releaseLock()}}catch{}}async function runManagedSelfUpdate(managedRoot,version2){if(!MANAGED_RELEASE_VERSION_RE.test(version2))throw new Error(`Invalid managed release version: ${version2}`);let releaseLock;try{releaseLock=await import_proper_lockfile3.default.lock(join34(managedRoot,"update"),{realpath:!1})}catch(error){throw error instanceof Error&&"code"in error&&error.code==="ELOCKED"?new Error("Another managed Pi update is already running."):error}let stageDir;try{cleanupManagedStaging(managedRoot);let releaseUrl=`${(process.env.PI_INSTALLER_API_BASE?.trim()||DEFAULT_INSTALLER_API_BASE).replace(/\/+$/,"")}/${encodeURIComponent(version2)}`,stagingRoot=join34(managedRoot,"staging"),releasesRoot=join34(managedRoot,"releases");mkdirSync12(releasesRoot,{recursive:!0});let releaseDir=join34(releasesRoot,version2);if(existsSync24(releaseDir)){verifyManagedRelease(releaseDir,version2),activateManagedRelease(managedRoot,version2),pruneManagedReleases(managedRoot,version2);return}mkdirSync12(stagingRoot,{recursive:!0}),stageDir=mkdtempSync3(join34(stagingRoot,"update-"));let[packageJsonContent,packageLockContent]=await Promise.all([fetchInstallerArtifact(`${releaseUrl}/package.json`,"package.json"),fetchInstallerArtifact(`${releaseUrl}/package-lock.json`,"package-lock.json")]);writeFileSync11(join34(stageDir,"package.json"),packageJsonContent),writeFileSync11(join34(stageDir,"package-lock.json"),packageLockContent),await runManagedNpmCi(stageDir),verifyManagedRelease(stageDir,version2),renameSync4(stageDir,releaseDir),activateManagedRelease(managedRoot,version2),pruneManagedReleases(managedRoot,version2)}finally{stageDir&&rmSync8(stageDir,{force:!0,recursive:!0}),await releaseLock()}}var SELF_UPDATE_NOTE_MARKDOWN_THEME={heading:text=>source_default.bold(source_default.yellow(text)),link:text=>source_default.cyan(text),linkUrl:text=>source_default.dim(text),code:text=>source_default.yellow(text),codeBlock:text=>source_default.dim(text),codeBlockBorder:text=>source_default.dim(text),quote:text=>source_default.dim(text),quoteBorder:text=>source_default.dim(text),hr:text=>source_default.dim(text),listBullet:text=>source_default.yellow(text),bold:text=>source_default.bold(text),italic:text=>source_default.italic(text),strikethrough:text=>source_default.strikethrough(text),underline:text=>source_default.underline(text)};function reportSettingsErrors(settingsManager,context){let errors=settingsManager.drainErrors();for(let{scope,error}of errors)console.error(source_default.yellow(`Warning (${context}, ${scope} settings): ${error.message}`)),error.stack&&console.error(source_default.dim(error.stack))}function getPackageCommandUsage(command){switch(command){case"install":return`${APP_NAME} install <source> [-l] [--approve|--no-approve]`;case"remove":return`${APP_NAME} remove <source> [-l] [--approve|--no-approve]`;case"update":return`${APP_NAME} update [source|self|pi] [--self|--extensions|--models|--all] [--extension <source>] [--approve|--no-approve] [--force]`;case"list":return`${APP_NAME} list [--approve|--no-approve]`}}var CONFIG_COMMAND_USAGE=`${APP_NAME} config [-l] [--approve|--no-approve]`;function printConfigCommandHelp(){console.log(`${source_default.bold("Usage:")}
1427
1427
  ${CONFIG_COMMAND_USAGE}
1428
1428