@iaforged/context-code 2.1.7 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/Task.js +1 -1
- package/dist/src/commands/login/login.js +1 -1
- package/dist/src/components/ConsoleOAuthFlow.js +1 -1
- package/dist/src/constants/oauth.js +1 -1
- package/dist/src/context/mailbox.js +1 -1
- package/dist/src/context/voice.js +1 -1
- package/dist/src/hooks/useTerminalSize.js +1 -1
- package/dist/src/ink/Ansi.js +1 -1
- package/dist/src/ink/clearTerminal.js +1 -1
- package/dist/src/ink/colorize.js +1 -1
- package/dist/src/ink/components/App.js +1 -1
- package/dist/src/ink/components/Button.js +1 -1
- package/dist/src/ink/components/ClockContext.js +1 -1
- package/dist/src/ink/components/CursorDeclarationContext.js +1 -1
- package/dist/src/ink/components/Link.js +1 -1
- package/dist/src/ink/components/StdinContext.js +1 -1
- package/dist/src/ink/components/TerminalFocusContext.js +1 -1
- package/dist/src/ink/dom.js +1 -1
- package/dist/src/ink/events/keyboard-event.js +1 -1
- package/dist/src/ink/hit-test.js +1 -1
- package/dist/src/ink/hooks/use-animation-frame.js +1 -1
- package/dist/src/ink/hooks/use-app.js +1 -1
- package/dist/src/ink/hooks/use-input.js +1 -1
- package/dist/src/ink/hooks/use-interval.js +1 -1
- package/dist/src/ink/hooks/use-selection.js +1 -1
- package/dist/src/ink/hooks/use-tab-status.js +1 -1
- package/dist/src/ink/hooks/use-terminal-focus.js +1 -1
- package/dist/src/ink/hooks/use-terminal-title.js +1 -1
- package/dist/src/ink/hooks/use-terminal-viewport.js +1 -1
- package/dist/src/ink/ink.js +1 -1
- package/dist/src/ink/layout/yoga.js +1 -1
- package/dist/src/ink/line-width-cache.js +1 -1
- package/dist/src/ink/log-update.js +1 -1
- package/dist/src/ink/measure-text.js +1 -1
- package/dist/src/ink/output.js +1 -1
- package/dist/src/ink/parse-keypress.js +1 -1
- package/dist/src/ink/reconciler.js +1 -1
- package/dist/src/ink/render-border.js +1 -1
- package/dist/src/ink/render-node-to-output.js +1 -1
- package/dist/src/ink/render-to-screen.js +1 -1
- package/dist/src/ink/renderer.js +1 -1
- package/dist/src/ink/root.js +1 -1
- package/dist/src/ink/screen.js +1 -1
- package/dist/src/ink/searchHighlight.js +1 -1
- package/dist/src/ink/selection.js +1 -1
- package/dist/src/ink/squash-text-nodes.js +1 -1
- package/dist/src/ink/stringWidth.js +1 -1
- package/dist/src/ink/tabstops.js +1 -1
- package/dist/src/ink/terminal.js +1 -1
- package/dist/src/ink/termio/osc.js +1 -1
- package/dist/src/ink/termio/parser.js +1 -1
- package/dist/src/ink/termio/tokenize.js +1 -1
- package/dist/src/ink/useTerminalNotification.js +1 -1
- package/dist/src/ink/warn.js +1 -1
- package/dist/src/ink/widest-line.js +1 -1
- package/dist/src/ink/wrap-text.js +1 -1
- package/dist/src/ink/wrapAnsi.js +1 -1
- package/dist/src/native-ts/yoga-layout/index.js +1 -1
- package/dist/src/schemas/hooks.js +1 -1
- package/dist/src/services/SessionMemory/sessionMemoryUtils.js +1 -1
- package/dist/src/services/api/client.js +1 -1
- package/dist/src/services/api/dumpPrompts.js +1 -1
- package/dist/src/services/api/errorUtils.js +1 -1
- package/dist/src/services/api/promptCacheBreakDetection.js +1 -1
- package/dist/src/services/api/withRetry.js +1 -1
- package/dist/src/services/autoDream/consolidationLock.js +1 -1
- package/dist/src/services/mcp/elicitationHandler.js +1 -1
- package/dist/src/services/mcp/mcpStringUtils.js +1 -1
- package/dist/src/services/mcp/oauthPort.js +1 -1
- package/dist/src/services/mcp/vscodeSdkMcp.js +1 -1
- package/dist/src/services/oauth/client.js +1 -1
- package/dist/src/services/oauth/getOauthProfile.js +1 -1
- package/dist/src/services/objetivo/types.js +1 -1
- package/dist/src/services/rateLimitMocking.js +1 -1
- package/dist/src/services/remoteManagedSettings/syncCacheState.js +1 -1
- package/dist/src/skills/bundledSkills.js +1 -1
- package/dist/src/tasks/DreamTask/DreamTask.js +1 -1
- package/dist/src/tools/AgentTool/agentMemory.js +1 -1
- package/dist/src/tools/AgentTool/forkSubagent.js +1 -1
- package/dist/src/tools/BashTool/BashToolResultMessage.js +1 -1
- package/dist/src/tools/BashTool/UI.js +1 -1
- package/dist/src/tools/BashTool/sedEditParser.js +1 -1
- package/dist/src/tools/BashTool/utils.js +1 -1
- package/dist/src/tools/FileReadTool/imageProcessor.js +1 -1
- package/dist/src/tools/FileReadTool/prompt.js +1 -1
- package/dist/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +1 -1
- package/dist/src/tools/ListMcpResourcesTool/UI.js +1 -1
- package/dist/src/tools/MCPTool/MCPTool.js +1 -1
- package/dist/src/tools/MCPTool/UI.js +1 -1
- package/dist/src/tools/McpAuthTool/McpAuthTool.js +1 -1
- package/dist/src/tools/NotebookEditTool/prompt.js +1 -1
- package/dist/src/tools/PowerShellTool/PowerShellTool.js +1 -1
- package/dist/src/tools/PowerShellTool/UI.js +1 -1
- package/dist/src/tools/PowerShellTool/gitSafety.js +1 -1
- package/dist/src/tools/PowerShellTool/modeValidation.js +1 -1
- package/dist/src/tools/PowerShellTool/pathValidation.js +1 -1
- package/dist/src/tools/PowerShellTool/powershellPermissions.js +1 -1
- package/dist/src/tools/PowerShellTool/powershellSecurity.js +1 -1
- package/dist/src/tools/PowerShellTool/prompt.js +1 -1
- package/dist/src/tools/PowerShellTool/readOnlyValidation.js +1 -1
- package/dist/src/tools/REPLTool/constants.js +1 -1
- package/dist/src/tools/REPLTool/primitiveTools.js +1 -1
- package/dist/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +1 -1
- package/dist/src/tools/ReadMcpResourceTool/UI.js +1 -1
- package/dist/src/tools/ScheduleCronTool/prompt.js +1 -1
- package/dist/src/tools/SkillTool/prompt.js +1 -1
- package/dist/src/tools/TodoWriteTool/TodoWriteTool.js +1 -1
- package/dist/src/tools/ToolSearchTool/prompt.js +1 -1
- package/dist/src/tools/WebSearchTool/prompt.js +1 -1
- package/dist/src/tools/shared/gitOperationTracking.js +1 -1
- package/dist/src/types/permissions.js +1 -1
- package/dist/src/utils/Cursor.js +1 -1
- package/dist/src/utils/QueryGuard.js +1 -1
- package/dist/src/utils/Shell.js +1 -1
- package/dist/src/utils/ShellCommand.js +1 -1
- package/dist/src/utils/activityManager.js +1 -1
- package/dist/src/utils/advisor.js +1 -1
- package/dist/src/utils/appleTerminalBackup.js +1 -1
- package/dist/src/utils/argumentSubstitution.js +1 -1
- package/dist/src/utils/authFileDescriptor.js +1 -1
- package/dist/src/utils/autoUpdater.js +1 -1
- package/dist/src/utils/background/remote/preconditions.js +1 -1
- package/dist/src/utils/background/remote/remoteSession.js +1 -1
- package/dist/src/utils/bash/ShellSnapshot.js +1 -1
- package/dist/src/utils/bash/ast.js +1 -1
- package/dist/src/utils/bash/bashParser.js +1 -1
- package/dist/src/utils/bash/bashPipeCommand.js +1 -1
- package/dist/src/utils/bash/parser.js +1 -1
- package/dist/src/utils/bash/shellQuote.js +1 -1
- package/dist/src/utils/bash/shellQuoting.js +1 -1
- package/dist/src/utils/billing.js +1 -1
- package/dist/src/utils/caCerts.js +1 -1
- package/dist/src/utils/claudeInChrome/common.js +1 -1
- package/dist/src/utils/claudeInChrome/setupPortable.js +1 -1
- package/dist/src/utils/claudemd.js +1 -1
- package/dist/src/utils/collapseBackgroundBashNotifications.js +1 -1
- package/dist/src/utils/collapseReadSearch.js +1 -1
- package/dist/src/utils/completionCache.js +1 -1
- package/dist/src/utils/computerUse/common.js +1 -1
- package/dist/src/utils/concurrentSessions.js +1 -1
- package/dist/src/utils/context.js +1 -1
- package/dist/src/utils/cron.js +1 -1
- package/dist/src/utils/cronTasks.js +1 -1
- package/dist/src/utils/cwd.js +1 -1
- package/dist/src/utils/debug.js +1 -1
- package/dist/src/utils/debugFilter.js +1 -1
- package/dist/src/utils/detectRepository.js +1 -1
- package/dist/src/utils/diagLogs.js +1 -1
- package/dist/src/utils/diff.js +1 -1
- package/dist/src/utils/directMemberMessage.js +1 -1
- package/dist/src/utils/doctorDiagnostic.js +1 -1
- package/dist/src/utils/dxt/helpers.js +1 -1
- package/dist/src/utils/dxt/zip.js +1 -1
- package/dist/src/utils/earlyInput.js +1 -1
- package/dist/src/utils/editor.js +1 -1
- package/dist/src/utils/effort.js +1 -1
- package/dist/src/utils/embeddedTools.js +1 -1
- package/dist/src/utils/envDynamic.js +1 -1
- package/dist/src/utils/envUtils.js +1 -1
- package/dist/src/utils/execFileNoThrowPortable.js +1 -1
- package/dist/src/utils/execSyncWrapper.js +1 -1
- package/dist/src/utils/exportRenderer.js +1 -1
- package/dist/src/utils/extraUsage.js +1 -1
- package/dist/src/utils/fastMode.js +1 -1
- package/dist/src/utils/fileOperationAnalytics.js +1 -1
- package/dist/src/utils/fileRead.js +1 -1
- package/dist/src/utils/findExecutable.js +1 -1
- package/dist/src/utils/format.js +1 -1
- package/dist/src/utils/frontmatterParser.js +1 -1
- package/dist/src/utils/fsOperations.js +1 -1
- package/dist/src/utils/fullscreen.js +1 -1
- package/dist/src/utils/genericProcessUtils.js +1 -1
- package/dist/src/utils/getWorktreePaths.js +1 -1
- package/dist/src/utils/git/gitConfigParser.js +1 -1
- package/dist/src/utils/git/gitFilesystem.js +1 -1
- package/dist/src/utils/git/gitignore.js +1 -1
- package/dist/src/utils/gitDiff.js +1 -1
- package/dist/src/utils/gitSettings.js +1 -1
- package/dist/src/utils/glob.js +1 -1
- package/dist/src/utils/gracefulShutdown.js +1 -1
- package/dist/src/utils/groupToolUses.js +1 -1
- package/dist/src/utils/handlePromptSubmit.js +1 -1
- package/dist/src/utils/hash.js +1 -1
- package/dist/src/utils/hooks/fileChangedWatcher.js +1 -1
- package/dist/src/utils/hooks/hooksSettings.js +1 -1
- package/dist/src/utils/hooks/registerSkillHooks.js +1 -1
- package/dist/src/utils/hooks/sessionHooks.js +1 -1
- package/dist/src/utils/http.js +1 -1
- package/dist/src/utils/hyperlink.js +1 -1
- package/dist/src/utils/ide.js +1 -1
- package/dist/src/utils/idePathConversion.js +1 -1
- package/dist/src/utils/imagePaste.js +1 -1
- package/dist/src/utils/imageResizer.js +1 -1
- package/dist/src/utils/imageStore.js +1 -1
- package/dist/src/utils/inProcessTeammateHelpers.js +1 -1
- package/dist/src/utils/ink.js +1 -1
- package/dist/src/utils/jetbrains.js +1 -1
- package/dist/src/utils/json.js +1 -1
- package/dist/src/utils/listSessionsImpl.js +1 -1
- package/dist/src/utils/localInstaller.js +1 -1
- package/dist/src/utils/lockfile.js +1 -1
- package/dist/src/utils/logoV2Utils.js +1 -1
- package/dist/src/utils/markdown.js +1 -1
- package/dist/src/utils/mcp/dateTimeParser.js +1 -1
- package/dist/src/utils/mcpOutputStorage.js +1 -1
- package/dist/src/utils/mcpValidation.js +1 -1
- package/dist/src/utils/memoize.js +1 -1
- package/dist/src/utils/memory/types.js +1 -1
- package/dist/src/utils/memoryFileDetection.js +1 -1
- package/dist/src/utils/messageQueueManager.js +1 -1
- package/dist/src/utils/messages/mappers.js +1 -1
- package/dist/src/utils/messages/systemInit.js +1 -1
- package/dist/src/utils/model/antModels.js +1 -1
- package/dist/src/utils/model/check1mAccess.js +1 -1
- package/dist/src/utils/model/contextWindowUpgradeCheck.js +1 -1
- package/dist/src/utils/model/model.js +1 -1
- package/dist/src/utils/model/modelAllowlist.js +1 -1
- package/dist/src/utils/model/modelCapabilities.js +1 -1
- package/dist/src/utils/model/modelOptions.js +1 -1
- package/dist/src/utils/model/modelStrings.js +1 -1
- package/dist/src/utils/model/providerBaseUrls.js +1 -1
- package/dist/src/utils/model/providerCatalog.js +1 -1
- package/dist/src/utils/model/providerModels.js +1 -1
- package/dist/src/utils/model/providerProfiles.js +1 -1
- package/dist/src/utils/model/providerProfilesDb.js +1 -1
- package/dist/src/utils/model/providerSwitch.js +1 -1
- package/dist/src/utils/model/providers.js +1 -1
- package/dist/src/utils/modelCost.js +1 -1
- package/dist/src/utils/modifiers.js +1 -1
- package/dist/src/utils/mtls.js +1 -1
- package/dist/src/utils/nativeInstaller/download.js +1 -1
- package/dist/src/utils/nativeInstaller/installer.js +1 -1
- package/dist/src/utils/nativeInstaller/packageManagers.js +1 -1
- package/dist/src/utils/nativeInstaller/pidLock.js +1 -1
- package/dist/src/utils/notebook.js +1 -1
- package/dist/src/utils/pasteStore.js +1 -1
- package/dist/src/utils/path.js +1 -1
- package/dist/src/utils/permissions/PermissionMode.js +1 -1
- package/dist/src/utils/permissions/PermissionPromptToolResultSchema.js +1 -1
- package/dist/src/utils/permissions/PermissionUpdate.js +1 -1
- package/dist/src/utils/permissions/PermissionUpdateSchema.js +1 -1
- package/dist/src/utils/permissions/autoModeState.js +1 -1
- package/dist/src/utils/permissions/bypassPermissionsKillswitch.js +1 -1
- package/dist/src/utils/permissions/filesystem.js +1 -1
- package/dist/src/utils/permissions/getNextPermissionMode.js +1 -1
- package/dist/src/utils/permissions/pathValidation.js +1 -1
- package/dist/src/utils/permissions/permissionRuleParser.js +1 -1
- package/dist/src/utils/permissions/permissionsDb.js +1 -1
- package/dist/src/utils/permissions/permissionsLoader.js +1 -1
- package/dist/src/utils/permissions/shellRuleMatching.js +1 -1
- package/dist/src/utils/planModeV2.js +1 -1
- package/dist/src/utils/plans.js +1 -1
- package/dist/src/utils/platform.js +1 -1
- package/dist/src/utils/plugins/addDirPluginSettings.js +1 -1
- package/dist/src/utils/plugins/cacheUtils.js +1 -1
- package/dist/src/utils/plugins/dependencyResolver.js +1 -1
- package/dist/src/utils/plugins/fetchTelemetry.js +1 -1
- package/dist/src/utils/plugins/gitAvailability.js +1 -1
- package/dist/src/utils/plugins/hintRecommendation.js +1 -1
- package/dist/src/utils/plugins/installedPluginsManager.js +1 -1
- package/dist/src/utils/plugins/loadPluginAgents.js +1 -1
- package/dist/src/utils/plugins/loadPluginCommands.js +1 -1
- package/dist/src/utils/plugins/loadPluginHooks.js +1 -1
- package/dist/src/utils/plugins/loadPluginOutputStyles.js +1 -1
- package/dist/src/utils/plugins/lspPluginIntegration.js +1 -1
- package/dist/src/utils/plugins/lspRecommendation.js +1 -1
- package/dist/src/utils/plugins/managedPlugins.js +1 -1
- package/dist/src/utils/plugins/marketplaceHelpers.js +1 -1
- package/dist/src/utils/plugins/marketplaceManager.js +1 -1
- package/dist/src/utils/plugins/mcpPluginIntegration.js +1 -1
- package/dist/src/utils/plugins/mcpbHandler.js +1 -1
- package/dist/src/utils/plugins/officialMarketplaceGcs.js +1 -1
- package/dist/src/utils/plugins/officialMarketplaceStartupCheck.js +1 -1
- package/dist/src/utils/plugins/orphanedPluginFilter.js +1 -1
- package/dist/src/utils/plugins/performStartupChecks.js +1 -1
- package/dist/src/utils/plugins/pluginAutoupdate.js +1 -1
- package/dist/src/utils/plugins/pluginBlocklist.js +1 -1
- package/dist/src/utils/plugins/pluginDirectories.js +1 -1
- package/dist/src/utils/plugins/pluginFlagging.js +1 -1
- package/dist/src/utils/plugins/pluginInstallationHelpers.js +1 -1
- package/dist/src/utils/plugins/pluginLoader.js +1 -1
- package/dist/src/utils/plugins/pluginOptionsStorage.js +1 -1
- package/dist/src/utils/plugins/pluginPolicy.js +1 -1
- package/dist/src/utils/plugins/pluginStartupCheck.js +1 -1
- package/dist/src/utils/plugins/pluginVersioning.js +1 -1
- package/dist/src/utils/plugins/reconciler.js +1 -1
- package/dist/src/utils/plugins/refresh.js +1 -1
- package/dist/src/utils/plugins/schemas.js +1 -1
- package/dist/src/utils/plugins/walkPluginMarkdown.js +1 -1
- package/dist/src/utils/plugins/zipCache.js +1 -1
- package/dist/src/utils/powershell/parser.js +1 -1
- package/dist/src/utils/processUserInput/processBashCommand.js +1 -1
- package/dist/src/utils/processUserInput/processSlashCommand.js +1 -1
- package/dist/src/utils/processUserInput/processTextPrompt.js +1 -1
- package/dist/src/utils/processUserInput/processUserInput.js +1 -1
- package/dist/src/utils/profilerBase.js +1 -1
- package/dist/src/utils/promptCategory.js +1 -1
- package/dist/src/utils/promptEditor.js +1 -1
- package/dist/src/utils/promptShellExecution.js +1 -1
- package/dist/src/utils/proxy.js +1 -1
- package/dist/src/utils/queryHelpers.js +1 -1
- package/dist/src/utils/queryProfiler.js +1 -1
- package/dist/src/utils/queueProcessor.js +1 -1
- package/dist/src/utils/readFileInRange.js +1 -1
- package/dist/src/utils/releaseNotes.js +1 -1
- package/dist/src/utils/renderOptions.js +1 -1
- package/dist/src/utils/ripgrep.js +1 -1
- package/dist/src/utils/sandbox/sandbox-adapter.js +1 -1
- package/dist/src/utils/sdkEventQueue.js +1 -1
- package/dist/src/utils/secureStorage/index.js +1 -1
- package/dist/src/utils/secureStorage/macOsKeychainHelpers.js +1 -1
- package/dist/src/utils/secureStorage/macOsKeychainStorage.js +1 -1
- package/dist/src/utils/secureStorage/plainTextStorage.js +1 -1
- package/dist/src/utils/secureStorage/sqliteStorage.js +1 -1
- package/dist/src/utils/sessionEnvironment.js +1 -1
- package/dist/src/utils/sessionIngressAuth.js +1 -1
- package/dist/src/utils/sessionRestore.js +1 -1
- package/dist/src/utils/sessionStart.js +1 -1
- package/dist/src/utils/sessionTitle.js +1 -1
- package/dist/src/utils/settings/managedPath.js +1 -1
- package/dist/src/utils/settings/mdm/rawRead.js +1 -1
- package/dist/src/utils/settings/mdm/settings.js +1 -1
- package/dist/src/utils/settings/permissionValidation.js +1 -1
- package/dist/src/utils/settings/pluginOnlyPolicy.js +1 -1
- package/dist/src/utils/settings/schemaOutput.js +1 -1
- package/dist/src/utils/settings/settings.js +1 -1
- package/dist/src/utils/settings/types.js +1 -1
- package/dist/src/utils/settings/validateEditTool.js +1 -1
- package/dist/src/utils/settings/validation.js +1 -1
- package/dist/src/utils/shell/bashProvider.js +1 -1
- package/dist/src/utils/shell/powershellDetection.js +1 -1
- package/dist/src/utils/shell/powershellProvider.js +1 -1
- package/dist/src/utils/shell/readOnlyCommandValidation.js +1 -1
- package/dist/src/utils/shell/resolveDefaultShell.js +1 -1
- package/dist/src/utils/shell/shellToolUtils.js +1 -1
- package/dist/src/utils/shell/specPrefix.js +1 -1
- package/dist/src/utils/shellConfig.js +1 -1
- package/dist/src/utils/sideQuestion.js +1 -1
- package/dist/src/utils/skills/skillChangeDetector.js +1 -1
- package/dist/src/utils/slashCommandParsing.js +1 -1
- package/dist/src/utils/sliceAnsi.js +1 -1
- package/dist/src/utils/slowOperations.js +1 -1
- package/dist/src/utils/standaloneAgent.js +1 -1
- package/dist/src/utils/startupProfiler.js +1 -1
- package/dist/src/utils/staticRender.js +1 -1
- package/dist/src/utils/status.js +1 -1
- package/dist/src/utils/statusNoticeDefinitions.js +1 -1
- package/dist/src/utils/suggestions/commandSuggestions.js +1 -1
- package/dist/src/utils/suggestions/directoryCompletion.js +1 -1
- package/dist/src/utils/suggestions/shellHistoryCompletion.js +1 -1
- package/dist/src/utils/suggestions/skillUsageTracking.js +1 -1
- package/dist/src/utils/suggestions/slackChannelSuggestions.js +1 -1
- package/dist/src/utils/swarm/backends/detection.js +1 -1
- package/dist/src/utils/swarm/permissionSync.js +1 -1
- package/dist/src/utils/swarm/reconnection.js +1 -1
- package/dist/src/utils/swarm/spawnUtils.js +1 -91
- package/dist/src/utils/swarm/teammateInit.js +1 -1
- package/dist/src/utils/systemDirectories.js +1 -1
- package/dist/src/utils/systemPrompt.js +1 -1
- package/dist/src/utils/systemTheme.js +1 -1
- package/dist/src/utils/task/TaskOutput.js +1 -1
- package/dist/src/utils/task/diskOutput.js +1 -1
- package/dist/src/utils/tasks.js +1 -1
- package/dist/src/utils/teamDiscovery.js +1 -1
- package/dist/src/utils/teamMemoryOps.js +1 -1
- package/dist/src/utils/teammateMailbox.js +1 -1
- package/dist/src/utils/telemetry/betaSessionTracing.js +1 -1
- package/dist/src/utils/telemetry/bigqueryExporter.js +1 -1
- package/dist/src/utils/telemetry/events.js +1 -1
- package/dist/src/utils/telemetry/instrumentation.js +1 -1
- package/dist/src/utils/telemetry/logger.js +1 -1
- package/dist/src/utils/telemetry/perfettoTracing.js +1 -1
- package/dist/src/utils/telemetry/pluginTelemetry.js +1 -1
- package/dist/src/utils/telemetry/sessionTracing.js +1 -1
- package/dist/src/utils/telemetryAttributes.js +1 -1
- package/dist/src/utils/teleport/api.js +1 -1
- package/dist/src/utils/teleport/environments.js +1 -1
- package/dist/src/utils/teleport/gitBundle.js +1 -1
- package/dist/src/utils/teleport.js +1 -1
- package/dist/src/utils/tempfile.js +1 -1
- package/dist/src/utils/terminal.js +1 -1
- package/dist/src/utils/terminalPanel.js +1 -1
- package/dist/src/utils/textHighlighting.js +1 -1
- package/dist/src/utils/theme.js +1 -1
- package/dist/src/utils/themes/bootstrap.js +1 -1
- package/dist/src/utils/themes/loader.js +1 -1
- package/dist/src/utils/thinking.js +1 -1
- package/dist/src/utils/tmuxSocket.js +1 -1
- package/dist/src/utils/tokens.js +1 -1
- package/dist/src/utils/toolPool.js +1 -1
- package/dist/src/utils/toolResultStorage.js +1 -1
- package/dist/src/utils/transcriptSearch.js +1 -1
- package/dist/src/utils/truncate.js +1 -1
- package/dist/src/utils/ultraplan/keyword.js +1 -1
- package/dist/src/utils/unaryLogging.js +1 -1
- package/dist/src/utils/undercover.js +1 -1
- package/dist/src/utils/user.js +1 -1
- package/dist/src/utils/userPromptKeywords.js +1 -1
- package/dist/src/utils/which.js +1 -1
- package/dist/src/utils/windowsPaths.js +1 -1
- package/dist/src/utils/worktree.js +1 -1
- package/dist/src/utils/zodToJsonSchema.js +1 -1
- package/dist/src/vim/operators.js +1 -1
- package/dist/src/vim/textObjects.js +1 -1
- package/dist/src/vim/transitions.js +1 -1
- package/dist/src/voice/voiceModeEnabled.js +1 -1
- package/dist/src/webapp/auth.js +1 -1
- package/dist/src/webapp/tunnel.js +1 -1
- package/dist/src/whatsapp/bridge.js +1 -1
- package/dist/src/whatsapp/mirror.js +1 -1
- package/package.json +41 -3
package/dist/src/Task.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{randomBytes as t}from"crypto";import{getTaskOutputPath as e}from"./utils/task/diskOutput.js";export function isTerminalTaskStatus(t){return"completed"===t||"failed"===t||"killed"===t}const o={local_bash:"b",local_agent:"a",remote_agent:"r",in_process_teammate:"t",local_workflow:"w",monitor_mcp:"m",dream:"d"};export function generateTaskId(e){const
|
|
1
|
+
import{randomBytes as t}from"crypto";import{getTaskOutputPath as e}from"./utils/task/diskOutput.js";export function isTerminalTaskStatus(t){return"completed"===t||"failed"===t||"killed"===t}const o={local_bash:"b",local_agent:"a",remote_agent:"r",in_process_teammate:"t",local_workflow:"w",monitor_mcp:"m",dream:"d"};const r="0123456789abcdefghijklmnopqrstuvwxyz";export function generateTaskId(e){const n=function(t){return o[t]??"x"}(e),a=t(8);let i=n;for(let t=0;t<8;t++)i+=r[a[t]%36];return i}export function createTaskStateBase(t,o,r,n){return{id:t,type:o,status:"pending",description:r,toolUseId:n,startTime:Date.now(),outputFile:e(t),outputOffset:0,notified:!1}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as r,jsxs as o}from"react/jsx-runtime";import{resetCostState as t}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as i,enrollTrustedDevice as n}from"../../bridge/trustedDevice.js";import{ConfigurableShortcutHint as s}from"../../components/ConfigurableShortcutHint.js";import{ConsoleOAuthFlow as a}from"../../components/ConsoleOAuthFlow.js";import{Dialog as m}from"../../components/design-system/Dialog.js";import{useMainLoopModel as l}from"../../hooks/useMainLoopModel.js";import{Text as
|
|
1
|
+
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as r,jsxs as o}from"react/jsx-runtime";import{resetCostState as t}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as i,enrollTrustedDevice as n}from"../../bridge/trustedDevice.js";import{ConfigurableShortcutHint as s}from"../../components/ConfigurableShortcutHint.js";import{ConsoleOAuthFlow as a}from"../../components/ConsoleOAuthFlow.js";import{Dialog as m}from"../../components/design-system/Dialog.js";import{useMainLoopModel as l}from"../../hooks/useMainLoopModel.js";import{Text as c}from"../../ink.js";import{refreshGrowthBookAfterAuthChange as d}from"../../services/analytics/growthbook.js";import{refreshPolicyLimits as p}from"../../services/policyLimits/index.js";import{refreshRemoteManagedSettings as u}from"../../services/remoteManagedSettings/index.js";import{stripSignatureBlocks as g}from"../../utils/messages.js";import{checkAndDisableAutoModeIfNeeded as f,checkAndDisableBypassPermissionsIfNeeded as P,resetAutoModeGateCheck as v,resetBypassPermissionsCheck as M}from"../../utils/permissions/bypassPermissionsKillswitch.js";import{getAPIProvider as N}from"../../utils/model/providers.js";import{switchProviderPreference as j}from"../../utils/model/providerSwitch.js";import{resetUserCache as x}from"../../utils/user.js";import{applySuccessfulLogin as h,isCoreAuthEnabled as S,parseLoginProfileName as I}from"../../core/auth/loginCore.js";export async function call(o,s,a){const m=I(a);return r(Login,{profileName:m,onDone:async(r,a,l,c)=>{if(s.onChangeAPIKey(),s.setMessages(g),r){if(S()){const r=h({context:s,profileName:m,previousModel:a,previousProvider:l,targetProvider:c,transcriptClassifierEnabled:e("TRANSCRIPT_CLASSIFIER")});return r.shouldOpenModelPicker?void o(r.message,{nextInput:"/model",submitNextInput:!0}):void o(r.message)}const r=j("openai"===c?{currentModel:a,currentProvider:l,targetProvider:"openai",targetProfileName:m}:"openrouter"===c?{currentModel:a,currentProvider:l,targetProvider:"openrouter",targetProfileName:m}:"ollama"===c?{currentModel:a,currentProvider:l,targetProvider:"ollama",targetProfileName:m}:"ollama-cloud"===c?{currentModel:a,currentProvider:l,targetProvider:"ollama-cloud",targetProfileName:m}:"gemini-api"===c?{currentModel:a,currentProvider:l,targetProvider:"gemini-api",targetProfileName:m}:"gemini-google"===c?{currentModel:a,currentProvider:l,targetProvider:"gemini-google",targetProfileName:m}:"zai"===c?{currentModel:a,currentProvider:l,targetProvider:"zai",targetProfileName:m}:"minimax"===c?{currentModel:a,currentProvider:l,targetProvider:"minimax",targetProfileName:m}:"nvidia"===c?{currentModel:a,currentProvider:l,targetProvider:"nvidia",targetProfileName:m}:"deepseek"===c?{currentModel:a,currentProvider:l,targetProvider:"deepseek",targetProfileName:m}:"custom-openai"===c?{currentModel:a,currentProvider:l,targetProvider:"custom-openai",targetProfileName:m}:"custom-anthropic"===c?{currentModel:a,currentProvider:l,targetProvider:"custom-anthropic",targetProfileName:m}:{currentModel:a,currentProvider:l,targetProvider:"claude",targetProfileName:m});t(),u(),p(),x(),d(),i(),n(),M();const g=s.getAppState();if(P(g.toolPermissionContext,s.setAppState),e("TRANSCRIPT_CLASSIFIER")&&(v(),f(g.toolPermissionContext,s.setAppState,g.fastMode)),s.setAppState(e=>({...e,mainLoopModel:r,mainLoopModelForSession:r,authVersion:e.authVersion+1})),!r)return void o(m?`Inicio de sesion exitoso en el perfil "${m}". Selecciona ahora el modelo para este perfil.`:"Inicio de sesion exitoso. Selecciona ahora el modelo para este perfil.",{nextInput:"/model",submitNextInput:!0})}o(r?"Inicio de sesión exitoso":"Acceso interrumpido")}})}export function Login(e){const t=l(),i=N();return r(m,{title:"Iniciar sesión",onCancel:()=>e.onDone(!1,t,i),color:"permission",inputGuide:e=>e.pending?o(c,{children:["Presiona ",e.keyName," de nuevo para salir"]}):r(s,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancelar"}),children:r(a,{onDone:r=>e.onDone(!0,t,i,r),startingMessage:e.startingMessage,profileName:e.profileName})})}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useCallback as i,useEffect as n,useRef as a,useState as s}from"react";import{logEvent as l}from"../services/analytics/index.js";import{installOAuthTokens as c}from"../cli/handlers/auth.js";import{useTerminalSize as d}from"../hooks/useTerminalSize.js";import{setClipboard as u}from"../ink/termio/osc.js";import{useTerminalNotification as m}from"../ink/useTerminalNotification.js";import{Box as p,Link as h,Text as g}from"../ink.js";import{useKeybinding as f}from"../keybindings/useKeybinding.js";import{getSSLErrorHint as _}from"../services/api/errorUtils.js";import{sendNotification as v}from"../services/notifier.js";import{OAuthService as y}from"../services/oauth/index.js";import{getOAuthRequestDetails as C}from"../services/oauth/client.js";import{checkGeminiGoogleCredentialsValid as A,getOauthAccountInfo as b,saveGeminiGoogleOAuthTokens as x,saveProviderApiKey as k,validateForceLoginOrg as O}from"../utils/auth.js";import{startGeminiCliOAuthFlow as P}from"../services/oauth/geminiCli.js";import{resolveProviderProfile as I}from"../utils/model/providerProfiles.js";import{logError as S}from"../utils/log.js";import{getVisibleProvider as D}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as T,setProviderBaseUrl as w}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as j}from"../utils/settings/settings.js";import{Select as M}from"./CustomSelect/select.js";import{KeyboardShortcutHint as U}from"./design-system/KeyboardShortcutHint.js";import{Spinner as R}from"./Spinner.js";import G from"./TextInput.js";const E=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console"];function sortLoginProviderOptions(e){const o=new Map(E.map((e,o)=>[e,o]));return[...e].sort((e,r)=>(o.get(e.value)??Number.MAX_SAFE_INTEGER)-(o.get(r.value)??Number.MAX_SAFE_INTEGER))}const B="Pega aqui el codigo si se solicita > ";function formatOAuthDebugDetails(e,o){if("openai"!==e)return"";const r=C({provider:e,port:o,isManual:!1});return[`authorize=${r.authorizeUrl}`,`redirect_uri=${r.redirectUri}`,`scope=${r.scopes.join(" ")}`].join("\n")}export function ConsoleOAuthFlow({onDone:r,startingMessage:t,mode:C="login",forceLoginMethod:b,profileName:T}){const M=j()||{},R=b??M.forceLoginMethod,G=M.forceLoginOrgUUID,E="claudeai"===R?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===R?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===R?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,B=m(),[L,K]=s(()=>"setup-token"===C||"claudeai"===R||"console"===R||"openai"===R?{state:"ready_to_start"}:{state:"idle"}),[z,N]=s(""),[F,$]=s(0),[W]=s(()=>new y),[V,X]=s(()=>"openai"===R?"openai":"anthropic"),[Y,q]=s(()=>"setup-token"===C||"claudeai"===R),[H,Z]=s(!1),[J,Q]=s(!1),ee=d().columns-37-1,[oe,re]=s(""),[te,ie]=s(0),[ne,ae]=s(""),[se,le]=s(0);n(()=>{"claudeai"===R?l("tengu_oauth_claudeai_forced",{}):"console"===R&&l("tengu_oauth_console_forced",{})},[R]),n(()=>{if("about_to_retry"===L.state){const e=setTimeout(K,1e3,L.nextState);return()=>clearTimeout(e)}},[L]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},{context:"Confirmation",isActive:"success"===L.state&&"setup-token"!==C}),n(()=>{if("success"===L.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},800);return()=>clearTimeout(e)}},[L.state,V,Y,r]),f("confirm:yes",()=>{K({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===L.state}),f("confirm:yes",()=>{ue()},{context:"Confirmation",isActive:"provider_google_setup"===L.state}),f("confirm:yes",()=>{"error"===L.state&&L.toRetry&&(N(""),K({state:"about_to_retry",nextState:L.toRetry}))},{context:"Confirmation",isActive:"error"===L.state&&!!L.toRetry}),f("cancel",()=>{K({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===L.state||"provider_local_setup"===L.state||"provider_google_setup"===L.state||"error"===L.state}),n(()=>{"c"===z&&"waiting_for_login"===L.state&&H&&!J&&(u(L.url).then(e=>{e&&process.stdout.write(e),Q(!0),setTimeout(Q,2e3,!1)}),N(""))},[z,L,H,J]);const ce=i(async(e,o)=>{const t=e.trim();if(t)try{await k(o,t),re(""),ie(0);const e=D(o).label;v({message:`API key de ${e} guardada`,notificationType:"auth_success"},B),r(o)}catch(e){S(e),K({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else K({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,B]),de=i((e,o)=>{const t=e.trim();if(t)try{const e=w(o,t);ae(e),le(0),v({message:`URL de ${D(o).label} guardada`,notificationType:"auth_success"},B),r(o)}catch(e){S(e),K({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else K({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,B]),ue=i(async()=>{K({state:"provider_google_auth_running"});try{if(await A())return void r("gemini-google");const e=await P();x(e);if(!await A())return v({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},B),void r("gemini-google");v({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},B),r("gemini-google")}catch(e){S(e),K({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,B]),me=i(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:Y,provider:V});const e=await W.startOAuthFlow(async e=>{K({state:"waiting_for_login",url:e}),setTimeout(Z,3e3,!0)},{loginWithClaudeAi:Y,provider:V,inferenceOnly:"setup-token"===C,expiresIn:"setup-token"===C?31536e3:void 0,orgUUID:G}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=_(e),t=W.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";throw K({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(i?`\n${i}`:""):e.message),toRetry:"setup-token"===C?{state:"ready_to_start"}:{state:"idle"}}),l("tengu_oauth_token_exchange_error",{error:e.message,ssl_error:null!==r}),e});if("setup-token"===C)K({state:"success",token:e.accessToken});else{K({state:"creating_api_key"});const o=T?I("openai"===V?"openai":"anthropic",T):void 0;if(await c(e,V,o?.id),"anthropic"===V){const e=await O();if(!e.valid)throw new Error(e.message)}K({state:"success"}),v({message:"openai"===V?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},B)}}catch(e){const o=e.message,r=_(e),t=W.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";K({state:"error",message:r??("openai"===V&&i&&!o.includes("redirect_uri=")?`${o}\n${i}`:o),toRetry:{state:"setup-token"===C?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[V,W,Z,Y,C,G,B]),pe=a(!1);return n(()=>{"ready_to_start"!==L.state||pe.current||(pe.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},me,pe))},[L.state,me]),n(()=>{if("setup-token"===C&&"success"===L.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(V)},500,Y,r,V);return()=>clearTimeout(e)}},[C,L,Y,r,V]),n(()=>()=>{W.cleanup()},[W]),e(p,{flexDirection:"column",gap:1,children:["waiting_for_login"===L.state&&H&&e(p,{flexDirection:"column",gap:1,paddingBottom:1,children:[e(p,{paddingX:1,children:[e(g,{dimColor:!0,children:["Browser didn't open? Use the url below to sign in"," "]}),o(g,J?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o(U,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:L.url,children:o(g,{dimColor:!0,children:L.url})})]},"urlToCopy"),"setup-token"===C&&"success"===L.state&&L.token&&e(p,{flexDirection:"column",gap:1,paddingTop:1,children:[o(g,{color:"success",children:"✓ Long-lived authentication token created successfully!"}),e(p,{flexDirection:"column",gap:1,children:[o(g,{children:"Your OAuth token (valid for 1 year):"}),o(g,{color:"warning",children:L.token}),o(g,{dimColor:!0,children:"Store this token securely. You won't be able to see it again."}),o(g,{dimColor:!0,children:"Use this token by setting: export CONTEXT_CODE_OAUTH_TOKEN=<token>"})]})]},"tokenOutput"),o(p,{paddingLeft:1,flexDirection:"column",gap:1,children:o(OAuthStatusMessage,{oauthStatus:L,oauthProvider:V,mode:C,startingMessage:t,forcedMethodMessage:E,showPastePrompt:H,pastedCode:z,setPastedCode:N,cursorOffset:F,setCursorOffset:$,textInputColumns:ee,handleSubmitCode:async function(e,o){try{const[r,t]=e.split("#");if(!r||!t)return void K({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),W.handleManualAuthCodeInput({authorizationCode:r,state:t})}catch(e){S(e),K({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:K,setLoginWithClaudeAi:q,setOAuthProvider:X,providerApiKey:oe,setProviderApiKey:re,providerApiKeyCursorOffset:te,setProviderApiKeyCursorOffset:ie,handleProviderApiKeySubmit:ce,providerBaseUrl:ne,setProviderBaseUrlInput:ae,providerBaseUrlCursorOffset:se,setProviderBaseUrlCursorOffset:le,handleProviderBaseUrlSubmit:de,onDone:r})})]})}function OAuthStatusMessage(i){const n=t(68),{oauthStatus:a,oauthProvider:s,mode:c,startingMessage:d,forcedMethodMessage:u,showPastePrompt:m,pastedCode:f,setPastedCode:_,cursorOffset:v,setCursorOffset:y,textInputColumns:C,handleSubmitCode:A,setOAuthStatus:x,setLoginWithClaudeAi:k,setOAuthProvider:O,providerApiKey:P,setProviderApiKey:I,providerApiKeyCursorOffset:S,setProviderApiKeyCursorOffset:w,handleProviderApiKeySubmit:j,providerBaseUrl:U,setProviderBaseUrlInput:E,providerBaseUrlCursorOffset:L,setProviderBaseUrlCursorOffset:K,handleProviderBaseUrlSubmit:z,onDone:N}=i;switch(a.state){case"idle":{const r=d||"Context Code puede usarse con tu suscripción de Claude, la facturación de Anthropic Console o OpenAI / Codex OAuth.";let t,i,a,s,c,u,m;return n[0]!==r?(t=o(g,{bold:!0,children:r}),n[0]=r,n[1]=t):t=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(i=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=i):i=n[2],n[3]===Symbol.for("react.memo_cache_sentinel")?(a={label:e(g,{children:["Claude account with subscription ·"," ",o(g,{dimColor:!0,children:"Pro, Max, Team, or Enterprise"}),!1,"\n"]}),value:"claudeai"},n[3]=a):a=n[3],n[4]===Symbol.for("react.memo_cache_sentinel")?(s={label:e(g,{children:["Anthropic Console account ·"," ",o(g,{dimColor:!0,children:"API usage billing"}),"\n"]}),value:"console"},n[4]=s):s=n[4],n[5]===Symbol.for("react.memo_cache_sentinel")?(c=[a,s,{label:e(g,{children:["Cuenta de OpenAI / Codex ·"," ",o(g,{dimColor:!0,children:"Login OAuth"}),"\n"]}),value:"openai"},{label:e(g,{children:["OpenRouter ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"openrouter"},{label:e(g,{children:["Ollama ·"," ",o(g,{dimColor:!0,children:"Servidor local compatible"}),"\n"]}),value:"ollama"},{label:e(g,{children:["Gemini API - ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"gemini-api"},{label:e(g,{children:["Gemini Google - ",o(g,{dimColor:!0,children:"OAuth/ADC de Google"}),"\n"]}),value:"gemini-google"},{label:e(g,{children:["Z.AI ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"zai"},{label:e(g,{children:["MiniMax ·"," ",o(g,{dimColor:!0,children:"API key / Anthropic-compatible"}),"\n"]}),value:"minimax"},{label:e(g,{children:["NVIDIA API ·"," ",o(g,{dimColor:!0,children:"API key / build.nvidia.com"}),"\n"]}),value:"nvidia"},{label:e(g,{children:["DeepSeek ·"," ",o(g,{dimColor:!0,children:"API key / contexto 1M (V4)"}),"\n"]}),value:"deepseek"}],n[5]=c):c=n[5],n[6]!==k||n[7]!==x||n[8]!==O||n[65]!==N?(u=o(p,{children:o(M,{options:sortLoginProviderOptions(c),onChange:e=>{"platform"===e?(l("tengu_oauth_platform_selected",{}),x({state:"platform_setup"})):"openai"===e?(l("tengu_oauth_openai_selected",{}),O("openai"),k(!1),x({state:"ready_to_start"})):"openrouter"===e?x({state:"provider_api_key_input",provider:"openrouter"}):"gemini-api"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e?x({state:"provider_api_key_input",provider:e}):"gemini-google"===e?x({state:"provider_google_setup"}):"ollama"===e||"ollama-cloud"===e?(E(T(e)),K(0),x({state:"provider_local_setup",provider:e})):(O("anthropic"),x({state:"ready_to_start"}),"claudeai"===e?(l("tengu_oauth_claudeai_selected",{}),k(!0)):(l("tengu_oauth_console_selected",{}),k(!1)))}})}),n[6]=k,n[7]=x,n[8]=O,n[65]=N,n[66]=u):u=n[66],n[10]!==t||n[11]!==u?(m=e(p,{flexDirection:"column",gap:1,marginTop:1,children:[t,i,u]}),n[10]=t,n[11]=u,n[12]=m):m=n[12],m}case"provider_api_key_input":{let r,t,i,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",D(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=D(a.provider);t=e(p,{flexDirection:"column",gap:0,children:[o(g,{dimColor:!0,children:r.description}),e(g,{dimColor:!0,children:["Siguiente paso: ",r.setup.nextStep]})]}),n[52]=a.provider,n[53]=t}else t=n[53];return n[54]!==P||n[55]!==S||n[56]!==I||n[57]!==w||n[58]!==C||n[59]!==j?(i=e(p,{children:[o(g,{children:"API key > "}),o(G,{value:P,onChange:I,onSubmit:e=>j(e,a.provider),cursorOffset:S,onChangeCursorOffset:w,columns:C,mask:"*"})]}),n[54]=P,n[55]=S,n[56]=I,n[57]=w,n[58]=C,n[59]=j,n[60]=i):i=n[60],n[61]!==r||n[62]!==t||n[63]!==i?(s=e(p,{flexDirection:"column",gap:1,children:[r,t,i]}),n[61]=r,n[62]=t,n[63]=i,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=D(a.provider);return e(p,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:r.label}),o(g,{dimColor:!0,children:r.setup.intro}),o(g,{dimColor:!0,children:r.setup.nextStep}),o(g,{children:"URL del servidor > "}),o(p,{children:o(G,{value:U,onChange:E,onSubmit:e=>z(e,a.provider),cursorOffset:L,onChangeCursorOffset:K,columns:C})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la URL y continuar."]})]})}case"provider_google_setup":return e(p,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:"Gemini Google OAuth"}),o(g,{dimColor:!0,children:"Context Code usara el flujo OAuth compatible con Gemini CLI y abrira Google en el navegador."}),o(g,{dimColor:!0,children:"Se guardara el access token y refresh token en el perfil activo de Gemini Google."}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para iniciar sesion con tu cuenta de Google."]})]});case"provider_google_auth_running":return e(p,{children:[o(R,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"platform_setup":{let r,t,i,a,s,l,c,d;return n[12]===Symbol.for("react.memo_cache_sentinel")?(r=o(g,{bold:!0,children:"Usando plataformas de terceros"}),n[12]=r):r=n[12],n[13]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),i=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=t,n[14]=i):(t=n[13],i=n[14]),n[15]===Symbol.for("react.memo_cache_sentinel")?(a=o(g,{bold:!0,children:"Documentation:"}),n[15]=a):a=n[15],n[16]===Symbol.for("react.memo_cache_sentinel")?(s=e(g,{children:["· Amazon Bedrock:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[16]=s):s=n[16],n[17]===Symbol.for("react.memo_cache_sentinel")?(l=e(g,{children:["· Microsoft Foundry:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[17]=l):l=n[17],n[18]===Symbol.for("react.memo_cache_sentinel")?(c=e(p,{flexDirection:"column",marginTop:1,children:[a,s,l,e(g,{children:["· Vertex AI:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]})]}),n[18]=c):c=n[18],n[19]===Symbol.for("react.memo_cache_sentinel")?(d=e(p,{flexDirection:"column",gap:1,marginTop:1,children:[r,e(p,{flexDirection:"column",gap:1,children:[t,i,c,o(p,{marginTop:1,children:e(g,{dimColor:!0,children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para volver a las opciones de acceso."]})})]})]}),n[19]=d):d=n[19],d}case"waiting_for_login":{let r,t,i,s;return n[20]!==u?(r=u&&o(p,{children:o(g,{dimColor:!0,children:u})}),n[20]=u,n[21]=r):r=n[21],n[22]!==m?(t=!m&&e(p,{children:[o(R,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=m,n[23]=t):t=n[23],n[24]!==v||n[25]!==A||n[26]!==a.url||n[27]!==f||n[28]!==y||n[29]!==_||n[30]!==m||n[31]!==C?(i=m&&e(p,{children:[o(g,{children:B}),o(G,{value:f,onChange:_,onSubmit:e=>A(e,a.url),cursorOffset:v,onChangeCursorOffset:y,columns:C,mask:"*"})]}),n[24]=v,n[25]=A,n[26]=a.url,n[27]=f,n[28]=y,n[29]=_,n[30]=m,n[31]=C,n[32]=i):i=n[32],n[33]!==r||n[34]!==t||n[35]!==i?(s=e(p,{flexDirection:"column",gap:1,children:[r,t,i]}),n[33]=r,n[34]=t,n[35]=i,n[36]=s):s=n[36],s}case"creating_api_key":{let r;return n[37]===Symbol.for("react.memo_cache_sentinel")?(r=o(p,{flexDirection:"column",gap:1,children:e(p,{children:[o(R,{}),o(g,{children:"Creando API key para Context Code…"})]})}),n[37]=r):r=n[37],r}case"about_to_retry":{let e;return n[38]===Symbol.for("react.memo_cache_sentinel")?(e=o(p,{flexDirection:"column",gap:1,children:o(g,{color:"permission",children:"Reintentando…"})}),n[38]=e):e=n[38],e}case"success":{let t,i;if(n[39]!==c||n[40]!==a.token){const i="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";t="setup-token"===c&&a.token?null:e(r,{children:[b()?.emailAddress?e(g,{dimColor:!0,children:["Sesión iniciada como"," ",o(g,{children:b()?.emailAddress})]}):null,e(g,{color:"success",children:[i,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=c,n[40]=a.token,n[41]=t}else t=n[41];return n[42]!==t?(i=o(p,{flexDirection:"column",children:t}),n[42]=t,n[43]=i):i=n[43],i}case"error":{let r,t,i;return n[44]!==a.message?(r=e(g,{color:"error",children:["OAuth error: ",a.message]}),n[44]=a.message,n[45]=r):r=n[45],n[46]!==a.toRetry?(t=a.toRetry&&o(p,{marginTop:1,children:e(g,{color:"permission",children:["Press ",o(g,{bold:!0,children:"Enter"})," to retry."]})}),n[46]=a.toRetry,n[47]=t):t=n[47],n[48]!==r||n[49]!==t?(i=e(p,{flexDirection:"column",gap:1,children:[r,t]}),n[48]=r,n[49]=t,n[50]=i):i=n[50],i}default:return null}}
|
|
1
|
+
import{jsxs as e,jsx as o,Fragment as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useCallback as i,useEffect as n,useRef as a,useState as s}from"react";import{logEvent as l}from"../services/analytics/index.js";import{installOAuthTokens as c}from"../cli/handlers/auth.js";import{useTerminalSize as d}from"../hooks/useTerminalSize.js";import{setClipboard as u}from"../ink/termio/osc.js";import{useTerminalNotification as p}from"../ink/useTerminalNotification.js";import{Box as m,Link as h,Text as g}from"../ink.js";import{useKeybinding as f}from"../keybindings/useKeybinding.js";import{getSSLErrorHint as _}from"../services/api/errorUtils.js";import{sendNotification as v}from"../services/notifier.js";import{OAuthService as C}from"../services/oauth/index.js";import{getOAuthRequestDetails as y}from"../services/oauth/client.js";import{checkGeminiGoogleCredentialsValid as b,getOauthAccountInfo as A,saveGeminiGoogleOAuthTokens as k,saveProviderApiKey as P,validateForceLoginOrg as x}from"../utils/auth.js";import{startGeminiCliOAuthFlow as O}from"../services/oauth/geminiCli.js";import{resolveProviderProfile as I}from"../utils/model/providerProfiles.js";import{logError as S}from"../utils/log.js";import{getVisibleProvider as w}from"../utils/model/providerCatalog.js";import{getConfiguredProviderBaseUrl as D,setProviderBaseUrl as T}from"../utils/model/providerBaseUrls.js";import{getSettings_DEPRECATED as z}from"../utils/settings/settings.js";import{Select as M}from"./CustomSelect/select.js";import{KeyboardShortcutHint as j}from"./design-system/KeyboardShortcutHint.js";import{Spinner as R}from"./Spinner.js";import U from"./TextInput.js";const E=["deepseek","minimax","openrouter","zai","nvidia","ollama","openai","claudeai","gemini-google","gemini-api","console"];function sortLoginProviderOptions(e){const o=new Map(E.map((e,o)=>[e,o]));return[...e].sort((e,r)=>(o.get(e.value)??Number.MAX_SAFE_INTEGER)-(o.get(r.value)??Number.MAX_SAFE_INTEGER))}const K="Pega aqui el codigo si se solicita > ";function formatOAuthDebugDetails(e,o){if("openai"!==e)return"";const r=y({provider:e,port:o,isManual:!1});return[`authorize=${r.authorizeUrl}`,`redirect_uri=${r.redirectUri}`,`scope=${r.scopes.join(" ")}`].join("\n")}export function ConsoleOAuthFlow({onDone:r,startingMessage:t,mode:y="login",forceLoginMethod:A,profileName:D}){const M=z()||{},R=A??M.forceLoginMethod,U=M.forceLoginOrgUUID,E="claudeai"===R?"Método de acceso preseleccionado: Plan de suscripción (Context Pro/Max)":"console"===R?"Método de acceso preseleccionado: Facturación por uso de API (Anthropic Console)":"openai"===R?"Método de acceso preseleccionado: OpenAI / Codex OAuth":null,K=p(),[L,W]=s(()=>"setup-token"===y||"claudeai"===R||"console"===R||"openai"===R?{state:"ready_to_start"}:{state:"idle"}),[G,B]=s(""),[N,$]=s(0),[F]=s(()=>new C),[V,X]=s(()=>"openai"===R?"openai":"anthropic"),[Y,q]=s(()=>"setup-token"===y||"claudeai"===R),[H,Z]=s(!1),[J,Q]=s(!1),ee=d().columns-37-1,[oe,re]=s(""),[te,ie]=s(0),[ne,ae]=s(""),[se,le]=s(0),[ce,de]=s(""),[ue,pe]=s(""),[me,he]=s(""),[ge,fe]=s(0),[_e,ve]=s(0),[Ce,ye]=s(0);n(()=>{"claudeai"===R?l("tengu_oauth_claudeai_forced",{}):"console"===R&&l("tengu_oauth_console_forced",{})},[R]),n(()=>{if("about_to_retry"===L.state){const e=setTimeout(W,1e3,L.nextState);return()=>clearTimeout(e)}},[L]),f("confirm:yes",()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},{context:"Confirmation",isActive:"success"===L.state&&"setup-token"!==y}),n(()=>{if("success"===L.state&&!process.stdin.isTTY){const e=setTimeout(()=>{l("tengu_oauth_success",{loginWithClaudeAi:Y}),r(V)},800);return()=>clearTimeout(e)}},[L.state,V,Y,r]),f("confirm:yes",()=>{W({state:"idle"})},{context:"Confirmation",isActive:"platform_setup"===L.state}),f("confirm:yes",()=>{ke()},{context:"Confirmation",isActive:"provider_google_setup"===L.state}),f("confirm:yes",()=>{"error"===L.state&&L.toRetry&&(B(""),W({state:"about_to_retry",nextState:L.toRetry}))},{context:"Confirmation",isActive:"error"===L.state&&!!L.toRetry}),f("cancel",()=>{W({state:"idle"})},{context:"Confirmation",isActive:"provider_api_key_input"===L.state||"provider_local_setup"===L.state||"provider_google_setup"===L.state||"error"===L.state}),n(()=>{"c"===G&&"waiting_for_login"===L.state&&H&&!J&&(u(L.url).then(e=>{e&&process.stdout.write(e),Q(!0),setTimeout(Q,2e3,!1)}),B(""))},[G,L,H,J]);const be=i(async(e,o)=>{const t=e.trim();if(t)try{await P(o,t),re(""),ie(0);const e=w(o).label;v({message:`API key de ${e} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_api_key_input",provider:o}})}else W({state:"error",message:"Debes ingresar una API key.",toRetry:{state:"provider_api_key_input",provider:o}})},[r,K]),Ae=i((e,o)=>{const t=e.trim();if(t)try{const e=T(o,t);ae(e),le(0),v({message:`URL de ${w(o).label} guardada`,notificationType:"auth_success"},K),r(o)}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_local_setup",provider:o}})}else W({state:"error",message:"Debes ingresar una URL para Ollama.",toRetry:{state:"provider_local_setup",provider:o}})},[r,K]),ke=(i((e,o)=>{if("custom_provider_wizard"===L.state)if("api_key"===e){if(!o.trim())return void W({state:"error",message:"La API key no puede estar vacia.",toRetry:L});W({...L,apiKey:o.trim(),step:"endpoint"})}else if("endpoint"===e){const e=o.trim();if(e&&!e.startsWith("http"))return void W({state:"error",message:"La URL debe empezar con http:// o https://.",toRetry:L});W({...L,endpoint:e||("custom-openai"===L.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1"),step:"model"})}else if("model"===e){o.trim();const e=L.endpoint||("custom-openai"===L.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1");P(L.provider,L.apiKey).then(()=>{T(L.provider,e),v({message:`Configuracion de ${w(L.provider).label} guardada`,notificationType:"auth_success"},K),r(L.provider)}).catch(e=>{S(e),W({state:"error",message:e.message,toRetry:L})})}},[r,L,K]),i(async()=>{W({state:"provider_google_auth_running"});try{if(await b())return void r("gemini-google");const e=await O();k(e);if(!await b())return v({message:"OAuth de Gemini guardado; Code Assist no valido el proyecto de cuota",notificationType:"auth_success"},K),void r("gemini-google");v({message:"Credenciales de Gemini Google listas",notificationType:"auth_success"},K),r("gemini-google")}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"provider_google_setup"}})}},[r,K])),Pe=i(async()=>{try{l("tengu_oauth_flow_start",{loginWithClaudeAi:Y,provider:V});const e=await F.startOAuthFlow(async e=>{W({state:"waiting_for_login",url:e}),setTimeout(Z,3e3,!0)},{loginWithClaudeAi:Y,provider:V,inferenceOnly:"setup-token"===y,expiresIn:"setup-token"===y?31536e3:void 0,orgUUID:U}).catch(e=>{const o=e.message.includes("Token exchange failed"),r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";throw W({state:"error",message:r??(o?"No se pudo intercambiar el codigo de autorizacion por el token de acceso. Intentalo de nuevo."+(i?`\n${i}`:""):e.message),toRetry:"setup-token"===y?{state:"ready_to_start"}:{state:"idle"}}),l("tengu_oauth_token_exchange_error",{error:e.message,ssl_error:null!==r}),e});if("setup-token"===y)W({state:"success",token:e.accessToken});else{W({state:"creating_api_key"});const o=D?I("openai"===V?"openai":"anthropic",D):void 0;if(await c(e,V,o?.id),"anthropic"===V){const e=await x();if(!e.valid)throw new Error(e.message)}W({state:"success"}),v({message:"openai"===V?"Inicio de sesión con OpenAI / Codex completado":"Inicio de sesión en Context Code completado",notificationType:"auth_success"},K)}}catch(e){const o=e.message,r=_(e),t=F.getPort(),i="openai"===V&&t?formatOAuthDebugDetails(V,t):"";W({state:"error",message:r??("openai"===V&&i&&!o.includes("redirect_uri=")?`${o}\n${i}`:o),toRetry:{state:"setup-token"===y?"ready_to_start":"idle"}}),l("tengu_oauth_error",{error:o,ssl_error:null!==r})}},[V,F,Z,Y,y,U,K]),xe=a(!1);return n(()=>{"ready_to_start"!==L.state||xe.current||(xe.current=!0,process.nextTick((e,o)=>{e(),o.current=!1},Pe,xe))},[L.state,Pe]),n(()=>{if("setup-token"===y&&"success"===L.state){const e=setTimeout((e,o)=>{l("tengu_oauth_success",{loginWithClaudeAi:e}),o(V)},500,Y,r,V);return()=>clearTimeout(e)}},[y,L,Y,r,V]),n(()=>()=>{F.cleanup()},[F]),e(m,{flexDirection:"column",gap:1,children:["waiting_for_login"===L.state&&H&&e(m,{flexDirection:"column",gap:1,paddingBottom:1,children:[e(m,{paddingX:1,children:[e(g,{dimColor:!0,children:["Browser didn't open? Use the url below to sign in"," "]}),o(g,J?{color:"success",children:"(Copied!)"}:{dimColor:!0,children:o(j,{shortcut:"c",action:"copiar",parens:!0})})]}),o(h,{url:L.url,children:o(g,{dimColor:!0,children:L.url})})]},"urlToCopy"),"setup-token"===y&&"success"===L.state&&L.token&&e(m,{flexDirection:"column",gap:1,paddingTop:1,children:[o(g,{color:"success",children:"✓ Long-lived authentication token created successfully!"}),e(m,{flexDirection:"column",gap:1,children:[o(g,{children:"Your OAuth token (valid for 1 year):"}),o(g,{color:"warning",children:L.token}),o(g,{dimColor:!0,children:"Store this token securely. You won't be able to see it again."}),o(g,{dimColor:!0,children:"Use this token by setting: export CONTEXT_CODE_OAUTH_TOKEN=<token>"})]})]},"tokenOutput"),o(m,{paddingLeft:1,flexDirection:"column",gap:1,children:o(OAuthStatusMessage,{oauthStatus:L,oauthProvider:V,mode:y,startingMessage:t,forcedMethodMessage:E,showPastePrompt:H,pastedCode:G,setPastedCode:B,cursorOffset:N,setCursorOffset:$,textInputColumns:ee,handleSubmitCode:async function(e,o){try{const[r,t]=e.split("#");if(!r||!t)return void W({state:"error",message:"Codigo invalido. Asegurate de copiar el codigo completo",toRetry:{state:"waiting_for_login",url:o}});l("tengu_oauth_manual_entry",{}),F.handleManualAuthCodeInput({authorizationCode:r,state:t})}catch(e){S(e),W({state:"error",message:e.message,toRetry:{state:"waiting_for_login",url:o}})}},setOAuthStatus:W,setLoginWithClaudeAi:q,setOAuthProvider:X,providerApiKey:oe,setProviderApiKey:re,providerApiKeyCursorOffset:te,setProviderApiKeyCursorOffset:ie,handleProviderApiKeySubmit:be,providerBaseUrl:ne,setProviderBaseUrlInput:ae,providerBaseUrlCursorOffset:se,setProviderBaseUrlCursorOffset:le,handleProviderBaseUrlSubmit:Ae,onDone:r})})]})}function OAuthStatusMessage(i){const n=t(68),{oauthStatus:a,oauthProvider:s,mode:c,startingMessage:d,forcedMethodMessage:u,showPastePrompt:p,pastedCode:f,setPastedCode:_,cursorOffset:v,setCursorOffset:C,textInputColumns:y,handleSubmitCode:b,setOAuthStatus:k,setLoginWithClaudeAi:P,setOAuthProvider:x,providerApiKey:O,setProviderApiKey:I,providerApiKeyCursorOffset:S,setProviderApiKeyCursorOffset:T,handleProviderApiKeySubmit:z,providerBaseUrl:j,setProviderBaseUrlInput:E,providerBaseUrlCursorOffset:L,setProviderBaseUrlCursorOffset:W,handleProviderBaseUrlSubmit:G,onDone:B}=i;switch(a.state){case"idle":{const r=d||"Context Code puede usarse con tu suscripción de Claude, la facturación de Anthropic Console o OpenAI / Codex OAuth.";let t,i,a,s,c,u,p;return n[0]!==r?(t=o(g,{bold:!0,children:r}),n[0]=r,n[1]=t):t=n[1],n[2]===Symbol.for("react.memo_cache_sentinel")?(i=o(g,{children:"Selecciona el metodo de acceso:"}),n[2]=i):i=n[2],n[3]===Symbol.for("react.memo_cache_sentinel")?(a={label:e(g,{children:["Claude account with subscription ·"," ",o(g,{dimColor:!0,children:"Pro, Max, Team, or Enterprise"}),!1,"\n"]}),value:"claudeai"},n[3]=a):a=n[3],n[4]===Symbol.for("react.memo_cache_sentinel")?(s={label:e(g,{children:["Anthropic Console account ·"," ",o(g,{dimColor:!0,children:"API usage billing"}),"\n"]}),value:"console"},n[4]=s):s=n[4],n[5]===Symbol.for("react.memo_cache_sentinel")?(c=[a,s,{label:e(g,{children:["Cuenta de OpenAI / Codex ·"," ",o(g,{dimColor:!0,children:"Login OAuth"}),"\n"]}),value:"openai"},{label:e(g,{children:["OpenRouter ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"openrouter"},{label:e(g,{children:["Ollama ·"," ",o(g,{dimColor:!0,children:"Servidor local compatible"}),"\n"]}),value:"ollama"},{label:e(g,{children:["Gemini API - ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"gemini-api"},{label:e(g,{children:["Gemini Google - ",o(g,{dimColor:!0,children:"OAuth/ADC de Google"}),"\n"]}),value:"gemini-google"},{label:e(g,{children:["Z.AI ·"," ",o(g,{dimColor:!0,children:"API key / OpenAI-compatible"}),"\n"]}),value:"zai"},{label:e(g,{children:["MiniMax ·"," ",o(g,{dimColor:!0,children:"API key / Anthropic-compatible"}),"\n"]}),value:"minimax"},{label:e(g,{children:["NVIDIA API ·"," ",o(g,{dimColor:!0,children:"API key / build.nvidia.com"}),"\n"]}),value:"nvidia"},{label:e(g,{children:["DeepSeek ·"," ",o(g,{dimColor:!0,children:"API key / contexto 1M (V4)"}),"\n"]}),value:"deepseek"},{label:e(g,{children:["Custom OpenAI ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-openai"},{label:e(g,{children:["Custom Anthropic ·"," ",o(g,{dimColor:!0,children:"Wizard API key + endpoint"}),"\n"]}),value:"custom-anthropic"}],n[5]=c):c=n[5],n[6]!==P||n[7]!==k||n[8]!==x||n[65]!==B?(u=o(m,{children:o(M,{options:sortLoginProviderOptions(c),onChange:e=>{"platform"===e?(l("tengu_oauth_platform_selected",{}),k({state:"platform_setup"})):"openai"===e?(l("tengu_oauth_openai_selected",{}),x("openai"),P(!1),k({state:"ready_to_start"})):"openrouter"===e?k({state:"provider_api_key_input",provider:"openrouter"}):"gemini-api"===e||"zai"===e||"minimax"===e||"nvidia"===e||"deepseek"===e?k({state:"provider_api_key_input",provider:e}):"gemini-google"===e?k({state:"provider_google_setup"}):"ollama"===e||"ollama-cloud"===e?(E(D(e)),W(0),k({state:"provider_local_setup",provider:e})):"custom-openai"===e||"custom-anthropic"===e?k({state:"custom_provider_wizard",provider:e,step:"api_key",apiKey:"",endpoint:"custom-openai"===e?"https://api.openai.com/v1":"https://api.anthropic.com/v1",model:""}):(x("anthropic"),k({state:"ready_to_start"}),"claudeai"===e?(l("tengu_oauth_claudeai_selected",{}),P(!0)):(l("tengu_oauth_console_selected",{}),P(!1)))}})}),n[6]=P,n[7]=k,n[8]=x,n[65]=B,n[66]=u):u=n[66],n[10]!==t||n[11]!==u?(p=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[t,i,u]}),n[10]=t,n[11]=u,n[12]=p):p=n[12],p}case"provider_api_key_input":{let r,t,i,s;if(n[50]!==a.provider?(r=e(g,{bold:!0,children:["Ingresa la API key de ",w(a.provider).label]}),n[50]=a.provider,n[51]=r):r=n[51],n[52]!==a.provider){const r=w(a.provider);t=e(m,{flexDirection:"column",gap:0,children:[o(g,{dimColor:!0,children:r.description}),e(g,{dimColor:!0,children:["Siguiente paso: ",r.setup.nextStep]})]}),n[52]=a.provider,n[53]=t}else t=n[53];return n[54]!==O||n[55]!==S||n[56]!==I||n[57]!==T||n[58]!==y||n[59]!==z?(i=e(m,{children:[o(g,{children:"API key > "}),o(U,{value:O,onChange:I,onSubmit:e=>z(e,a.provider),cursorOffset:S,onChangeCursorOffset:T,columns:y,mask:"*"})]}),n[54]=O,n[55]=S,n[56]=I,n[57]=T,n[58]=y,n[59]=z,n[60]=i):i=n[60],n[61]!==r||n[62]!==t||n[63]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[61]=r,n[62]=t,n[63]=i,n[64]=s):s=n[64],s}case"provider_local_setup":{const r=w(a.provider);return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:r.label}),o(g,{dimColor:!0,children:r.setup.intro}),o(g,{dimColor:!0,children:r.setup.nextStep}),o(g,{children:"URL del servidor > "}),o(m,{children:o(U,{value:j,onChange:E,onSubmit:e=>G(e,a.provider),cursorOffset:L,onChangeCursorOffset:W,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la URL y continuar."]})]})}case"provider_google_setup":return e(m,{flexDirection:"column",gap:1,children:[o(g,{bold:!0,children:"Gemini Google OAuth"}),o(g,{dimColor:!0,children:"Context Code usara el flujo OAuth compatible con Gemini CLI y abrira Google en el navegador."}),o(g,{dimColor:!0,children:"Se guardara el access token y refresh token en el perfil activo de Gemini Google."}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para iniciar sesion con tu cuenta de Google."]})]});case"provider_google_auth_running":return e(m,{children:[o(R,{}),o(g,{children:"Abriendo Google OAuth para Gemini..."})]});case"custom_provider_wizard":{const r=w(a.provider),t="custom-openai"===a.provider?"https://api.openai.com/v1":"https://api.anthropic.com/v1";if("api_key"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 1/3"]}),e(g,{dimColor:!0,children:["Ingresa tu API key para ",r.label,"."]}),o(g,{children:"API key > "}),o(m,{children:o(U,{value:wizardApiKey,onChange:setWizardApiKey,onSubmit:e=>handleCustomProviderWizardSubmit("api_key",e),cursorOffset:wizardApiKeyCursor,onChangeCursorOffset:setWizardApiKeyCursor,columns:y,mask:"*"})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para continuar al siguiente paso."]})]});if("endpoint"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 2/3"]}),e(g,{dimColor:!0,children:["URL del endpoint (Enter para usar default: ",t,")"]}),o(g,{children:"Endpoint > "}),o(m,{children:o(U,{value:wizardEndpoint,onChange:setWizardEndpoint,onSubmit:e=>handleCustomProviderWizardSubmit("endpoint",e),cursorOffset:wizardEndpointCursor,onChangeCursorOffset:setWizardEndpointCursor,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para usar el default o ingresa tu propia URL."]}),o(g,{dimColor:!0,children:"Puedes saltar este paso presionando Enter directamente."})]});if("model"===a.step)return e(m,{flexDirection:"column",gap:1,children:[e(g,{bold:!0,children:[r.label," - Paso 3/3"]}),o(g,{dimColor:!0,children:"Modelo a usar (opcional, puedes dejarlo en blanco)."}),o(g,{dimColor:!0,children:"Podras cambiarlo luego con el comando /model."}),o(g,{children:"Modelo > "}),o(m,{children:o(U,{value:wizardModel,onChange:setWizardModel,onSubmit:e=>handleCustomProviderWizardSubmit("model",e),cursorOffset:wizardModelCursor,onChangeCursorOffset:setWizardModelCursor,columns:y})}),e(g,{color:"success",children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para guardar la configuracion."]})]});break}case"platform_setup":{let r,t,i,a,s,l,c,d;return n[12]===Symbol.for("react.memo_cache_sentinel")?(r=o(g,{bold:!0,children:"Usando plataformas de terceros"}),n[12]=r):r=n[12],n[13]===Symbol.for("react.memo_cache_sentinel")?(t=o(g,{children:"Context Code soporta Amazon Bedrock, Microsoft Foundry y Vertex AI. Configura las variables de entorno requeridas y luego reinicia Context Code."}),i=o(g,{children:"Si formas parte de una organización empresarial, contacta a tu administrador para las instrucciones de configuración."}),n[13]=t,n[14]=i):(t=n[13],i=n[14]),n[15]===Symbol.for("react.memo_cache_sentinel")?(a=o(g,{bold:!0,children:"Documentation:"}),n[15]=a):a=n[15],n[16]===Symbol.for("react.memo_cache_sentinel")?(s=e(g,{children:["· Amazon Bedrock:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[16]=s):s=n[16],n[17]===Symbol.for("react.memo_cache_sentinel")?(l=e(g,{children:["· Microsoft Foundry:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]}),n[17]=l):l=n[17],n[18]===Symbol.for("react.memo_cache_sentinel")?(c=e(m,{flexDirection:"column",marginTop:1,children:[a,s,l,e(g,{children:["· Vertex AI:"," ",o(h,{url:"https://docs.iaforged.com/",children:"https://docs.iaforged.com/"})]})]}),n[18]=c):c=n[18],n[19]===Symbol.for("react.memo_cache_sentinel")?(d=e(m,{flexDirection:"column",gap:1,marginTop:1,children:[r,e(m,{flexDirection:"column",gap:1,children:[t,i,c,o(m,{marginTop:1,children:e(g,{dimColor:!0,children:["Presiona ",o(g,{bold:!0,children:"Enter"})," para volver a las opciones de acceso."]})})]})]}),n[19]=d):d=n[19],d}case"waiting_for_login":{let r,t,i,s;return n[20]!==u?(r=u&&o(m,{children:o(g,{dimColor:!0,children:u})}),n[20]=u,n[21]=r):r=n[21],n[22]!==p?(t=!p&&e(m,{children:[o(R,{}),o(g,{children:"Abriendo el navegador para iniciar sesión…"})]}),n[22]=p,n[23]=t):t=n[23],n[24]!==v||n[25]!==b||n[26]!==a.url||n[27]!==f||n[28]!==C||n[29]!==_||n[30]!==p||n[31]!==y?(i=p&&e(m,{children:[o(g,{children:K}),o(U,{value:f,onChange:_,onSubmit:e=>b(e,a.url),cursorOffset:v,onChangeCursorOffset:C,columns:y,mask:"*"})]}),n[24]=v,n[25]=b,n[26]=a.url,n[27]=f,n[28]=C,n[29]=_,n[30]=p,n[31]=y,n[32]=i):i=n[32],n[33]!==r||n[34]!==t||n[35]!==i?(s=e(m,{flexDirection:"column",gap:1,children:[r,t,i]}),n[33]=r,n[34]=t,n[35]=i,n[36]=s):s=n[36],s}case"creating_api_key":{let r;return n[37]===Symbol.for("react.memo_cache_sentinel")?(r=o(m,{flexDirection:"column",gap:1,children:e(m,{children:[o(R,{}),o(g,{children:"Creando API key para Context Code…"})]})}),n[37]=r):r=n[37],r}case"about_to_retry":{let e;return n[38]===Symbol.for("react.memo_cache_sentinel")?(e=o(m,{flexDirection:"column",gap:1,children:o(g,{color:"permission",children:"Reintentando…"})}),n[38]=e):e=n[38],e}case"success":{let t,i;if(n[39]!==c||n[40]!==a.token){const i="openai"===s?"Inicio de sesión en OpenAI / Codex exitoso. Presiona ":"Inicio de sesión exitoso. Presiona ";t="setup-token"===c&&a.token?null:e(r,{children:[A()?.emailAddress?e(g,{dimColor:!0,children:["Sesión iniciada como"," ",o(g,{children:A()?.emailAddress})]}):null,e(g,{color:"success",children:[i,o(g,{bold:!0,children:"Enter"})," para continuar…"]})]}),n[39]=c,n[40]=a.token,n[41]=t}else t=n[41];return n[42]!==t?(i=o(m,{flexDirection:"column",children:t}),n[42]=t,n[43]=i):i=n[43],i}case"error":{let r,t,i;return n[44]!==a.message?(r=e(g,{color:"error",children:["OAuth error: ",a.message]}),n[44]=a.message,n[45]=r):r=n[45],n[46]!==a.toRetry?(t=a.toRetry&&o(m,{marginTop:1,children:e(g,{color:"permission",children:["Press ",o(g,{bold:!0,children:"Enter"})," to retry."]})}),n[46]=a.toRetry,n[47]=t):t=n[47],n[48]!==r||n[49]!==t?(i=e(m,{flexDirection:"column",gap:1,children:[r,t]}),n[48]=r,n[49]=t,n[50]=i):i=n[50],i}default:return null}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isEnvTruthy as e}from"
|
|
1
|
+
import{isEnvTruthy as e}from"../utils/envUtils.js";function getOauthConfigType(){if("ant"===process.env.USER_TYPE){if(e(process.env.USE_LOCAL_OAUTH))return"local";if(e(process.env.USE_STAGING_OAUTH))return"staging"}return"prod"}export function fileSuffixForOauthConfig(){if(process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL||process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL)return"-custom-oauth";switch(getOauthConfigType()){case"local":return"-local-oauth";case"staging":return"-staging-oauth";case"prod":return""}}function parseSpaceSeparatedList(e){return e?.split(/\s+/).filter(Boolean)??[]}const t="/auth/callback",_=`http://localhost:1455${t}`,o=["openid","profile","email","offline_access"];export const CLAUDE_AI_INFERENCE_SCOPE="user:inference";export const CLAUDE_AI_PROFILE_SCOPE="user:profile";export const OAUTH_BETA_HEADER="oauth-2025-04-20";export const CONSOLE_OAUTH_SCOPES=["org:create_api_key","user:profile"];export const CLAUDE_AI_OAUTH_SCOPES=["user:profile","user:inference","user:sessions:claude_code","user:mcp_servers","user:file_upload"];export const ALL_OAUTH_SCOPES=Array.from(new Set([...CONSOLE_OAUTH_SCOPES,...CLAUDE_AI_OAUTH_SCOPES]));const a={BASE_API_URL:"https://api.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.claude.com/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude.com/cai/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude.ai",TOKEN_URL:"https://platform.claude.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.claude.com/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.claude.com/oauth/code/callback",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",OAUTH_FILE_SUFFIX:"",MCP_PROXY_URL:"https://mcp-proxy.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"};export const MCP_CLIENT_METADATA_URL="https://claude.ai/oauth/claude-code-client-metadata";const c="ant"===process.env.USER_TYPE?{BASE_API_URL:"https://api-staging.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.staging.ant.dev/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude-ai.staging.ant.dev/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude-ai.staging.ant.dev",TOKEN_URL:"https://platform.staging.ant.dev/v1/oauth/token",API_KEY_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.staging.ant.dev/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.staging.ant.dev/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.staging.ant.dev/oauth/code/callback",CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-staging-oauth",MCP_PROXY_URL:"https://mcp-proxy-staging.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"}:void 0;const s=["https://beacon.claude-ai.staging.ant.dev","https://claude.fedstart.com","https://claude-staging.fedstart.com"];export function getOauthConfig(){let e=(()=>{switch(getOauthConfigType()){case"local":return function(){const e=(process.env.CONTEXT_LOCAL_OAUTH_API_BASE??process.env.CLAUDE_LOCAL_OAUTH_API_BASE)?.replace(/\/$/,"")??"http://localhost:8000",t=(process.env.CONTEXT_LOCAL_OAUTH_APPS_BASE??process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE)?.replace(/\/$/,"")??"http://localhost:4000",_=(process.env.CONTEXT_LOCAL_OAUTH_CONSOLE_BASE??process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE)?.replace(/\/$/,"")??"http://localhost:3000";return{BASE_API_URL:e,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${t}/oauth/authorize`,CLAUDE_AI_ORIGIN:t,TOKEN_URL:`${e}/v1/oauth/token`,API_KEY_URL:`${e}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${e}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-local-oauth",MCP_PROXY_URL:"http://localhost:8205",MCP_PROXY_PATH:"/v1/toolbox/shttp/mcp/{server_id}"}}();case"staging":return c??a;case"prod":return a}})();const t=process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL??process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL;if(t){const _=t.replace(/\/$/,"");if(!s.includes(_)){const e=void 0!==process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL?"CONTEXT_CODE_CUSTOM_OAUTH_URL":"CLAUDE_CODE_CUSTOM_OAUTH_URL";throw new Error(`${e} is not an approved endpoint.`)}e={...e,BASE_API_URL:_,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_ORIGIN:_,TOKEN_URL:`${_}/v1/oauth/token`,API_KEY_URL:`${_}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${_}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,OAUTH_FILE_SUFFIX:"-custom-oauth"}}const _=process.env.CONTEXT_CODE_OAUTH_CLIENT_ID??process.env.CLAUDE_CODE_OAUTH_CLIENT_ID;return _&&(e={...e,CLIENT_ID:_}),e}export function getOpenAIOAuthConfig(){const e=process.env.OPENAI_OAUTH_BASE_URL?.replace(/\/$/,"")??process.env.OPENAI_OAUTH_ENDPOINT_BASE?.replace(/\/$/,"")??"https://auth.openai.com";return{AUTHORIZE_URL:process.env.OPENAI_OAUTH_AUTHORIZE_URL??`${e}/oauth/authorize`,TOKEN_URL:process.env.OPENAI_OAUTH_TOKEN_URL??`${e}/oauth/token`,CLIENT_ID:process.env.OPENAI_OAUTH_CLIENT_ID??"app_EMoamEEZ73f0CkXaXp7hrann",MANUAL_REDIRECT_URL:process.env.OPENAI_OAUTH_MANUAL_REDIRECT_URL??process.env.OPENAI_OAUTH_REDIRECT_URL??_,LOCAL_REDIRECT_URL:process.env.OPENAI_OAUTH_LOCAL_REDIRECT_URL??_,CALLBACK_PATH:process.env.OPENAI_OAUTH_CALLBACK_PATH??t,CALLBACK_PORT:parseInt(process.env.OPENAI_OAUTH_CALLBACK_PORT||String(1455),10),SUCCESS_URL:process.env.OPENAI_OAUTH_SUCCESS_URL??(e?`${e}/oauth/code/success?app=codex`:void 0),FILE_SUFFIX:"-openai-oauth",BASE_API_URL:e,PROFILE_URL:process.env.OPENAI_OAUTH_PROFILE_URL??(e?`${e}/api/oauth/profile`:void 0),SCOPES:parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES).length>0?parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES):[...o]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{c as
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{c as o}from"react/compiler-runtime";import{createContext as e,useContext as t}from"react";import{Mailbox as i}from"../utils/mailbox.js";const n=e(void 0);export function MailboxProvider(e){const t=o(3),{children:c}=e;let m;t[0]===Symbol.for("react.memo_cache_sentinel")?(m=new i,t[0]=m):m=t[0];const s=m;let a;return t[1]!==c?(a=r(n.Provider,{value:s,children:c}),t[1]=c,t[2]=a):a=t[2],a}export function useMailbox(){const r=t(n);if(!r)throw new Error("useMailbox must be used within a MailboxProvider");return r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{createContext as r,useContext as o,useState as i,useSyncExternalStore as c}from"react";import{createStore as n}from"../state/store.js";const
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{createContext as r,useContext as o,useState as i,useSyncExternalStore as c}from"react";import{createStore as n}from"../state/store.js";const u={voiceState:"idle",voiceError:null,voiceInterimTranscript:"",voiceAudioLevels:[],voiceWarmingUp:!1},s=r(null);export function VoiceProvider(r){const o=t(3),{children:c}=r,[n]=i(_temp);let u;return o[0]!==c||o[1]!==n?(u=e(s.Provider,{value:n,children:c}),o[0]=c,o[1]=n,o[2]=u):u=o[2],u}function _temp(){return n(u)}function useVoiceStore(){const e=o(s);if(!e)throw new Error("useVoiceState must be used within a VoiceProvider");return e}export function useVoiceState(e){const r=t(3),o=useVoiceStore();let i;r[0]!==e||r[1]!==o?(i=()=>e(o.getState()),r[0]=e,r[1]=o,r[2]=i):i=r[2];const n=i;return c(o.subscribe,n,n)}export function useSetVoiceState(){return useVoiceStore().setState}export function useGetVoiceState(){return useVoiceStore().getState}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as e}from"react";import{TerminalSizeContext as n}from"
|
|
1
|
+
import{useContext as e}from"react";import{TerminalSizeContext as n}from"../ink/components/TerminalSizeContext.js";export function useTerminalSize(){const r=e(n);if(!r)throw new Error("useTerminalSize must be used within an Ink App component");return r}
|
package/dist/src/ink/Ansi.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{c as e}from"react/compiler-runtime";import i from"react";import t from"./components/Link.js";import n from"./components/Text.js";import{Parser as o}from"./termio.js";export const Ansi=i.memo(function(i){const l=e(12),{children:s,dimColor:c}=i;if("string"!=typeof s){let e;return l[0]!==s||l[1]!==c?(e=r(n,c?{dim:!0,children:String(s)}:{children:String(s)}),l[0]=s,l[1]=c,l[2]=e):e=l[2],e}if(""===s)return null;let a,d;if(l[3]!==s||l[4]!==c){d=Symbol.for("react.early_return_sentinel");r:{const e=function(r){const e=(new o).feed(r),i=[];let t;for(const r of e)if("link"!==r.type){if("text"===r.type){const e=r.graphemes.map(r=>r.value).join("");if(!e)continue;const n=textStyleToSpanProps(r.style);t&&(n.hyperlink=t);const o=i[i.length-1];o&&propsEqual(o.props,n)?o.text+=e:i.push({text:e,props:n})}}else t="start"===r.action.type?r.action.url:void 0;return i}(s);if(0===e.length){d=null;break r}if(1===e.length&&void 0===(p=e[0].props).color&&void 0===p.backgroundColor&&!0!==p.dim&&!0!==p.bold&&!0!==p.italic&&!0!==p.underline&&!0!==p.strikethrough&&!0!==p.inverse&&void 0===p.hyperlink){d=r(n,c?{dim:!0,children:e[0].text}:{children:e[0].text});break r}let i;l[7]!==c?(i=(e,i)=>{const n=e.props.hyperlink;c&&(e.props.dim=!0);const o=function(r){return void 0!==r.color||void 0!==r.backgroundColor||!0===r.dim||!0===r.bold||!0===r.italic||!0===r.underline||!0===r.strikethrough||!0===r.inverse}(e.props);return n?r(t,o?{url:n,children:r(StyledText,{color:e.props.color,backgroundColor:e.props.backgroundColor,dim:e.props.dim,bold:e.props.bold,italic:e.props.italic,underline:e.props.underline,strikethrough:e.props.strikethrough,inverse:e.props.inverse,children:e.text})}:{url:n,children:e.text},i):o?r(StyledText,{color:e.props.color,backgroundColor:e.props.backgroundColor,dim:e.props.dim,bold:e.props.bold,italic:e.props.italic,underline:e.props.underline,strikethrough:e.props.strikethrough,inverse:e.props.inverse,children:e.text},i):e.text},l[7]=c,l[8]=i):i=l[8],a=e.map(i)}l[3]=s,l[4]=c,l[5]=a,l[6]=d}else a=l[5],d=l[6];var p;if(d!==Symbol.for("react.early_return_sentinel"))return d;const u=a;let h;return l[9]!==u||l[10]!==c?(h=r(n,c?{dim:!0,children:u}:{children:u}),l[9]=u,l[10]=c,l[11]=h):h=l[11],h});function textStyleToSpanProps(r){const e={};r.bold&&(e.bold=!0),r.dim&&(e.dim=!0),r.italic&&(e.italic=!0),"none"!==r.underline&&(e.underline=!0),r.strikethrough&&(e.strikethrough=!0),r.inverse&&(e.inverse=!0);const i=colorToString(r.fg);i&&(e.color=i);const t=colorToString(r.bg);return t&&(e.backgroundColor=t),e}const l={black:"ansi:black",red:"ansi:red",green:"ansi:green",yellow:"ansi:yellow",blue:"ansi:blue",magenta:"ansi:magenta",cyan:"ansi:cyan",white:"ansi:white",brightBlack:"ansi:blackBright",brightRed:"ansi:redBright",brightGreen:"ansi:greenBright",brightYellow:"ansi:yellowBright",brightBlue:"ansi:blueBright",brightMagenta:"ansi:magentaBright",brightCyan:"ansi:cyanBright",brightWhite:"ansi:whiteBright"};function colorToString(r){switch(r.type){case"named":return l[r.name];case"indexed":return`ansi256(${r.index})`;case"rgb":return`rgb(${r.r},${r.g},${r.b})`;case"default":return}}function propsEqual(r,e){return r.color===e.color&&r.backgroundColor===e.backgroundColor&&r.bold===e.bold&&r.dim===e.dim&&r.italic===e.italic&&r.underline===e.underline&&r.strikethrough===e.strikethrough&&r.inverse===e.inverse&&r.hyperlink===e.hyperlink}function StyledText(i){const t=e(14);let o,l,s,c,a;if(t[0]!==i?(({bold:o,dim:s,children:l,...c}=i),t[0]=i,t[1]=o,t[2]=l,t[3]=s,t[4]=c):(o=t[1],l=t[2],s=t[3],c=t[4]),s){let e;return t[5]!==l||t[6]!==c?(e=r(n,{...c,dim:!0,children:l}),t[5]=l,t[6]=c,t[7]=e):e=t[7],e}if(o){let e;return t[8]!==l||t[9]!==c?(e=r(n,{...c,bold:!0,children:l}),t[8]=l,t[9]=c,t[10]=e):e=t[10],e}return t[11]!==l||t[12]!==c?(a=r(n,{...c,children:l}),t[11]=l,t[12]=c,t[13]=a):a=t[13],a}
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{c as e}from"react/compiler-runtime";import i from"react";import t from"./components/Link.js";import n from"./components/Text.js";import{Parser as o}from"./termio.js";export const Ansi=i.memo(function(i){const l=e(12),{children:s,dimColor:c}=i;if("string"!=typeof s){let e;return l[0]!==s||l[1]!==c?(e=r(n,c?{dim:!0,children:String(s)}:{children:String(s)}),l[0]=s,l[1]=c,l[2]=e):e=l[2],e}if(""===s)return null;let a,d;if(l[3]!==s||l[4]!==c){d=Symbol.for("react.early_return_sentinel");r:{const e=function(r){const e=(new o).feed(r),i=[];let t;for(const r of e)if("link"!==r.type){if("text"===r.type){const e=r.graphemes.map(r=>r.value).join("");if(!e)continue;const n=textStyleToSpanProps(r.style);t&&(n.hyperlink=t);const o=i[i.length-1];o&&propsEqual(o.props,n)?o.text+=e:i.push({text:e,props:n})}}else t="start"===r.action.type?r.action.url:void 0;return i}(s);if(0===e.length){d=null;break r}if(1===e.length&&(void 0===(p=e[0].props).color&&void 0===p.backgroundColor&&!0!==p.dim&&!0!==p.bold&&!0!==p.italic&&!0!==p.underline&&!0!==p.strikethrough&&!0!==p.inverse&&void 0===p.hyperlink)){d=r(n,c?{dim:!0,children:e[0].text}:{children:e[0].text});break r}let i;l[7]!==c?(i=(e,i)=>{const n=e.props.hyperlink;c&&(e.props.dim=!0);const o=function(r){return void 0!==r.color||void 0!==r.backgroundColor||!0===r.dim||!0===r.bold||!0===r.italic||!0===r.underline||!0===r.strikethrough||!0===r.inverse}(e.props);return n?r(t,o?{url:n,children:r(StyledText,{color:e.props.color,backgroundColor:e.props.backgroundColor,dim:e.props.dim,bold:e.props.bold,italic:e.props.italic,underline:e.props.underline,strikethrough:e.props.strikethrough,inverse:e.props.inverse,children:e.text})}:{url:n,children:e.text},i):o?r(StyledText,{color:e.props.color,backgroundColor:e.props.backgroundColor,dim:e.props.dim,bold:e.props.bold,italic:e.props.italic,underline:e.props.underline,strikethrough:e.props.strikethrough,inverse:e.props.inverse,children:e.text},i):e.text},l[7]=c,l[8]=i):i=l[8],a=e.map(i)}l[3]=s,l[4]=c,l[5]=a,l[6]=d}else a=l[5],d=l[6];var p;if(d!==Symbol.for("react.early_return_sentinel"))return d;const u=a;let h;return l[9]!==u||l[10]!==c?(h=r(n,c?{dim:!0,children:u}:{children:u}),l[9]=u,l[10]=c,l[11]=h):h=l[11],h});function textStyleToSpanProps(r){const e={};r.bold&&(e.bold=!0),r.dim&&(e.dim=!0),r.italic&&(e.italic=!0),"none"!==r.underline&&(e.underline=!0),r.strikethrough&&(e.strikethrough=!0),r.inverse&&(e.inverse=!0);const i=colorToString(r.fg);i&&(e.color=i);const t=colorToString(r.bg);return t&&(e.backgroundColor=t),e}const l={black:"ansi:black",red:"ansi:red",green:"ansi:green",yellow:"ansi:yellow",blue:"ansi:blue",magenta:"ansi:magenta",cyan:"ansi:cyan",white:"ansi:white",brightBlack:"ansi:blackBright",brightRed:"ansi:redBright",brightGreen:"ansi:greenBright",brightYellow:"ansi:yellowBright",brightBlue:"ansi:blueBright",brightMagenta:"ansi:magentaBright",brightCyan:"ansi:cyanBright",brightWhite:"ansi:whiteBright"};function colorToString(r){switch(r.type){case"named":return l[r.name];case"indexed":return`ansi256(${r.index})`;case"rgb":return`rgb(${r.r},${r.g},${r.b})`;case"default":return}}function propsEqual(r,e){return r.color===e.color&&r.backgroundColor===e.backgroundColor&&r.bold===e.bold&&r.dim===e.dim&&r.italic===e.italic&&r.underline===e.underline&&r.strikethrough===e.strikethrough&&r.inverse===e.inverse&&r.hyperlink===e.hyperlink}function StyledText(i){const t=e(14);let o,l,s,c,a;if(t[0]!==i?(({bold:o,dim:s,children:l,...c}=i),t[0]=i,t[1]=o,t[2]=l,t[3]=s,t[4]=c):(o=t[1],l=t[2],s=t[3],c=t[4]),s){let e;return t[5]!==l||t[6]!==c?(e=r(n,{...c,dim:!0,children:l}),t[5]=l,t[6]=c,t[7]=e):e=t[7],e}if(o){let e;return t[8]!==l||t[9]!==c?(e=r(n,{...c,bold:!0,children:l}),t[8]=l,t[9]=c,t[10]=e):e=t[10],e}return t[11]!==l||t[12]!==c?(a=r(n,{...c,children:l}),t[11]=l,t[12]=c,t[13]=a):a=t[13],a}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{CURSOR_HOME as e,csi as
|
|
1
|
+
import{CURSOR_HOME as e,csi as r,ERASE_SCREEN as n,ERASE_SCROLLBACK as o}from"./termio/csi.js";const s=r(0,"f");function isModernWindowsTerminal(){return!("win32"!==process.platform||!process.env.WT_SESSION)||(!("win32"!==process.platform||"vscode"!==process.env.TERM_PROGRAM||!process.env.TERM_PROGRAM_VERSION)||!!("mintty"===process.env.TERM_PROGRAM||"win32"===process.platform&&process.env.MSYSTEM))}export function getClearTerminalSequence(){return"win32"===process.platform?isModernWindowsTerminal()?n+o+e:n+s:n+o+e}export const clearTerminal=getClearTerminalSequence();
|
package/dist/src/ink/colorize.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import r from"chalk";export const CHALK_BOOSTED_FOR_XTERMJS="vscode"===process.env.TERM_PROGRAM&&2===r.level&&(r.level=3,!0);export const CHALK_CLAMPED_FOR_TMUX=!(process.env.CONTEXT_CODE_TMUX_TRUECOLOR||process.env.CLAUDE_CODE_TMUX_TRUECOLOR||!(process.env.TMUX&&r.level>2)||(r.level=2,0));const e=/^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,t=/^ansi256\(\s?(\d+)\s?\)$/;export const colorize=(n,o,g)=>{if(!o)return n;if(o.startsWith("ansi:"))switch(o.substring(5)){case"black":return"foreground"===g?r.black(n):r.bgBlack(n);case"red":return"foreground"===g?r.red(n):r.bgRed(n);case"green":return"foreground"===g?r.green(n):r.bgGreen(n);case"yellow":return"foreground"===g?r.yellow(n):r.bgYellow(n);case"blue":return"foreground"===g?r.blue(n):r.bgBlue(n);case"magenta":return"foreground"===g?r.magenta(n):r.bgMagenta(n);case"cyan":return"foreground"===g?r.cyan(n):r.bgCyan(n);case"white":return"foreground"===g?r.white(n):r.bgWhite(n);case"blackBright":return"foreground"===g?r.blackBright(n):r.bgBlackBright(n);case"redBright":return"foreground"===g?r.redBright(n):r.bgRedBright(n);case"greenBright":return"foreground"===g?r.greenBright(n):r.bgGreenBright(n);case"yellowBright":return"foreground"===g?r.yellowBright(n):r.bgYellowBright(n);case"blueBright":return"foreground"===g?r.blueBright(n):r.bgBlueBright(n);case"magentaBright":return"foreground"===g?r.magentaBright(n):r.bgMagentaBright(n);case"cyanBright":return"foreground"===g?r.cyanBright(n):r.bgCyanBright(n);case"whiteBright":return"foreground"===g?r.whiteBright(n):r.bgWhiteBright(n)}if(o.startsWith("#"))return"foreground"===g?r.hex(o)(n):r.bgHex(o)(n);if(o.startsWith("ansi256")){const e=t.exec(o);if(!e)return n;const i=Number(e[1]);return"foreground"===g?r.ansi256(i)(n):r.bgAnsi256(i)(n)}if(o.startsWith("rgb")){const t=e.exec(o);if(!t)return n;const i=Number(t[1]),u=Number(t[2]),s=Number(t[3]);return"foreground"===g?r.rgb(i,u,s)(n):r.bgRgb(i,u,s)(n)}return n};export function applyTextStyles(e,t){let n=e;return t.inverse&&(n=r.inverse(n)),t.strikethrough&&(n=r.strikethrough(n)),t.underline&&(n=r.underline(n)),t.italic&&(n=r.italic(n)),t.bold&&(n=r.bold(n)),t.dim&&(n=r.dim(n)),t.color&&(n=colorize(n,t.color,"foreground")),t.backgroundColor&&(n=colorize(n,t.backgroundColor,"background")),n}export function applyColor(r,e){return e?colorize(r,e,"foreground"):r}
|
|
1
|
+
import r from"chalk";export const CHALK_BOOSTED_FOR_XTERMJS="vscode"===process.env.TERM_PROGRAM&&2===r.level&&(r.level=3,!0);export const CHALK_CLAMPED_FOR_TMUX=!(process.env.CONTEXT_CODE_TMUX_TRUECOLOR||process.env.CLAUDE_CODE_TMUX_TRUECOLOR||!(process.env.TMUX&&r.level>2)||(r.level=2,0));const e=/^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,t=/^ansi256\(\s?(\d+)\s?\)$/;export const colorize=(n,o,g)=>{if(!o)return n;if(o.startsWith("ansi:")){switch(o.substring(5)){case"black":return"foreground"===g?r.black(n):r.bgBlack(n);case"red":return"foreground"===g?r.red(n):r.bgRed(n);case"green":return"foreground"===g?r.green(n):r.bgGreen(n);case"yellow":return"foreground"===g?r.yellow(n):r.bgYellow(n);case"blue":return"foreground"===g?r.blue(n):r.bgBlue(n);case"magenta":return"foreground"===g?r.magenta(n):r.bgMagenta(n);case"cyan":return"foreground"===g?r.cyan(n):r.bgCyan(n);case"white":return"foreground"===g?r.white(n):r.bgWhite(n);case"blackBright":return"foreground"===g?r.blackBright(n):r.bgBlackBright(n);case"redBright":return"foreground"===g?r.redBright(n):r.bgRedBright(n);case"greenBright":return"foreground"===g?r.greenBright(n):r.bgGreenBright(n);case"yellowBright":return"foreground"===g?r.yellowBright(n):r.bgYellowBright(n);case"blueBright":return"foreground"===g?r.blueBright(n):r.bgBlueBright(n);case"magentaBright":return"foreground"===g?r.magentaBright(n):r.bgMagentaBright(n);case"cyanBright":return"foreground"===g?r.cyanBright(n):r.bgCyanBright(n);case"whiteBright":return"foreground"===g?r.whiteBright(n):r.bgWhiteBright(n)}}if(o.startsWith("#"))return"foreground"===g?r.hex(o)(n):r.bgHex(o)(n);if(o.startsWith("ansi256")){const e=t.exec(o);if(!e)return n;const i=Number(e[1]);return"foreground"===g?r.ansi256(i)(n):r.bgAnsi256(i)(n)}if(o.startsWith("rgb")){const t=e.exec(o);if(!t)return n;const i=Number(t[1]),u=Number(t[2]),s=Number(t[3]);return"foreground"===g?r.rgb(i,u,s)(n):r.bgRgb(i,u,s)(n)}return n};export function applyTextStyles(e,t){let n=e;return t.inverse&&(n=r.inverse(n)),t.strikethrough&&(n=r.strikethrough(n)),t.underline&&(n=r.underline(n)),t.italic&&(n=r.italic(n)),t.bold&&(n=r.bold(n)),t.dim&&(n=r.dim(n)),t.color&&(n=colorize(n,t.color,"foreground")),t.backgroundColor&&(n=colorize(n,t.backgroundColor,"background")),n}export function applyColor(r,e){return e?colorize(r,e,"foreground"):r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{PureComponent as t}from"react";import{updateLastInteractionTime as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{PureComponent as t}from"react";import{updateLastInteractionTime as i}from"../../bootstrap/state.js";import{logForDebugging as r}from"../../utils/debug.js";import{stopCapturingEarlyInput as s}from"../../utils/earlyInput.js";import{isEnvTruthy as o}from"../../utils/envUtils.js";import{isMouseClicksDisabled as n}from"../../utils/fullscreen.js";import{logError as p}from"../../utils/log.js";import{EventEmitter as l}from"../events/emitter.js";import{InputEvent as a}from"../events/input-event.js";import{TerminalFocusEvent as d}from"../events/terminal-focus-event.js";import{INITIAL_STATE as m,parseMultipleKeypresses as u}from"../parse-keypress.js";import h from"../reconciler.js";import{finishSelection as c,hasSelection as T,startSelection as C}from"../selection.js";import{isXtermJs as f,setXtversionName as w,supportsExtendedKeys as v}from"../terminal.js";import{getTerminalFocused as E,setTerminalFocused as S}from"../terminal-focus-state.js";import{TerminalQuerier as k,xtversion as R}from"../terminal-querier.js";import{DISABLE_KITTY_KEYBOARD as g,DISABLE_MODIFY_OTHER_KEYS as M,ENABLE_KITTY_KEYBOARD as I,ENABLE_MODIFY_OTHER_KEYS as b,FOCUS_IN as y,FOCUS_OUT as j}from"../termio/csi.js";import{DBP as O,DFE as _,DISABLE_MOUSE_TRACKING as H,EBP as x,EFE as A,HIDE_CURSOR as D,SHOW_CURSOR as P}from"../termio/dec.js";import L from"./AppContext.js";import{ClockProvider as N}from"./ClockContext.js";import U from"./CursorDeclarationContext.js";import q from"./ErrorOverview.js";import Y from"./StdinContext.js";import{TerminalFocusProvider as B}from"./TerminalFocusContext.js";import{TerminalSizeContext as F}from"./TerminalSizeContext.js";const G="win32"!==process.platform;export default class App extends t{static displayName="InternalApp";static getDerivedStateFromError(e){return{error:e}}state={error:void 0};rawModeEnabledCount=0;internal_eventEmitter=new l;keyParseState=m;incompleteEscapeTimer=null;NORMAL_TIMEOUT=50;PASTE_TIMEOUT=500;querier=new k(this.props.stdout);lastClickTime=0;lastClickCol=-1;lastClickRow=-1;clickCount=0;pendingHyperlinkTimer=null;lastHoverCol=-1;lastHoverRow=-1;lastStdinTime=Date.now();isRawModeSupported(){return this.props.stdin.isTTY}render(){return e(F.Provider,{value:{columns:this.props.terminalColumns,rows:this.props.terminalRows},children:e(L.Provider,{value:{exit:this.handleExit},children:e(Y.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC,internal_eventEmitter:this.internal_eventEmitter,internal_querier:this.querier},children:e(B,{children:e(N,{children:e(U.Provider,{value:this.props.onCursorDeclaration??(()=>{}),children:this.state.error?e(q,{error:this.state.error}):this.props.children})})})})})})}componentDidMount(){!this.props.stdout.isTTY||o(process.env.CONTEXT_CODE_ACCESSIBILITY)||o(process.env.CLAUDE_CODE_ACCESSIBILITY)||this.props.stdout.write(D)}componentWillUnmount(){this.props.stdout.isTTY&&this.props.stdout.write(P),this.incompleteEscapeTimer&&(clearTimeout(this.incompleteEscapeTimer),this.incompleteEscapeTimer=null),this.pendingHyperlinkTimer&&(clearTimeout(this.pendingHyperlinkTimer),this.pendingHyperlinkTimer=null),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(e){this.handleExit(e)}handleSetRawMode=e=>{const{stdin:t}=this.props;if(!this.isRawModeSupported())throw t===process.stdin?new Error("Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default.\nRead about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported"):new Error("Raw mode is not supported on the stdin provided to Ink.\nRead about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported");if(t.setEncoding("utf8"),e)return 0===this.rawModeEnabledCount&&(s(),t.ref(),t.setRawMode(!0),t.addListener("readable",this.handleReadable),this.props.stdout.write(x),this.props.stdout.write(A),v()&&(this.props.stdout.write(I),this.props.stdout.write(b)),setImmediate(()=>{Promise.all([this.querier.send(R()),this.querier.flush()]).then(([e])=>{e?(w(e.name),r(`XTVERSION: terminal identified as "${e.name}"`)):r("XTVERSION: no reply (terminal ignored query)")})})),void this.rawModeEnabledCount++;0===--this.rawModeEnabledCount&&(this.props.stdout.write(M),this.props.stdout.write(g),this.props.stdout.write(_),this.props.stdout.write(O),t.setRawMode(!1),t.removeListener("readable",this.handleReadable),t.unref())};flushIncomplete=()=>{this.incompleteEscapeTimer=null,this.keyParseState.incomplete&&(this.props.stdin.readableLength>0?this.incompleteEscapeTimer=setTimeout(this.flushIncomplete,this.NORMAL_TIMEOUT):this.processInput(null))};processInput=e=>{const[t,i]=u(this.keyParseState,e);this.keyParseState=i,t.length>0&&h.discreteUpdates(processKeysInBatch,this,t,void 0,void 0),this.keyParseState.incomplete&&(this.incompleteEscapeTimer&&clearTimeout(this.incompleteEscapeTimer),this.incompleteEscapeTimer=setTimeout(this.flushIncomplete,"IN_PASTE"===this.keyParseState.mode?this.PASTE_TIMEOUT:this.NORMAL_TIMEOUT))};handleReadable=()=>{const e=Date.now();e-this.lastStdinTime>5e3&&this.props.onStdinResume?.(),this.lastStdinTime=e;try{let e;for(;null!==(e=this.props.stdin.read());)this.processInput(e)}catch(e){p(e);const{stdin:t}=this.props;this.rawModeEnabledCount>0&&!t.listeners("readable").includes(this.handleReadable)&&(r("handleReadable: re-attaching stdin readable listener after error recovery",{level:"warn"}),t.addListener("readable",this.handleReadable))}};handleInput=e=>{""===e&&this.props.exitOnCtrlC&&this.handleExit()};handleExit=e=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(e)};handleTerminalFocus=e=>{S(e)};handleSuspend=()=>{if(!this.isRawModeSupported())return;const e=this.rawModeEnabledCount;for(;this.rawModeEnabledCount>0;)this.handleSetRawMode(!1);this.props.stdout.isTTY&&this.props.stdout.write(P+_+H),this.internal_eventEmitter.emit("suspend");const resumeHandler=()=>{for(let t=0;t<e;t++)this.isRawModeSupported()&&this.handleSetRawMode(!0);this.props.stdout.isTTY&&(o(process.env.CONTEXT_CODE_ACCESSIBILITY)||o(process.env.CLAUDE_CODE_ACCESSIBILITY)||this.props.stdout.write(D),this.props.stdout.write(A)),this.internal_eventEmitter.emit("resume"),process.removeListener("SIGCONT",resumeHandler)};process.on("SIGCONT",resumeHandler),process.kill(process.pid,"SIGSTOP")}}function processKeysInBatch(e,t,r,s){t.some(e=>"key"===e.kind||"mouse"===e.kind&&!(32&e.button&&!(3&~e.button)))&&i();for(const i of t){if("response"===i.kind){e.querier.onResponse(i.response);continue}if("mouse"===i.kind){handleMouseEvent(e,i);continue}const t=i.sequence;if(t===y){e.handleTerminalFocus(!0);const t=new d("terminalfocus");e.internal_eventEmitter.emit("terminalfocus",t);continue}if(t===j){e.handleTerminalFocus(!1),e.props.selection.isDragging&&(c(e.props.selection),e.props.onSelectionChange());const t=new d("terminalblur");e.internal_eventEmitter.emit("terminalblur",t);continue}if(E()||S(!0),"z"===i.name&&i.ctrl&&G){e.handleSuspend();continue}e.handleInput(t);const r=new a(i);e.internal_eventEmitter.emit("input",r),e.props.dispatchKeyboardEvent(i)}}export function handleMouseEvent(e,t){if(n())return;const i=e.props.selection,r=t.col-1,s=t.row-1,o=3&t.button;if("press"===t.action){if(32&t.button&&3===o){if(i.isDragging&&(c(i),e.props.onSelectionChange()),r===e.lastHoverCol&&s===e.lastHoverRow)return;return e.lastHoverCol=r,e.lastHoverRow=s,void e.props.onHoverAt(r,s)}if(0!==o)return void(e.clickCount=0);if(32&t.button)return void e.props.onSelectionDrag(r,s);i.isDragging&&(c(i),e.props.onSelectionChange());const n=Date.now(),p=n-e.lastClickTime<500&&Math.abs(r-e.lastClickCol)<=1&&Math.abs(s-e.lastClickRow)<=1;if(e.clickCount=p?e.clickCount+1:1,e.lastClickTime=n,e.lastClickCol=r,e.lastClickRow=s,e.clickCount>=2){e.pendingHyperlinkTimer&&(clearTimeout(e.pendingHyperlinkTimer),e.pendingHyperlinkTimer=null);const t=2===e.clickCount?2:3;return void e.props.onMultiClick(r,s,t)}return C(i,r,s),i.lastPressHadAlt=!!(8&t.button),void e.props.onSelectionChange()}if(0!==o){if(!i.isDragging)return;return c(i),void e.props.onSelectionChange()}if(c(i),!T(i)&&i.anchor&&!e.props.onClickAt(r,s)){const t=e.props.getHyperlinkAt(r,s);t&&"vscode"!==process.env.TERM_PROGRAM&&!f()&&(e.pendingHyperlinkTimer&&clearTimeout(e.pendingHyperlinkTimer),e.pendingHyperlinkTimer=setTimeout((e,t)=>{e.pendingHyperlinkTimer=null,e.props.onOpenHyperlink(t)},500,e,t))}e.props.onSelectionChange()}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useEffect as o,useRef as n,useState as r}from"react";import c from"./Box.js";function Button(
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{useEffect as o,useRef as n,useState as r}from"react";import c from"./Box.js";function Button(l){const m=t(30);let u,s,a,i,f,_;m[0]!==l?(({onAction:a,tabIndex:_,autoFocus:u,children:s,ref:i,...f}=l),m[0]=l,m[1]=u,m[2]=s,m[3]=a,m[4]=i,m[5]=f,m[6]=_):(u=m[1],s=m[2],a=m[3],i=m[4],f=m[5],_=m[6]);const p=void 0===_?0:_,[y,d]=r(!1),[h,b]=r(!1),[x,v]=r(!1),S=n(null);let B,j,k;m[7]===Symbol.for("react.memo_cache_sentinel")?(B=()=>()=>{S.current&&clearTimeout(S.current)},j=[],m[7]=B,m[8]=j):(B=m[7],j=m[8]),o(B,j),m[9]!==a?(k=e=>{"return"!==e.key&&" "!==e.key||(e.preventDefault(),v(!0),a(),S.current&&clearTimeout(S.current),S.current=setTimeout(_temp,100,v))},m[9]=a,m[10]=k):k=m[10];const F=k;let T;m[11]!==a?(T=e=>{a()},m[11]=a,m[12]=T):T=m[12];const D=T;let I;m[13]===Symbol.for("react.memo_cache_sentinel")?(I=e=>d(!0),m[13]=I):I=m[13];const M=I;let w;m[14]===Symbol.for("react.memo_cache_sentinel")?(w=e=>d(!1),m[14]=w):w=m[14];const A=w;let C;m[15]===Symbol.for("react.memo_cache_sentinel")?(C=()=>b(!0),m[15]=C):C=m[15];const E=C;let K;m[16]===Symbol.for("react.memo_cache_sentinel")?(K=()=>b(!1),m[16]=K):K=m[16];const L=K;let g;if(m[17]!==s||m[18]!==x||m[19]!==y||m[20]!==h){g="function"==typeof s?s({focused:y,hovered:h,active:x}):s,m[17]=s,m[18]=x,m[19]=y,m[20]=h,m[21]=g}else g=m[21];const q=g;let z;return m[22]!==u||m[23]!==q||m[24]!==D||m[25]!==F||m[26]!==i||m[27]!==f||m[28]!==p?(z=e(c,{ref:i,tabIndex:p,autoFocus:u,onKeyDown:F,onClick:D,onFocus:M,onBlur:A,onMouseEnter:E,onMouseLeave:L,...f,children:q}),m[22]=u,m[23]=q,m[24]=D,m[25]=F,m[26]=i,m[27]=f,m[28]=p,m[29]=z):z=m[29],z}function _temp(e){return e(!1)}export default Button;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{c as e}from"react/compiler-runtime";import{createContext as n,useEffect as o,useState as r}from"react";import{FRAME_INTERVAL_MS as l}from"../constants.js";import{useTerminalFocus as c}from"../hooks/use-terminal-focus.js";export function createClock(t){const e=new Map;let n=null,o=t,r=0,l=0;function tick(){l=Date.now()-r;for(const t of e.keys())t()}function updateInterval(){[...e.values()].some(Boolean)?(n&&(clearInterval(n),n=null),0===r&&(r=Date.now()),n=setInterval(tick,o)):n&&(clearInterval(n),n=null)}return{subscribe:(t,n)=>(e.set(t,n),updateInterval(),()=>{e.delete(t),updateInterval()}),now:()=>(0===r&&(r=Date.now()),n&&l?l:Date.now()-r),setTickInterval(t){t!==o&&(o=t,updateInterval())}}}export const ClockContext=n(null);const a=2*l;export function ClockProvider(n){const s=e(7),{children:i}=n,[u]=r(_temp),m=c();let p,f,v;return s[0]!==u||s[1]!==m?(p=()=>{u.setTickInterval(m?l:a)},f=[u,m],s[0]=u,s[1]=m,s[2]=p,s[3]=f):(p=s[2],f=s[3]),o(p,f),s[4]!==i||s[5]!==u?(v=t(ClockContext.Provider,{value:u,children:i}),s[4]=i,s[5]=u,s[6]=v):v=s[6],v}function _temp(){return createClock(l)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createContext as t}from"react";const
|
|
1
|
+
import{createContext as t}from"react";const o=t(()=>{});export default o;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{supportsHyperlinks as e}from"../supports-hyperlinks.js";import i from"./Text.js";export default function Link(n){const o=t(5),{children:
|
|
1
|
+
import{jsx as r}from"react/jsx-runtime";import{c as t}from"react/compiler-runtime";import{supportsHyperlinks as e}from"../supports-hyperlinks.js";import i from"./Text.js";export default function Link(n){const o=t(5),{children:l,url:c,fallback:m}=n,s=l??c;if(e()){let t;return o[0]!==s||o[1]!==c?(t=r(i,{children:r("ink-link",{href:c,children:s})}),o[0]=s,o[1]=c,o[2]=t):t=o[2],t}const f=m??s;let p;return o[3]!==f?(p=r(i,{children:f}),o[3]=f,o[4]=p):p=o[4],p}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createContext as
|
|
1
|
+
import{createContext as e}from"react";import{EventEmitter as t}from"../events/emitter.js";const n=e({stdin:process.stdin,internal_eventEmitter:new t,setRawMode(){},isRawModeSupported:!1,internal_exitOnCtrlC:!0,internal_querier:null});n.displayName="InternalStdinContext";export default n;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e}from"react/jsx-runtime";import{c as
|
|
1
|
+
import{jsx as e}from"react/jsx-runtime";import{c as r}from"react/compiler-runtime";import{createContext as t,useSyncExternalStore as o}from"react";import{getTerminalFocused as i,getTerminalFocusState as n,subscribeTerminalFocus as a}from"../terminal-focus-state.js";const m=t({isTerminalFocused:!0,terminalFocusState:"unknown"});m.displayName="TerminalFocusContext";export function TerminalFocusProvider(t){const s=r(6),{children:c}=t,l=o(a,i),u=o(a,n);let d;s[0]!==l||s[1]!==u?(d={isTerminalFocused:l,terminalFocusState:u},s[0]=l,s[1]=u,s[2]=d):d=s[2];const p=d;let f;return s[3]!==c||s[4]!==p?(f=e(m.Provider,{value:p,children:c}),s[3]=c,s[4]=p,s[5]=f):f=s[5],f}export default m;
|
package/dist/src/ink/dom.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createLayoutNode as e}from"./layout/engine.js";import{LayoutDisplay as
|
|
1
|
+
import{createLayoutNode as e}from"./layout/engine.js";import{LayoutDisplay as t,LayoutMeasureMode as o}from"./layout/node.js";import r from"./measure-text.js";import{addPendingClear as n,nodeCache as d}from"./node-cache.js";import i from"./squash-text-nodes.js";import{expandTabs as a}from"./tabstops.js";import s from"./wrap-text.js";export const createNode=t=>{const o={nodeName:t,style:{},attributes:{},childNodes:[],parentNode:void 0,yogaNode:"ink-virtual-text"!==t&&"ink-link"!==t&&"ink-progress"!==t?e():void 0,dirty:!1};return"ink-text"===t?o.yogaNode?.setMeasureFunc(measureTextNode.bind(null,o)):"ink-raw-ansi"===t&&o.yogaNode?.setMeasureFunc(measureRawAnsiNode.bind(null,o)),o};export const appendChildNode=(e,t)=>{t.parentNode&&removeChildNode(t.parentNode,t),t.parentNode=e,e.childNodes.push(t),t.yogaNode&&e.yogaNode?.insertChild(t.yogaNode,e.yogaNode.getChildCount()),markDirty(e)};export const insertBeforeNode=(e,t,o)=>{t.parentNode&&removeChildNode(t.parentNode,t),t.parentNode=e;const r=e.childNodes.indexOf(o);if(r>=0){let o=0;if(t.yogaNode&&e.yogaNode)for(let t=0;t<r;t++)e.childNodes[t]?.yogaNode&&o++;return e.childNodes.splice(r,0,t),t.yogaNode&&e.yogaNode&&e.yogaNode.insertChild(t.yogaNode,o),void markDirty(e)}e.childNodes.push(t),t.yogaNode&&e.yogaNode?.insertChild(t.yogaNode,e.yogaNode.getChildCount()),markDirty(e)};export const removeChildNode=(e,t)=>{t.yogaNode&&t.parentNode?.yogaNode?.removeChild(t.yogaNode),collectRemovedRects(e,t),t.parentNode=void 0;const o=e.childNodes.indexOf(t);o>=0&&e.childNodes.splice(o,1),markDirty(e)};function collectRemovedRects(e,t,o=!1){if("#text"===t.nodeName)return;const r=t,i=o||"absolute"===r.style.position,a=d.get(r);a&&(n(e,a,i),d.delete(r));for(const t of r.childNodes)collectRemovedRects(e,t,i)}export const setAttribute=(e,t,o)=>{"children"!==t&&e.attributes[t]!==o&&(e.attributes[t]=o,markDirty(e))};export const setStyle=(e,t)=>{shallowEqual(e.style,t)||(e.style=t,markDirty(e))};export const setTextStyles=(e,t)=>{shallowEqual(e.textStyles,t)||(e.textStyles=t,markDirty(e))};function shallowEqual(e,t){if(e===t)return!0;if(void 0===e||void 0===t)return!1;const o=Object.keys(e),r=Object.keys(t);if(o.length!==r.length)return!1;for(const r of o)if(e[r]!==t[r])return!1;return!0}export const createTextNode=e=>{const t={nodeName:"#text",nodeValue:e,yogaNode:void 0,parentNode:void 0,style:{}};return setTextNodeValue(t,e),t};const measureTextNode=function(e,t,n){const d="#text"===e.nodeName?e.nodeValue:i(e),l=a(d),c=r(l,t);if(c.width<=t)return c;if(c.width>=1&&t>0&&t<1)return c;if(l.includes("\n")&&n===o.Undefined){const e=Math.max(t,c.width);return r(l,e)}const N=e.style?.textWrap??"wrap",u=s(l,t,N);return r(u,t)},measureRawAnsiNode=function(e){return{width:e.attributes.rawWidth,height:e.attributes.rawHeight}};export const markDirty=e=>{let t=e,o=!1;for(;t;)"#text"!==t.nodeName&&(t.dirty=!0,o||"ink-text"!==t.nodeName&&"ink-raw-ansi"!==t.nodeName||!t.yogaNode||(t.yogaNode.markDirty(),o=!0)),t=t.parentNode};export const scheduleRenderFrom=e=>{let t=e;for(;t?.parentNode;)t=t.parentNode;t&&"#text"!==t.nodeName&&t.onRender?.()};export const setTextNodeValue=(e,t)=>{"string"!=typeof t&&(t=String(t)),e.nodeValue!==t&&(e.nodeValue=t,markDirty(e))};function isDOMElement(e){return"#text"!==e.nodeName}export const clearYogaNodeReferences=e=>{if("childNodes"in e)for(const t of e.childNodes)clearYogaNodeReferences(t);e.yogaNode=void 0};export function findOwnerChainAtRow(e,o){let r=[];return function walk(e,n){const d=e.yogaNode;if(!d||d.getDisplay()===t.None)return;const i=n+d.getComputedTop(),a=d.getComputedHeight();if(o<i||o>=i+a)return;e.debugOwnerChain&&(r=e.debugOwnerChain);for(const t of e.childNodes)isDOMElement(t)&&walk(t,i)}(e,0),r}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{TerminalEvent as
|
|
1
|
+
import{TerminalEvent as t}from"./terminal-event.js";export class KeyboardEvent extends t{key;ctrl;shift;meta;superKey;fn;constructor(t){super("keydown",{bubbles:!0,cancelable:!0}),this.key=function(t){const e=t.sequence??"",r=t.name??"";if(t.ctrl)return r;if(1===e.length){const t=e.charCodeAt(0);if(t>=32&&127!==t)return e}return r||e}(t),this.ctrl=t.ctrl,this.shift=t.shift,this.meta=t.meta||t.option,this.superKey=t.super,this.fn=t.fn}}
|
package/dist/src/ink/hit-test.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ClickEvent as e}from"./events/click-event.js";import{nodeCache as t}from"./node-cache.js";export function hitTest(e,n
|
|
1
|
+
import{ClickEvent as e}from"./events/click-event.js";import{nodeCache as t}from"./node-cache.js";export function hitTest(e,o,n){const r=t.get(e);if(!r)return null;if(o<r.x||o>=r.x+r.width||n<r.y||n>=r.y+r.height)return null;for(let t=e.childNodes.length-1;t>=0;t--){const r=e.childNodes[t];if("#text"===r.nodeName)continue;const i=hitTest(r,o,n);if(i)return i}return e}export function dispatchClick(o,n,r,i=!1){let s=hitTest(o,n,r)??void 0;if(!s)return!1;if(o.focusManager){let e=s;for(;e;){if("number"==typeof e.attributes.tabIndex){o.focusManager.handleClickFocus(e);break}e=e.parentNode}}const a=new e(n,r,i);let c=!1;for(;s;){const e=s._eventHandlers?.onClick;if(e){c=!0;const o=t.get(s);if(o&&(a.localCol=n-o.x,a.localRow=r-o.y),e(a),a.didStopImmediatePropagation())return!0}s=s.parentNode}return c}export function dispatchHover(e,t,o,n){const r=new Set;let i=hitTest(e,t,o)??void 0;for(;i;){const e=i._eventHandlers;(e?.onMouseEnter||e?.onMouseLeave)&&r.add(i),i=i.parentNode}for(const e of n)r.has(e)||(n.delete(e),e.parentNode&&e._eventHandlers?.onMouseLeave?.());for(const e of r)n.has(e)||(n.add(e),e._eventHandlers?.onMouseEnter?.())}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as
|
|
1
|
+
import{useContext as o,useEffect as r,useState as t}from"react";import{ClockContext as n}from"../components/ClockContext.js";import{useTerminalViewport as e}from"./use-terminal-viewport.js";export function useAnimationFrame(i=16){const s=o(n),[m,{isVisible:u}]=e(),[c,l]=t(()=>s?.now()??0),p=u&&null!==i;return r(()=>{if(!s||!p)return;let o=s.now();return s.subscribe(()=>{const r=s.now();r-o>=i&&(o=r,l(r))},!0)},[s,i,p]),[m,c]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as
|
|
1
|
+
import{useContext as o}from"react";import t from"../components/AppContext.js";export default()=>o(t);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useEffect as t,useLayoutEffect as e}from"react";import{useEventCallback as i}from"usehooks-ts";import
|
|
1
|
+
import{useEffect as t,useLayoutEffect as e}from"react";import{useEventCallback as i}from"usehooks-ts";import r from"./use-stdin.js";export default(n,o={})=>{const{setRawMode:s,internal_exitOnCtrlC:c,internal_eventEmitter:m}=r();e(()=>{if(!1!==o.isActive)return s(!0),()=>{s(!1)}},[o.isActive,s]);const u=i(t=>{if(!1===o.isActive)return;const{input:e,key:i}=t;"c"===e&&i.ctrl&&c||n(e,i,t)});t(()=>(m?.on("input",u),()=>{m?.removeListener("input",u)}),[m,u])};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as
|
|
1
|
+
import{useContext as n,useEffect as t,useRef as r,useState as o}from"react";import{ClockContext as e}from"../components/ClockContext.js";export function useAnimationTimer(r){const c=n(e),[u,s]=o(()=>c?.now()??0);return t(()=>{if(!c)return;let n=c.now();return c.subscribe(()=>{const t=c.now();t-n>=r&&(n=t,s(t))},!1)},[c,r]),u}export function useInterval(o,c){const u=r(o);u.current=o;const s=n(e);t(()=>{if(!s||null===c)return;let n=s.now();return s.subscribe(()=>{const t=s.now();t-n>=c&&(n=t,u.current())},!1)},[s,c])}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as e,useMemo as o,useSyncExternalStore as t}from"react";import c from"../components/StdinContext.js";import
|
|
1
|
+
import{useContext as e,useMemo as o,useSyncExternalStore as t}from"react";import c from"../components/StdinContext.js";import n from"../instances.js";import{shiftAnchor as s}from"../selection.js";export function useSelection(){e(c);const t=n.get(process.stdout);return o(()=>t?{copySelection:()=>t.copySelection(),copySelectionNoClear:()=>t.copySelectionNoClear(),clearSelection:()=>t.clearTextSelection(),hasSelection:()=>t.hasTextSelection(),getState:()=>t.selection,subscribe:e=>t.subscribeToSelectionChange(e),shiftAnchor:(e,o,c)=>s(t.selection,e,o,c),shiftSelection:(e,o,c)=>t.shiftSelectionForScroll(e,o,c),moveFocus:e=>t.moveSelectionFocus(e),captureScrolledRows:(e,o,c)=>t.captureScrolledRows(e,o,c),setSelectionBgColor:e=>t.setSelectionBgColor(e)}:{copySelection:()=>"",copySelectionNoClear:()=>"",clearSelection:()=>{},hasSelection:()=>!1,getState:()=>null,subscribe:()=>()=>{},shiftAnchor:()=>{},shiftSelection:()=>{},moveFocus:()=>{},captureScrolledRows:()=>{},setSelectionBgColor:()=>{}},[t])}const NO_SUBSCRIBE=()=>()=>{},ALWAYS_FALSE=()=>!1;export function useHasSelection(){e(c);const o=n.get(process.stdout);return t(o?o.subscribeToSelectionChange:NO_SUBSCRIBE,o?o.hasTextSelection:ALWAYS_FALSE)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as t,useEffect as
|
|
1
|
+
import{useContext as t,useEffect as r,useRef as o}from"react";import{CLEAR_TAB_STATUS as i,supportsTabStatus as s,tabStatus as n,wrapForMultiplexer as u}from"../termio/osc.js";import{TerminalWriteContext as a}from"../useTerminalNotification.js";const rgb=(t,r,o)=>({type:"rgb",r:t,g:r,b:o}),l={idle:{indicator:rgb(0,215,95),status:"Idle",statusColor:rgb(136,136,136)},busy:{indicator:rgb(255,149,0),status:"Working…",statusColor:rgb(255,149,0)},waiting:{indicator:rgb(95,135,255),status:"Waiting",statusColor:rgb(95,135,255)}};export function useTabStatus(e){const c=t(a),m=o(null);r(()=>{if(null===e)return null!==m.current&&c&&s()&&c(u(i)),void(m.current=null);m.current=e,c&&s()&&c(u(n(l[e])))},[e,c])}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as o}from"react";import
|
|
1
|
+
import{useContext as o}from"react";import r from"../components/TerminalFocusContext.js";export function useTerminalFocus(){const{isTerminalFocused:e}=o(r);return e}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as
|
|
1
|
+
import{useContext as o,useEffect as r}from"react";import t from"strip-ansi";import{OSC as i,osc as s}from"../termio/osc.js";import{TerminalWriteContext as e}from"../useTerminalNotification.js";export function useTerminalTitle(m){const n=o(e);r(()=>{if(null===m||!n)return;const o=t(m);"win32"===process.platform?process.title=o:n(s(i.SET_TITLE_AND_ICON,o))},[m,n])}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as
|
|
1
|
+
import{useCallback as o,useContext as e,useLayoutEffect as t,useRef as r}from"react";import{TerminalSizeContext as n}from"../components/TerminalSizeContext.js";export function useTerminalViewport(){const i=e(n),s=r(null),p=r({isVisible:!0}),a=o(o=>{s.current=o},[]);return t(()=>{const o=s.current;if(!o?.yogaNode||!i)return;const e=o.yogaNode.getComputedHeight(),t=i.rows;let r=o.yogaNode.getComputedTop(),n=o.parentNode,a=o.yogaNode;for(;n;)n.yogaNode&&(r+=n.yogaNode.getComputedTop(),a=n.yogaNode),n.scrollTop&&(r-=n.scrollTop),n=n.parentNode;const c=a.getComputedHeight(),u=r+e,d=c>t?1:0,g=Math.max(0,c-t)+d,l=u>g&&r<g+t;l!==p.current.isVisible&&(p.current={isVisible:l})}),[a,p.current]}
|