@code-yeongyu/senpi 2026.9.29-2 → 2026.9.29-3

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 (115) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/bundle/chunks/{anthropic-messages-OMTQOHSI.js → anthropic-messages-7WTVWELD.js} +1 -1
  3. package/dist/bundle/chunks/{app-server-command-ZC6A4C3L.js → app-server-command-5DSRGKFG.js} +1 -1
  4. package/dist/bundle/chunks/{azure-openai-responses-Z4FAFKPJ.js → azure-openai-responses-XVZ3FMH2.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-U2SAEU63.js → chunk-27C3ZSZG.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-YJUO37UX.js → chunk-2POUJCWM.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-4LVZQRDG.js → chunk-4VWWEMCJ.js} +1 -1
  8. package/dist/bundle/chunks/{chunk-36ACNYQR.js → chunk-7RVWDN5Z.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-YS72TY6S.js → chunk-CZNE6LIO.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-ILELKDDB.js → chunk-DWNYCJ43.js} +1 -1
  11. package/dist/bundle/chunks/{chunk-OMLHHPMZ.js → chunk-EB3GDOU4.js} +1 -1
  12. package/dist/bundle/chunks/{chunk-2HWLCW54.js → chunk-EQBN6TVJ.js} +1 -1
  13. package/dist/bundle/chunks/{chunk-E5F5SVZF.js → chunk-FUGMDU6B.js} +1 -1
  14. package/dist/bundle/chunks/{chunk-RSPHQOSG.js → chunk-GE32OHDE.js} +7 -7
  15. package/dist/bundle/chunks/chunk-GKR74EKE.js +3 -0
  16. package/dist/bundle/chunks/{chunk-UYV2UM6E.js → chunk-ILQTW6KB.js} +1 -1
  17. package/dist/bundle/chunks/{chunk-TH4XD7AJ.js → chunk-JEWB5XTL.js} +1 -1
  18. package/dist/bundle/chunks/{chunk-FAV4DX74.js → chunk-K2SHQNAA.js} +1 -1
  19. package/dist/bundle/chunks/{chunk-NVJUCNHP.js → chunk-K7B7NFOK.js} +1 -1
  20. package/dist/bundle/chunks/{chunk-TZMNXKL2.js → chunk-KO6GO5ZY.js} +1 -1
  21. package/dist/bundle/chunks/{chunk-5CGFVKUK.js → chunk-LB2B2Q4P.js} +1 -1
  22. package/dist/bundle/chunks/{chunk-77OBRAUG.js → chunk-M4AHRI5L.js} +1 -1
  23. package/dist/bundle/chunks/{chunk-SW4U2HHU.js → chunk-OVDACFW2.js} +1 -1
  24. package/dist/bundle/chunks/{chunk-BTRONX2A.js → chunk-RUOJQL6B.js} +1 -1
  25. package/dist/bundle/chunks/{chunk-ASAQQ6VM.js → chunk-SH6VUPE4.js} +1 -1
  26. package/dist/bundle/chunks/{chunk-TFW6SS3P.js → chunk-SNDTJL2H.js} +1 -1
  27. package/dist/bundle/chunks/{chunk-Y5A6TKBN.js → chunk-T3HGPHPP.js} +1 -1
  28. package/dist/bundle/chunks/{chunk-BPZ5KIOS.js → chunk-UK5TE7WR.js} +1 -1
  29. package/dist/bundle/chunks/{chunk-NDNZU2X7.js → chunk-UNTVGMGW.js} +3 -3
  30. package/dist/bundle/chunks/{chunk-BQGFWWDC.js → chunk-VLTMFAWQ.js} +1 -1
  31. package/dist/bundle/chunks/{chunk-XDZ5RSMX.js → chunk-W4AG5TN4.js} +1 -1
  32. package/dist/bundle/chunks/chunk-WCAKUCN3.js +14 -0
  33. package/dist/bundle/chunks/{chunk-UEWSEALS.js → chunk-WRPX2M5D.js} +1 -1
  34. package/dist/bundle/chunks/{chunk-DA4W77J7.js → chunk-XBGO2JZD.js} +1 -1
  35. package/dist/bundle/chunks/chunk-XVX4M3DZ.js +2 -0
  36. package/dist/bundle/chunks/chunk-YD32NXKZ.js +8 -0
  37. package/dist/bundle/chunks/chunk-YOPVJDSU.js +2 -0
  38. package/dist/bundle/chunks/cli-main-V3T5WOV6.js +3 -0
  39. package/dist/bundle/chunks/{google-generative-ai-NFSRK6V5.js → google-generative-ai-XO6BUQVD.js} +1 -1
  40. package/dist/bundle/chunks/{google-vertex-6YEVHEPI.js → google-vertex-SGNV6ZMK.js} +1 -1
  41. package/dist/bundle/chunks/{help-fast-path-RYMO5ODA.js → help-fast-path-AYPE26W2.js} +1 -1
  42. package/dist/bundle/chunks/{host-command-BU6XSX4H.js → host-command-ZTMADQIT.js} +1 -1
  43. package/dist/bundle/chunks/{host-lifecycle-22DRSTVI.js → host-lifecycle-FTH7WAQN.js} +1 -1
  44. package/dist/bundle/chunks/{interactive-host-runtime-P3FYZWSY.js → interactive-host-runtime-XDRXCEJ3.js} +1 -1
  45. package/dist/bundle/chunks/{interactive-mode-VCIOGSIZ.js → interactive-mode-6VFVZKKW.js} +1 -1
  46. package/dist/bundle/chunks/{list-tips-XXZ5PLE3.js → list-tips-ASETMEFS.js} +1 -1
  47. package/dist/bundle/chunks/{mistral-conversations-R5PTP4P3.js → mistral-conversations-TVJBIL35.js} +1 -1
  48. package/dist/bundle/chunks/{multi-session-host-PRY7CJLK.js → multi-session-host-5VFMTPY7.js} +1 -1
  49. package/dist/bundle/chunks/{native-loader-SU5SGTSW.js → native-loader-WM7NDPEO.js} +1 -1
  50. package/dist/bundle/chunks/{openai-codex-responses-6B2ZLWTN.js → openai-codex-responses-RUT66DHS.js} +1 -1
  51. package/dist/bundle/chunks/{openai-completions-5NTZZNVJ.js → openai-completions-THHRTH7B.js} +1 -1
  52. package/dist/bundle/chunks/{openai-responses-V4JEBGEX.js → openai-responses-ITED6XXB.js} +1 -1
  53. package/dist/bundle/chunks/{package-manager-cli-RQ2NJAJ3.js → package-manager-cli-RAQRCH5L.js} +3 -3
  54. package/dist/bundle/chunks/{rg-engine-XHGOVGVG.js → rg-engine-G2YTYL2T.js} +1 -1
  55. package/dist/bundle/chunks/{rotation-stream-YQLGLRCX.js → rotation-stream-4FQW6IX5.js} +1 -1
  56. package/dist/bundle/chunks/{rpc-mode-U2EQRVC3.js → rpc-mode-W5P5QMF7.js} +1 -1
  57. package/dist/bundle/chunks/{schedule-command-DXC3ECXT.js → schedule-command-EFQUSPN4.js} +1 -1
  58. package/dist/bundle/chunks/{session-picker-KTXLU6MQ.js → session-picker-FF2J4OQA.js} +1 -1
  59. package/dist/bundle/chunks/session-worker.js +188 -188
  60. package/dist/bundle/chunks/{state-store-5A2TZ4SG.js → state-store-IIQL55GC.js} +1 -1
  61. package/dist/bundle/cli.js +2 -1
  62. package/dist/bundle/index.js +1 -1
  63. package/dist/bundle/rpc-entry.js +1 -1
  64. package/dist/bundle/runtime-manifest.json +1 -0
  65. package/dist/cli.js +24 -4
  66. package/dist/cli.js.map +1 -1
  67. package/dist/config.d.ts +5 -0
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js +16 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/main.d.ts.map +1 -1
  72. package/dist/main.js +2 -2
  73. package/dist/main.js.map +1 -1
  74. package/dist/package-manager-cli.js +3 -3
  75. package/dist/package-manager-cli.js.map +1 -1
  76. package/dist/runtime-snapshot/enter.d.ts +17 -0
  77. package/dist/runtime-snapshot/enter.d.ts.map +1 -0
  78. package/dist/runtime-snapshot/enter.js +72 -0
  79. package/dist/runtime-snapshot/enter.js.map +1 -0
  80. package/dist/runtime-snapshot/layout.d.ts +15 -0
  81. package/dist/runtime-snapshot/layout.d.ts.map +1 -0
  82. package/dist/runtime-snapshot/layout.js +126 -0
  83. package/dist/runtime-snapshot/layout.js.map +1 -0
  84. package/dist/runtime-snapshot/marker.d.ts +13 -0
  85. package/dist/runtime-snapshot/marker.d.ts.map +1 -0
  86. package/dist/runtime-snapshot/marker.js +40 -0
  87. package/dist/runtime-snapshot/marker.js.map +1 -0
  88. package/dist/runtime-snapshot/registry.d.ts +14 -0
  89. package/dist/runtime-snapshot/registry.d.ts.map +1 -0
  90. package/dist/runtime-snapshot/registry.js +124 -0
  91. package/dist/runtime-snapshot/registry.js.map +1 -0
  92. package/dist/senpi +24 -4
  93. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  94. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  95. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  96. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.d.ts.map +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.js +2 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.js.map +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.d.ts +7 -0
  102. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.d.ts.map +1 -1
  103. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.js +21 -0
  104. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.js.map +1 -1
  105. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  106. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  107. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  108. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  109. package/package.json +7 -7
  110. package/dist/bundle/chunks/chunk-DXU53IPJ.js +0 -8
  111. package/dist/bundle/chunks/chunk-FILEUW2D.js +0 -3
  112. package/dist/bundle/chunks/chunk-PBWQK23Z.js +0 -14
  113. package/dist/bundle/chunks/chunk-TJV2LFKM.js +0 -2
  114. package/dist/bundle/chunks/chunk-UIOI2SK3.js +0 -2
  115. package/dist/bundle/chunks/cli-main-RPQFXRJ7.js +0 -3
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{InvalidSidecarStoreError,UnsupportedSidecarStoreVersionError,breakStaleLock,cancelScheduledJob,createScheduledJob,createSidecarStore,encodedSessionId,errorCode,holdSessionFile,isWatchRunnerAvailable,listScheduledJobs,publishExclusive,publishReplace,readLeaseText,readProcessStartMs,reclaimInspected,reclaimLockState,scheduleDir,serializeByKey,sidecarFilePath,unlinkIfPresent,withSessionMoveLock}from"./chunk-FAV4DX74.js";import{CountdownTimer,DefaultPackageManager,DynamicBorder,ExtensionInputComponent,ExtensionSelectorComponent,SessionSelectorComponent,appendHiddenTuiStdout,appendUncaughtCrashLog,appendUnhandledRejectionLog,areExperimentalFeaturesEnabled,formatKeyText,keyDisplayText,keyHint,keyText,minimatch,parseGitUrl,rawKeyHint,readPiManifest,readSkillMarkdownSource,redactSensitiveOutput,redactSensitiveTokenValues,require_ignore,shouldRunFirstTimeSetup,shouldSkipSkillWalkDirectoryName,showFirstTimeSetup,showStartupInput,showStartupSelector}from"./chunk-2HWLCW54.js";import{TIP_DEFINITIONS}from"./chunk-YJUO37UX.js";import{KEYBINDINGS,KeybindingsManager,QUESTION_ANSWER_FALLBACK_KEY,QUESTION_ANSWER_PRIMARY_KEY,migrateKeybindingsConfig}from"./chunk-BQGFWWDC.js";import{CURRENT_SESSION_VERSION,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,GOAL_CONTINUATION_MESSAGE_TYPE,MissingSessionCwdError,REPOSITORY_IDENTITY_ENTRY_TYPE,RpcClient,RpcClientOpenInFlightError,RpcTransportGoneError,SESSION_CONTEXT_ENTRY_ID,SessionManager,TRANSPORT_IMAGE_BUDGET_BYTES,assertSessionCwdExists,assertValidSessionId,buildContextEntries,buildSessionContext,compareRepositoryIdentities,convertToLlm,convertToLlmForTransport,createBranchSummaryMessage,createCompactionSummaryMessage,createCustomMessage,environmentContextMessageIfChanged,executeBashWithOperations,formatMissingSessionCwdPrompt,formatSize,getDefaultSessionDir,getLatestCompactionEntry,getMissingSessionCwdIssue,getSessionContextEntryId,isContextExcludedCustomMessage,isTransportGoneError,listSessionsFromDir,loadEntriesFromFile,migrateSessionEntries,parseRepositoryIdentity,parseSessionEntries,readFileLines,readRepositoryIdentity,rejectedImageSources,reserveSessionWrite,resolveEnvironmentContext,sameRepositoryIdentity,sessionEntryToContextMessages,stripAnsi,truncateHead,truncateLine,truncateTail,unregisterSessionWriter}from"./chunk-SW4U2HHU.js";import{BACKGROUND_START_GRACE_MS,DEFAULT_COLS,DEFAULT_DURABLE_MONITOR_FIRE_BUDGET,DEFAULT_MAX_SESSIONS,DEFAULT_ROWS,DEFAULT_SCROLLBACK,DURABLE_MONITOR_EXPIRY_MS,FIRE_BUDGET_AUTO_MUTE_SUMMARY,FIRE_BUDGET_WINDOW_MS,FOREGROUND_ENV_OVERRIDES,KILLED_SESSION_EXIT_GRACE_MS,MAX_DURABLE_MONITORS,MONITOR_ENV_DOWNTIME_MS,MONITOR_ENV_ID,MONITOR_ENV_RESTORED,MONITOR_ENV_STATE_DIR,RESTORE_GRACE_MS,TERMINAL_BASH_TOOL,TERMINAL_COMPANION_TOOLS,TERMINAL_INPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_MONITOR_TOOL,TERMINAL_OUTPUT_TOOL,TERMINAL_RESIZE_TOOL,encodeKeys,loadPty,safeRegExp}from"./chunk-NZRVAZL2.js";import{PROCESS_START_TOLERANCE_MS,ownProcessStartedAtMs,processBootAtMs,sameBoot,sameProcessStart}from"./chunk-U5KVIAHJ.js";import{ANTHROPIC_SUBSCRIPTION_PROVIDER_ID,BUILT_IN_PROVIDER_DISPLAY_NAMES,CODEX_RESPONSES_API,FooterDataProvider,MCP_CONTROL_INVENTORY_CHANGED_EVENT,MCP_CONTROL_INVENTORY_REQUEST_EVENT,SENTINEL_OAUTH_FIELDS,addAccount,all_exports,assertValidAccountName,builtinProviders,classifyReasoningCapability,compat_exports,completeSimple,cursorProvider,emitProviderAccountFailover,emitProviderAccountsChanged,emptyCredential,envSlotToken,findGitPaths,generateImages,getBuiltinModelDataGeneratedAt,getCredentialAccounts,getCursorContextLimit,getImageModel,getModels,getSupportedThinkingLevels as getSupportedThinkingLevels2,installCursorContextLimitPersistence,installImagesProviderScopeAccessor,isMcpControlInventoryRequest,listAccounts,loadAnthropicOAuth,pinCredentialAccount,pinProviderAccount,refreshSlot,registerBundledOAuthFlowLoaders,removeCredentialAccount,removeProviderAccount,renameCredentialAccount,resetApiProviders,resolveCursorContextWindow,runRpcMode,serviceTierExtension,stream,streamSimple,summarizeCredentialAccounts,supportsMax,supportsServiceTier,supportsXhigh,toJsonEvent,upsertAccount}from"./chunk-DXU53IPJ.js";import{Theme,canonicalWatchPath,detectTerminalBackgroundFromEnv,detectTerminalBackgroundTheme,detectTerminalThemeForAuto,flushRawStdout,getAvailableThemes,getAvailableThemesWithPaths,getEditorTheme,getLanguageFromPath,getMarkdownTheme,getResolvedThemeColors,getSelectListTheme,getSettingsListTheme,getThemeByName,getThemeExportColors,highlightCode,initTheme,loadThemeFromPath,observeVisibleStderrWrites,onThemeChange,parseAutoThemeSetting,probeDirectoryOpenable,resolveThemeSetting,restoreStderr,restoreStdout,setRegisteredThemes,setTheme,setThemeInstance,stopThemeWatcher,takeOverStderr,takeOverStdout,theme,waitForRawStdoutBackpressure,watchWithErrorHandler,writeRawStdout}from"./chunk-U2SAEU63.js";import{AssistantEditError,SessionStreamingError,UnknownCommandError,UserEditError,assertExpectedLeaf,assertExpectedUserLeaf,assistantTextEquals,buildEditedAssistantMessage,buildEditedUserMessage,commandShapedName,findUnknownCommand,userTextEquals}from"./chunk-5CGFVKUK.js";import{DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS,DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS,DEFAULT_STREAM_START_TIMEOUT_MS,FileSettingsStorage,HTTP_IDLE_TIMEOUT_CHOICES,SettingsManager,TERMINAL_MOUSE_MODES,acquireFallbackCircuits,applyHttpProxySettings,configureHttpDispatcher,createFallbackCircuitAccess,formatHttpIdleTimeoutMs,getSettingsPath,isTerminalMouseMode,monotonicNow,parseSettingsJson,require_undici,wasSelfWrite}from"./chunk-NVJUCNHP.js";import{Box,CancellableLoader,CombinedAutocompleteProvider,Container,Editor,Image,Input,Key,Loader,Markdown,MouseRegion,ProcessTerminal,Q,ScrollView,SelectList,SettingsList,Spacer,Text,TruncatedText,TuiAltScreen,TuiMainScreen,VStack,decodeKittyPrintable,dist_exports,expandPasteMarkers,fuzzyFilter,fuzzyMatch,getCapabilities,getGraphemeSegmenter,getImageDimensions,getKeybindings,getNativeClipboard,hyperlink,imageFallback,isKeyRelease,isViewportTUI,matchesKey,outerKittyGraphicsMode,sanitizeTerminalLabel,setCapabilityOverrides,setKeybindings,sliceByColumn,stripTerminalSequences,truncateToWidth,visibleWidth,wrapTextWithAnsi}from"./chunk-HEKLJWA4.js";import{composeFoldResult}from"./chunk-BMX2U22F.js";import{DEFAULT_HOST_LAUNCH_SPEC,HOST_EXIT_ERROR,HOST_EXIT_FALLBACK,HOST_EXIT_OK,HOST_EXIT_REFUSED,HOST_EXIT_USAGE,HostLaunchSpecError,loadHostLaunchSpec,parseHostLaunchSpec,readHostStatus,runHostCommand,runHostRequest}from"./chunk-BTRONX2A.js";import{GENERATION_HANDOFF_CAPABILITY,HOST_PROTOCOL_VERSION,HostEnsureRefusedError,PINNED_HOST_CLIENT_CAPABILITIES,REQUIRED_HOST_CAPABILITIES,decideHostAction,ensureHost,handoffHost,parseHostProtocolInfo,probeHost,stopHost}from"./chunk-OMLHHPMZ.js";import{AUTO_TITLE_SESSIONS_CAPABILITY,parseClientCapabilities}from"./chunk-TFW6SS3P.js";import{createHostDaemonPaths,daemonDirectoryName,recordProcessLifetime,shardKey,shardSocketPath,shardSocketPathForKey}from"./chunk-BPZ5KIOS.js";import{compareEngineOrdinal,engineBuildIdentity,engineBuildIdentityFrom}from"./chunk-E5F5SVZF.js";import{createRgEngine,ensureTool}from"./chunk-DA4W77J7.js";import{GrepEngineError}from"./chunk-H4QOEVS5.js";import{parseOpenAIImageOutputOptions,parseOpenAIImageSize}from"./chunk-HB35RBP4.js";import{CredentialFailoverError,getConfigValueEnvVarNames,isCommandConfigValue,isCommittedRotationOutput,isConfigValueConfigured,rendezvousOrder,resolveConfigValue,resolveConfigValueOrThrow,resolveHeadersOrThrow,sleep}from"./chunk-UYV2UM6E.js";import{discoverEnvSlots}from"./chunk-TZMNXKL2.js";import{getPowerShellConfig,getShellConfig,getShellEnv,killProcessTree,killTrackedDetachedChildren,noteDetachedChildExited,pruneTrackedDetachedChildren,sanitizeBinaryOutput,trackDetachedChildPid,untrackDetachedChildPid}from"./chunk-ASAQQ6VM.js";import{CredentialStoreBusyError,FILE_STORAGE_LOCK_OPTIONS,FILE_STORAGE_LOCK_RETRY_BUDGET_MS,FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,FILE_STORAGE_SYNC_LOCK_BUDGET_MS,isLockError}from"./chunk-7X72IACK.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{helpFlagsScope,isPlainHelpRequest,resolveHelpProjectTrust,writeHelpFlagsCache}from"./chunk-YS72TY6S.js";import{ProjectTrustStore,getProjectTrustOptions,hasTrustRequiringProjectResources}from"./chunk-Y5A6TKBN.js";import{isValidThinkingLevel,normalizeSessionName,parseArgs,printHelp,resolveSessionRuntime}from"./chunk-XDZ5RSMX.js";import{source_default}from"./chunk-26UBFF6N.js";import{AssistantMessageFrameEncoder,Compile,StringEnum,TURN_RETRY_SUPPRESSION_PREFIX,compile_exports,composeShellCommand,contentText,cursorOverflowCompactionSettings,describeProviderFailureForUser,dropFailedAssistantTurns,findEnvKeys,getApiProvider,getCursorVariantAlias,getEnvApiKey,getProtocol,getToolCallFormat,hasKimiTextToolCallRecovery,hasVisibleAssistantContent,hasVisibleText,installProviderScopeAccessor,isClassifierRefusal,isContextOverflow,isCursorExecResolved,isCursorPayloadResourceExhausted,isCursorQuotaResourceExhausted,isCursorZeroTokenResourceExhausted,isRecoverableLength,measureCursorModelInputSerializedBytes,normalizeCursorCatalog,omitUndefinedArgs,parseCursorVariantId,parseEndpointReasoningEfforts,piLimit,piLsPath,piReadArgs,piTimeout,reduceAssistantMessageFrames,renderCursorCliModelString,require_dist,shouldRecoverTextToolCalls,shouldRetryOverflowWithoutCompact,stripTurnRetrySuppressionPrefix,supportsAllowedToolChoice,transformContext,validateToolArguments,warmPromptCache,wrapStreamWithModelRecovery,wrapStreamWithToolCallMiddleware}from"./chunk-NDNZU2X7.js";import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import{hasCredentialHeaders,isCredentialHeaderName}from"./chunk-RFB5CBW7.js";import{extractChatGptSubscriptionAccountId,setWireIdentity,uuidv7}from"./chunk-2VZJTDUX.js";import{convertResponsesMessages,copyContextProvenance,getContextProvenance,isOpenAIResponsesPromptCacheModel}from"./chunk-TH4XD7AJ.js";import{INSPECTOR_VM_IMPORT_WARNING,MIN_BUN_VERSION,RUNTIME_ENV_VAR,bunVersionSatisfies,checkForNewPiVersion,consumeEarlyInspectorVmImportRecoveries,findBunBinary,getPiUserAgent,getReleaseChangelogUrl,hasInheritedInspectorOption,isRecoverableInspectorVmImportError,processBunRuntimeOptions}from"./chunk-4LVZQRDG.js";import{require_semver}from"./chunk-ZOFZRJSL.js";import{fetchWithRetry}from"./chunk-2SOVDETB.js";import{APP_COMMAND,APP_NAME,APP_TITLE,BRAND,CONFIG_DIR_NAME,CONFIG_FLAT_LAYOUT,DISPLAY_VERSION,ENV_AGENT_DIR,ENV_SESSION_DIR,FLAT_LAYOUT_SENTINEL,PACKAGE_NAME,VERSION,canonicalizePath,detectInstallMethod,envValue,expandTildePath,formatPathRelativeToCwdOrAbsolute,getAgentDir,getAuthPath,getBinDir,getBundledInteractiveAssetPath,getChangelogPath,getCwdRelativePath,getDebugLogPath,getDocsPath,getExamplesPath,getExportTemplateDir,getFileContentRevision,getFileRevision,getModelsPath,getPackageDir,getReadmePath,getSessionsDir,getShareViewerUrl,isBunBinary,isBunRuntime,isBundledNode,isLocalPath,normalizePath,realpathWithoutOpen,realpathWithoutOpenStrict,resolveAgentDir,resolvePath,splitBom,stripBom,waitForChildProcess}from"./chunk-PBWQK23Z.js";import{build_exports,typebox_exports,value_exports2 as value_exports}from"./chunk-RBCQOIAD.js";import{installClaudeCodeVersionStore,resolveToolNameMatch}from"./chunk-JRGNL6WM.js";import{SERVER_FALLBACK_ABORTED_DIAGNOSTIC,sanitizeAnthropicToolPairs}from"./chunk-X4Q5YSTE.js";import{resolveRootObjectSchema}from"./chunk-CWLCGRUS.js";import{getAnthropicCompat,isAnthropicApiBaseUrl,resolvePromptCacheLifetime,resolvePromptCacheTtlSeconds}from"./chunk-BJICJY47.js";import{hasRefusedForcedToolChoice}from"./chunk-LHYG7TK7.js";import{DEFAULT_MAX_AGENT_RETRY_DELAY_MS,EMPTY_RESPONSE_ERROR,EMPTY_TOOL_USE_ERROR,FORWARDED_EMPTY_RESPONSE_ERROR,FORWARDED_EMPTY_TOOL_USE_ERROR,isProviderStreamStallError,isProviderTimeoutError,isQuotaExhaustionMessage,isRetryableAssistantError,isRetryableErrorMessage,readProviderDiagnostic,retryAssistantCall,retryDelayMs,retryTransientCall,sanitizeProviderDiagnostic,stripProviderRequestIds}from"./chunk-TJV2LFKM.js";import{cleanupSessionResources,processSingleton}from"./chunk-WHPDEDCC.js";import{extract429RetryAfterMs,parseRetryAfterMsMarker}from"./chunk-BPX6QWPD.js";import{LEGACY_PROVIDER_IDS,ModelsError,accountLabel,appendLoginSlot,calculateCost,clampThinkingLevel,createModels,estimateContextTokens,getSupportedThinkingLevels,lazyStream,legacyProviderIdRejection,listSlots,modelsAreEqual,normalizeProviderId,providerNotConfiguredMessage,readByProviderId,removeSlot,repairManagedSentinelSlots,supportsConfigurationUpdate,upsertSlot}from"./chunk-UIOI2SK3.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import{EventStream,createAssistantMessageDiagnostic,createAssistantMessageEventStream}from"./chunk-DMI55M2N.js";import{__commonJS,__export,__toESM}from"./chunk-IKOFCODM.js";var require_constants=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/constants.js"(exports,module){"use strict";var WIN_NO_SLASH="[^\\\\/]",ONE_CHAR="(?=.)",QMARK="[^/]",END_ANCHOR="(?:\\/|$)",START_ANCHOR="(?:^|\\/)",DOTS_SLASH=`\\.{1,2}${END_ANCHOR}`,NO_DOT="(?!\\.)",NO_DOTS=`(?!${START_ANCHOR}${DOTS_SLASH})`,NO_DOT_SLASH=`(?!\\.{0,1}${END_ANCHOR})`,NO_DOTS_SLASH=`(?!${DOTS_SLASH})`,QMARK_NO_DOT="[^.\\/]",STAR=`${QMARK}*?`,SEP="/",POSIX_CHARS={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR,QMARK,END_ANCHOR,DOTS_SLASH,NO_DOT,NO_DOTS,NO_DOT_SLASH,NO_DOTS_SLASH,QMARK_NO_DOT,STAR,START_ANCHOR,SEP},WINDOWS_CHARS={...POSIX_CHARS,SLASH_LITERAL:"[\\\\/]",QMARK:WIN_NO_SLASH,STAR:`${WIN_NO_SLASH}*?`,DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)",SEP:"\\"},POSIX_REGEX_SOURCE={__proto__:null,alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};module.exports={DEFAULT_MAX_EXTGLOB_RECURSION:0,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(chars){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${chars.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(win325){return win325===!0?WINDOWS_CHARS:POSIX_CHARS}}}});var require_utils=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/utils.js"(exports){"use strict";var{REGEX_BACKSLASH,REGEX_REMOVE_BACKSLASH,REGEX_SPECIAL_CHARS,REGEX_SPECIAL_CHARS_GLOBAL}=require_constants();exports.isObject=val=>val!==null&&typeof val=="object"&&!Array.isArray(val);exports.hasRegexChars=str3=>REGEX_SPECIAL_CHARS.test(str3);exports.isRegexChar=str3=>str3.length===1&&exports.hasRegexChars(str3);exports.escapeRegex=str3=>str3.replace(REGEX_SPECIAL_CHARS_GLOBAL,"\\$1");exports.toPosixSlashes=str3=>str3.replace(REGEX_BACKSLASH,"/");exports.isWindows=()=>{if(typeof navigator<"u"&&navigator.platform){let platform4=navigator.platform.toLowerCase();return platform4==="win32"||platform4==="windows"}return typeof process<"u"&&process.platform?process.platform==="win32":!1};exports.removeBackslashes=str3=>str3.replace(REGEX_REMOVE_BACKSLASH,match=>match==="\\"?"":match);exports.escapeLast=(input,char,lastIdx)=>{let idx=input.lastIndexOf(char,lastIdx);return idx===-1?input:input[idx-1]==="\\"?exports.escapeLast(input,char,idx-1):`${input.slice(0,idx)}\\${input.slice(idx)}`};exports.removePrefix=(input,state={})=>{let output=input;return output.startsWith("./")&&(output=output.slice(2),state.prefix="./"),output};exports.wrapOutput=(input,state={},options={})=>{let prepend=options.contains?"":"^",append=options.contains?"":"$",output=`${prepend}(?:${input})${append}`;return state.negated===!0&&(output=`(?:^(?!${output}).*$)`),output};exports.basename=(path13,{windows}={})=>{let segs=path13.split(windows?/[\\/]/:"/"),last=segs[segs.length-1];return last===""?segs[segs.length-2]:last}}});var require_scan=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/scan.js"(exports,module){"use strict";var utils=require_utils(),{CHAR_ASTERISK,CHAR_AT,CHAR_BACKWARD_SLASH,CHAR_COMMA,CHAR_DOT,CHAR_EXCLAMATION_MARK,CHAR_FORWARD_SLASH,CHAR_LEFT_CURLY_BRACE,CHAR_LEFT_PARENTHESES,CHAR_LEFT_SQUARE_BRACKET,CHAR_PLUS,CHAR_QUESTION_MARK,CHAR_RIGHT_CURLY_BRACE,CHAR_RIGHT_PARENTHESES,CHAR_RIGHT_SQUARE_BRACKET}=require_constants(),isPathSeparator=code=>code===CHAR_FORWARD_SLASH||code===CHAR_BACKWARD_SLASH,depth=token=>{token.isPrefix!==!0&&(token.depth=token.isGlobstar?1/0:1)},scan2=(input,options)=>{let opts=options||{},length=input.length-1,scanToEnd=opts.parts===!0||opts.tokens===!0||opts.scanToEnd===!0,slashes=[],tokens=[],parts=[],str3=input,index=-1,start=0,lastIndex=0,isBrace=!1,isBracket=!1,isGlob=!1,isExtglob=!1,isGlobstar=!1,braceEscaped=!1,backslashes=!1,negated=!1,negatedExtglob=!1,finished=!1,braces=0,prev,code,token={value:"",depth:0,isGlob:!1},eos=()=>index>=length,peek=()=>str3.charCodeAt(index+1),advance=()=>(prev=code,str3.charCodeAt(++index));for(;index<length;){code=advance();let next;if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,code=advance(),code===CHAR_LEFT_CURLY_BRACE&&(braceEscaped=!0);continue}if(braceEscaped===!0||code===CHAR_LEFT_CURLY_BRACE){for(braces++;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_CURLY_BRACE){braces++;continue}if(braceEscaped!==!0&&code===CHAR_DOT&&(code=advance())===CHAR_DOT){if(isBrace=token.isBrace=!0,isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(braceEscaped!==!0&&code===CHAR_COMMA){if(isBrace=token.isBrace=!0,isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_RIGHT_CURLY_BRACE&&(braces--,braces===0)){braceEscaped=!1,isBrace=token.isBrace=!0,finished=!0;break}}if(scanToEnd===!0)continue;break}if(code===CHAR_FORWARD_SLASH){if(slashes.push(index),tokens.push(token),token={value:"",depth:0,isGlob:!1},finished===!0)continue;if(prev===CHAR_DOT&&index===start+1){start+=2;continue}lastIndex=index+1;continue}if(opts.noext!==!0&&(code===CHAR_PLUS||code===CHAR_AT||code===CHAR_ASTERISK||code===CHAR_QUESTION_MARK||code===CHAR_EXCLAMATION_MARK)===!0&&peek()===CHAR_LEFT_PARENTHESES){if(isGlob=token.isGlob=!0,isExtglob=token.isExtglob=!0,finished=!0,code===CHAR_EXCLAMATION_MARK&&index===start&&(negatedExtglob=!0),scanToEnd===!0){let parens=0;for(;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_PARENTHESES){parens++;continue}if(code===CHAR_RIGHT_PARENTHESES&&--parens===0){finished=!0;break}}continue}break}if(code===CHAR_ASTERISK){if(prev===CHAR_ASTERISK&&(isGlobstar=token.isGlobstar=!0),isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_QUESTION_MARK){if(isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_LEFT_SQUARE_BRACKET){for(;eos()!==!0&&(next=advance());){if(next===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(next===CHAR_RIGHT_SQUARE_BRACKET){isBracket=token.isBracket=!0,isGlob=token.isGlob=!0,finished=!0;break}}if(scanToEnd===!0)continue;break}if(opts.nonegate!==!0&&code===CHAR_EXCLAMATION_MARK&&index===start){negated=token.negated=!0,start++;continue}if(opts.noparen!==!0&&code===CHAR_LEFT_PARENTHESES){if(isGlob=token.isGlob=!0,scanToEnd===!0){let parens=1;for(;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_PARENTHESES){parens++;continue}if(code===CHAR_RIGHT_PARENTHESES&&--parens===0){finished=!0;break}}continue}break}if(isGlob===!0){if(finished=!0,scanToEnd===!0)continue;break}}opts.noext===!0&&(isExtglob=!1,isGlob=!1);let base=str3,prefix="",glob="";start>0&&(prefix=str3.slice(0,start),str3=str3.slice(start),lastIndex-=start),base&&isGlob===!0&&lastIndex>0?(base=str3.slice(0,lastIndex),glob=str3.slice(lastIndex)):isGlob===!0?(base="",glob=str3):base=str3,base&&base!==""&&base!=="/"&&base!==str3&&isPathSeparator(base.charCodeAt(base.length-1))&&(base=base.slice(0,-1)),opts.unescape===!0&&(glob&&(glob=utils.removeBackslashes(glob)),base&&backslashes===!0&&(base=utils.removeBackslashes(base)));let state={prefix,input,start,base,glob,isBrace,isBracket,isGlob,isExtglob,isGlobstar,negated,negatedExtglob};if(opts.tokens===!0&&(state.maxDepth=0,isPathSeparator(code)||tokens.push(token),state.tokens=tokens),opts.parts===!0||opts.tokens===!0){let prevIndex;for(let idx=0;idx<slashes.length;idx++){let n2=prevIndex!==void 0?prevIndex+1:start,i=slashes[idx],value3=input.slice(n2,i);opts.tokens&&(idx===0&&start!==0?(tokens[idx].isPrefix=!0,tokens[idx].value=prefix):tokens[idx].value=value3,depth(tokens[idx]),state.maxDepth+=tokens[idx].depth),i>=start&&(parts.push(value3),prevIndex=i)}let n=prevIndex!==void 0?prevIndex+1:start,value2=input.slice(n);parts.push(value2),opts.tokens&&prevIndex&&prevIndex+1<input.length&&(tokens[tokens.length-1].value=value2,depth(tokens[tokens.length-1]),state.maxDepth+=tokens[tokens.length-1].depth),state.slashes=slashes,state.parts=parts}return state};module.exports=scan2}});var require_parse=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/parse.js"(exports,module){"use strict";var constants11=require_constants(),utils=require_utils(),{MAX_LENGTH,POSIX_REGEX_SOURCE,REGEX_NON_SPECIAL_CHARS,REGEX_SPECIAL_CHARS_BACKREF,REPLACEMENTS}=constants11,expandRange=(args,options)=>{if(typeof options.expandRange=="function")return options.expandRange(...args,options);args.sort();let value2=`[${args.join("-")}]`;try{new RegExp(value2)}catch{return args.map(v=>utils.escapeRegex(v)).join("..")}return value2},syntaxError=(type2,char)=>`Missing ${type2}: "${char}" - use "\\\\${char}" to match literal characters`,splitTopLevel=input=>{let parts=[],bracket=0,paren=0,quote=0,value2="",escaped=!1;for(let ch of input){if(escaped===!0){value2+=ch,escaped=!1;continue}if(ch==="\\"){value2+=ch,escaped=!0;continue}if(ch==='"'){quote=quote===1?0:1,value2+=ch;continue}if(quote===0){if(ch==="[")bracket++;else if(ch==="]"&&bracket>0)bracket--;else if(bracket===0){if(ch==="(")paren++;else if(ch===")"&&paren>0)paren--;else if(ch==="|"&&paren===0){parts.push(value2),value2="";continue}}}value2+=ch}return parts.push(value2),parts},isPlainBranch=branch=>{let escaped=!1;for(let ch of branch){if(escaped===!0){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}if(/[?*+@!()[\]{}]/.test(ch))return!1}return!0},normalizeSimpleBranch=branch=>{let value2=branch.trim(),changed=!0;for(;changed===!0;)changed=!1,/^@\([^\\()[\]{}|]+\)$/.test(value2)&&(value2=value2.slice(2,-1),changed=!0);if(isPlainBranch(value2))return value2.replace(/\\(.)/g,"$1")},hasRepeatedCharPrefixOverlap=branches=>{let values=branches.map(normalizeSimpleBranch).filter(Boolean);for(let i=0;i<values.length;i++)for(let j=i+1;j<values.length;j++){let a=values[i],b=values[j],char=a[0];if(!(!char||a!==char.repeat(a.length)||b!==char.repeat(b.length))&&(a===b||a.startsWith(b)||b.startsWith(a)))return!0}return!1},parseRepeatedExtglob=(pattern,requireEnd=!0)=>{if(pattern[0]!=="+"&&pattern[0]!=="*"||pattern[1]!=="(")return;let bracket=0,paren=0,quote=0,escaped=!1;for(let i=1;i<pattern.length;i++){let ch=pattern[i];if(escaped===!0){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}if(ch==='"'){quote=quote===1?0:1;continue}if(quote!==1){if(ch==="["){bracket++;continue}if(ch==="]"&&bracket>0){bracket--;continue}if(!(bracket>0)){if(ch==="("){paren++;continue}if(ch===")"&&(paren--,paren===0))return requireEnd===!0&&i!==pattern.length-1?void 0:{type:pattern[0],body:pattern.slice(2,i),end:i}}}}},buildCharClassStar=chars=>`${chars.length===1?utils.escapeRegex(chars[0]):`[${chars.map(ch=>utils.escapeRegex(ch)).join("")}]`}*`,getStarExtglobSequenceChars=pattern=>{let index=0,chars=[];for(;index<pattern.length;){let match=parseRepeatedExtglob(pattern.slice(index),!1);if(!match||match.type!=="*")return;let branches=splitTopLevel(match.body).map(branch2=>branch2.trim());if(branches.length!==1)return;let branch=normalizeSimpleBranch(branches[0]);if(!branch||branch.length!==1)return;chars.push(branch),index+=match.end+1}if(!(chars.length<1))return chars},repeatedExtglobRecursion=pattern=>{let depth=0,value2=pattern.trim(),match=parseRepeatedExtglob(value2);for(;match;)depth++,value2=match.body.trim(),match=parseRepeatedExtglob(value2);return depth},analyzeRepeatedExtglob=(body,options)=>{if(options.maxExtglobRecursion===!1)return{risky:!1};let max=typeof options.maxExtglobRecursion=="number"?options.maxExtglobRecursion:constants11.DEFAULT_MAX_EXTGLOB_RECURSION,branches=splitTopLevel(body).map(branch=>branch.trim());if(branches.length>1&&(branches.some(branch=>branch==="")||branches.some(branch=>/^[*?]+$/.test(branch))||hasRepeatedCharPrefixOverlap(branches)))return{risky:!0};let safeChars=[],sawStarSequence=!1,combinable=!0;for(let branch of branches){let chars=getStarExtglobSequenceChars(branch);if(chars){sawStarSequence=!0,safeChars.push(...chars);continue}let literal=normalizeSimpleBranch(branch);if(literal&&literal.length===1){safeChars.push(literal);continue}if(combinable=!1,repeatedExtglobRecursion(branch)>max)return{risky:!0}}return sawStarSequence?combinable?{risky:!0,safeOutput:buildCharClassStar([...new Set(safeChars)])}:{risky:!0}:{risky:!1}},parse5=(input,options)=>{if(typeof input!="string")throw new TypeError("Expected a string");input=REPLACEMENTS[input]||input;let opts={...options},max=typeof opts.maxLength=="number"?Math.min(MAX_LENGTH,opts.maxLength):MAX_LENGTH,len=input.length;if(len>max)throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);let bos={type:"bos",value:"",output:opts.prepend||""},tokens=[bos],capture=opts.capture?"":"?:",PLATFORM_CHARS=constants11.globChars(opts.windows),EXTGLOB_CHARS=constants11.extglobChars(PLATFORM_CHARS),{DOT_LITERAL,PLUS_LITERAL,SLASH_LITERAL,ONE_CHAR,DOTS_SLASH,NO_DOT,NO_DOT_SLASH,NO_DOTS_SLASH,QMARK,QMARK_NO_DOT,STAR,START_ANCHOR}=PLATFORM_CHARS,globstar=opts2=>`(${capture}(?:(?!${START_ANCHOR}${opts2.dot?DOTS_SLASH:DOT_LITERAL}).)*?)`,nodot=opts.dot?"":NO_DOT,qmarkNoDot=opts.dot?QMARK:QMARK_NO_DOT,star=opts.bash===!0?globstar(opts):STAR;opts.capture&&(star=`(${star})`),typeof opts.noext=="boolean"&&(opts.noextglob=opts.noext);let state={input,index:-1,start:0,dot:opts.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens};input=utils.removePrefix(input,state),len=input.length;let extglobs=[],braces=[],stack=[],prev=bos,value2,eos=()=>state.index===len-1,peek=state.peek=(n=1)=>input[state.index+n],advance=state.advance=()=>input[++state.index]||"",remaining=()=>input.slice(state.index+1),consume=(value3="",num2=0)=>{state.consumed+=value3,state.index+=num2},append=token=>{state.output+=token.output!=null?token.output:token.value,consume(token.value)},negate=()=>{let count=1;for(;peek()==="!"&&(peek(2)!=="("||peek(3)==="?");)advance(),state.start++,count++;return count%2===0?!1:(state.negated=!0,state.start++,!0)},increment=type2=>{state[type2]++,stack.push(type2)},decrement=type2=>{state[type2]--,stack.pop()},push=tok=>{if(prev.type==="globstar"){let isBrace=state.braces>0&&(tok.type==="comma"||tok.type==="brace"),isExtglob=tok.extglob===!0||extglobs.length&&(tok.type==="pipe"||tok.type==="paren");tok.type!=="slash"&&tok.type!=="paren"&&!isBrace&&!isExtglob&&(state.output=state.output.slice(0,-prev.output.length),prev.type="star",prev.value="*",prev.output=star,state.output+=prev.output)}if(extglobs.length&&tok.type!=="paren"&&(extglobs[extglobs.length-1].inner+=tok.value),(tok.value||tok.output)&&append(tok),prev&&prev.type==="text"&&tok.type==="text"){prev.output=(prev.output||prev.value)+tok.value,prev.value+=tok.value;return}tok.prev=prev,tokens.push(tok),prev=tok},extglobOpen=(type2,value3)=>{let token={...EXTGLOB_CHARS[value3],conditions:1,inner:""};token.prev=prev,token.parens=state.parens,token.output=state.output,token.startIndex=state.index,token.tokensIndex=tokens.length;let output=(opts.capture?"(":"")+token.open;increment("parens"),push({type:type2,value:value3,output:state.output?"":ONE_CHAR}),push({type:"paren",extglob:!0,value:advance(),output}),extglobs.push(token)},extglobClose=token=>{let literal=input.slice(token.startIndex,state.index+1),body=input.slice(token.startIndex+2,state.index),analysis=analyzeRepeatedExtglob(body,opts);if((token.type==="plus"||token.type==="star")&&analysis.risky){let safeOutput=analysis.safeOutput?(token.output?"":ONE_CHAR)+(opts.capture?`(${analysis.safeOutput})`:analysis.safeOutput):void 0,open7=tokens[token.tokensIndex];open7.type="text",open7.value=literal,open7.output=safeOutput||utils.escapeRegex(literal);for(let i=token.tokensIndex+1;i<tokens.length;i++)tokens[i].value="",tokens[i].output="",delete tokens[i].suffix;state.output=token.output+open7.output,state.backtrack=!0,push({type:"paren",extglob:!0,value:value2,output:""}),decrement("parens");return}let output=token.close+(opts.capture?")":""),rest;if(token.type==="negate"){let extglobStar=star;if(token.inner&&token.inner.length>1&&token.inner.includes("/")&&(extglobStar=globstar(opts)),(extglobStar!==star||eos()||/^\)+$/.test(remaining()))&&(output=token.close=`)$))${extglobStar}`),token.inner.includes("*")&&(rest=remaining())&&/^\.[^\\/.]+$/.test(rest)){let expression=parse5(rest,{...options,fastpaths:!1}).output;output=token.close=`)${expression})${extglobStar})`}token.prev.type==="bos"&&(state.negatedExtglob=!0)}push({type:"paren",extglob:!0,value:value2,output}),decrement("parens")};if(opts.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(input)){let backslashes=!1,output=input.replace(REGEX_SPECIAL_CHARS_BACKREF,(m,esc,chars,first,rest,index)=>first==="\\"?(backslashes=!0,m):first==="?"?esc?esc+first+(rest?QMARK.repeat(rest.length):""):index===0?qmarkNoDot+(rest?QMARK.repeat(rest.length):""):QMARK.repeat(chars.length):first==="."?DOT_LITERAL.repeat(chars.length):first==="*"?esc?esc+first+(rest?star:""):star:esc?m:`\\${m}`);return backslashes===!0&&(opts.unescape===!0?output=output.replace(/\\/g,""):output=output.replace(/\\+/g,m=>m.length%2===0?"\\\\":m?"\\":"")),output===input&&opts.contains===!0?(state.output=input,state):(state.output=utils.wrapOutput(output,state,options),state)}for(;!eos();){if(value2=advance(),value2==="\0")continue;if(value2==="\\"){let next=peek();if(next==="/"&&opts.bash!==!0||next==="."||next===";")continue;if(!next){value2+="\\",push({type:"text",value:value2});continue}let match=/^\\+/.exec(remaining()),slashes=0;if(match&&match[0].length>2&&(slashes=match[0].length,state.index+=slashes,slashes%2!==0&&(value2+="\\")),opts.unescape===!0?value2=advance():value2+=advance(),state.brackets===0){push({type:"text",value:value2});continue}}if(state.brackets>0&&(value2!=="]"||prev.value==="["||prev.value==="[^")){if(opts.posix!==!1&&value2===":"){let inner=prev.value.slice(1);if(inner.includes("[")&&(prev.posix=!0,inner.includes(":"))){let idx=prev.value.lastIndexOf("["),pre=prev.value.slice(0,idx),rest2=prev.value.slice(idx+2),posix5=POSIX_REGEX_SOURCE[rest2];if(posix5){prev.value=pre+posix5,state.backtrack=!0,advance(),!bos.output&&tokens.indexOf(prev)===1&&(bos.output=ONE_CHAR);continue}}}(value2==="["&&peek()!==":"||value2==="-"&&peek()==="]")&&(value2=`\\${value2}`),value2==="]"&&(prev.value==="["||prev.value==="[^")&&(value2=`\\${value2}`),opts.posix===!0&&value2==="!"&&prev.value==="["&&(value2="^"),prev.value+=value2,append({value:value2});continue}if(state.quotes===1&&value2!=='"'){value2=utils.escapeRegex(value2),prev.value+=value2,append({value:value2});continue}if(value2==='"'){state.quotes=state.quotes===1?0:1,opts.keepQuotes===!0&&push({type:"text",value:value2});continue}if(value2==="("){increment("parens"),push({type:"paren",value:value2});continue}if(value2===")"){if(state.parens===0&&opts.strictBrackets===!0)throw new SyntaxError(syntaxError("opening","("));let extglob=extglobs[extglobs.length-1];if(extglob&&state.parens===extglob.parens+1){extglobClose(extglobs.pop());continue}push({type:"paren",value:value2,output:state.parens?")":"\\)"}),decrement("parens");continue}if(value2==="["){if(opts.nobracket===!0||!remaining().includes("]")){if(opts.nobracket!==!0&&opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","]"));value2=`\\${value2}`}else increment("brackets");push({type:"bracket",value:value2});continue}if(value2==="]"){if(opts.nobracket===!0||prev&&prev.type==="bracket"&&prev.value.length===1){push({type:"text",value:value2,output:`\\${value2}`});continue}if(state.brackets===0){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("opening","["));push({type:"text",value:value2,output:`\\${value2}`});continue}decrement("brackets");let prevValue=prev.value.slice(1);if(prev.posix!==!0&&prevValue[0]==="^"&&!prevValue.includes("/")&&(value2=`/${value2}`),prev.value+=value2,append({value:value2}),opts.literalBrackets===!1||utils.hasRegexChars(prevValue))continue;let escaped=utils.escapeRegex(prev.value);if(state.output=state.output.slice(0,-prev.value.length),opts.literalBrackets===!0){state.output+=escaped,prev.value=escaped;continue}prev.value=`(${capture}${escaped}|${prev.value})`,state.output+=prev.value;continue}if(value2==="{"&&opts.nobrace!==!0){increment("braces");let open7={type:"brace",value:value2,output:"(",outputIndex:state.output.length,tokensIndex:state.tokens.length};braces.push(open7),push(open7);continue}if(value2==="}"){let brace=braces[braces.length-1];if(opts.nobrace===!0||!brace){push({type:"text",value:value2,output:value2});continue}let output=")";if(brace.dots===!0){let arr=tokens.slice(),range=[];for(let i=arr.length-1;i>=0&&(tokens.pop(),arr[i].type!=="brace");i--)arr[i].type!=="dots"&&range.unshift(arr[i].value);output=expandRange(range,opts),state.backtrack=!0}if(brace.comma!==!0&&brace.dots!==!0){let out=state.output.slice(0,brace.outputIndex),toks=state.tokens.slice(brace.tokensIndex);brace.value=brace.output="\\{",value2=output="\\}",state.output=out;for(let t of toks)state.output+=t.output||t.value}push({type:"brace",value:value2,output}),decrement("braces"),braces.pop();continue}if(value2==="|"){extglobs.length>0&&extglobs[extglobs.length-1].conditions++,push({type:"text",value:value2});continue}if(value2===","){let output=value2,brace=braces[braces.length-1];brace&&stack[stack.length-1]==="braces"&&(brace.comma=!0,output="|"),push({type:"comma",value:value2,output});continue}if(value2==="/"){if(prev.type==="dot"&&state.index===state.start+1){state.start=state.index+1,state.consumed="",state.output="",tokens.pop(),prev=bos;continue}push({type:"slash",value:value2,output:SLASH_LITERAL});continue}if(value2==="."){if(state.braces>0&&prev.type==="dot"){prev.value==="."&&(prev.output=DOT_LITERAL);let brace=braces[braces.length-1];prev.type="dots",prev.output+=value2,prev.value+=value2,brace.dots=!0;continue}if(state.braces+state.parens===0&&prev.type!=="bos"&&prev.type!=="slash"){push({type:"text",value:value2,output:DOT_LITERAL});continue}push({type:"dot",value:value2,output:DOT_LITERAL});continue}if(value2==="?"){if(!(prev&&prev.value==="(")&&opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){extglobOpen("qmark",value2);continue}if(prev&&prev.type==="paren"){let next=peek(),output=value2;(prev.value==="("&&!/[!=<:]/.test(next)||next==="<"&&!/<([!=]|\w+>)/.test(remaining()))&&(output=`\\${value2}`),push({type:"text",value:value2,output});continue}if(opts.dot!==!0&&(prev.type==="slash"||prev.type==="bos")){push({type:"qmark",value:value2,output:QMARK_NO_DOT});continue}push({type:"qmark",value:value2,output:QMARK});continue}if(value2==="!"){if(opts.noextglob!==!0&&peek()==="("&&(peek(2)!=="?"||!/[!=<:]/.test(peek(3)))){extglobOpen("negate",value2);continue}if(opts.nonegate!==!0&&state.index===0){negate();continue}}if(value2==="+"){if(opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){extglobOpen("plus",value2);continue}if(prev&&prev.value==="("||opts.regex===!1){push({type:"plus",value:value2,output:PLUS_LITERAL});continue}if(prev&&(prev.type==="bracket"||prev.type==="paren"||prev.type==="brace")||state.parens>0){push({type:"plus",value:value2});continue}push({type:"plus",value:PLUS_LITERAL});continue}if(value2==="@"){if(opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){push({type:"at",extglob:!0,value:value2,output:""});continue}push({type:"text",value:value2});continue}if(value2!=="*"){(value2==="$"||value2==="^")&&(value2=`\\${value2}`);let match=REGEX_NON_SPECIAL_CHARS.exec(remaining());match&&(value2+=match[0],state.index+=match[0].length),push({type:"text",value:value2});continue}if(prev&&(prev.type==="globstar"||prev.star===!0)){prev.type="star",prev.star=!0,prev.value+=value2,prev.output=star,state.backtrack=!0,state.globstar=!0,consume(value2);continue}let rest=remaining();if(opts.noextglob!==!0&&/^\([^?]/.test(rest)){extglobOpen("star",value2);continue}if(prev.type==="star"){if(opts.noglobstar===!0){consume(value2);continue}let prior=prev.prev,before=prior.prev,isStart=prior.type==="slash"||prior.type==="bos",afterStar=before&&(before.type==="star"||before.type==="globstar");if(opts.bash===!0&&(!isStart||rest[0]&&rest[0]!=="/")){push({type:"star",value:value2,output:""});continue}let isBrace=state.braces>0&&(prior.type==="comma"||prior.type==="brace"),isExtglob=extglobs.length&&(prior.type==="pipe"||prior.type==="paren");if(!isStart&&prior.type!=="paren"&&!isBrace&&!isExtglob){push({type:"star",value:value2,output:""});continue}for(;rest.slice(0,3)==="/**";){let after=input[state.index+4];if(after&&after!=="/")break;rest=rest.slice(3),consume("/**",3)}let isEnd=eos()||state.parens>0&&rest===")".repeat(state.parens)&&!extglobs.some(extglob=>extglob.type==="negate");if(prior.type==="bos"&&eos()){prev.type="globstar",prev.value+=value2,prev.output=globstar(opts),state.output=prev.output,state.globstar=!0,consume(value2);continue}if(prior.type==="slash"&&prior.prev.type!=="bos"&&!afterStar&&isEnd){state.output=state.output.slice(0,-(prior.output+prev.output).length),prior.output=`(?:${prior.output}`,prev.type="globstar",prev.output=globstar(opts)+(opts.strictSlashes?")":"|$)"),prev.value+=value2,state.globstar=!0,state.output+=prior.output+prev.output,consume(value2);continue}if(prior.type==="slash"&&prior.prev.type!=="bos"&&rest[0]==="/"){let end=rest[1]!==void 0?"|$":"";state.output=state.output.slice(0,-(prior.output+prev.output).length),prior.output=`(?:${prior.output}`,prev.type="globstar",prev.output=`${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`,prev.value+=value2,state.output+=prior.output+prev.output,state.globstar=!0,consume(value2+advance()),push({type:"slash",value:"/",output:""});continue}if(prior.type==="bos"&&rest[0]==="/"){prev.type="globstar",prev.value+=value2,prev.output=`(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`,state.output=prev.output,state.globstar=!0,consume(value2+advance()),push({type:"slash",value:"/",output:""});continue}state.output=state.output.slice(0,-prev.output.length),prev.type="globstar",prev.output=globstar(opts),prev.value+=value2,state.output+=prev.output,state.globstar=!0,consume(value2);continue}let token={type:"star",value:value2,output:star};if(opts.bash===!0){token.output=".*?",(prev.type==="bos"||prev.type==="slash")&&(token.output=nodot+token.output),push(token);continue}if(prev&&(prev.type==="bracket"||prev.type==="paren")&&opts.regex===!0){token.output=value2,push(token);continue}(state.index===state.start||prev.type==="slash"||prev.type==="dot")&&(prev.type==="dot"?(state.output+=NO_DOT_SLASH,prev.output+=NO_DOT_SLASH):opts.dot===!0?(state.output+=NO_DOTS_SLASH,prev.output+=NO_DOTS_SLASH):(state.output+=nodot,prev.output+=nodot),peek()!=="*"&&(state.output+=ONE_CHAR,prev.output+=ONE_CHAR)),push(token)}for(;state.brackets>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","]"));state.output=utils.escapeLast(state.output,"["),decrement("brackets")}for(;state.parens>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing",")"));state.output=utils.escapeLast(state.output,"("),decrement("parens")}for(;state.braces>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","}"));state.output=utils.escapeLast(state.output,"{"),decrement("braces")}if(opts.strictSlashes!==!0&&(prev.type==="star"||prev.type==="bracket")&&push({type:"maybe_slash",value:"",output:`${SLASH_LITERAL}?`}),state.backtrack===!0){state.output="";for(let token of state.tokens)state.output+=token.output!=null?token.output:token.value,token.suffix&&(state.output+=token.suffix)}return state};parse5.fastpaths=(input,options)=>{let opts={...options},max=typeof opts.maxLength=="number"?Math.min(MAX_LENGTH,opts.maxLength):MAX_LENGTH,len=input.length;if(len>max)throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);input=REPLACEMENTS[input]||input;let{DOT_LITERAL,SLASH_LITERAL,ONE_CHAR,DOTS_SLASH,NO_DOT,NO_DOTS,NO_DOTS_SLASH,STAR,START_ANCHOR}=constants11.globChars(opts.windows),nodot=opts.dot?NO_DOTS:NO_DOT,slashDot=opts.dot?NO_DOTS_SLASH:NO_DOT,capture=opts.capture?"":"?:",state={negated:!1,prefix:""},star=opts.bash===!0?".*?":STAR;opts.capture&&(star=`(${star})`);let globstar=opts2=>opts2.noglobstar===!0?star:`(${capture}(?:(?!${START_ANCHOR}${opts2.dot?DOTS_SLASH:DOT_LITERAL}).)*?)`,create2=str3=>{switch(str3){case"*":return`${nodot}${ONE_CHAR}${star}`;case".*":return`${DOT_LITERAL}${ONE_CHAR}${star}`;case"*.*":return`${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;case"*/*":return`${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;case"**":return nodot+globstar(opts);case"**/*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;case"**/*.*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;case"**/.*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;default:{let match=/^(.*?)\.(\w+)$/.exec(str3);if(!match)return;let source2=create2(match[1]);return source2?source2+DOT_LITERAL+match[2]:void 0}}},output=utils.removePrefix(input,state),source=create2(output);return source&&opts.strictSlashes!==!0&&(source+=`${SLASH_LITERAL}?`),source};module.exports=parse5}});var require_picomatch=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/picomatch.js"(exports,module){"use strict";var scan2=require_scan(),parse5=require_parse(),utils=require_utils(),constants11=require_constants(),isObject4=val=>val&&typeof val=="object"&&!Array.isArray(val),picomatch4=(glob,options,returnState=!1)=>{if(Array.isArray(glob)){let fns=glob.map(input=>picomatch4(input,options,returnState));return str3=>{for(let isMatch of fns){let state2=isMatch(str3);if(state2)return state2}return!1}}let isState=isObject4(glob)&&glob.tokens&&glob.input;if(glob===""||typeof glob!="string"&&!isState)throw new TypeError("Expected pattern to be a non-empty string");let opts=options||{},posix5=opts.windows,regex=isState?picomatch4.compileRe(glob,options):picomatch4.makeRe(glob,options,!1,!0),state=regex.state;delete regex.state;let isIgnored=()=>!1;if(opts.ignore){let ignoreOpts={...options,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch4(opts.ignore,ignoreOpts,returnState)}let matcher=(input,returnObject=!1)=>{let{isMatch,match,output}=picomatch4.test(input,regex,options,{glob,posix:posix5}),result3={glob,state,regex,posix:posix5,input,output,match,isMatch};return typeof opts.onResult=="function"&&opts.onResult(result3),isMatch===!1?(result3.isMatch=!1,returnObject?result3:!1):isIgnored(input)?(typeof opts.onIgnore=="function"&&opts.onIgnore(result3),result3.isMatch=!1,returnObject?result3:!1):(typeof opts.onMatch=="function"&&opts.onMatch(result3),returnObject?result3:!0)};return returnState&&(matcher.state=state),matcher};picomatch4.test=(input,regex,options,{glob,posix:posix5}={})=>{if(typeof input!="string")throw new TypeError("Expected input to be a string");if(input==="")return{isMatch:!1,output:""};let opts=options||{},format2=opts.format||(posix5?utils.toPosixSlashes:null),match=input===glob,output=match&&format2?format2(input):input;return match===!1&&(output=format2?format2(input):input,match=output===glob),(match===!1||opts.capture===!0)&&(opts.matchBase===!0||opts.basename===!0?match=picomatch4.matchBase(input,regex,options,posix5):match=regex.exec(output)),{isMatch:!!match,match,output}};picomatch4.matchBase=(input,glob,options,posix5=options&&options.windows)=>(glob instanceof RegExp?glob:picomatch4.makeRe(glob,options)).test(utils.basename(input,{windows:posix5}));picomatch4.isMatch=(str3,patterns,options)=>picomatch4(patterns,options)(str3);picomatch4.parse=(pattern,options)=>Array.isArray(pattern)?pattern.map(p=>picomatch4.parse(p,options)):parse5(pattern,{...options,fastpaths:!1});picomatch4.scan=(input,options)=>scan2(input,options);picomatch4.compileRe=(state,options,returnOutput=!1,returnState=!1)=>{if(returnOutput===!0)return state.output;let opts=options||{},prepend=opts.contains?"":"^",append=opts.contains?"":"$",source=`${prepend}(?:${state.output})${append}`;state&&state.negated===!0&&(source=`^(?!${source}).*$`);let regex=picomatch4.toRegex(source,options);return returnState===!0&&(regex.state=state),regex};picomatch4.makeRe=(input,options={},returnOutput=!1,returnState=!1)=>{if(!input||typeof input!="string")throw new TypeError("Expected a non-empty string");let parsed={negated:!1,fastpaths:!0};return options.fastpaths!==!1&&(input[0]==="."||input[0]==="*")&&(parsed.output=parse5.fastpaths(input,options)),parsed.output||(parsed=parse5(input,options)),picomatch4.compileRe(parsed,options,returnOutput,returnState)};picomatch4.toRegex=(source,options)=>{try{let opts=options||{};return new RegExp(source,opts.flags||(opts.nocase?"i":""))}catch(err2){if(options&&options.debug===!0)throw err2;return/$^/}};picomatch4.constants=constants11;module.exports=picomatch4}});var require_picomatch2=__commonJS({"packages/coding-agent/node_modules/picomatch/index.js"(exports,module){"use strict";var pico=require_picomatch(),utils=require_utils();function picomatch4(glob,options,returnState=!1){return options&&(options.windows===null||options.windows===void 0)&&(options={...options,windows:utils.isWindows()}),pico(glob,options,returnState)}Object.assign(picomatch4,pico);module.exports=picomatch4}});import*as fs6 from"node:fs";import*as os6 from"node:os";import*as path12 from"node:path";import{spawn as spawn11,spawnSync}from"child_process";import{randomUUID as randomUUID12}from"node:crypto";import{existsSync as existsSync45,mkdirSync as mkdirSync27,readFileSync as readFileSync45,writeFileSync as writeFileSync23}from"node:fs";import{rm as rm9}from"node:fs/promises";import{dirname as dirname47}from"node:path";import{isDeepStrictEqual as isDeepStrictEqual4}from"node:util";var dist_exports2={};__export(dist_exports2,{AGENT_TELEMETRY_SCHEMAS:()=>AGENT_TELEMETRY_SCHEMAS,AI_TELEMETRY_SCHEMA:()=>AI_TELEMETRY_SCHEMA,Agent:()=>Agent,AgentHarness:()=>AgentHarness,BACKGROUND_CONTEXT:()=>BACKGROUND_CONTEXT,BRANCH_SUMMARY_PREFIX:()=>BRANCH_SUMMARY_PREFIX,BRANCH_SUMMARY_SUFFIX:()=>BRANCH_SUMMARY_SUFFIX,BranchSummaryError:()=>BranchSummaryError,COMPACTION_SUMMARY_PREFIX:()=>COMPACTION_SUMMARY_PREFIX,COMPACTION_SUMMARY_SUFFIX:()=>COMPACTION_SUMMARY_SUFFIX,Closed:()=>Closed,CompactionError:()=>CompactionError,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES2,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES2,EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC:()=>EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,ExecutionError:()=>ExecutionError,FileError:()=>FileError,GREP_MAX_LINE_LENGTH:()=>GREP_MAX_LINE_LENGTH,HARNESS_TELEMETRY_SCHEMA:()=>HARNESS_TELEMETRY_SCHEMA,HarnessClosed:()=>HarnessClosed,HarnessFault:()=>HarnessFault,InMemoryTelemetryContext:()=>InMemoryTelemetryContext,InvalidLane:()=>InvalidLane,InvalidMessage:()=>InvalidMessage,InvalidNavigation:()=>InvalidNavigation,InvalidReadSegmentsError:()=>InvalidReadSegmentsError,JSONL_STORAGE_VERSION:()=>JSONL_STORAGE_VERSION,JsonlSessionRepo:()=>JsonlSessionRepo,LaneBusy:()=>LaneBusy,MemorySessionRepo:()=>MemorySessionRepo,NOOP_TELEMETRY_CONTEXT:()=>NOOP_TELEMETRY_CONTEXT,NoActiveOperation:()=>NoActiveOperation,NoActiveRun:()=>NoActiveRun,NothingToCompact:()=>NothingToCompact,NothingToResume:()=>NothingToResume,OperationMismatch:()=>OperationMismatch,ProviderRetryWatchdogAbortError:()=>ProviderRetryWatchdogAbortError,READ_FOLDER_SELECTION:()=>READ_FOLDER_SELECTION,READ_FOLD_SETTINGS:()=>READ_FOLD_SETTINGS,Result:()=>Result,SessionBranchExistsError:()=>SessionBranchExistsError,SessionInvalidBranchError:()=>SessionInvalidBranchError,SessionInvariantError:()=>SessionInvariantError,SessionPendingAssistantMessageError:()=>SessionPendingAssistantMessageError,SessionUnknownTargetError:()=>SessionUnknownTargetError,SliceNotImplemented:()=>SliceNotImplemented,StorageBackedSession:()=>StorageBackedSession,StreamStartTimeoutError:()=>StreamStartTimeoutError,TODO_CONTEXT:()=>TODO_CONTEXT,TaggedError:()=>TaggedError,UnknownSkill:()=>UnknownSkill,UnknownTarget:()=>UnknownTarget,UnknownTemplate:()=>UnknownTemplate,agentLoop:()=>agentLoop,agentLoopContinue:()=>agentLoopContinue,appendList:()=>appendList,applyShellOutputUpdate:()=>applyShellOutputUpdate,awaitWithContext:()=>awaitWithContext,bashExecutionToText:()=>bashExecutionToText,branchTip:()=>branchTip,branchTipInventoryPrefix:()=>branchTipInventoryPrefix,buildProviderContext:()=>buildProviderContext,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,commitWrite:()=>commitWrite,compact:()=>compact,convertToLlm:()=>convertToLlm2,createBashTool:()=>createBashTool,createBranchSummaryMessage:()=>createBranchSummaryMessage2,createCompactionSummaryMessage:()=>createCompactionSummaryMessage2,createContextKey:()=>createContextKey,createCustomMessage:()=>createCustomMessage2,createDefaultReadSummary:()=>createDefaultReadSummary,createEditTool:()=>createEditTool,createForkSnapshot:()=>createForkSnapshot,createReadTool:()=>createReadTool,createSegmentedReadView:()=>createSegmentedReadView,createTypedSpanStarter:()=>createTypedSpanStarter,createWriteTool:()=>createWriteTool,defineTelemetrySchema:()=>defineTelemetrySchema,deleteList:()=>deleteList,deleteValue:()=>deleteValue,entryLabel:()=>entryLabel,err:()=>err,estimateContextTokens:()=>estimateContextTokens2,estimateTokens:()=>estimateTokens,executeShellWithCapture:()=>executeShellWithCapture,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatPromptTemplateInvocation:()=>formatPromptTemplateInvocation,formatSize:()=>formatSize2,formatSkillInvocation:()=>formatSkillInvocation,formatSkillsForSystemPrompt:()=>formatSkillsForSystemPrompt,generateBranchSummary:()=>generateBranchSummary,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,getLastAssistantUsage:()=>getLastAssistantUsage,getOrThrow:()=>getOrThrow,getOrUndefined:()=>getOrUndefined,getTelemetryContext:()=>getTelemetryContext,insertEntry:()=>insertEntry,insertUsage:()=>insertUsage,isReadSummaryPath:()=>isReadSummaryPath,laneConfig:()=>laneConfig,laneState:()=>laneState,languageForPath:()=>languageForPath,list:()=>list,loadPromptTemplates:()=>loadPromptTemplates,loadSkills:()=>loadSkills,loadSourcedPromptTemplates:()=>loadSourcedPromptTemplates,loadSourcedSkills:()=>loadSourcedSkills,matchError:()=>matchError,ok:()=>ok,operationMeta:()=>operationMeta,operationPreparation:()=>operationPreparation,operationPreparationPrefix:()=>operationPreparationPrefix,operationResult:()=>operationResult,operationScopeOf:()=>operationScopeOf,operationState:()=>operationState,operationToolArgs:()=>operationToolArgs,operationToolArgsPrefix:()=>operationToolArgsPrefix,operationToolMemo:()=>operationToolMemo,operationToolMemoPrefix:()=>operationToolMemoPrefix,parseCommandArgs:()=>parseCommandArgs,pendingAssistantFrames:()=>pendingAssistantFrames,pendingEntry:()=>pendingEntry,pendingToolOutput:()=>pendingToolOutput,pendingToolOutputPrefix:()=>pendingToolOutputPrefix,prepareAgentToolCall:()=>prepareAgentToolCall,prepareAgentToolCallArguments:()=>prepareAgentToolCallArguments,prepareBranchEntries:()=>prepareBranchEntries,prepareCompaction:()=>prepareCompaction,prepareReadFolder:()=>prepareReadFolder,prepareStorageCommit:()=>prepareStorageCommit,prepareToolArguments:()=>prepareToolArguments,projectForkCurrentStateWrite:()=>projectForkCurrentStateWrite,readSummaryEngineForPath:()=>readSummaryEngineForPath,reduceLaneSnapshot:()=>reduceLaneSnapshot,renderSegmentedReadView:()=>renderSegmentedReadView,resolveListReadOptions:()=>resolveListReadOptions,resolveToolNameAlias:()=>resolveToolNameAlias,runAgentLoop:()=>runAgentLoop,runAgentLoopContinue:()=>runAgentLoopContinue,sanitizeBinaryOutput:()=>sanitizeShellOutput,selectedReadFolder:()=>selectedReadFolder,serializeConversation:()=>serializeConversation,sessionName:()=>sessionName,setDefaultStreamFn:()=>setDefaultStreamFn,setValue:()=>setValue,shouldCompact:()=>shouldCompact,startAiSpan:()=>startAiSpan,startHarnessSpan:()=>startHarnessSpan,streamProxy:()=>streamProxy,substituteArgs:()=>substituteArgs,toError:()=>toError,truncateHead:()=>truncateHead2,truncateLine:()=>truncateLine2,truncateTail:()=>truncateTail2,utf8ByteLength:()=>utf8ByteLength,uuidv7:()=>uuidv7,validateCommittedWrites:()=>validateCommittedWrites,value:()=>value,withAbortSignal:()=>withAbortSignal,withCancel:()=>withCancel,withContextValue:()=>withContextValue,withTelemetryContext:()=>withTelemetryContext,withoutAbortSignal:()=>withoutAbortSignal});function startNoopSpan(_options,callback){try{return Promise.resolve(callback(noopTelemetrySpan))}catch(error2){return Promise.reject(error2)}}var noopTelemetrySpan={startSpan:startNoopSpan,addEvent:()=>{},setAttributes:()=>{},setStatus:()=>{}};Object.freeze(noopTelemetrySpan);var NOOP_TELEMETRY_CONTEXT=noopTelemetrySpan;function copyAttributeValue(value2){return Array.isArray(value2)?[...value2]:value2}function copyAttributes(attributes){let copy={};if(!attributes)return copy;for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(copy[name]=copyAttributeValue(value2));return copy}function mergeAttributes(current,attributes){let merged=copyAttributes(current);for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(merged[name]=copyAttributeValue(value2));return merged}function copyStatus(status){return status.status==="ok"?{status:"ok"}:status.error?{status:"error",error:{name:status.error.name,message:status.error.message}}:{status:"error"}}function automaticErrorStatus(error2){try{if(error2 instanceof Error)return{status:"error",error:{name:error2.name,message:error2.message}}}catch{}return{status:"error"}}function settleSpan(state,span,failed,error2){span.settled||(failed&&!span.explicitStatus&&(span.status=automaticErrorStatus(error2)),span.settled=!0,span.endSequence=state.nextEndSequence++)}function createSpan(state,parent,options){let name=options.name,attributes=copyAttributes(options.attributes);return{id:state.nextSpanId++,parentId:parent?.id??null,name,attributes,events:[],status:{status:"ok"},explicitStatus:!1,settled:!1}}function startInMemorySpan(state,parent,options,callback){if(parent?.settled)return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback);let recordedSpan;try{recordedSpan=createSpan(state,parent,options),state.spans.push(recordedSpan)}catch{return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback)}let span={startSpan:(childOptions,childCallback)=>startInMemorySpan(state,recordedSpan,childOptions,childCallback),addEvent(name,attributes){if(!recordedSpan.settled)try{recordedSpan.events.push({name,attributes:copyAttributes(attributes)})}catch{}},setAttributes(attributes){if(!recordedSpan.settled)try{recordedSpan.attributes=mergeAttributes(recordedSpan.attributes,attributes)}catch{}},setStatus(status){if(!recordedSpan.settled)try{recordedSpan.status=copyStatus(status),recordedSpan.explicitStatus=!0}catch{}}},result3;try{result3=callback(span)}catch(error2){return settleSpan(state,recordedSpan,!0,error2),Promise.reject(error2)}return Promise.resolve(result3).then(value2=>(settleSpan(state,recordedSpan,!1),value2),error2=>{throw settleSpan(state,recordedSpan,!0,error2),error2})}var InMemoryTelemetryContext=class{constructor(){this.state={spans:[],nextSpanId:1,nextEndSequence:1}}startSpan(options,callback){return startInMemorySpan(this.state,void 0,options,callback)}getSpans(){return this.state.spans.map(span=>({id:span.id,parentId:span.parentId,name:span.name,attributes:copyAttributes(span.attributes),events:span.events.map(event=>({name:event.name,attributes:copyAttributes(event.attributes)})),status:copyStatus(span.status),settled:span.settled,...span.endSequence===void 0?{}:{endSequence:span.endSequence}}))}};function defineTelemetrySchema(schema){return schema}function bindTypedSpanStarter(telemetryContext){return(name,attributes,callback)=>telemetryContext.startSpan({name,attributes},span=>callback(span,bindTypedSpanStarter(span)))}function createTypedSpanStarter(telemetryContext,_schemas){return bindTypedSpanStarter(telemetryContext)}var EMPTY_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ProviderRetryWatchdogAbortError=class extends Error{constructor(providerCause){super(providerCause),this.providerCause=providerCause,this.name="ProviderRetryWatchdogAbortError"}},EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC="empty_tool_use_terminal_state";function demoteToolUseWithoutToolCalls(message){return message.stopReason!=="toolUse"||message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"stop",diagnostics:[...message.diagnostics??[],{type:EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,timestamp:Date.now(),details:{}}]}}function promoteStopWithPendingToolCalls(message){return message.stopReason!=="stop"||!message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"toolUse"}}function shouldTerminateAssistantTurn(message){return message.stopReason==="error"||message.stopReason==="aborted"||isClassifierRefusal(message)}function isStreamIdleTimeoutError(error2){return error2 instanceof Error&&error2.name==="StreamIdleTimeoutError"}function shouldFinalizeIdleAsStop(partialMessage,providerToolResults){if(!partialMessage)return!1;let toolCalls=partialMessage.content.filter(block=>block.type==="toolCall");return toolCalls.length===0?!1:providerToolResults.length>0?!0:toolCalls.every(block=>isCursorExecResolved(block))}function createTerminalFailureAssistantMessage(model,reason,error2,partialMessage){let errorMessage8=error2 instanceof Error?error2.message:String(error2),providerDiagnostic=reason==="error"?readProviderDiagnostic(error2):void 0;return{role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??model.api,provider:partialMessage?.provider??model.provider,model:partialMessage?.model??model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??EMPTY_USAGE,stopReason:reason,errorMessage:errorMessage8||(reason==="aborted"?"Request was aborted":"Error"),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error2 instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:partialMessage?.timestamp??Date.now()}}function normalizeTerminalAssistantMessage(message,event){if(event.type==="done")return message;let errorMessage8=message.errorMessage??(event.reason==="aborted"?"Request was aborted":"Error");return message.stopReason===event.reason&&message.errorMessage===errorMessage8?message:{...message,stopReason:event.reason,errorMessage:errorMessage8}}function isEmptyStop(message){return message.stopReason==="stop"&&!hasVisibleAssistantContent(message)}function isEmptyToolUse(message){return message.stopReason==="toolUse"&&!message.content.some(block=>block.type==="toolCall")}function isMeaningfulContentEvent(event,policy){switch(event.type){case"toolcall_start":return!0;case"text_delta":return hasVisibleText(event.delta);case"text_end":return hasVisibleText(event.content);case"thinking_delta":return policy.thinkingCommits&&hasVisibleText(event.delta);case"thinking_end":return policy.thinkingCommits&&hasVisibleText(event.content);default:return!1}}function appendRetryDiagnostic(message,type2="empty_assistant_response_recovery",details={retries:1}){return{...message,diagnostics:[...message.diagnostics??[],{type:type2,timestamp:Date.now(),details}]}}function recoveryDiagnosticType(toolUse){return toolUse?"empty_tool_use_response_recovery":"empty_assistant_response_recovery"}function createEmptyResponseFailure(message,toolUse=!1){let errorMessage8=toolUse?EMPTY_TOOL_USE_ERROR:EMPTY_RESPONSE_ERROR;return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse)),content:[{type:"text",text:errorMessage8}],stopReason:"error",errorMessage:errorMessage8}}function createForwardedEmptyFailure(message,toolUse){return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse),{retries:0,forwarded:!0}),stopReason:"error",errorMessage:toolUse?FORWARDED_EMPTY_TOOL_USE_ERROR:FORWARDED_EMPTY_RESPONSE_ERROR}}function createRetryingStream(firstStream,createStream,policy){let outerStream=createAssistantMessageEventStream();return(async()=>{try{let stream2=firstStream,retrying=!1;for(;;){let buffered=[],forwarding=!1,retry=!1;for await(let event of stream2){if(event.type==="done"){let emptyToolUse=isEmptyToolUse(event.message);if(isEmptyStop(event.message)||emptyToolUse){if(forwarding){outerStream.push({type:"error",reason:"error",error:createForwardedEmptyFailure(event.message,emptyToolUse)}),outerStream.end();return}if(!retrying){retry=!0;break}let error2=createEmptyResponseFailure(event.message,emptyToolUse);outerStream.push({type:"error",reason:"error",error:error2}),outerStream.end();return}let terminal=retrying?{...event,message:appendRetryDiagnostic(event.message,recoveryDiagnosticType(isEmptyToolUse(event.message)))}:event;if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(terminal),outerStream.end();return}if(event.type==="error"){if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(event),outerStream.end();return}if(forwarding){outerStream.push(event);continue}if(buffered.push(event),isMeaningfulContentEvent(event,policy)){for(let pending of buffered)outerStream.push(pending);forwarding=!0}}if(!retry){outerStream.end(retrying?appendRetryDiagnostic(await stream2.result()):await stream2.result());return}retrying=!0,stream2=await createStream()}}catch(error2){outerStream.fail(error2)}})(),outerStream}function withEmptyAssistantRecovery(model,streamFunction){if(!shouldRecoverTextToolCalls(model)&&getToolCallFormat(model)===void 0)return streamFunction;let policy={thinkingCommits:!hasKimiTextToolCallRecovery(model)};return async(requestedModel,context,options)=>{let createStream=()=>streamFunction(requestedModel,context,options);return createRetryingStream(await createStream(),createStream,policy)}}var defaultStreamFn;function setDefaultStreamFn(streamFn){defaultStreamFn=streamFn}function getDefaultStreamFn(){if(!defaultStreamFn)throw new Error("No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().");return defaultStreamFn}function prepareToolArguments(shim,args){return shim?shim(structuredClone(args)):args}function prepareAgentToolCallArguments(tool,toolCall){return tool.prepareArguments?{...toolCall,arguments:prepareToolArguments(tool.prepareArguments,toolCall.arguments)}:toolCall}function resolveToolNameAlias(requested,available){return resolveToolNameMatch(requested,available)}function toolNameCorrectionNotice(requested,resolved){return`[auto-corrected] no tool is named "${requested}"; ran "${resolved}". Call tools by their exact listed name.`}async function resolveCallTool(currentContext,toolCall,config){if(toolCall.incomplete===!0)return;let exact=currentContext.tools?.find(candidate=>candidate.name===toolCall.name);if(exact)return exact;let resolved=await config.resolveUnknownToolCall?.(toolCall.name,currentContext);if(resolved)return resolved;let aliasedName=resolveToolNameAlias(toolCall.name,(currentContext.tools??[]).map(candidate=>candidate.name));return currentContext.tools?.find(candidate=>candidate.name===aliasedName)}function withToolNameCorrection(result3,requestedName,resolvedName){return{...result3,content:[{type:"text",text:toolNameCorrectionNotice(requestedName,resolvedName),audience:"model"},...result3.content??[]]}}function agentLoop(prompts,context,config,signal,streamFn){let stream2=createAgentStream();return runAgentLoop(prompts,context,config,async event=>{stream2.push(event)},signal,streamFn).then(messages=>{stream2.end(messages)}),stream2}function agentLoopContinue(context,config,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let stream2=createAgentStream();return runAgentLoopContinue(context,config,async event=>{stream2.push(event)},signal,streamFn).then(messages=>{stream2.end(messages)}),stream2}async function runAgentLoop(prompts,context,config,emit,signal,streamFn){let newMessages=[...prompts],currentContext={...context,messages:[...context.messages,...prompts]};await emit({type:"agent_start"}),await emit({type:"turn_start"});for(let prompt of prompts)await emit({type:"message_start",message:prompt}),await emit({type:"message_end",message:prompt});return await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}async function runAgentLoopContinue(context,config,emit,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let newMessages=[],currentContext={...context};return await emit({type:"agent_start"}),await emit({type:"turn_start"}),await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}function createAgentStream(){return new EventStream(event=>event.type==="agent_end",event=>event.type==="agent_end"?event.messages:[])}var StreamIdleTimeoutError=class extends Error{constructor(timeoutMs){super(`Idle timeout waiting for provider stream after ${timeoutMs}ms`),this.name="StreamIdleTimeoutError"}},StreamStartTimeoutError=class extends Error{constructor(timeoutMs){super(`Provider stream start timed out after ${timeoutMs}ms (raise streamStartTimeoutMs \u2014 retry.provider.streamStartTimeoutMs in senpi settings; 0 disables)`),this.name="StreamStartTimeoutError"}};async function runLoop(initialContext,newMessages,initialConfig,signal,emit,streamFunction){let currentContext=initialContext,config=initialConfig,firstTurn=!0,firstProviderRequest=!0,drainedTerminatingQueue,turnStartAlreadyEmitted=!1,refreshTerminatingQueueDrain=async()=>{!drainedTerminatingQueue||!config.restorePendingMessages||(await config.restorePendingMessages(drainedTerminatingQueue,pendingMessages),pendingMessages=await config.getSteeringMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"steering":void 0,pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"followUp":void 0))},pendingMessages=await config.getSteeringMessages?.()||[];for(;;){let hasMoreToolCalls=!0;for(;hasMoreToolCalls||pendingMessages.length>0;){if(turnStartAlreadyEmitted?turnStartAlreadyEmitted=!1:firstTurn?firstTurn=!1:await emit({type:"turn_start"}),drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}if(pendingMessages.length>0){for(let message2 of pendingMessages)await emit({type:"message_start",message:message2}),await emit({type:"message_end",message:message2}),currentContext.messages.push(message2),newMessages.push(message2);pendingMessages=[]}let isInitialProviderRequest=firstProviderRequest;firstProviderRequest=!1;let requestConfig=isInitialProviderRequest?{...config,timeoutMs:config.initialRequestTimeoutMs??config.timeoutMs,streamStartTimeoutMs:config.initialRequestStreamStartTimeoutMs??config.streamStartTimeoutMs}:config,streamed=await streamAssistantResponse(currentContext,requestConfig,signal,emit,withEmptyAssistantRecovery(requestConfig.model,streamFunction),isInitialProviderRequest?config.timeoutMs:requestConfig.timeoutMs),message=demoteToolUseWithoutToolCalls(promoteStopWithPendingToolCalls(streamed.message)),providerToolResults=streamed.providerToolResults;newMessages.push(message);let toolResults=[];for(let result3 of providerToolResults)await emit({type:"message_start",message:result3}),await emit({type:"message_end",message:result3}),currentContext.messages.push(result3),newMessages.push(result3),toolResults.push(result3);if(shouldTerminateAssistantTurn(message)){await emit({type:"turn_end",message,toolResults}),await emit({type:"agent_end",messages:newMessages});return}let toolCalls=message.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));hasMoreToolCalls=!1;let toolBatchTerminated=!1;if(toolCalls.length>0){let executedToolBatch=message.stopReason==="length"?await failToolCallsFromTruncatedMessage(toolCalls,emit):await executeToolCalls(currentContext,message,config,signal,emit);toolResults.push(...executedToolBatch.messages),toolBatchTerminated=executedToolBatch.terminate,hasMoreToolCalls=!executedToolBatch.terminate;for(let result3 of executedToolBatch.messages)currentContext.messages.push(result3),newMessages.push(result3)}if(await emit({type:"turn_end",message,toolResults}),signal?.aborted){await emit({type:"agent_end",messages:newMessages});return}let nextTurnContext={message,toolResults,context:currentContext,newMessages};if(await config.shouldStopAfterTurn?.(nextTurnContext)){await emit({type:"agent_end",messages:newMessages});return}if(toolBatchTerminated){if(pendingMessages=await config.getSteeringMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="steering"),pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="followUp")),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}await emit({type:"turn_start"}),turnStartAlreadyEmitted=!0}let nextTurnSnapshot;try{nextTurnSnapshot=await config.prepareNextTurn?.(nextTurnContext)}catch(error2){throw drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),error2}if(nextTurnSnapshot&&(currentContext=nextTurnSnapshot.context??currentContext,config={...config,model:nextTurnSnapshot.model??config.model,reasoning:nextTurnSnapshot.thinkingLevel===void 0?config.reasoning:nextTurnSnapshot.thinkingLevel==="off"?void 0:nextTurnSnapshot.thinkingLevel,thinkingSelection:nextTurnSnapshot.thinkingSelection===void 0?config.thinkingSelection:nextTurnSnapshot.thinkingSelection??void 0,abortServerSideFallback:nextTurnSnapshot.abortServerSideFallback??config.abortServerSideFallback}),signal?.aborted){drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),await emit({type:"agent_end",messages:newMessages});return}if(drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}toolBatchTerminated||(pendingMessages=await config.getSteeringMessages?.()||[])}let followUpMessages=await config.getFollowUpMessages?.()||[];if(followUpMessages.length>0){pendingMessages=followUpMessages;continue}break}await emit({type:"agent_end",messages:newMessages})}function providerTools(context,model){let declaredTools=context.declaredTools;if(declaredTools===void 0||model===void 0||!supportsAllowedToolChoice(model))return{tools:context.tools};let activeTools=context.tools??[],declaredNames=new Set(declaredTools.map(tool=>tool.name));return{tools:[...declaredTools,...activeTools.filter(tool=>!declaredNames.has(tool.name))],activeToolNames:activeTools.map(tool=>tool.name)}}async function buildProviderContext(context,config,signal){let messages=context.messages;return config.transformContext&&(messages=await config.transformContext(messages,signal)),{systemPrompt:context.systemPrompt,messages:await config.convertToLlm(messages),...providerTools(context,config.model)}}async function streamAssistantResponse(context,config,signal,emit,streamFunction,streamIdleTimeoutMs){let partialMessage=null,addedPartial=!1,providerToolResults=[],thinkingTiming=new Map;function propagateThinkingTiming(finalMessage){for(let timing of thinkingTiming.values())timing.endedAt===void 0&&(timing.endedAt=Date.now());for(let[contentIndex,timing]of thinkingTiming){let block=finalMessage.content[contentIndex];block?.type==="thinking"&&(block.startedAt=timing.startedAt,block.endedAt=timing.endedAt)}}let requestAbortController=new AbortController,detachCallerAbort;if(signal!==void 0)if(signal.aborted)requestAbortController.abort(signal.reason);else{let onCallerAbort=()=>requestAbortController.abort(signal.reason);signal.addEventListener("abort",onCallerAbort,{once:!0}),detachCallerAbort=()=>signal.removeEventListener("abort",onCallerAbort)}try{let llmContext=await buildProviderContext(context,config,signal),resolvedApiKey=(config.getApiKey?await config.getApiKey(config.model.provider):void 0)||config.apiKey,response=await streamFunction(config.model,llmContext,{...config,streamKind:"main",apiKey:resolvedApiKey,signal:requestAbortController.signal,...config.cursorExecHandlers?{execHandlers:typeof config.cursorExecHandlers=="function"?config.cursorExecHandlers(signal??requestAbortController.signal):config.cursorExecHandlers,onToolResult:result3=>{providerToolResults.push(result3)}}:{}}),iterator=response[Symbol.asyncIterator](),eventReader=createAssistantEventReader(iterator,streamIdleTimeoutMs,requestAbortController.signal,error2=>requestAbortController.abort(error2),config.streamStartTimeoutMs,response);try{for(;;){let next=await eventReader.next();if(next.done)break;let event=next.value;switch(event.type){case"start":partialMessage=event.partial,context.messages.push(partialMessage),addedPartial=!0,await emit({type:"message_start",message:{...partialMessage}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":if(partialMessage){if(partialMessage=event.partial,event.type==="thinking_start"||event.type==="thinking_delta"||event.type==="thinking_end"){let timing=thinkingTiming.get(event.contentIndex);event.type==="thinking_start"&&timing===void 0&&(timing={startedAt:Date.now()},thinkingTiming.set(event.contentIndex,timing)),event.type==="thinking_end"&&timing!==void 0&&(timing.endedAt=Date.now());let block=partialMessage.content[event.contentIndex];block?.type==="thinking"&&timing!==void 0&&(block.startedAt=timing.startedAt,timing.endedAt!==void 0&&(block.endedAt=timing.endedAt))}context.messages[context.messages.length-1]=partialMessage,await emit({type:"message_update",assistantMessageEvent:event,message:{...partialMessage}})}break;case"done":case"error":{let finalMessage2=normalizeTerminalAssistantMessage(await response.result(),event);return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:context.messages.push(finalMessage2),addedPartial||await emit({type:"message_start",message:{...finalMessage2}}),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}}}}finally{eventReader.dispose()}let finalMessage=await response.result();return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}catch(error2){if(isStreamIdleTimeoutError(error2)&&shouldFinalizeIdleAsStop(partialMessage,providerToolResults)){let finalMessage2={role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??config.model.api,provider:partialMessage?.provider??config.model.provider,model:partialMessage?.model??config.model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:partialMessage?.timestamp??Date.now()};return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:(context.messages.push(finalMessage2),await emit({type:"message_start",message:{...finalMessage2}})),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}let finalMessage=createTerminalFailureAssistantMessage(config.model,signal?.aborted?"aborted":"error",error2,partialMessage);return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}finally{requestAbortController.abort(),detachCallerAbort?.()}}var ABORTED=Symbol("aborted");function abortError(reason){return reason instanceof Error?reason:new Error("Request was aborted")}function closeAssistantIterator(iterator){Promise.resolve(iterator.return?.()).catch(()=>{})}function normalizeTimeoutMs(timeoutMs){return typeof timeoutMs=="number"&&Number.isFinite(timeoutMs)&&timeoutMs>0?timeoutMs:void 0}function createAssistantEventReader(iterator,timeoutMs,signal,onIdleTimeout,streamStartTimeoutMs,stream2){let idleTimeoutMs=normalizeTimeoutMs(timeoutMs),startTimeoutMs=normalizeTimeoutMs(streamStartTimeoutMs),sawFirstEvent=!1,removeAbortListener2,abortPromise;return signal!==void 0&&(signal.aborted?abortPromise=Promise.resolve(ABORTED):abortPromise=new Promise(resolve42=>{let abortHandler=()=>resolve42(ABORTED);signal.addEventListener("abort",abortHandler,{once:!0}),removeAbortListener2=()=>signal.removeEventListener("abort",abortHandler)})),{next:async()=>{if(signal?.aborted)return closeAssistantIterator(iterator),Promise.reject(abortError(signal.reason));let useStartBound=!sawFirstEvent&&startTimeoutMs!==void 0,result3=await readNextAssistantEvent(iterator,useStartBound?startTimeoutMs:idleTimeoutMs,useStartBound?ms=>new StreamStartTimeoutError(ms):ms=>new StreamIdleTimeoutError(ms),abortPromise,onIdleTimeout,stream2,signal);return result3.done||(sawFirstEvent=!0),result3},dispose:()=>removeAbortListener2?.()}}async function readNextAssistantEvent(iterator,idleTimeoutMs,makeTimeoutError,abortPromise,onIdleTimeout,stream2,signal){if(idleTimeoutMs===void 0&&abortPromise===void 0)return iterator.next();let timeout,settled=!1;return new Promise((resolve42,reject)=>{let settle=complete=>{settled||(settled=!0,timeout!==void 0&&clearTimeout(timeout),complete())};if(idleTimeoutMs!==void 0){let onIdleDeadline=()=>{if(stream2?.hasPendingLocalWork?.()){timeout=setTimeout(onIdleDeadline,idleTimeoutMs);return}let error2=makeTimeoutError(idleTimeoutMs);closeAssistantIterator(iterator),settle(()=>reject(error2)),onIdleTimeout?.(error2)};timeout=setTimeout(onIdleDeadline,idleTimeoutMs)}(abortPromise?Promise.race([iterator.next(),abortPromise]):iterator.next()).then(result3=>{if(result3===ABORTED){closeAssistantIterator(iterator),settle(()=>reject(abortError(signal?.reason)));return}settle(()=>resolve42(result3))},error2=>settle(()=>reject(error2)))})}function createIncompleteToolCallErrorMessage(toolName,errorMessage8){return errorMessage8!==void 0?`${errorMessage8}${errorMessage8.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${toolName}" was not executed: the response ended before the tool call was complete because it hit the output token limit. Re-issue the tool call with complete arguments.`}async function failToolCallsFromTruncatedMessage(toolCalls,emit){let messages=[];for(let toolCall of toolCalls){await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments});let finalized={toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name)),isError:!0};await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:!1}}async function executeToolCalls(currentContext,assistantMessage,config,signal,emit){let toolCalls=assistantMessage.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));return config.toolExecution==="sequential"?executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit):executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit)}async function executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],messages=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),finalized;if(preparation.kind==="immediate")finalized={toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};else{let executed=await executePreparedToolCall(preparation,signal,emit);finalized=await finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);if(await emitToolResultMessage(toolResultMessage,emit),finalizedCalls.push(finalized),messages.push(toolResultMessage),signal?.aborted)break}return{messages,terminate:shouldTerminateToolBatch(finalizedCalls)}}async function executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],preparedCalls=[],lastSequentialCall,currentParallelWave=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),isSequential=isSequentialToolCall(currentContext,preparation.toolCall),dependencies=isSequential?[...lastSequentialCall?[lastSequentialCall]:[],...currentParallelWave]:lastSequentialCall?[lastSequentialCall]:[];if(preparedCalls.push({preparation,isSequential,dependencies}),isSequential?(lastSequentialCall=void 0,currentParallelWave=[]):currentParallelWave.push(Promise.resolve(void 0)),signal?.aborted)break}let previousSequential,previousWave=[];for(let{preparation,isSequential}of preparedCalls){let dependencies=isSequential?[...previousSequential?[previousSequential]:[],...previousWave]:previousSequential?[previousSequential]:[],finalizedCall=(async()=>{await Promise.all(dependencies);let finalized=signal?.aborted?{toolCall:preparation.toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:await runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit);return await emitToolExecutionEnd(finalized,emit),finalized})();finalizedCalls.push(finalizedCall),isSequential?(previousSequential=finalizedCall,previousWave=[]):previousWave.push(finalizedCall)}let orderedFinalizedCalls=await Promise.all(finalizedCalls),messages=[];for(let finalized of orderedFinalizedCalls){let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:shouldTerminateToolBatch(orderedFinalizedCalls)}}async function runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit){if(preparation.kind==="immediate")return{toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,emit);return finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}function isSequentialToolCall(currentContext,toolCall){return currentContext.tools?.find(tool=>tool.name===toolCall.name)?.executionMode==="sequential"}function shouldTerminateToolBatch(finalizedCalls){return finalizedCalls.length>0&&finalizedCalls.every(finalized=>finalized.result.terminate===!0)}function prepareAgentToolCall(tool,toolCall){let preparedToolCall=prepareAgentToolCallArguments(tool,toolCall);return{toolCall:preparedToolCall,tool,args:validateToolArguments(tool,preparedToolCall)}}async function prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){if(toolCall.incomplete===!0)return{kind:"immediate",toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name,toolCall.errorMessage)),isError:!0};if(!tool){let hint=config.removedToolHints?.[toolCall.name];return{kind:"immediate",toolCall,result:createErrorToolResult(hint===void 0?`Tool ${toolCall.name} not found`:`Tool ${toolCall.name} not found. ${hint}`),isError:!0}}if(tool.name!==toolCall.name){let requestedName=toolCall.name,outcome=await prepareResolvedToolCall(currentContext,assistantMessage,{...toolCall,name:tool.name},tool,config,signal);return outcome.kind==="prepared"?{...outcome,requestedName}:{...outcome,result:withToolNameCorrection(outcome.result,requestedName,tool.name)}}return prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal)}async function prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){try{let preparedToolCall=prepareAgentToolCall(tool,toolCall),validatedArgs=preparedToolCall.args;if(config.beforeToolCall){let beforeResult=await config.beforeToolCall({assistantMessage,toolCall:preparedToolCall.toolCall,args:validatedArgs,context:currentContext},signal);if(signal?.aborted)return{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0};if(beforeResult?.block){let result3=createErrorToolResult(beforeResult.reason||"Tool execution was blocked");return beforeResult.terminate===!0&&(result3.terminate=!0),{kind:"immediate",toolCall,result:result3,isError:!0}}}return signal?.aborted?{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:{kind:"prepared",toolCall:preparedToolCall.toolCall,tool,args:validatedArgs}}catch(error2){return{kind:"immediate",toolCall,result:createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError:!0}}}function abortReleasePromise(signal){if(signal!==void 0)return signal.aborted?Promise.resolve(ABORTED):new Promise(resolve42=>{signal.addEventListener("abort",()=>resolve42(ABORTED),{once:!0})})}async function executePreparedToolCall(prepared,signal,emit){let updateEvents=[],acceptingUpdates=!0;try{let execution=prepared.tool.execute(prepared.toolCall.id,prepared.args,signal,partialResult=>{acceptingUpdates&&updateEvents.push(Promise.resolve(emit({type:"tool_execution_update",toolCallId:prepared.toolCall.id,toolName:prepared.toolCall.name,args:prepared.toolCall.arguments,partialResult})))}),abortRelease=abortReleasePromise(signal),settled=abortRelease?await Promise.race([execution,abortRelease]):await execution;return settled===ABORTED?(Promise.resolve(execution).catch(()=>{}),acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult("Tool execution aborted"),isError:!0}):(acceptingUpdates=!1,await Promise.all(updateEvents),{result:settled,isError:settled.isError===!0})}catch(error2){return acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError:!0}}finally{acceptingUpdates=!1}}async function finalizeExecutedToolCall(currentContext,assistantMessage,prepared,executed,config,signal){let result3=executed.result,isError=executed.isError;if(config.afterToolCall)try{let afterResult=await config.afterToolCall({assistantMessage,toolCall:prepared.toolCall,args:prepared.args,result:result3,isError,context:currentContext},signal);afterResult&&(result3={...result3,content:afterResult.content??result3.content,details:afterResult.details??result3.details,usage:afterResult.usage??result3.usage,terminate:afterResult.terminate??result3.terminate},isError=afterResult.isError??isError)}catch(error2){result3=createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError=!0}return prepared.requestedName!==void 0&&(result3=withToolNameCorrection(result3,prepared.requestedName,prepared.toolCall.name)),{toolCall:prepared.toolCall,result:result3,isError}}function createErrorToolResult(message){return{content:[{type:"text",text:message}],details:{}}}async function emitToolExecutionEnd(finalized,emit){await emit({type:"tool_execution_end",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,result:finalized.result,isError:finalized.isError})}function createToolResultMessage(finalized){return{role:"toolResult",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,content:finalized.result.content??[],details:finalized.result.details,usage:finalized.result.usage,...finalized.result.addedToolNames?.length?{addedToolNames:finalized.result.addedToolNames}:{},isError:finalized.isError,timestamp:Date.now()}}async function emitToolResultMessage(toolResultMessage,emit){await emit({type:"message_start",message:toolResultMessage}),await emit({type:"message_end",message:toolResultMessage})}function defaultConvertToLlm(messages){return messages.filter(message=>message.role==="user"||message.role==="assistant"||message.role==="toolResult")}var EMPTY_USAGE2={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},DEFAULT_MODEL={id:"unknown",name:"unknown",api:"unknown",provider:"unknown",baseUrl:"",reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function createMutableAgentState(initialState){let tools=initialState?.tools?.slice()??[],messages=initialState?.messages?.slice()??[];return{systemPrompt:initialState?.systemPrompt??"",model:initialState?.model??DEFAULT_MODEL,thinkingLevel:initialState?.thinkingLevel??"off",reasoningBaseline:initialState?.reasoningBaseline,get tools(){return tools},set tools(nextTools){tools=nextTools.slice()},get messages(){return messages},set messages(nextMessages){messages=nextMessages.slice()},declaredTools:initialState?.declaredTools?.slice(),isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0,providerDiagnostic:void 0}}var PendingMessageQueue=class{constructor(mode){this.messages=[],this.clearGeneration=0,this.mode=mode}enqueue(message){this.messages.push(message)}hasItems(){return this.messages.length>0}getClearGeneration(){return this.clearGeneration}drain(){if(this.mode==="all"){let drained=this.messages.slice();return this.messages=[],drained}let first=this.messages[0];return first?(this.messages=this.messages.slice(1),[first]):[]}prepend(messages){this.messages=[...messages,...this.messages]}clear(){this.messages=[],this.clearGeneration++}},Agent=class{async buildProviderContext(context,signal){return buildProviderContext(context,{convertToLlm:this.convertToLlm,transformContext:this.transformContext,model:this._state.model},signal)}constructor(options){this.listeners=new Set;let runtimeOptions=options??{};this._state=createMutableAgentState(runtimeOptions.initialState),this.convertToLlm=runtimeOptions.convertToLlm??defaultConvertToLlm,this.transformContext=runtimeOptions.transformContext,this.streamFunction=runtimeOptions.streamFn??getDefaultStreamFn(),this.getApiKey=runtimeOptions.getApiKey,this.onPayload=runtimeOptions.onPayload,this.onResponse=runtimeOptions.onResponse,this.beforeToolCall=runtimeOptions.beforeToolCall,this.afterToolCall=runtimeOptions.afterToolCall,this.shouldStopAfterTurn=runtimeOptions.shouldStopAfterTurn,this.prepareNextTurn=runtimeOptions.prepareNextTurn,this.prepareNextTurnWithContext=runtimeOptions.prepareNextTurnWithContext,this.steeringQueue=new PendingMessageQueue(runtimeOptions.steeringMode??"one-at-a-time"),this.followUpQueue=new PendingMessageQueue(runtimeOptions.followUpMode??"one-at-a-time"),this.sessionId=runtimeOptions.sessionId,this.thinkingBudgets=runtimeOptions.thinkingBudgets,this.transport=runtimeOptions.transport??"auto",this.timeoutMs=runtimeOptions.timeoutMs,this.streamStartTimeoutMs=runtimeOptions.streamStartTimeoutMs,this.maxRetryDelayMs=runtimeOptions.maxRetryDelayMs,this.toolExecution=runtimeOptions.toolExecution??"parallel",this.removedToolHints=runtimeOptions.removedToolHints??{},this.resolveUnknownToolCall=runtimeOptions.resolveUnknownToolCall,this.abortServerSideFallback=runtimeOptions.abortServerSideFallback,this.cursorExecHandlers=runtimeOptions.cursorExecHandlers}subscribe(listener){return this.listeners.add(listener),()=>this.listeners.delete(listener)}get state(){return this._state}set steeringMode(mode){this.steeringQueue.mode=mode}get steeringMode(){return this.steeringQueue.mode}set followUpMode(mode){this.followUpQueue.mode=mode}get followUpMode(){return this.followUpQueue.mode}steer(message){this.steeringQueue.enqueue(message)}followUp(message){this.followUpQueue.enqueue(message)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(reason){this.activeRun?.abortController.abort(reason)}suppressQueuedMessageDrain(){this.activeRun&&(this.activeRun.suppressQueuedMessageDrain=!0)}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before resetting.");this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(input,images){if(this.activeRun)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");let messages=this.normalizePromptInput(input,images);await this.runPromptMessages(messages)}async continueWithQueuedMessages(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");if(this._state.messages[this._state.messages.length-1]?.role==="assistant"){await this.continue(options);return}let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}await this.continue(options)}async continue(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");let lastMessage=this._state.messages[this._state.messages.length-1];if(!lastMessage)throw new Error("No messages to continue from");if(lastMessage.role==="assistant"){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}throw new Error("Cannot continue from message role: assistant")}await this.runContinuation(options)}normalizePromptInput(input,images){if(Array.isArray(input))return input;if(typeof input!="string")return[input];let content=[{type:"text",text:input}];return images&&images.length>0&&content.push(...images),[{role:"user",content,timestamp:Date.now()}]}async runPromptMessages(messages,options={}){await this.runWithLifecycle(async signal=>{await runAgentLoop(messages,this.createContextSnapshot(),this.createLoopConfig(options),event=>this.processEvents(event),signal,this.streamFunction)})}async runContinuation(options={}){await this.runWithLifecycle(async signal=>{await runAgentLoopContinue(this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:options.deferQueuedMessages,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs}),event=>this.processEvents(event),signal,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice(),...this._state.declaredTools?{declaredTools:this._state.declaredTools.slice()}:{}}}createLoopConfig(options={}){let skipInitialSteeringPoll=options.skipInitialSteeringPoll===!0,steeringQueueGeneration=this.steeringQueue.getClearGeneration(),followUpQueueGeneration=this.followUpQueue.getClearGeneration(),shouldStopAfterTurn=this.shouldStopAfterTurn,reasoning=this._state.reasoningBaseline??this._state.thinkingLevel;return{model:this._state.model,reasoning:reasoning==="off"?void 0:reasoning,thinkingSelection:this._state.thinkingSelection,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,timeoutMs:this.timeoutMs,streamStartTimeoutMs:this.streamStartTimeoutMs,initialRequestTimeoutMs:options.initialRequestTimeoutMs,initialRequestStreamStartTimeoutMs:options.initialRequestStreamStartTimeoutMs,maxRetryDelayMs:this.maxRetryDelayMs,abortServerSideFallback:this.abortServerSideFallback,cursorExecHandlers:this.cursorExecHandlers,toolExecution:this.toolExecution,removedToolHints:this.removedToolHints,resolveUnknownToolCall:this.resolveUnknownToolCall,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,shouldStopAfterTurn:shouldStopAfterTurn?async context=>await shouldStopAfterTurn(context,this.signal):void 0,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async context=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(context,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>skipInitialSteeringPoll?(skipInitialSteeringPoll=!1,[]):(steeringQueueGeneration=this.steeringQueue.getClearGeneration(),this.steeringQueue.drain()),getFollowUpMessages:async()=>(followUpQueueGeneration=this.followUpQueue.getClearGeneration(),this.followUpQueue.drain()),restorePendingMessages:(queue,messages)=>{if(queue==="steering"){if(this.steeringQueue.getClearGeneration()!==steeringQueueGeneration)return;this.steeringQueue.prepend(messages);return}this.followUpQueue.getClearGeneration()===followUpQueueGeneration&&this.followUpQueue.prepend(messages)}}}async runWithLifecycle(executor){if(this.activeRun)throw new Error("Agent is already processing.");let abortController=new AbortController,resolvePromise=()=>{},promise=new Promise(resolve42=>{resolvePromise=resolve42});this.activeRun={promise,resolve:resolvePromise,abortController,suppressQueuedMessageDrain:!1},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0;try{for(await executor(abortController.signal);!abortController.signal.aborted&&!this.activeRun?.suppressQueuedMessageDrain&&this.canDrainQueuedMessagesAfterRun()&&this.hasQueuedMessages();)await this.runQueuedMessagesAfterAgentEnd(abortController.signal)}catch(error2){await this.handleRunFailure(error2,abortController.signal.aborted)}finally{this.finishRun()}}canDrainQueuedMessagesAfterRun(){let lastMessage=this._state.messages[this._state.messages.length-1];return lastMessage?.role!=="assistant"||lastMessage.stopReason!=="error"&&lastMessage.stopReason!=="aborted"}async runQueuedMessagesAfterAgentEnd(signal){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await runAgentLoop(queuedSteering,this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:!0}),event=>this.processEvents(event),signal,this.streamFunction);return}let queuedFollowUps=this.followUpQueue.drain();queuedFollowUps.length!==0&&await runAgentLoop(queuedFollowUps,this.createContextSnapshot(),this.createLoopConfig(),event=>this.processEvents(event),signal,this.streamFunction)}async handleRunFailure(error2,aborted){let providerDiagnostic=aborted?void 0:readProviderDiagnostic(error2),failureMessage={role:"assistant",content:[{type:"text",text:""}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:EMPTY_USAGE2,stopReason:aborted?"aborted":"error",errorMessage:error2 instanceof Error?error2.message:String(error2),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error2 instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:Date.now()};await this.processEvents({type:"message_start",message:failureMessage}),await this.processEvents({type:"message_end",message:failureMessage}),await this.processEvents({type:"turn_end",message:failureMessage,toolResults:[]}),await this.processEvents({type:"agent_end",messages:[failureMessage]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(event){switch(event.type){case"message_start":this._state.streamingMessage=event.message;break;case"message_update":this._state.streamingMessage=event.message;break;case"message_end":this._state.streamingMessage=void 0,this._state.messages.push(event.message);break;case"tool_execution_start":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.add(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"tool_execution_end":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.delete(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"turn_end":event.message.role==="assistant"&&event.message.errorMessage&&(this._state.errorMessage=event.message.errorMessage,this._state.providerDiagnostic=sanitizeProviderDiagnostic(event.message.providerDiagnostic));break;case"agent_end":this._state.streamingMessage=void 0;break}let signal=this.activeRun?.abortController.signal;if(!signal)throw new Error("Agent listener invoked outside active run");for(let listener of this.listeners)await listener(event,signal)}async emitExternalEvent(event,runSignal){let activeSignal=this.activeRun?.abortController.signal;!activeSignal||runSignal&&runSignal!==activeSignal||await this.processEvents(event)}};var Result={ok(value2){return{ok:!0,value:value2}},err(error2){return{ok:!1,error:error2}},isOk(result3){return result3.ok},isErr(result3){return!result3.ok}};function TaggedError(tag){class TaggedErrorClass extends Error{constructor(props){super(props.message),this._tag=tag,this.name=tag,Object.assign(this,props)}toJSON(){let payload={};for(let key of Object.keys(this))key!=="_tag"&&(payload[key]=this[key]);return{_tag:tag,message:this.message,...payload}}static is(value2){return value2 instanceof TaggedErrorClass}}return TaggedErrorClass}var LaneBusy=class extends TaggedError("LaneBusy"){},OperationMismatch=class extends TaggedError("OperationMismatch"){},NoActiveRun=class extends TaggedError("NoActiveRun"){},NoActiveOperation=class extends TaggedError("NoActiveOperation"){},NothingToResume=class extends TaggedError("NothingToResume"){},NothingToCompact=class extends TaggedError("NothingToCompact"){},InvalidMessage=class extends TaggedError("InvalidMessage"){},InvalidNavigation=class extends TaggedError("InvalidNavigation"){},UnknownSkill=class extends TaggedError("UnknownSkill"){},UnknownTemplate=class extends TaggedError("UnknownTemplate"){},UnknownTarget=class extends TaggedError("UnknownTarget"){},InvalidLane=class extends TaggedError("InvalidLane"){},Closed=class extends TaggedError("Closed"){},HarnessFault=class extends Error{constructor(message,cause){super(message),this.name="HarnessFault",this.cause=cause}},HarnessClosed=class extends Error{constructor(){super("AgentHarness was closed while the operation was active"),this.name="HarnessClosed"}};function matchError(error2,matchers){let matcher=matchers[error2._tag];return matcher(error2)}import{awaitWithContext,BACKGROUND_CONTEXT,createContextKey,TODO_CONTEXT,withAbortSignal,withCancel,withContextValue,withoutAbortSignal}from"@earendil-works/chord/context";var TELEMETRY_CONTEXT_KEY=createContextKey("pi.telemetryContext");function getTelemetryContext(context){return context.value(TELEMETRY_CONTEXT_KEY)??NOOP_TELEMETRY_CONTEXT}function withTelemetryContext(telemetryContext,context){return withContextValue(TELEMETRY_CONTEXT_KEY,telemetryContext,context)}var AbortRequested=class extends Error{constructor(cancellation){super("Abort requested"),this.name="AbortRequested",this.cancellation=cancellation}};function createGate(){let state={status:"open"},controller=new AbortController,check=()=>{if(state.status==="aborting")throw new AbortRequested(state.cancellation);if(state.status==="closed")throw state.error};return{gate:{admit(invoke){return check(),invoke()},signal:controller.signal},control:{beginAbort(cancellation){state.status==="open"&&(state={status:"aborting",cancellation})},signalAbort(){state.status!=="aborting"||controller.signal.aborted||controller.abort(new AbortRequested(state.cancellation))},close(error2){state.status!=="closed"&&(state={status:"closed",error:error2},controller.signal.aborted||controller.abort(error2))}}}}var SliceNotImplemented=class extends Error{constructor(operation){super(`${operation} is not implemented until its later AgentHarness slice`),this.name="SliceNotImplemented"}},Drive=class{constructor(options,context){this.operationId=options.operationId,this.context=withoutAbortSignal(context),this.waitForRetry=options.waitForRetry??!1,this.deferredPermits=options.pollDeferred===!0?1:0;let resolveCompletion,rejectCompletion;this.completion=new Promise((resolve42,reject)=>{resolveCompletion=resolve42,rejectCompletion=reject}),this.resolveCompletion=resolveCompletion,this.rejectCompletion=rejectCompletion,this.completion.catch(()=>{});let{gate,control}=createGate();this.gate=gate,this.control=control,this.closeController=new AbortController,this.closeSignal=this.closeController.signal}settle(outcome){this.resolveCompletion(outcome)}fail(error2){this.rejectCompletion(error2)}beginAbort(cancellation){this.control.beginAbort(cancellation)}signalAbort(){this.control.signalAbort()}closeGate(error2){this.control.close(error2),this.closeSignal.aborted||this.closeController.abort(error2),this.rejectCompletion(error2)}};var COMPACTION_SUMMARY_PREFIX=`The conversation history before this point was compacted into the following summary:
2
+ import{InvalidSidecarStoreError,UnsupportedSidecarStoreVersionError,breakStaleLock,cancelScheduledJob,createScheduledJob,createSidecarStore,encodedSessionId,errorCode,holdSessionFile,isWatchRunnerAvailable,listScheduledJobs,publishExclusive,publishReplace,readLeaseText,readProcessStartMs,reclaimInspected,reclaimLockState,scheduleDir,serializeByKey,sidecarFilePath,unlinkIfPresent,withSessionMoveLock}from"./chunk-K2SHQNAA.js";import{CountdownTimer,DefaultPackageManager,DynamicBorder,ExtensionInputComponent,ExtensionSelectorComponent,SessionSelectorComponent,appendHiddenTuiStdout,appendUncaughtCrashLog,appendUnhandledRejectionLog,areExperimentalFeaturesEnabled,formatKeyText,keyDisplayText,keyHint,keyText,minimatch,parseGitUrl,rawKeyHint,readPiManifest,readSkillMarkdownSource,redactSensitiveOutput,redactSensitiveTokenValues,require_ignore,shouldRunFirstTimeSetup,shouldSkipSkillWalkDirectoryName,showFirstTimeSetup,showStartupInput,showStartupSelector}from"./chunk-EQBN6TVJ.js";import{TIP_DEFINITIONS}from"./chunk-2POUJCWM.js";import{KEYBINDINGS,KeybindingsManager,QUESTION_ANSWER_FALLBACK_KEY,QUESTION_ANSWER_PRIMARY_KEY,migrateKeybindingsConfig}from"./chunk-VLTMFAWQ.js";import{CURRENT_SESSION_VERSION,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,GOAL_CONTINUATION_MESSAGE_TYPE,MissingSessionCwdError,REPOSITORY_IDENTITY_ENTRY_TYPE,RpcClient,RpcClientOpenInFlightError,RpcTransportGoneError,SESSION_CONTEXT_ENTRY_ID,SessionManager,TRANSPORT_IMAGE_BUDGET_BYTES,assertSessionCwdExists,assertValidSessionId,buildContextEntries,buildSessionContext,compareRepositoryIdentities,convertToLlm,convertToLlmForTransport,createBranchSummaryMessage,createCompactionSummaryMessage,createCustomMessage,environmentContextMessageIfChanged,executeBashWithOperations,formatMissingSessionCwdPrompt,formatSize,getDefaultSessionDir,getLatestCompactionEntry,getMissingSessionCwdIssue,getSessionContextEntryId,isContextExcludedCustomMessage,isTransportGoneError,listSessionsFromDir,loadEntriesFromFile,migrateSessionEntries,parseRepositoryIdentity,parseSessionEntries,readFileLines,readRepositoryIdentity,rejectedImageSources,reserveSessionWrite,resolveEnvironmentContext,sameRepositoryIdentity,sessionEntryToContextMessages,stripAnsi,truncateHead,truncateLine,truncateTail,unregisterSessionWriter}from"./chunk-OVDACFW2.js";import{BACKGROUND_START_GRACE_MS,DEFAULT_COLS,DEFAULT_DURABLE_MONITOR_FIRE_BUDGET,DEFAULT_MAX_SESSIONS,DEFAULT_ROWS,DEFAULT_SCROLLBACK,DURABLE_MONITOR_EXPIRY_MS,FIRE_BUDGET_AUTO_MUTE_SUMMARY,FIRE_BUDGET_WINDOW_MS,FOREGROUND_ENV_OVERRIDES,KILLED_SESSION_EXIT_GRACE_MS,MAX_DURABLE_MONITORS,MONITOR_ENV_DOWNTIME_MS,MONITOR_ENV_ID,MONITOR_ENV_RESTORED,MONITOR_ENV_STATE_DIR,RESTORE_GRACE_MS,TERMINAL_BASH_TOOL,TERMINAL_COMPANION_TOOLS,TERMINAL_INPUT_TOOL,TERMINAL_KILL_TOOL,TERMINAL_MONITOR_TOOL,TERMINAL_OUTPUT_TOOL,TERMINAL_RESIZE_TOOL,encodeKeys,loadPty,safeRegExp}from"./chunk-NZRVAZL2.js";import{PROCESS_START_TOLERANCE_MS,ownProcessStartedAtMs,processBootAtMs,sameBoot,sameProcessStart}from"./chunk-U5KVIAHJ.js";import{ANTHROPIC_SUBSCRIPTION_PROVIDER_ID,BUILT_IN_PROVIDER_DISPLAY_NAMES,CODEX_RESPONSES_API,FooterDataProvider,MCP_CONTROL_INVENTORY_CHANGED_EVENT,MCP_CONTROL_INVENTORY_REQUEST_EVENT,SENTINEL_OAUTH_FIELDS,addAccount,all_exports,assertValidAccountName,builtinProviders,classifyReasoningCapability,compat_exports,completeSimple,cursorProvider,emitProviderAccountFailover,emitProviderAccountsChanged,emptyCredential,envSlotToken,findGitPaths,generateImages,getBuiltinModelDataGeneratedAt,getCredentialAccounts,getCursorContextLimit,getImageModel,getModels,getSupportedThinkingLevels as getSupportedThinkingLevels2,installCursorContextLimitPersistence,installImagesProviderScopeAccessor,isMcpControlInventoryRequest,listAccounts,loadAnthropicOAuth,pinCredentialAccount,pinProviderAccount,refreshSlot,registerBundledOAuthFlowLoaders,removeCredentialAccount,removeProviderAccount,renameCredentialAccount,resetApiProviders,resolveCursorContextWindow,runRpcMode,serviceTierExtension,stream,streamSimple,summarizeCredentialAccounts,supportsMax,supportsServiceTier,supportsXhigh,toJsonEvent,upsertAccount}from"./chunk-YD32NXKZ.js";import{Theme,canonicalWatchPath,detectTerminalBackgroundFromEnv,detectTerminalBackgroundTheme,detectTerminalThemeForAuto,flushRawStdout,getAvailableThemes,getAvailableThemesWithPaths,getEditorTheme,getLanguageFromPath,getMarkdownTheme,getResolvedThemeColors,getSelectListTheme,getSettingsListTheme,getThemeByName,getThemeExportColors,highlightCode,initTheme,loadThemeFromPath,observeVisibleStderrWrites,onThemeChange,parseAutoThemeSetting,probeDirectoryOpenable,resolveThemeSetting,restoreStderr,restoreStdout,setRegisteredThemes,setTheme,setThemeInstance,stopThemeWatcher,takeOverStderr,takeOverStdout,theme,waitForRawStdoutBackpressure,watchWithErrorHandler,writeRawStdout}from"./chunk-27C3ZSZG.js";import{AssistantEditError,SessionStreamingError,UnknownCommandError,UserEditError,assertExpectedLeaf,assertExpectedUserLeaf,assistantTextEquals,buildEditedAssistantMessage,buildEditedUserMessage,commandShapedName,findUnknownCommand,userTextEquals}from"./chunk-LB2B2Q4P.js";import{DEFAULT_SESSION_SHUTDOWN_HANDLER_TIMEOUT_MS,DEFAULT_SESSION_SHUTDOWN_HANDLER_WARN_MS,DEFAULT_STREAM_START_TIMEOUT_MS,FileSettingsStorage,HTTP_IDLE_TIMEOUT_CHOICES,SettingsManager,TERMINAL_MOUSE_MODES,acquireFallbackCircuits,applyHttpProxySettings,configureHttpDispatcher,createFallbackCircuitAccess,formatHttpIdleTimeoutMs,getSettingsPath,isTerminalMouseMode,monotonicNow,parseSettingsJson,require_undici,wasSelfWrite}from"./chunk-K7B7NFOK.js";import{Box,CancellableLoader,CombinedAutocompleteProvider,Container,Editor,Image,Input,Key,Loader,Markdown,MouseRegion,ProcessTerminal,Q,ScrollView,SelectList,SettingsList,Spacer,Text,TruncatedText,TuiAltScreen,TuiMainScreen,VStack,decodeKittyPrintable,dist_exports,expandPasteMarkers,fuzzyFilter,fuzzyMatch,getCapabilities,getGraphemeSegmenter,getImageDimensions,getKeybindings,getNativeClipboard,hyperlink,imageFallback,isKeyRelease,isViewportTUI,matchesKey,outerKittyGraphicsMode,sanitizeTerminalLabel,setCapabilityOverrides,setKeybindings,sliceByColumn,stripTerminalSequences,truncateToWidth,visibleWidth,wrapTextWithAnsi}from"./chunk-HEKLJWA4.js";import{composeFoldResult}from"./chunk-BMX2U22F.js";import{DEFAULT_HOST_LAUNCH_SPEC,HOST_EXIT_ERROR,HOST_EXIT_FALLBACK,HOST_EXIT_OK,HOST_EXIT_REFUSED,HOST_EXIT_USAGE,HostLaunchSpecError,loadHostLaunchSpec,parseHostLaunchSpec,readHostStatus,runHostCommand,runHostRequest}from"./chunk-RUOJQL6B.js";import{GENERATION_HANDOFF_CAPABILITY,HOST_PROTOCOL_VERSION,HostEnsureRefusedError,PINNED_HOST_CLIENT_CAPABILITIES,REQUIRED_HOST_CAPABILITIES,decideHostAction,ensureHost,handoffHost,parseHostProtocolInfo,probeHost,stopHost}from"./chunk-EB3GDOU4.js";import{AUTO_TITLE_SESSIONS_CAPABILITY,parseClientCapabilities}from"./chunk-SNDTJL2H.js";import{createHostDaemonPaths,daemonDirectoryName,recordProcessLifetime,shardKey,shardSocketPath,shardSocketPathForKey}from"./chunk-UK5TE7WR.js";import{compareEngineOrdinal,engineBuildIdentity,engineBuildIdentityFrom}from"./chunk-FUGMDU6B.js";import{createRgEngine,ensureTool}from"./chunk-XBGO2JZD.js";import{GrepEngineError}from"./chunk-H4QOEVS5.js";import{parseOpenAIImageOutputOptions,parseOpenAIImageSize}from"./chunk-HB35RBP4.js";import{CredentialFailoverError,getConfigValueEnvVarNames,isCommandConfigValue,isCommittedRotationOutput,isConfigValueConfigured,rendezvousOrder,resolveConfigValue,resolveConfigValueOrThrow,resolveHeadersOrThrow,sleep}from"./chunk-ILQTW6KB.js";import{discoverEnvSlots}from"./chunk-KO6GO5ZY.js";import{getPowerShellConfig,getShellConfig,getShellEnv,killProcessTree,killTrackedDetachedChildren,noteDetachedChildExited,pruneTrackedDetachedChildren,sanitizeBinaryOutput,trackDetachedChildPid,untrackDetachedChildPid}from"./chunk-SH6VUPE4.js";import{CredentialStoreBusyError,FILE_STORAGE_LOCK_OPTIONS,FILE_STORAGE_LOCK_RETRY_BUDGET_MS,FILE_STORAGE_LOCK_RETRY_MAX_DELAY_MS,FILE_STORAGE_LOCK_RETRY_MIN_DELAY_MS,FILE_STORAGE_SYNC_LOCK_BUDGET_MS,isLockError}from"./chunk-7X72IACK.js";import{external_exports}from"./chunk-KUPQO7MC.js";import{helpFlagsScope,isPlainHelpRequest,resolveHelpProjectTrust,writeHelpFlagsCache}from"./chunk-CZNE6LIO.js";import{ProjectTrustStore,getProjectTrustOptions,hasTrustRequiringProjectResources}from"./chunk-T3HGPHPP.js";import{isValidThinkingLevel,normalizeSessionName,parseArgs,printHelp,resolveSessionRuntime}from"./chunk-W4AG5TN4.js";import{source_default}from"./chunk-26UBFF6N.js";import{AssistantMessageFrameEncoder,Compile,StringEnum,compile_exports,composeShellCommand,contentText,cursorOverflowCompactionSettings,dropFailedAssistantTurns,findEnvKeys,getApiProvider,getCursorVariantAlias,getEnvApiKey,getProtocol,getToolCallFormat,hasKimiTextToolCallRecovery,hasVisibleAssistantContent,hasVisibleText,installProviderScopeAccessor,isClassifierRefusal,isContextOverflow,isCursorExecResolved,isCursorPayloadResourceExhausted,isCursorQuotaResourceExhausted,isCursorZeroTokenResourceExhausted,isRecoverableLength,measureCursorModelInputSerializedBytes,normalizeCursorCatalog,omitUndefinedArgs,parseCursorVariantId,parseEndpointReasoningEfforts,piLimit,piLsPath,piReadArgs,piTimeout,reduceAssistantMessageFrames,renderCursorCliModelString,require_dist,shouldRecoverTextToolCalls,shouldRetryOverflowWithoutCompact,supportsAllowedToolChoice,transformContext,validateToolArguments,warmPromptCache,wrapStreamWithModelRecovery,wrapStreamWithToolCallMiddleware}from"./chunk-UNTVGMGW.js";import{require_proper_lockfile}from"./chunk-GZVCRV7I.js";import{hasCredentialHeaders,isCredentialHeaderName}from"./chunk-RFB5CBW7.js";import{extractChatGptSubscriptionAccountId,setWireIdentity,uuidv7}from"./chunk-2VZJTDUX.js";import{convertResponsesMessages,copyContextProvenance,getContextProvenance,isOpenAIResponsesPromptCacheModel}from"./chunk-JEWB5XTL.js";import{INSPECTOR_VM_IMPORT_WARNING,MIN_BUN_VERSION,RUNTIME_ENV_VAR,bunVersionSatisfies,checkForNewPiVersion,consumeEarlyInspectorVmImportRecoveries,findBunBinary,getPiUserAgent,getReleaseChangelogUrl,hasInheritedInspectorOption,isRecoverableInspectorVmImportError,processBunRuntimeOptions}from"./chunk-4VWWEMCJ.js";import{require_semver}from"./chunk-ZOFZRJSL.js";import{fetchWithRetry}from"./chunk-2SOVDETB.js";import{APP_COMMAND,APP_NAME,APP_TITLE,BRAND,CONFIG_DIR_NAME,CONFIG_FLAT_LAYOUT,DISPLAY_VERSION,ENV_AGENT_DIR,ENV_SESSION_DIR,FLAT_LAYOUT_SENTINEL,PACKAGE_NAME,VERSION,canonicalizePath,detectInstallMethod,envValue,expandTildePath,formatPathRelativeToCwdOrAbsolute,getAgentDir,getAuthPath,getBinDir,getBundledInteractiveAssetPath,getChangelogPath,getCwdRelativePath,getDebugLogPath,getDocsPath,getExamplesPath,getExportTemplateDir,getFileContentRevision,getFileRevision,getInstallPackageDir,getModelsPath,getPackageDir,getReadmePath,getSessionsDir,getShareViewerUrl,isBunBinary,isBunRuntime,isBundledNode,isLocalPath,normalizePath,realpathWithoutOpen,realpathWithoutOpenStrict,resolveAgentDir,resolvePath,splitBom,stripBom,waitForChildProcess}from"./chunk-WCAKUCN3.js";import{build_exports,typebox_exports,value_exports2 as value_exports}from"./chunk-RBCQOIAD.js";import{installClaudeCodeVersionStore,resolveToolNameMatch}from"./chunk-JRGNL6WM.js";import{SERVER_FALLBACK_ABORTED_DIAGNOSTIC,sanitizeAnthropicToolPairs}from"./chunk-X4Q5YSTE.js";import{resolveRootObjectSchema}from"./chunk-CWLCGRUS.js";import{getAnthropicCompat,isAnthropicApiBaseUrl,resolvePromptCacheLifetime,resolvePromptCacheTtlSeconds}from"./chunk-BJICJY47.js";import{hasRefusedForcedToolChoice}from"./chunk-LHYG7TK7.js";import{readProviderDiagnostic,sanitizeProviderDiagnostic}from"./chunk-YOPVJDSU.js";import{cleanupSessionResources,processSingleton}from"./chunk-WHPDEDCC.js";import{extract429RetryAfterMs,parseRetryAfterMsMarker}from"./chunk-BPX6QWPD.js";import{DEFAULT_MAX_AGENT_RETRY_DELAY_MS,EMPTY_RESPONSE_ERROR,EMPTY_TOOL_USE_ERROR,FORWARDED_EMPTY_RESPONSE_ERROR,FORWARDED_EMPTY_TOOL_USE_ERROR,LEGACY_PROVIDER_IDS,ModelsError,TURN_RETRY_SUPPRESSION_PREFIX,accountLabel,appendLoginSlot,calculateCost,clampThinkingLevel,createModels,describeProviderFailureForUser,estimateContextTokens,getSupportedThinkingLevels,isProviderStreamStallError,isProviderTimeoutError,isQuotaExhaustionMessage,isRetryableAssistantError,isRetryableErrorMessage,lazyStream,legacyProviderIdRejection,listSlots,modelsAreEqual,normalizeProviderId,providerNotConfiguredMessage,readByProviderId,removeSlot,repairManagedSentinelSlots,retryAssistantCall,retryDelayMs,retryTransientCall,stripProviderRequestIds,stripTurnRetrySuppressionPrefix,supportsConfigurationUpdate,upsertSlot}from"./chunk-XVX4M3DZ.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import{EventStream,createAssistantMessageDiagnostic,createAssistantMessageEventStream}from"./chunk-DMI55M2N.js";import{__commonJS,__export,__toESM}from"./chunk-IKOFCODM.js";var require_constants=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/constants.js"(exports,module){"use strict";var WIN_NO_SLASH="[^\\\\/]",ONE_CHAR="(?=.)",QMARK="[^/]",END_ANCHOR="(?:\\/|$)",START_ANCHOR="(?:^|\\/)",DOTS_SLASH=`\\.{1,2}${END_ANCHOR}`,NO_DOT="(?!\\.)",NO_DOTS=`(?!${START_ANCHOR}${DOTS_SLASH})`,NO_DOT_SLASH=`(?!\\.{0,1}${END_ANCHOR})`,NO_DOTS_SLASH=`(?!${DOTS_SLASH})`,QMARK_NO_DOT="[^.\\/]",STAR=`${QMARK}*?`,SEP="/",POSIX_CHARS={DOT_LITERAL:"\\.",PLUS_LITERAL:"\\+",QMARK_LITERAL:"\\?",SLASH_LITERAL:"\\/",ONE_CHAR,QMARK,END_ANCHOR,DOTS_SLASH,NO_DOT,NO_DOTS,NO_DOT_SLASH,NO_DOTS_SLASH,QMARK_NO_DOT,STAR,START_ANCHOR,SEP},WINDOWS_CHARS={...POSIX_CHARS,SLASH_LITERAL:"[\\\\/]",QMARK:WIN_NO_SLASH,STAR:`${WIN_NO_SLASH}*?`,DOTS_SLASH:"\\.{1,2}(?:[\\\\/]|$)",NO_DOT:"(?!\\.)",NO_DOTS:"(?!(?:^|[\\\\/])\\.{1,2}(?:[\\\\/]|$))",NO_DOT_SLASH:"(?!\\.{0,1}(?:[\\\\/]|$))",NO_DOTS_SLASH:"(?!\\.{1,2}(?:[\\\\/]|$))",QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)",SEP:"\\"},POSIX_REGEX_SOURCE={__proto__:null,alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};module.exports={DEFAULT_MAX_EXTGLOB_RECURSION:0,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(chars){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${chars.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(win325){return win325===!0?WINDOWS_CHARS:POSIX_CHARS}}}});var require_utils=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/utils.js"(exports){"use strict";var{REGEX_BACKSLASH,REGEX_REMOVE_BACKSLASH,REGEX_SPECIAL_CHARS,REGEX_SPECIAL_CHARS_GLOBAL}=require_constants();exports.isObject=val=>val!==null&&typeof val=="object"&&!Array.isArray(val);exports.hasRegexChars=str3=>REGEX_SPECIAL_CHARS.test(str3);exports.isRegexChar=str3=>str3.length===1&&exports.hasRegexChars(str3);exports.escapeRegex=str3=>str3.replace(REGEX_SPECIAL_CHARS_GLOBAL,"\\$1");exports.toPosixSlashes=str3=>str3.replace(REGEX_BACKSLASH,"/");exports.isWindows=()=>{if(typeof navigator<"u"&&navigator.platform){let platform4=navigator.platform.toLowerCase();return platform4==="win32"||platform4==="windows"}return typeof process<"u"&&process.platform?process.platform==="win32":!1};exports.removeBackslashes=str3=>str3.replace(REGEX_REMOVE_BACKSLASH,match=>match==="\\"?"":match);exports.escapeLast=(input,char,lastIdx)=>{let idx=input.lastIndexOf(char,lastIdx);return idx===-1?input:input[idx-1]==="\\"?exports.escapeLast(input,char,idx-1):`${input.slice(0,idx)}\\${input.slice(idx)}`};exports.removePrefix=(input,state={})=>{let output=input;return output.startsWith("./")&&(output=output.slice(2),state.prefix="./"),output};exports.wrapOutput=(input,state={},options={})=>{let prepend=options.contains?"":"^",append=options.contains?"":"$",output=`${prepend}(?:${input})${append}`;return state.negated===!0&&(output=`(?:^(?!${output}).*$)`),output};exports.basename=(path13,{windows}={})=>{let segs=path13.split(windows?/[\\/]/:"/"),last=segs[segs.length-1];return last===""?segs[segs.length-2]:last}}});var require_scan=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/scan.js"(exports,module){"use strict";var utils=require_utils(),{CHAR_ASTERISK,CHAR_AT,CHAR_BACKWARD_SLASH,CHAR_COMMA,CHAR_DOT,CHAR_EXCLAMATION_MARK,CHAR_FORWARD_SLASH,CHAR_LEFT_CURLY_BRACE,CHAR_LEFT_PARENTHESES,CHAR_LEFT_SQUARE_BRACKET,CHAR_PLUS,CHAR_QUESTION_MARK,CHAR_RIGHT_CURLY_BRACE,CHAR_RIGHT_PARENTHESES,CHAR_RIGHT_SQUARE_BRACKET}=require_constants(),isPathSeparator=code=>code===CHAR_FORWARD_SLASH||code===CHAR_BACKWARD_SLASH,depth=token=>{token.isPrefix!==!0&&(token.depth=token.isGlobstar?1/0:1)},scan2=(input,options)=>{let opts=options||{},length=input.length-1,scanToEnd=opts.parts===!0||opts.tokens===!0||opts.scanToEnd===!0,slashes=[],tokens=[],parts=[],str3=input,index=-1,start=0,lastIndex=0,isBrace=!1,isBracket=!1,isGlob=!1,isExtglob=!1,isGlobstar=!1,braceEscaped=!1,backslashes=!1,negated=!1,negatedExtglob=!1,finished=!1,braces=0,prev,code,token={value:"",depth:0,isGlob:!1},eos=()=>index>=length,peek=()=>str3.charCodeAt(index+1),advance=()=>(prev=code,str3.charCodeAt(++index));for(;index<length;){code=advance();let next;if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,code=advance(),code===CHAR_LEFT_CURLY_BRACE&&(braceEscaped=!0);continue}if(braceEscaped===!0||code===CHAR_LEFT_CURLY_BRACE){for(braces++;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_CURLY_BRACE){braces++;continue}if(braceEscaped!==!0&&code===CHAR_DOT&&(code=advance())===CHAR_DOT){if(isBrace=token.isBrace=!0,isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(braceEscaped!==!0&&code===CHAR_COMMA){if(isBrace=token.isBrace=!0,isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_RIGHT_CURLY_BRACE&&(braces--,braces===0)){braceEscaped=!1,isBrace=token.isBrace=!0,finished=!0;break}}if(scanToEnd===!0)continue;break}if(code===CHAR_FORWARD_SLASH){if(slashes.push(index),tokens.push(token),token={value:"",depth:0,isGlob:!1},finished===!0)continue;if(prev===CHAR_DOT&&index===start+1){start+=2;continue}lastIndex=index+1;continue}if(opts.noext!==!0&&(code===CHAR_PLUS||code===CHAR_AT||code===CHAR_ASTERISK||code===CHAR_QUESTION_MARK||code===CHAR_EXCLAMATION_MARK)===!0&&peek()===CHAR_LEFT_PARENTHESES){if(isGlob=token.isGlob=!0,isExtglob=token.isExtglob=!0,finished=!0,code===CHAR_EXCLAMATION_MARK&&index===start&&(negatedExtglob=!0),scanToEnd===!0){let parens=0;for(;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_PARENTHESES){parens++;continue}if(code===CHAR_RIGHT_PARENTHESES&&--parens===0){finished=!0;break}}continue}break}if(code===CHAR_ASTERISK){if(prev===CHAR_ASTERISK&&(isGlobstar=token.isGlobstar=!0),isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_QUESTION_MARK){if(isGlob=token.isGlob=!0,finished=!0,scanToEnd===!0)continue;break}if(code===CHAR_LEFT_SQUARE_BRACKET){for(;eos()!==!0&&(next=advance());){if(next===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(next===CHAR_RIGHT_SQUARE_BRACKET){isBracket=token.isBracket=!0,isGlob=token.isGlob=!0,finished=!0;break}}if(scanToEnd===!0)continue;break}if(opts.nonegate!==!0&&code===CHAR_EXCLAMATION_MARK&&index===start){negated=token.negated=!0,start++;continue}if(opts.noparen!==!0&&code===CHAR_LEFT_PARENTHESES){if(isGlob=token.isGlob=!0,scanToEnd===!0){let parens=1;for(;eos()!==!0&&(code=advance());){if(code===CHAR_BACKWARD_SLASH){backslashes=token.backslashes=!0,advance();continue}if(code===CHAR_LEFT_PARENTHESES){parens++;continue}if(code===CHAR_RIGHT_PARENTHESES&&--parens===0){finished=!0;break}}continue}break}if(isGlob===!0){if(finished=!0,scanToEnd===!0)continue;break}}opts.noext===!0&&(isExtglob=!1,isGlob=!1);let base=str3,prefix="",glob="";start>0&&(prefix=str3.slice(0,start),str3=str3.slice(start),lastIndex-=start),base&&isGlob===!0&&lastIndex>0?(base=str3.slice(0,lastIndex),glob=str3.slice(lastIndex)):isGlob===!0?(base="",glob=str3):base=str3,base&&base!==""&&base!=="/"&&base!==str3&&isPathSeparator(base.charCodeAt(base.length-1))&&(base=base.slice(0,-1)),opts.unescape===!0&&(glob&&(glob=utils.removeBackslashes(glob)),base&&backslashes===!0&&(base=utils.removeBackslashes(base)));let state={prefix,input,start,base,glob,isBrace,isBracket,isGlob,isExtglob,isGlobstar,negated,negatedExtglob};if(opts.tokens===!0&&(state.maxDepth=0,isPathSeparator(code)||tokens.push(token),state.tokens=tokens),opts.parts===!0||opts.tokens===!0){let prevIndex;for(let idx=0;idx<slashes.length;idx++){let n2=prevIndex!==void 0?prevIndex+1:start,i=slashes[idx],value3=input.slice(n2,i);opts.tokens&&(idx===0&&start!==0?(tokens[idx].isPrefix=!0,tokens[idx].value=prefix):tokens[idx].value=value3,depth(tokens[idx]),state.maxDepth+=tokens[idx].depth),i>=start&&(parts.push(value3),prevIndex=i)}let n=prevIndex!==void 0?prevIndex+1:start,value2=input.slice(n);parts.push(value2),opts.tokens&&prevIndex&&prevIndex+1<input.length&&(tokens[tokens.length-1].value=value2,depth(tokens[tokens.length-1]),state.maxDepth+=tokens[tokens.length-1].depth),state.slashes=slashes,state.parts=parts}return state};module.exports=scan2}});var require_parse=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/parse.js"(exports,module){"use strict";var constants11=require_constants(),utils=require_utils(),{MAX_LENGTH,POSIX_REGEX_SOURCE,REGEX_NON_SPECIAL_CHARS,REGEX_SPECIAL_CHARS_BACKREF,REPLACEMENTS}=constants11,expandRange=(args,options)=>{if(typeof options.expandRange=="function")return options.expandRange(...args,options);args.sort();let value2=`[${args.join("-")}]`;try{new RegExp(value2)}catch{return args.map(v=>utils.escapeRegex(v)).join("..")}return value2},syntaxError=(type2,char)=>`Missing ${type2}: "${char}" - use "\\\\${char}" to match literal characters`,splitTopLevel=input=>{let parts=[],bracket=0,paren=0,quote=0,value2="",escaped=!1;for(let ch of input){if(escaped===!0){value2+=ch,escaped=!1;continue}if(ch==="\\"){value2+=ch,escaped=!0;continue}if(ch==='"'){quote=quote===1?0:1,value2+=ch;continue}if(quote===0){if(ch==="[")bracket++;else if(ch==="]"&&bracket>0)bracket--;else if(bracket===0){if(ch==="(")paren++;else if(ch===")"&&paren>0)paren--;else if(ch==="|"&&paren===0){parts.push(value2),value2="";continue}}}value2+=ch}return parts.push(value2),parts},isPlainBranch=branch=>{let escaped=!1;for(let ch of branch){if(escaped===!0){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}if(/[?*+@!()[\]{}]/.test(ch))return!1}return!0},normalizeSimpleBranch=branch=>{let value2=branch.trim(),changed=!0;for(;changed===!0;)changed=!1,/^@\([^\\()[\]{}|]+\)$/.test(value2)&&(value2=value2.slice(2,-1),changed=!0);if(isPlainBranch(value2))return value2.replace(/\\(.)/g,"$1")},hasRepeatedCharPrefixOverlap=branches=>{let values=branches.map(normalizeSimpleBranch).filter(Boolean);for(let i=0;i<values.length;i++)for(let j=i+1;j<values.length;j++){let a=values[i],b=values[j],char=a[0];if(!(!char||a!==char.repeat(a.length)||b!==char.repeat(b.length))&&(a===b||a.startsWith(b)||b.startsWith(a)))return!0}return!1},parseRepeatedExtglob=(pattern,requireEnd=!0)=>{if(pattern[0]!=="+"&&pattern[0]!=="*"||pattern[1]!=="(")return;let bracket=0,paren=0,quote=0,escaped=!1;for(let i=1;i<pattern.length;i++){let ch=pattern[i];if(escaped===!0){escaped=!1;continue}if(ch==="\\"){escaped=!0;continue}if(ch==='"'){quote=quote===1?0:1;continue}if(quote!==1){if(ch==="["){bracket++;continue}if(ch==="]"&&bracket>0){bracket--;continue}if(!(bracket>0)){if(ch==="("){paren++;continue}if(ch===")"&&(paren--,paren===0))return requireEnd===!0&&i!==pattern.length-1?void 0:{type:pattern[0],body:pattern.slice(2,i),end:i}}}}},buildCharClassStar=chars=>`${chars.length===1?utils.escapeRegex(chars[0]):`[${chars.map(ch=>utils.escapeRegex(ch)).join("")}]`}*`,getStarExtglobSequenceChars=pattern=>{let index=0,chars=[];for(;index<pattern.length;){let match=parseRepeatedExtglob(pattern.slice(index),!1);if(!match||match.type!=="*")return;let branches=splitTopLevel(match.body).map(branch2=>branch2.trim());if(branches.length!==1)return;let branch=normalizeSimpleBranch(branches[0]);if(!branch||branch.length!==1)return;chars.push(branch),index+=match.end+1}if(!(chars.length<1))return chars},repeatedExtglobRecursion=pattern=>{let depth=0,value2=pattern.trim(),match=parseRepeatedExtglob(value2);for(;match;)depth++,value2=match.body.trim(),match=parseRepeatedExtglob(value2);return depth},analyzeRepeatedExtglob=(body,options)=>{if(options.maxExtglobRecursion===!1)return{risky:!1};let max=typeof options.maxExtglobRecursion=="number"?options.maxExtglobRecursion:constants11.DEFAULT_MAX_EXTGLOB_RECURSION,branches=splitTopLevel(body).map(branch=>branch.trim());if(branches.length>1&&(branches.some(branch=>branch==="")||branches.some(branch=>/^[*?]+$/.test(branch))||hasRepeatedCharPrefixOverlap(branches)))return{risky:!0};let safeChars=[],sawStarSequence=!1,combinable=!0;for(let branch of branches){let chars=getStarExtglobSequenceChars(branch);if(chars){sawStarSequence=!0,safeChars.push(...chars);continue}let literal=normalizeSimpleBranch(branch);if(literal&&literal.length===1){safeChars.push(literal);continue}if(combinable=!1,repeatedExtglobRecursion(branch)>max)return{risky:!0}}return sawStarSequence?combinable?{risky:!0,safeOutput:buildCharClassStar([...new Set(safeChars)])}:{risky:!0}:{risky:!1}},parse5=(input,options)=>{if(typeof input!="string")throw new TypeError("Expected a string");input=REPLACEMENTS[input]||input;let opts={...options},max=typeof opts.maxLength=="number"?Math.min(MAX_LENGTH,opts.maxLength):MAX_LENGTH,len=input.length;if(len>max)throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);let bos={type:"bos",value:"",output:opts.prepend||""},tokens=[bos],capture=opts.capture?"":"?:",PLATFORM_CHARS=constants11.globChars(opts.windows),EXTGLOB_CHARS=constants11.extglobChars(PLATFORM_CHARS),{DOT_LITERAL,PLUS_LITERAL,SLASH_LITERAL,ONE_CHAR,DOTS_SLASH,NO_DOT,NO_DOT_SLASH,NO_DOTS_SLASH,QMARK,QMARK_NO_DOT,STAR,START_ANCHOR}=PLATFORM_CHARS,globstar=opts2=>`(${capture}(?:(?!${START_ANCHOR}${opts2.dot?DOTS_SLASH:DOT_LITERAL}).)*?)`,nodot=opts.dot?"":NO_DOT,qmarkNoDot=opts.dot?QMARK:QMARK_NO_DOT,star=opts.bash===!0?globstar(opts):STAR;opts.capture&&(star=`(${star})`),typeof opts.noext=="boolean"&&(opts.noextglob=opts.noext);let state={input,index:-1,start:0,dot:opts.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens};input=utils.removePrefix(input,state),len=input.length;let extglobs=[],braces=[],stack=[],prev=bos,value2,eos=()=>state.index===len-1,peek=state.peek=(n=1)=>input[state.index+n],advance=state.advance=()=>input[++state.index]||"",remaining=()=>input.slice(state.index+1),consume=(value3="",num2=0)=>{state.consumed+=value3,state.index+=num2},append=token=>{state.output+=token.output!=null?token.output:token.value,consume(token.value)},negate=()=>{let count=1;for(;peek()==="!"&&(peek(2)!=="("||peek(3)==="?");)advance(),state.start++,count++;return count%2===0?!1:(state.negated=!0,state.start++,!0)},increment=type2=>{state[type2]++,stack.push(type2)},decrement=type2=>{state[type2]--,stack.pop()},push=tok=>{if(prev.type==="globstar"){let isBrace=state.braces>0&&(tok.type==="comma"||tok.type==="brace"),isExtglob=tok.extglob===!0||extglobs.length&&(tok.type==="pipe"||tok.type==="paren");tok.type!=="slash"&&tok.type!=="paren"&&!isBrace&&!isExtglob&&(state.output=state.output.slice(0,-prev.output.length),prev.type="star",prev.value="*",prev.output=star,state.output+=prev.output)}if(extglobs.length&&tok.type!=="paren"&&(extglobs[extglobs.length-1].inner+=tok.value),(tok.value||tok.output)&&append(tok),prev&&prev.type==="text"&&tok.type==="text"){prev.output=(prev.output||prev.value)+tok.value,prev.value+=tok.value;return}tok.prev=prev,tokens.push(tok),prev=tok},extglobOpen=(type2,value3)=>{let token={...EXTGLOB_CHARS[value3],conditions:1,inner:""};token.prev=prev,token.parens=state.parens,token.output=state.output,token.startIndex=state.index,token.tokensIndex=tokens.length;let output=(opts.capture?"(":"")+token.open;increment("parens"),push({type:type2,value:value3,output:state.output?"":ONE_CHAR}),push({type:"paren",extglob:!0,value:advance(),output}),extglobs.push(token)},extglobClose=token=>{let literal=input.slice(token.startIndex,state.index+1),body=input.slice(token.startIndex+2,state.index),analysis=analyzeRepeatedExtglob(body,opts);if((token.type==="plus"||token.type==="star")&&analysis.risky){let safeOutput=analysis.safeOutput?(token.output?"":ONE_CHAR)+(opts.capture?`(${analysis.safeOutput})`:analysis.safeOutput):void 0,open7=tokens[token.tokensIndex];open7.type="text",open7.value=literal,open7.output=safeOutput||utils.escapeRegex(literal);for(let i=token.tokensIndex+1;i<tokens.length;i++)tokens[i].value="",tokens[i].output="",delete tokens[i].suffix;state.output=token.output+open7.output,state.backtrack=!0,push({type:"paren",extglob:!0,value:value2,output:""}),decrement("parens");return}let output=token.close+(opts.capture?")":""),rest;if(token.type==="negate"){let extglobStar=star;if(token.inner&&token.inner.length>1&&token.inner.includes("/")&&(extglobStar=globstar(opts)),(extglobStar!==star||eos()||/^\)+$/.test(remaining()))&&(output=token.close=`)$))${extglobStar}`),token.inner.includes("*")&&(rest=remaining())&&/^\.[^\\/.]+$/.test(rest)){let expression=parse5(rest,{...options,fastpaths:!1}).output;output=token.close=`)${expression})${extglobStar})`}token.prev.type==="bos"&&(state.negatedExtglob=!0)}push({type:"paren",extglob:!0,value:value2,output}),decrement("parens")};if(opts.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(input)){let backslashes=!1,output=input.replace(REGEX_SPECIAL_CHARS_BACKREF,(m,esc,chars,first,rest,index)=>first==="\\"?(backslashes=!0,m):first==="?"?esc?esc+first+(rest?QMARK.repeat(rest.length):""):index===0?qmarkNoDot+(rest?QMARK.repeat(rest.length):""):QMARK.repeat(chars.length):first==="."?DOT_LITERAL.repeat(chars.length):first==="*"?esc?esc+first+(rest?star:""):star:esc?m:`\\${m}`);return backslashes===!0&&(opts.unescape===!0?output=output.replace(/\\/g,""):output=output.replace(/\\+/g,m=>m.length%2===0?"\\\\":m?"\\":"")),output===input&&opts.contains===!0?(state.output=input,state):(state.output=utils.wrapOutput(output,state,options),state)}for(;!eos();){if(value2=advance(),value2==="\0")continue;if(value2==="\\"){let next=peek();if(next==="/"&&opts.bash!==!0||next==="."||next===";")continue;if(!next){value2+="\\",push({type:"text",value:value2});continue}let match=/^\\+/.exec(remaining()),slashes=0;if(match&&match[0].length>2&&(slashes=match[0].length,state.index+=slashes,slashes%2!==0&&(value2+="\\")),opts.unescape===!0?value2=advance():value2+=advance(),state.brackets===0){push({type:"text",value:value2});continue}}if(state.brackets>0&&(value2!=="]"||prev.value==="["||prev.value==="[^")){if(opts.posix!==!1&&value2===":"){let inner=prev.value.slice(1);if(inner.includes("[")&&(prev.posix=!0,inner.includes(":"))){let idx=prev.value.lastIndexOf("["),pre=prev.value.slice(0,idx),rest2=prev.value.slice(idx+2),posix5=POSIX_REGEX_SOURCE[rest2];if(posix5){prev.value=pre+posix5,state.backtrack=!0,advance(),!bos.output&&tokens.indexOf(prev)===1&&(bos.output=ONE_CHAR);continue}}}(value2==="["&&peek()!==":"||value2==="-"&&peek()==="]")&&(value2=`\\${value2}`),value2==="]"&&(prev.value==="["||prev.value==="[^")&&(value2=`\\${value2}`),opts.posix===!0&&value2==="!"&&prev.value==="["&&(value2="^"),prev.value+=value2,append({value:value2});continue}if(state.quotes===1&&value2!=='"'){value2=utils.escapeRegex(value2),prev.value+=value2,append({value:value2});continue}if(value2==='"'){state.quotes=state.quotes===1?0:1,opts.keepQuotes===!0&&push({type:"text",value:value2});continue}if(value2==="("){increment("parens"),push({type:"paren",value:value2});continue}if(value2===")"){if(state.parens===0&&opts.strictBrackets===!0)throw new SyntaxError(syntaxError("opening","("));let extglob=extglobs[extglobs.length-1];if(extglob&&state.parens===extglob.parens+1){extglobClose(extglobs.pop());continue}push({type:"paren",value:value2,output:state.parens?")":"\\)"}),decrement("parens");continue}if(value2==="["){if(opts.nobracket===!0||!remaining().includes("]")){if(opts.nobracket!==!0&&opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","]"));value2=`\\${value2}`}else increment("brackets");push({type:"bracket",value:value2});continue}if(value2==="]"){if(opts.nobracket===!0||prev&&prev.type==="bracket"&&prev.value.length===1){push({type:"text",value:value2,output:`\\${value2}`});continue}if(state.brackets===0){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("opening","["));push({type:"text",value:value2,output:`\\${value2}`});continue}decrement("brackets");let prevValue=prev.value.slice(1);if(prev.posix!==!0&&prevValue[0]==="^"&&!prevValue.includes("/")&&(value2=`/${value2}`),prev.value+=value2,append({value:value2}),opts.literalBrackets===!1||utils.hasRegexChars(prevValue))continue;let escaped=utils.escapeRegex(prev.value);if(state.output=state.output.slice(0,-prev.value.length),opts.literalBrackets===!0){state.output+=escaped,prev.value=escaped;continue}prev.value=`(${capture}${escaped}|${prev.value})`,state.output+=prev.value;continue}if(value2==="{"&&opts.nobrace!==!0){increment("braces");let open7={type:"brace",value:value2,output:"(",outputIndex:state.output.length,tokensIndex:state.tokens.length};braces.push(open7),push(open7);continue}if(value2==="}"){let brace=braces[braces.length-1];if(opts.nobrace===!0||!brace){push({type:"text",value:value2,output:value2});continue}let output=")";if(brace.dots===!0){let arr=tokens.slice(),range=[];for(let i=arr.length-1;i>=0&&(tokens.pop(),arr[i].type!=="brace");i--)arr[i].type!=="dots"&&range.unshift(arr[i].value);output=expandRange(range,opts),state.backtrack=!0}if(brace.comma!==!0&&brace.dots!==!0){let out=state.output.slice(0,brace.outputIndex),toks=state.tokens.slice(brace.tokensIndex);brace.value=brace.output="\\{",value2=output="\\}",state.output=out;for(let t of toks)state.output+=t.output||t.value}push({type:"brace",value:value2,output}),decrement("braces"),braces.pop();continue}if(value2==="|"){extglobs.length>0&&extglobs[extglobs.length-1].conditions++,push({type:"text",value:value2});continue}if(value2===","){let output=value2,brace=braces[braces.length-1];brace&&stack[stack.length-1]==="braces"&&(brace.comma=!0,output="|"),push({type:"comma",value:value2,output});continue}if(value2==="/"){if(prev.type==="dot"&&state.index===state.start+1){state.start=state.index+1,state.consumed="",state.output="",tokens.pop(),prev=bos;continue}push({type:"slash",value:value2,output:SLASH_LITERAL});continue}if(value2==="."){if(state.braces>0&&prev.type==="dot"){prev.value==="."&&(prev.output=DOT_LITERAL);let brace=braces[braces.length-1];prev.type="dots",prev.output+=value2,prev.value+=value2,brace.dots=!0;continue}if(state.braces+state.parens===0&&prev.type!=="bos"&&prev.type!=="slash"){push({type:"text",value:value2,output:DOT_LITERAL});continue}push({type:"dot",value:value2,output:DOT_LITERAL});continue}if(value2==="?"){if(!(prev&&prev.value==="(")&&opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){extglobOpen("qmark",value2);continue}if(prev&&prev.type==="paren"){let next=peek(),output=value2;(prev.value==="("&&!/[!=<:]/.test(next)||next==="<"&&!/<([!=]|\w+>)/.test(remaining()))&&(output=`\\${value2}`),push({type:"text",value:value2,output});continue}if(opts.dot!==!0&&(prev.type==="slash"||prev.type==="bos")){push({type:"qmark",value:value2,output:QMARK_NO_DOT});continue}push({type:"qmark",value:value2,output:QMARK});continue}if(value2==="!"){if(opts.noextglob!==!0&&peek()==="("&&(peek(2)!=="?"||!/[!=<:]/.test(peek(3)))){extglobOpen("negate",value2);continue}if(opts.nonegate!==!0&&state.index===0){negate();continue}}if(value2==="+"){if(opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){extglobOpen("plus",value2);continue}if(prev&&prev.value==="("||opts.regex===!1){push({type:"plus",value:value2,output:PLUS_LITERAL});continue}if(prev&&(prev.type==="bracket"||prev.type==="paren"||prev.type==="brace")||state.parens>0){push({type:"plus",value:value2});continue}push({type:"plus",value:PLUS_LITERAL});continue}if(value2==="@"){if(opts.noextglob!==!0&&peek()==="("&&peek(2)!=="?"){push({type:"at",extglob:!0,value:value2,output:""});continue}push({type:"text",value:value2});continue}if(value2!=="*"){(value2==="$"||value2==="^")&&(value2=`\\${value2}`);let match=REGEX_NON_SPECIAL_CHARS.exec(remaining());match&&(value2+=match[0],state.index+=match[0].length),push({type:"text",value:value2});continue}if(prev&&(prev.type==="globstar"||prev.star===!0)){prev.type="star",prev.star=!0,prev.value+=value2,prev.output=star,state.backtrack=!0,state.globstar=!0,consume(value2);continue}let rest=remaining();if(opts.noextglob!==!0&&/^\([^?]/.test(rest)){extglobOpen("star",value2);continue}if(prev.type==="star"){if(opts.noglobstar===!0){consume(value2);continue}let prior=prev.prev,before=prior.prev,isStart=prior.type==="slash"||prior.type==="bos",afterStar=before&&(before.type==="star"||before.type==="globstar");if(opts.bash===!0&&(!isStart||rest[0]&&rest[0]!=="/")){push({type:"star",value:value2,output:""});continue}let isBrace=state.braces>0&&(prior.type==="comma"||prior.type==="brace"),isExtglob=extglobs.length&&(prior.type==="pipe"||prior.type==="paren");if(!isStart&&prior.type!=="paren"&&!isBrace&&!isExtglob){push({type:"star",value:value2,output:""});continue}for(;rest.slice(0,3)==="/**";){let after=input[state.index+4];if(after&&after!=="/")break;rest=rest.slice(3),consume("/**",3)}let isEnd=eos()||state.parens>0&&rest===")".repeat(state.parens)&&!extglobs.some(extglob=>extglob.type==="negate");if(prior.type==="bos"&&eos()){prev.type="globstar",prev.value+=value2,prev.output=globstar(opts),state.output=prev.output,state.globstar=!0,consume(value2);continue}if(prior.type==="slash"&&prior.prev.type!=="bos"&&!afterStar&&isEnd){state.output=state.output.slice(0,-(prior.output+prev.output).length),prior.output=`(?:${prior.output}`,prev.type="globstar",prev.output=globstar(opts)+(opts.strictSlashes?")":"|$)"),prev.value+=value2,state.globstar=!0,state.output+=prior.output+prev.output,consume(value2);continue}if(prior.type==="slash"&&prior.prev.type!=="bos"&&rest[0]==="/"){let end=rest[1]!==void 0?"|$":"";state.output=state.output.slice(0,-(prior.output+prev.output).length),prior.output=`(?:${prior.output}`,prev.type="globstar",prev.output=`${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`,prev.value+=value2,state.output+=prior.output+prev.output,state.globstar=!0,consume(value2+advance()),push({type:"slash",value:"/",output:""});continue}if(prior.type==="bos"&&rest[0]==="/"){prev.type="globstar",prev.value+=value2,prev.output=`(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`,state.output=prev.output,state.globstar=!0,consume(value2+advance()),push({type:"slash",value:"/",output:""});continue}state.output=state.output.slice(0,-prev.output.length),prev.type="globstar",prev.output=globstar(opts),prev.value+=value2,state.output+=prev.output,state.globstar=!0,consume(value2);continue}let token={type:"star",value:value2,output:star};if(opts.bash===!0){token.output=".*?",(prev.type==="bos"||prev.type==="slash")&&(token.output=nodot+token.output),push(token);continue}if(prev&&(prev.type==="bracket"||prev.type==="paren")&&opts.regex===!0){token.output=value2,push(token);continue}(state.index===state.start||prev.type==="slash"||prev.type==="dot")&&(prev.type==="dot"?(state.output+=NO_DOT_SLASH,prev.output+=NO_DOT_SLASH):opts.dot===!0?(state.output+=NO_DOTS_SLASH,prev.output+=NO_DOTS_SLASH):(state.output+=nodot,prev.output+=nodot),peek()!=="*"&&(state.output+=ONE_CHAR,prev.output+=ONE_CHAR)),push(token)}for(;state.brackets>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","]"));state.output=utils.escapeLast(state.output,"["),decrement("brackets")}for(;state.parens>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing",")"));state.output=utils.escapeLast(state.output,"("),decrement("parens")}for(;state.braces>0;){if(opts.strictBrackets===!0)throw new SyntaxError(syntaxError("closing","}"));state.output=utils.escapeLast(state.output,"{"),decrement("braces")}if(opts.strictSlashes!==!0&&(prev.type==="star"||prev.type==="bracket")&&push({type:"maybe_slash",value:"",output:`${SLASH_LITERAL}?`}),state.backtrack===!0){state.output="";for(let token of state.tokens)state.output+=token.output!=null?token.output:token.value,token.suffix&&(state.output+=token.suffix)}return state};parse5.fastpaths=(input,options)=>{let opts={...options},max=typeof opts.maxLength=="number"?Math.min(MAX_LENGTH,opts.maxLength):MAX_LENGTH,len=input.length;if(len>max)throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);input=REPLACEMENTS[input]||input;let{DOT_LITERAL,SLASH_LITERAL,ONE_CHAR,DOTS_SLASH,NO_DOT,NO_DOTS,NO_DOTS_SLASH,STAR,START_ANCHOR}=constants11.globChars(opts.windows),nodot=opts.dot?NO_DOTS:NO_DOT,slashDot=opts.dot?NO_DOTS_SLASH:NO_DOT,capture=opts.capture?"":"?:",state={negated:!1,prefix:""},star=opts.bash===!0?".*?":STAR;opts.capture&&(star=`(${star})`);let globstar=opts2=>opts2.noglobstar===!0?star:`(${capture}(?:(?!${START_ANCHOR}${opts2.dot?DOTS_SLASH:DOT_LITERAL}).)*?)`,create2=str3=>{switch(str3){case"*":return`${nodot}${ONE_CHAR}${star}`;case".*":return`${DOT_LITERAL}${ONE_CHAR}${star}`;case"*.*":return`${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;case"*/*":return`${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;case"**":return nodot+globstar(opts);case"**/*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;case"**/*.*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;case"**/.*":return`(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;default:{let match=/^(.*?)\.(\w+)$/.exec(str3);if(!match)return;let source2=create2(match[1]);return source2?source2+DOT_LITERAL+match[2]:void 0}}},output=utils.removePrefix(input,state),source=create2(output);return source&&opts.strictSlashes!==!0&&(source+=`${SLASH_LITERAL}?`),source};module.exports=parse5}});var require_picomatch=__commonJS({"packages/coding-agent/node_modules/picomatch/lib/picomatch.js"(exports,module){"use strict";var scan2=require_scan(),parse5=require_parse(),utils=require_utils(),constants11=require_constants(),isObject4=val=>val&&typeof val=="object"&&!Array.isArray(val),picomatch4=(glob,options,returnState=!1)=>{if(Array.isArray(glob)){let fns=glob.map(input=>picomatch4(input,options,returnState));return str3=>{for(let isMatch of fns){let state2=isMatch(str3);if(state2)return state2}return!1}}let isState=isObject4(glob)&&glob.tokens&&glob.input;if(glob===""||typeof glob!="string"&&!isState)throw new TypeError("Expected pattern to be a non-empty string");let opts=options||{},posix5=opts.windows,regex=isState?picomatch4.compileRe(glob,options):picomatch4.makeRe(glob,options,!1,!0),state=regex.state;delete regex.state;let isIgnored=()=>!1;if(opts.ignore){let ignoreOpts={...options,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch4(opts.ignore,ignoreOpts,returnState)}let matcher=(input,returnObject=!1)=>{let{isMatch,match,output}=picomatch4.test(input,regex,options,{glob,posix:posix5}),result3={glob,state,regex,posix:posix5,input,output,match,isMatch};return typeof opts.onResult=="function"&&opts.onResult(result3),isMatch===!1?(result3.isMatch=!1,returnObject?result3:!1):isIgnored(input)?(typeof opts.onIgnore=="function"&&opts.onIgnore(result3),result3.isMatch=!1,returnObject?result3:!1):(typeof opts.onMatch=="function"&&opts.onMatch(result3),returnObject?result3:!0)};return returnState&&(matcher.state=state),matcher};picomatch4.test=(input,regex,options,{glob,posix:posix5}={})=>{if(typeof input!="string")throw new TypeError("Expected input to be a string");if(input==="")return{isMatch:!1,output:""};let opts=options||{},format2=opts.format||(posix5?utils.toPosixSlashes:null),match=input===glob,output=match&&format2?format2(input):input;return match===!1&&(output=format2?format2(input):input,match=output===glob),(match===!1||opts.capture===!0)&&(opts.matchBase===!0||opts.basename===!0?match=picomatch4.matchBase(input,regex,options,posix5):match=regex.exec(output)),{isMatch:!!match,match,output}};picomatch4.matchBase=(input,glob,options,posix5=options&&options.windows)=>(glob instanceof RegExp?glob:picomatch4.makeRe(glob,options)).test(utils.basename(input,{windows:posix5}));picomatch4.isMatch=(str3,patterns,options)=>picomatch4(patterns,options)(str3);picomatch4.parse=(pattern,options)=>Array.isArray(pattern)?pattern.map(p=>picomatch4.parse(p,options)):parse5(pattern,{...options,fastpaths:!1});picomatch4.scan=(input,options)=>scan2(input,options);picomatch4.compileRe=(state,options,returnOutput=!1,returnState=!1)=>{if(returnOutput===!0)return state.output;let opts=options||{},prepend=opts.contains?"":"^",append=opts.contains?"":"$",source=`${prepend}(?:${state.output})${append}`;state&&state.negated===!0&&(source=`^(?!${source}).*$`);let regex=picomatch4.toRegex(source,options);return returnState===!0&&(regex.state=state),regex};picomatch4.makeRe=(input,options={},returnOutput=!1,returnState=!1)=>{if(!input||typeof input!="string")throw new TypeError("Expected a non-empty string");let parsed={negated:!1,fastpaths:!0};return options.fastpaths!==!1&&(input[0]==="."||input[0]==="*")&&(parsed.output=parse5.fastpaths(input,options)),parsed.output||(parsed=parse5(input,options)),picomatch4.compileRe(parsed,options,returnOutput,returnState)};picomatch4.toRegex=(source,options)=>{try{let opts=options||{};return new RegExp(source,opts.flags||(opts.nocase?"i":""))}catch(err2){if(options&&options.debug===!0)throw err2;return/$^/}};picomatch4.constants=constants11;module.exports=picomatch4}});var require_picomatch2=__commonJS({"packages/coding-agent/node_modules/picomatch/index.js"(exports,module){"use strict";var pico=require_picomatch(),utils=require_utils();function picomatch4(glob,options,returnState=!1){return options&&(options.windows===null||options.windows===void 0)&&(options={...options,windows:utils.isWindows()}),pico(glob,options,returnState)}Object.assign(picomatch4,pico);module.exports=picomatch4}});import*as fs6 from"node:fs";import*as os6 from"node:os";import*as path12 from"node:path";import{spawn as spawn11,spawnSync}from"child_process";import{randomUUID as randomUUID12}from"node:crypto";import{existsSync as existsSync45,mkdirSync as mkdirSync27,readFileSync as readFileSync45,writeFileSync as writeFileSync23}from"node:fs";import{rm as rm9}from"node:fs/promises";import{dirname as dirname47}from"node:path";import{isDeepStrictEqual as isDeepStrictEqual4}from"node:util";var dist_exports2={};__export(dist_exports2,{AGENT_TELEMETRY_SCHEMAS:()=>AGENT_TELEMETRY_SCHEMAS,AI_TELEMETRY_SCHEMA:()=>AI_TELEMETRY_SCHEMA,Agent:()=>Agent,AgentHarness:()=>AgentHarness,BACKGROUND_CONTEXT:()=>BACKGROUND_CONTEXT,BRANCH_SUMMARY_PREFIX:()=>BRANCH_SUMMARY_PREFIX,BRANCH_SUMMARY_SUFFIX:()=>BRANCH_SUMMARY_SUFFIX,BranchSummaryError:()=>BranchSummaryError,COMPACTION_SUMMARY_PREFIX:()=>COMPACTION_SUMMARY_PREFIX,COMPACTION_SUMMARY_SUFFIX:()=>COMPACTION_SUMMARY_SUFFIX,Closed:()=>Closed,CompactionError:()=>CompactionError,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES2,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES2,EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC:()=>EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,ExecutionError:()=>ExecutionError,FileError:()=>FileError,GREP_MAX_LINE_LENGTH:()=>GREP_MAX_LINE_LENGTH,HARNESS_TELEMETRY_SCHEMA:()=>HARNESS_TELEMETRY_SCHEMA,HarnessClosed:()=>HarnessClosed,HarnessFault:()=>HarnessFault,InMemoryTelemetryContext:()=>InMemoryTelemetryContext,InvalidLane:()=>InvalidLane,InvalidMessage:()=>InvalidMessage,InvalidNavigation:()=>InvalidNavigation,InvalidReadSegmentsError:()=>InvalidReadSegmentsError,JSONL_STORAGE_VERSION:()=>JSONL_STORAGE_VERSION,JsonlSessionRepo:()=>JsonlSessionRepo,LaneBusy:()=>LaneBusy,MemorySessionRepo:()=>MemorySessionRepo,NOOP_TELEMETRY_CONTEXT:()=>NOOP_TELEMETRY_CONTEXT,NoActiveOperation:()=>NoActiveOperation,NoActiveRun:()=>NoActiveRun,NothingToCompact:()=>NothingToCompact,NothingToResume:()=>NothingToResume,OperationMismatch:()=>OperationMismatch,ProviderRetryWatchdogAbortError:()=>ProviderRetryWatchdogAbortError,READ_FOLDER_SELECTION:()=>READ_FOLDER_SELECTION,READ_FOLD_SETTINGS:()=>READ_FOLD_SETTINGS,Result:()=>Result,SessionBranchExistsError:()=>SessionBranchExistsError,SessionInvalidBranchError:()=>SessionInvalidBranchError,SessionInvariantError:()=>SessionInvariantError,SessionPendingAssistantMessageError:()=>SessionPendingAssistantMessageError,SessionUnknownTargetError:()=>SessionUnknownTargetError,SliceNotImplemented:()=>SliceNotImplemented,StorageBackedSession:()=>StorageBackedSession,StreamStartTimeoutError:()=>StreamStartTimeoutError,TODO_CONTEXT:()=>TODO_CONTEXT,TaggedError:()=>TaggedError,UnknownSkill:()=>UnknownSkill,UnknownTarget:()=>UnknownTarget,UnknownTemplate:()=>UnknownTemplate,agentLoop:()=>agentLoop,agentLoopContinue:()=>agentLoopContinue,appendList:()=>appendList,applyShellOutputUpdate:()=>applyShellOutputUpdate,awaitWithContext:()=>awaitWithContext,bashExecutionToText:()=>bashExecutionToText,branchTip:()=>branchTip,branchTipInventoryPrefix:()=>branchTipInventoryPrefix,buildProviderContext:()=>buildProviderContext,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,commitWrite:()=>commitWrite,compact:()=>compact,convertToLlm:()=>convertToLlm2,createBashTool:()=>createBashTool,createBranchSummaryMessage:()=>createBranchSummaryMessage2,createCompactionSummaryMessage:()=>createCompactionSummaryMessage2,createContextKey:()=>createContextKey,createCustomMessage:()=>createCustomMessage2,createDefaultReadSummary:()=>createDefaultReadSummary,createEditTool:()=>createEditTool,createForkSnapshot:()=>createForkSnapshot,createReadTool:()=>createReadTool,createSegmentedReadView:()=>createSegmentedReadView,createTypedSpanStarter:()=>createTypedSpanStarter,createWriteTool:()=>createWriteTool,defineTelemetrySchema:()=>defineTelemetrySchema,deleteList:()=>deleteList,deleteValue:()=>deleteValue,entryLabel:()=>entryLabel,err:()=>err,estimateContextTokens:()=>estimateContextTokens2,estimateTokens:()=>estimateTokens,executeShellWithCapture:()=>executeShellWithCapture,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatPromptTemplateInvocation:()=>formatPromptTemplateInvocation,formatSize:()=>formatSize2,formatSkillInvocation:()=>formatSkillInvocation,formatSkillsForSystemPrompt:()=>formatSkillsForSystemPrompt,generateBranchSummary:()=>generateBranchSummary,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,getLastAssistantUsage:()=>getLastAssistantUsage,getOrThrow:()=>getOrThrow,getOrUndefined:()=>getOrUndefined,getTelemetryContext:()=>getTelemetryContext,insertEntry:()=>insertEntry,insertUsage:()=>insertUsage,isReadSummaryPath:()=>isReadSummaryPath,laneConfig:()=>laneConfig,laneState:()=>laneState,languageForPath:()=>languageForPath,list:()=>list,loadPromptTemplates:()=>loadPromptTemplates,loadSkills:()=>loadSkills,loadSourcedPromptTemplates:()=>loadSourcedPromptTemplates,loadSourcedSkills:()=>loadSourcedSkills,matchError:()=>matchError,ok:()=>ok,operationMeta:()=>operationMeta,operationPreparation:()=>operationPreparation,operationPreparationPrefix:()=>operationPreparationPrefix,operationResult:()=>operationResult,operationScopeOf:()=>operationScopeOf,operationState:()=>operationState,operationToolArgs:()=>operationToolArgs,operationToolArgsPrefix:()=>operationToolArgsPrefix,operationToolMemo:()=>operationToolMemo,operationToolMemoPrefix:()=>operationToolMemoPrefix,parseCommandArgs:()=>parseCommandArgs,pendingAssistantFrames:()=>pendingAssistantFrames,pendingEntry:()=>pendingEntry,pendingToolOutput:()=>pendingToolOutput,pendingToolOutputPrefix:()=>pendingToolOutputPrefix,prepareAgentToolCall:()=>prepareAgentToolCall,prepareAgentToolCallArguments:()=>prepareAgentToolCallArguments,prepareBranchEntries:()=>prepareBranchEntries,prepareCompaction:()=>prepareCompaction,prepareReadFolder:()=>prepareReadFolder,prepareStorageCommit:()=>prepareStorageCommit,prepareToolArguments:()=>prepareToolArguments,projectForkCurrentStateWrite:()=>projectForkCurrentStateWrite,readSummaryEngineForPath:()=>readSummaryEngineForPath,reduceLaneSnapshot:()=>reduceLaneSnapshot,renderSegmentedReadView:()=>renderSegmentedReadView,resolveListReadOptions:()=>resolveListReadOptions,resolveToolNameAlias:()=>resolveToolNameAlias,runAgentLoop:()=>runAgentLoop,runAgentLoopContinue:()=>runAgentLoopContinue,sanitizeBinaryOutput:()=>sanitizeShellOutput,selectedReadFolder:()=>selectedReadFolder,serializeConversation:()=>serializeConversation,sessionName:()=>sessionName,setDefaultStreamFn:()=>setDefaultStreamFn,setValue:()=>setValue,shouldCompact:()=>shouldCompact,startAiSpan:()=>startAiSpan,startHarnessSpan:()=>startHarnessSpan,streamProxy:()=>streamProxy,substituteArgs:()=>substituteArgs,toError:()=>toError,truncateHead:()=>truncateHead2,truncateLine:()=>truncateLine2,truncateTail:()=>truncateTail2,utf8ByteLength:()=>utf8ByteLength,uuidv7:()=>uuidv7,validateCommittedWrites:()=>validateCommittedWrites,value:()=>value,withAbortSignal:()=>withAbortSignal,withCancel:()=>withCancel,withContextValue:()=>withContextValue,withTelemetryContext:()=>withTelemetryContext,withoutAbortSignal:()=>withoutAbortSignal});function startNoopSpan(_options,callback){try{return Promise.resolve(callback(noopTelemetrySpan))}catch(error2){return Promise.reject(error2)}}var noopTelemetrySpan={startSpan:startNoopSpan,addEvent:()=>{},setAttributes:()=>{},setStatus:()=>{}};Object.freeze(noopTelemetrySpan);var NOOP_TELEMETRY_CONTEXT=noopTelemetrySpan;function copyAttributeValue(value2){return Array.isArray(value2)?[...value2]:value2}function copyAttributes(attributes){let copy={};if(!attributes)return copy;for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(copy[name]=copyAttributeValue(value2));return copy}function mergeAttributes(current,attributes){let merged=copyAttributes(current);for(let[name,value2]of Object.entries(attributes))value2!==void 0&&(merged[name]=copyAttributeValue(value2));return merged}function copyStatus(status){return status.status==="ok"?{status:"ok"}:status.error?{status:"error",error:{name:status.error.name,message:status.error.message}}:{status:"error"}}function automaticErrorStatus(error2){try{if(error2 instanceof Error)return{status:"error",error:{name:error2.name,message:error2.message}}}catch{}return{status:"error"}}function settleSpan(state,span,failed,error2){span.settled||(failed&&!span.explicitStatus&&(span.status=automaticErrorStatus(error2)),span.settled=!0,span.endSequence=state.nextEndSequence++)}function createSpan(state,parent,options){let name=options.name,attributes=copyAttributes(options.attributes);return{id:state.nextSpanId++,parentId:parent?.id??null,name,attributes,events:[],status:{status:"ok"},explicitStatus:!1,settled:!1}}function startInMemorySpan(state,parent,options,callback){if(parent?.settled)return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback);let recordedSpan;try{recordedSpan=createSpan(state,parent,options),state.spans.push(recordedSpan)}catch{return NOOP_TELEMETRY_CONTEXT.startSpan(options,callback)}let span={startSpan:(childOptions,childCallback)=>startInMemorySpan(state,recordedSpan,childOptions,childCallback),addEvent(name,attributes){if(!recordedSpan.settled)try{recordedSpan.events.push({name,attributes:copyAttributes(attributes)})}catch{}},setAttributes(attributes){if(!recordedSpan.settled)try{recordedSpan.attributes=mergeAttributes(recordedSpan.attributes,attributes)}catch{}},setStatus(status){if(!recordedSpan.settled)try{recordedSpan.status=copyStatus(status),recordedSpan.explicitStatus=!0}catch{}}},result3;try{result3=callback(span)}catch(error2){return settleSpan(state,recordedSpan,!0,error2),Promise.reject(error2)}return Promise.resolve(result3).then(value2=>(settleSpan(state,recordedSpan,!1),value2),error2=>{throw settleSpan(state,recordedSpan,!0,error2),error2})}var InMemoryTelemetryContext=class{constructor(){this.state={spans:[],nextSpanId:1,nextEndSequence:1}}startSpan(options,callback){return startInMemorySpan(this.state,void 0,options,callback)}getSpans(){return this.state.spans.map(span=>({id:span.id,parentId:span.parentId,name:span.name,attributes:copyAttributes(span.attributes),events:span.events.map(event=>({name:event.name,attributes:copyAttributes(event.attributes)})),status:copyStatus(span.status),settled:span.settled,...span.endSequence===void 0?{}:{endSequence:span.endSequence}}))}};function defineTelemetrySchema(schema){return schema}function bindTypedSpanStarter(telemetryContext){return(name,attributes,callback)=>telemetryContext.startSpan({name,attributes},span=>callback(span,bindTypedSpanStarter(span)))}function createTypedSpanStarter(telemetryContext,_schemas){return bindTypedSpanStarter(telemetryContext)}var EMPTY_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ProviderRetryWatchdogAbortError=class extends Error{constructor(providerCause){super(providerCause),this.providerCause=providerCause,this.name="ProviderRetryWatchdogAbortError"}},EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC="empty_tool_use_terminal_state";function demoteToolUseWithoutToolCalls(message){return message.stopReason!=="toolUse"||message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"stop",diagnostics:[...message.diagnostics??[],{type:EMPTY_TOOL_USE_DEMOTION_DIAGNOSTIC,timestamp:Date.now(),details:{}}]}}function promoteStopWithPendingToolCalls(message){return message.stopReason!=="stop"||!message.content.some(block=>block.type==="toolCall")?message:{...message,stopReason:"toolUse"}}function shouldTerminateAssistantTurn(message){return message.stopReason==="error"||message.stopReason==="aborted"||isClassifierRefusal(message)}function isStreamIdleTimeoutError(error2){return error2 instanceof Error&&error2.name==="StreamIdleTimeoutError"}function shouldFinalizeIdleAsStop(partialMessage,providerToolResults){if(!partialMessage)return!1;let toolCalls=partialMessage.content.filter(block=>block.type==="toolCall");return toolCalls.length===0?!1:providerToolResults.length>0?!0:toolCalls.every(block=>isCursorExecResolved(block))}function createTerminalFailureAssistantMessage(model,reason,error2,partialMessage){let errorMessage8=error2 instanceof Error?error2.message:String(error2),providerDiagnostic=reason==="error"?readProviderDiagnostic(error2):void 0;return{role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??model.api,provider:partialMessage?.provider??model.provider,model:partialMessage?.model??model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??EMPTY_USAGE,stopReason:reason,errorMessage:errorMessage8||(reason==="aborted"?"Request was aborted":"Error"),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error2 instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:partialMessage?.timestamp??Date.now()}}function normalizeTerminalAssistantMessage(message,event){if(event.type==="done")return message;let errorMessage8=message.errorMessage??(event.reason==="aborted"?"Request was aborted":"Error");return message.stopReason===event.reason&&message.errorMessage===errorMessage8?message:{...message,stopReason:event.reason,errorMessage:errorMessage8}}function isEmptyStop(message){return message.stopReason==="stop"&&!hasVisibleAssistantContent(message)}function isEmptyToolUse(message){return message.stopReason==="toolUse"&&!message.content.some(block=>block.type==="toolCall")}function isMeaningfulContentEvent(event,policy){switch(event.type){case"toolcall_start":return!0;case"text_delta":return hasVisibleText(event.delta);case"text_end":return hasVisibleText(event.content);case"thinking_delta":return policy.thinkingCommits&&hasVisibleText(event.delta);case"thinking_end":return policy.thinkingCommits&&hasVisibleText(event.content);default:return!1}}function appendRetryDiagnostic(message,type2="empty_assistant_response_recovery",details={retries:1}){return{...message,diagnostics:[...message.diagnostics??[],{type:type2,timestamp:Date.now(),details}]}}function recoveryDiagnosticType(toolUse){return toolUse?"empty_tool_use_response_recovery":"empty_assistant_response_recovery"}function createEmptyResponseFailure(message,toolUse=!1){let errorMessage8=toolUse?EMPTY_TOOL_USE_ERROR:EMPTY_RESPONSE_ERROR;return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse)),content:[{type:"text",text:errorMessage8}],stopReason:"error",errorMessage:errorMessage8}}function createForwardedEmptyFailure(message,toolUse){return{...appendRetryDiagnostic(message,recoveryDiagnosticType(toolUse),{retries:0,forwarded:!0}),stopReason:"error",errorMessage:toolUse?FORWARDED_EMPTY_TOOL_USE_ERROR:FORWARDED_EMPTY_RESPONSE_ERROR}}function createRetryingStream(firstStream,createStream,policy){let outerStream=createAssistantMessageEventStream();return(async()=>{try{let stream2=firstStream,retrying=!1;for(;;){let buffered=[],forwarding=!1,retry=!1;for await(let event of stream2){if(event.type==="done"){let emptyToolUse=isEmptyToolUse(event.message);if(isEmptyStop(event.message)||emptyToolUse){if(forwarding){outerStream.push({type:"error",reason:"error",error:createForwardedEmptyFailure(event.message,emptyToolUse)}),outerStream.end();return}if(!retrying){retry=!0;break}let error2=createEmptyResponseFailure(event.message,emptyToolUse);outerStream.push({type:"error",reason:"error",error:error2}),outerStream.end();return}let terminal=retrying?{...event,message:appendRetryDiagnostic(event.message,recoveryDiagnosticType(isEmptyToolUse(event.message)))}:event;if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(terminal),outerStream.end();return}if(event.type==="error"){if(!forwarding)for(let pending of buffered)outerStream.push(pending);outerStream.push(event),outerStream.end();return}if(forwarding){outerStream.push(event);continue}if(buffered.push(event),isMeaningfulContentEvent(event,policy)){for(let pending of buffered)outerStream.push(pending);forwarding=!0}}if(!retry){outerStream.end(retrying?appendRetryDiagnostic(await stream2.result()):await stream2.result());return}retrying=!0,stream2=await createStream()}}catch(error2){outerStream.fail(error2)}})(),outerStream}function withEmptyAssistantRecovery(model,streamFunction){if(!shouldRecoverTextToolCalls(model)&&getToolCallFormat(model)===void 0)return streamFunction;let policy={thinkingCommits:!hasKimiTextToolCallRecovery(model)};return async(requestedModel,context,options)=>{let createStream=()=>streamFunction(requestedModel,context,options);return createRetryingStream(await createStream(),createStream,policy)}}var defaultStreamFn;function setDefaultStreamFn(streamFn){defaultStreamFn=streamFn}function getDefaultStreamFn(){if(!defaultStreamFn)throw new Error("No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().");return defaultStreamFn}function prepareToolArguments(shim,args){return shim?shim(structuredClone(args)):args}function prepareAgentToolCallArguments(tool,toolCall){return tool.prepareArguments?{...toolCall,arguments:prepareToolArguments(tool.prepareArguments,toolCall.arguments)}:toolCall}function resolveToolNameAlias(requested,available){return resolveToolNameMatch(requested,available)}function toolNameCorrectionNotice(requested,resolved){return`[auto-corrected] no tool is named "${requested}"; ran "${resolved}". Call tools by their exact listed name.`}async function resolveCallTool(currentContext,toolCall,config){if(toolCall.incomplete===!0)return;let exact=currentContext.tools?.find(candidate=>candidate.name===toolCall.name);if(exact)return exact;let resolved=await config.resolveUnknownToolCall?.(toolCall.name,currentContext);if(resolved)return resolved;let aliasedName=resolveToolNameAlias(toolCall.name,(currentContext.tools??[]).map(candidate=>candidate.name));return currentContext.tools?.find(candidate=>candidate.name===aliasedName)}function withToolNameCorrection(result3,requestedName,resolvedName){return{...result3,content:[{type:"text",text:toolNameCorrectionNotice(requestedName,resolvedName),audience:"model"},...result3.content??[]]}}function agentLoop(prompts,context,config,signal,streamFn){let stream2=createAgentStream();return runAgentLoop(prompts,context,config,async event=>{stream2.push(event)},signal,streamFn).then(messages=>{stream2.end(messages)}),stream2}function agentLoopContinue(context,config,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let stream2=createAgentStream();return runAgentLoopContinue(context,config,async event=>{stream2.push(event)},signal,streamFn).then(messages=>{stream2.end(messages)}),stream2}async function runAgentLoop(prompts,context,config,emit,signal,streamFn){let newMessages=[...prompts],currentContext={...context,messages:[...context.messages,...prompts]};await emit({type:"agent_start"}),await emit({type:"turn_start"});for(let prompt of prompts)await emit({type:"message_start",message:prompt}),await emit({type:"message_end",message:prompt});return await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}async function runAgentLoopContinue(context,config,emit,signal,streamFn){if(context.messages.length===0)throw new Error("Cannot continue: no messages in context");if(context.messages[context.messages.length-1].role==="assistant")throw new Error("Cannot continue from message role: assistant");let newMessages=[],currentContext={...context};return await emit({type:"agent_start"}),await emit({type:"turn_start"}),await runLoop(currentContext,newMessages,config,signal,emit,streamFn??getDefaultStreamFn()),newMessages}function createAgentStream(){return new EventStream(event=>event.type==="agent_end",event=>event.type==="agent_end"?event.messages:[])}var StreamIdleTimeoutError=class extends Error{constructor(timeoutMs){super(`Idle timeout waiting for provider stream after ${timeoutMs}ms`),this.name="StreamIdleTimeoutError"}},StreamStartTimeoutError=class extends Error{constructor(timeoutMs){super(`Provider stream start timed out after ${timeoutMs}ms (raise streamStartTimeoutMs \u2014 retry.provider.streamStartTimeoutMs in senpi settings; 0 disables)`),this.name="StreamStartTimeoutError"}};async function runLoop(initialContext,newMessages,initialConfig,signal,emit,streamFunction){let currentContext=initialContext,config=initialConfig,firstTurn=!0,firstProviderRequest=!0,drainedTerminatingQueue,turnStartAlreadyEmitted=!1,refreshTerminatingQueueDrain=async()=>{!drainedTerminatingQueue||!config.restorePendingMessages||(await config.restorePendingMessages(drainedTerminatingQueue,pendingMessages),pendingMessages=await config.getSteeringMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"steering":void 0,pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],drainedTerminatingQueue=pendingMessages.length>0?"followUp":void 0))},pendingMessages=await config.getSteeringMessages?.()||[];for(;;){let hasMoreToolCalls=!0;for(;hasMoreToolCalls||pendingMessages.length>0;){if(turnStartAlreadyEmitted?turnStartAlreadyEmitted=!1:firstTurn?firstTurn=!1:await emit({type:"turn_start"}),drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}if(pendingMessages.length>0){for(let message2 of pendingMessages)await emit({type:"message_start",message:message2}),await emit({type:"message_end",message:message2}),currentContext.messages.push(message2),newMessages.push(message2);pendingMessages=[]}let isInitialProviderRequest=firstProviderRequest;firstProviderRequest=!1;let requestConfig=isInitialProviderRequest?{...config,timeoutMs:config.initialRequestTimeoutMs??config.timeoutMs,streamStartTimeoutMs:config.initialRequestStreamStartTimeoutMs??config.streamStartTimeoutMs}:config,streamed=await streamAssistantResponse(currentContext,requestConfig,signal,emit,withEmptyAssistantRecovery(requestConfig.model,streamFunction),isInitialProviderRequest?config.timeoutMs:requestConfig.timeoutMs),message=demoteToolUseWithoutToolCalls(promoteStopWithPendingToolCalls(streamed.message)),providerToolResults=streamed.providerToolResults;newMessages.push(message);let toolResults=[];for(let result3 of providerToolResults)await emit({type:"message_start",message:result3}),await emit({type:"message_end",message:result3}),currentContext.messages.push(result3),newMessages.push(result3),toolResults.push(result3);if(shouldTerminateAssistantTurn(message)){await emit({type:"turn_end",message,toolResults}),await emit({type:"agent_end",messages:newMessages});return}let toolCalls=message.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));hasMoreToolCalls=!1;let toolBatchTerminated=!1;if(toolCalls.length>0){let executedToolBatch=message.stopReason==="length"?await failToolCallsFromTruncatedMessage(toolCalls,emit):await executeToolCalls(currentContext,message,config,signal,emit);toolResults.push(...executedToolBatch.messages),toolBatchTerminated=executedToolBatch.terminate,hasMoreToolCalls=!executedToolBatch.terminate;for(let result3 of executedToolBatch.messages)currentContext.messages.push(result3),newMessages.push(result3)}if(await emit({type:"turn_end",message,toolResults}),signal?.aborted){await emit({type:"agent_end",messages:newMessages});return}let nextTurnContext={message,toolResults,context:currentContext,newMessages};if(await config.shouldStopAfterTurn?.(nextTurnContext)){await emit({type:"agent_end",messages:newMessages});return}if(toolBatchTerminated){if(pendingMessages=await config.getSteeringMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="steering"),pendingMessages.length===0&&(pendingMessages=await config.getFollowUpMessages?.()||[],pendingMessages.length>0&&(drainedTerminatingQueue="followUp")),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}await emit({type:"turn_start"}),turnStartAlreadyEmitted=!0}let nextTurnSnapshot;try{nextTurnSnapshot=await config.prepareNextTurn?.(nextTurnContext)}catch(error2){throw drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),error2}if(nextTurnSnapshot&&(currentContext=nextTurnSnapshot.context??currentContext,config={...config,model:nextTurnSnapshot.model??config.model,reasoning:nextTurnSnapshot.thinkingLevel===void 0?config.reasoning:nextTurnSnapshot.thinkingLevel==="off"?void 0:nextTurnSnapshot.thinkingLevel,thinkingSelection:nextTurnSnapshot.thinkingSelection===void 0?config.thinkingSelection:nextTurnSnapshot.thinkingSelection??void 0,abortServerSideFallback:nextTurnSnapshot.abortServerSideFallback??config.abortServerSideFallback}),signal?.aborted){drainedTerminatingQueue&&await config.restorePendingMessages?.(drainedTerminatingQueue,pendingMessages),await emit({type:"agent_end",messages:newMessages});return}if(drainedTerminatingQueue){if(await refreshTerminatingQueueDrain(),pendingMessages.length===0){await emit({type:"agent_end",messages:newMessages});return}drainedTerminatingQueue=void 0}toolBatchTerminated||(pendingMessages=await config.getSteeringMessages?.()||[])}let followUpMessages=await config.getFollowUpMessages?.()||[];if(followUpMessages.length>0){pendingMessages=followUpMessages;continue}break}await emit({type:"agent_end",messages:newMessages})}function providerTools(context,model){let declaredTools=context.declaredTools;if(declaredTools===void 0||model===void 0||!supportsAllowedToolChoice(model))return{tools:context.tools};let activeTools=context.tools??[],declaredNames=new Set(declaredTools.map(tool=>tool.name));return{tools:[...declaredTools,...activeTools.filter(tool=>!declaredNames.has(tool.name))],activeToolNames:activeTools.map(tool=>tool.name)}}async function buildProviderContext(context,config,signal){let messages=context.messages;return config.transformContext&&(messages=await config.transformContext(messages,signal)),{systemPrompt:context.systemPrompt,messages:await config.convertToLlm(messages),...providerTools(context,config.model)}}async function streamAssistantResponse(context,config,signal,emit,streamFunction,streamIdleTimeoutMs){let partialMessage=null,addedPartial=!1,providerToolResults=[],thinkingTiming=new Map;function propagateThinkingTiming(finalMessage){for(let timing of thinkingTiming.values())timing.endedAt===void 0&&(timing.endedAt=Date.now());for(let[contentIndex,timing]of thinkingTiming){let block=finalMessage.content[contentIndex];block?.type==="thinking"&&(block.startedAt=timing.startedAt,block.endedAt=timing.endedAt)}}let requestAbortController=new AbortController,detachCallerAbort;if(signal!==void 0)if(signal.aborted)requestAbortController.abort(signal.reason);else{let onCallerAbort=()=>requestAbortController.abort(signal.reason);signal.addEventListener("abort",onCallerAbort,{once:!0}),detachCallerAbort=()=>signal.removeEventListener("abort",onCallerAbort)}try{let llmContext=await buildProviderContext(context,config,signal),resolvedApiKey=(config.getApiKey?await config.getApiKey(config.model.provider):void 0)||config.apiKey,response=await streamFunction(config.model,llmContext,{...config,streamKind:"main",apiKey:resolvedApiKey,signal:requestAbortController.signal,...config.cursorExecHandlers?{execHandlers:typeof config.cursorExecHandlers=="function"?config.cursorExecHandlers(signal??requestAbortController.signal):config.cursorExecHandlers,onToolResult:result3=>{providerToolResults.push(result3)}}:{}}),iterator=response[Symbol.asyncIterator](),eventReader=createAssistantEventReader(iterator,streamIdleTimeoutMs,requestAbortController.signal,error2=>requestAbortController.abort(error2),config.streamStartTimeoutMs,response);try{for(;;){let next=await eventReader.next();if(next.done)break;let event=next.value;switch(event.type){case"start":partialMessage=event.partial,context.messages.push(partialMessage),addedPartial=!0,await emit({type:"message_start",message:{...partialMessage}});break;case"text_start":case"text_delta":case"text_end":case"thinking_start":case"thinking_delta":case"thinking_end":case"toolcall_start":case"toolcall_delta":case"toolcall_end":if(partialMessage){if(partialMessage=event.partial,event.type==="thinking_start"||event.type==="thinking_delta"||event.type==="thinking_end"){let timing=thinkingTiming.get(event.contentIndex);event.type==="thinking_start"&&timing===void 0&&(timing={startedAt:Date.now()},thinkingTiming.set(event.contentIndex,timing)),event.type==="thinking_end"&&timing!==void 0&&(timing.endedAt=Date.now());let block=partialMessage.content[event.contentIndex];block?.type==="thinking"&&timing!==void 0&&(block.startedAt=timing.startedAt,timing.endedAt!==void 0&&(block.endedAt=timing.endedAt))}context.messages[context.messages.length-1]=partialMessage,await emit({type:"message_update",assistantMessageEvent:event,message:{...partialMessage}})}break;case"done":case"error":{let finalMessage2=normalizeTerminalAssistantMessage(await response.result(),event);return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:context.messages.push(finalMessage2),addedPartial||await emit({type:"message_start",message:{...finalMessage2}}),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}}}}finally{eventReader.dispose()}let finalMessage=await response.result();return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}catch(error2){if(isStreamIdleTimeoutError(error2)&&shouldFinalizeIdleAsStop(partialMessage,providerToolResults)){let finalMessage2={role:"assistant",content:partialMessage?.content??[{type:"text",text:""}],api:partialMessage?.api??config.model.api,provider:partialMessage?.provider??config.model.provider,model:partialMessage?.model??config.model.id,responseModel:partialMessage?.responseModel,responseId:partialMessage?.responseId,diagnostics:partialMessage?.diagnostics,usage:partialMessage?.usage??{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:"stop",timestamp:partialMessage?.timestamp??Date.now()};return propagateThinkingTiming(finalMessage2),addedPartial?context.messages[context.messages.length-1]=finalMessage2:(context.messages.push(finalMessage2),await emit({type:"message_start",message:{...finalMessage2}})),await emit({type:"message_end",message:finalMessage2}),{message:finalMessage2,providerToolResults}}let finalMessage=createTerminalFailureAssistantMessage(config.model,signal?.aborted?"aborted":"error",error2,partialMessage);return propagateThinkingTiming(finalMessage),addedPartial?context.messages[context.messages.length-1]=finalMessage:(context.messages.push(finalMessage),await emit({type:"message_start",message:{...finalMessage}})),await emit({type:"message_end",message:finalMessage}),{message:finalMessage,providerToolResults}}finally{requestAbortController.abort(),detachCallerAbort?.()}}var ABORTED=Symbol("aborted");function abortError(reason){return reason instanceof Error?reason:new Error("Request was aborted")}function closeAssistantIterator(iterator){Promise.resolve(iterator.return?.()).catch(()=>{})}function normalizeTimeoutMs(timeoutMs){return typeof timeoutMs=="number"&&Number.isFinite(timeoutMs)&&timeoutMs>0?timeoutMs:void 0}function createAssistantEventReader(iterator,timeoutMs,signal,onIdleTimeout,streamStartTimeoutMs,stream2){let idleTimeoutMs=normalizeTimeoutMs(timeoutMs),startTimeoutMs=normalizeTimeoutMs(streamStartTimeoutMs),sawFirstEvent=!1,removeAbortListener2,abortPromise;return signal!==void 0&&(signal.aborted?abortPromise=Promise.resolve(ABORTED):abortPromise=new Promise(resolve42=>{let abortHandler=()=>resolve42(ABORTED);signal.addEventListener("abort",abortHandler,{once:!0}),removeAbortListener2=()=>signal.removeEventListener("abort",abortHandler)})),{next:async()=>{if(signal?.aborted)return closeAssistantIterator(iterator),Promise.reject(abortError(signal.reason));let useStartBound=!sawFirstEvent&&startTimeoutMs!==void 0,result3=await readNextAssistantEvent(iterator,useStartBound?startTimeoutMs:idleTimeoutMs,useStartBound?ms=>new StreamStartTimeoutError(ms):ms=>new StreamIdleTimeoutError(ms),abortPromise,onIdleTimeout,stream2,signal);return result3.done||(sawFirstEvent=!0),result3},dispose:()=>removeAbortListener2?.()}}async function readNextAssistantEvent(iterator,idleTimeoutMs,makeTimeoutError,abortPromise,onIdleTimeout,stream2,signal){if(idleTimeoutMs===void 0&&abortPromise===void 0)return iterator.next();let timeout,settled=!1;return new Promise((resolve42,reject)=>{let settle=complete=>{settled||(settled=!0,timeout!==void 0&&clearTimeout(timeout),complete())};if(idleTimeoutMs!==void 0){let onIdleDeadline=()=>{if(stream2?.hasPendingLocalWork?.()){timeout=setTimeout(onIdleDeadline,idleTimeoutMs);return}let error2=makeTimeoutError(idleTimeoutMs);closeAssistantIterator(iterator),settle(()=>reject(error2)),onIdleTimeout?.(error2)};timeout=setTimeout(onIdleDeadline,idleTimeoutMs)}(abortPromise?Promise.race([iterator.next(),abortPromise]):iterator.next()).then(result3=>{if(result3===ABORTED){closeAssistantIterator(iterator),settle(()=>reject(abortError(signal?.reason)));return}settle(()=>resolve42(result3))},error2=>settle(()=>reject(error2)))})}function createIncompleteToolCallErrorMessage(toolName,errorMessage8){return errorMessage8!==void 0?`${errorMessage8}${errorMessage8.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${toolName}" was not executed: the response ended before the tool call was complete because it hit the output token limit. Re-issue the tool call with complete arguments.`}async function failToolCallsFromTruncatedMessage(toolCalls,emit){let messages=[];for(let toolCall of toolCalls){await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:toolCall.name,args:toolCall.arguments});let finalized={toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name)),isError:!0};await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:!1}}async function executeToolCalls(currentContext,assistantMessage,config,signal,emit){let toolCalls=assistantMessage.content.filter(c=>c.type==="toolCall"&&!isCursorExecResolved(c));return config.toolExecution==="sequential"?executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit):executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit)}async function executeToolCallsSequential(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],messages=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),finalized;if(preparation.kind==="immediate")finalized={toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};else{let executed=await executePreparedToolCall(preparation,signal,emit);finalized=await finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}await emitToolExecutionEnd(finalized,emit);let toolResultMessage=createToolResultMessage(finalized);if(await emitToolResultMessage(toolResultMessage,emit),finalizedCalls.push(finalized),messages.push(toolResultMessage),signal?.aborted)break}return{messages,terminate:shouldTerminateToolBatch(finalizedCalls)}}async function executeToolCallsParallel(currentContext,assistantMessage,toolCalls,config,signal,emit){let finalizedCalls=[],preparedCalls=[],lastSequentialCall,currentParallelWave=[];for(let toolCall of toolCalls){let tool=await resolveCallTool(currentContext,toolCall,config);await emit({type:"tool_execution_start",toolCallId:toolCall.id,toolName:tool?.name??toolCall.name,args:toolCall.arguments});let preparation=await prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal),isSequential=isSequentialToolCall(currentContext,preparation.toolCall),dependencies=isSequential?[...lastSequentialCall?[lastSequentialCall]:[],...currentParallelWave]:lastSequentialCall?[lastSequentialCall]:[];if(preparedCalls.push({preparation,isSequential,dependencies}),isSequential?(lastSequentialCall=void 0,currentParallelWave=[]):currentParallelWave.push(Promise.resolve(void 0)),signal?.aborted)break}let previousSequential,previousWave=[];for(let{preparation,isSequential}of preparedCalls){let dependencies=isSequential?[...previousSequential?[previousSequential]:[],...previousWave]:previousSequential?[previousSequential]:[],finalizedCall=(async()=>{await Promise.all(dependencies);let finalized=signal?.aborted?{toolCall:preparation.toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:await runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit);return await emitToolExecutionEnd(finalized,emit),finalized})();finalizedCalls.push(finalizedCall),isSequential?(previousSequential=finalizedCall,previousWave=[]):previousWave.push(finalizedCall)}let orderedFinalizedCalls=await Promise.all(finalizedCalls),messages=[];for(let finalized of orderedFinalizedCalls){let toolResultMessage=createToolResultMessage(finalized);await emitToolResultMessage(toolResultMessage,emit),messages.push(toolResultMessage)}return{messages,terminate:shouldTerminateToolBatch(orderedFinalizedCalls)}}async function runPreparedToolCall(currentContext,assistantMessage,preparation,config,signal,emit){if(preparation.kind==="immediate")return{toolCall:preparation.toolCall,result:preparation.result,isError:preparation.isError};let executed=await executePreparedToolCall(preparation,signal,emit);return finalizeExecutedToolCall(currentContext,assistantMessage,preparation,executed,config,signal)}function isSequentialToolCall(currentContext,toolCall){return currentContext.tools?.find(tool=>tool.name===toolCall.name)?.executionMode==="sequential"}function shouldTerminateToolBatch(finalizedCalls){return finalizedCalls.length>0&&finalizedCalls.every(finalized=>finalized.result.terminate===!0)}function prepareAgentToolCall(tool,toolCall){let preparedToolCall=prepareAgentToolCallArguments(tool,toolCall);return{toolCall:preparedToolCall,tool,args:validateToolArguments(tool,preparedToolCall)}}async function prepareToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){if(toolCall.incomplete===!0)return{kind:"immediate",toolCall,result:createErrorToolResult(createIncompleteToolCallErrorMessage(toolCall.name,toolCall.errorMessage)),isError:!0};if(!tool){let hint=config.removedToolHints?.[toolCall.name];return{kind:"immediate",toolCall,result:createErrorToolResult(hint===void 0?`Tool ${toolCall.name} not found`:`Tool ${toolCall.name} not found. ${hint}`),isError:!0}}if(tool.name!==toolCall.name){let requestedName=toolCall.name,outcome=await prepareResolvedToolCall(currentContext,assistantMessage,{...toolCall,name:tool.name},tool,config,signal);return outcome.kind==="prepared"?{...outcome,requestedName}:{...outcome,result:withToolNameCorrection(outcome.result,requestedName,tool.name)}}return prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal)}async function prepareResolvedToolCall(currentContext,assistantMessage,toolCall,tool,config,signal){try{let preparedToolCall=prepareAgentToolCall(tool,toolCall),validatedArgs=preparedToolCall.args;if(config.beforeToolCall){let beforeResult=await config.beforeToolCall({assistantMessage,toolCall:preparedToolCall.toolCall,args:validatedArgs,context:currentContext},signal);if(signal?.aborted)return{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0};if(beforeResult?.block){let result3=createErrorToolResult(beforeResult.reason||"Tool execution was blocked");return beforeResult.terminate===!0&&(result3.terminate=!0),{kind:"immediate",toolCall,result:result3,isError:!0}}}return signal?.aborted?{kind:"immediate",toolCall,result:createErrorToolResult("Operation aborted"),isError:!0}:{kind:"prepared",toolCall:preparedToolCall.toolCall,tool,args:validatedArgs}}catch(error2){return{kind:"immediate",toolCall,result:createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError:!0}}}function abortReleasePromise(signal){if(signal!==void 0)return signal.aborted?Promise.resolve(ABORTED):new Promise(resolve42=>{signal.addEventListener("abort",()=>resolve42(ABORTED),{once:!0})})}async function executePreparedToolCall(prepared,signal,emit){let updateEvents=[],acceptingUpdates=!0;try{let execution=prepared.tool.execute(prepared.toolCall.id,prepared.args,signal,partialResult=>{acceptingUpdates&&updateEvents.push(Promise.resolve(emit({type:"tool_execution_update",toolCallId:prepared.toolCall.id,toolName:prepared.toolCall.name,args:prepared.toolCall.arguments,partialResult})))}),abortRelease=abortReleasePromise(signal),settled=abortRelease?await Promise.race([execution,abortRelease]):await execution;return settled===ABORTED?(Promise.resolve(execution).catch(()=>{}),acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult("Tool execution aborted"),isError:!0}):(acceptingUpdates=!1,await Promise.all(updateEvents),{result:settled,isError:settled.isError===!0})}catch(error2){return acceptingUpdates=!1,await Promise.all(updateEvents),{result:createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError:!0}}finally{acceptingUpdates=!1}}async function finalizeExecutedToolCall(currentContext,assistantMessage,prepared,executed,config,signal){let result3=executed.result,isError=executed.isError;if(config.afterToolCall)try{let afterResult=await config.afterToolCall({assistantMessage,toolCall:prepared.toolCall,args:prepared.args,result:result3,isError,context:currentContext},signal);afterResult&&(result3={...result3,content:afterResult.content??result3.content,details:afterResult.details??result3.details,usage:afterResult.usage??result3.usage,terminate:afterResult.terminate??result3.terminate},isError=afterResult.isError??isError)}catch(error2){result3=createErrorToolResult(error2 instanceof Error?error2.message:String(error2)),isError=!0}return prepared.requestedName!==void 0&&(result3=withToolNameCorrection(result3,prepared.requestedName,prepared.toolCall.name)),{toolCall:prepared.toolCall,result:result3,isError}}function createErrorToolResult(message){return{content:[{type:"text",text:message}],details:{}}}async function emitToolExecutionEnd(finalized,emit){await emit({type:"tool_execution_end",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,result:finalized.result,isError:finalized.isError})}function createToolResultMessage(finalized){return{role:"toolResult",toolCallId:finalized.toolCall.id,toolName:finalized.toolCall.name,content:finalized.result.content??[],details:finalized.result.details,usage:finalized.result.usage,...finalized.result.addedToolNames?.length?{addedToolNames:finalized.result.addedToolNames}:{},isError:finalized.isError,timestamp:Date.now()}}async function emitToolResultMessage(toolResultMessage,emit){await emit({type:"message_start",message:toolResultMessage}),await emit({type:"message_end",message:toolResultMessage})}function defaultConvertToLlm(messages){return messages.filter(message=>message.role==="user"||message.role==="assistant"||message.role==="toolResult")}var EMPTY_USAGE2={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},DEFAULT_MODEL={id:"unknown",name:"unknown",api:"unknown",provider:"unknown",baseUrl:"",reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function createMutableAgentState(initialState){let tools=initialState?.tools?.slice()??[],messages=initialState?.messages?.slice()??[];return{systemPrompt:initialState?.systemPrompt??"",model:initialState?.model??DEFAULT_MODEL,thinkingLevel:initialState?.thinkingLevel??"off",reasoningBaseline:initialState?.reasoningBaseline,get tools(){return tools},set tools(nextTools){tools=nextTools.slice()},get messages(){return messages},set messages(nextMessages){messages=nextMessages.slice()},declaredTools:initialState?.declaredTools?.slice(),isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0,providerDiagnostic:void 0}}var PendingMessageQueue=class{constructor(mode){this.messages=[],this.clearGeneration=0,this.mode=mode}enqueue(message){this.messages.push(message)}hasItems(){return this.messages.length>0}getClearGeneration(){return this.clearGeneration}drain(){if(this.mode==="all"){let drained=this.messages.slice();return this.messages=[],drained}let first=this.messages[0];return first?(this.messages=this.messages.slice(1),[first]):[]}prepend(messages){this.messages=[...messages,...this.messages]}clear(){this.messages=[],this.clearGeneration++}},Agent=class{async buildProviderContext(context,signal){return buildProviderContext(context,{convertToLlm:this.convertToLlm,transformContext:this.transformContext,model:this._state.model},signal)}constructor(options){this.listeners=new Set;let runtimeOptions=options??{};this._state=createMutableAgentState(runtimeOptions.initialState),this.convertToLlm=runtimeOptions.convertToLlm??defaultConvertToLlm,this.transformContext=runtimeOptions.transformContext,this.streamFunction=runtimeOptions.streamFn??getDefaultStreamFn(),this.getApiKey=runtimeOptions.getApiKey,this.onPayload=runtimeOptions.onPayload,this.onResponse=runtimeOptions.onResponse,this.beforeToolCall=runtimeOptions.beforeToolCall,this.afterToolCall=runtimeOptions.afterToolCall,this.shouldStopAfterTurn=runtimeOptions.shouldStopAfterTurn,this.prepareNextTurn=runtimeOptions.prepareNextTurn,this.prepareNextTurnWithContext=runtimeOptions.prepareNextTurnWithContext,this.steeringQueue=new PendingMessageQueue(runtimeOptions.steeringMode??"one-at-a-time"),this.followUpQueue=new PendingMessageQueue(runtimeOptions.followUpMode??"one-at-a-time"),this.sessionId=runtimeOptions.sessionId,this.thinkingBudgets=runtimeOptions.thinkingBudgets,this.transport=runtimeOptions.transport??"auto",this.timeoutMs=runtimeOptions.timeoutMs,this.streamStartTimeoutMs=runtimeOptions.streamStartTimeoutMs,this.maxRetryDelayMs=runtimeOptions.maxRetryDelayMs,this.toolExecution=runtimeOptions.toolExecution??"parallel",this.removedToolHints=runtimeOptions.removedToolHints??{},this.resolveUnknownToolCall=runtimeOptions.resolveUnknownToolCall,this.abortServerSideFallback=runtimeOptions.abortServerSideFallback,this.cursorExecHandlers=runtimeOptions.cursorExecHandlers}subscribe(listener){return this.listeners.add(listener),()=>this.listeners.delete(listener)}get state(){return this._state}set steeringMode(mode){this.steeringQueue.mode=mode}get steeringMode(){return this.steeringQueue.mode}set followUpMode(mode){this.followUpQueue.mode=mode}get followUpMode(){return this.followUpQueue.mode}steer(message){this.steeringQueue.enqueue(message)}followUp(message){this.followUpQueue.enqueue(message)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(reason){this.activeRun?.abortController.abort(reason)}suppressQueuedMessageDrain(){this.activeRun&&(this.activeRun.suppressQueuedMessageDrain=!0)}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before resetting.");this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(input,images){if(this.activeRun)throw new Error("Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.");let messages=this.normalizePromptInput(input,images);await this.runPromptMessages(messages)}async continueWithQueuedMessages(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");if(this._state.messages[this._state.messages.length-1]?.role==="assistant"){await this.continue(options);return}let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}await this.continue(options)}async continue(options={}){if(this.activeRun)throw new Error("Agent is already processing. Wait for completion before continuing.");let lastMessage=this._state.messages[this._state.messages.length-1];if(!lastMessage)throw new Error("No messages to continue from");if(lastMessage.role==="assistant"){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await this.runPromptMessages(queuedSteering,{skipInitialSteeringPoll:!0,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}let queuedFollowUps=this.followUpQueue.drain();if(queuedFollowUps.length>0){await this.runPromptMessages(queuedFollowUps,{initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs});return}throw new Error("Cannot continue from message role: assistant")}await this.runContinuation(options)}normalizePromptInput(input,images){if(Array.isArray(input))return input;if(typeof input!="string")return[input];let content=[{type:"text",text:input}];return images&&images.length>0&&content.push(...images),[{role:"user",content,timestamp:Date.now()}]}async runPromptMessages(messages,options={}){await this.runWithLifecycle(async signal=>{await runAgentLoop(messages,this.createContextSnapshot(),this.createLoopConfig(options),event=>this.processEvents(event),signal,this.streamFunction)})}async runContinuation(options={}){await this.runWithLifecycle(async signal=>{await runAgentLoopContinue(this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:options.deferQueuedMessages,initialRequestTimeoutMs:options.timeoutMs,initialRequestStreamStartTimeoutMs:options.streamStartTimeoutMs}),event=>this.processEvents(event),signal,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice(),...this._state.declaredTools?{declaredTools:this._state.declaredTools.slice()}:{}}}createLoopConfig(options={}){let skipInitialSteeringPoll=options.skipInitialSteeringPoll===!0,steeringQueueGeneration=this.steeringQueue.getClearGeneration(),followUpQueueGeneration=this.followUpQueue.getClearGeneration(),shouldStopAfterTurn=this.shouldStopAfterTurn,reasoning=this._state.reasoningBaseline??this._state.thinkingLevel;return{model:this._state.model,reasoning:reasoning==="off"?void 0:reasoning,thinkingSelection:this._state.thinkingSelection,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,timeoutMs:this.timeoutMs,streamStartTimeoutMs:this.streamStartTimeoutMs,initialRequestTimeoutMs:options.initialRequestTimeoutMs,initialRequestStreamStartTimeoutMs:options.initialRequestStreamStartTimeoutMs,maxRetryDelayMs:this.maxRetryDelayMs,abortServerSideFallback:this.abortServerSideFallback,cursorExecHandlers:this.cursorExecHandlers,toolExecution:this.toolExecution,removedToolHints:this.removedToolHints,resolveUnknownToolCall:this.resolveUnknownToolCall,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,shouldStopAfterTurn:shouldStopAfterTurn?async context=>await shouldStopAfterTurn(context,this.signal):void 0,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async context=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(context,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>skipInitialSteeringPoll?(skipInitialSteeringPoll=!1,[]):(steeringQueueGeneration=this.steeringQueue.getClearGeneration(),this.steeringQueue.drain()),getFollowUpMessages:async()=>(followUpQueueGeneration=this.followUpQueue.getClearGeneration(),this.followUpQueue.drain()),restorePendingMessages:(queue,messages)=>{if(queue==="steering"){if(this.steeringQueue.getClearGeneration()!==steeringQueueGeneration)return;this.steeringQueue.prepend(messages);return}this.followUpQueue.getClearGeneration()===followUpQueueGeneration&&this.followUpQueue.prepend(messages)}}}async runWithLifecycle(executor){if(this.activeRun)throw new Error("Agent is already processing.");let abortController=new AbortController,resolvePromise=()=>{},promise=new Promise(resolve42=>{resolvePromise=resolve42});this.activeRun={promise,resolve:resolvePromise,abortController,suppressQueuedMessageDrain:!1},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0,this._state.providerDiagnostic=void 0;try{for(await executor(abortController.signal);!abortController.signal.aborted&&!this.activeRun?.suppressQueuedMessageDrain&&this.canDrainQueuedMessagesAfterRun()&&this.hasQueuedMessages();)await this.runQueuedMessagesAfterAgentEnd(abortController.signal)}catch(error2){await this.handleRunFailure(error2,abortController.signal.aborted)}finally{this.finishRun()}}canDrainQueuedMessagesAfterRun(){let lastMessage=this._state.messages[this._state.messages.length-1];return lastMessage?.role!=="assistant"||lastMessage.stopReason!=="error"&&lastMessage.stopReason!=="aborted"}async runQueuedMessagesAfterAgentEnd(signal){let queuedSteering=this.steeringQueue.drain();if(queuedSteering.length>0){await runAgentLoop(queuedSteering,this.createContextSnapshot(),this.createLoopConfig({skipInitialSteeringPoll:!0}),event=>this.processEvents(event),signal,this.streamFunction);return}let queuedFollowUps=this.followUpQueue.drain();queuedFollowUps.length!==0&&await runAgentLoop(queuedFollowUps,this.createContextSnapshot(),this.createLoopConfig(),event=>this.processEvents(event),signal,this.streamFunction)}async handleRunFailure(error2,aborted){let providerDiagnostic=aborted?void 0:readProviderDiagnostic(error2),failureMessage={role:"assistant",content:[{type:"text",text:""}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:EMPTY_USAGE2,stopReason:aborted?"aborted":"error",errorMessage:error2 instanceof Error?error2.message:String(error2),...providerDiagnostic===void 0?{}:{providerDiagnostic},...error2 instanceof ProviderRetryWatchdogAbortError?{abortSource:"provider"}:{},timestamp:Date.now()};await this.processEvents({type:"message_start",message:failureMessage}),await this.processEvents({type:"message_end",message:failureMessage}),await this.processEvents({type:"turn_end",message:failureMessage,toolResults:[]}),await this.processEvents({type:"agent_end",messages:[failureMessage]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(event){switch(event.type){case"message_start":this._state.streamingMessage=event.message;break;case"message_update":this._state.streamingMessage=event.message;break;case"message_end":this._state.streamingMessage=void 0,this._state.messages.push(event.message);break;case"tool_execution_start":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.add(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"tool_execution_end":{let pendingToolCalls=new Set(this._state.pendingToolCalls);pendingToolCalls.delete(event.toolCallId),this._state.pendingToolCalls=pendingToolCalls;break}case"turn_end":event.message.role==="assistant"&&event.message.errorMessage&&(this._state.errorMessage=event.message.errorMessage,this._state.providerDiagnostic=sanitizeProviderDiagnostic(event.message.providerDiagnostic));break;case"agent_end":this._state.streamingMessage=void 0;break}let signal=this.activeRun?.abortController.signal;if(!signal)throw new Error("Agent listener invoked outside active run");for(let listener of this.listeners)await listener(event,signal)}async emitExternalEvent(event,runSignal){let activeSignal=this.activeRun?.abortController.signal;!activeSignal||runSignal&&runSignal!==activeSignal||await this.processEvents(event)}};var Result={ok(value2){return{ok:!0,value:value2}},err(error2){return{ok:!1,error:error2}},isOk(result3){return result3.ok},isErr(result3){return!result3.ok}};function TaggedError(tag){class TaggedErrorClass extends Error{constructor(props){super(props.message),this._tag=tag,this.name=tag,Object.assign(this,props)}toJSON(){let payload={};for(let key of Object.keys(this))key!=="_tag"&&(payload[key]=this[key]);return{_tag:tag,message:this.message,...payload}}static is(value2){return value2 instanceof TaggedErrorClass}}return TaggedErrorClass}var LaneBusy=class extends TaggedError("LaneBusy"){},OperationMismatch=class extends TaggedError("OperationMismatch"){},NoActiveRun=class extends TaggedError("NoActiveRun"){},NoActiveOperation=class extends TaggedError("NoActiveOperation"){},NothingToResume=class extends TaggedError("NothingToResume"){},NothingToCompact=class extends TaggedError("NothingToCompact"){},InvalidMessage=class extends TaggedError("InvalidMessage"){},InvalidNavigation=class extends TaggedError("InvalidNavigation"){},UnknownSkill=class extends TaggedError("UnknownSkill"){},UnknownTemplate=class extends TaggedError("UnknownTemplate"){},UnknownTarget=class extends TaggedError("UnknownTarget"){},InvalidLane=class extends TaggedError("InvalidLane"){},Closed=class extends TaggedError("Closed"){},HarnessFault=class extends Error{constructor(message,cause){super(message),this.name="HarnessFault",this.cause=cause}},HarnessClosed=class extends Error{constructor(){super("AgentHarness was closed while the operation was active"),this.name="HarnessClosed"}};function matchError(error2,matchers){let matcher=matchers[error2._tag];return matcher(error2)}import{awaitWithContext,BACKGROUND_CONTEXT,createContextKey,TODO_CONTEXT,withAbortSignal,withCancel,withContextValue,withoutAbortSignal}from"@earendil-works/chord/context";var TELEMETRY_CONTEXT_KEY=createContextKey("pi.telemetryContext");function getTelemetryContext(context){return context.value(TELEMETRY_CONTEXT_KEY)??NOOP_TELEMETRY_CONTEXT}function withTelemetryContext(telemetryContext,context){return withContextValue(TELEMETRY_CONTEXT_KEY,telemetryContext,context)}var AbortRequested=class extends Error{constructor(cancellation){super("Abort requested"),this.name="AbortRequested",this.cancellation=cancellation}};function createGate(){let state={status:"open"},controller=new AbortController,check=()=>{if(state.status==="aborting")throw new AbortRequested(state.cancellation);if(state.status==="closed")throw state.error};return{gate:{admit(invoke){return check(),invoke()},signal:controller.signal},control:{beginAbort(cancellation){state.status==="open"&&(state={status:"aborting",cancellation})},signalAbort(){state.status!=="aborting"||controller.signal.aborted||controller.abort(new AbortRequested(state.cancellation))},close(error2){state.status!=="closed"&&(state={status:"closed",error:error2},controller.signal.aborted||controller.abort(error2))}}}}var SliceNotImplemented=class extends Error{constructor(operation){super(`${operation} is not implemented until its later AgentHarness slice`),this.name="SliceNotImplemented"}},Drive=class{constructor(options,context){this.operationId=options.operationId,this.context=withoutAbortSignal(context),this.waitForRetry=options.waitForRetry??!1,this.deferredPermits=options.pollDeferred===!0?1:0;let resolveCompletion,rejectCompletion;this.completion=new Promise((resolve42,reject)=>{resolveCompletion=resolve42,rejectCompletion=reject}),this.resolveCompletion=resolveCompletion,this.rejectCompletion=rejectCompletion,this.completion.catch(()=>{});let{gate,control}=createGate();this.gate=gate,this.control=control,this.closeController=new AbortController,this.closeSignal=this.closeController.signal}settle(outcome){this.resolveCompletion(outcome)}fail(error2){this.rejectCompletion(error2)}beginAbort(cancellation){this.control.beginAbort(cancellation)}signalAbort(){this.control.signalAbort()}closeGate(error2){this.control.close(error2),this.closeSignal.aborted||this.closeController.abort(error2),this.rejectCompletion(error2)}};var COMPACTION_SUMMARY_PREFIX=`The conversation history before this point was compacted into the following summary:
3
3
 
4
4
  <summary>
5
5
  `,COMPACTION_SUMMARY_SUFFIX=`
@@ -709,7 +709,7 @@ File: ${path13}`)}return _ModelConfig.parseAndMigrate(content,path13)}static loa
709
709
 
710
710
  File: ${path13}`)}}getProvider(providerId){return this.providers.get(providerId)}getProviderIds(){return[...this.providers.keys()]}isProviderDisabled(providerId){return this.disabledProviders.has(providerId)||this.providers.get(providerId)?.disabled===!0}getError(){return this.error}getWarnings(){return this.warnings}};import{join as join6}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(path13=join6(getAgentDir(),"models-store.json")){this.path=normalizePath(path13),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(readState2,data,revision){readState2.data=data,readState2.revision=revision}reloadFromStorage(readState2,options){return this.storage.withLockAsync(async content=>{let data=this.parse(content);return this.updateReadState(readState2,data,getFileRevision(this.path)),{result:data}},options)}async readLatest(readState2,options){options?.signal?.throwIfAborted();let revision=getFileRevision(this.path);if(revision!==void 0&&revision===readState2.revision)return readState2.data;if(!readState2.reload){let controller=new AbortController,reload2={controller,promise:this.reloadFromStorage(readState2,{signal:controller.signal}),readers:0};readState2.reload=reload2,reload2.promise.then(()=>{readState2.reload===reload2&&(readState2.reload=void 0)},()=>{readState2.reload===reload2&&(readState2.reload=void 0)})}let reload=readState2.reload;reload.readers++;try{return await raceWithAbortSignal(reload.promise,options?.signal)}finally{reload.readers--,reload.readers===0&&readState2.reload===reload&&(readState2.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)}};function configuredHeaderAuthStatus(configHeaders,extensionHeaders){let sawCredentialHeader=!1;for(let header2 of effectiveHeaders(configHeaders,extensionHeaders).values()){if(!isCredentialHeaderName(header2.name))continue;if(sawCredentialHeader=!0,isCommandConfigValue(header2.value))return{configured:!0,source:"models_json_command"};let envNames=getConfigValueEnvVarNames(header2.value);if(envNames.length>0){if(isConfigValueConfigured(header2.value))return{configured:!0,source:"environment",label:envNames.join(", ")};continue}if(hasCredentialHeaders({[header2.name]:header2.value}))return{configured:!0,source:header2.source}}return sawCredentialHeader?{configured:!1}:void 0}function headerAuthResolutionSource(configHeaders,extensionHeaders){let headers=effectiveHeaders(configHeaders,extensionHeaders),values=Object.fromEntries([...headers.values()].map(header2=>[header2.name,header2.value]));if(hasCredentialHeaders(values)){for(let header2 of headers.values())if(hasCredentialHeaders({[header2.name]:header2.value}))return header2.source==="extension_headers"?"provider extension headers":"models.json headers"}}async function checkConfiguredHeaderAuth(headers,ctx,source){if(headers)for(let header2 of effectiveHeaders(headers,void 0).values()){if(!isCredentialHeaderName(header2.name))continue;if(isCommandConfigValue(header2.value))return{type:"api_key",source};let envNames=getConfigValueEnvVarNames(header2.value),configured=!0;for(let envName of envNames)if(await ctx.env(envName)===void 0){configured=!1;break}if(configured&&hasCredentialHeaders({[header2.name]:header2.value}))return{type:"api_key",source}}}function effectiveHeaders(configHeaders,extensionHeaders){let effective=new Map;return addHeaders(effective,configHeaders,"models_json_headers"),addHeaders(effective,extensionHeaders,"extension_headers"),effective}function addHeaders(target,headers,source){for(let[name,value2]of Object.entries(headers??{}))typeof value2=="string"&&target.set(name.toLowerCase(),{name,value:value2,source})}function composeApiKeyAuth(providerId,base,config,extension){let inherited=base?.auth.apiKey,rawKey=configuredApiKey(config,extension),oauth=extension?.oauth??base?.auth.oauth,rawHeaders=configuredHeaders(config,extension),headerSource=headerAuthResolutionSource(config?.headers,extension?.headers),authHeader=extension?.authHeader??config?.authHeader??!1;return!inherited&&rawKey===void 0&&!headerSource&&oauth?ambientOnlyAuth(providerId,oauth,rawHeaders,headerSource,authHeader):{name:inherited?.name??"API key",login:inherited?.login??(headerSource&&rawKey===void 0?void 0:async interaction=>({type:"api_key",key:await interaction.prompt({type:"secret",message:"Enter API key"})})),check:async input=>{if(input.credential?.key){let inheritedCheck2=await inherited?.check?.(input);return inheritedCheck2||{type:"api_key",source:"stored credential"}}if(rawKey!==void 0){if(isCommandConfigValue(rawKey))return{type:"api_key",source:"configured API key"};for(let name of getConfigValueEnvVarNames(rawKey))if(await input.ctx.env(name)===void 0)return;return{type:"api_key",source:"configured API key"}}let inheritedCheck=await inherited?.check?.(input);if(inheritedCheck)return inheritedCheck;let resolved=await inherited?.resolve(input);return resolved?{type:"api_key",source:resolved.source}:checkConfiguredHeaderAuth(rawHeaders,input.ctx,headerSource)},resolve:async input=>{let result3=await resolveBaseAuth(providerId,inherited,rawKey,input),explicitEnv={...input.credential?.env??{},...result3?.env??{}},headerEnv=await configContextEnv(Object.values(rawHeaders??{}),input.ctx,explicitEnv),headers=await resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,headerEnv);if(!(!result3&&!hasCredentialHeaders(headers)))return{...result3,auth:withConfiguredAuth(result3?.auth??{},headers,authHeader),source:result3?.source??headerSource}}}}function ambientResolverOf(oauth){let candidate=oauth?.resolveAmbient;return typeof candidate=="function"?candidate:void 0}function ambientOnlyAuth(providerId,oauth,rawHeaders,headerSource,authHeader){let resolveAmbient=ambientResolverOf(oauth);if(!resolveAmbient)return;let resolve42=async input=>{let result3=await resolveAmbient({ctx:input.ctx,env:input.credential?.env,signal:input.signal});if(!result3||input.credential?.key&&input.credential.key!==result3.auth.apiKey)return;let explicitEnv={...input.credential?.env??{},...result3.env??{}},headerEnv=await configContextEnv(Object.values(rawHeaders??{}),input.ctx,explicitEnv),headers=await resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,headerEnv);return{...result3,auth:withConfiguredAuth(result3.auth,headers,authHeader),source:result3.source??headerSource}};return{name:oauth.name??"Ambient credentials",ambientOnly:!0,check:async input=>{let resolved=await resolve42(input);return resolved?{type:"oauth",source:resolved.source}:void 0},resolve:resolve42}}function configuredApiKey(config,extension){return extension?.apiKey??config?.apiKey}function configuredHeaders(config,extension){if(!(!config?.headers&&!extension?.headers))return{...config?.headers,...extension?.headers}}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}}async function resolveBaseAuth(providerId,inherited,rawKey,input){if(input.credential?.key)return inherited?inherited.resolve(input):{auth:{apiKey:input.credential.key},env:input.credential.env,source:"stored credential"};if(rawKey===void 0)return inherited?.resolve(input);let env=await configContextEnv([rawKey],input.ctx,input.credential?.env),key=await resolveConfigValueOrThrow(rawKey,`API key for provider "${providerId}"`,env);return inherited?inherited.resolve({...input,credential:{type:"api_key",key}}):{auth:{apiKey:key},source:"configured API key"}}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 value2=await ctx.env(name);value2!==void 0&&(env[name]=value2)}return Object.keys(env).length>0?env:void 0}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 applyModelOverride(model,override){return{...model,name:override.name??model.name,promptPreset:override.promptPreset??model.promptPreset,recoverTextToolCalls:override.recoverTextToolCalls??model.recoverTextToolCalls,reasoning:override.reasoning??model.reasoning,thinkingLevelMap:override.thinkingLevelMap?override.thinkingLevelMapMode==="replace"?override.thinkingLevelMap:{...model.thinkingLevelMap,...override.thinkingLevelMap}:model.thinkingLevelMap,input:override.input??model.input,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,contextWindow:override.contextWindow??model.contextWindow,maxTokens:override.maxTokens??model.maxTokens,cacheRetention:override.cacheRetention??model.cacheRetention,samplingParams:override.samplingParams?{...model.samplingParams,...override.samplingParams}:model.samplingParams,compat:mergeCompat(model.compat,override.compat)}}function modelFromJson(providerId,definition,providerConfig,defaults){let api=definition.api??providerConfig.api??defaults?.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??defaults?.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,promptPreset:definition.promptPreset,recoverTextToolCalls:definition.recoverTextToolCalls,api,provider:providerId,baseUrl,reasoning:definition.reasoning??!1,thinkingLevelMap:definition.thinkingLevelMap,defaultThinkingLevel:definition.defaultThinkingLevel,input:definition.input??["text"],cost:definition.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:definition.contextWindow??128e3,maxTokens:definition.maxTokens??16384,samplingParams:definition.samplingParams,headers:void 0,cacheRetention:definition.cacheRetention??providerConfig.cacheRetention,compat:mergeCompat(providerConfig.compat,definition.compat)}}function findModelDefaults(models,modelId,api){return models.find(model=>model.id===modelId)??(api?models.find(model=>model.api===api):void 0)??models.find(model=>model.api==="openai-completions")??models[0]}function applyModelsJson(providerId,baseModels,config,extension){if(!config)return[...baseModels];let hasOverrides=config.modelOverrides&&Object.keys(config.modelOverrides).length>0;if(!config.models?.length&&!config.baseUrl&&!config.headers&&!config.extraBody&&!config.compat&&!hasOverrides&&!config.whitelist&&!config.blacklist&&!config.apiKey&&config.authHeader===void 0)throw new Error(`Provider ${providerId}: must specify "baseUrl", "headers", "extraBody", "compat", "modelOverrides", or "models".`);let models=(providerId==="ollama"&&config.models?.length?[]:baseModels).map(model=>({...model,baseUrl:config.baseUrl??model.baseUrl,compat:mergeCompat(model.compat,config.compat)}));for(let definition of config.models??[]){let existingIndex=models.findIndex(model2=>model2.id===definition.id),defaults=existingIndex>=0?models[existingIndex]:findModelDefaults(models,definition.id,definition.api??extension?.api??config.api),model=modelFromJson(providerId,definition,config,{...defaults,api:extension?.api??defaults?.api,baseUrl:extension?.baseUrl??defaults?.baseUrl});existingIndex>=0?models[existingIndex]=model:models.push(model)}let whitelist=config.whitelist?new Set(config.whitelist):void 0,blacklist=config.blacklist?new Set(config.blacklist):void 0;return models.filter(model=>(whitelist===void 0||whitelist.has(model.id))&&(blacklist===void 0||!blacklist.has(model.id)))}function applyExtension(providerId,models,config,customModelIds){if(!config)return[...models];if(!config.models)return config.baseUrl?models.map(model=>({...model,baseUrl:config.baseUrl})):[...models];let declaredModels=config.models;return[...declaredModels.map(definition=>{let defaults=findModelDefaults(models,definition.id,definition.api??config.api),api=definition.api??config.api??defaults?.api;if(!api)throw new Error(`Provider ${providerId}, model ${definition.id}: no "api" specified. Set at provider or model level.`);let baseUrl=definition.baseUrl??config.baseUrl??defaults?.baseUrl;if(!baseUrl)throw new Error(`Provider ${providerId}: "baseUrl" is required when defining custom models.`);return{...definition,api,provider:providerId,baseUrl,headers:void 0}}),...models.filter(model=>customModelIds.has(model.id)&&!declaredModels.some(definition=>definition.id===model.id))]}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)}),...config.check?{check:config.check}:{}}}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=await resolveHeadersOrThrow(rawHeaders,`provider "${providerId}"`,typeof env=="object"&&env!==null?env:void 0);return withConfiguredAuth(auth,headers,authHeader)}}}function rawModelHeaders(model,config,extension){let definition=config?.models?.find(entry=>entry.id===model.id),extensionModel=extension?.models?.find(entry=>entry.id===model.id),headers={...config?.modelOverrides?.[model.id]?.headers,...definition?.headers,...extensionModel?.headers};return Object.keys(headers).length>0?headers:void 0}function rawModelExtraBody(model,config,extension){let definition=config?.models?.find(entry=>entry.id===model.id),extensionModel=extension?.models?.find(entry=>entry.id===model.id),extraBody={...config?.modelOverrides?.[model.id]?.extraBody,...definition?.extraBody,...extensionModel?.extraBody};return Object.keys(extraBody).length>0?extraBody: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,base?.getModels()??[],modelsConfig,extension),extension,new Set((modelsConfig?.models??[]).map(definition=>definition.id)))}function composeModelProvider(providerId,base,modelConfig,extension){let config=modelConfig.getProvider(providerId),extensionOAuthCredential,refreshedExtensionModels,currentExtension=()=>extension&&refreshedExtensionModels?{...extension,models:refreshedExtensionModels}:extension,getModels2=()=>{let models=applyExtension(providerId,applyModelsJson(providerId,base?.getModels()??[],config,currentExtension()),currentExtension(),new Set((config?.models??[]).map(definition=>definition.id)));return extensionOAuthCredential&&extension?.oauth?.modifyModels&&(models=extension.oauth.modifyModels(models,extensionOAuthCredential)),models.map(model=>{let override=config?.modelOverrides?.[model.id];return override?applyModelOverride(model,override):model})};getModels2();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 refreshBase=providerId==="ollama"&&config?.models?.length?void 0:base?.refreshModels?.bind(base),supportsBaseApi=model=>base?.getModels().some(entry=>entry.api===model.api)??!1,streamWith=(model,context,options,simple)=>lazyStream(model,async()=>{let format2=getToolCallFormat(model);if(format2&&context.tools&&context.tools.length>0){let protocol=getProtocol(format2),transformedContext=transformContext(context,protocol),innerStream=streamWith(model,transformedContext,options,simple);return wrapStreamWithToolCallMiddleware(innerStream,protocol,context.tools)}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} (model "${model.provider}/${model.id}"). Load the extension that implements this api, or fix the "api" value for provider "${providerId}" in models.json.`);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,retryPolicy:extension?.retryPolicy??base?.retryPolicy,auth:{...apiKey?{apiKey}:{},...oauth?{oauth}:{}},getModels:getModels2,refreshModels:refreshBase||extension?.refreshModels||extension?.oauth?.modifyModels?async context=>{await refreshBase?.(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,base?.getModels()??[],config,extension),{...extension,models:refreshed},new Set((config?.models??[]).map(definition=>definition.id))),refreshedExtensionModels=refreshed),extensionOAuthCredential=oauthCredential}})}:void 0,filterModels:base?.filterModels?(models,credential)=>base.filterModels(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;return cancelDeferred&&(provider.cancelDeferred=(model,handle,options)=>cancelDeferred(model,handle,options)),provider}function resolveConfiguredModelHeaders(model,config,extension,env){return resolveHeadersOrThrow(rawModelHeaders(model,config,extension),`model "${model.provider}/${model.id}"`,env)}async function resolveCompatibilityRequestHeaders(model,config,extension,env){let configured=await resolveHeadersOrThrow({...configuredHeaders(config,extension),...rawModelHeaders(model,config,extension)},`model "${model.provider}/${model.id}"`,env);return model.headers||configured?{...model.headers,...configured}:void 0}function resolveCompatibilityRequestConfig(model,config,extension){let modelDefinition=config?.models?.find(entry=>entry.id===model.id),extensionModel=extension?.models?.find(entry=>entry.id===model.id),configuredExtraBody={...config?.extraBody,...extension?.extraBody,...rawModelExtraBody(model,config,extension)};return{extraBody:Object.keys(configuredExtraBody).length>0?configuredExtraBody:void 0,upstreamModelId:extensionModel?.upstreamModelId??modelDefinition?.upstreamModelId??model.upstreamModelId,serviceTier:extensionModel?.serviceTier??modelDefinition?.serviceTier??model.serviceTier,authHeader:extension?.authHeader??config?.authHeader??!1}}function configuredRequestAuthStatus(config,extension){let value2=configuredApiKey(config,extension);if(value2===void 0)return configuredHeaderAuthStatus(config?.headers,extension?.headers);if(isCommandConfigValue(value2))return{configured:!0,source:"models_json_command"};let names=getConfigValueEnvVarNames(value2);return names.length>0?isConfigValueConfigured(value2)?{configured:!0,source:"environment",label:names.join(", ")}:{configured:!1}:{configured:!0,source:extension?.apiKey!==void 0?"fallback":"models_json_key"}}function createProviderSemaphores(getLimit){let providers=new Map;function drain(semaphore){for(;semaphore.active<semaphore.limit&&semaphore.waiters.length>0;)semaphore.waiters.shift()?.grant()}function resize(providerId,limit){let semaphore=providers.get(providerId);semaphore&&(semaphore.limit=limit>0?limit:1/0,drain(semaphore))}function acquire(semaphore,signal){return signal?.aborted?Promise.reject(signal.reason):new Promise((resolve42,reject)=>{let abort=()=>{let index=semaphore.waiters.indexOf(waiter);index!==-1&&semaphore.waiters.splice(index,1),reject(signal?.reason)},waiter={grant(){signal?.removeEventListener("abort",abort),semaphore.active++;let released=!1;resolve42(()=>{released||(released=!0,semaphore.active--,drain(semaphore))})}};semaphore.waiters.push(waiter),signal?.addEventListener("abort",abort,{once:!0}),drain(semaphore)})}async function runAcquired(semaphore,signal,run2){let release3=await acquire(semaphore,signal);try{signal?.throwIfAborted();let stream2=run2();return stream2.result().then(release3,release3),stream2}catch(error2){throw release3(),error2}}return{resize,bracket(providerId,signal,run2){let configured=getLimit(providerId),limit=configured>0?configured:1/0;if(resize(providerId,limit),limit===1/0)return run2();let semaphore=providers.get(providerId);return semaphore||(semaphore={limit,active:0,waiters:[]},providers.set(providerId,semaphore)),runAcquired(semaphore,signal,run2)}}}import{isDeepStrictEqual as isDeepStrictEqual2}from"node:util";var MODEL_CAPABILITY_FIELDS=["contextWindow","maxTokens","input","reasoning","thinkingLevelMap","upstreamModelId","serviceTier","recoverTextToolCalls","compat"];function mergeRemoteCatalogModels(providerId,baseline,dynamic){let merged=[...baseline],conflicts=[];for(let model of dynamic){let index=merged.findIndex(entry=>entry.id===model.id);if(index<0){merged.push(model);continue}let staticModel=merged[index],fields=MODEL_CAPABILITY_FIELDS.filter(field2=>!isDeepStrictEqual2(staticModel[field2],model[field2]));fields.length>0&&conflicts.push({providerId,modelId:model.id,fields}),merged[index]={...staticModel,name:model.name,cost:model.cost}}return{models:merged,conflicts}}function parseRemoteCatalog(providerId,value2){let entries=Array.isArray(value2)?value2:typeof value2=="object"&&value2!==null&&"models"in value2&&Array.isArray(value2.models)?value2.models:typeof value2=="object"&&value2!==null?Object.values(value2):void 0;if(!entries?.every(isModelCatalogEntry))throw new Error(`Invalid model catalog for provider "${providerId}"`);return entries.map(model=>({...model,provider:providerId}))}function isModelCatalogEntry(value2){return isRecord6(value2)?typeof value2.id=="string"&&typeof value2.name=="string"&&typeof value2.api=="string"&&typeof value2.provider=="string"&&typeof value2.baseUrl=="string"&&typeof value2.reasoning=="boolean"&&isInputArray(value2.input)&&isModelCost(value2.cost)&&isFiniteNumber2(value2.contextWindow)&&isFiniteNumber2(value2.maxTokens):!1}function isInputArray(value2){return Array.isArray(value2)&&value2.every(modality=>modality==="text"||modality==="image"||modality==="video")}function isModelCost(value2){return isRecord6(value2)?isFiniteNumber2(value2.input)&&isFiniteNumber2(value2.output)&&isFiniteNumber2(value2.cacheRead)&&isFiniteNumber2(value2.cacheWrite):!1}function isFiniteNumber2(value2){return typeof value2=="number"&&Number.isFinite(value2)}function isRecord6(value2){return typeof value2=="object"&&value2!==null}var DEFAULT_CATALOG_BASE_URL="https://pi.dev",REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS=4e3,REMOTE_CATALOG_REFRESH_INTERVAL_MS=14400*1e3,FORK_ONLY_BUILTIN_PROVIDERS=new Set(["alibaba-token-plan","opengateway"]);function remoteCatalogServesProvider(providerId,catalogBaseUrl){return catalogBaseUrl!==void 0||!FORK_ONLY_BUILTIN_PROVIDERS.has(providerId)}var remoteCatalogConflicts=new WeakMap;function remoteModels(entry,localGeneratedAt){return entry?localGeneratedAt!==void 0&&(entry.lastModified===void 0||entry.lastModified<=localGeneratedAt)?[]:entry.models:[]}function withRemoteCatalog(provider,catalogBaseUrl=DEFAULT_CATALOG_BASE_URL,localGeneratedAt){let dynamicModels=[],wrappedProvider={...provider,getModels:()=>mergeRemoteCatalogModels(provider.id,provider.getModels(),dynamicModels).models,refreshModels:async context=>{let stored=context.stored,restored=remoteModels(stored,localGeneratedAt).filter(model=>model.provider===provider.id);if(!await context.publish({update:()=>{dynamicModels=restored,remoteCatalogConflicts.set(wrappedProvider,mergeRemoteCatalogModels(provider.id,provider.getModels(),restored).conflicts)}})||!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?.models.length?stored.etag:void 0,url=new URL(`/api/models/providers/${encodeURIComponent(provider.id)}`,catalogBaseUrl),response=await fetchWithRetry(url,{headers:{accept:"application/json","User-Agent":getPiUserAgent(VERSION),...validator?{"if-none-match":validator}:{}},signal:context.signal},{attemptTimeoutMs:REMOTE_CATALOG_ATTEMPT_TIMEOUT_MS});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 refreshed=parseRemoteCatalog(provider.id,await response.json()),lastModified=Date.parse(response.headers.get("last-modified")??"");if(context.signal.aborted)return;let entry={models:refreshed,checkedAt,lastModified:Number.isNaN(lastModified)?0:lastModified,etag:response.headers.get("etag")??void 0},published=remoteModels(entry,localGeneratedAt);await context.publish({persist:entry,update:()=>{dynamicModels=published,remoteCatalogConflicts.set(wrappedProvider,mergeRemoteCatalogModels(provider.id,provider.getModels(),published).conflicts)}})}};return remoteCatalogConflicts.set(wrappedProvider,[]),wrappedProvider}function asExtensionOAuthRegistry(store){let candidate=store;return typeof candidate.registerOAuthProvider=="function"&&typeof candidate.unregisterOAuthProvider=="function"?candidate:void 0}var RuntimeCredentials=class{constructor(store){this.overrides=new Map,this.store=store}registerOAuthProvider(providerId,oauth){asExtensionOAuthRegistry(this.store)?.registerOAuthProvider(providerId,oauth)}unregisterOAuthProvider(providerId){asExtensionOAuthRegistry(this.store)?.unregisterOAuthProvider(providerId)}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)}};setWireIdentity(BRAND?.userAgent??APP_NAME);function installClaudeCodeVersionCache(modelsPath){modelsPath!==void 0&&installClaudeCodeVersionFileStore({path:join7(dirname7(modelsPath),"claude-code-version.json"),offline:envValue("OFFLINE")!==void 0})}function mightHoldCredentialPool(providerId,credential,env,policySlots){if(credential){let accounts=Object.entries(credential).find(([key])=>key==="accounts")?.[1];return Array.isArray(accounts)&&accounts.length>1||Object.keys(policySlots??{}).length>0}return discoverEnvSlots(providerId,env).length+Object.keys(policySlots??{}).length>1}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,value2]of Object.entries(override??{})){let lowerName=name.toLowerCase();for(let existingName of Object.keys(merged))existingName.toLowerCase()===lowerName&&delete merged[existingName];merged[name]=value2}return merged}function withPayloadRequestMetadata(options,model){if(!options.onPayload)return options;let onPayload=options.onPayload;return{...options,onPayload:async(payload,providerModel)=>await onPayload(payload,providerModel,{model,headers:options.headers??{}})}}var ModelRuntime=class _ModelRuntime{setSettingsManager(settingsManager){if(this.settingsManager===settingsManager)return;this.unsubscribeProviderSettings?.(),this.settingsManager=settingsManager;let resize=()=>{for(let provider of this.getProviders())this.providerSemaphores.resize(provider.id,settingsManager.getProviderConcurrencyLimit(provider.id))};this.unsubscribeProviderSettings=settingsManager.subscribeToProviderSettings(resize),resize()}constructor(credentials,config,modelsPath,modelsStore,providers,modelNetworkEnabled,modelRefreshTimeoutMs,poolStatePath){this.providerSemaphores=createProviderSemaphores(providerId=>this.settingsManager?.getProviderConcurrencyLimit(providerId)??1/0),this.builtins=new Map,this.nativeExtensionProviders=new Map,this.extensionProviders=new Map,this.compositionErrors=new Map,this.snapshot={all:[],available:[],configuredProviders:new Set,storedProviders:new Set,auth:new Map},this.availabilityInitialized=!1,this.availabilityRefreshSeq=0,this.availabilityErrorSeq=0,this.providerAvailabilitySeq=new Map,this.credentialOperations=new Map,this.credentials=credentials,this.poolStatePath=poolStatePath,this.config=config,this.modelsPath=modelsPath,this.modelNetworkEnabled=modelNetworkEnabled,this.modelRefreshTimeoutMs=modelRefreshTimeoutMs,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??join7(getAgentDir(),"models.json");installClaudeCodeVersionCache(modelsPath);let config=await ModelConfig.load(modelsPath),modelsStore=options.modelsStore??(modelsPath?new FileModelsStore(options.modelsStorePath??join7(dirname7(modelsPath),"models-store.json")):new InMemoryCodingAgentModelsStore),builtinModelDataGeneratedAt=getBuiltinModelDataGeneratedAt(),providers=builtinProviders().map(provider=>provider.refreshModels||!remoteCatalogServesProvider(provider.id,options.catalogBaseUrl)?provider:withRemoteCatalog(provider,options.catalogBaseUrl,builtinModelDataGeneratedAt)),runtime=new _ModelRuntime(credentials,config,modelsPath,modelsStore,providers,envValue("OFFLINE")===void 0&&options.allowModelNetwork===!0,options.modelRefreshTimeoutMs??15e3,options.agentDir?join7(options.agentDir,"credential-pool-state.json"):options.authPath?join7(dirname7(options.authPath),"credential-pool-state.json"):void 0);runtime.rebuildProviders(),options.settingsManager&&runtime.setSettingsManager(options.settingsManager);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}static createSync(options={}){let credentials=new RuntimeCredentials(options.credentials??AuthStorage.create(options.authPath)),modelsPath=options.modelsPath===null?void 0:options.modelsPath??join7(getAgentDir(),"models.json");installClaudeCodeVersionCache(modelsPath);let config=ModelConfig.loadSync(modelsPath),modelsStore=options.modelsStore??(modelsPath?new FileModelsStore(options.modelsStorePath??join7(dirname7(modelsPath),"models-store.json")):new InMemoryCodingAgentModelsStore),providers=builtinProviders().map(provider=>provider.refreshModels||!remoteCatalogServesProvider(provider.id,options.catalogBaseUrl)?provider:withRemoteCatalog(provider,options.catalogBaseUrl)),runtime=new _ModelRuntime(credentials,config,modelsPath,modelsStore,providers,options.allowModelNetwork??!1,options.modelRefreshTimeoutMs??15e3,options.agentDir?join7(options.agentDir,"credential-pool-state.json"):options.authPath?join7(dirname7(options.authPath),"credential-pool-state.json"):void 0);return runtime.rebuildProviders(),options.settingsManager&&runtime.setSettingsManager(options.settingsManager),runtime}providerIds(){return new Set([...this.builtins.keys(),...this.nativeExtensionProviders.keys(),...this.config.getProviderIds(),...this.extensionProviders.keys()])}recomposeProvider(rawProviderId){let providerId=normalizeProviderId(rawProviderId);if(this.config.isProviderDisabled(providerId)){this.models.deleteProvider(providerId),this.compositionErrors.delete(providerId);return}let base=this.nativeExtensionProviders.get(providerId)??this.builtins.get(providerId),extension=this.extensionProviders.get(providerId);if(!base&&!this.config.getProvider(providerId)&&!extension){this.models.deleteProvider(providerId),this.compositionErrors.delete(providerId);return}if(base&&!this.config.getProvider(providerId)&&!extension){this.models.setProvider(base),this.compositionErrors.delete(providerId);return}try{this.models.setProvider(composeModelProvider(providerId,base,this.config,extension)),this.compositionErrors.delete(providerId)}catch(error2){this.compositionErrors.set(providerId,error2 instanceof Error?error2.message:String(error2)),base?this.models.setProvider(base):this.models.deleteProvider(providerId)}}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},this.availabilityInitialized=!0,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(error2=>{throw errorSeq===this.availabilityErrorSeq&&!effectiveSignal.aborted&&(this.availabilityError=error2 instanceof Error?error2.message:String(error2)),error2})}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(error2){throw this.providerAvailabilitySeq.get(providerId)===providerSeq&&errorSeq===this.availabilityErrorSeq&&!signal.aborted&&(this.availabilityError=error2 instanceof Error?error2.message:String(error2)),error2}}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)}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(error2){throw errorSeq===this.availabilityErrorSeq&&!options?.signal?.aborted&&(this.availabilityError=error2 instanceof Error?error2.message:String(error2)),error2}}return await this.queueAvailabilityRefresh(options?.signal),this.snapshot.available}getAvailableSnapshot(){return this.snapshot.available}hasFreshAvailabilitySnapshot(){return this.availabilityInitialized&&this.availabilityError===void 0}hasAvailabilitySnapshot(){return this.availabilityInitialized}getWarnings(){return this.config.getWarnings()}getError(){let errors=[],configError=this.config.getError();configError&&errors.push(configError);for(let[providerId,error2]of this.compositionErrors)errors.push(`Provider "${providerId}": ${error2}`);return this.availabilityError&&errors.push(`Availability refresh: ${this.availabilityError}`),errors.length>0?errors.join(`
711
711
 
712
- `):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))}getCompatibilityRequestHeaders(model,env){return resolveCompatibilityRequestHeaders(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider),env)}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)}isFallbackEligible(providerId){let hook=this.extensionProviders.get(providerId)?.fallbackEligible;if(typeof hook!="function")return!0;try{return hook()!==!1}catch{return!0}}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=await 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(resolve42=>{markStarted=resolve42}),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 result3=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result3.aborted&&signal.throwIfAborted();let refreshError=result3.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,...check.ambient?{ambient:!0}:{}}:{configured:!1}}async prepareRequest(model,options,slotAuth){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",`Unknown provider: ${model.provider}`);let resolution=await this.getAuth(model,{apiKey:slotAuth?.apiKey??options?.apiKey,env:options?.env,signal:options?.signal,...slotAuth?.slotName===void 0?{}:{slotName:slotAuth.slotName},...slotAuth?.rejectedAccess===void 0?{}:{rejectedAccess:slotAuth.rejectedAccess}});if(!resolution)throw new ModelsError("auth",providerNotConfiguredMessage(model.provider));let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,headers=mergeHeaders(resolution.auth.headers,providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let compatibility=this.getCompatibilityRequestConfig(model),extraBody=compatibility.extraBody||providerOptions.extraBody?{...compatibility.extraBody,...providerOptions.extraBody}:void 0,env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0,upstreamModelId=compatibility.upstreamModelId,requestModel=resolution.auth.baseUrl||upstreamModelId?{...model,...upstreamModelId?{id:upstreamModelId}:{},...resolution.auth.baseUrl?{baseUrl:resolution.auth.baseUrl}:{}}:model,rejectedTokenStatuses=provider.auth.oauth?.rejectedTokenStatuses,storedOAuthAccess=resolution.source==="OAuth"&&(slotAuth?.apiKey??providerOptions.apiKey)===void 0?resolution.auth.apiKey:void 0;return{...rejectedTokenStatuses!==void 0&&storedOAuthAccess!==void 0?{rejectableAccess:storedOAuthAccess,rejectedTokenStatuses}:{},provider,model:requestModel,options:{...providerOptions,apiKey:slotAuth?.apiKey??providerOptions.apiKey??resolution.auth.apiKey,headers,extraBody,env}}}loadCredentialPool(){return this.credentialPoolModules??=(async()=>{let[rotation,stateStore]=await Promise.all([import("./rotation-stream-YQLGLRCX.js"),import("./state-store-5A2TZ4SG.js")]);return{rotation,repository:new stateStore.CredentialSlotRepository(this.poolStatePath)}})(),this.credentialPoolModules}couldRotateCredentials(model,options){if(options?.apiKey!==void 0||this.credentials.hasRuntimeApiKey(model.provider)||this.config.getProvider(model.provider)?.credentials?.rotation===!1)return!1;let env=name=>options?.env?.[name]??process.env[name];if(this.snapshot.storedProviders.has(model.provider))return!0;let policySlots=this.config.getProvider(model.provider)?.credentials?.slots;return discoverEnvSlots(model.provider,env).length+Object.keys(policySlots??{}).length>1}async credentialRotationSources(model,options){let env=name=>options?.env?.[name]??process.env[name],credential=await this.credentials.read(model.provider,{signal:options?.signal}),policy=this.config.getProvider(model.provider)?.credentials;if(!mightHoldCredentialPool(model.provider,credential,env,policy?.slots))return;let pool=await this.loadCredentialPool(),sources={providerId:model.provider,credential,env,repository:pool.repository,policy};return(await pool.rotation.listRotationSlots(sources,{acquireLeases:!1})).length>1?sources:void 0}stream(model,context,options){return lazyStream(model,async()=>{let streamOptions=options,sources=this.couldRotateCredentials(model,streamOptions)?await this.credentialRotationSources(model,streamOptions):void 0;if(sources){let{rotation}=await this.loadCredentialPool();return rotation.streamWithCredentialRotation({sources,...streamOptions?.affinityKey!==void 0?{affinityKey:streamOptions.affinityKey}:streamOptions?.sessionId!==void 0?{affinityKey:streamOptions.sessionId}:{},runAttempt:slot=>this.attemptWithTokenRecovery(model,streamOptions,slot.lane==="env"?{...slot.envKey===void 0?{}:{apiKey:slot.envKey}}:{slotName:slot.name},prepared=>prepared.provider.stream(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}return this.attemptWithTokenRecovery(model,streamOptions,void 0,prepared=>prepared.provider.stream(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}attemptWithTokenRecovery(model,options,slotAuth,send,context){return retryOnceOnRejectedToken(async rejectedAccess=>{let prepared=await this.prepareRequest(model,options,rejectedAccess===void 0?slotAuth:{...slotAuth,rejectedAccess}),inner=await this.providerSemaphores.bracket(prepared.model.provider,prepared.options.signal,()=>send(prepared));return{stream:wrapStreamWithModelRecovery(inner,model,context.tools??[]),...prepared.rejectableAccess===void 0?{}:{rejectableAccess:prepared.rejectableAccess},...prepared.rejectedTokenStatuses===void 0?{}:{rejectedTokenStatuses:prepared.rejectedTokenStatuses}}})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){return lazyStream(model,async()=>{let streamOptions=options,sources=this.couldRotateCredentials(model,streamOptions)?await this.credentialRotationSources(model,streamOptions):void 0;if(sources){let{rotation}=await this.loadCredentialPool();return rotation.streamWithCredentialRotation({sources,...streamOptions?.sessionId===void 0?{}:{affinityKey:streamOptions.sessionId},runAttempt:slot=>this.attemptWithTokenRecovery(model,streamOptions,slot.lane==="env"?{apiKey:slot.envKey}:{slotName:slot.name},prepared=>prepared.provider.streamSimple(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}return this.attemptWithTokenRecovery(model,options,void 0,prepared=>prepared.provider.streamSimple(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}async prepareSimpleRequest(model,options){let prepared=await this.prepareRequest(model,options);return{model:prepared.model,options:withPayloadRequestMetadata(prepared.options,prepared.model)}}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}streamDeferred(model,handle,options){return lazyStream(model,async()=>{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){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)}login(providerId,type2,interaction){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type2,{...interaction,signal});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 reloadConfig(){await this.refresh({allowNetwork:this.modelNetworkEnabled})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),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},result3=await this.models.refresh(refreshOptions)??{aborted:refreshOptions.signal?.aborted??!1,errors:new Map},errors=new Map(result3.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(error2){options.signal?.aborted||errors.set(providerId,error2 instanceof Error?error2:new Error(String(error2)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result3.aborted||(options.signal?.aborted??!1),errors}}shouldSkipRegistrationRefresh(providerId){return this.hasFreshAvailabilitySnapshot()&&(this.nativeExtensionProviders.has(providerId)||this.extensionProviders.has(providerId))}refreshAfterRegistration(){if(!this.modelNetworkEnabled)return this.refresh({allowNetwork:!1});let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),this.modelRefreshTimeoutMs);return this.refresh({allowNetwork:!0,signal:controller.signal}).finally(()=>clearTimeout(timeout))}registerNativeProvider(provider,options){if(!provider.id.trim())throw new Error("Provider id must not be empty.");let alreadyFresh=this.shouldSkipRegistrationRefresh(provider.id);this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id);let composedOAuth=this.models.getProvider(provider.id)?.auth.oauth;return composedOAuth?this.credentials.registerOAuthProvider(provider.id,composedOAuth):this.credentials.unregisterOAuthProvider(provider.id),this.updateModelSnapshot(),alreadyFresh||options?.refresh===!1?Promise.resolve({aborted:!1,errors:new Map}):this.refreshAfterRegistration()}registerProvider(providerId,config,options){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config);let alreadyFresh=this.shouldSkipRegistrationRefresh(providerId);this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value2]of Object.entries(config))value2!==void 0&&(effective[key]=value2);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId);let composedOAuth=this.models.getProvider(providerId)?.auth.oauth;if(composedOAuth?this.credentials.registerOAuthProvider(providerId,composedOAuth):this.credentials.unregisterOAuthProvider(providerId),this.updateModelSnapshot(),this.snapshot.storedProviders.has(providerId)||configuredRequestAuthStatus(this.config.getProvider(providerId),effective)?.configured){let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type:effective.oauth&&!effective.apiKey?"oauth":"api_key",source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}return alreadyFresh||options?.refresh===!1?Promise.resolve({aborted:!1,errors:new Map}):this.refreshAfterRegistration()}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.credentials.unregisterOAuthProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}};var ModelRegistry=class _ModelRegistry{constructor(runtime,authStorage=AuthStorage.inMemory()){this.runtime=runtime,this.authStorage=authStorage}static create(authStorage,modelsJsonPath=join8(getAgentDir(),"models.json")){return new _ModelRegistry(ModelRuntime.createSync({credentials:authStorage,modelsPath:modelsJsonPath}),authStorage)}static inMemory(authStorage){return new _ModelRegistry(ModelRuntime.createSync({credentials:authStorage,modelsPath:null}),authStorage)}get modelRuntime(){return this.runtime}refresh(options){return this.runtime.refresh(options)}getError(){return this.runtime.getError()}getAll(){return[...this.runtime.getModels()]}getAvailable(){return this.runtime.hasAvailabilitySnapshot()?[...this.runtime.getAvailableSnapshot()]:this.runtime.getProviders().flatMap(provider=>{if(!this.authStorage.hasAuth(provider.id)&&!this.runtime.getProviderAuthStatus(provider.id).configured)return[];let models=this.runtime.getModels(provider.id);return[...provider.filterModels?.(models,this.authStorage.get(provider.id))??models]})}find(provider,modelId){return this.runtime.getModel(provider,modelId)}hasConfiguredAuth(model){return this.authStorage.hasAuth(model.provider)||this.runtime.getProviderAuthStatus(model.provider).configured}getUpstreamModelId(model){return this.runtime.getCompatibilityRequestConfig(model).upstreamModelId}getServiceTier(model){return this.runtime.getCompatibilityRequestConfig(model).serviceTier}async getApiKeyAndHeaders(model){try{let resolution=await this.runtime.getAuth(model),compatibility=this.runtime.getCompatibilityRequestConfig(model);return resolution?{ok:!0,apiKey:resolution.auth.apiKey,headers:resolution.auth.headers,extraBody:compatibility.extraBody,baseUrl:resolution.auth.baseUrl,upstreamModelId:compatibility.upstreamModelId,serviceTier:compatibility.serviceTier,env:resolution.env}:compatibility.authHeader?{ok:!1,error:`No API key found for "${model.provider}"`}:{ok:!0,headers:await this.runtime.getCompatibilityRequestHeaders(model),extraBody:compatibility.extraBody}}catch(error2){let cause=error2 instanceof Error?error2.cause:void 0,message=cause instanceof Error?cause.message:error2 instanceof Error?error2.message:String(error2);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)}getProviderDisplayName(provider){return this.runtime.getProvider(provider)?.name??BUILT_IN_PROVIDER_DISPLAY_NAMES[provider]??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.authStorage.get(model.provider)?.type==="oauth"||this.runtime.isUsingOAuth(model.provider)}isFallbackEligible(model){return this.runtime.isFallbackEligible(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)}getRegisteredProviderConfig(providerName){return this.runtime.getRegisteredProviderConfig(providerName)}getRegisteredNativeProvider(providerName){return this.runtime.getRegisteredNativeProvider(providerName)}getRegisteredProviderIds(){return this.runtime.getRegisteredProviderIds()}};function isAmbientOnlyProvider(source,providerId){return source.getProviderAuthStatus?.(providerId).ambient===!0}function createAmbientProviderCheck(source){let cache=new Map;return providerId=>{let ambient=cache.get(providerId);return ambient===void 0&&(ambient=isAmbientOnlyProvider(source,providerId),cache.set(providerId,ambient)),ambient}}function selectProviderDefault(availableModels2,providerDefaults,source){let isAmbient=createAmbientProviderCheck(source),configured=availableModels2.filter(model=>!isAmbient(model.provider)),group=configured.length>0?configured:availableModels2;for(let[provider,modelId]of Object.entries(providerDefaults)){let match=group.find(model=>model.provider===provider&&model.id===modelId);if(match)return{model:match,provenance:"provider-default"}}let first=group[0];return first?{model:first,provenance:"first-available"}:void 0}var defaultModelPerProvider={"alibaba-token-plan":"qwen3.7-max","amazon-bedrock":"us.anthropic.claude-opus-4-6-v1","ant-ling":"Ring-2.6-1T","anthropic-subscription":"claude-opus-4-8",anthropic:"claude-opus-4-8",bai:"gpt-5.6-sol",openai:"gpt-6-sol","azure-openai-responses":"gpt-5.4","chatgpt-subscription":"gpt-6-sol",ollama:"qwen3.5:397b",cursor:"auto",radius:"balanced",nvidia:"nvidia/nemotron-3-super-120b-a12b",deepseek:"deepseek-v4-pro",google:"gemini-3.1-pro-preview","google-vertex":"gemini-3.1-pro-preview","github-copilot":"gpt-5.4",openrouter:"moonshotai/kimi-k2.6","vercel-ai-gateway":"zai/glm-5.1",opengateway:"moonshotai/kimi-k3",xai:"grok-4.7",groq:"openai/gpt-oss-120b",cerebras:"gpt-oss-120b",zai:"glm-5.3","zai-coding-cn":"glm-5.3",mistral:"devstral-medium-latest",minimax:"MiniMax-M2.7","minimax-cn":"MiniMax-M2.7",moonshotai:"kimi-k2.6","moonshotai-cn":"kimi-k2.6",huggingface:"moonshotai/Kimi-K2.6",fireworks:"accounts/fireworks/models/kimi-k3",together:"moonshotai/Kimi-K3",venice:"z-ai-glm-5-3",baseten:"zai-org/GLM-5.2",opencode:"kimi-k2.6","opencode-go":"kimi-k3","kimi-coding":"kimi-for-coding","cloudflare-workers-ai":"@cf/moonshotai/kimi-k2.6","cloudflare-ai-gateway":"workers-ai/@cf/moonshotai/kimi-k2.6","qwen-token-plan":"qwen3.7-max","qwen-token-plan-cn":"qwen3.7-max","qwen-token-plan-individual":"qwen3.8-max",xiaomi:"mimo-v2.5-pro","xiaomi-token-plan-cn":"mimo-v2.5-pro","xiaomi-token-plan-ams":"mimo-v2.5-pro","xiaomi-token-plan-sgp":"mimo-v2.5-pro"};function getModelNarrowingPatterns(options){return options.cliPatterns??options.legacyEnabledPatterns??[]}function isAlias(id){return id.endsWith("-latest")?!0:!/-\d{8}$/.test(id)}function findExactModelReferenceMatch(modelReference,availableModels2){let trimmedReference=modelReference.trim();if(!trimmedReference)return;let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels2.filter(model=>`${model.provider}/${model.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length===1)return canonicalMatches[0];if(canonicalMatches.length>1)return;let slashIndex=trimmedReference.indexOf("/");if(slashIndex!==-1){let provider=trimmedReference.substring(0,slashIndex).trim(),modelId=trimmedReference.substring(slashIndex+1).trim();if(provider&&modelId){let providerMatches=availableModels2.filter(model=>model.provider.toLowerCase()===provider.toLowerCase()&&model.id.toLowerCase()===modelId.toLowerCase());if(providerMatches.length===1)return providerMatches[0];if(providerMatches.length>1)return}}let idMatches=availableModels2.filter(model=>model.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches[0]:void 0}var CURSOR_PROVIDER_IDS=new Set(["cursor","cursor-cli-oauth"]),CURSOR_ALIAS_LEVEL_TOKENS=["minimal","low","medium","high","extra-high","xhigh","max","none"];function legacySelection(legacyVariantId){let alias=getCursorVariantAlias(legacyVariantId);if(alias?.level)return{level:alias.level,source:"legacy-variant",legacyVariantId}}function derivedCursorVariantIds(model){if(!((model.provider!=="cursor"||model.api!=="cursor-agent")&&(model.provider!=="cursor-cli-oauth"||model.api!=="cursor-cli-oauth")))return model.compat?.cursorReasoning?.variantIds}function derivedCursorVariantMatch(model,reference){let variantIds=derivedCursorVariantIds(model);if(variantIds===void 0)return;let normalized2=reference.toLowerCase();for(let[level,id]of Object.entries(variantIds))if(id?.toLowerCase()===normalized2)return{level,variantId:id}}function derivedResolution(model,match){return{model,thinkingLevel:match.level,thinkingSelection:{level:match.level,source:"legacy-variant",legacyVariantId:match.variantId}}}function cursorLegacySelection(model,variantId){let alias=legacySelection(variantId);if(alias)return alias;let match=derivedCursorVariantMatch(model,variantId);return match===void 0?void 0:{level:match.level,source:"legacy-variant",legacyVariantId:match.variantId}}function resolveLegacyCursorReference(modelReference,availableModels2){let trimmed=modelReference.trim();if(!trimmed)return;let slashIndex=trimmed.indexOf("/"),explicitProvider=slashIndex===-1?void 0:trimmed.slice(0,slashIndex),legacyVariantId=slashIndex===-1?trimmed:trimmed.slice(slashIndex+1),alias=getCursorVariantAlias(legacyVariantId),providerMatches=model=>CURSOR_PROVIDER_IDS.has(model.provider)&&(!explicitProvider||model.provider.toLowerCase()===explicitProvider.toLowerCase());if(alias){let candidates=availableModels2.filter(model=>providerMatches(model)&&model.id===alias.targetId);if(candidates.length!==1)return;let thinkingSelection=legacySelection(legacyVariantId);return{model:candidates[0],thinkingLevel:thinkingSelection?.level,thinkingSelection}}let exactCandidates=explicitProvider?availableModels2.filter(providerMatches):availableModels2;if(findExactModelReferenceMatch(trimmed,[...exactCandidates]))return;let derivedCandidates=availableModels2.flatMap(model=>{let match=providerMatches(model)?derivedCursorVariantMatch(model,legacyVariantId):void 0;return match===void 0?[]:[{model,match}]});if(derivedCandidates.length===1)return derivedResolution(derivedCandidates[0].model,derivedCandidates[0].match)}function cursorLegacyAliasesForModel(model){if(!CURSOR_PROVIDER_IDS.has(model.provider))return[];let targetId=model.id,baseId=targetId.endsWith("-thinking")?targetId.slice(0,-9):targetId,candidates=new Set([targetId,`${baseId}-thinking`,`${baseId}-fast`]);for(let level of CURSOR_ALIAS_LEVEL_TOKENS)candidates.add(`${baseId}-${level}`),candidates.add(`${baseId}-thinking-${level}`),candidates.add(`${baseId}-${level}-thinking`),candidates.add(`${targetId}-${level}`);let aliases=[...candidates].filter(candidate=>getCursorVariantAlias(candidate)?.targetId===targetId);for(let derivedId of Object.values(derivedCursorVariantIds(model)??{}))aliases.push(derivedId);return aliases}function resolveDerivedCursorVariant(provider,modelId,modelSource){let parsed=parseCursorVariantId(modelId);if(parsed.fast||parsed.level===void 0||parsed.baseId==="")return;let targetId=parsed.thinking===!0?`${parsed.baseId}-thinking`:parsed.baseId,model=modelSource.getModel(provider,targetId),match=model===void 0?void 0:derivedCursorVariantMatch(model,modelId);if(!(model===void 0||match===void 0))return derivedResolution(model,match)}function resolveStoredModelReference(provider,modelId,modelSource){if(CURSOR_PROVIDER_IDS.has(provider)){let alias=getCursorVariantAlias(modelId);if(alias){let model=modelSource.getModel(provider,alias.targetId);if(model){let thinkingSelection=legacySelection(modelId);return{model,thinkingLevel:thinkingSelection?.level,thinkingSelection}}}else{let direct2=modelSource.getModel(provider,modelId);if(direct2)return{model:direct2};let derived=resolveDerivedCursorVariant(provider,modelId,modelSource);if(derived)return derived}}let direct=modelSource.getModel(provider,modelId);return direct?{model:direct}:void 0}function tryMatchModel(modelPattern,availableModels2){let exactMatch=findExactModelReferenceMatch(modelPattern,availableModels2);if(exactMatch)return exactMatch;let matches=availableModels2.filter(m=>m.id.toLowerCase().includes(modelPattern.toLowerCase())||m.name?.toLowerCase().includes(modelPattern.toLowerCase()));if(matches.length===0)return;let aliases=matches.filter(m=>isAlias(m.id)),datedVersions=matches.filter(m=>!isAlias(m.id));return aliases.length>0?(aliases.sort((a,b)=>b.id.localeCompare(a.id)),aliases[0]):(datedVersions.sort((a,b)=>b.id.localeCompare(a.id)),datedVersions[0])}function buildFallbackModel(provider,modelId,availableModels2){let providerModels=availableModels2.filter(m=>m.provider===provider);if(providerModels.length===0)return;let defaultId=defaultModelPerProvider[provider];return{...defaultId?providerModels.find(m=>m.id===defaultId)??providerModels[0]:providerModels[0],id:modelId,name:modelId}}var SERVICE_TIER_VALUES=["auto","flex","priority"];function isServiceTier(value2){return SERVICE_TIER_VALUES.includes(value2)}function parseModelPattern(pattern,availableModels2,options){let legacyMatch=resolveLegacyCursorReference(pattern,availableModels2);if(legacyMatch)return{...legacyMatch,serviceTier:void 0,warning:void 0};let fullMatch=tryMatchModel(pattern,availableModels2);if(fullMatch)return{model:fullMatch,thinkingLevel:void 0,thinkingSelection:void 0,serviceTier:void 0,warning:void 0};let lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex===-1)return{model:void 0,thinkingLevel:void 0,serviceTier:void 0,warning:void 0};let prefix=pattern.substring(0,lastColonIndex),suffix=pattern.substring(lastColonIndex+1);if(isValidThinkingLevel(suffix)){let result3=parseModelPattern(prefix,availableModels2,options);if(result3.model){let thinkingLevel=result3.warning?void 0:result3.thinkingLevel??suffix;return{model:result3.model,thinkingLevel,thinkingSelection:thinkingLevel?{level:thinkingLevel,source:"explicit"}:void 0,serviceTier:result3.serviceTier,warning:result3.warning}}return result3}else if(isServiceTier(suffix)){let result3=parseModelPattern(prefix,availableModels2,options);return result3.model?{model:result3.model,thinkingLevel:result3.thinkingLevel,thinkingSelection:result3.thinkingSelection,serviceTier:result3.warning?void 0:result3.serviceTier??suffix,warning:result3.warning}:result3}else{if(!(options?.allowInvalidThinkingLevelFallback??!0))return{model:void 0,thinkingLevel:void 0,serviceTier:void 0,warning:void 0};let result3=parseModelPattern(prefix,availableModels2,options);return result3.model?{model:result3.model,thinkingLevel:void 0,thinkingSelection:void 0,serviceTier:result3.serviceTier,warning:`Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`}:result3}}function resolveModelScopeFromModels(patterns,models){let availableModels2=[...models],scopedModels=[],diagnostics=[],patternResolutions=[],claimedIds=new Set,canonicalId=model=>`${model.provider}/${model.id}`,addScoped=entry=>{let id=canonicalId(entry.model);if(!claimedIds.has(id))return claimedIds.add(id),scopedModels.push(entry),id};for(let pattern of patterns){if(pattern.includes("*")||pattern.includes("?")||pattern.includes("[")){let globPattern=pattern,thinkingLevel2,serviceTier2;for(;;){let colonIdx=globPattern.lastIndexOf(":");if(colonIdx===-1)break;let suffix=globPattern.substring(colonIdx+1);if(thinkingLevel2===void 0&&isValidThinkingLevel(suffix))thinkingLevel2=suffix;else if(serviceTier2===void 0&&isServiceTier(suffix))serviceTier2=suffix;else break;globPattern=globPattern.substring(0,colonIdx)}let exactMatch=findExactModelReferenceMatch(globPattern,availableModels2);if(exactMatch){let owned2=addScoped({model:exactMatch,thinkingLevel:thinkingLevel2,thinkingSelection:thinkingLevel2?{level:thinkingLevel2,source:"explicit"}:void 0,serviceTier:serviceTier2});patternResolutions.push({pattern,ownedIds:owned2?[owned2]:[],thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!1,isGlob:!0});continue}let canonicalPattern=globPattern.includes("/"),matches=(provider,id)=>minimatch(`${provider}/${id}`,globPattern,{nocase:!0})||!canonicalPattern&&minimatch(id,globPattern,{nocase:!0}),projections=new Map;for(let model2 of availableModels2){let id=canonicalId(model2);matches(model2.provider,model2.id)&&projections.set(id,{model:model2,aliases:[]});for(let aliasId of cursorLegacyAliasesForModel(model2)){if(!matches(model2.provider,aliasId))continue;let projection=projections.get(id)??{model:model2,aliases:[]};projection.aliases.push({id:aliasId,selection:cursorLegacySelection(model2,aliasId)}),projections.set(id,projection)}}if(projections.size===0){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern}),patternResolutions.push({pattern,ownedIds:[],thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!0,isGlob:!0});continue}let ownedIds=[];for(let{model:model2,aliases}of projections.values()){let thinkingSelection2,projectedLevel=thinkingLevel2;if(thinkingLevel2!==void 0)thinkingSelection2={level:thinkingLevel2,source:"explicit"};else{let selections=aliases.flatMap(alias=>alias.selection?[alias.selection]:[]);new Set(selections.map(selection=>selection.level)).size===1&&selections.length>0&&(thinkingSelection2=[...selections].sort((a,b)=>(a.legacyVariantId??"").localeCompare(b.legacyVariantId??""))[0],projectedLevel=thinkingSelection2.level)}let owned2=addScoped({model:model2,thinkingLevel:projectedLevel,thinkingSelection:thinkingSelection2,serviceTier:serviceTier2});owned2&&ownedIds.push(owned2)}patternResolutions.push({pattern,ownedIds,thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!1,isGlob:!0});continue}let{model,thinkingLevel,thinkingSelection,serviceTier,warning}=parseModelPattern(pattern,availableModels2);if(warning&&diagnostics.push({type:"warning",code:"invalid-thinking-level",message:warning,pattern}),!model){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern}),patternResolutions.push({pattern,ownedIds:[],thinkingLevel,serviceTier,unresolved:!0,isGlob:!1});continue}let owned=addScoped({model,thinkingLevel,thinkingSelection,serviceTier});patternResolutions.push({pattern,ownedIds:owned?[owned]:[],thinkingLevel,serviceTier,unresolved:!1,isGlob:!1})}return{scopedModels,diagnostics,patternResolutions}}async function resolveModelScopeWithDiagnostics(patterns,modelRuntime,options){return resolveModelScopeFromModels(patterns,await modelRuntime.getAvailable(void 0,options))}async function resolveModelScope(patterns,modelRuntime,options){let{scopedModels,diagnostics}=await resolveModelScopeWithDiagnostics(patterns,modelRuntime,options);for(let diagnostic2 of diagnostics){if(options?.onWarning){options.onWarning(diagnostic2.message);continue}console.warn(source_default.yellow(`Warning: ${diagnostic2.message}`))}return scopedModels}function resolveCliModel(options){let{cliProvider,cliModel,cliThinking,modelRuntime}=options;if(!cliModel)return{model:void 0,warning:void 0,error:void 0};let availableModels2=[...modelRuntime.getModels()];if(availableModels2.length===0)return{model:void 0,warning:void 0,error:"No models available. Check your installation or add models to models.json."};let providerMap=new Map;for(let m of availableModels2)providerMap.set(m.provider.toLowerCase(),m.provider);let provider=cliProvider?providerMap.get(cliProvider.toLowerCase()):void 0;if(cliProvider&&!provider)return{model:void 0,warning:void 0,error:`Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`};let pattern=cliModel,inferredProvider=!1;if(!provider){let slashIndex=cliModel.indexOf("/");if(slashIndex!==-1){let maybeProvider=cliModel.substring(0,slashIndex),canonical=providerMap.get(maybeProvider.toLowerCase());canonical&&(provider=canonical,pattern=cliModel.substring(slashIndex+1),inferredProvider=!0)}}if(!provider){let lower=cliModel.toLowerCase(),exactMatches=availableModels2.filter(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exactMatches.length===1)return{model:exactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};if(exactMatches.length>1){let authenticatedExactMatches=exactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedExactMatches.length===1)return{model:authenticatedExactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};let matches=exactMatches.map(m=>`${m.provider}/${m.id}`).sort((a,b)=>a.localeCompare(b)).join(", "),authHint=authenticatedExactMatches.length===0?"No matching provider is authenticated.":"More than one matching provider is authenticated.";return{model:void 0,warning:void 0,thinkingLevel:void 0,error:`Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`}}}if(cliProvider&&provider){let prefix=`${provider}/`;cliModel.toLowerCase().startsWith(prefix.toLowerCase())&&(pattern=cliModel.substring(prefix.length))}let candidates=provider?availableModels2.filter(m=>m.provider===provider):availableModels2,{model,thinkingLevel,thinkingSelection,serviceTier,warning}=parseModelPattern(pattern,candidates,{allowInvalidThinkingLevelFallback:!1});if(model){if(inferredProvider){let rawExactMatches=availableModels2.filter(m=>m.id.toLowerCase()===cliModel.toLowerCase()&&!modelsAreEqual(m,model));if(rawExactMatches.length>0&&!modelRuntime.hasConfiguredAuth(model.provider)){let authenticatedRawMatches=rawExactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedRawMatches.length===1)return{model:authenticatedRawMatches[0],thinkingLevel:void 0,serviceTier,warning:void 0,error:void 0}}}return{model,thinkingLevel,thinkingSelection,serviceTier,warning,error:void 0}}if(inferredProvider){let lower=cliModel.toLowerCase(),exact=availableModels2.find(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exact)return{model:exact,warning:void 0,thinkingLevel:void 0,serviceTier,error:void 0};let fallback=parseModelPattern(cliModel,availableModels2,{allowInvalidThinkingLevelFallback:!1});if(fallback.model)return{model:fallback.model,thinkingLevel:fallback.thinkingLevel,serviceTier:fallback.serviceTier,warning:fallback.warning,error:void 0}}if(provider){let fallbackPattern=pattern,fallbackThinking;if(!cliThinking){let lastColon=pattern.lastIndexOf(":");if(lastColon!==-1){let suffix=pattern.substring(lastColon+1);isValidThinkingLevel(suffix)&&(fallbackPattern=pattern.substring(0,lastColon),fallbackThinking=suffix)}}let fallbackModel=buildFallbackModel(provider,fallbackPattern,availableModels2);if(fallbackModel){let requestedThinking=cliThinking??fallbackThinking,model2=requestedThinking&&requestedThinking!=="off"?{...fallbackModel,reasoning:!0}:fallbackModel,fallbackWarning=warning?`${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`:`Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;return{model:model2,thinkingLevel:fallbackThinking,serviceTier,warning:fallbackWarning,error:void 0}}}let display=provider?`${provider}/${pattern}`:cliModel;return{model:void 0,thinkingLevel:void 0,serviceTier,warning,error:`Model "${display}" not found. Use --list-models to see available models.`}}async function findInitialModel(options){let{cliProvider,cliModel,scopedModels,isContinuing,defaultProvider,defaultModelId,modelRuntime}=options,model;if(cliProvider&&cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error&&(console.error(source_default.red(resolved.error)),process.exit(1)),resolved.model)return{model:resolved.model,thinkingLevel:resolved.thinkingLevel,thinkingSelection:resolved.thinkingSelection,fallbackMessage:void 0,provenance:"cli"}}if(scopedModels.length>0&&!isContinuing){let scopedModel=scopedModels[0],perModel=options.modelThinkingLevels?.[`${scopedModel.model.provider}/${scopedModel.model.id}`];return{model:scopedModels[0].model,thinkingLevel:perModel??scopedModels[0].thinkingLevel,thinkingSelection:scopedModels[0].thinkingSelection,fallbackMessage:void 0,provenance:"scoped"}}if(defaultProvider&&defaultModelId){let resolved=resolveStoredModelReference(defaultProvider,defaultModelId,modelRuntime);if(resolved&&modelRuntime.hasConfiguredAuth(resolved.model.provider))return model=resolved.model,{model,thinkingLevel:resolved.thinkingLevel,thinkingSelection:resolved.thinkingSelection,fallbackMessage:void 0,provenance:"settings"}}let availableModels2=[...typeof modelRuntime.getAvailableSnapshot=="function"?modelRuntime.getAvailableSnapshot():await modelRuntime.getAvailable()],selected=selectProviderDefault(availableModels2,defaultModelPerProvider,modelRuntime);return selected?{model:selected.model,thinkingLevel:void 0,fallbackMessage:void 0,provenance:selected.provenance}:{model:void 0,thinkingLevel:void 0,fallbackMessage:void 0,provenance:"first-available"}}import{readFileSync as readFileSync9}from"node:fs";var RUSAGE_INFO_V2=2,RI_PHYS_FOOTPRINT_OFFSET=72,RUSAGE_BUFFER_BYTES=256,PROCESS_QUERY_LIMITED_INFORMATION=4096,MEMORY_COUNTERS_EX_BYTES=80,PRIVATE_USAGE_OFFSET=72,platformReader;function readOwnFootprint(){return readProcessFootprint(process.pid)??{bytes:process.memoryUsage.rss(),measure:"rss"}}function readProcessFootprint(pid){if(!Number.isInteger(pid)||pid<=0)return;let reading=loadPlatformReader()?.(pid);return reading!==void 0||pid!==process.pid?reading:{bytes:process.memoryUsage.rss(),measure:"rss"}}function parseProcStatusRssAnon(status){let match=/^RssAnon:\s+(\d+)\s+kB$/m.exec(status);return match?.[1]===void 0?void 0:Number(match[1])*1024}function loadPlatformReader(){return platformReader===void 0&&(platformReader=createPlatformReader()??null),platformReader??void 0}function createPlatformReader(){if(process.platform==="linux")return linuxReader;if(process.platform!=="darwin"&&process.platform!=="win32")return;let ffi=process.getBuiltinModule("bun:ffi");if(ffi!==void 0)try{return process.platform==="darwin"?darwinReader(ffi):windowsReader(ffi)}catch{return}}function linuxReader(pid){let status;try{status=readFileSync9(`/proc/${pid}/status`,"utf8")}catch{return}let bytes=parseProcStatusRssAnon(status);return bytes===void 0?void 0:{bytes,measure:"rss_anon"}}function darwinReader({dlopen,FFIType,ptr}){let library=dlopen("libSystem.B.dylib",{proc_pid_rusage:{args:[FFIType.i32,FFIType.i32,FFIType.ptr],returns:FFIType.i32}}),buffer=new Uint8Array(RUSAGE_BUFFER_BYTES),view=new DataView(buffer.buffer);return pid=>{if(buffer.fill(0),library.symbols.proc_pid_rusage(pid,RUSAGE_INFO_V2,ptr(buffer))===0)return{bytes:Number(view.getBigUint64(RI_PHYS_FOOTPRINT_OFFSET,!0)),measure:"phys_footprint"}}}function windowsReader({dlopen,FFIType,ptr}){let library=dlopen("kernel32.dll",{OpenProcess:{args:[FFIType.u32,FFIType.i32,FFIType.u32],returns:FFIType.ptr},K32GetProcessMemoryInfo:{args:[FFIType.ptr,FFIType.ptr,FFIType.u32],returns:FFIType.i32},CloseHandle:{args:[FFIType.ptr],returns:FFIType.i32}}),counters=new Uint8Array(MEMORY_COUNTERS_EX_BYTES),view=new DataView(counters.buffer);return pid=>{let handle=library.symbols.OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,0,pid);if(handle)try{return counters.fill(0),library.symbols.K32GetProcessMemoryInfo(handle,ptr(counters),counters.byteLength)===0?void 0:{bytes:Number(view.getBigUint64(PRIVATE_USAGE_OFFSET,!0)),measure:"private_usage"}}finally{library.symbols.CloseHandle(handle)}}}import{existsSync as existsSync30,mkdirSync as mkdirSync16,readdirSync as readdirSync8,readFileSync as readFileSync36,realpathSync as realpathSync8,statSync as statSync17,writeFileSync as writeFileSync16}from"node:fs";import{createRequire as createRequire3}from"node:module";import{basename as basename18,dirname as dirname35,join as join60,resolve as resolve31,sep as sep11}from"node:path";import{fileURLToPath as fileURLToPath4,pathToFileURL}from"node:url";var GENERATED_SHIM_BANNER=`// Generated by ${APP_NAME}. Delete this file to stop loading the default global extension.
712
+ `):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))}getCompatibilityRequestHeaders(model,env){return resolveCompatibilityRequestHeaders(model,this.config.getProvider(model.provider),this.extensionProviders.get(model.provider),env)}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)}isFallbackEligible(providerId){let hook=this.extensionProviders.get(providerId)?.fallbackEligible;if(typeof hook!="function")return!0;try{return hook()!==!1}catch{return!0}}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=await 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(resolve42=>{markStarted=resolve42}),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 result3=await this.models.refresh({allowNetwork:!1,providers:[providerId],signal});result3.aborted&&signal.throwIfAborted();let refreshError=result3.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,...check.ambient?{ambient:!0}:{}}:{configured:!1}}async prepareRequest(model,options,slotAuth){let provider=this.models.getProvider(model.provider);if(!provider)throw new ModelsError("provider",`Unknown provider: ${model.provider}`);let resolution=await this.getAuth(model,{apiKey:slotAuth?.apiKey??options?.apiKey,env:options?.env,signal:options?.signal,...slotAuth?.slotName===void 0?{}:{slotName:slotAuth.slotName},...slotAuth?.rejectedAccess===void 0?{}:{rejectedAccess:slotAuth.rejectedAccess}});if(!resolution)throw new ModelsError("auth",providerNotConfiguredMessage(model.provider));let{transformHeaders,...rawProviderOptions}=options??{},providerOptions=rawProviderOptions,headers=mergeHeaders(resolution.auth.headers,providerOptions.headers);transformHeaders&&(headers=await transformHeaders(headers??{}));let compatibility=this.getCompatibilityRequestConfig(model),extraBody=compatibility.extraBody||providerOptions.extraBody?{...compatibility.extraBody,...providerOptions.extraBody}:void 0,env=resolution.env||providerOptions.env?{...resolution.env??{},...providerOptions.env??{}}:void 0,upstreamModelId=compatibility.upstreamModelId,requestModel=resolution.auth.baseUrl||upstreamModelId?{...model,...upstreamModelId?{id:upstreamModelId}:{},...resolution.auth.baseUrl?{baseUrl:resolution.auth.baseUrl}:{}}:model,rejectedTokenStatuses=provider.auth.oauth?.rejectedTokenStatuses,storedOAuthAccess=resolution.source==="OAuth"&&(slotAuth?.apiKey??providerOptions.apiKey)===void 0?resolution.auth.apiKey:void 0;return{...rejectedTokenStatuses!==void 0&&storedOAuthAccess!==void 0?{rejectableAccess:storedOAuthAccess,rejectedTokenStatuses}:{},provider,model:requestModel,options:{...providerOptions,apiKey:slotAuth?.apiKey??providerOptions.apiKey??resolution.auth.apiKey,headers,extraBody,env}}}loadCredentialPool(){return this.credentialPoolModules??=(async()=>{let[rotation,stateStore]=await Promise.all([import("./rotation-stream-4FQW6IX5.js"),import("./state-store-IIQL55GC.js")]);return{rotation,repository:new stateStore.CredentialSlotRepository(this.poolStatePath)}})(),this.credentialPoolModules}couldRotateCredentials(model,options){if(options?.apiKey!==void 0||this.credentials.hasRuntimeApiKey(model.provider)||this.config.getProvider(model.provider)?.credentials?.rotation===!1)return!1;let env=name=>options?.env?.[name]??process.env[name];if(this.snapshot.storedProviders.has(model.provider))return!0;let policySlots=this.config.getProvider(model.provider)?.credentials?.slots;return discoverEnvSlots(model.provider,env).length+Object.keys(policySlots??{}).length>1}async credentialRotationSources(model,options){let env=name=>options?.env?.[name]??process.env[name],credential=await this.credentials.read(model.provider,{signal:options?.signal}),policy=this.config.getProvider(model.provider)?.credentials;if(!mightHoldCredentialPool(model.provider,credential,env,policy?.slots))return;let pool=await this.loadCredentialPool(),sources={providerId:model.provider,credential,env,repository:pool.repository,policy};return(await pool.rotation.listRotationSlots(sources,{acquireLeases:!1})).length>1?sources:void 0}stream(model,context,options){return lazyStream(model,async()=>{let streamOptions=options,sources=this.couldRotateCredentials(model,streamOptions)?await this.credentialRotationSources(model,streamOptions):void 0;if(sources){let{rotation}=await this.loadCredentialPool();return rotation.streamWithCredentialRotation({sources,...streamOptions?.affinityKey!==void 0?{affinityKey:streamOptions.affinityKey}:streamOptions?.sessionId!==void 0?{affinityKey:streamOptions.sessionId}:{},runAttempt:slot=>this.attemptWithTokenRecovery(model,streamOptions,slot.lane==="env"?{...slot.envKey===void 0?{}:{apiKey:slot.envKey}}:{slotName:slot.name},prepared=>prepared.provider.stream(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}return this.attemptWithTokenRecovery(model,streamOptions,void 0,prepared=>prepared.provider.stream(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}attemptWithTokenRecovery(model,options,slotAuth,send,context){return retryOnceOnRejectedToken(async rejectedAccess=>{let prepared=await this.prepareRequest(model,options,rejectedAccess===void 0?slotAuth:{...slotAuth,rejectedAccess}),inner=await this.providerSemaphores.bracket(prepared.model.provider,prepared.options.signal,()=>send(prepared));return{stream:wrapStreamWithModelRecovery(inner,model,context.tools??[]),...prepared.rejectableAccess===void 0?{}:{rejectableAccess:prepared.rejectableAccess},...prepared.rejectedTokenStatuses===void 0?{}:{rejectedTokenStatuses:prepared.rejectedTokenStatuses}}})}complete(model,context,options){return this.stream(model,context,options).result()}streamSimple(model,context,options){return lazyStream(model,async()=>{let streamOptions=options,sources=this.couldRotateCredentials(model,streamOptions)?await this.credentialRotationSources(model,streamOptions):void 0;if(sources){let{rotation}=await this.loadCredentialPool();return rotation.streamWithCredentialRotation({sources,...streamOptions?.sessionId===void 0?{}:{affinityKey:streamOptions.sessionId},runAttempt:slot=>this.attemptWithTokenRecovery(model,streamOptions,slot.lane==="env"?{apiKey:slot.envKey}:{slotName:slot.name},prepared=>prepared.provider.streamSimple(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}return this.attemptWithTokenRecovery(model,options,void 0,prepared=>prepared.provider.streamSimple(prepared.model,context,withPayloadRequestMetadata(prepared.options,prepared.model)),context)})}async prepareSimpleRequest(model,options){let prepared=await this.prepareRequest(model,options);return{model:prepared.model,options:withPayloadRequestMetadata(prepared.options,prepared.model)}}completeSimple(model,context,options){return this.streamSimple(model,context,options).result()}streamDeferred(model,handle,options){return lazyStream(model,async()=>{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){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)}login(providerId,type2,interaction){let signal=operationSignal(interaction.signal);return this.enqueueCredentialOperation(providerId,signal,async()=>{let credential=await this.models.login(providerId,type2,{...interaction,signal});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 reloadConfig(){await this.refresh({allowNetwork:this.modelNetworkEnabled})}async refresh(options={}){if(this.config=await ModelConfig.load(this.modelsPath),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},result3=await this.models.refresh(refreshOptions)??{aborted:refreshOptions.signal?.aborted??!1,errors:new Map},errors=new Map(result3.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(error2){options.signal?.aborted||errors.set(providerId,error2 instanceof Error?error2:new Error(String(error2)))}}));else try{await this.queueAvailabilityRefresh(options.signal)}catch{}return{aborted:result3.aborted||(options.signal?.aborted??!1),errors}}shouldSkipRegistrationRefresh(providerId){return this.hasFreshAvailabilitySnapshot()&&(this.nativeExtensionProviders.has(providerId)||this.extensionProviders.has(providerId))}refreshAfterRegistration(){if(!this.modelNetworkEnabled)return this.refresh({allowNetwork:!1});let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),this.modelRefreshTimeoutMs);return this.refresh({allowNetwork:!0,signal:controller.signal}).finally(()=>clearTimeout(timeout))}registerNativeProvider(provider,options){if(!provider.id.trim())throw new Error("Provider id must not be empty.");let alreadyFresh=this.shouldSkipRegistrationRefresh(provider.id);this.extensionProviders.delete(provider.id),this.nativeExtensionProviders.set(provider.id,provider),this.recomposeProvider(provider.id);let composedOAuth=this.models.getProvider(provider.id)?.auth.oauth;return composedOAuth?this.credentials.registerOAuthProvider(provider.id,composedOAuth):this.credentials.unregisterOAuthProvider(provider.id),this.updateModelSnapshot(),alreadyFresh||options?.refresh===!1?Promise.resolve({aborted:!1,errors:new Map}):this.refreshAfterRegistration()}registerProvider(providerId,config,options){validateExtensionProvider(providerId,this.builtins.get(providerId),this.config.getProvider(providerId),config);let alreadyFresh=this.shouldSkipRegistrationRefresh(providerId);this.nativeExtensionProviders.delete(providerId);let effective={...this.extensionProviders.get(providerId)};for(let[key,value2]of Object.entries(config))value2!==void 0&&(effective[key]=value2);this.extensionProviders.set(providerId,effective),this.recomposeProvider(providerId);let composedOAuth=this.models.getProvider(providerId)?.auth.oauth;if(composedOAuth?this.credentials.registerOAuthProvider(providerId,composedOAuth):this.credentials.unregisterOAuthProvider(providerId),this.updateModelSnapshot(),this.snapshot.storedProviders.has(providerId)||configuredRequestAuthStatus(this.config.getProvider(providerId),effective)?.configured){let configuredProviders=new Set(this.snapshot.configuredProviders).add(providerId),auth=new Map(this.snapshot.auth);auth.get(providerId)||auth.set(providerId,{type:effective.oauth&&!effective.apiKey?"oauth":"api_key",source:"configured provider"}),this.snapshot={...this.snapshot,auth,configuredProviders,available:this.snapshot.all.filter(model=>configuredProviders.has(model.provider))}}return alreadyFresh||options?.refresh===!1?Promise.resolve({aborted:!1,errors:new Map}):this.refreshAfterRegistration()}unregisterProvider(providerId){this.extensionProviders.delete(providerId),this.nativeExtensionProviders.delete(providerId),this.recomposeProvider(providerId),this.credentials.unregisterOAuthProvider(providerId),this.updateModelSnapshot(),this.refresh({allowNetwork:!1})}};var ModelRegistry=class _ModelRegistry{constructor(runtime,authStorage=AuthStorage.inMemory()){this.runtime=runtime,this.authStorage=authStorage}static create(authStorage,modelsJsonPath=join8(getAgentDir(),"models.json")){return new _ModelRegistry(ModelRuntime.createSync({credentials:authStorage,modelsPath:modelsJsonPath}),authStorage)}static inMemory(authStorage){return new _ModelRegistry(ModelRuntime.createSync({credentials:authStorage,modelsPath:null}),authStorage)}get modelRuntime(){return this.runtime}refresh(options){return this.runtime.refresh(options)}getError(){return this.runtime.getError()}getAll(){return[...this.runtime.getModels()]}getAvailable(){return this.runtime.hasAvailabilitySnapshot()?[...this.runtime.getAvailableSnapshot()]:this.runtime.getProviders().flatMap(provider=>{if(!this.authStorage.hasAuth(provider.id)&&!this.runtime.getProviderAuthStatus(provider.id).configured)return[];let models=this.runtime.getModels(provider.id);return[...provider.filterModels?.(models,this.authStorage.get(provider.id))??models]})}find(provider,modelId){return this.runtime.getModel(provider,modelId)}hasConfiguredAuth(model){return this.authStorage.hasAuth(model.provider)||this.runtime.getProviderAuthStatus(model.provider).configured}getUpstreamModelId(model){return this.runtime.getCompatibilityRequestConfig(model).upstreamModelId}getServiceTier(model){return this.runtime.getCompatibilityRequestConfig(model).serviceTier}async getApiKeyAndHeaders(model){try{let resolution=await this.runtime.getAuth(model),compatibility=this.runtime.getCompatibilityRequestConfig(model);return resolution?{ok:!0,apiKey:resolution.auth.apiKey,headers:resolution.auth.headers,extraBody:compatibility.extraBody,baseUrl:resolution.auth.baseUrl,upstreamModelId:compatibility.upstreamModelId,serviceTier:compatibility.serviceTier,env:resolution.env}:compatibility.authHeader?{ok:!1,error:`No API key found for "${model.provider}"`}:{ok:!0,headers:await this.runtime.getCompatibilityRequestHeaders(model),extraBody:compatibility.extraBody}}catch(error2){let cause=error2 instanceof Error?error2.cause:void 0,message=cause instanceof Error?cause.message:error2 instanceof Error?error2.message:String(error2);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)}getProviderDisplayName(provider){return this.runtime.getProvider(provider)?.name??BUILT_IN_PROVIDER_DISPLAY_NAMES[provider]??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.authStorage.get(model.provider)?.type==="oauth"||this.runtime.isUsingOAuth(model.provider)}isFallbackEligible(model){return this.runtime.isFallbackEligible(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)}getRegisteredProviderConfig(providerName){return this.runtime.getRegisteredProviderConfig(providerName)}getRegisteredNativeProvider(providerName){return this.runtime.getRegisteredNativeProvider(providerName)}getRegisteredProviderIds(){return this.runtime.getRegisteredProviderIds()}};function isAmbientOnlyProvider(source,providerId){return source.getProviderAuthStatus?.(providerId).ambient===!0}function createAmbientProviderCheck(source){let cache=new Map;return providerId=>{let ambient=cache.get(providerId);return ambient===void 0&&(ambient=isAmbientOnlyProvider(source,providerId),cache.set(providerId,ambient)),ambient}}function selectProviderDefault(availableModels2,providerDefaults,source){let isAmbient=createAmbientProviderCheck(source),configured=availableModels2.filter(model=>!isAmbient(model.provider)),group=configured.length>0?configured:availableModels2;for(let[provider,modelId]of Object.entries(providerDefaults)){let match=group.find(model=>model.provider===provider&&model.id===modelId);if(match)return{model:match,provenance:"provider-default"}}let first=group[0];return first?{model:first,provenance:"first-available"}:void 0}var defaultModelPerProvider={"alibaba-token-plan":"qwen3.7-max","amazon-bedrock":"us.anthropic.claude-opus-4-6-v1","ant-ling":"Ring-2.6-1T","anthropic-subscription":"claude-opus-4-8",anthropic:"claude-opus-4-8",bai:"gpt-5.6-sol",openai:"gpt-6-sol","azure-openai-responses":"gpt-5.4","chatgpt-subscription":"gpt-6-sol",ollama:"qwen3.5:397b",cursor:"auto",radius:"balanced",nvidia:"nvidia/nemotron-3-super-120b-a12b",deepseek:"deepseek-v4-pro",google:"gemini-3.1-pro-preview","google-vertex":"gemini-3.1-pro-preview","github-copilot":"gpt-5.4",openrouter:"moonshotai/kimi-k2.6","vercel-ai-gateway":"zai/glm-5.1",opengateway:"moonshotai/kimi-k3",xai:"grok-4.7",groq:"openai/gpt-oss-120b",cerebras:"gpt-oss-120b",zai:"glm-5.3","zai-coding-cn":"glm-5.3",mistral:"devstral-medium-latest",minimax:"MiniMax-M2.7","minimax-cn":"MiniMax-M2.7",moonshotai:"kimi-k2.6","moonshotai-cn":"kimi-k2.6",huggingface:"moonshotai/Kimi-K2.6",fireworks:"accounts/fireworks/models/kimi-k3",together:"moonshotai/Kimi-K3",venice:"z-ai-glm-5-3",baseten:"zai-org/GLM-5.2",opencode:"kimi-k2.6","opencode-go":"kimi-k3","kimi-coding":"kimi-for-coding","cloudflare-workers-ai":"@cf/moonshotai/kimi-k2.6","cloudflare-ai-gateway":"workers-ai/@cf/moonshotai/kimi-k2.6","qwen-token-plan":"qwen3.7-max","qwen-token-plan-cn":"qwen3.7-max","qwen-token-plan-individual":"qwen3.8-max",xiaomi:"mimo-v2.5-pro","xiaomi-token-plan-cn":"mimo-v2.5-pro","xiaomi-token-plan-ams":"mimo-v2.5-pro","xiaomi-token-plan-sgp":"mimo-v2.5-pro"};function getModelNarrowingPatterns(options){return options.cliPatterns??options.legacyEnabledPatterns??[]}function isAlias(id){return id.endsWith("-latest")?!0:!/-\d{8}$/.test(id)}function findExactModelReferenceMatch(modelReference,availableModels2){let trimmedReference=modelReference.trim();if(!trimmedReference)return;let normalizedReference=trimmedReference.toLowerCase(),canonicalMatches=availableModels2.filter(model=>`${model.provider}/${model.id}`.toLowerCase()===normalizedReference);if(canonicalMatches.length===1)return canonicalMatches[0];if(canonicalMatches.length>1)return;let slashIndex=trimmedReference.indexOf("/");if(slashIndex!==-1){let provider=trimmedReference.substring(0,slashIndex).trim(),modelId=trimmedReference.substring(slashIndex+1).trim();if(provider&&modelId){let providerMatches=availableModels2.filter(model=>model.provider.toLowerCase()===provider.toLowerCase()&&model.id.toLowerCase()===modelId.toLowerCase());if(providerMatches.length===1)return providerMatches[0];if(providerMatches.length>1)return}}let idMatches=availableModels2.filter(model=>model.id.toLowerCase()===normalizedReference);return idMatches.length===1?idMatches[0]:void 0}var CURSOR_PROVIDER_IDS=new Set(["cursor","cursor-cli-oauth"]),CURSOR_ALIAS_LEVEL_TOKENS=["minimal","low","medium","high","extra-high","xhigh","max","none"];function legacySelection(legacyVariantId){let alias=getCursorVariantAlias(legacyVariantId);if(alias?.level)return{level:alias.level,source:"legacy-variant",legacyVariantId}}function derivedCursorVariantIds(model){if(!((model.provider!=="cursor"||model.api!=="cursor-agent")&&(model.provider!=="cursor-cli-oauth"||model.api!=="cursor-cli-oauth")))return model.compat?.cursorReasoning?.variantIds}function derivedCursorVariantMatch(model,reference){let variantIds=derivedCursorVariantIds(model);if(variantIds===void 0)return;let normalized2=reference.toLowerCase();for(let[level,id]of Object.entries(variantIds))if(id?.toLowerCase()===normalized2)return{level,variantId:id}}function derivedResolution(model,match){return{model,thinkingLevel:match.level,thinkingSelection:{level:match.level,source:"legacy-variant",legacyVariantId:match.variantId}}}function cursorLegacySelection(model,variantId){let alias=legacySelection(variantId);if(alias)return alias;let match=derivedCursorVariantMatch(model,variantId);return match===void 0?void 0:{level:match.level,source:"legacy-variant",legacyVariantId:match.variantId}}function resolveLegacyCursorReference(modelReference,availableModels2){let trimmed=modelReference.trim();if(!trimmed)return;let slashIndex=trimmed.indexOf("/"),explicitProvider=slashIndex===-1?void 0:trimmed.slice(0,slashIndex),legacyVariantId=slashIndex===-1?trimmed:trimmed.slice(slashIndex+1),alias=getCursorVariantAlias(legacyVariantId),providerMatches=model=>CURSOR_PROVIDER_IDS.has(model.provider)&&(!explicitProvider||model.provider.toLowerCase()===explicitProvider.toLowerCase());if(alias){let candidates=availableModels2.filter(model=>providerMatches(model)&&model.id===alias.targetId);if(candidates.length!==1)return;let thinkingSelection=legacySelection(legacyVariantId);return{model:candidates[0],thinkingLevel:thinkingSelection?.level,thinkingSelection}}let exactCandidates=explicitProvider?availableModels2.filter(providerMatches):availableModels2;if(findExactModelReferenceMatch(trimmed,[...exactCandidates]))return;let derivedCandidates=availableModels2.flatMap(model=>{let match=providerMatches(model)?derivedCursorVariantMatch(model,legacyVariantId):void 0;return match===void 0?[]:[{model,match}]});if(derivedCandidates.length===1)return derivedResolution(derivedCandidates[0].model,derivedCandidates[0].match)}function cursorLegacyAliasesForModel(model){if(!CURSOR_PROVIDER_IDS.has(model.provider))return[];let targetId=model.id,baseId=targetId.endsWith("-thinking")?targetId.slice(0,-9):targetId,candidates=new Set([targetId,`${baseId}-thinking`,`${baseId}-fast`]);for(let level of CURSOR_ALIAS_LEVEL_TOKENS)candidates.add(`${baseId}-${level}`),candidates.add(`${baseId}-thinking-${level}`),candidates.add(`${baseId}-${level}-thinking`),candidates.add(`${targetId}-${level}`);let aliases=[...candidates].filter(candidate=>getCursorVariantAlias(candidate)?.targetId===targetId);for(let derivedId of Object.values(derivedCursorVariantIds(model)??{}))aliases.push(derivedId);return aliases}function resolveDerivedCursorVariant(provider,modelId,modelSource){let parsed=parseCursorVariantId(modelId);if(parsed.fast||parsed.level===void 0||parsed.baseId==="")return;let targetId=parsed.thinking===!0?`${parsed.baseId}-thinking`:parsed.baseId,model=modelSource.getModel(provider,targetId),match=model===void 0?void 0:derivedCursorVariantMatch(model,modelId);if(!(model===void 0||match===void 0))return derivedResolution(model,match)}function resolveStoredModelReference(provider,modelId,modelSource){if(CURSOR_PROVIDER_IDS.has(provider)){let alias=getCursorVariantAlias(modelId);if(alias){let model=modelSource.getModel(provider,alias.targetId);if(model){let thinkingSelection=legacySelection(modelId);return{model,thinkingLevel:thinkingSelection?.level,thinkingSelection}}}else{let direct2=modelSource.getModel(provider,modelId);if(direct2)return{model:direct2};let derived=resolveDerivedCursorVariant(provider,modelId,modelSource);if(derived)return derived}}let direct=modelSource.getModel(provider,modelId);return direct?{model:direct}:void 0}function tryMatchModel(modelPattern,availableModels2){let exactMatch=findExactModelReferenceMatch(modelPattern,availableModels2);if(exactMatch)return exactMatch;let matches=availableModels2.filter(m=>m.id.toLowerCase().includes(modelPattern.toLowerCase())||m.name?.toLowerCase().includes(modelPattern.toLowerCase()));if(matches.length===0)return;let aliases=matches.filter(m=>isAlias(m.id)),datedVersions=matches.filter(m=>!isAlias(m.id));return aliases.length>0?(aliases.sort((a,b)=>b.id.localeCompare(a.id)),aliases[0]):(datedVersions.sort((a,b)=>b.id.localeCompare(a.id)),datedVersions[0])}function buildFallbackModel(provider,modelId,availableModels2){let providerModels=availableModels2.filter(m=>m.provider===provider);if(providerModels.length===0)return;let defaultId=defaultModelPerProvider[provider];return{...defaultId?providerModels.find(m=>m.id===defaultId)??providerModels[0]:providerModels[0],id:modelId,name:modelId}}var SERVICE_TIER_VALUES=["auto","flex","priority"];function isServiceTier(value2){return SERVICE_TIER_VALUES.includes(value2)}function parseModelPattern(pattern,availableModels2,options){let legacyMatch=resolveLegacyCursorReference(pattern,availableModels2);if(legacyMatch)return{...legacyMatch,serviceTier:void 0,warning:void 0};let fullMatch=tryMatchModel(pattern,availableModels2);if(fullMatch)return{model:fullMatch,thinkingLevel:void 0,thinkingSelection:void 0,serviceTier:void 0,warning:void 0};let lastColonIndex=pattern.lastIndexOf(":");if(lastColonIndex===-1)return{model:void 0,thinkingLevel:void 0,serviceTier:void 0,warning:void 0};let prefix=pattern.substring(0,lastColonIndex),suffix=pattern.substring(lastColonIndex+1);if(isValidThinkingLevel(suffix)){let result3=parseModelPattern(prefix,availableModels2,options);if(result3.model){let thinkingLevel=result3.warning?void 0:result3.thinkingLevel??suffix;return{model:result3.model,thinkingLevel,thinkingSelection:thinkingLevel?{level:thinkingLevel,source:"explicit"}:void 0,serviceTier:result3.serviceTier,warning:result3.warning}}return result3}else if(isServiceTier(suffix)){let result3=parseModelPattern(prefix,availableModels2,options);return result3.model?{model:result3.model,thinkingLevel:result3.thinkingLevel,thinkingSelection:result3.thinkingSelection,serviceTier:result3.warning?void 0:result3.serviceTier??suffix,warning:result3.warning}:result3}else{if(!(options?.allowInvalidThinkingLevelFallback??!0))return{model:void 0,thinkingLevel:void 0,serviceTier:void 0,warning:void 0};let result3=parseModelPattern(prefix,availableModels2,options);return result3.model?{model:result3.model,thinkingLevel:void 0,thinkingSelection:void 0,serviceTier:result3.serviceTier,warning:`Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`}:result3}}function resolveModelScopeFromModels(patterns,models){let availableModels2=[...models],scopedModels=[],diagnostics=[],patternResolutions=[],claimedIds=new Set,canonicalId=model=>`${model.provider}/${model.id}`,addScoped=entry=>{let id=canonicalId(entry.model);if(!claimedIds.has(id))return claimedIds.add(id),scopedModels.push(entry),id};for(let pattern of patterns){if(pattern.includes("*")||pattern.includes("?")||pattern.includes("[")){let globPattern=pattern,thinkingLevel2,serviceTier2;for(;;){let colonIdx=globPattern.lastIndexOf(":");if(colonIdx===-1)break;let suffix=globPattern.substring(colonIdx+1);if(thinkingLevel2===void 0&&isValidThinkingLevel(suffix))thinkingLevel2=suffix;else if(serviceTier2===void 0&&isServiceTier(suffix))serviceTier2=suffix;else break;globPattern=globPattern.substring(0,colonIdx)}let exactMatch=findExactModelReferenceMatch(globPattern,availableModels2);if(exactMatch){let owned2=addScoped({model:exactMatch,thinkingLevel:thinkingLevel2,thinkingSelection:thinkingLevel2?{level:thinkingLevel2,source:"explicit"}:void 0,serviceTier:serviceTier2});patternResolutions.push({pattern,ownedIds:owned2?[owned2]:[],thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!1,isGlob:!0});continue}let canonicalPattern=globPattern.includes("/"),matches=(provider,id)=>minimatch(`${provider}/${id}`,globPattern,{nocase:!0})||!canonicalPattern&&minimatch(id,globPattern,{nocase:!0}),projections=new Map;for(let model2 of availableModels2){let id=canonicalId(model2);matches(model2.provider,model2.id)&&projections.set(id,{model:model2,aliases:[]});for(let aliasId of cursorLegacyAliasesForModel(model2)){if(!matches(model2.provider,aliasId))continue;let projection=projections.get(id)??{model:model2,aliases:[]};projection.aliases.push({id:aliasId,selection:cursorLegacySelection(model2,aliasId)}),projections.set(id,projection)}}if(projections.size===0){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern}),patternResolutions.push({pattern,ownedIds:[],thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!0,isGlob:!0});continue}let ownedIds=[];for(let{model:model2,aliases}of projections.values()){let thinkingSelection2,projectedLevel=thinkingLevel2;if(thinkingLevel2!==void 0)thinkingSelection2={level:thinkingLevel2,source:"explicit"};else{let selections=aliases.flatMap(alias=>alias.selection?[alias.selection]:[]);new Set(selections.map(selection=>selection.level)).size===1&&selections.length>0&&(thinkingSelection2=[...selections].sort((a,b)=>(a.legacyVariantId??"").localeCompare(b.legacyVariantId??""))[0],projectedLevel=thinkingSelection2.level)}let owned2=addScoped({model:model2,thinkingLevel:projectedLevel,thinkingSelection:thinkingSelection2,serviceTier:serviceTier2});owned2&&ownedIds.push(owned2)}patternResolutions.push({pattern,ownedIds,thinkingLevel:thinkingLevel2,serviceTier:serviceTier2,unresolved:!1,isGlob:!0});continue}let{model,thinkingLevel,thinkingSelection,serviceTier,warning}=parseModelPattern(pattern,availableModels2);if(warning&&diagnostics.push({type:"warning",code:"invalid-thinking-level",message:warning,pattern}),!model){diagnostics.push({type:"warning",code:"no-match",message:`No models match pattern "${pattern}"`,pattern}),patternResolutions.push({pattern,ownedIds:[],thinkingLevel,serviceTier,unresolved:!0,isGlob:!1});continue}let owned=addScoped({model,thinkingLevel,thinkingSelection,serviceTier});patternResolutions.push({pattern,ownedIds:owned?[owned]:[],thinkingLevel,serviceTier,unresolved:!1,isGlob:!1})}return{scopedModels,diagnostics,patternResolutions}}async function resolveModelScopeWithDiagnostics(patterns,modelRuntime,options){return resolveModelScopeFromModels(patterns,await modelRuntime.getAvailable(void 0,options))}async function resolveModelScope(patterns,modelRuntime,options){let{scopedModels,diagnostics}=await resolveModelScopeWithDiagnostics(patterns,modelRuntime,options);for(let diagnostic2 of diagnostics){if(options?.onWarning){options.onWarning(diagnostic2.message);continue}console.warn(source_default.yellow(`Warning: ${diagnostic2.message}`))}return scopedModels}function resolveCliModel(options){let{cliProvider,cliModel,cliThinking,modelRuntime}=options;if(!cliModel)return{model:void 0,warning:void 0,error:void 0};let availableModels2=[...modelRuntime.getModels()];if(availableModels2.length===0)return{model:void 0,warning:void 0,error:"No models available. Check your installation or add models to models.json."};let providerMap=new Map;for(let m of availableModels2)providerMap.set(m.provider.toLowerCase(),m.provider);let provider=cliProvider?providerMap.get(cliProvider.toLowerCase()):void 0;if(cliProvider&&!provider)return{model:void 0,warning:void 0,error:`Unknown provider "${cliProvider}". Use --list-models to see available providers/models.`};let pattern=cliModel,inferredProvider=!1;if(!provider){let slashIndex=cliModel.indexOf("/");if(slashIndex!==-1){let maybeProvider=cliModel.substring(0,slashIndex),canonical=providerMap.get(maybeProvider.toLowerCase());canonical&&(provider=canonical,pattern=cliModel.substring(slashIndex+1),inferredProvider=!0)}}if(!provider){let lower=cliModel.toLowerCase(),exactMatches=availableModels2.filter(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exactMatches.length===1)return{model:exactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};if(exactMatches.length>1){let authenticatedExactMatches=exactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedExactMatches.length===1)return{model:authenticatedExactMatches[0],warning:void 0,thinkingLevel:void 0,error:void 0};let matches=exactMatches.map(m=>`${m.provider}/${m.id}`).sort((a,b)=>a.localeCompare(b)).join(", "),authHint=authenticatedExactMatches.length===0?"No matching provider is authenticated.":"More than one matching provider is authenticated.";return{model:void 0,warning:void 0,thinkingLevel:void 0,error:`Model "${cliModel}" is ambiguous across providers: ${matches}. ${authHint} Use --provider or provider/model.`}}}if(cliProvider&&provider){let prefix=`${provider}/`;cliModel.toLowerCase().startsWith(prefix.toLowerCase())&&(pattern=cliModel.substring(prefix.length))}let candidates=provider?availableModels2.filter(m=>m.provider===provider):availableModels2,{model,thinkingLevel,thinkingSelection,serviceTier,warning}=parseModelPattern(pattern,candidates,{allowInvalidThinkingLevelFallback:!1});if(model){if(inferredProvider){let rawExactMatches=availableModels2.filter(m=>m.id.toLowerCase()===cliModel.toLowerCase()&&!modelsAreEqual(m,model));if(rawExactMatches.length>0&&!modelRuntime.hasConfiguredAuth(model.provider)){let authenticatedRawMatches=rawExactMatches.filter(m=>modelRuntime.hasConfiguredAuth(m.provider));if(authenticatedRawMatches.length===1)return{model:authenticatedRawMatches[0],thinkingLevel:void 0,serviceTier,warning:void 0,error:void 0}}}return{model,thinkingLevel,thinkingSelection,serviceTier,warning,error:void 0}}if(inferredProvider){let lower=cliModel.toLowerCase(),exact=availableModels2.find(m=>m.id.toLowerCase()===lower||`${m.provider}/${m.id}`.toLowerCase()===lower);if(exact)return{model:exact,warning:void 0,thinkingLevel:void 0,serviceTier,error:void 0};let fallback=parseModelPattern(cliModel,availableModels2,{allowInvalidThinkingLevelFallback:!1});if(fallback.model)return{model:fallback.model,thinkingLevel:fallback.thinkingLevel,serviceTier:fallback.serviceTier,warning:fallback.warning,error:void 0}}if(provider){let fallbackPattern=pattern,fallbackThinking;if(!cliThinking){let lastColon=pattern.lastIndexOf(":");if(lastColon!==-1){let suffix=pattern.substring(lastColon+1);isValidThinkingLevel(suffix)&&(fallbackPattern=pattern.substring(0,lastColon),fallbackThinking=suffix)}}let fallbackModel=buildFallbackModel(provider,fallbackPattern,availableModels2);if(fallbackModel){let requestedThinking=cliThinking??fallbackThinking,model2=requestedThinking&&requestedThinking!=="off"?{...fallbackModel,reasoning:!0}:fallbackModel,fallbackWarning=warning?`${warning} Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`:`Model "${fallbackPattern}" not found for provider "${provider}". Using custom model id.`;return{model:model2,thinkingLevel:fallbackThinking,serviceTier,warning:fallbackWarning,error:void 0}}}let display=provider?`${provider}/${pattern}`:cliModel;return{model:void 0,thinkingLevel:void 0,serviceTier,warning,error:`Model "${display}" not found. Use --list-models to see available models.`}}async function findInitialModel(options){let{cliProvider,cliModel,scopedModels,isContinuing,defaultProvider,defaultModelId,modelRuntime}=options,model;if(cliProvider&&cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error&&(console.error(source_default.red(resolved.error)),process.exit(1)),resolved.model)return{model:resolved.model,thinkingLevel:resolved.thinkingLevel,thinkingSelection:resolved.thinkingSelection,fallbackMessage:void 0,provenance:"cli"}}if(scopedModels.length>0&&!isContinuing){let scopedModel=scopedModels[0],perModel=options.modelThinkingLevels?.[`${scopedModel.model.provider}/${scopedModel.model.id}`];return{model:scopedModels[0].model,thinkingLevel:perModel??scopedModels[0].thinkingLevel,thinkingSelection:scopedModels[0].thinkingSelection,fallbackMessage:void 0,provenance:"scoped"}}if(defaultProvider&&defaultModelId){let resolved=resolveStoredModelReference(defaultProvider,defaultModelId,modelRuntime);if(resolved&&modelRuntime.hasConfiguredAuth(resolved.model.provider))return model=resolved.model,{model,thinkingLevel:resolved.thinkingLevel,thinkingSelection:resolved.thinkingSelection,fallbackMessage:void 0,provenance:"settings"}}let availableModels2=[...typeof modelRuntime.getAvailableSnapshot=="function"?modelRuntime.getAvailableSnapshot():await modelRuntime.getAvailable()],selected=selectProviderDefault(availableModels2,defaultModelPerProvider,modelRuntime);return selected?{model:selected.model,thinkingLevel:void 0,fallbackMessage:void 0,provenance:selected.provenance}:{model:void 0,thinkingLevel:void 0,fallbackMessage:void 0,provenance:"first-available"}}import{readFileSync as readFileSync9}from"node:fs";var RUSAGE_INFO_V2=2,RI_PHYS_FOOTPRINT_OFFSET=72,RUSAGE_BUFFER_BYTES=256,PROCESS_QUERY_LIMITED_INFORMATION=4096,MEMORY_COUNTERS_EX_BYTES=80,PRIVATE_USAGE_OFFSET=72,platformReader;function readOwnFootprint(){return readProcessFootprint(process.pid)??{bytes:process.memoryUsage.rss(),measure:"rss"}}function readProcessFootprint(pid){if(!Number.isInteger(pid)||pid<=0)return;let reading=loadPlatformReader()?.(pid);return reading!==void 0||pid!==process.pid?reading:{bytes:process.memoryUsage.rss(),measure:"rss"}}function parseProcStatusRssAnon(status){let match=/^RssAnon:\s+(\d+)\s+kB$/m.exec(status);return match?.[1]===void 0?void 0:Number(match[1])*1024}function loadPlatformReader(){return platformReader===void 0&&(platformReader=createPlatformReader()??null),platformReader??void 0}function createPlatformReader(){if(process.platform==="linux")return linuxReader;if(process.platform!=="darwin"&&process.platform!=="win32")return;let ffi=process.getBuiltinModule("bun:ffi");if(ffi!==void 0)try{return process.platform==="darwin"?darwinReader(ffi):windowsReader(ffi)}catch{return}}function linuxReader(pid){let status;try{status=readFileSync9(`/proc/${pid}/status`,"utf8")}catch{return}let bytes=parseProcStatusRssAnon(status);return bytes===void 0?void 0:{bytes,measure:"rss_anon"}}function darwinReader({dlopen,FFIType,ptr}){let library=dlopen("libSystem.B.dylib",{proc_pid_rusage:{args:[FFIType.i32,FFIType.i32,FFIType.ptr],returns:FFIType.i32}}),buffer=new Uint8Array(RUSAGE_BUFFER_BYTES),view=new DataView(buffer.buffer);return pid=>{if(buffer.fill(0),library.symbols.proc_pid_rusage(pid,RUSAGE_INFO_V2,ptr(buffer))===0)return{bytes:Number(view.getBigUint64(RI_PHYS_FOOTPRINT_OFFSET,!0)),measure:"phys_footprint"}}}function windowsReader({dlopen,FFIType,ptr}){let library=dlopen("kernel32.dll",{OpenProcess:{args:[FFIType.u32,FFIType.i32,FFIType.u32],returns:FFIType.ptr},K32GetProcessMemoryInfo:{args:[FFIType.ptr,FFIType.ptr,FFIType.u32],returns:FFIType.i32},CloseHandle:{args:[FFIType.ptr],returns:FFIType.i32}}),counters=new Uint8Array(MEMORY_COUNTERS_EX_BYTES),view=new DataView(counters.buffer);return pid=>{let handle=library.symbols.OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,0,pid);if(handle)try{return counters.fill(0),library.symbols.K32GetProcessMemoryInfo(handle,ptr(counters),counters.byteLength)===0?void 0:{bytes:Number(view.getBigUint64(PRIVATE_USAGE_OFFSET,!0)),measure:"private_usage"}}finally{library.symbols.CloseHandle(handle)}}}import{existsSync as existsSync30,mkdirSync as mkdirSync16,readdirSync as readdirSync8,readFileSync as readFileSync36,realpathSync as realpathSync8,statSync as statSync17,writeFileSync as writeFileSync16}from"node:fs";import{createRequire as createRequire3}from"node:module";import{basename as basename18,dirname as dirname35,join as join60,resolve as resolve31,sep as sep11}from"node:path";import{fileURLToPath as fileURLToPath4,pathToFileURL}from"node:url";var GENERATED_SHIM_BANNER=`// Generated by ${APP_NAME}. Delete this file to stop loading the default global extension.
713
713
  `,HISTORICAL_SHIM_BANNERS=[`// Generated by senpi. Delete this file to stop loading the default global extension.
714
714
  `,`// Generated by pi-coding-agent. Delete this file to stop loading the default global extension.
715
715
  `],ACCEPTED_SHIM_BANNERS=[...new Set([GENERATED_SHIM_BANNER,...HISTORICAL_SHIM_BANNERS])],ACCEPTED_SHIM_BANNER_PREFIXES=[...new Set(ACCEPTED_SHIM_BANNERS.map(banner=>banner.split(".")[0]??banner).map(prefix=>`${prefix}.`))];function hasGeneratedShimBanner(content){return ACCEPTED_SHIM_BANNER_PREFIXES.some(prefix=>content.startsWith(prefix))}import{spawn}from"node:child_process";function openBrowser(target){let[cmd,args]=process.platform==="darwin"?["open",[target]]:process.platform==="win32"?["rundll32",["url.dll,FileProtocolHandler",target]]:["xdg-open",[target]];spawn(cmd,args,{stdio:"ignore",detached:!0}).on("error",()=>{}).unref()}var LOGIN_CANCELLED_MESSAGE="Login cancelled",pendingLogins=new Map;function cancelledError(){return new Error(LOGIN_CANCELLED_MESSAGE)}function ownLoginController(providerId){let controller=new AbortController;return providerId===void 0||(pendingLogins.get(providerId)?.abort(cancelledError()),pendingLogins.set(providerId,controller),controller.signal.addEventListener("abort",()=>{pendingLogins.get(providerId)===controller&&pendingLogins.delete(providerId)},{once:!0})),controller}function createExtensionLoginInteraction(ctx,options){let openBrowser2=options.openBrowser??openBrowser,controller=ownLoginController(options.providerId);return{signal:controller.signal,prompt:prompt=>relayPrompt(ctx,controller,prompt),notify:event=>relayEvent(ctx,event,options.providerLabel,openBrowser2)}}function dialogSignal(loginSignal,promptSignal){return promptSignal?AbortSignal.any([loginSignal,promptSignal]):loginSignal}async function relayPrompt(ctx,login,prompt){let signal=dialogSignal(login.signal,prompt.signal);if(signal.aborted)throw cancelledError();let answer=await answerPrompt(ctx,prompt,{signal});if(signal.aborted)throw cancelledError();if(answer===void 0)throw login.abort(cancelledError()),cancelledError();return answer}async function answerPrompt(ctx,prompt,dialogOptions){switch(prompt.type){case"select":{let label3=await ctx.ui.select(prompt.message,prompt.options.map(option=>option.label),dialogOptions);return prompt.options.find(option=>option.label===label3)?.id}case"text":case"secret":case"manual_code":return ctx.ui.input(prompt.message,prompt.placeholder,dialogOptions)}}function relayEvent(ctx,event,providerLabel,openBrowser2){switch(event.type){case"auth_url":{ctx.mode==="tui"&&openBrowser2(event.url);let lines=[`Open this URL to authorize ${providerLabel}:`,event.url];event.instructions&&lines.push(event.instructions),ctx.ui.notify(lines.join(`
@@ -2397,7 +2397,7 @@ ${lines.join(`
2397
2397
  `),maxLines=options.expanded?lines.length:COLLAPSED_LINE_BUDGET,displayLines=lines.slice(0,maxLines),remaining=lines.length-maxLines,text2=`
2398
2398
  ${displayLines.map(line=>theme2.fg("toolOutput",line)).join(`
2399
2399
  `)}`;return remaining>0&&(text2+=`
2400
- ${overflowHint(remaining,remaining===1?"line":"lines",theme2)}`),text2}function formatGrepResult(result3,options,theme2,showImages,cwd){return isV1Details(result3.details)?formatGroupedResult(result3.details,options,theme2,cwd):formatTextFallback(result3,options,theme2,showImages)}var grepRenderers={renderCall(args,theme2,context){let text2=context.lastComponent??new Text("",0,0);return text2.setText(formatGrepCall(args,theme2,context.cwd)),text2},renderResult(result3,options,theme2,context){let text2=context.lastComponent??new Text("",0,0);return text2.setText(formatGrepResult(result3,options,theme2,context.showImages,context.cwd)),text2}};function recoverPattern(pattern){let stack=[],escapedIndices=new Set,inClass=!1;for(let i=0;i<pattern.length;i++){let char=pattern[i];if(char==="\\"){i++;continue}if(char==="["&&(inClass=!0),char==="]"&&(inClass=!1),!inClass){if(char==="{"&&/^\{\d+(,\d*)?\}/.test(pattern.slice(i))){i+=pattern.slice(i).indexOf("}");continue}if(char==="{"||char==="}"){escapedIndices.add(i);continue}char==="("&&stack.push({char,index:i}),char===")"&&(stack.length?stack.pop():escapedIndices.add(i))}}for(let entry of stack)escapedIndices.add(entry.index);return pattern.split("").map((char,i)=>`${escapedIndices.has(i)?"\\":""}${char}`).join("")}async function searchPattern(engine,request2,signal){let active=engine,search=async input=>{try{return await active.search(input,signal)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="UNSUPPORTED_REGEX")throw error2;return active=createRgEngine(),active.search({...input,pcre2:!0},signal)}},effectivePattern=request2.pattern,patternKind=request2.literal?"literal":"regex",result3;try{result3=await search(request2)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="INVALID_PATTERN"||request2.literal)throw error2;effectivePattern=recoverPattern(request2.pattern),patternKind="sanitized";try{result3=await search({...request2,pattern:effectivePattern})}catch(retryError){if(!(retryError instanceof GrepEngineError)||retryError.code!=="INVALID_PATTERN")throw retryError;effectivePattern=request2.pattern,patternKind="literal",result3=await search({...request2,literal:!0})}}return{result:{...result3,effectivePattern,patternKind},engine:active}}var singleton;function resolveGrepEngine(options={}){let useSingleton=Object.keys(options).length===0;if(useSingleton&&singleton)return singleton;let promise=selectEngine(options);return useSingleton&&(singleton=promise),promise}async function selectEngine(options){let env=options.env??process.env,requested=env.SENPI_GREP_ENGINE??"auto";if(requested!=="auto"&&requested!=="rg"&&requested!=="native")throw new GrepEngineError("ENGINE_UNAVAILABLE",`Unknown SENPI_GREP_ENGINE value: ${requested}`);if(requested==="rg")return loadRgEngine();if(requested==="native")return loadNativeEngine(options,env);try{return await loadNativeEngine(options,env)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="ENGINE_UNAVAILABLE")throw error2;return console.warn(`[grep] native engine unavailable; falling back to rg: ${error2.message}`),loadRgEngine()}}async function loadRgEngine(){return(await import("./rg-engine-XHGOVGVG.js")).createRgEngine()}async function loadNativeEngine(options,env){let{loadNativeGrep}=await import("./native-loader-SU5SGTSW.js"),loaded2=loadNativeGrep({...options,env});if(!loaded2.native)throw new GrepEngineError("ENGINE_UNAVAILABLE",`${loaded2.diagnostic.message} ${loaded2.diagnostic.cause}`);let{createNativeEngine}=await import("./native-engine-PDPNVTZX.js");return createNativeEngine(loaded2.native)}var strings2=()=>typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Array(typebox_exports.String())])),grepSchema=typebox_exports.Object({pattern:typebox_exports.String(),path:strings2(),glob:strings2(),type:typebox_exports.Optional(typebox_exports.String()),ignoreCase:typebox_exports.Optional(typebox_exports.Boolean()),literal:typebox_exports.Optional(typebox_exports.Boolean()),multiline:typebox_exports.Optional(typebox_exports.Boolean()),context:typebox_exports.Optional(typebox_exports.Number()),before:typebox_exports.Optional(typebox_exports.Number()),after:typebox_exports.Optional(typebox_exports.Number()),mode:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("content"),typebox_exports.Literal("count"),typebox_exports.Literal("files")])),limit:typebox_exports.Optional(typebox_exports.Number()),skip:typebox_exports.Optional(typebox_exports.Number()),timeoutMs:typebox_exports.Optional(typebox_exports.Number()),hidden:typebox_exports.Optional(typebox_exports.Boolean()),gitignore:typebox_exports.Optional(typebox_exports.Boolean())}),grepToolSystemPromptContribution={snippet:"Search file contents (regex/literal) across paths with structured results; respects .gitignore",guidelines:["Use tool.grep for content search instead of rg/grep in a shell; paginate with skip and narrow with glob/path when a page is full"]};async function pathStat(path13){try{return await stat9(path13)}catch(error2){if(error2.code==="ENOENT")return;throw error2}}function createGrepToolDefinition(cwd,options){if(options&&"operations"in options)throw new TypeError("GrepToolOptions.operations is deprecated and no longer supported; removed next release");return{name:"grep",label:"grep",exposure:"eval",description:"Search file contents with tool.grep({ pattern, path }) inside eval. Supports regex/literal patterns, file pages with skip, context, count/files modes, and structured results. Respects .gitignore.",promptSnippet:grepToolSystemPromptContribution.snippet,promptGuidelines:grepToolSystemPromptContribution.guidelines,parameters:grepSchema,async execute(_id,input,signal,_update,ctx){let started=Date.now();if(!input.pattern)throw new Error("Pattern must not be empty");let requested=input.path===void 0?["."]:Array.isArray(input.path)?input.path:[input.path];if(!requested.length||requested.some(p=>typeof p!="string"||!p.length))throw new Error("path must be a non-empty string or array of non-empty strings");let limit=input.limit??100;if(!Number.isInteger(input.skip??0)||(input.skip??0)<0)throw new Error("skip must be a non-negative integer");if(!Number.isInteger(limit)||limit<=0)throw new Error("limit must be a positive integer");let workingCwd=ctx?.cwd||cwd,paths=[],missingPaths=[],lineStart,lineEnd,singleFile=!1;for(let raw of requested){let path13=resolveToCwd(raw,workingCwd),info=await pathStat(path13);if(!info){let selector=/^(.*):L(\d+)-L?(\d+)$/.exec(path13);if(selector){let prefix=await pathStat(selector[1]);if(prefix?.isFile()){if(requested.length!==1||+selector[2]<1||+selector[3]<+selector[2])throw new Error("Invalid line selector");path13=selector[1],info=prefix,lineStart=+selector[2],lineEnd=+selector[3]}}}let canonicalPath2=await canonicalizeFilesystemPath(path13);if(options?.filesystemPolicy){let decision=await options.filesystemPolicy({operation:"enumerate",canonicalPath:canonicalPath2,toolName:"grep"});if(!decision.allow)throw new Error(decision.reason)}if(!info){missingPaths.push(path13);continue}paths.push(path13),singleFile=info.isFile()}if(!paths.length)throw new Error(`Path not found: ${missingPaths.join(", ")}`);singleFile=paths.length===1&&singleFile;let skip=singleFile?0:input.skip??0,mode=input.mode??"content",pageSize=Math.min(20,limit),cap=singleFile?200:20,before=input.before??input.context??0,after=input.after??input.context??0,request2={pattern:input.pattern,paths,cwd:workingCwd,glob:input.glob===void 0?void 0:Array.isArray(input.glob)?input.glob:[input.glob],type:input.type,ignoreCase:input.ignoreCase,literal:input.literal,multiline:input.multiline??(input.pattern.includes(`
2400
+ ${overflowHint(remaining,remaining===1?"line":"lines",theme2)}`),text2}function formatGrepResult(result3,options,theme2,showImages,cwd){return isV1Details(result3.details)?formatGroupedResult(result3.details,options,theme2,cwd):formatTextFallback(result3,options,theme2,showImages)}var grepRenderers={renderCall(args,theme2,context){let text2=context.lastComponent??new Text("",0,0);return text2.setText(formatGrepCall(args,theme2,context.cwd)),text2},renderResult(result3,options,theme2,context){let text2=context.lastComponent??new Text("",0,0);return text2.setText(formatGrepResult(result3,options,theme2,context.showImages,context.cwd)),text2}};function recoverPattern(pattern){let stack=[],escapedIndices=new Set,inClass=!1;for(let i=0;i<pattern.length;i++){let char=pattern[i];if(char==="\\"){i++;continue}if(char==="["&&(inClass=!0),char==="]"&&(inClass=!1),!inClass){if(char==="{"&&/^\{\d+(,\d*)?\}/.test(pattern.slice(i))){i+=pattern.slice(i).indexOf("}");continue}if(char==="{"||char==="}"){escapedIndices.add(i);continue}char==="("&&stack.push({char,index:i}),char===")"&&(stack.length?stack.pop():escapedIndices.add(i))}}for(let entry of stack)escapedIndices.add(entry.index);return pattern.split("").map((char,i)=>`${escapedIndices.has(i)?"\\":""}${char}`).join("")}async function searchPattern(engine,request2,signal){let active=engine,search=async input=>{try{return await active.search(input,signal)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="UNSUPPORTED_REGEX")throw error2;return active=createRgEngine(),active.search({...input,pcre2:!0},signal)}},effectivePattern=request2.pattern,patternKind=request2.literal?"literal":"regex",result3;try{result3=await search(request2)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="INVALID_PATTERN"||request2.literal)throw error2;effectivePattern=recoverPattern(request2.pattern),patternKind="sanitized";try{result3=await search({...request2,pattern:effectivePattern})}catch(retryError){if(!(retryError instanceof GrepEngineError)||retryError.code!=="INVALID_PATTERN")throw retryError;effectivePattern=request2.pattern,patternKind="literal",result3=await search({...request2,literal:!0})}}return{result:{...result3,effectivePattern,patternKind},engine:active}}var singleton;function resolveGrepEngine(options={}){let useSingleton=Object.keys(options).length===0;if(useSingleton&&singleton)return singleton;let promise=selectEngine(options);return useSingleton&&(singleton=promise),promise}async function selectEngine(options){let env=options.env??process.env,requested=env.SENPI_GREP_ENGINE??"auto";if(requested!=="auto"&&requested!=="rg"&&requested!=="native")throw new GrepEngineError("ENGINE_UNAVAILABLE",`Unknown SENPI_GREP_ENGINE value: ${requested}`);if(requested==="rg")return loadRgEngine();if(requested==="native")return loadNativeEngine(options,env);try{return await loadNativeEngine(options,env)}catch(error2){if(!(error2 instanceof GrepEngineError)||error2.code!=="ENGINE_UNAVAILABLE")throw error2;return console.warn(`[grep] native engine unavailable; falling back to rg: ${error2.message}`),loadRgEngine()}}async function loadRgEngine(){return(await import("./rg-engine-G2YTYL2T.js")).createRgEngine()}async function loadNativeEngine(options,env){let{loadNativeGrep}=await import("./native-loader-WM7NDPEO.js"),loaded2=loadNativeGrep({...options,env});if(!loaded2.native)throw new GrepEngineError("ENGINE_UNAVAILABLE",`${loaded2.diagnostic.message} ${loaded2.diagnostic.cause}`);let{createNativeEngine}=await import("./native-engine-PDPNVTZX.js");return createNativeEngine(loaded2.native)}var strings2=()=>typebox_exports.Optional(typebox_exports.Union([typebox_exports.String(),typebox_exports.Array(typebox_exports.String())])),grepSchema=typebox_exports.Object({pattern:typebox_exports.String(),path:strings2(),glob:strings2(),type:typebox_exports.Optional(typebox_exports.String()),ignoreCase:typebox_exports.Optional(typebox_exports.Boolean()),literal:typebox_exports.Optional(typebox_exports.Boolean()),multiline:typebox_exports.Optional(typebox_exports.Boolean()),context:typebox_exports.Optional(typebox_exports.Number()),before:typebox_exports.Optional(typebox_exports.Number()),after:typebox_exports.Optional(typebox_exports.Number()),mode:typebox_exports.Optional(typebox_exports.Union([typebox_exports.Literal("content"),typebox_exports.Literal("count"),typebox_exports.Literal("files")])),limit:typebox_exports.Optional(typebox_exports.Number()),skip:typebox_exports.Optional(typebox_exports.Number()),timeoutMs:typebox_exports.Optional(typebox_exports.Number()),hidden:typebox_exports.Optional(typebox_exports.Boolean()),gitignore:typebox_exports.Optional(typebox_exports.Boolean())}),grepToolSystemPromptContribution={snippet:"Search file contents (regex/literal) across paths with structured results; respects .gitignore",guidelines:["Use tool.grep for content search instead of rg/grep in a shell; paginate with skip and narrow with glob/path when a page is full"]};async function pathStat(path13){try{return await stat9(path13)}catch(error2){if(error2.code==="ENOENT")return;throw error2}}function createGrepToolDefinition(cwd,options){if(options&&"operations"in options)throw new TypeError("GrepToolOptions.operations is deprecated and no longer supported; removed next release");return{name:"grep",label:"grep",exposure:"eval",description:"Search file contents with tool.grep({ pattern, path }) inside eval. Supports regex/literal patterns, file pages with skip, context, count/files modes, and structured results. Respects .gitignore.",promptSnippet:grepToolSystemPromptContribution.snippet,promptGuidelines:grepToolSystemPromptContribution.guidelines,parameters:grepSchema,async execute(_id,input,signal,_update,ctx){let started=Date.now();if(!input.pattern)throw new Error("Pattern must not be empty");let requested=input.path===void 0?["."]:Array.isArray(input.path)?input.path:[input.path];if(!requested.length||requested.some(p=>typeof p!="string"||!p.length))throw new Error("path must be a non-empty string or array of non-empty strings");let limit=input.limit??100;if(!Number.isInteger(input.skip??0)||(input.skip??0)<0)throw new Error("skip must be a non-negative integer");if(!Number.isInteger(limit)||limit<=0)throw new Error("limit must be a positive integer");let workingCwd=ctx?.cwd||cwd,paths=[],missingPaths=[],lineStart,lineEnd,singleFile=!1;for(let raw of requested){let path13=resolveToCwd(raw,workingCwd),info=await pathStat(path13);if(!info){let selector=/^(.*):L(\d+)-L?(\d+)$/.exec(path13);if(selector){let prefix=await pathStat(selector[1]);if(prefix?.isFile()){if(requested.length!==1||+selector[2]<1||+selector[3]<+selector[2])throw new Error("Invalid line selector");path13=selector[1],info=prefix,lineStart=+selector[2],lineEnd=+selector[3]}}}let canonicalPath2=await canonicalizeFilesystemPath(path13);if(options?.filesystemPolicy){let decision=await options.filesystemPolicy({operation:"enumerate",canonicalPath:canonicalPath2,toolName:"grep"});if(!decision.allow)throw new Error(decision.reason)}if(!info){missingPaths.push(path13);continue}paths.push(path13),singleFile=info.isFile()}if(!paths.length)throw new Error(`Path not found: ${missingPaths.join(", ")}`);singleFile=paths.length===1&&singleFile;let skip=singleFile?0:input.skip??0,mode=input.mode??"content",pageSize=Math.min(20,limit),cap=singleFile?200:20,before=input.before??input.context??0,after=input.after??input.context??0,request2={pattern:input.pattern,paths,cwd:workingCwd,glob:input.glob===void 0?void 0:Array.isArray(input.glob)?input.glob:[input.glob],type:input.type,ignoreCase:input.ignoreCase,literal:input.literal,multiline:input.multiline??(input.pattern.includes(`
2401
2401
  `)||input.pattern.includes("\\n")),hidden:input.hidden,gitignore:input.gitignore,contextBefore:before,contextAfter:after,maxColumns:500,timeoutMs:input.timeoutMs??3e4,lineStart,lineEnd,mode},engine=await resolveGrepEngine(),preselection,selected=[],more=!1;if(!singleFile){let first=await searchPattern(engine,{...request2,mode:"files",maxCount:skip+pageSize+1},signal);engine=first.engine,preselection=first.result,selected=first.result.fileCounts.slice(skip,skip+pageSize).map(file=>file.path),more=first.result.fileCounts.length>skip+selected.length}let result3;if(!singleFile&&!selected.length)result3=preselection;else if(mode==="files"&&preselection)result3={...preselection,fileCounts:preselection.fileCounts.slice(skip,skip+pageSize)};else{let response=await searchPattern(engine,{...request2,paths:singleFile?paths:selected.map(path13=>resolve33(workingCwd,path13)),maxCountPerFile:mode==="content"?cap+1:void 0,timeoutMs:Math.max(0,(input.timeoutMs??3e4)-(Date.now()-started))},signal);engine=response.engine,result3=response.result}let matches=[],fileMatches=[],perFileLimitReached=!1,totalLimitReached=!1;if(mode==="content"){let groups=new Map;for(let row of result3.matches)if(!row.isContext){let rows=groups.get(row.path)??[];rows.push(row),groups.set(row.path,rows)}let admitted=new Set;for(let round=0;round<cap&&admitted.size<limit;round++)for(let rows of groups.values())rows[round]&&admitted.size<limit&&admitted.add(rows[round]);perFileLimitReached=[...groups.values()].some(rows=>rows.length>cap),totalLimitReached=[...groups.values()].reduce((n,rows)=>n+Math.min(cap,rows.length),0)>admitted.size,matches=result3.matches.filter(row=>admitted.has(row)||row.isContext&&[...admitted].some(match=>match.path===row.path&&row.line>=match.line-before&&row.line<=match.line+after));let bytes=0;matches=matches.filter(row=>(bytes+=Buffer.byteLength(`${row.path}
2402
2402
  ${row.line}: ${row.text}
2403
2403
  `),bytes>49152?(totalLimitReached=!0,!1):!0));let counts=new Map;for(let row of matches)row.isContext||counts.set(row.path,(counts.get(row.path)??0)+1);matches=matches.filter(row=>counts.has(row.path)),fileMatches=[...counts].map(([path13,count])=>({path:path13,count}))}else(singleFile||selected.length)&&(fileMatches=result3.fileCounts.map(({path:path13,count})=>({path:path13,count})));let{matches:_matches,fileCounts:_fileCounts,...scan2}=preselection??result3;scan2.missingPaths=missingPaths,scan2.elapsedMs=Date.now()-started,scan2.effectivePattern=result3.effectivePattern,scan2.patternKind=result3.patternKind,scan2.regexEngine=result3.regexEngine,scan2.timedOut||=result3.timedOut,result3.timedOut&&preselection&&(scan2.warnings=[...scan2.warnings,...result3.warnings]);let partial=scan2.timedOut||scan2.prefixSearched>0||scan2.skippedOversized>0,details={version:1,engine:engine.name,status:partial?"partial":fileMatches.length?"ok":skip?"pageEnd":"noMatch",cwd:workingCwd,paths,matches,fileMatches,matchCount:mode==="files"?null:fileMatches.reduce((n,file)=>n+(file.count??0),0),fileCount:fileMatches.length,skip,nextSkip:more?skip+selected.length:null,fileLimitReached:more,perFileLimitReached,totalLimitReached,scan:scan2,linesTruncated:matches.some(row=>row.truncated)};return{content:formatGrepContent(details),details}},...grepRenderers}}function createGrepTool(cwd,options){return wrapToolDefinition(createGrepToolDefinition(cwd,options))}import{readdir as fsReaddir,stat as fsStat2}from"node:fs/promises";import nodePath from"path";function formatLsCall(args,theme2,cwd){let limit=args?.limit,pathDisplay=renderToolPath(str2(args?.path),theme2,cwd,{emptyFallback:"."}),text2=`${theme2.fg("toolTitle",theme2.bold("ls"))} ${pathDisplay}`;return limit!==void 0&&(text2+=theme2.fg("toolOutput",` (limit ${limit})`)),text2}function formatLsResult(result3,options,theme2,showImages){let output=getTextOutput(result3,showImages).trim(),text2="";if(output){let lines=output.split(`
@@ -2448,7 +2448,7 @@ $tree`;async function windowsBunChromeTree(){let stdout=await run("powershell.ex
2448
2448
  pi auth print-bearer-token [--provider <provider>] [--model <model>] [--min-expiry <duration>]
2449
2449
  pi auth check [--provider <provider>] [--model <model>] [--json] [--credentials] [--no-refresh]
2450
2450
 
2451
- Auth commands require at least one of --provider or --model. Checks refresh expired OAuth credentials by default; --no-refresh prevents this. --credentials emits the credential, or includes it in JSON output.`)}function parseAuthCommand(args){if(args[0]!=="auth")return;let kind=args[1]==="check"?"check":args[1]==="print-api-key"?"api_key":args[1]==="print-bearer-token"?"bearer_token":void 0;if(!kind)throw new AuthCommandError(`Unknown auth command "${args[1]??""}". Use "${APP_NAME} auth print-api-key", "${APP_NAME} auth print-bearer-token", or "${APP_NAME} auth check".`);let commandArgs=[],json=!1,credentials=!1,noRefresh=!1,minExpiryMs;for(let index=2;index<args.length;index++){let arg=args[index];if(arg==="--min-expiry"){if(kind!=="bearer_token")throw new AuthCommandError("--min-expiry is only supported by print-bearer-token");let value2=args[++index],match=value2?/^(\d+)(ms|s|m|h)$/iu.exec(value2):void 0;if(!match)throw new AuthCommandError("--min-expiry must use a duration such as 30m or 1h");let amount=Number(match[1]),unit=match[2];minExpiryMs=amount*(unit==="ms"?1:unit==="s"?1e3:unit==="m"?6e4:36e5);continue}if(arg==="--json"||arg==="--credentials"||arg==="--no-refresh"){if(kind!=="check")throw new AuthCommandError(`${arg} is only supported by auth check`);arg==="--json"?json=!0:arg==="--credentials"?credentials=!0:noRefresh=!0;continue}commandArgs.push(arg)}return minExpiryMs===void 0?{kind,args:commandArgs,json,credentials,noRefresh}:{kind,args:commandArgs,json,credentials,noRefresh,minExpiryMs}}function validateAuthCommandArgs(args,kind){let provider=args.provider?.trim()||void 0,model=args.model?.trim()||void 0;if(args.unknownFlags.size>0){let option=args.unknownFlags.keys().next().value;throw new AuthCommandError(`Unknown option --${option} for "${getAuthCommandName(kind)}".`)}if(args.apiKey!==void 0||args.messages.length>0||args.fileArgs.length>0)throw new AuthCommandError("Auth commands only accept --provider and --model");if(kind==="check"){if(!provider&&!model)throw new AuthCommandError("Auth checks require --provider <provider> or --model <model>");return{provider,model}}if(!provider&&!model)throw new AuthCommandError("Credential printing requires --provider <provider> or --model <model>");return{provider,model}}function getAuthCredential(auth){if(auth?.auth.apiKey)return auth.auth.apiKey;let authorization=Object.entries(auth?.auth.headers??{}).find(([name])=>name.toLowerCase()==="authorization")?.[1];return typeof authorization=="string"?/^Bearer\s+(.+)$/iu.exec(authorization)?.[1]:void 0}async function checkProviderAuth(args,modelRuntime,options={refresh:!1}){let{provider:cliProvider,model:cliModel}=validateAuthCommandArgs(args,"check"),provider=cliProvider;if(cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error||!resolved.model)throw new AuthCommandError(resolved.error??`Unable to resolve model "${cliModel}"`);provider=resolved.model.provider}if(!provider)throw new AuthCommandError("Unable to resolve an auth provider");if(modelRuntime.getError())return{status:"invalid",provider,reason:"invalid_state"};if(!modelRuntime.getProvider(provider))return{status:"not_ready",provider,reason:"provider_not_found"};try{let auth=await modelRuntime.checkAuth(provider);return auth?options.refresh&&!await modelRuntime.getAuth(provider)?{status:"not_ready",provider,reason:"credentials_not_configured"}:{status:"ready",provider,authType:auth.type}:{status:"not_ready",provider,reason:"credentials_not_configured"}}catch{return{status:"invalid",provider,reason:"invalid_state"}}}async function getProviderCredential(providerId,modelRuntime,credentials,options){let credential=await credentials.read(providerId);return!options.refresh&&credential?.type==="oauth"?credential.access:getAuthCredential(await modelRuntime.getAuth(providerId))}async function createAuthCheckModelRuntime(credentials){return ModelRuntime.create({credentials,modelsStore:new InMemoryCodingAgentModelsStore,allowModelNetwork:!1,refreshOnCreate:!1})}import{existsSync as existsSync33}from"node:fs";import{readdir as readdir3}from"node:fs/promises";import{join as join66}from"node:path";function isMoved(session,cwd,current){return!session.cwd||resolvePath(session.cwd)===cwd||existsSync33(session.cwd)?!1:compareRepositoryIdentities(session.repositoryIdentity,current)==="same"}function newestFirst(a,b){return b.modified.getTime()-a.modified.getTime()}async function recordedCwd(dir){let names=(await readdir3(dir)).filter(name=>name.endsWith(".jsonl"));for(let name of names){let firstLine2;try{await readFileLines(join66(dir,name),line=>(firstLine2=line,!1));let header2=JSON.parse(firstLine2??"");if(typeof header2=="object"&&header2!==null&&"cwd"in header2&&typeof header2.cwd=="string")return header2.cwd}catch(error2){if(!(error2 instanceof Error))throw error2}}}async function sessionsAtVanishedPaths(cwd){let root=getSessionsDir();if(!existsSync33(root))return[];let own=normalizePath(getDefaultSessionDir(cwd)),sessions2=[];for(let entry of await readdir3(root,{withFileTypes:!0})){if(!entry.isDirectory())continue;let dir=join66(root,entry.name);if(normalizePath(dir)===own)continue;let recorded=await recordedCwd(dir);recorded===void 0||existsSync33(recorded)||sessions2.push(...await listSessionsFromDir(dir))}return sessions2}async function listMovedSessions(cwd,options={}){let here=resolvePath(cwd),current=await(options.readIdentity??readRepositoryIdentity)(here);return current===void 0?[]:(options.sessionDir?await listSessionsFromDir(normalizePath(options.sessionDir)):await sessionsAtVanishedPaths(here)).filter(session=>isMoved(session,here,current)).map(session=>({...session,moved:!0})).sort(newestFirst)}async function markMovedSessions(sessions2,cwd,options={}){let here=resolvePath(cwd),current=await(options.readIdentity??readRepositoryIdentity)(here);return current===void 0?[...sessions2]:sessions2.map(session=>isMoved(session,here,current)?{...session,moved:!0}:session)}async function withMovedSessions(local,cwd,options={}){let[own,moved]=await Promise.all([local,listMovedSessions(cwd,options)]);return[...own,...moved].sort(newestFirst)}var FORK_PROMPT="Fork this session into current directory?",REBIND_PROMPT="Move this session here and continue it?";async function chooseCrossProjectAction(choice){let{sessionArg,sessionCwd,cwd,match}=choice,rebindHint=`If this directory is the same repository moved from ${sessionCwd}, use --rebind '${sessionArg}' to move the session here.`;return choice.interactive?(choice.out(source_default.yellow(`Session found in different project: ${sessionCwd}`)),match==="same"?await confirmSameRepositoryRebind(choice)?"rebind":"abort":(match==="unknown"&&choice.out(source_default.dim(rebindHint)),await choice.confirm(FORK_PROMPT)?"fork":"abort")):(choice.err(source_default.red(`Session found in different project: ${sessionCwd}`)),match==="same"?(choice.err(source_default.red(`${cwd} is the same git repository. Cannot confirm without an interactive session. Use --rebind '${sessionArg}' to move the session here, or --fork '${sessionArg}' to copy it into a new session.`)),"fail"):(choice.err(source_default.red(`Cannot confirm forking without an interactive session. Use --fork '${sessionArg}' to fork it into the current directory, or re-run interactively from ${sessionCwd}.`)),match==="unknown"&&choice.err(source_default.red(rebindHint)),"fail"))}async function confirmSameRepositoryRebind(choice){return choice.out(source_default.yellow(`This directory is the same git repository: ${choice.cwd}`)),choice.out(source_default.dim(`To copy it into a new session instead, use --fork '${choice.sessionArg}'.`)),choice.confirm(REBIND_PROMPT)}async function movedSessionToContinue(choice){let[newest]=await listMovedSessions(choice.cwd,choice);if(newest===void 0)return;if(!choice.interactive){choice.err(source_default.yellow(`A session of this repository was recorded at ${newest.cwd} before it moved. Use --rebind '${newest.id}' to continue it here.`));return}return choice.out(source_default.yellow(`Session found in different project: ${newest.cwd}`)),await confirmSameRepositoryRebind({sessionArg:newest.id,cwd:choice.cwd,confirm:choice.confirm,out:choice.out})?newest.path:void 0}var DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS=30*6e4;async function resolveCredentialForPrint(args,modelRuntime,kind,minExpiryMs,signal){let{provider:cliProvider,model:cliModel}=validateAuthCommandArgs(args,kind),credentialTypes=new Map((await modelRuntime.listCredentials({signal})).map(credential=>[credential.providerId,credential.type])),providers=[];if(cliProvider){let provider=modelRuntime.getProvider(cliProvider);if(!provider)throw new AuthCommandError(`Unknown provider "${cliProvider}". Use --list-models to see available providers.`);if(cliModel){let resolved=resolveCliModel({cliProvider:provider.id,cliModel,modelRuntime});if(resolved.error||!resolved.model)throw new AuthCommandError(resolved.error??"Unable to resolve the requested provider/model");providers.push({id:provider.id,model:resolved.model})}else providers.push({id:provider.id})}else{for(let provider of modelRuntime.getProviders()){if(!credentialTypes.has(provider.id))continue;let resolved=resolveCliModel({cliProvider:provider.id,cliModel,modelRuntime});resolved.model&&!resolved.error&&!resolved.warning?.includes("Using custom model id")&&providers.push({id:provider.id,model:resolved.model})}if(providers.length===0)throw new AuthCommandError(`Model "${cliModel}" not found. Use --list-models to see available models.`)}let credentials=[];for(let provider of providers){let type2=credentialTypes.get(provider.id);if(kind==="api_key"&&type2==="oauth"||kind==="bearer_token"&&type2!=="oauth")continue;let authOptions={...kind==="bearer_token"?{minOAuthValidityMs:minExpiryMs??DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS}:{},signal},auth=provider.model?await modelRuntime.getAuth(provider.model,authOptions):await modelRuntime.getAuth(provider.id,authOptions),value2=getAuthCredential(auth);value2&&credentials.push({providerId:provider.id,value:value2})}if(credentials.length===1)return credentials[0].value;if(credentials.length===0){let providerId=providers[0]?.id,type2=providerId?credentialTypes.get(providerId):void 0;throw cliProvider&&kind==="api_key"&&type2==="oauth"?new AuthCommandError(`Provider "${providerId}" is configured with OAuth, not an API key`):cliProvider&&kind==="bearer_token"&&type2!=="oauth"?new AuthCommandError(`Provider "${providerId}" is not configured with an OAuth bearer token`):new AuthCommandError(`No usable ${kind==="api_key"?"API key":"OAuth bearer token"} is configured`)}throw new AuthCommandError(`Multiple configured providers matched (${credentials.map(({providerId})=>providerId).join(", ")}). Specify --provider.`)}var PACKAGE_COMMAND_ARGV={install:!0,remove:!0,update:!0,list:!0},PACKAGE_COMMAND_ALIAS="uninstall",CONFIG_COMMAND_ARGV="config",APP_SERVER_COMMAND_ARGV="app-server",HOST_COMMAND_ARGV="host",SCHEDULE_COMMAND_ARGV="schedule";function isPackageCommandArgv(args){let command=args[0]??"";return Object.hasOwn(PACKAGE_COMMAND_ARGV,command)||command===PACKAGE_COMMAND_ALIAS}async function dispatchPackageCommand(args,runtimeOptions={}){if(!isPackageCommandArgv(args))return!1;let{handlePackageCommand}=await import("./package-manager-cli-RQ2NJAJ3.js");return await handlePackageCommand(args,runtimeOptions)}async function dispatchConfigCommand(args,runtimeOptions={}){if(args[0]!==CONFIG_COMMAND_ARGV)return!1;let{handleConfigCommand}=await import("./package-manager-cli-RQ2NJAJ3.js");return await handleConfigCommand(args,runtimeOptions)}async function dispatchAppServerCommand(args){if(args[0]!==APP_SERVER_COMMAND_ARGV)return!1;let{handleAppServerCommand}=await import("./app-server-command-ZC6A4C3L.js");return await handleAppServerCommand(args)}async function dispatchHostCommand(args){if(args[0]!==HOST_COMMAND_ARGV)return;let{runHostCommand:runHostCommand2}=await import("./host-command-BU6XSX4H.js");return await runHostCommand2(args.slice(1))}async function dispatchScheduleCommand(args){if(args[0]!==SCHEDULE_COMMAND_ARGV)return;let{runScheduleCommand}=await import("./schedule-command-DXC3ECXT.js");return await runScheduleCommand(args.slice(1))}import{access as access5,readFile as readFile19,stat as stat10}from"node:fs/promises";import{resolve as resolve35}from"path";async function processFileArguments(fileArgs,options){let autoResizeImages=options?.autoResizeImages??!0,text2="",images=[];for(let fileArg of fileArgs){let absolutePath=resolve35(resolveReadPath(fileArg,process.cwd()));try{await access5(absolutePath)}catch{console.error(source_default.red(`Error: File not found: ${absolutePath}`)),process.exit(1)}if((await stat10(absolutePath)).size===0)continue;let mimeType=await detectSupportedImageMimeTypeFromFile(absolutePath);if(mimeType){let content=await readFile19(absolutePath),processed=await processImage(content,mimeType,{autoResizeImages});if(!processed.ok){text2+=`<file name="${absolutePath}">${processed.message}</file>
2451
+ Auth commands require at least one of --provider or --model. Checks refresh expired OAuth credentials by default; --no-refresh prevents this. --credentials emits the credential, or includes it in JSON output.`)}function parseAuthCommand(args){if(args[0]!=="auth")return;let kind=args[1]==="check"?"check":args[1]==="print-api-key"?"api_key":args[1]==="print-bearer-token"?"bearer_token":void 0;if(!kind)throw new AuthCommandError(`Unknown auth command "${args[1]??""}". Use "${APP_NAME} auth print-api-key", "${APP_NAME} auth print-bearer-token", or "${APP_NAME} auth check".`);let commandArgs=[],json=!1,credentials=!1,noRefresh=!1,minExpiryMs;for(let index=2;index<args.length;index++){let arg=args[index];if(arg==="--min-expiry"){if(kind!=="bearer_token")throw new AuthCommandError("--min-expiry is only supported by print-bearer-token");let value2=args[++index],match=value2?/^(\d+)(ms|s|m|h)$/iu.exec(value2):void 0;if(!match)throw new AuthCommandError("--min-expiry must use a duration such as 30m or 1h");let amount=Number(match[1]),unit=match[2];minExpiryMs=amount*(unit==="ms"?1:unit==="s"?1e3:unit==="m"?6e4:36e5);continue}if(arg==="--json"||arg==="--credentials"||arg==="--no-refresh"){if(kind!=="check")throw new AuthCommandError(`${arg} is only supported by auth check`);arg==="--json"?json=!0:arg==="--credentials"?credentials=!0:noRefresh=!0;continue}commandArgs.push(arg)}return minExpiryMs===void 0?{kind,args:commandArgs,json,credentials,noRefresh}:{kind,args:commandArgs,json,credentials,noRefresh,minExpiryMs}}function validateAuthCommandArgs(args,kind){let provider=args.provider?.trim()||void 0,model=args.model?.trim()||void 0;if(args.unknownFlags.size>0){let option=args.unknownFlags.keys().next().value;throw new AuthCommandError(`Unknown option --${option} for "${getAuthCommandName(kind)}".`)}if(args.apiKey!==void 0||args.messages.length>0||args.fileArgs.length>0)throw new AuthCommandError("Auth commands only accept --provider and --model");if(kind==="check"){if(!provider&&!model)throw new AuthCommandError("Auth checks require --provider <provider> or --model <model>");return{provider,model}}if(!provider&&!model)throw new AuthCommandError("Credential printing requires --provider <provider> or --model <model>");return{provider,model}}function getAuthCredential(auth){if(auth?.auth.apiKey)return auth.auth.apiKey;let authorization=Object.entries(auth?.auth.headers??{}).find(([name])=>name.toLowerCase()==="authorization")?.[1];return typeof authorization=="string"?/^Bearer\s+(.+)$/iu.exec(authorization)?.[1]:void 0}async function checkProviderAuth(args,modelRuntime,options={refresh:!1}){let{provider:cliProvider,model:cliModel}=validateAuthCommandArgs(args,"check"),provider=cliProvider;if(cliModel){let resolved=resolveCliModel({cliProvider,cliModel,modelRuntime});if(resolved.error||!resolved.model)throw new AuthCommandError(resolved.error??`Unable to resolve model "${cliModel}"`);provider=resolved.model.provider}if(!provider)throw new AuthCommandError("Unable to resolve an auth provider");if(modelRuntime.getError())return{status:"invalid",provider,reason:"invalid_state"};if(!modelRuntime.getProvider(provider))return{status:"not_ready",provider,reason:"provider_not_found"};try{let auth=await modelRuntime.checkAuth(provider);return auth?options.refresh&&!await modelRuntime.getAuth(provider)?{status:"not_ready",provider,reason:"credentials_not_configured"}:{status:"ready",provider,authType:auth.type}:{status:"not_ready",provider,reason:"credentials_not_configured"}}catch{return{status:"invalid",provider,reason:"invalid_state"}}}async function getProviderCredential(providerId,modelRuntime,credentials,options){let credential=await credentials.read(providerId);return!options.refresh&&credential?.type==="oauth"?credential.access:getAuthCredential(await modelRuntime.getAuth(providerId))}async function createAuthCheckModelRuntime(credentials){return ModelRuntime.create({credentials,modelsStore:new InMemoryCodingAgentModelsStore,allowModelNetwork:!1,refreshOnCreate:!1})}import{existsSync as existsSync33}from"node:fs";import{readdir as readdir3}from"node:fs/promises";import{join as join66}from"node:path";function isMoved(session,cwd,current){return!session.cwd||resolvePath(session.cwd)===cwd||existsSync33(session.cwd)?!1:compareRepositoryIdentities(session.repositoryIdentity,current)==="same"}function newestFirst(a,b){return b.modified.getTime()-a.modified.getTime()}async function recordedCwd(dir){let names=(await readdir3(dir)).filter(name=>name.endsWith(".jsonl"));for(let name of names){let firstLine2;try{await readFileLines(join66(dir,name),line=>(firstLine2=line,!1));let header2=JSON.parse(firstLine2??"");if(typeof header2=="object"&&header2!==null&&"cwd"in header2&&typeof header2.cwd=="string")return header2.cwd}catch(error2){if(!(error2 instanceof Error))throw error2}}}async function sessionsAtVanishedPaths(cwd){let root=getSessionsDir();if(!existsSync33(root))return[];let own=normalizePath(getDefaultSessionDir(cwd)),sessions2=[];for(let entry of await readdir3(root,{withFileTypes:!0})){if(!entry.isDirectory())continue;let dir=join66(root,entry.name);if(normalizePath(dir)===own)continue;let recorded=await recordedCwd(dir);recorded===void 0||existsSync33(recorded)||sessions2.push(...await listSessionsFromDir(dir))}return sessions2}async function listMovedSessions(cwd,options={}){let here=resolvePath(cwd),current=await(options.readIdentity??readRepositoryIdentity)(here);return current===void 0?[]:(options.sessionDir?await listSessionsFromDir(normalizePath(options.sessionDir)):await sessionsAtVanishedPaths(here)).filter(session=>isMoved(session,here,current)).map(session=>({...session,moved:!0})).sort(newestFirst)}async function markMovedSessions(sessions2,cwd,options={}){let here=resolvePath(cwd),current=await(options.readIdentity??readRepositoryIdentity)(here);return current===void 0?[...sessions2]:sessions2.map(session=>isMoved(session,here,current)?{...session,moved:!0}:session)}async function withMovedSessions(local,cwd,options={}){let[own,moved]=await Promise.all([local,listMovedSessions(cwd,options)]);return[...own,...moved].sort(newestFirst)}var FORK_PROMPT="Fork this session into current directory?",REBIND_PROMPT="Move this session here and continue it?";async function chooseCrossProjectAction(choice){let{sessionArg,sessionCwd,cwd,match}=choice,rebindHint=`If this directory is the same repository moved from ${sessionCwd}, use --rebind '${sessionArg}' to move the session here.`;return choice.interactive?(choice.out(source_default.yellow(`Session found in different project: ${sessionCwd}`)),match==="same"?await confirmSameRepositoryRebind(choice)?"rebind":"abort":(match==="unknown"&&choice.out(source_default.dim(rebindHint)),await choice.confirm(FORK_PROMPT)?"fork":"abort")):(choice.err(source_default.red(`Session found in different project: ${sessionCwd}`)),match==="same"?(choice.err(source_default.red(`${cwd} is the same git repository. Cannot confirm without an interactive session. Use --rebind '${sessionArg}' to move the session here, or --fork '${sessionArg}' to copy it into a new session.`)),"fail"):(choice.err(source_default.red(`Cannot confirm forking without an interactive session. Use --fork '${sessionArg}' to fork it into the current directory, or re-run interactively from ${sessionCwd}.`)),match==="unknown"&&choice.err(source_default.red(rebindHint)),"fail"))}async function confirmSameRepositoryRebind(choice){return choice.out(source_default.yellow(`This directory is the same git repository: ${choice.cwd}`)),choice.out(source_default.dim(`To copy it into a new session instead, use --fork '${choice.sessionArg}'.`)),choice.confirm(REBIND_PROMPT)}async function movedSessionToContinue(choice){let[newest]=await listMovedSessions(choice.cwd,choice);if(newest===void 0)return;if(!choice.interactive){choice.err(source_default.yellow(`A session of this repository was recorded at ${newest.cwd} before it moved. Use --rebind '${newest.id}' to continue it here.`));return}return choice.out(source_default.yellow(`Session found in different project: ${newest.cwd}`)),await confirmSameRepositoryRebind({sessionArg:newest.id,cwd:choice.cwd,confirm:choice.confirm,out:choice.out})?newest.path:void 0}var DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS=30*6e4;async function resolveCredentialForPrint(args,modelRuntime,kind,minExpiryMs,signal){let{provider:cliProvider,model:cliModel}=validateAuthCommandArgs(args,kind),credentialTypes=new Map((await modelRuntime.listCredentials({signal})).map(credential=>[credential.providerId,credential.type])),providers=[];if(cliProvider){let provider=modelRuntime.getProvider(cliProvider);if(!provider)throw new AuthCommandError(`Unknown provider "${cliProvider}". Use --list-models to see available providers.`);if(cliModel){let resolved=resolveCliModel({cliProvider:provider.id,cliModel,modelRuntime});if(resolved.error||!resolved.model)throw new AuthCommandError(resolved.error??"Unable to resolve the requested provider/model");providers.push({id:provider.id,model:resolved.model})}else providers.push({id:provider.id})}else{for(let provider of modelRuntime.getProviders()){if(!credentialTypes.has(provider.id))continue;let resolved=resolveCliModel({cliProvider:provider.id,cliModel,modelRuntime});resolved.model&&!resolved.error&&!resolved.warning?.includes("Using custom model id")&&providers.push({id:provider.id,model:resolved.model})}if(providers.length===0)throw new AuthCommandError(`Model "${cliModel}" not found. Use --list-models to see available models.`)}let credentials=[];for(let provider of providers){let type2=credentialTypes.get(provider.id);if(kind==="api_key"&&type2==="oauth"||kind==="bearer_token"&&type2!=="oauth")continue;let authOptions={...kind==="bearer_token"?{minOAuthValidityMs:minExpiryMs??DEFAULT_BEARER_TOKEN_MIN_EXPIRY_MS}:{},signal},auth=provider.model?await modelRuntime.getAuth(provider.model,authOptions):await modelRuntime.getAuth(provider.id,authOptions),value2=getAuthCredential(auth);value2&&credentials.push({providerId:provider.id,value:value2})}if(credentials.length===1)return credentials[0].value;if(credentials.length===0){let providerId=providers[0]?.id,type2=providerId?credentialTypes.get(providerId):void 0;throw cliProvider&&kind==="api_key"&&type2==="oauth"?new AuthCommandError(`Provider "${providerId}" is configured with OAuth, not an API key`):cliProvider&&kind==="bearer_token"&&type2!=="oauth"?new AuthCommandError(`Provider "${providerId}" is not configured with an OAuth bearer token`):new AuthCommandError(`No usable ${kind==="api_key"?"API key":"OAuth bearer token"} is configured`)}throw new AuthCommandError(`Multiple configured providers matched (${credentials.map(({providerId})=>providerId).join(", ")}). Specify --provider.`)}var PACKAGE_COMMAND_ARGV={install:!0,remove:!0,update:!0,list:!0},PACKAGE_COMMAND_ALIAS="uninstall",CONFIG_COMMAND_ARGV="config",APP_SERVER_COMMAND_ARGV="app-server",HOST_COMMAND_ARGV="host",SCHEDULE_COMMAND_ARGV="schedule";function isPackageCommandArgv(args){let command=args[0]??"";return Object.hasOwn(PACKAGE_COMMAND_ARGV,command)||command===PACKAGE_COMMAND_ALIAS}async function dispatchPackageCommand(args,runtimeOptions={}){if(!isPackageCommandArgv(args))return!1;let{handlePackageCommand}=await import("./package-manager-cli-RAQRCH5L.js");return await handlePackageCommand(args,runtimeOptions)}async function dispatchConfigCommand(args,runtimeOptions={}){if(args[0]!==CONFIG_COMMAND_ARGV)return!1;let{handleConfigCommand}=await import("./package-manager-cli-RAQRCH5L.js");return await handleConfigCommand(args,runtimeOptions)}async function dispatchAppServerCommand(args){if(args[0]!==APP_SERVER_COMMAND_ARGV)return!1;let{handleAppServerCommand}=await import("./app-server-command-5DSRGKFG.js");return await handleAppServerCommand(args)}async function dispatchHostCommand(args){if(args[0]!==HOST_COMMAND_ARGV)return;let{runHostCommand:runHostCommand2}=await import("./host-command-ZTMADQIT.js");return await runHostCommand2(args.slice(1))}async function dispatchScheduleCommand(args){if(args[0]!==SCHEDULE_COMMAND_ARGV)return;let{runScheduleCommand}=await import("./schedule-command-EFQUSPN4.js");return await runScheduleCommand(args.slice(1))}import{access as access5,readFile as readFile19,stat as stat10}from"node:fs/promises";import{resolve as resolve35}from"path";async function processFileArguments(fileArgs,options){let autoResizeImages=options?.autoResizeImages??!0,text2="",images=[];for(let fileArg of fileArgs){let absolutePath=resolve35(resolveReadPath(fileArg,process.cwd()));try{await access5(absolutePath)}catch{console.error(source_default.red(`Error: File not found: ${absolutePath}`)),process.exit(1)}if((await stat10(absolutePath)).size===0)continue;let mimeType=await detectSupportedImageMimeTypeFromFile(absolutePath);if(mimeType){let content=await readFile19(absolutePath),processed=await processImage(content,mimeType,{autoResizeImages});if(!processed.ok){text2+=`<file name="${absolutePath}">${processed.message}</file>
2452
2452
  `;continue}let attachment={type:"image",mimeType:processed.mimeType,data:processed.data};images.push(attachment),processed.hints.length>0?text2+=`<file name="${absolutePath}">${processed.hints.join(`
2453
2453
  `)}</file>
2454
2454
  `:text2+=`<file name="${absolutePath}"></file>
@@ -2507,11 +2507,11 @@ Press any key to continue...`)),await new Promise(resolve42=>{process.stdin.setR
2507
2507
  `)}await rebindSession(),initialMessage&&await session.prompt(initialMessage,{images:initialImages,sessionTitlePrompt:!1});for(let message of messages)await session.prompt(message,{sessionTitlePrompt:!1});if(mode==="text"){let lastMessage=session.state.messages.findLast(message=>message.role==="assistant");if(lastMessage?.role==="assistant"){let assistantMsg=lastMessage;if(assistantMsg.stopReason==="error"||assistantMsg.stopReason==="aborted"){let described=describeProviderFailureForUser(assistantMsg.errorMessage);console.error(described??(stripTurnRetrySuppressionPrefix(assistantMsg.errorMessage??"")||`Request ${assistantMsg.stopReason}`)),exitCode=1}else for(let content of assistantMsg.content)content.type==="text"?writeRawStdout(`${content.text}
2508
2508
  `):content.type==="providerNative"&&(writeRawStdout(`${formatProviderNativeSummary(assistantMsg,content,!1)}
2509
2509
  `),writeRawStdout(`${formatProviderNativeBody(content,!1)}
2510
- `))}}return await session.waitForSettledSessionWork(),exitCode}catch(error2){return console.error(error2 instanceof Error?error2.message:String(error2)),1}finally{for(let cleanup of signalCleanupHandlers)cleanup();await disposeRuntime(),await flushRawStdout()}}import{readdirSync as readdirSync16,readFileSync as readFileSync43}from"node:fs";var P_PID=1,WNOHANG=1,WEXITED=4,WNOWAIT={darwin:32,linux:16777216},SI_PID_OFFSET={darwin:12,linux:16},MAX_TRACKED_CHILDREN=4096;function supportedPlatform(platform4){return platform4==="darwin"||platform4==="linux"?platform4:void 0}async function loadChildReaperSyscalls(platform4=process.platform){let supported=supportedPlatform(platform4);if(supported===void 0||typeof globalThis.Bun>"u")return;let{dlopen,FFIType,ptr}=await import("bun:ffi"),wait=dlopen(supported==="darwin"?"libSystem.B.dylib":"libc.so.6",{waitid:{args:[FFIType.i32,FFIType.u32,FFIType.ptr,FFIType.i32],returns:FFIType.i32},waitpid:{args:[FFIType.i32,FFIType.ptr,FFIType.i32],returns:FFIType.i32}}),info=new Uint8Array(512),infoView=new DataView(info.buffer),status=new Int32Array(1),peekOptions=WEXITED|WNOHANG|WNOWAIT[supported],siPidOffset=SI_PID_OFFSET[supported];return{listDirectChildren:supported==="darwin"?darwinChildren(dlopen,FFIType,ptr):linuxChildren,isWaitable(pid){return info.fill(0),wait.symbols.waitid(P_PID,pid,ptr(info),peekOptions)===0&&infoView.getInt32(siPidOffset,!0)===pid},reapExited(pid){if(pid<=0)throw new Error(`child reaper refuses to wait on pid ${pid}`);return wait.symbols.waitpid(pid,ptr(status),WNOHANG)===pid},describe:supported==="darwin"?darwinName(dlopen,FFIType,ptr):linuxName}}function darwinChildren(dlopen,FFIType,ptr){let libproc=dlopen("libSystem.B.dylib",{proc_listchildpids:{args:[FFIType.i32,FFIType.ptr,FFIType.i32],returns:FFIType.i32}}),pids=new Int32Array(MAX_TRACKED_CHILDREN);return()=>{let found=libproc.symbols.proc_listchildpids(process.pid,ptr(pids),pids.byteLength);return found<=0?[]:Array.from(pids.subarray(0,Math.min(found,pids.length)))}}function darwinName(dlopen,FFIType,ptr){let libproc=dlopen("libSystem.B.dylib",{proc_name:{args:[FFIType.i32,FFIType.ptr,FFIType.u32],returns:FFIType.i32}}),name=new Uint8Array(256),decoder=new TextDecoder;return pid=>{name.fill(0);let written=libproc.symbols.proc_name(pid,ptr(name),name.length);return written<=0?"":decoder.decode(name.subarray(0,written))}}function linuxChildren(){let children=[];for(let entry of readdirSync16("/proc")){let pid=Number(entry);if(!(!Number.isInteger(pid)||pid<=0)&&(parentOf(pid)===process.pid&&children.push(pid),children.length>=MAX_TRACKED_CHILDREN))break}return children}function linuxStat(pid){try{return readFileSync43(`/proc/${pid}/stat`,"utf8")}catch{return}}function parentOf(pid){let stat11=linuxStat(pid),tail=stat11?.slice(stat11.lastIndexOf(")")+2).split(" ");return tail===void 0?void 0:Number(tail[1])}function linuxName(pid){let stat11=linuxStat(pid),open7=stat11?.indexOf("(")??-1,close=stat11?.lastIndexOf(")")??-1;return stat11===void 0||open7===-1||close<=open7?"":stat11.slice(open7+1,close)}var CHILD_REAPER_ENV="SENPI_RPC_HOST_REAPER",CHILD_REAPER_MIN_WAITABLE_MS_ENV="SENPI_RPC_HOST_REAPER_MIN_WAITABLE_MS",MIN_WAITABLE_FLOOR_MS=5e3,DEFAULT_MIN_WAITABLE_MS=3e4,TICK_MS=1e3,WARN_INTERVAL_MS=5*6e4,WARN_AT_WAITING=10,TOP_NAMES=3;function resolveChildReaperConfig(env){let override=Number(env[CHILD_REAPER_MIN_WAITABLE_MS_ENV]);return{enabled:env[CHILD_REAPER_ENV]!=="0",tickMs:TICK_MS,minWaitableMs:Number.isFinite(override)&&override>0?clampWindow(override):DEFAULT_MIN_WAITABLE_MS}}function clampWindow(milliseconds){return Math.max(MIN_WAITABLE_FLOOR_MS,milliseconds)}function createChildReaper(options){let now2=options.now??Date.now,minWaitableMs=clampWindow(options.minWaitableMs??DEFAULT_MIN_WAITABLE_MS),tracked=new Map,lastWarnAt,report=(waiting,reaped)=>{options.log===void 0||reaped.length===0&&waiting.length<WARN_AT_WAITING||lastWarnAt!==void 0&&now2()-lastWarnAt<WARN_INTERVAL_MS||(lastWarnAt=now2(),options.log(`child reaper: reaped=${reaped.length} waiting=${waiting.length} top=${topNames(waiting,reaped)}`))};return{tick(){let children=options.syscalls.listDirectChildren(),present=new Set(children);for(let pid of[...tracked.keys()])present.has(pid)||tracked.delete(pid);let reaped=[];for(let pid of children){let child=tracked.get(pid)??{name:options.syscalls.describe(pid)||"unknown",waitableSince:void 0};if(tracked.set(pid,child),!options.syscalls.isWaitable(pid)){child.waitableSince=void 0;continue}if(child.waitableSince===void 0){child.waitableSince=now2();continue}now2()-child.waitableSince<minWaitableMs||options.syscalls.reapExited(pid)&&(tracked.delete(pid),reaped.push(child.name))}report(waitingNames(tracked),reaped)},get waitingPids(){return[...tracked].filter(([,child])=>child.waitableSince!==void 0).map(([pid])=>pid)}}}function waitingNames(tracked){return[...tracked.values()].filter(child=>child.waitableSince!==void 0).map(child=>child.name)}function topNames(waiting,reaped){let counts=new Map;for(let name of[...waiting,...reaped])counts.set(name,(counts.get(name)??0)+1);return[...counts].sort(([,left],[,right])=>right-left).slice(0,TOP_NAMES).map(([name,count])=>`${name} x${count}`).join(", ")}async function startHostChildReaper(log){let config=resolveChildReaperConfig(process.env);if(!config.enabled)return()=>{};let syscalls=await loadChildReaperSyscalls();if(syscalls===void 0)return log(`child reaper unavailable under ${runtimeName()}: children orphaned by a terminated worker thread stay as zombies until this host exits`),()=>{};let reaper=createChildReaper({syscalls,minWaitableMs:config.minWaitableMs,log}),timer=setInterval(()=>reaper.tick(),config.tickMs);return timer.unref(),()=>clearInterval(timer)}var orphanSyscalls;async function collectOrphanedChildren(pids){if(pids.length===0)return[];orphanSyscalls??=loadChildReaperSyscalls();let syscalls=await orphanSyscalls;return syscalls===void 0?[]:pids.filter(pid=>Number.isInteger(pid)&&pid>0&&syscalls.isWaitable(pid)&&syscalls.reapExited(pid))}function runtimeName(){return typeof globalThis.Bun>"u"?"Node":`Bun on ${process.platform}`}var INTERNAL_SUPERVISOR_ROUTE_FLAG="--internal-rpc-host-supervisor";async function dispatchInternalSupervisor(args){if(!args.includes(INTERNAL_SUPERVISOR_ROUTE_FLAG))return!1;let{findInternalSupervisorArgs,parseSupervisorArgs,runHostSupervisor}=await import("./host-lifecycle-22DRSTVI.js"),supervisorArgs=findInternalSupervisorArgs(args);if(!supervisorArgs)return!1;let launch=parseSupervisorArgs(supervisorArgs);return launch||(console.error("invalid internal RPC host supervisor arguments"),process.exit(2)),await runHostSupervisor(launch),!0}import{randomUUID as randomUUID11}from"node:crypto";import{copyFileSync as copyFileSync3,existsSync as existsSync42,mkdirSync as mkdirSync25,renameSync as renameSync19,rmSync as rmSync14}from"node:fs";import{basename as basename26,dirname as dirname44,join as join78,relative as relative18,resolve as resolve37,toNamespacedPath}from"node:path";var QUARANTINE_DIR_NAME=".pi-native-quarantine";function normalizePath3(path13){return toNamespacedPath(resolve37(path13))}function getQuarantineRoot(packageDir){let current=resolve37(packageDir);for(;;){if(basename26(current).toLowerCase()==="node_modules")return join78(current,QUARANTINE_DIR_NAME);let parent=dirname44(current);if(parent===current)return;current=parent}}function getLoadedSharedObjectsInPackageDir(packageDir){let sharedObjects=process.report.getReport().sharedObjects;if(!Array.isArray(sharedObjects))return[];let root=normalizePath3(packageDir).toLowerCase(),seen=new Set,loadedFiles=[];for(let value2 of sharedObjects){if(typeof value2!="string")continue;let filePath=normalizePath3(value2),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{rmSync14(quarantineRoot,{recursive:!0,force:!0})}catch{}}function quarantineWindowsNativeDependencies(packageDir){let resolvedPackageDir=normalizePath3(packageDir),quarantineRoot=getQuarantineRoot(resolvedPackageDir);if(!quarantineRoot)return;let loadedFiles=getLoadedSharedObjectsInPackageDir(resolvedPackageDir);if(loadedFiles.length===0)return;let quarantineRunDir=join78(quarantineRoot,`${Date.now()}-${process.pid}-${randomUUID11()}`);for(let loadedFile of loadedFiles){if(!existsSync42(loadedFile))continue;let quarantinePath=join78(quarantineRunDir,relative18(resolvedPackageDir,loadedFile));mkdirSync25(dirname44(quarantinePath),{recursive:!0}),renameSync19(loadedFile,quarantinePath),copyFileSync3(quarantinePath,loadedFile)}}var EXTENSION_LOAD_FAILURE_HINT=`Hint: Start without extensions using "${APP_NAME} -ne".`;async function readPipedStdin(){if(!process.stdin.isTTY)return new Promise(resolve42=>{let data="";process.stdin.setEncoding("utf8"),process.stdin.on("data",chunk=>{data+=chunk}),process.stdin.on("end",()=>{resolve42(data.trim()||void 0)}),process.stdin.resume()})}function collectAuthDiagnostics(authStorage,context){return authStorage.drainErrors().map(error2=>({type:"warning",message:`(${context}, auth storage) ${error2.message}`}))}function collectExtensionLoadDiagnostics(errors){return errors.map(({path:path13,error:error2})=>({type:"warning",message:`Failed to load extension "${path13}": ${error2}`}))}function reportDiagnostics(diagnostics){for(let diagnostic2 of diagnostics){let color=diagnostic2.type==="error"?source_default.red:diagnostic2.type==="warning"?source_default.yellow:source_default.dim,prefix=diagnostic2.type==="error"?"Error: ":diagnostic2.type==="warning"?"Warning: ":"";console.error(color(`${prefix}${diagnostic2.message}`))}}function isTruthyEnvFlag2(value2){return value2?value2==="1"||value2.toLowerCase()==="true"||value2.toLowerCase()==="yes":!1}function resolveAppMode(parsed,stdinIsTTY,stdoutIsTTY){return parsed.mode===void 0&&parsed.messages[0]==="app-server"?"app-server":parsed.mode==="rpc"?"rpc":parsed.mode==="json"?"json":parsed.print||!stdinIsTTY||!stdoutIsTTY?"print":"interactive"}function toPrintOutputMode(appMode){return appMode==="json"?"json":"text"}function toProjectTrustMode(appMode){return appMode==="app-server"?"print":appMode}function resolveAutoTitleSessions(appMode,parsed,hasContextMessages,clientCapabilities=parseClientCapabilities(envValue("RPC_CLIENT_CAPABILITIES")),sessionAutoTitle){return hasContextMessages?!1:sessionAutoTitle!==void 0?sessionAutoTitle:appMode==="interactive"||parsed.autoTitleSessions===!0||appMode==="rpc"&&clientCapabilities.includes(AUTO_TITLE_SESSIONS_CAPABILITY)}function isPlainRuntimeMetadataCommand(parsed){return!parsed.print&&parsed.mode===void 0&&(parsed.help===!0||parsed.listModels!==void 0||parsed.listTips===!0)}async function runAuthCommand(args){if(isAuthCommandHelp(args))return printAuthCommandHelp(),!0;let command;try{command=parseAuthCommand(args)}catch(error2){let message=error2 instanceof AuthCommandError?error2.message:"Failed to parse auth command";return console.error(source_default.red(`Error: ${message}`)),process.exitCode=1,!0}if(!command)return!1;let parsed=parseArgs(command.args);if(parsed.unknownFlags.size>0){let option=parsed.unknownFlags.keys().next().value;return console.error(source_default.red(`Unknown option --${option} for "${getAuthCommandName(command.kind)}".`)),console.error(source_default.dim(`Use "${APP_NAME} --help" or "${getAuthCommandUsage(command.kind)}".`)),process.exitCode=1,!0}try{if(parsed.diagnostics.length>0)throw new AuthCommandError(parsed.diagnostics.map(diagnostic2=>diagnostic2.message).join(`
2510
+ `))}}return await session.waitForSettledSessionWork(),exitCode}catch(error2){return console.error(error2 instanceof Error?error2.message:String(error2)),1}finally{for(let cleanup of signalCleanupHandlers)cleanup();await disposeRuntime(),await flushRawStdout()}}import{readdirSync as readdirSync16,readFileSync as readFileSync43}from"node:fs";var P_PID=1,WNOHANG=1,WEXITED=4,WNOWAIT={darwin:32,linux:16777216},SI_PID_OFFSET={darwin:12,linux:16},MAX_TRACKED_CHILDREN=4096;function supportedPlatform(platform4){return platform4==="darwin"||platform4==="linux"?platform4:void 0}async function loadChildReaperSyscalls(platform4=process.platform){let supported=supportedPlatform(platform4);if(supported===void 0||typeof globalThis.Bun>"u")return;let{dlopen,FFIType,ptr}=await import("bun:ffi"),wait=dlopen(supported==="darwin"?"libSystem.B.dylib":"libc.so.6",{waitid:{args:[FFIType.i32,FFIType.u32,FFIType.ptr,FFIType.i32],returns:FFIType.i32},waitpid:{args:[FFIType.i32,FFIType.ptr,FFIType.i32],returns:FFIType.i32}}),info=new Uint8Array(512),infoView=new DataView(info.buffer),status=new Int32Array(1),peekOptions=WEXITED|WNOHANG|WNOWAIT[supported],siPidOffset=SI_PID_OFFSET[supported];return{listDirectChildren:supported==="darwin"?darwinChildren(dlopen,FFIType,ptr):linuxChildren,isWaitable(pid){return info.fill(0),wait.symbols.waitid(P_PID,pid,ptr(info),peekOptions)===0&&infoView.getInt32(siPidOffset,!0)===pid},reapExited(pid){if(pid<=0)throw new Error(`child reaper refuses to wait on pid ${pid}`);return wait.symbols.waitpid(pid,ptr(status),WNOHANG)===pid},describe:supported==="darwin"?darwinName(dlopen,FFIType,ptr):linuxName}}function darwinChildren(dlopen,FFIType,ptr){let libproc=dlopen("libSystem.B.dylib",{proc_listchildpids:{args:[FFIType.i32,FFIType.ptr,FFIType.i32],returns:FFIType.i32}}),pids=new Int32Array(MAX_TRACKED_CHILDREN);return()=>{let found=libproc.symbols.proc_listchildpids(process.pid,ptr(pids),pids.byteLength);return found<=0?[]:Array.from(pids.subarray(0,Math.min(found,pids.length)))}}function darwinName(dlopen,FFIType,ptr){let libproc=dlopen("libSystem.B.dylib",{proc_name:{args:[FFIType.i32,FFIType.ptr,FFIType.u32],returns:FFIType.i32}}),name=new Uint8Array(256),decoder=new TextDecoder;return pid=>{name.fill(0);let written=libproc.symbols.proc_name(pid,ptr(name),name.length);return written<=0?"":decoder.decode(name.subarray(0,written))}}function linuxChildren(){let children=[];for(let entry of readdirSync16("/proc")){let pid=Number(entry);if(!(!Number.isInteger(pid)||pid<=0)&&(parentOf(pid)===process.pid&&children.push(pid),children.length>=MAX_TRACKED_CHILDREN))break}return children}function linuxStat(pid){try{return readFileSync43(`/proc/${pid}/stat`,"utf8")}catch{return}}function parentOf(pid){let stat11=linuxStat(pid),tail=stat11?.slice(stat11.lastIndexOf(")")+2).split(" ");return tail===void 0?void 0:Number(tail[1])}function linuxName(pid){let stat11=linuxStat(pid),open7=stat11?.indexOf("(")??-1,close=stat11?.lastIndexOf(")")??-1;return stat11===void 0||open7===-1||close<=open7?"":stat11.slice(open7+1,close)}var CHILD_REAPER_ENV="SENPI_RPC_HOST_REAPER",CHILD_REAPER_MIN_WAITABLE_MS_ENV="SENPI_RPC_HOST_REAPER_MIN_WAITABLE_MS",MIN_WAITABLE_FLOOR_MS=5e3,DEFAULT_MIN_WAITABLE_MS=3e4,TICK_MS=1e3,WARN_INTERVAL_MS=5*6e4,WARN_AT_WAITING=10,TOP_NAMES=3;function resolveChildReaperConfig(env){let override=Number(env[CHILD_REAPER_MIN_WAITABLE_MS_ENV]);return{enabled:env[CHILD_REAPER_ENV]!=="0",tickMs:TICK_MS,minWaitableMs:Number.isFinite(override)&&override>0?clampWindow(override):DEFAULT_MIN_WAITABLE_MS}}function clampWindow(milliseconds){return Math.max(MIN_WAITABLE_FLOOR_MS,milliseconds)}function createChildReaper(options){let now2=options.now??Date.now,minWaitableMs=clampWindow(options.minWaitableMs??DEFAULT_MIN_WAITABLE_MS),tracked=new Map,lastWarnAt,report=(waiting,reaped)=>{options.log===void 0||reaped.length===0&&waiting.length<WARN_AT_WAITING||lastWarnAt!==void 0&&now2()-lastWarnAt<WARN_INTERVAL_MS||(lastWarnAt=now2(),options.log(`child reaper: reaped=${reaped.length} waiting=${waiting.length} top=${topNames(waiting,reaped)}`))};return{tick(){let children=options.syscalls.listDirectChildren(),present=new Set(children);for(let pid of[...tracked.keys()])present.has(pid)||tracked.delete(pid);let reaped=[];for(let pid of children){let child=tracked.get(pid)??{name:options.syscalls.describe(pid)||"unknown",waitableSince:void 0};if(tracked.set(pid,child),!options.syscalls.isWaitable(pid)){child.waitableSince=void 0;continue}if(child.waitableSince===void 0){child.waitableSince=now2();continue}now2()-child.waitableSince<minWaitableMs||options.syscalls.reapExited(pid)&&(tracked.delete(pid),reaped.push(child.name))}report(waitingNames(tracked),reaped)},get waitingPids(){return[...tracked].filter(([,child])=>child.waitableSince!==void 0).map(([pid])=>pid)}}}function waitingNames(tracked){return[...tracked.values()].filter(child=>child.waitableSince!==void 0).map(child=>child.name)}function topNames(waiting,reaped){let counts=new Map;for(let name of[...waiting,...reaped])counts.set(name,(counts.get(name)??0)+1);return[...counts].sort(([,left],[,right])=>right-left).slice(0,TOP_NAMES).map(([name,count])=>`${name} x${count}`).join(", ")}async function startHostChildReaper(log){let config=resolveChildReaperConfig(process.env);if(!config.enabled)return()=>{};let syscalls=await loadChildReaperSyscalls();if(syscalls===void 0)return log(`child reaper unavailable under ${runtimeName()}: children orphaned by a terminated worker thread stay as zombies until this host exits`),()=>{};let reaper=createChildReaper({syscalls,minWaitableMs:config.minWaitableMs,log}),timer=setInterval(()=>reaper.tick(),config.tickMs);return timer.unref(),()=>clearInterval(timer)}var orphanSyscalls;async function collectOrphanedChildren(pids){if(pids.length===0)return[];orphanSyscalls??=loadChildReaperSyscalls();let syscalls=await orphanSyscalls;return syscalls===void 0?[]:pids.filter(pid=>Number.isInteger(pid)&&pid>0&&syscalls.isWaitable(pid)&&syscalls.reapExited(pid))}function runtimeName(){return typeof globalThis.Bun>"u"?"Node":`Bun on ${process.platform}`}var INTERNAL_SUPERVISOR_ROUTE_FLAG="--internal-rpc-host-supervisor";async function dispatchInternalSupervisor(args){if(!args.includes(INTERNAL_SUPERVISOR_ROUTE_FLAG))return!1;let{findInternalSupervisorArgs,parseSupervisorArgs,runHostSupervisor}=await import("./host-lifecycle-FTH7WAQN.js"),supervisorArgs=findInternalSupervisorArgs(args);if(!supervisorArgs)return!1;let launch=parseSupervisorArgs(supervisorArgs);return launch||(console.error("invalid internal RPC host supervisor arguments"),process.exit(2)),await runHostSupervisor(launch),!0}import{randomUUID as randomUUID11}from"node:crypto";import{copyFileSync as copyFileSync3,existsSync as existsSync42,mkdirSync as mkdirSync25,renameSync as renameSync19,rmSync as rmSync14}from"node:fs";import{basename as basename26,dirname as dirname44,join as join78,relative as relative18,resolve as resolve37,toNamespacedPath}from"node:path";var QUARANTINE_DIR_NAME=".pi-native-quarantine";function normalizePath3(path13){return toNamespacedPath(resolve37(path13))}function getQuarantineRoot(packageDir){let current=resolve37(packageDir);for(;;){if(basename26(current).toLowerCase()==="node_modules")return join78(current,QUARANTINE_DIR_NAME);let parent=dirname44(current);if(parent===current)return;current=parent}}function getLoadedSharedObjectsInPackageDir(packageDir){let sharedObjects=process.report.getReport().sharedObjects;if(!Array.isArray(sharedObjects))return[];let root=normalizePath3(packageDir).toLowerCase(),seen=new Set,loadedFiles=[];for(let value2 of sharedObjects){if(typeof value2!="string")continue;let filePath=normalizePath3(value2),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{rmSync14(quarantineRoot,{recursive:!0,force:!0})}catch{}}function quarantineWindowsNativeDependencies(packageDir){let resolvedPackageDir=normalizePath3(packageDir),quarantineRoot=getQuarantineRoot(resolvedPackageDir);if(!quarantineRoot)return;let loadedFiles=getLoadedSharedObjectsInPackageDir(resolvedPackageDir);if(loadedFiles.length===0)return;let quarantineRunDir=join78(quarantineRoot,`${Date.now()}-${process.pid}-${randomUUID11()}`);for(let loadedFile of loadedFiles){if(!existsSync42(loadedFile))continue;let quarantinePath=join78(quarantineRunDir,relative18(resolvedPackageDir,loadedFile));mkdirSync25(dirname44(quarantinePath),{recursive:!0}),renameSync19(loadedFile,quarantinePath),copyFileSync3(quarantinePath,loadedFile)}}var EXTENSION_LOAD_FAILURE_HINT=`Hint: Start without extensions using "${APP_NAME} -ne".`;async function readPipedStdin(){if(!process.stdin.isTTY)return new Promise(resolve42=>{let data="";process.stdin.setEncoding("utf8"),process.stdin.on("data",chunk=>{data+=chunk}),process.stdin.on("end",()=>{resolve42(data.trim()||void 0)}),process.stdin.resume()})}function collectAuthDiagnostics(authStorage,context){return authStorage.drainErrors().map(error2=>({type:"warning",message:`(${context}, auth storage) ${error2.message}`}))}function collectExtensionLoadDiagnostics(errors){return errors.map(({path:path13,error:error2})=>({type:"warning",message:`Failed to load extension "${path13}": ${error2}`}))}function reportDiagnostics(diagnostics){for(let diagnostic2 of diagnostics){let color=diagnostic2.type==="error"?source_default.red:diagnostic2.type==="warning"?source_default.yellow:source_default.dim,prefix=diagnostic2.type==="error"?"Error: ":diagnostic2.type==="warning"?"Warning: ":"";console.error(color(`${prefix}${diagnostic2.message}`))}}function isTruthyEnvFlag2(value2){return value2?value2==="1"||value2.toLowerCase()==="true"||value2.toLowerCase()==="yes":!1}function resolveAppMode(parsed,stdinIsTTY,stdoutIsTTY){return parsed.mode===void 0&&parsed.messages[0]==="app-server"?"app-server":parsed.mode==="rpc"?"rpc":parsed.mode==="json"?"json":parsed.print||!stdinIsTTY||!stdoutIsTTY?"print":"interactive"}function toPrintOutputMode(appMode){return appMode==="json"?"json":"text"}function toProjectTrustMode(appMode){return appMode==="app-server"?"print":appMode}function resolveAutoTitleSessions(appMode,parsed,hasContextMessages,clientCapabilities=parseClientCapabilities(envValue("RPC_CLIENT_CAPABILITIES")),sessionAutoTitle){return hasContextMessages?!1:sessionAutoTitle!==void 0?sessionAutoTitle:appMode==="interactive"||parsed.autoTitleSessions===!0||appMode==="rpc"&&clientCapabilities.includes(AUTO_TITLE_SESSIONS_CAPABILITY)}function isPlainRuntimeMetadataCommand(parsed){return!parsed.print&&parsed.mode===void 0&&(parsed.help===!0||parsed.listModels!==void 0||parsed.listTips===!0)}async function runAuthCommand(args){if(isAuthCommandHelp(args))return printAuthCommandHelp(),!0;let command;try{command=parseAuthCommand(args)}catch(error2){let message=error2 instanceof AuthCommandError?error2.message:"Failed to parse auth command";return console.error(source_default.red(`Error: ${message}`)),process.exitCode=1,!0}if(!command)return!1;let parsed=parseArgs(command.args);if(parsed.unknownFlags.size>0){let option=parsed.unknownFlags.keys().next().value;return console.error(source_default.red(`Unknown option --${option} for "${getAuthCommandName(command.kind)}".`)),console.error(source_default.dim(`Use "${APP_NAME} --help" or "${getAuthCommandUsage(command.kind)}".`)),process.exitCode=1,!0}try{if(parsed.diagnostics.length>0)throw new AuthCommandError(parsed.diagnostics.map(diagnostic2=>diagnostic2.message).join(`
2511
2511
  `));if(command.kind!=="check"){let signal=AbortSignal.timeout(15e3),modelRuntime=await ModelRuntime.create({allowModelNetwork:!1,signal}),credential2=await resolveCredentialForPrint(parsed,modelRuntime,command.kind,command.minExpiryMs,signal);return process.stdout.write(`${credential2}
2512
2512
  `),!0}let requestedAuth=validateAuthCommandArgs(parsed,command.kind),result3,credential;try{let credentials=command.noRefresh?new ReadOnlyAuthStorage:AuthStorage.create(),modelRuntime=await createAuthCheckModelRuntime(credentials);result3=await checkProviderAuth(parsed,modelRuntime,{refresh:!command.noRefresh}),command.credentials&&result3.status==="ready"&&(credential=await getProviderCredential(result3.provider,modelRuntime,credentials,{refresh:!command.noRefresh}),credential||(result3={status:"not_ready",provider:result3.provider,reason:"credential_not_available"}))}catch{result3={status:"invalid",provider:requestedAuth.provider??requestedAuth.model,reason:"invalid_state"}}let accounts=[];if(command.json&&result3.status!=="invalid")try{let credentials=command.noRefresh?new ReadOnlyAuthStorage:AuthStorage.create();accounts=await summarizeCredentialAccounts(result3.provider,await credentials.read(result3.provider))}catch{}let output=command.json?JSON.stringify({...result3,accounts,...credential?{credentials:credential}:{}}):credential??result3.status;process.stdout.write(`${output}
2513
- `),process.exitCode=result3.status==="ready"?0:result3.status==="not_ready"?1:2}catch(error2){let message=error2 instanceof AuthCommandError?error2.message:"Failed to resolve credential";console.error(source_default.red(`Error: ${message}`)),process.exitCode=command.kind==="check"?2:1}return!0}async function prepareInitialMessage(parsed,autoResizeImages,stdinContent){if(parsed.fileArgs.length===0)return buildInitialMessage({parsed,stdinContent});let{text:text2,images}=await processFileArguments(parsed.fileArgs,{autoResizeImages});return buildInitialMessage({parsed,fileText:text2,fileImages:images,stdinContent})}async function findLocalSessionByExactId(sessionId,cwd,sessionDir){let localMatch=(sessionDir?await SessionManager.listAll(sessionDir):await SessionManager.list(cwd)).find(s=>s.id===sessionId);return localMatch?{type:"local",path:localMatch.path}:void 0}async function resolveSessionPath(sessionArg,cwd,sessionDir){if(sessionArg.includes("/")||sessionArg.includes("\\")||sessionArg.endsWith(".jsonl"))return{type:"path",path:resolvePath(sessionArg,cwd)};let localSessions=await SessionManager.list(cwd,sessionDir),localMatch=localSessions.find(s=>s.id===sessionArg)??localSessions.find(s=>s.id.startsWith(sessionArg));if(localMatch)return{type:"local",path:localMatch.path};let allSessions=await SessionManager.listAll(sessionDir),globalMatch=allSessions.find(s=>s.id===sessionArg)??allSessions.find(s=>s.id.startsWith(sessionArg));return globalMatch?{type:"global",path:globalMatch.path,cwd:globalMatch.cwd}:{type:"not_found",arg:sessionArg}}async function promptConfirm(message){return new Promise(resolve42=>{let rl=createInterface2({input:process.stdin,output:process.stdout}),settled=!1,settle=result3=>{settled||(settled=!0,resolve42(result3))};rl.question(`${message} [y/N] `,answer=>{let normalized2=answer.trim().toLowerCase();settle(normalized2==="y"||normalized2==="yes"),rl.close()}),rl.once("close",()=>settle(!1))})}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateRebindFlags(parsed){if(!parsed.rebind)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.fork?"--fork":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0,parsed.sessionId!==void 0?"--session-id":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --rebind cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path13,sessionDir){try{return SessionManager.open(path13,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function rebindSessionOrExit(sourcePath,cwd,sessionDir){try{let reboundPath=await rebindSessionFile(sourcePath,cwd,sessionDir);return console.log(source_default.dim(`Session moved to ${cwd}`)),SessionManager.open(reboundPath,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function sessionCwdOrUndefined(sessionFile){try{return readSessionCwd(sessionFile)}catch{return}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager,appMode){if(parsed.noSession||parsed.help||parsed.listModels!==void 0||parsed.listTips)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.rebind){let resolved=await resolveSessionPath(parsed.rebind,cwd,sessionDir);resolved.type==="not_found"&&(console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1));let sessionCwd=resolved.type==="global"?resolved.cwd:sessionCwdOrUndefined(resolved.path);return resolved.type==="local"||sessionCwd===void 0||resolvePath(sessionCwd)===resolvePath(cwd)?openSessionOrExit(resolved.path,sessionDir):(await classifySessionRepository(resolved.path,sessionCwd,cwd)==="different"&&(console.error(source_default.red(`Refusing to rebind: ${cwd} is a different git repository than ${sessionCwd}. Use --fork '${parsed.rebind}' to copy the session into this directory instead.`)),process.exit(1)),rebindSessionOrExit(resolved.path,cwd,sessionDir))}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":{let action=await chooseCrossProjectAction({sessionArg:parsed.session,sessionCwd:resolved.cwd,cwd,match:await classifySessionRepository(resolved.path,resolved.cwd,cwd),interactive:appMode==="interactive",confirm:promptConfirm,out:line=>console.log(line),err:line=>console.error(line)});return action==="rebind"?rebindSessionOrExit(resolved.path,cwd,sessionDir):action==="fork"?forkSessionOrExit(resolved.path,cwd,sessionDir):(action==="abort"&&console.log(source_default.dim("Aborted.")),process.exit(action==="abort"?0:1))}case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let{selectSession}=await import("./session-picker-KTXLU6MQ.js"),movedOptions=sessionDir===void 0?{}:{sessionDir},selectedPath=await selectSession(onProgress=>withMovedSessions(SessionManager.list(cwd,sessionDir,onProgress),cwd,movedOptions),async onProgress=>markMovedSessions(await SessionManager.listAll(sessionDir,onProgress),cwd),settingsManager);selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0));let target=await resolveResumeTarget({sessionPath:selectedPath,cwd,...movedOptions,confirm:selectedCwd=>(console.log(source_default.yellow(`Session found in different project: ${selectedCwd}`)),confirmSameRepositoryRebind({sessionArg:selectedPath,cwd,confirm:promptConfirm,out:line=>console.log(line)}))}).catch(error2=>(console.error(source_default.red(`Error: ${error2 instanceof Error?error2.message:String(error2)}`)),process.exit(1)));return target.rebound&&console.log(source_default.dim(`Session moved to ${cwd}`)),SessionManager.open(target.path,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue){let recent=SessionManager.continueRecent(cwd,sessionDir),recentFile=recent.getSessionFile();if(recentFile!==void 0&&existsSync43(recentFile))return recent;let moved=await movedSessionToContinue({cwd,...sessionDir===void 0?{}:{sessionDir},interactive:appMode==="interactive",confirm:promptConfirm,out:line=>console.log(line),err:line=>console.error(line)});return moved===void 0?recent:rebindSessionOrExit(moved,cwd,sessionDir)}if(parsed.sessionId){let existingSession=await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={},diagnostics=[],cliThinkingFromModel=!1;if(parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,options.initialModelProvenance="cli",!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,options.thinkingSelection=resolved.thinkingSelection,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,options.initialModelProvenance="scoped",!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel,options.thinkingSelection=savedInScope.thinkingSelection)):(options.model=scopedModels[0].model,options.initialModelProvenance="scoped",!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel,options.thinkingSelection=scopedModels[0].thinkingSelection))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking,options.thinkingSelection={level:parsed.thinking,source:"explicit"}),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel,thinkingSelection:sm.thinkingSelection}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value2=>isLocalPath(value2)?resolvePath(value2,cwd):value2)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}function applyGrokNeoThemeFallback(settingsManager){if(settingsManager.getThemeSetting()!==void 0)return;let getThemeSetting=settingsManager.getThemeSetting.bind(settingsManager),setTheme2=settingsManager.setTheme.bind(settingsManager),fallbackActive=!0;settingsManager.getThemeSetting=()=>getThemeSetting()??(fallbackActive?"grok-night":void 0),settingsManager.setTheme=theme2=>{fallbackActive=!1,setTheme2(theme2)}}function createCliRuntimeFactory(configuration,local={}){let{parsed,cwd,agentDir,appMode}=configuration,extensionFactories=local.extensionFactories??builtInExtensions,startupSettingsManager=local.startupSettingsManager??SettingsManager.create(cwd,agentDir),startupLoadingIndicator=local.startupLoadingIndicator??createStartupLoadingIndicator({writer:()=>{},isTTY:!1,label:`Loading ${APP_NAME}`}),trustStore=new ProjectTrustStore(agentDir),projectTrustByCwd=new Map,trustPromptMode=parsed.help||parsed.listModels!==void 0||parsed.listTips?"print":toProjectTrustMode(appMode),resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createServices=async({cwd:cwd2,agentDir:agentDir2,projectTrustContext,launchProfile,mcpRegistry,isInitialRuntime})=>{let projectTrustDiagnostics=[],cachedProjectTrust=projectTrustByCwd.get(cwd2),hasTrustRequiringResources=hasTrustRequiringProjectResources(cwd2),shouldResolveProjectTrust=parsed.projectTrustOverride===void 0&&cachedProjectTrust===void 0&&hasTrustRequiringResources,projectTrusted=shouldResolveProjectTrust?!1:cachedProjectTrust??parsed.projectTrustOverride??(!hasTrustRequiringResources||trustStore.get(cwd2)===!0),runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2,{projectTrusted});return{services:await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,...local.modelRuntime===void 0?{}:{modelRuntime:local.modelRuntime},mcpRegistry,modelRuntimeSignal:AbortSignal.timeout(15e3),extensionFlagValues:parsed.unknownFlags,resourceLoaderReloadOptions:shouldResolveProjectTrust?{resolveProjectTrust:async({extensionsResult})=>{let trusted=await resolveProjectTrusted({cwd:cwd2,trustStore,trustOverride:parsed.projectTrustOverride,defaultProjectTrust:startupSettingsManager.getDefaultProjectTrust(),extensionsResult,projectTrustContext:projectTrustContext??pauseIndicatorDuringPrompts(createProjectTrustContext({cwd:cwd2,mode:isInitialRuntime?trustPromptMode:toProjectTrustMode(appMode),settingsManager:startupSettingsManager,hasUI:isInitialRuntime&&trustPromptMode==="interactive"}),startupLoadingIndicator),onExtensionError:message=>projectTrustDiagnostics.push({type:"warning",message})});return projectTrustByCwd.set(cwd2,trusted),trusted}}:void 0,resourceLoaderOptions:{sharedHostEnabled:shouldJoinSharedHost(appMode,{enableEnv:isTruthyEnvFlag2(envValue("ENABLE_SHARED_HOST")),settingEnabled:runtimeSettingsManager.getExperimentalSharedHost()}),sessionKind:launchProfile?.sessionKind,sessionContext:launchProfile?.sessionContext,additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:parsed.appendSystemPrompt,extensionFactories}}),projectTrustDiagnostics}};return Object.assign(async({cwd:cwd2,agentDir:agentDir2,sessionManager,sessionStartEvent,projectTrustContext,launchProfile,mcpRegistry})=>{let isInitialRuntime=sessionStartEvent===void 0,markSwitch=label3=>{sessionStartEvent?.reason==="resume"&&time(label3,"switch")},{services,projectTrustDiagnostics}=await createServices({cwd:cwd2,agentDir:agentDir2,...projectTrustContext!==void 0?{projectTrustContext}:{},...launchProfile!==void 0?{launchProfile}:{},...mcpRegistry!==void 0?{mcpRegistry}:{},isInitialRuntime});markSwitch("services");let{settingsManager,modelRuntime,resourceLoader}=services,diagnostics=[...projectTrustDiagnostics,...services.diagnostics,...collectSettingsDiagnosticsWithContext(settingsManager,"runtime creation"),...collectExtensionLoadDiagnostics(resourceLoader.getExtensions().errors)],modelPatterns=getModelNarrowingPatterns({cliPatterns:parsed.models,legacyEnabledPatterns:settingsManager.getEnabledModels()}),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime,{signal:AbortSignal.timeout(15e3)}):[],runtimeParsed=launchProfile===void 0?parsed:{...parsed,...launchProfile.creationModel===void 0?{}:{provider:launchProfile.creationModel.provider,model:launchProfile.creationModel.modelId},...launchProfile.initialThinkingLevel===void 0?{}:{thinking:launchProfile.initialThinkingLevel}},{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(runtimeParsed,scopedModels,sessionManager.hasContextMessages(),modelRuntime,settingsManager);diagnostics.push(...sessionOptionDiagnostics),parsed.apiKey&&(sessionOptions.model?await modelRuntime.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"})),isInitialRuntime&&startupLoadingIndicator.setPhase("opening session"),markSwitch("sessionOptions");let created=await createAgentSessionFromServices({services,sessionManager,sessionStartEvent,model:sessionOptions.model,initialModelProvenance:sessionOptions.initialModelProvenance,thinkingLevel:sessionOptions.thinkingLevel,thinkingSelection:sessionOptions.thinkingSelection,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools,autoTitleSessions:resolveAutoTitleSessions(appMode,parsed,sessionManager.hasContextMessages(),parseClientCapabilities(envValue("RPC_CLIENT_CAPABILITIES")),launchProfile?.autoTitle)});markSwitch("createSession");let cliThinkingOverride=runtimeParsed.thinking!==void 0||cliThinkingFromModel;return created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),{...created,services,diagnostics}},{prepare:async options=>{await createServices({...options,isInitialRuntime:!0})}})}async function main(args,options){resetTimings(),recordTiming("processStart->main",Math.round(process.uptime()*1e3));let extensionFactories=[...builtInExtensions,...options?.extensionFactories??[]],offlineMode=args.includes("--offline")||isTruthyEnvFlag2(envValue("OFFLINE"));if(offlineMode&&(process.env.PI_OFFLINE="1",process.env.PI_SKIP_VERSION_CHECK="1"),await runAuthCommand(args))return;if(isModelsDiscoverCommand(args)){process.exitCode=await runModelsDiscoverCommand(args.slice(2));return}if(await dispatchInternalSupervisor(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getPackageDir());let cwd=process.cwd(),agentDir=getAgentDir(),fromSourceWarning=getFromSourceRealConfigWarning(agentDir);fromSourceWarning&&console.error(source_default.yellow(fromSourceWarning));let bootstrapSettingsManager=SettingsManager.create(cwd,agentDir,{projectTrusted:!1});if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await dispatchPackageCommand(args,{extensionFactories})){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}if(await dispatchConfigCommand(args,{extensionFactories})||await dispatchAppServerCommand(args))return;let hostExitCode=await dispatchHostCommand(args);hostExitCode!==void 0&&process.exit(hostExitCode);let scheduleExitCode=await dispatchScheduleCommand(args);scheduleExitCode!==void 0&&process.exit(scheduleExitCode);let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d of parsed.diagnostics){let color=d.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d.type==="error"?"Error":"Warning"}: ${d.message}`))}parsed.diagnostics.some(d=>d.type==="error")&&process.exit(1)}if(time("parseArgs"),parsed.version&&(console.log(DISPLAY_VERSION),process.exit(0)),parsed.export){let result3;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result3=await exportFromFile(parsed.export,outputPath)}catch(error2){let message=error2 instanceof Error?error2.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result3}`),process.exit(0)}let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);if(appMode!=="interactive"&&(!isPlainRuntimeMetadataCommand(parsed)||parsed.help&&parsed.mode==="json")&&takeOverStdout(),parsed.mode==="json"){let log=console.log.bind(console);console.log=(...args2)=>console.error(...args2),process.once("exit",()=>{console.log=log})}parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateRebindFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir);reportDiagnostics(collectSettingsDiagnosticsWithContext(startupSettingsManager,"startup session lookup"));let resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes);if(isPlainHelpRequest(parsed)){let projectTrusted=resolveHelpProjectTrust(parsed,cwd,agentDir),scope=helpFlagsScope(parsed,cwd,agentDir,projectTrusted),{flags,extensionPaths}=await resolveHelpExtensionFlags({cwd,agentDir,settingsManager:SettingsManager.create(cwd,agentDir,{projectTrusted}),additionalExtensionPaths:resolvedExtensionPaths??[],noExtensions:parsed.noExtensions===!0,...extensionFactories?{extensionFactories}:{}});printHelp(flags),writeHelpFlagsCache({scope,flags,extensionPaths}),printTimings(),process.exit(0)}if(parsed.listTips){let{listTips}=await import("./list-tips-XXZ5PLE3.js");listTips(),process.exit(0)}if(parsed.listModels!==void 0){let services2=await createAgentSessionServices({cwd,agentDir,settingsManager:startupSettingsManager,extensionFlagValues:parsed.unknownFlags,resourceLoaderOptions:{additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,extensionFactories}});reportDiagnostics([...services2.diagnostics,...collectSettingsDiagnosticsWithContext(services2.settingsManager,"model listing"),...collectAuthDiagnostics(services2.authStorage,"model listing")]);let searchPattern2=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(services2.modelRuntime,searchPattern2),process.exit(0)}if(appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&!parsed.listTips&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme}),appMode==="rpc"&&parsed.multiSession){if(options?.extensionFactories?.length)throw new Error("Shared RPC workers require file-backed extensions; inline factories cannot cross isolates");let runtimeConfiguration={parsed,cwd,agentDir,appMode},sessionRuntime=resolveSessionRuntime(parsed),{runMultiSessionHost}=await import("./multi-session-host-PRY7CJLK.js"),hostModelRuntime=sessionRuntime==="worker"?void 0:await ModelRuntime.create({credentials:AuthStorage.create(join79(agentDir,"auth.json")),authPath:join79(agentDir,"auth.json"),agentDir,modelsPath:join79(agentDir,"models.json"),signal:AbortSignal.timeout(15e3)});initTheme(startupSettingsManager.getTheme(),!1),printTimings(),await runMultiSessionHost({agentDir,createRuntime:createCliRuntimeFactory(runtimeConfiguration,{...hostModelRuntime===void 0?{}:{modelRuntime:hostModelRuntime}}),...sessionRuntime==="worker"?{workerConfiguration:runtimeConfiguration}:{},cwd,creationModel:parsed.provider&&parsed.model?{provider:parsed.provider,modelId:parsed.model}:void 0,initialThinkingLevel:parsed.thinking,listen:parsed.listen})}let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager,appMode),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let sessionCwd=sessionManager.getCwd(),autoTrustOnReloadCwd=parsed.projectTrustOverride===void 0&&!hasTrustRequiringProjectResources(sessionCwd)?sessionCwd:void 0,startupLoadingIndicator=createStartupLoadingIndicator({writer:chunk=>process.stdout.write(chunk),isTTY:process.stdout.isTTY===!0,label:`Loading ${APP_NAME}`});shouldShowStartupLoadingIndicator({appMode,stdoutIsTTY:process.stdout.isTTY===!0,helpRequested:parsed.help===!0})&&(startupLoadingIndicator.start(),startupLoadingIndicator.setPhase("extensions & models"));let createRuntime=createCliRuntimeFactory({parsed,cwd,agentDir,appMode},{extensionFactories,startupSettingsManager,startupLoadingIndicator});time("createRuntime");let runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager}).finally(()=>{startupLoadingIndicator.stop()});time("createAgentSessionRuntime");let selectedRuntime=runtime;if(isTruthyEnvFlag2(envValue("DISABLE_SHARED_HOST"))&&console.error(source_default.yellow("DISABLE_SHARED_HOST is obsolete: the shared session host is now off by default. Enable the experimental.sharedHost setting (or set the brand-prefixed ENABLE_SHARED_HOST=1 env flag) to opt in.")),shouldJoinSharedHost(appMode,{enableEnv:isTruthyEnvFlag2(envValue("ENABLE_SHARED_HOST")),settingEnabled:runtime.services.settingsManager.getExperimentalSharedHost()})){let socket=envValue("RPC_SOCKET")??resolve38(agentDir,"rpc","rpc.sock"),{createInteractiveHostRuntime}=await import("./interactive-host-runtime-P3FYZWSY.js");selectedRuntime=await createInteractiveHostRuntime(runtime,{socket,agentDir,onWarning:warning=>console.error(source_default.yellow(warning.message))})}let{services,session,modelFallbackMessage}=selectedRuntime,{settingsManager,modelRuntime,resourceLoader}=services;setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());let loadedExtensions=resourceLoader.getExtensions().extensions,extensionFlags=loadedExtensions.flatMap(extension=>Array.from(extension.flags.values()));parsed.help&&(printHelp(extensionFlags),process.exit(0)),time("extensionFlags"),writeHelpFlagsCache({scope:helpFlagsScope(parsed,cwd,agentDir,settingsManager.isProjectTrusted()),flags:extensionFlags,extensionPaths:loadedExtensions.map(extension=>extension.resolvedPath)}),time("helpFlagsCache");let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin"),recordProcessLifetime(agentDir,appMode,{supervised:appMode==="rpc"}),time("recordProcessLifetime");let{initialMessage,initialImages,initialTitlePrompt}=await prepareInitialMessage(parsed,settingsManager.getImageAutoResize(),stdinContent);time("prepareInitialMessage"),parsed.grokNeo&&appMode==="interactive"&&applyGrokNeoThemeFallback(settingsManager),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope"),reportDiagnostics(runtime.diagnostics),appMode!=="interactive"&&reportDiagnostics(collectAuthDiagnostics(services.authStorage,"runtime creation")),runtime.diagnostics.some(diagnostic2=>diagnostic2.type==="error")&&(runtime.diagnostics.some(diagnostic2=>diagnostic2.message.includes("Failed to load extension"))&&console.error(source_default.yellow(EXTENSION_LOAD_FAILURE_HINT)),process.exit(1)),time("createAgentSession"),appMode!=="interactive"&&!session.model&&(console.error(source_default.red(formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag2(envValue("STARTUP_BENCHMARK"));if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: PI_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}let stopChildReaper=await startHostChildReaper(appMode==="interactive"?()=>{}:message=>{process.stderr.write(`${message}
2514
- `)});if(appMode==="rpc"){let{runRpcMode:runRpcMode2}=await import("./rpc-mode-U2EQRVC3.js");printTimings(),await runRpcMode2(runtime)}else if(appMode==="interactive"){let{InteractiveMode:InteractiveMode2}=await import("./interactive-mode-VCIOGSIZ.js"),interactiveMode=new InteractiveMode2(selectedRuntime,{migratedProviders,legacyPiEditNotice:legacyPiEditStartupNotice(),modelFallbackMessage,autoTrustOnReloadCwd,initialMessage,initialImages,initialTitlePrompt,initialMessages:parsed.messages,verbose:parsed.verbose,chrome:parsed.grokNeo?"grok":void 0,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme});startupBenchmark&&(await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve42=>setTimeout(resolve42,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve42=>process.stdout.once("drain",resolve42)),process.stderr.writableLength>0&&await new Promise(resolve42=>process.stderr.once("drain",resolve42)),process.exit(0)),printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});reportDiagnostics(collectAuthDiagnostics(services.authStorage,"print mode")),stopChildReaper(),stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}var WIDTH=31,HEIGHT=36,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 getPixel(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=getPixel(x,row*2),lower=getPixel(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 clipped=row.slice(0,availableWidth).join(""),padRight=Math.max(0,width-padding-clipped.length);return` ${theme.fg("accent",clipped)}${" ".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 state=this.effectState,pixelsPerFrame=3;for(let i=0;i<pixelsPerFrame;i++){let row=Math.floor(state.pos/WIDTH),x=state.pos%WIDTH;if(row>=DISPLAY_HEIGHT)return!0;this.currentGrid[row][x]=this.finalGrid[row][x],state.pos++}return!1}tickScanline(){let state=this.effectState;if(state.row>=DISPLAY_HEIGHT)return!0;for(let x=0;x<WIDTH;x++)this.currentGrid[state.row][x]=this.finalGrid[state.row][x];return state.row++,!1}tickRain(){let state=this.effectState,allSettled=!0;this.currentGrid=this.createEmptyGrid();for(let x=0;x<WIDTH;x++){let drop=state.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 state=this.effectState,pixelsPerFrame=15;for(let i=0;i<pixelsPerFrame;i++){if(state.idx>=state.positions.length)return!0;let[row,x]=state.positions[state.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state.idx++}return!1}tickCrt(){let state=this.effectState,midRow=Math.floor(DISPLAY_HEIGHT/2);this.currentGrid=this.createEmptyGrid();let top=midRow-state.expansion,bottom=midRow+state.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 state.expansion++,state.expansion>DISPLAY_HEIGHT}tickGlitch(){let state=this.effectState;return state.phase<state.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}),state.phase++,!1):(this.currentGrid=this.finalGrid.map(row=>[...row]),!0)}tickDissolve(){let state=this.effectState,pixelsPerFrame=20;for(let i=0;i<pixelsPerFrame;i++){if(state.idx>=state.positions.length)return!0;let[row,x]=state.positions[state.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state.idx++}return!1}updateDisplay(){this.gridVersion++}dispose(){this.stopAnimation()}};function formatDuration3(ms){return ms<1e3?`${ms}ms`:ms<6e4?`${(ms/1e3).toFixed(1)}s`:ms<36e5?`${Math.floor(ms/6e4)}m ${Math.floor(ms%6e4/1e3)}s`:ms<864e5?`${Math.floor(ms/36e5)}h ${Math.floor(ms%36e5/6e4)}m`:`${Math.floor(ms/864e5)}d ${Math.floor(ms%864e5/36e5)}h`}var SPACER_DESCRIPTOR={kind:"spacer",text:""};function assertNever3(value2){throw new TypeError(`Unexpected assistant render variant: ${String(value2)}`)}function isVisibleContent(content,providerNativeVisible){switch(content.type){case"text":return!!content.text.trim();case"thinking":return!!content.thinking.trim();case"providerNative":return providerNativeVisible;case"toolCall":return!1;default:return assertNever3(content)}}function createAssistantRenderDescriptors(message,options){let descriptors=[];message.content.some(content=>isVisibleContent(content,!0))&&descriptors.push(SPACER_DESCRIPTOR);let thinkingRunIndex=0;for(let i=0;i<message.content.length;i++){let content=message.content[i];switch(content.type){case"text":{let text2=content.text.trim();text2&&descriptors.push({kind:"text-md",text:text2});break}case"thinking":{let thinkingBlocks=[],hasTiming=!1,isDone=!0,minStart=Number.POSITIVE_INFINITY,maxEnd=Number.NEGATIVE_INFINITY;for(;i<message.content.length;i++){let thinkingContent=message.content[i];if(thinkingContent.type!=="thinking")break;let startedAt=thinkingContent.startedAt;if(startedAt!==void 0){hasTiming=!0,minStart=Math.min(minStart,startedAt);let endedAt=thinkingContent.endedAt;endedAt===void 0?isDone=!1:maxEnd=Math.max(maxEnd,endedAt)}let thinking=thinkingContent.thinking.trim();thinking&&thinkingBlocks.push(thinking)}if(i--,thinkingBlocks.length===0)break;let thinkingRun=thinkingRunIndex++,hidden=options.thinkingVisibilityOverrides?.get(thinkingRun)??options.hideThinkingBlock;if(hasTiming){let label3=isDone?theme.italic(theme.fg("thinkingText",`Thought: ${formatDuration3(Math.max(0,maxEnd-minStart))}`)):theme.italic(theme.fg("thinkingText",options.hiddenThinkingLabel));hidden?descriptors.push({kind:"thinking-label",text:label3,thinkingRun}):descriptors.push({kind:"thinking-label",text:label3,thinkingRun},{kind:"thinking-md",text:thinkingBlocks.join(`
2513
+ `),process.exitCode=result3.status==="ready"?0:result3.status==="not_ready"?1:2}catch(error2){let message=error2 instanceof AuthCommandError?error2.message:"Failed to resolve credential";console.error(source_default.red(`Error: ${message}`)),process.exitCode=command.kind==="check"?2:1}return!0}async function prepareInitialMessage(parsed,autoResizeImages,stdinContent){if(parsed.fileArgs.length===0)return buildInitialMessage({parsed,stdinContent});let{text:text2,images}=await processFileArguments(parsed.fileArgs,{autoResizeImages});return buildInitialMessage({parsed,fileText:text2,fileImages:images,stdinContent})}async function findLocalSessionByExactId(sessionId,cwd,sessionDir){let localMatch=(sessionDir?await SessionManager.listAll(sessionDir):await SessionManager.list(cwd)).find(s=>s.id===sessionId);return localMatch?{type:"local",path:localMatch.path}:void 0}async function resolveSessionPath(sessionArg,cwd,sessionDir){if(sessionArg.includes("/")||sessionArg.includes("\\")||sessionArg.endsWith(".jsonl"))return{type:"path",path:resolvePath(sessionArg,cwd)};let localSessions=await SessionManager.list(cwd,sessionDir),localMatch=localSessions.find(s=>s.id===sessionArg)??localSessions.find(s=>s.id.startsWith(sessionArg));if(localMatch)return{type:"local",path:localMatch.path};let allSessions=await SessionManager.listAll(sessionDir),globalMatch=allSessions.find(s=>s.id===sessionArg)??allSessions.find(s=>s.id.startsWith(sessionArg));return globalMatch?{type:"global",path:globalMatch.path,cwd:globalMatch.cwd}:{type:"not_found",arg:sessionArg}}async function promptConfirm(message){return new Promise(resolve42=>{let rl=createInterface2({input:process.stdin,output:process.stdout}),settled=!1,settle=result3=>{settled||(settled=!0,resolve42(result3))};rl.question(`${message} [y/N] `,answer=>{let normalized2=answer.trim().toLowerCase();settle(normalized2==="y"||normalized2==="yes"),rl.close()}),rl.once("close",()=>settle(!1))})}function validateForkFlags(parsed){if(!parsed.fork)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --fork cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateRebindFlags(parsed){if(!parsed.rebind)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.fork?"--fork":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0,parsed.noSession?"--no-session":void 0,parsed.sessionId!==void 0?"--session-id":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --rebind cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1))}function validateSessionIdFlags(parsed){if(parsed.sessionId===void 0)return;let conflictingFlags=[parsed.session?"--session":void 0,parsed.continue?"--continue":void 0,parsed.resume?"--resume":void 0].filter(flag=>flag!==void 0);conflictingFlags.length>0&&(console.error(source_default.red(`Error: --session-id cannot be combined with ${conflictingFlags.join(", ")}`)),process.exit(1));try{assertValidSessionId(parsed.sessionId)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function openSessionOrExit(path13,sessionDir){try{return SessionManager.open(path13,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function forkSessionOrExit(sourcePath,cwd,sessionDir,sessionId){try{return SessionManager.forkFrom(sourcePath,cwd,sessionDir,{id:sessionId})}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}async function rebindSessionOrExit(sourcePath,cwd,sessionDir){try{let reboundPath=await rebindSessionFile(sourcePath,cwd,sessionDir);return console.log(source_default.dim(`Session moved to ${cwd}`)),SessionManager.open(reboundPath,sessionDir)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(source_default.red(`Error: ${message}`)),process.exit(1)}}function sessionCwdOrUndefined(sessionFile){try{return readSessionCwd(sessionFile)}catch{return}}async function createSessionManager(parsed,cwd,sessionDir,settingsManager,appMode){if(parsed.noSession||parsed.help||parsed.listModels!==void 0||parsed.listTips)return SessionManager.inMemory(cwd,parsed.sessionId!==void 0?{id:parsed.sessionId}:void 0);if(parsed.fork){parsed.sessionId&&await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir)&&(console.error(source_default.red(`Session already exists with id '${parsed.sessionId}'`)),process.exit(1));let resolved=await resolveSessionPath(parsed.fork,cwd,sessionDir);switch(resolved.type){case"path":case"local":case"global":return forkSessionOrExit(resolved.path,cwd,sessionDir,parsed.sessionId);case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.rebind){let resolved=await resolveSessionPath(parsed.rebind,cwd,sessionDir);resolved.type==="not_found"&&(console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1));let sessionCwd=resolved.type==="global"?resolved.cwd:sessionCwdOrUndefined(resolved.path);return resolved.type==="local"||sessionCwd===void 0||resolvePath(sessionCwd)===resolvePath(cwd)?openSessionOrExit(resolved.path,sessionDir):(await classifySessionRepository(resolved.path,sessionCwd,cwd)==="different"&&(console.error(source_default.red(`Refusing to rebind: ${cwd} is a different git repository than ${sessionCwd}. Use --fork '${parsed.rebind}' to copy the session into this directory instead.`)),process.exit(1)),rebindSessionOrExit(resolved.path,cwd,sessionDir))}if(parsed.session){let resolved=await resolveSessionPath(parsed.session,cwd,sessionDir);switch(resolved.type){case"path":case"local":return openSessionOrExit(resolved.path,sessionDir);case"global":{let action=await chooseCrossProjectAction({sessionArg:parsed.session,sessionCwd:resolved.cwd,cwd,match:await classifySessionRepository(resolved.path,resolved.cwd,cwd),interactive:appMode==="interactive",confirm:promptConfirm,out:line=>console.log(line),err:line=>console.error(line)});return action==="rebind"?rebindSessionOrExit(resolved.path,cwd,sessionDir):action==="fork"?forkSessionOrExit(resolved.path,cwd,sessionDir):(action==="abort"&&console.log(source_default.dim("Aborted.")),process.exit(action==="abort"?0:1))}case"not_found":console.error(source_default.red(`No session found matching '${resolved.arg}'`)),process.exit(1)}}if(parsed.resume)try{let{selectSession}=await import("./session-picker-FF2J4OQA.js"),movedOptions=sessionDir===void 0?{}:{sessionDir},selectedPath=await selectSession(onProgress=>withMovedSessions(SessionManager.list(cwd,sessionDir,onProgress),cwd,movedOptions),async onProgress=>markMovedSessions(await SessionManager.listAll(sessionDir,onProgress),cwd),settingsManager);selectedPath||(console.log(source_default.dim("No session selected")),process.exit(0));let target=await resolveResumeTarget({sessionPath:selectedPath,cwd,...movedOptions,confirm:selectedCwd=>(console.log(source_default.yellow(`Session found in different project: ${selectedCwd}`)),confirmSameRepositoryRebind({sessionArg:selectedPath,cwd,confirm:promptConfirm,out:line=>console.log(line)}))}).catch(error2=>(console.error(source_default.red(`Error: ${error2 instanceof Error?error2.message:String(error2)}`)),process.exit(1)));return target.rebound&&console.log(source_default.dim(`Session moved to ${cwd}`)),SessionManager.open(target.path,sessionDir)}finally{stopThemeWatcher()}if(parsed.continue){let recent=SessionManager.continueRecent(cwd,sessionDir),recentFile=recent.getSessionFile();if(recentFile!==void 0&&existsSync43(recentFile))return recent;let moved=await movedSessionToContinue({cwd,...sessionDir===void 0?{}:{sessionDir},interactive:appMode==="interactive",confirm:promptConfirm,out:line=>console.log(line),err:line=>console.error(line)});return moved===void 0?recent:rebindSessionOrExit(moved,cwd,sessionDir)}if(parsed.sessionId){let existingSession=await findLocalSessionByExactId(parsed.sessionId,cwd,sessionDir);if(existingSession)return SessionManager.open(existingSession.path,sessionDir);console.error(source_default.yellow(`Warning: No project session found with id '${parsed.sessionId}'; creating a new session with that id.`))}return SessionManager.create(cwd,sessionDir,{id:parsed.sessionId})}function buildSessionOptions(parsed,scopedModels,hasExistingSession,modelRuntime,settingsManager){let options={},diagnostics=[],cliThinkingFromModel=!1;if(parsed.model){let resolved=resolveCliModel({cliProvider:parsed.provider,cliModel:parsed.model,cliThinking:parsed.thinking,modelRuntime});resolved.warning&&diagnostics.push({type:"warning",message:resolved.warning}),resolved.error&&diagnostics.push({type:"error",message:resolved.error}),resolved.model&&(options.model=resolved.model,options.initialModelProvenance="cli",!parsed.thinking&&resolved.thinkingLevel&&(options.thinkingLevel=resolved.thinkingLevel,options.thinkingSelection=resolved.thinkingSelection,cliThinkingFromModel=!0))}if(!options.model&&scopedModels.length>0&&!hasExistingSession){let savedProvider=settingsManager.getDefaultProvider(),savedModelId=settingsManager.getDefaultModel(),savedModel=savedProvider&&savedModelId?modelRuntime.getModel(savedProvider,savedModelId):void 0,savedInScope=savedModel?scopedModels.find(sm=>modelsAreEqual(sm.model,savedModel)):void 0;savedInScope?(options.model=savedInScope.model,options.initialModelProvenance="scoped",!parsed.thinking&&savedInScope.thinkingLevel&&(options.thinkingLevel=savedInScope.thinkingLevel,options.thinkingSelection=savedInScope.thinkingSelection)):(options.model=scopedModels[0].model,options.initialModelProvenance="scoped",!parsed.thinking&&scopedModels[0].thinkingLevel&&(options.thinkingLevel=scopedModels[0].thinkingLevel,options.thinkingSelection=scopedModels[0].thinkingSelection))}return parsed.thinking&&(options.thinkingLevel=parsed.thinking,options.thinkingSelection={level:parsed.thinking,source:"explicit"}),scopedModels.length>0&&(options.scopedModels=scopedModels.map(sm=>({model:sm.model,thinkingLevel:sm.thinkingLevel,thinkingSelection:sm.thinkingSelection}))),parsed.noTools?options.noTools="all":parsed.noBuiltinTools&&(options.noTools="builtin"),parsed.tools&&(options.tools=[...parsed.tools]),parsed.excludeTools&&(options.excludeTools=[...parsed.excludeTools]),{options,cliThinkingFromModel,diagnostics}}function resolveCliPaths(cwd,paths){return paths?.map(value2=>isLocalPath(value2)?resolvePath(value2,cwd):value2)}async function promptForMissingSessionCwd(issue,settingsManager){return showStartupSelector(settingsManager,formatMissingSessionCwdPrompt(issue),[{label:"Continue",value:issue.fallbackCwd},{label:"Cancel",value:void 0}])}function applyGrokNeoThemeFallback(settingsManager){if(settingsManager.getThemeSetting()!==void 0)return;let getThemeSetting=settingsManager.getThemeSetting.bind(settingsManager),setTheme2=settingsManager.setTheme.bind(settingsManager),fallbackActive=!0;settingsManager.getThemeSetting=()=>getThemeSetting()??(fallbackActive?"grok-night":void 0),settingsManager.setTheme=theme2=>{fallbackActive=!1,setTheme2(theme2)}}function createCliRuntimeFactory(configuration,local={}){let{parsed,cwd,agentDir,appMode}=configuration,extensionFactories=local.extensionFactories??builtInExtensions,startupSettingsManager=local.startupSettingsManager??SettingsManager.create(cwd,agentDir),startupLoadingIndicator=local.startupLoadingIndicator??createStartupLoadingIndicator({writer:()=>{},isTTY:!1,label:`Loading ${APP_NAME}`}),trustStore=new ProjectTrustStore(agentDir),projectTrustByCwd=new Map,trustPromptMode=parsed.help||parsed.listModels!==void 0||parsed.listTips?"print":toProjectTrustMode(appMode),resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes),createServices=async({cwd:cwd2,agentDir:agentDir2,projectTrustContext,launchProfile,mcpRegistry,isInitialRuntime})=>{let projectTrustDiagnostics=[],cachedProjectTrust=projectTrustByCwd.get(cwd2),hasTrustRequiringResources=hasTrustRequiringProjectResources(cwd2),shouldResolveProjectTrust=parsed.projectTrustOverride===void 0&&cachedProjectTrust===void 0&&hasTrustRequiringResources,projectTrusted=shouldResolveProjectTrust?!1:cachedProjectTrust??parsed.projectTrustOverride??(!hasTrustRequiringResources||trustStore.get(cwd2)===!0),runtimeSettingsManager=SettingsManager.create(cwd2,agentDir2,{projectTrusted});return{services:await createAgentSessionServices({cwd:cwd2,agentDir:agentDir2,settingsManager:runtimeSettingsManager,...local.modelRuntime===void 0?{}:{modelRuntime:local.modelRuntime},mcpRegistry,modelRuntimeSignal:AbortSignal.timeout(15e3),extensionFlagValues:parsed.unknownFlags,resourceLoaderReloadOptions:shouldResolveProjectTrust?{resolveProjectTrust:async({extensionsResult})=>{let trusted=await resolveProjectTrusted({cwd:cwd2,trustStore,trustOverride:parsed.projectTrustOverride,defaultProjectTrust:startupSettingsManager.getDefaultProjectTrust(),extensionsResult,projectTrustContext:projectTrustContext??pauseIndicatorDuringPrompts(createProjectTrustContext({cwd:cwd2,mode:isInitialRuntime?trustPromptMode:toProjectTrustMode(appMode),settingsManager:startupSettingsManager,hasUI:isInitialRuntime&&trustPromptMode==="interactive"}),startupLoadingIndicator),onExtensionError:message=>projectTrustDiagnostics.push({type:"warning",message})});return projectTrustByCwd.set(cwd2,trusted),trusted}}:void 0,resourceLoaderOptions:{sharedHostEnabled:shouldJoinSharedHost(appMode,{enableEnv:isTruthyEnvFlag2(envValue("ENABLE_SHARED_HOST")),settingEnabled:runtimeSettingsManager.getExperimentalSharedHost()}),sessionKind:launchProfile?.sessionKind,sessionContext:launchProfile?.sessionContext,additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,noSkills:parsed.noSkills,noPromptTemplates:parsed.noPromptTemplates,noThemes:parsed.noThemes,noContextFiles:parsed.noContextFiles,systemPrompt:parsed.systemPrompt,appendSystemPrompt:parsed.appendSystemPrompt,extensionFactories}}),projectTrustDiagnostics}};return Object.assign(async({cwd:cwd2,agentDir:agentDir2,sessionManager,sessionStartEvent,projectTrustContext,launchProfile,mcpRegistry})=>{let isInitialRuntime=sessionStartEvent===void 0,markSwitch=label3=>{sessionStartEvent?.reason==="resume"&&time(label3,"switch")},{services,projectTrustDiagnostics}=await createServices({cwd:cwd2,agentDir:agentDir2,...projectTrustContext!==void 0?{projectTrustContext}:{},...launchProfile!==void 0?{launchProfile}:{},...mcpRegistry!==void 0?{mcpRegistry}:{},isInitialRuntime});markSwitch("services");let{settingsManager,modelRuntime,resourceLoader}=services,diagnostics=[...projectTrustDiagnostics,...services.diagnostics,...collectSettingsDiagnosticsWithContext(settingsManager,"runtime creation"),...collectExtensionLoadDiagnostics(resourceLoader.getExtensions().errors)],modelPatterns=getModelNarrowingPatterns({cliPatterns:parsed.models,legacyEnabledPatterns:settingsManager.getEnabledModels()}),scopedModels=modelPatterns&&modelPatterns.length>0?await resolveModelScope(modelPatterns,modelRuntime,{signal:AbortSignal.timeout(15e3)}):[],runtimeParsed=launchProfile===void 0?parsed:{...parsed,...launchProfile.creationModel===void 0?{}:{provider:launchProfile.creationModel.provider,model:launchProfile.creationModel.modelId},...launchProfile.initialThinkingLevel===void 0?{}:{thinking:launchProfile.initialThinkingLevel}},{options:sessionOptions,cliThinkingFromModel,diagnostics:sessionOptionDiagnostics}=buildSessionOptions(runtimeParsed,scopedModels,sessionManager.hasContextMessages(),modelRuntime,settingsManager);diagnostics.push(...sessionOptionDiagnostics),parsed.apiKey&&(sessionOptions.model?await modelRuntime.setRuntimeApiKey(sessionOptions.model.provider,parsed.apiKey):diagnostics.push({type:"error",message:"--api-key requires a model to be specified via --model, --provider/--model, or --models"})),isInitialRuntime&&startupLoadingIndicator.setPhase("opening session"),markSwitch("sessionOptions");let created=await createAgentSessionFromServices({services,sessionManager,sessionStartEvent,model:sessionOptions.model,initialModelProvenance:sessionOptions.initialModelProvenance,thinkingLevel:sessionOptions.thinkingLevel,thinkingSelection:sessionOptions.thinkingSelection,scopedModels:sessionOptions.scopedModels,tools:sessionOptions.tools,excludeTools:sessionOptions.excludeTools,noTools:sessionOptions.noTools,customTools:sessionOptions.customTools,autoTitleSessions:resolveAutoTitleSessions(appMode,parsed,sessionManager.hasContextMessages(),parseClientCapabilities(envValue("RPC_CLIENT_CAPABILITIES")),launchProfile?.autoTitle)});markSwitch("createSession");let cliThinkingOverride=runtimeParsed.thinking!==void 0||cliThinkingFromModel;return created.session.model&&cliThinkingOverride&&created.session.setThinkingLevel(created.session.thinkingLevel),{...created,services,diagnostics}},{prepare:async options=>{await createServices({...options,isInitialRuntime:!0})}})}async function main(args,options){resetTimings(),recordTiming("processStart->main",Math.round(process.uptime()*1e3));let extensionFactories=[...builtInExtensions,...options?.extensionFactories??[]],offlineMode=args.includes("--offline")||isTruthyEnvFlag2(envValue("OFFLINE"));if(offlineMode&&(process.env.PI_OFFLINE="1",process.env.PI_SKIP_VERSION_CHECK="1"),await runAuthCommand(args))return;if(isModelsDiscoverCommand(args)){process.exitCode=await runModelsDiscoverCommand(args.slice(2));return}if(await dispatchInternalSupervisor(args))return;process.platform==="win32"&&cleanupWindowsSelfUpdateQuarantine(getInstallPackageDir());let cwd=process.cwd(),agentDir=getAgentDir(),fromSourceWarning=getFromSourceRealConfigWarning(agentDir);fromSourceWarning&&console.error(source_default.yellow(fromSourceWarning));let bootstrapSettingsManager=SettingsManager.create(cwd,agentDir,{projectTrusted:!1});if(applyHttpProxySettings(bootstrapSettingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(),await dispatchPackageCommand(args,{extensionFactories})){let exitCode=process.exitCode??0;if(process.platform==="win32"&&exitCode===0&&args[0]==="update")return;process.exit(exitCode);return}if(await dispatchConfigCommand(args,{extensionFactories})||await dispatchAppServerCommand(args))return;let hostExitCode=await dispatchHostCommand(args);hostExitCode!==void 0&&process.exit(hostExitCode);let scheduleExitCode=await dispatchScheduleCommand(args);scheduleExitCode!==void 0&&process.exit(scheduleExitCode);let parsed=parseArgs(args);if(parsed.diagnostics.length>0){for(let d of parsed.diagnostics){let color=d.type==="error"?source_default.red:source_default.yellow;console.error(color(`${d.type==="error"?"Error":"Warning"}: ${d.message}`))}parsed.diagnostics.some(d=>d.type==="error")&&process.exit(1)}if(time("parseArgs"),parsed.version&&(console.log(DISPLAY_VERSION),process.exit(0)),parsed.export){let result3;try{let outputPath=parsed.messages.length>0?parsed.messages[0]:void 0;result3=await exportFromFile(parsed.export,outputPath)}catch(error2){let message=error2 instanceof Error?error2.message:"Failed to export session";console.error(source_default.red(`Error: ${message}`)),process.exit(1)}console.log(`Exported to: ${result3}`),process.exit(0)}let appMode=resolveAppMode(parsed,process.stdin.isTTY,process.stdout.isTTY);if(appMode!=="interactive"&&(!isPlainRuntimeMetadataCommand(parsed)||parsed.help&&parsed.mode==="json")&&takeOverStdout(),parsed.mode==="json"){let log=console.log.bind(console);console.log=(...args2)=>console.error(...args2),process.once("exit",()=>{console.log=log})}parsed.mode==="rpc"&&parsed.fileArgs.length>0&&(console.error(source_default.red("Error: @file arguments are not supported in RPC mode")),process.exit(1)),validateForkFlags(parsed),validateRebindFlags(parsed),validateSessionIdFlags(parsed);let{migratedAuthProviders:migratedProviders,deprecationWarnings}=runMigrations(cwd);time("runMigrations");let startupSettingsManager=SettingsManager.create(cwd,agentDir);reportDiagnostics(collectSettingsDiagnosticsWithContext(startupSettingsManager,"startup session lookup"));let resolvedExtensionPaths=resolveCliPaths(cwd,parsed.extensions),resolvedSkillPaths=resolveCliPaths(cwd,parsed.skills),resolvedPromptTemplatePaths=resolveCliPaths(cwd,parsed.promptTemplates),resolvedThemePaths=resolveCliPaths(cwd,parsed.themes);if(isPlainHelpRequest(parsed)){let projectTrusted=resolveHelpProjectTrust(parsed,cwd,agentDir),scope=helpFlagsScope(parsed,cwd,agentDir,projectTrusted),{flags,extensionPaths}=await resolveHelpExtensionFlags({cwd,agentDir,settingsManager:SettingsManager.create(cwd,agentDir,{projectTrusted}),additionalExtensionPaths:resolvedExtensionPaths??[],noExtensions:parsed.noExtensions===!0,...extensionFactories?{extensionFactories}:{}});printHelp(flags),writeHelpFlagsCache({scope,flags,extensionPaths}),printTimings(),process.exit(0)}if(parsed.listTips){let{listTips}=await import("./list-tips-ASETMEFS.js");listTips(),process.exit(0)}if(parsed.listModels!==void 0){let services2=await createAgentSessionServices({cwd,agentDir,settingsManager:startupSettingsManager,extensionFlagValues:parsed.unknownFlags,resourceLoaderOptions:{additionalExtensionPaths:resolvedExtensionPaths,additionalSkillPaths:resolvedSkillPaths,additionalPromptTemplatePaths:resolvedPromptTemplatePaths,additionalThemePaths:resolvedThemePaths,noExtensions:parsed.noExtensions,noSkills:!0,noPromptTemplates:!0,noThemes:!0,noContextFiles:!0,extensionFactories}});reportDiagnostics([...services2.diagnostics,...collectSettingsDiagnosticsWithContext(services2.settingsManager,"model listing"),...collectAuthDiagnostics(services2.authStorage,"model listing")]);let searchPattern2=typeof parsed.listModels=="string"?parsed.listModels:void 0;await listModels(services2.modelRuntime,searchPattern2),process.exit(0)}if(appMode==="interactive"&&!parsed.help&&parsed.listModels===void 0&&!parsed.listTips&&shouldRunFirstTimeSetup()&&(await showFirstTimeSetup(startupSettingsManager),time("firstTimeSetup")),appMode==="interactive"&&parsed.useTheme!==void 0&&startupSettingsManager.applyOverrides({theme:parsed.useTheme}),appMode==="rpc"&&parsed.multiSession){if(options?.extensionFactories?.length)throw new Error("Shared RPC workers require file-backed extensions; inline factories cannot cross isolates");let runtimeConfiguration={parsed,cwd,agentDir,appMode},sessionRuntime=resolveSessionRuntime(parsed),{runMultiSessionHost}=await import("./multi-session-host-5VFMTPY7.js"),hostModelRuntime=sessionRuntime==="worker"?void 0:await ModelRuntime.create({credentials:AuthStorage.create(join79(agentDir,"auth.json")),authPath:join79(agentDir,"auth.json"),agentDir,modelsPath:join79(agentDir,"models.json"),signal:AbortSignal.timeout(15e3)});initTheme(startupSettingsManager.getTheme(),!1),printTimings(),await runMultiSessionHost({agentDir,createRuntime:createCliRuntimeFactory(runtimeConfiguration,{...hostModelRuntime===void 0?{}:{modelRuntime:hostModelRuntime}}),...sessionRuntime==="worker"?{workerConfiguration:runtimeConfiguration}:{},cwd,creationModel:parsed.provider&&parsed.model?{provider:parsed.provider,modelId:parsed.model}:void 0,initialThinkingLevel:parsed.thinking,listen:parsed.listen})}let envSessionDir=process.env[ENV_SESSION_DIR],sessionDir=(parsed.sessionDir?normalizePath(parsed.sessionDir):void 0)??(envSessionDir?expandTildePath(envSessionDir):void 0)??startupSettingsManager.getSessionDir(),sessionManager=await createSessionManager(parsed,cwd,sessionDir,startupSettingsManager,appMode),missingSessionCwdIssue=getMissingSessionCwdIssue(sessionManager,cwd);if(missingSessionCwdIssue)if(appMode==="interactive"){let selectedCwd=await promptForMissingSessionCwd(missingSessionCwdIssue,startupSettingsManager);selectedCwd||process.exit(0),sessionManager=SessionManager.open(missingSessionCwdIssue.sessionFile,sessionDir,selectedCwd)}else console.error(source_default.red(new MissingSessionCwdError(missingSessionCwdIssue).message)),process.exit(1);if(parsed.name!==void 0){let name=normalizeSessionName(parsed.name);name===void 0&&(console.error(source_default.red("Error: --name requires a non-empty value")),process.exit(1)),sessionManager.appendSessionInfo(name)}time("createSessionManager");let sessionCwd=sessionManager.getCwd(),autoTrustOnReloadCwd=parsed.projectTrustOverride===void 0&&!hasTrustRequiringProjectResources(sessionCwd)?sessionCwd:void 0,startupLoadingIndicator=createStartupLoadingIndicator({writer:chunk=>process.stdout.write(chunk),isTTY:process.stdout.isTTY===!0,label:`Loading ${APP_NAME}`});shouldShowStartupLoadingIndicator({appMode,stdoutIsTTY:process.stdout.isTTY===!0,helpRequested:parsed.help===!0})&&(startupLoadingIndicator.start(),startupLoadingIndicator.setPhase("extensions & models"));let createRuntime=createCliRuntimeFactory({parsed,cwd,agentDir,appMode},{extensionFactories,startupSettingsManager,startupLoadingIndicator});time("createRuntime");let runtime=await createAgentSessionRuntime(createRuntime,{cwd:sessionManager.getCwd(),agentDir,sessionManager}).finally(()=>{startupLoadingIndicator.stop()});time("createAgentSessionRuntime");let selectedRuntime=runtime;if(isTruthyEnvFlag2(envValue("DISABLE_SHARED_HOST"))&&console.error(source_default.yellow("DISABLE_SHARED_HOST is obsolete: the shared session host is now off by default. Enable the experimental.sharedHost setting (or set the brand-prefixed ENABLE_SHARED_HOST=1 env flag) to opt in.")),shouldJoinSharedHost(appMode,{enableEnv:isTruthyEnvFlag2(envValue("ENABLE_SHARED_HOST")),settingEnabled:runtime.services.settingsManager.getExperimentalSharedHost()})){let socket=envValue("RPC_SOCKET")??resolve38(agentDir,"rpc","rpc.sock"),{createInteractiveHostRuntime}=await import("./interactive-host-runtime-XDRXCEJ3.js");selectedRuntime=await createInteractiveHostRuntime(runtime,{socket,agentDir,onWarning:warning=>console.error(source_default.yellow(warning.message))})}let{services,session,modelFallbackMessage}=selectedRuntime,{settingsManager,modelRuntime,resourceLoader}=services;setCapabilityOverrides(settingsManager.getTerminalCapabilityOverrides()),applyHttpProxySettings(settingsManager.getGlobalSettings().httpProxy),configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());let loadedExtensions=resourceLoader.getExtensions().extensions,extensionFlags=loadedExtensions.flatMap(extension=>Array.from(extension.flags.values()));parsed.help&&(printHelp(extensionFlags),process.exit(0)),time("extensionFlags"),writeHelpFlagsCache({scope:helpFlagsScope(parsed,cwd,agentDir,settingsManager.isProjectTrusted()),flags:extensionFlags,extensionPaths:loadedExtensions.map(extension=>extension.resolvedPath)}),time("helpFlagsCache");let stdinContent;appMode!=="rpc"&&(stdinContent=await readPipedStdin(),stdinContent!==void 0&&appMode==="interactive"&&(appMode="print")),time("readPipedStdin"),recordProcessLifetime(agentDir,appMode,{supervised:appMode==="rpc"}),time("recordProcessLifetime");let{initialMessage,initialImages,initialTitlePrompt}=await prepareInitialMessage(parsed,settingsManager.getImageAutoResize(),stdinContent);time("prepareInitialMessage"),parsed.grokNeo&&appMode==="interactive"&&applyGrokNeoThemeFallback(settingsManager),initTheme(settingsManager.getTheme(),appMode==="interactive"),time("initTheme"),appMode==="interactive"&&deprecationWarnings.length>0&&await showDeprecationWarnings(deprecationWarnings),time("resolveModelScope"),reportDiagnostics(runtime.diagnostics),appMode!=="interactive"&&reportDiagnostics(collectAuthDiagnostics(services.authStorage,"runtime creation")),runtime.diagnostics.some(diagnostic2=>diagnostic2.type==="error")&&(runtime.diagnostics.some(diagnostic2=>diagnostic2.message.includes("Failed to load extension"))&&console.error(source_default.yellow(EXTENSION_LOAD_FAILURE_HINT)),process.exit(1)),time("createAgentSession"),appMode!=="interactive"&&!session.model&&(console.error(source_default.red(formatNoModelsAvailableMessage())),process.exit(1));let startupBenchmark=isTruthyEnvFlag2(envValue("STARTUP_BENCHMARK"));if(startupBenchmark&&appMode!=="interactive"&&(console.error(source_default.red("Error: PI_STARTUP_BENCHMARK only supports interactive mode")),process.exit(1)),!offlineMode&&appMode==="rpc"){let controller=new AbortController,timeout=setTimeout(()=>controller.abort(),15e3);modelRuntime.refresh({signal:controller.signal}).catch(()=>{}).finally(()=>clearTimeout(timeout))}let stopChildReaper=await startHostChildReaper(appMode==="interactive"?()=>{}:message=>{process.stderr.write(`${message}
2514
+ `)});if(appMode==="rpc"){let{runRpcMode:runRpcMode2}=await import("./rpc-mode-W5P5QMF7.js");printTimings(),await runRpcMode2(runtime)}else if(appMode==="interactive"){let{InteractiveMode:InteractiveMode2}=await import("./interactive-mode-6VFVZKKW.js"),interactiveMode=new InteractiveMode2(selectedRuntime,{migratedProviders,legacyPiEditNotice:legacyPiEditStartupNotice(),modelFallbackMessage,autoTrustOnReloadCwd,initialMessage,initialImages,initialTitlePrompt,initialMessages:parsed.messages,verbose:parsed.verbose,chrome:parsed.grokNeo?"grok":void 0,tuiMode:parsed.tuiMode,initialThemeSetting:parsed.useTheme});startupBenchmark&&(await interactiveMode.init(),time("interactiveMode.init"),await new Promise(resolve42=>setTimeout(resolve42,150)),interactiveMode.stop(),stopThemeWatcher(),printTimings(),process.stdout.writableLength>0&&await new Promise(resolve42=>process.stdout.once("drain",resolve42)),process.stderr.writableLength>0&&await new Promise(resolve42=>process.stderr.once("drain",resolve42)),process.exit(0)),printTimings(),await interactiveMode.run()}else{printTimings();let exitCode=await runPrintMode(runtime,{mode:toPrintOutputMode(appMode),messages:parsed.messages,initialMessage,initialImages});reportDiagnostics(collectAuthDiagnostics(services.authStorage,"print mode")),stopChildReaper(),stopThemeWatcher(),restoreStdout(),exitCode!==0&&(process.exitCode=exitCode);return}}var WIDTH=31,HEIGHT=36,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 getPixel(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=getPixel(x,row*2),lower=getPixel(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 clipped=row.slice(0,availableWidth).join(""),padRight=Math.max(0,width-padding-clipped.length);return` ${theme.fg("accent",clipped)}${" ".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 state=this.effectState,pixelsPerFrame=3;for(let i=0;i<pixelsPerFrame;i++){let row=Math.floor(state.pos/WIDTH),x=state.pos%WIDTH;if(row>=DISPLAY_HEIGHT)return!0;this.currentGrid[row][x]=this.finalGrid[row][x],state.pos++}return!1}tickScanline(){let state=this.effectState;if(state.row>=DISPLAY_HEIGHT)return!0;for(let x=0;x<WIDTH;x++)this.currentGrid[state.row][x]=this.finalGrid[state.row][x];return state.row++,!1}tickRain(){let state=this.effectState,allSettled=!0;this.currentGrid=this.createEmptyGrid();for(let x=0;x<WIDTH;x++){let drop=state.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 state=this.effectState,pixelsPerFrame=15;for(let i=0;i<pixelsPerFrame;i++){if(state.idx>=state.positions.length)return!0;let[row,x]=state.positions[state.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state.idx++}return!1}tickCrt(){let state=this.effectState,midRow=Math.floor(DISPLAY_HEIGHT/2);this.currentGrid=this.createEmptyGrid();let top=midRow-state.expansion,bottom=midRow+state.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 state.expansion++,state.expansion>DISPLAY_HEIGHT}tickGlitch(){let state=this.effectState;return state.phase<state.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}),state.phase++,!1):(this.currentGrid=this.finalGrid.map(row=>[...row]),!0)}tickDissolve(){let state=this.effectState,pixelsPerFrame=20;for(let i=0;i<pixelsPerFrame;i++){if(state.idx>=state.positions.length)return!0;let[row,x]=state.positions[state.idx];this.currentGrid[row][x]=this.finalGrid[row][x],state.idx++}return!1}updateDisplay(){this.gridVersion++}dispose(){this.stopAnimation()}};function formatDuration3(ms){return ms<1e3?`${ms}ms`:ms<6e4?`${(ms/1e3).toFixed(1)}s`:ms<36e5?`${Math.floor(ms/6e4)}m ${Math.floor(ms%6e4/1e3)}s`:ms<864e5?`${Math.floor(ms/36e5)}h ${Math.floor(ms%36e5/6e4)}m`:`${Math.floor(ms/864e5)}d ${Math.floor(ms%864e5/36e5)}h`}var SPACER_DESCRIPTOR={kind:"spacer",text:""};function assertNever3(value2){throw new TypeError(`Unexpected assistant render variant: ${String(value2)}`)}function isVisibleContent(content,providerNativeVisible){switch(content.type){case"text":return!!content.text.trim();case"thinking":return!!content.thinking.trim();case"providerNative":return providerNativeVisible;case"toolCall":return!1;default:return assertNever3(content)}}function createAssistantRenderDescriptors(message,options){let descriptors=[];message.content.some(content=>isVisibleContent(content,!0))&&descriptors.push(SPACER_DESCRIPTOR);let thinkingRunIndex=0;for(let i=0;i<message.content.length;i++){let content=message.content[i];switch(content.type){case"text":{let text2=content.text.trim();text2&&descriptors.push({kind:"text-md",text:text2});break}case"thinking":{let thinkingBlocks=[],hasTiming=!1,isDone=!0,minStart=Number.POSITIVE_INFINITY,maxEnd=Number.NEGATIVE_INFINITY;for(;i<message.content.length;i++){let thinkingContent=message.content[i];if(thinkingContent.type!=="thinking")break;let startedAt=thinkingContent.startedAt;if(startedAt!==void 0){hasTiming=!0,minStart=Math.min(minStart,startedAt);let endedAt=thinkingContent.endedAt;endedAt===void 0?isDone=!1:maxEnd=Math.max(maxEnd,endedAt)}let thinking=thinkingContent.thinking.trim();thinking&&thinkingBlocks.push(thinking)}if(i--,thinkingBlocks.length===0)break;let thinkingRun=thinkingRunIndex++,hidden=options.thinkingVisibilityOverrides?.get(thinkingRun)??options.hideThinkingBlock;if(hasTiming){let label3=isDone?theme.italic(theme.fg("thinkingText",`Thought: ${formatDuration3(Math.max(0,maxEnd-minStart))}`)):theme.italic(theme.fg("thinkingText",options.hiddenThinkingLabel));hidden?descriptors.push({kind:"thinking-label",text:label3,thinkingRun}):descriptors.push({kind:"thinking-label",text:label3,thinkingRun},{kind:"thinking-md",text:thinkingBlocks.join(`
2515
2515
 
2516
2516
  `),thinkingRun})}else{let text2=hidden?theme.italic(theme.fg("thinkingText",options.hiddenThinkingLabel)):thinkingBlocks.join(`
2517
2517