@xelauvas/xela-cli 0.1.0
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/README.md +200 -0
- package/bin/xela +100 -0
- package/package.json +88 -0
- package/src/QueryEngine.ts +1295 -0
- package/src/Task.ts +125 -0
- package/src/Tool.ts +792 -0
- package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
- package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
- package/src/_shims/bun_bundle.js +9 -0
- package/src/_shims/cjs_stub.cjs +23 -0
- package/src/_shims/empty_stub.js +33 -0
- package/src/_shims/loader.js +352 -0
- package/src/_shims/openai_adapter.ts +486 -0
- package/src/_shims/react_compiler_runtime.js +17 -0
- package/src/_shims/register.js +148 -0
- package/src/assistant/sessionHistory.ts +87 -0
- package/src/bootstrap/state.ts +1759 -0
- package/src/bridge/bridgeApi.ts +539 -0
- package/src/bridge/bridgeConfig.ts +48 -0
- package/src/bridge/bridgeDebug.ts +135 -0
- package/src/bridge/bridgeEnabled.ts +202 -0
- package/src/bridge/bridgeMain.ts +2999 -0
- package/src/bridge/bridgeMessaging.ts +461 -0
- package/src/bridge/bridgePermissionCallbacks.ts +43 -0
- package/src/bridge/bridgePointer.ts +210 -0
- package/src/bridge/bridgeStatusUtil.ts +163 -0
- package/src/bridge/bridgeUI.ts +530 -0
- package/src/bridge/capacityWake.ts +56 -0
- package/src/bridge/codeSessionApi.ts +168 -0
- package/src/bridge/createSession.ts +384 -0
- package/src/bridge/debugUtils.ts +141 -0
- package/src/bridge/envLessBridgeConfig.ts +165 -0
- package/src/bridge/flushGate.ts +71 -0
- package/src/bridge/inboundAttachments.ts +175 -0
- package/src/bridge/inboundMessages.ts +80 -0
- package/src/bridge/initReplBridge.ts +569 -0
- package/src/bridge/jwtUtils.ts +256 -0
- package/src/bridge/pollConfig.ts +110 -0
- package/src/bridge/pollConfigDefaults.ts +82 -0
- package/src/bridge/remoteBridgeCore.ts +1008 -0
- package/src/bridge/replBridge.ts +2406 -0
- package/src/bridge/replBridgeHandle.ts +36 -0
- package/src/bridge/replBridgeTransport.ts +370 -0
- package/src/bridge/sessionIdCompat.ts +57 -0
- package/src/bridge/sessionRunner.ts +550 -0
- package/src/bridge/trustedDevice.ts +210 -0
- package/src/bridge/types.ts +262 -0
- package/src/bridge/workSecret.ts +127 -0
- package/src/buddy/CompanionSprite.tsx +371 -0
- package/src/buddy/companion.ts +133 -0
- package/src/buddy/prompt.ts +36 -0
- package/src/buddy/sprites.ts +514 -0
- package/src/buddy/types.ts +148 -0
- package/src/buddy/useBuddyNotification.tsx +98 -0
- package/src/cli/exit.ts +31 -0
- package/src/cli/handlers/agents.ts +70 -0
- package/src/cli/handlers/auth.ts +330 -0
- package/src/cli/handlers/autoMode.ts +170 -0
- package/src/cli/handlers/mcp.tsx +362 -0
- package/src/cli/handlers/plugins.ts +878 -0
- package/src/cli/handlers/util.tsx +110 -0
- package/src/cli/ndjsonSafeStringify.ts +32 -0
- package/src/cli/print.ts +5594 -0
- package/src/cli/remoteIO.ts +255 -0
- package/src/cli/structuredIO.ts +859 -0
- package/src/cli/transports/HybridTransport.ts +282 -0
- package/src/cli/transports/SSETransport.ts +711 -0
- package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
- package/src/cli/transports/WebSocketTransport.ts +800 -0
- package/src/cli/transports/WorkerStateUploader.ts +131 -0
- package/src/cli/transports/ccrClient.ts +998 -0
- package/src/cli/transports/transportUtils.ts +45 -0
- package/src/cli/update.ts +422 -0
- package/src/commands/add-dir/add-dir.tsx +126 -0
- package/src/commands/add-dir/index.ts +11 -0
- package/src/commands/add-dir/validation.ts +110 -0
- package/src/commands/advisor.ts +109 -0
- package/src/commands/agents/agents.tsx +12 -0
- package/src/commands/agents/index.ts +10 -0
- package/src/commands/ant-trace/index.js +1 -0
- package/src/commands/autofix-pr/index.js +1 -0
- package/src/commands/backfill-sessions/index.js +1 -0
- package/src/commands/branch/branch.ts +296 -0
- package/src/commands/branch/index.ts +14 -0
- package/src/commands/break-cache/index.js +1 -0
- package/src/commands/bridge/bridge.tsx +509 -0
- package/src/commands/bridge/index.ts +26 -0
- package/src/commands/bridge-kick.ts +200 -0
- package/src/commands/brief.ts +130 -0
- package/src/commands/btw/btw.tsx +243 -0
- package/src/commands/btw/index.ts +13 -0
- package/src/commands/bughunter/index.js +1 -0
- package/src/commands/chrome/chrome.tsx +285 -0
- package/src/commands/chrome/index.ts +13 -0
- package/src/commands/clear/caches.ts +144 -0
- package/src/commands/clear/clear.ts +7 -0
- package/src/commands/clear/conversation.ts +251 -0
- package/src/commands/clear/index.ts +19 -0
- package/src/commands/color/color.ts +93 -0
- package/src/commands/color/index.ts +16 -0
- package/src/commands/commit-push-pr.ts +158 -0
- package/src/commands/commit.ts +92 -0
- package/src/commands/compact/compact.ts +287 -0
- package/src/commands/compact/index.ts +15 -0
- package/src/commands/config/config.tsx +7 -0
- package/src/commands/config/index.ts +11 -0
- package/src/commands/context/context-noninteractive.ts +325 -0
- package/src/commands/context/context.tsx +64 -0
- package/src/commands/context/index.ts +24 -0
- package/src/commands/copy/copy.tsx +371 -0
- package/src/commands/copy/index.ts +15 -0
- package/src/commands/cost/cost.ts +24 -0
- package/src/commands/cost/index.ts +23 -0
- package/src/commands/createMovedToPluginCommand.ts +65 -0
- package/src/commands/ctx_viz/index.js +1 -0
- package/src/commands/debug-tool-call/index.js +1 -0
- package/src/commands/desktop/desktop.tsx +9 -0
- package/src/commands/desktop/index.ts +26 -0
- package/src/commands/diff/diff.tsx +9 -0
- package/src/commands/diff/index.ts +8 -0
- package/src/commands/doctor/doctor.tsx +7 -0
- package/src/commands/doctor/index.ts +12 -0
- package/src/commands/effort/effort.tsx +183 -0
- package/src/commands/effort/index.ts +13 -0
- package/src/commands/env/index.js +1 -0
- package/src/commands/exit/exit.tsx +33 -0
- package/src/commands/exit/index.ts +12 -0
- package/src/commands/export/export.tsx +91 -0
- package/src/commands/export/index.ts +11 -0
- package/src/commands/extra-usage/extra-usage-core.ts +118 -0
- package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
- package/src/commands/extra-usage/extra-usage.tsx +17 -0
- package/src/commands/extra-usage/index.ts +31 -0
- package/src/commands/fast/fast.tsx +269 -0
- package/src/commands/fast/index.ts +26 -0
- package/src/commands/feedback/feedback.tsx +25 -0
- package/src/commands/feedback/index.ts +26 -0
- package/src/commands/files/files.ts +19 -0
- package/src/commands/files/index.ts +12 -0
- package/src/commands/good-claude/index.js +1 -0
- package/src/commands/heapdump/heapdump.ts +17 -0
- package/src/commands/heapdump/index.ts +12 -0
- package/src/commands/help/help.tsx +11 -0
- package/src/commands/help/index.ts +10 -0
- package/src/commands/hooks/hooks.tsx +13 -0
- package/src/commands/hooks/index.ts +11 -0
- package/src/commands/ide/ide.tsx +646 -0
- package/src/commands/ide/index.ts +11 -0
- package/src/commands/init-verifiers.ts +262 -0
- package/src/commands/init.ts +256 -0
- package/src/commands/insights.ts +3200 -0
- package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
- package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
- package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
- package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
- package/src/commands/install-github-app/CreatingStep.tsx +65 -0
- package/src/commands/install-github-app/ErrorStep.tsx +85 -0
- package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
- package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
- package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
- package/src/commands/install-github-app/SuccessStep.tsx +96 -0
- package/src/commands/install-github-app/WarningsStep.tsx +73 -0
- package/src/commands/install-github-app/index.ts +13 -0
- package/src/commands/install-github-app/install-github-app.tsx +587 -0
- package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
- package/src/commands/install-slack-app/index.ts +12 -0
- package/src/commands/install-slack-app/install-slack-app.ts +30 -0
- package/src/commands/install.tsx +300 -0
- package/src/commands/issue/index.js +1 -0
- package/src/commands/keybindings/index.ts +13 -0
- package/src/commands/keybindings/keybindings.ts +53 -0
- package/src/commands/login/index.ts +14 -0
- package/src/commands/login/login.tsx +104 -0
- package/src/commands/logout/index.ts +10 -0
- package/src/commands/logout/logout.tsx +82 -0
- package/src/commands/mcp/addCommand.ts +280 -0
- package/src/commands/mcp/index.ts +12 -0
- package/src/commands/mcp/mcp.tsx +85 -0
- package/src/commands/mcp/xaaIdpCommand.ts +266 -0
- package/src/commands/memory/index.ts +10 -0
- package/src/commands/memory/memory.tsx +90 -0
- package/src/commands/mobile/index.ts +11 -0
- package/src/commands/mobile/mobile.tsx +274 -0
- package/src/commands/mock-limits/index.js +1 -0
- package/src/commands/model/index.ts +16 -0
- package/src/commands/model/model.tsx +297 -0
- package/src/commands/oauth-refresh/index.js +1 -0
- package/src/commands/onboarding/index.js +1 -0
- package/src/commands/output-style/index.ts +11 -0
- package/src/commands/output-style/output-style.tsx +7 -0
- package/src/commands/passes/index.ts +22 -0
- package/src/commands/passes/passes.tsx +24 -0
- package/src/commands/perf-issue/index.js +1 -0
- package/src/commands/permissions/index.ts +11 -0
- package/src/commands/permissions/permissions.tsx +10 -0
- package/src/commands/plan/index.ts +11 -0
- package/src/commands/plan/plan.tsx +122 -0
- package/src/commands/plugin/AddMarketplace.tsx +162 -0
- package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
- package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
- package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
- package/src/commands/plugin/ManagePlugins.tsx +2215 -0
- package/src/commands/plugin/PluginErrors.tsx +124 -0
- package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
- package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
- package/src/commands/plugin/PluginSettings.tsx +1072 -0
- package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
- package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
- package/src/commands/plugin/ValidatePlugin.tsx +98 -0
- package/src/commands/plugin/index.tsx +11 -0
- package/src/commands/plugin/parseArgs.ts +103 -0
- package/src/commands/plugin/plugin.tsx +7 -0
- package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
- package/src/commands/plugin/usePagination.ts +171 -0
- package/src/commands/pr_comments/index.ts +50 -0
- package/src/commands/privacy-settings/index.ts +14 -0
- package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
- package/src/commands/rate-limit-options/index.ts +19 -0
- package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
- package/src/commands/release-notes/index.ts +11 -0
- package/src/commands/release-notes/release-notes.ts +50 -0
- package/src/commands/reload-plugins/index.ts +18 -0
- package/src/commands/reload-plugins/reload-plugins.ts +61 -0
- package/src/commands/remote-env/index.ts +15 -0
- package/src/commands/remote-env/remote-env.tsx +7 -0
- package/src/commands/remote-setup/api.ts +182 -0
- package/src/commands/remote-setup/index.ts +20 -0
- package/src/commands/remote-setup/remote-setup.tsx +187 -0
- package/src/commands/rename/generateSessionName.ts +67 -0
- package/src/commands/rename/index.ts +12 -0
- package/src/commands/rename/rename.ts +87 -0
- package/src/commands/reset-limits/index.js +4 -0
- package/src/commands/resume/index.ts +12 -0
- package/src/commands/resume/resume.tsx +275 -0
- package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
- package/src/commands/review/reviewRemote.ts +316 -0
- package/src/commands/review/ultrareviewCommand.tsx +58 -0
- package/src/commands/review/ultrareviewEnabled.ts +14 -0
- package/src/commands/review.ts +57 -0
- package/src/commands/rewind/index.ts +13 -0
- package/src/commands/rewind/rewind.ts +13 -0
- package/src/commands/sandbox-toggle/index.ts +50 -0
- package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
- package/src/commands/security-review.ts +243 -0
- package/src/commands/session/index.ts +16 -0
- package/src/commands/session/session.tsx +140 -0
- package/src/commands/share/index.js +1 -0
- package/src/commands/skills/index.ts +10 -0
- package/src/commands/skills/skills.tsx +8 -0
- package/src/commands/stats/index.ts +10 -0
- package/src/commands/stats/stats.tsx +7 -0
- package/src/commands/status/index.ts +12 -0
- package/src/commands/status/status.tsx +8 -0
- package/src/commands/statusline.tsx +24 -0
- package/src/commands/stickers/index.ts +11 -0
- package/src/commands/stickers/stickers.ts +16 -0
- package/src/commands/summary/index.js +1 -0
- package/src/commands/tag/index.ts +12 -0
- package/src/commands/tag/tag.tsx +215 -0
- package/src/commands/tasks/index.ts +11 -0
- package/src/commands/tasks/tasks.tsx +8 -0
- package/src/commands/teleport/index.js +1 -0
- package/src/commands/terminalSetup/index.ts +23 -0
- package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
- package/src/commands/theme/index.ts +10 -0
- package/src/commands/theme/theme.tsx +57 -0
- package/src/commands/thinkback/index.ts +13 -0
- package/src/commands/thinkback/thinkback.tsx +554 -0
- package/src/commands/thinkback-play/index.ts +17 -0
- package/src/commands/thinkback-play/thinkback-play.ts +43 -0
- package/src/commands/ultraplan.tsx +471 -0
- package/src/commands/upgrade/index.ts +16 -0
- package/src/commands/upgrade/upgrade.tsx +38 -0
- package/src/commands/usage/index.ts +9 -0
- package/src/commands/usage/usage.tsx +7 -0
- package/src/commands/version.ts +22 -0
- package/src/commands/vim/index.ts +11 -0
- package/src/commands/vim/vim.ts +38 -0
- package/src/commands/voice/index.ts +20 -0
- package/src/commands/voice/voice.ts +150 -0
- package/src/commands.ts +754 -0
- package/src/components/AgentProgressLine.tsx +136 -0
- package/src/components/App.tsx +56 -0
- package/src/components/ApproveApiKey.tsx +123 -0
- package/src/components/AutoModeOptInDialog.tsx +142 -0
- package/src/components/AutoUpdater.tsx +198 -0
- package/src/components/AutoUpdaterWrapper.tsx +91 -0
- package/src/components/AwsAuthStatusBox.tsx +82 -0
- package/src/components/BaseTextInput.tsx +136 -0
- package/src/components/BashModeProgress.tsx +56 -0
- package/src/components/BridgeDialog.tsx +401 -0
- package/src/components/BypassPermissionsModeDialog.tsx +87 -0
- package/src/components/ChannelDowngradeDialog.tsx +102 -0
- package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
- package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
- package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
- package/src/components/ClickableImageRef.tsx +73 -0
- package/src/components/CompactSummary.tsx +118 -0
- package/src/components/ConfigurableShortcutHint.tsx +57 -0
- package/src/components/ConsoleOAuthFlow.tsx +631 -0
- package/src/components/ContextSuggestions.tsx +47 -0
- package/src/components/ContextVisualization.tsx +489 -0
- package/src/components/CoordinatorAgentStatus.tsx +273 -0
- package/src/components/CostThresholdDialog.tsx +50 -0
- package/src/components/CtrlOToExpand.tsx +51 -0
- package/src/components/CustomSelect/SelectMulti.tsx +213 -0
- package/src/components/CustomSelect/index.ts +3 -0
- package/src/components/CustomSelect/option-map.ts +50 -0
- package/src/components/CustomSelect/select-input-option.tsx +488 -0
- package/src/components/CustomSelect/select-option.tsx +68 -0
- package/src/components/CustomSelect/select.tsx +690 -0
- package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
- package/src/components/CustomSelect/use-select-input.ts +287 -0
- package/src/components/CustomSelect/use-select-navigation.ts +653 -0
- package/src/components/CustomSelect/use-select-state.ts +157 -0
- package/src/components/DesktopHandoff.tsx +193 -0
- package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
- package/src/components/DevBar.tsx +49 -0
- package/src/components/DevChannelsDialog.tsx +105 -0
- package/src/components/DiagnosticsDisplay.tsx +95 -0
- package/src/components/EffortCallout.tsx +265 -0
- package/src/components/EffortIndicator.ts +42 -0
- package/src/components/ExitFlow.tsx +48 -0
- package/src/components/ExportDialog.tsx +128 -0
- package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
- package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
- package/src/components/FastIcon.tsx +46 -0
- package/src/components/Feedback.tsx +592 -0
- package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
- package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
- package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
- package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
- package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
- package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
- package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
- package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
- package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
- package/src/components/FileEditToolDiff.tsx +181 -0
- package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
- package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
- package/src/components/FilePathLink.tsx +43 -0
- package/src/components/FullscreenLayout.tsx +637 -0
- package/src/components/GlobalSearchDialog.tsx +343 -0
- package/src/components/HelpV2/Commands.tsx +82 -0
- package/src/components/HelpV2/General.tsx +23 -0
- package/src/components/HelpV2/HelpV2.tsx +184 -0
- package/src/components/HighlightedCode/Fallback.tsx +193 -0
- package/src/components/HighlightedCode.tsx +190 -0
- package/src/components/HistorySearchDialog.tsx +118 -0
- package/src/components/IdeAutoConnectDialog.tsx +154 -0
- package/src/components/IdeOnboardingDialog.tsx +167 -0
- package/src/components/IdeStatusIndicator.tsx +58 -0
- package/src/components/IdleReturnDialog.tsx +118 -0
- package/src/components/InterruptedByUser.tsx +15 -0
- package/src/components/InvalidConfigDialog.tsx +156 -0
- package/src/components/InvalidSettingsDialog.tsx +89 -0
- package/src/components/KeybindingWarnings.tsx +55 -0
- package/src/components/LanguagePicker.tsx +86 -0
- package/src/components/LogSelector.tsx +1575 -0
- package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
- package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
- package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
- package/src/components/LogoV2/Clawd.tsx +240 -0
- package/src/components/LogoV2/CondensedLogo.tsx +161 -0
- package/src/components/LogoV2/EmergencyTip.tsx +58 -0
- package/src/components/LogoV2/Feed.tsx +112 -0
- package/src/components/LogoV2/FeedColumn.tsx +59 -0
- package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
- package/src/components/LogoV2/LogoV2.tsx +543 -0
- package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
- package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
- package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
- package/src/components/LogoV2/WelcomeV2.tsx +433 -0
- package/src/components/LogoV2/feedConfigs.tsx +92 -0
- package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
- package/src/components/MCPServerApprovalDialog.tsx +115 -0
- package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
- package/src/components/MCPServerDialogCopy.tsx +15 -0
- package/src/components/MCPServerMultiselectDialog.tsx +133 -0
- package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
- package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
- package/src/components/Markdown.tsx +236 -0
- package/src/components/MarkdownTable.tsx +322 -0
- package/src/components/MemoryUsageIndicator.tsx +37 -0
- package/src/components/Message.tsx +627 -0
- package/src/components/MessageModel.tsx +43 -0
- package/src/components/MessageResponse.tsx +78 -0
- package/src/components/MessageRow.tsx +383 -0
- package/src/components/MessageSelector.tsx +831 -0
- package/src/components/MessageTimestamp.tsx +63 -0
- package/src/components/Messages.tsx +834 -0
- package/src/components/ModelPicker.tsx +448 -0
- package/src/components/NativeAutoUpdater.tsx +193 -0
- package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
- package/src/components/OffscreenFreeze.tsx +44 -0
- package/src/components/Onboarding.tsx +244 -0
- package/src/components/OutputStylePicker.tsx +112 -0
- package/src/components/PackageManagerAutoUpdater.tsx +104 -0
- package/src/components/Passes/Passes.tsx +184 -0
- package/src/components/PrBadge.tsx +97 -0
- package/src/components/PressEnterToContinue.tsx +15 -0
- package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
- package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
- package/src/components/PromptInput/Notifications.tsx +332 -0
- package/src/components/PromptInput/PromptInput.tsx +2339 -0
- package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
- package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
- package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
- package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
- package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
- package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
- package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
- package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
- package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
- package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
- package/src/components/PromptInput/inputModes.ts +33 -0
- package/src/components/PromptInput/inputPaste.ts +90 -0
- package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
- package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
- package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
- package/src/components/PromptInput/useSwarmBanner.ts +155 -0
- package/src/components/PromptInput/utils.ts +60 -0
- package/src/components/QuickOpenDialog.tsx +244 -0
- package/src/components/RemoteCallout.tsx +76 -0
- package/src/components/RemoteEnvironmentDialog.tsx +340 -0
- package/src/components/ResumeTask.tsx +268 -0
- package/src/components/SandboxViolationExpandedView.tsx +99 -0
- package/src/components/ScrollKeybindingHandler.tsx +1012 -0
- package/src/components/SearchBox.tsx +72 -0
- package/src/components/SentryErrorBoundary.ts +28 -0
- package/src/components/SessionBackgroundHint.tsx +108 -0
- package/src/components/SessionPreview.tsx +194 -0
- package/src/components/Settings/Config.tsx +1822 -0
- package/src/components/Settings/Settings.tsx +137 -0
- package/src/components/Settings/Status.tsx +241 -0
- package/src/components/Settings/Usage.tsx +377 -0
- package/src/components/ShowInIDEPrompt.tsx +170 -0
- package/src/components/SkillImprovementSurvey.tsx +152 -0
- package/src/components/Spinner/FlashingChar.tsx +61 -0
- package/src/components/Spinner/GlimmerMessage.tsx +328 -0
- package/src/components/Spinner/ShimmerChar.tsx +36 -0
- package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
- package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
- package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
- package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
- package/src/components/Spinner/index.ts +10 -0
- package/src/components/Spinner/teammateSelectHint.ts +1 -0
- package/src/components/Spinner/useShimmerAnimation.ts +31 -0
- package/src/components/Spinner/useStalledAnimation.ts +75 -0
- package/src/components/Spinner/utils.ts +84 -0
- package/src/components/Spinner.tsx +562 -0
- package/src/components/Stats.tsx +1228 -0
- package/src/components/StatusLine.tsx +324 -0
- package/src/components/StatusNotices.tsx +55 -0
- package/src/components/StructuredDiff/Fallback.tsx +487 -0
- package/src/components/StructuredDiff/colorDiff.ts +37 -0
- package/src/components/StructuredDiff.tsx +190 -0
- package/src/components/StructuredDiffList.tsx +30 -0
- package/src/components/TagTabs.tsx +139 -0
- package/src/components/TaskListV2.tsx +378 -0
- package/src/components/TeammateViewHeader.tsx +82 -0
- package/src/components/TeleportError.tsx +189 -0
- package/src/components/TeleportProgress.tsx +140 -0
- package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
- package/src/components/TeleportResumeWrapper.tsx +167 -0
- package/src/components/TeleportStash.tsx +116 -0
- package/src/components/TextInput.tsx +124 -0
- package/src/components/ThemePicker.tsx +333 -0
- package/src/components/ThinkingToggle.tsx +153 -0
- package/src/components/TokenWarning.tsx +179 -0
- package/src/components/ToolUseLoader.tsx +42 -0
- package/src/components/TrustDialog/TrustDialog.tsx +290 -0
- package/src/components/TrustDialog/utils.ts +245 -0
- package/src/components/ValidationErrorsList.tsx +148 -0
- package/src/components/VimTextInput.tsx +140 -0
- package/src/components/VirtualMessageList.tsx +1082 -0
- package/src/components/WorkflowMultiselectDialog.tsx +128 -0
- package/src/components/WorktreeExitDialog.tsx +231 -0
- package/src/components/agents/AgentDetail.tsx +220 -0
- package/src/components/agents/AgentEditor.tsx +178 -0
- package/src/components/agents/AgentNavigationFooter.tsx +26 -0
- package/src/components/agents/AgentsList.tsx +440 -0
- package/src/components/agents/AgentsMenu.tsx +800 -0
- package/src/components/agents/ColorPicker.tsx +112 -0
- package/src/components/agents/ModelSelector.tsx +68 -0
- package/src/components/agents/ToolSelector.tsx +562 -0
- package/src/components/agents/agentFileUtils.ts +272 -0
- package/src/components/agents/generateAgent.ts +197 -0
- package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
- package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
- package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
- package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
- package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
- package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
- package/src/components/agents/types.ts +27 -0
- package/src/components/agents/utils.ts +18 -0
- package/src/components/agents/validateAgent.ts +109 -0
- package/src/components/design-system/Byline.tsx +77 -0
- package/src/components/design-system/Dialog.tsx +138 -0
- package/src/components/design-system/Divider.tsx +149 -0
- package/src/components/design-system/FuzzyPicker.tsx +312 -0
- package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
- package/src/components/design-system/ListItem.tsx +244 -0
- package/src/components/design-system/LoadingState.tsx +94 -0
- package/src/components/design-system/Pane.tsx +77 -0
- package/src/components/design-system/ProgressBar.tsx +86 -0
- package/src/components/design-system/Ratchet.tsx +80 -0
- package/src/components/design-system/StatusIcon.tsx +95 -0
- package/src/components/design-system/Tabs.tsx +340 -0
- package/src/components/design-system/ThemeProvider.tsx +174 -0
- package/src/components/design-system/ThemedBox.tsx +156 -0
- package/src/components/design-system/ThemedText.tsx +124 -0
- package/src/components/design-system/color.ts +30 -0
- package/src/components/diff/DiffDetailView.tsx +281 -0
- package/src/components/diff/DiffDialog.tsx +383 -0
- package/src/components/diff/DiffFileList.tsx +292 -0
- package/src/components/grove/Grove.tsx +463 -0
- package/src/components/hooks/HooksConfigMenu.tsx +578 -0
- package/src/components/hooks/PromptDialog.tsx +90 -0
- package/src/components/hooks/SelectEventMode.tsx +127 -0
- package/src/components/hooks/SelectHookMode.tsx +112 -0
- package/src/components/hooks/SelectMatcherMode.tsx +144 -0
- package/src/components/hooks/ViewHookMode.tsx +199 -0
- package/src/components/mcp/CapabilitiesSection.tsx +61 -0
- package/src/components/mcp/ElicitationDialog.tsx +1169 -0
- package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
- package/src/components/mcp/MCPListPanel.tsx +504 -0
- package/src/components/mcp/MCPReconnect.tsx +167 -0
- package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
- package/src/components/mcp/MCPSettings.tsx +398 -0
- package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
- package/src/components/mcp/MCPToolDetailView.tsx +212 -0
- package/src/components/mcp/MCPToolListView.tsx +141 -0
- package/src/components/mcp/McpParsingWarnings.tsx +213 -0
- package/src/components/mcp/index.ts +9 -0
- package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
- package/src/components/memory/MemoryFileSelector.tsx +438 -0
- package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
- package/src/components/messageActions.tsx +450 -0
- package/src/components/messages/AdvisorMessage.tsx +158 -0
- package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
- package/src/components/messages/AssistantTextMessage.tsx +270 -0
- package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
- package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
- package/src/components/messages/AttachmentMessage.tsx +536 -0
- package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
- package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
- package/src/components/messages/GroupedToolUseContent.tsx +58 -0
- package/src/components/messages/HighlightedThinkingText.tsx +162 -0
- package/src/components/messages/HookProgressMessage.tsx +116 -0
- package/src/components/messages/PlanApprovalMessage.tsx +222 -0
- package/src/components/messages/RateLimitMessage.tsx +161 -0
- package/src/components/messages/ShutdownMessage.tsx +132 -0
- package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
- package/src/components/messages/SystemTextMessage.tsx +827 -0
- package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
- package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
- package/src/components/messages/UserBashInputMessage.tsx +58 -0
- package/src/components/messages/UserBashOutputMessage.tsx +54 -0
- package/src/components/messages/UserChannelMessage.tsx +137 -0
- package/src/components/messages/UserCommandMessage.tsx +108 -0
- package/src/components/messages/UserImageMessage.tsx +59 -0
- package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
- package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
- package/src/components/messages/UserPlanMessage.tsx +42 -0
- package/src/components/messages/UserPromptMessage.tsx +80 -0
- package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
- package/src/components/messages/UserTeammateMessage.tsx +206 -0
- package/src/components/messages/UserTextMessage.tsx +275 -0
- package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
- package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
- package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
- package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
- package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
- package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
- package/src/components/messages/nullRenderingAttachments.ts +70 -0
- package/src/components/messages/teamMemCollapsed.tsx +140 -0
- package/src/components/messages/teamMemSaved.ts +19 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
- package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
- package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
- package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
- package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
- package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
- package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
- package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
- package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
- package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
- package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
- package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
- package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
- package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
- package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
- package/src/components/permissions/PermissionDialog.tsx +72 -0
- package/src/components/permissions/PermissionExplanation.tsx +272 -0
- package/src/components/permissions/PermissionPrompt.tsx +336 -0
- package/src/components/permissions/PermissionRequest.tsx +217 -0
- package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
- package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
- package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
- package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
- package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
- package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
- package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
- package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
- package/src/components/permissions/WorkerBadge.tsx +49 -0
- package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
- package/src/components/permissions/hooks.ts +209 -0
- package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
- package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
- package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
- package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
- package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
- package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
- package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
- package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
- package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
- package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
- package/src/components/permissions/utils.ts +25 -0
- package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
- package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
- package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
- package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
- package/src/components/sandbox/SandboxSettings.tsx +296 -0
- package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
- package/src/components/shell/OutputLine.tsx +118 -0
- package/src/components/shell/ShellProgressMessage.tsx +150 -0
- package/src/components/shell/ShellTimeDisplay.tsx +74 -0
- package/src/components/skills/SkillsMenu.tsx +237 -0
- package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
- package/src/components/tasks/BackgroundTask.tsx +345 -0
- package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
- package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
- package/src/components/tasks/DreamDetailDialog.tsx +251 -0
- package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
- package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
- package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
- package/src/components/tasks/ShellDetailDialog.tsx +404 -0
- package/src/components/tasks/ShellProgress.tsx +87 -0
- package/src/components/tasks/renderToolActivity.tsx +33 -0
- package/src/components/tasks/taskStatusUtils.tsx +107 -0
- package/src/components/teams/TeamStatus.tsx +80 -0
- package/src/components/teams/TeamsDialog.tsx +715 -0
- package/src/components/ui/OrderedList.tsx +71 -0
- package/src/components/ui/OrderedListItem.tsx +45 -0
- package/src/components/ui/TreeSelect.tsx +397 -0
- package/src/components/wizard/WizardDialogLayout.tsx +65 -0
- package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
- package/src/components/wizard/WizardProvider.tsx +213 -0
- package/src/components/wizard/index.ts +9 -0
- package/src/components/wizard/useWizard.ts +13 -0
- package/src/constants/apiLimits.ts +94 -0
- package/src/constants/betas.ts +52 -0
- package/src/constants/common.ts +33 -0
- package/src/constants/cyberRiskInstruction.ts +24 -0
- package/src/constants/errorIds.ts +15 -0
- package/src/constants/figures.ts +45 -0
- package/src/constants/files.ts +156 -0
- package/src/constants/github-app.ts +144 -0
- package/src/constants/keys.ts +11 -0
- package/src/constants/messages.ts +1 -0
- package/src/constants/oauth.ts +234 -0
- package/src/constants/outputStyles.ts +216 -0
- package/src/constants/product.ts +76 -0
- package/src/constants/prompts.ts +914 -0
- package/src/constants/spinnerVerbs.ts +204 -0
- package/src/constants/system.ts +95 -0
- package/src/constants/systemPromptSections.ts +68 -0
- package/src/constants/toolLimits.ts +56 -0
- package/src/constants/tools.ts +112 -0
- package/src/constants/turnCompletionVerbs.ts +12 -0
- package/src/constants/xml.ts +86 -0
- package/src/context/QueuedMessageContext.tsx +63 -0
- package/src/context/fpsMetrics.tsx +30 -0
- package/src/context/mailbox.tsx +38 -0
- package/src/context/modalContext.tsx +58 -0
- package/src/context/notifications.tsx +240 -0
- package/src/context/overlayContext.tsx +151 -0
- package/src/context/promptOverlayContext.tsx +125 -0
- package/src/context/stats.tsx +220 -0
- package/src/context/voice.tsx +88 -0
- package/src/context.ts +189 -0
- package/src/coordinator/coordinatorMode.ts +369 -0
- package/src/cost-tracker.ts +323 -0
- package/src/costHook.ts +22 -0
- package/src/dialogLaunchers.tsx +133 -0
- package/src/entrypoints/agentSdkTypes.ts +443 -0
- package/src/entrypoints/cli.tsx +303 -0
- package/src/entrypoints/init.ts +340 -0
- package/src/entrypoints/mcp.ts +196 -0
- package/src/entrypoints/sandboxTypes.ts +156 -0
- package/src/entrypoints/sdk/controlSchemas.ts +663 -0
- package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/src/entrypoints/sdk/coreTypes.ts +62 -0
- package/src/history.ts +464 -0
- package/src/hooks/fileSuggestions.ts +811 -0
- package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
- package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
- package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
- package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
- package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
- package/src/hooks/notifs/useInstallMessages.tsx +26 -0
- package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
- package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
- package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
- package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
- package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
- package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
- package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
- package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
- package/src/hooks/notifs/useStartupNotification.ts +41 -0
- package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
- package/src/hooks/renderPlaceholder.ts +51 -0
- package/src/hooks/toolPermission/PermissionContext.ts +388 -0
- package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
- package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
- package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
- package/src/hooks/toolPermission/permissionLogging.ts +238 -0
- package/src/hooks/unifiedSuggestions.ts +202 -0
- package/src/hooks/useAfterFirstRender.ts +17 -0
- package/src/hooks/useApiKeyVerification.ts +84 -0
- package/src/hooks/useArrowKeyHistory.tsx +229 -0
- package/src/hooks/useAssistantHistory.ts +250 -0
- package/src/hooks/useAwaySummary.ts +125 -0
- package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
- package/src/hooks/useBlink.ts +34 -0
- package/src/hooks/useCanUseTool.tsx +204 -0
- package/src/hooks/useCancelRequest.ts +276 -0
- package/src/hooks/useChromeExtensionNotification.tsx +50 -0
- package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
- package/src/hooks/useClipboardImageHint.ts +77 -0
- package/src/hooks/useCommandKeybindings.tsx +108 -0
- package/src/hooks/useCommandQueue.ts +15 -0
- package/src/hooks/useCopyOnSelect.ts +98 -0
- package/src/hooks/useDeferredHookMessages.ts +46 -0
- package/src/hooks/useDiffData.ts +110 -0
- package/src/hooks/useDiffInIDE.ts +379 -0
- package/src/hooks/useDirectConnect.ts +229 -0
- package/src/hooks/useDoublePress.ts +62 -0
- package/src/hooks/useDynamicConfig.ts +22 -0
- package/src/hooks/useElapsedTime.ts +37 -0
- package/src/hooks/useExitOnCtrlCD.ts +95 -0
- package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
- package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
- package/src/hooks/useGlobalKeybindings.tsx +249 -0
- package/src/hooks/useHistorySearch.ts +303 -0
- package/src/hooks/useIDEIntegration.tsx +70 -0
- package/src/hooks/useIdeAtMentioned.ts +76 -0
- package/src/hooks/useIdeConnectionStatus.ts +33 -0
- package/src/hooks/useIdeLogging.ts +41 -0
- package/src/hooks/useIdeSelection.ts +150 -0
- package/src/hooks/useInboxPoller.ts +969 -0
- package/src/hooks/useInputBuffer.ts +132 -0
- package/src/hooks/useIssueFlagBanner.ts +133 -0
- package/src/hooks/useLogMessages.ts +119 -0
- package/src/hooks/useLspPluginRecommendation.tsx +194 -0
- package/src/hooks/useMailboxBridge.ts +21 -0
- package/src/hooks/useMainLoopModel.ts +34 -0
- package/src/hooks/useManagePlugins.ts +304 -0
- package/src/hooks/useMemoryUsage.ts +39 -0
- package/src/hooks/useMergedClients.ts +23 -0
- package/src/hooks/useMergedCommands.ts +15 -0
- package/src/hooks/useMergedTools.ts +44 -0
- package/src/hooks/useMinDisplayTime.ts +35 -0
- package/src/hooks/useNotifyAfterTimeout.ts +65 -0
- package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
- package/src/hooks/usePasteHandler.ts +285 -0
- package/src/hooks/usePluginRecommendationBase.tsx +105 -0
- package/src/hooks/usePrStatus.ts +106 -0
- package/src/hooks/usePromptSuggestion.ts +177 -0
- package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
- package/src/hooks/useQueueProcessor.ts +68 -0
- package/src/hooks/useRemoteSession.ts +605 -0
- package/src/hooks/useReplBridge.tsx +723 -0
- package/src/hooks/useSSHSession.ts +241 -0
- package/src/hooks/useScheduledTasks.ts +139 -0
- package/src/hooks/useSearchInput.ts +364 -0
- package/src/hooks/useSessionBackgrounding.ts +158 -0
- package/src/hooks/useSettings.ts +17 -0
- package/src/hooks/useSettingsChange.ts +25 -0
- package/src/hooks/useSkillImprovementSurvey.ts +105 -0
- package/src/hooks/useSkillsChange.ts +62 -0
- package/src/hooks/useSwarmInitialization.ts +81 -0
- package/src/hooks/useSwarmPermissionPoller.ts +330 -0
- package/src/hooks/useTaskListWatcher.ts +221 -0
- package/src/hooks/useTasksV2.ts +250 -0
- package/src/hooks/useTeammateViewAutoExit.ts +63 -0
- package/src/hooks/useTeleportResume.tsx +85 -0
- package/src/hooks/useTerminalSize.ts +15 -0
- package/src/hooks/useTextInput.ts +529 -0
- package/src/hooks/useTimeout.ts +14 -0
- package/src/hooks/useTurnDiffs.ts +213 -0
- package/src/hooks/useTypeahead.tsx +1385 -0
- package/src/hooks/useUpdateNotification.ts +34 -0
- package/src/hooks/useVimInput.ts +316 -0
- package/src/hooks/useVirtualScroll.ts +721 -0
- package/src/hooks/useVoice.ts +1144 -0
- package/src/hooks/useVoiceEnabled.ts +25 -0
- package/src/hooks/useVoiceIntegration.tsx +677 -0
- package/src/ink/Ansi.tsx +292 -0
- package/src/ink/bidi.ts +139 -0
- package/src/ink/clearTerminal.ts +74 -0
- package/src/ink/colorize.ts +231 -0
- package/src/ink/components/AlternateScreen.tsx +80 -0
- package/src/ink/components/App.tsx +659 -0
- package/src/ink/components/AppContext.ts +21 -0
- package/src/ink/components/Box.tsx +214 -0
- package/src/ink/components/Button.tsx +192 -0
- package/src/ink/components/ClockContext.tsx +112 -0
- package/src/ink/components/CursorDeclarationContext.ts +32 -0
- package/src/ink/components/ErrorOverview.tsx +109 -0
- package/src/ink/components/Link.tsx +42 -0
- package/src/ink/components/Newline.tsx +39 -0
- package/src/ink/components/NoSelect.tsx +68 -0
- package/src/ink/components/RawAnsi.tsx +57 -0
- package/src/ink/components/ScrollBox.tsx +237 -0
- package/src/ink/components/Spacer.tsx +20 -0
- package/src/ink/components/StdinContext.ts +49 -0
- package/src/ink/components/TerminalFocusContext.tsx +52 -0
- package/src/ink/components/TerminalSizeContext.tsx +7 -0
- package/src/ink/components/Text.tsx +254 -0
- package/src/ink/constants.ts +2 -0
- package/src/ink/dom.ts +484 -0
- package/src/ink/events/click-event.ts +38 -0
- package/src/ink/events/dispatcher.ts +233 -0
- package/src/ink/events/emitter.ts +39 -0
- package/src/ink/events/event-handlers.ts +73 -0
- package/src/ink/events/event.ts +11 -0
- package/src/ink/events/focus-event.ts +21 -0
- package/src/ink/events/input-event.ts +205 -0
- package/src/ink/events/keyboard-event.ts +51 -0
- package/src/ink/events/terminal-event.ts +107 -0
- package/src/ink/events/terminal-focus-event.ts +19 -0
- package/src/ink/focus.ts +181 -0
- package/src/ink/frame.ts +124 -0
- package/src/ink/get-max-width.ts +27 -0
- package/src/ink/hit-test.ts +130 -0
- package/src/ink/hooks/use-animation-frame.ts +57 -0
- package/src/ink/hooks/use-app.ts +8 -0
- package/src/ink/hooks/use-declared-cursor.ts +73 -0
- package/src/ink/hooks/use-input.ts +92 -0
- package/src/ink/hooks/use-interval.ts +67 -0
- package/src/ink/hooks/use-search-highlight.ts +53 -0
- package/src/ink/hooks/use-selection.ts +104 -0
- package/src/ink/hooks/use-stdin.ts +8 -0
- package/src/ink/hooks/use-tab-status.ts +72 -0
- package/src/ink/hooks/use-terminal-focus.ts +16 -0
- package/src/ink/hooks/use-terminal-title.ts +31 -0
- package/src/ink/hooks/use-terminal-viewport.ts +96 -0
- package/src/ink/ink.tsx +1728 -0
- package/src/ink/instances.ts +10 -0
- package/src/ink/layout/engine.ts +6 -0
- package/src/ink/layout/geometry.ts +97 -0
- package/src/ink/layout/node.ts +152 -0
- package/src/ink/layout/yoga.ts +308 -0
- package/src/ink/line-width-cache.ts +24 -0
- package/src/ink/log-update.ts +773 -0
- package/src/ink/measure-element.ts +23 -0
- package/src/ink/measure-text.ts +47 -0
- package/src/ink/node-cache.ts +54 -0
- package/src/ink/optimizer.ts +93 -0
- package/src/ink/output.ts +797 -0
- package/src/ink/parse-keypress.ts +801 -0
- package/src/ink/reconciler.ts +512 -0
- package/src/ink/render-border.ts +231 -0
- package/src/ink/render-node-to-output.ts +1462 -0
- package/src/ink/render-to-screen.ts +231 -0
- package/src/ink/renderer.ts +178 -0
- package/src/ink/root.ts +184 -0
- package/src/ink/screen.ts +1486 -0
- package/src/ink/searchHighlight.ts +93 -0
- package/src/ink/selection.ts +917 -0
- package/src/ink/squash-text-nodes.ts +92 -0
- package/src/ink/stringWidth.ts +222 -0
- package/src/ink/styles.ts +771 -0
- package/src/ink/supports-hyperlinks.ts +57 -0
- package/src/ink/tabstops.ts +46 -0
- package/src/ink/terminal-focus-state.ts +47 -0
- package/src/ink/terminal-querier.ts +212 -0
- package/src/ink/terminal.ts +248 -0
- package/src/ink/termio/ansi.ts +75 -0
- package/src/ink/termio/csi.ts +319 -0
- package/src/ink/termio/dec.ts +60 -0
- package/src/ink/termio/esc.ts +67 -0
- package/src/ink/termio/osc.ts +493 -0
- package/src/ink/termio/parser.ts +394 -0
- package/src/ink/termio/sgr.ts +308 -0
- package/src/ink/termio/tokenize.ts +319 -0
- package/src/ink/termio/types.ts +236 -0
- package/src/ink/termio.ts +42 -0
- package/src/ink/useTerminalNotification.ts +126 -0
- package/src/ink/warn.ts +9 -0
- package/src/ink/widest-line.ts +19 -0
- package/src/ink/wrap-text.ts +74 -0
- package/src/ink/wrapAnsi.ts +20 -0
- package/src/ink.ts +85 -0
- package/src/interactiveHelpers.tsx +367 -0
- package/src/keybindings/KeybindingContext.tsx +243 -0
- package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
- package/src/keybindings/defaultBindings.ts +340 -0
- package/src/keybindings/loadUserBindings.ts +472 -0
- package/src/keybindings/match.ts +120 -0
- package/src/keybindings/parser.ts +203 -0
- package/src/keybindings/reservedShortcuts.ts +127 -0
- package/src/keybindings/resolver.ts +244 -0
- package/src/keybindings/schema.ts +236 -0
- package/src/keybindings/shortcutFormat.ts +63 -0
- package/src/keybindings/template.ts +52 -0
- package/src/keybindings/useKeybinding.ts +196 -0
- package/src/keybindings/useShortcutDisplay.ts +59 -0
- package/src/keybindings/validate.ts +498 -0
- package/src/main.tsx +4684 -0
- package/src/memdir/findRelevantMemories.ts +141 -0
- package/src/memdir/memdir.ts +507 -0
- package/src/memdir/memoryAge.ts +53 -0
- package/src/memdir/memoryScan.ts +94 -0
- package/src/memdir/memoryTypes.ts +271 -0
- package/src/memdir/paths.ts +278 -0
- package/src/memdir/teamMemPaths.ts +292 -0
- package/src/memdir/teamMemPrompts.ts +100 -0
- package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
- package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
- package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
- package/src/migrations/migrateFennecToOpus.ts +45 -0
- package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
- package/src/migrations/migrateOpusToOpus1m.ts +43 -0
- package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
- package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
- package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
- package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
- package/src/migrations/resetProToOpusDefault.ts +51 -0
- package/src/moreright/useMoreRight.tsx +26 -0
- package/src/native-ts/color-diff/index.ts +999 -0
- package/src/native-ts/file-index/index.ts +370 -0
- package/src/native-ts/yoga-layout/enums.ts +134 -0
- package/src/native-ts/yoga-layout/index.ts +2578 -0
- package/src/outputStyles/loadOutputStylesDir.ts +98 -0
- package/src/plugins/builtinPlugins.ts +159 -0
- package/src/plugins/bundled/index.ts +23 -0
- package/src/projectOnboardingState.ts +83 -0
- package/src/query/config.ts +46 -0
- package/src/query/deps.ts +40 -0
- package/src/query/stopHooks.ts +473 -0
- package/src/query/tokenBudget.ts +93 -0
- package/src/query.ts +1729 -0
- package/src/remote/RemoteSessionManager.ts +343 -0
- package/src/remote/SessionsWebSocket.ts +404 -0
- package/src/remote/remotePermissionBridge.ts +78 -0
- package/src/remote/sdkMessageAdapter.ts +302 -0
- package/src/replLauncher.tsx +23 -0
- package/src/schemas/hooks.ts +222 -0
- package/src/screens/Doctor.tsx +575 -0
- package/src/screens/REPL.tsx +5006 -0
- package/src/screens/ResumeConversation.tsx +399 -0
- package/src/server/createDirectConnectSession.ts +88 -0
- package/src/server/directConnectManager.ts +213 -0
- package/src/server/types.ts +57 -0
- package/src/services/AgentSummary/agentSummary.ts +179 -0
- package/src/services/MagicDocs/magicDocs.ts +254 -0
- package/src/services/MagicDocs/prompts.ts +127 -0
- package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/src/services/PromptSuggestion/speculation.ts +991 -0
- package/src/services/SessionMemory/prompts.ts +324 -0
- package/src/services/SessionMemory/sessionMemory.ts +495 -0
- package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/src/services/analytics/config.ts +38 -0
- package/src/services/analytics/datadog.ts +307 -0
- package/src/services/analytics/firstPartyEventLogger.ts +449 -0
- package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/src/services/analytics/growthbook.ts +1157 -0
- package/src/services/analytics/index.ts +173 -0
- package/src/services/analytics/metadata.ts +973 -0
- package/src/services/analytics/sink.ts +114 -0
- package/src/services/analytics/sinkKillswitch.ts +25 -0
- package/src/services/api/adminRequests.ts +119 -0
- package/src/services/api/bootstrap.ts +142 -0
- package/src/services/api/claude.ts +3433 -0
- package/src/services/api/client.ts +395 -0
- package/src/services/api/dumpPrompts.ts +226 -0
- package/src/services/api/emptyUsage.ts +22 -0
- package/src/services/api/errorUtils.ts +260 -0
- package/src/services/api/errors.ts +1207 -0
- package/src/services/api/filesApi.ts +748 -0
- package/src/services/api/firstTokenDate.ts +60 -0
- package/src/services/api/grove.ts +357 -0
- package/src/services/api/logging.ts +788 -0
- package/src/services/api/metricsOptOut.ts +159 -0
- package/src/services/api/overageCreditGrant.ts +137 -0
- package/src/services/api/promptCacheBreakDetection.ts +727 -0
- package/src/services/api/referral.ts +281 -0
- package/src/services/api/sessionIngress.ts +514 -0
- package/src/services/api/ultrareviewQuota.ts +38 -0
- package/src/services/api/usage.ts +63 -0
- package/src/services/api/withRetry.ts +826 -0
- package/src/services/autoDream/autoDream.ts +324 -0
- package/src/services/autoDream/config.ts +21 -0
- package/src/services/autoDream/consolidationLock.ts +140 -0
- package/src/services/autoDream/consolidationPrompt.ts +65 -0
- package/src/services/awaySummary.ts +74 -0
- package/src/services/claudeAiLimits.ts +515 -0
- package/src/services/claudeAiLimitsHook.ts +23 -0
- package/src/services/compact/apiMicrocompact.ts +153 -0
- package/src/services/compact/autoCompact.ts +351 -0
- package/src/services/compact/compact.ts +1705 -0
- package/src/services/compact/compactWarningHook.ts +16 -0
- package/src/services/compact/compactWarningState.ts +18 -0
- package/src/services/compact/grouping.ts +63 -0
- package/src/services/compact/microCompact.ts +530 -0
- package/src/services/compact/postCompactCleanup.ts +77 -0
- package/src/services/compact/prompt.ts +374 -0
- package/src/services/compact/sessionMemoryCompact.ts +630 -0
- package/src/services/compact/timeBasedMCConfig.ts +43 -0
- package/src/services/diagnosticTracking.ts +397 -0
- package/src/services/extractMemories/extractMemories.ts +615 -0
- package/src/services/extractMemories/prompts.ts +154 -0
- package/src/services/internalLogging.ts +90 -0
- package/src/services/lsp/LSPClient.ts +447 -0
- package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/src/services/lsp/LSPServerInstance.ts +511 -0
- package/src/services/lsp/LSPServerManager.ts +420 -0
- package/src/services/lsp/config.ts +79 -0
- package/src/services/lsp/manager.ts +289 -0
- package/src/services/lsp/passiveFeedback.ts +328 -0
- package/src/services/mcp/InProcessTransport.ts +63 -0
- package/src/services/mcp/MCPConnectionManager.tsx +73 -0
- package/src/services/mcp/SdkControlTransport.ts +136 -0
- package/src/services/mcp/auth.ts +2465 -0
- package/src/services/mcp/channelAllowlist.ts +76 -0
- package/src/services/mcp/channelNotification.ts +316 -0
- package/src/services/mcp/channelPermissions.ts +240 -0
- package/src/services/mcp/claudeai.ts +164 -0
- package/src/services/mcp/client.ts +3348 -0
- package/src/services/mcp/config.ts +1578 -0
- package/src/services/mcp/elicitationHandler.ts +313 -0
- package/src/services/mcp/envExpansion.ts +38 -0
- package/src/services/mcp/headersHelper.ts +138 -0
- package/src/services/mcp/mcpStringUtils.ts +106 -0
- package/src/services/mcp/normalization.ts +23 -0
- package/src/services/mcp/oauthPort.ts +78 -0
- package/src/services/mcp/officialRegistry.ts +72 -0
- package/src/services/mcp/types.ts +258 -0
- package/src/services/mcp/useManageMCPConnections.ts +1141 -0
- package/src/services/mcp/utils.ts +575 -0
- package/src/services/mcp/vscodeSdkMcp.ts +112 -0
- package/src/services/mcp/xaa.ts +511 -0
- package/src/services/mcp/xaaIdpLogin.ts +487 -0
- package/src/services/mcpServerApproval.tsx +41 -0
- package/src/services/mockRateLimits.ts +882 -0
- package/src/services/notifier.ts +156 -0
- package/src/services/oauth/auth-code-listener.ts +211 -0
- package/src/services/oauth/client.ts +566 -0
- package/src/services/oauth/crypto.ts +23 -0
- package/src/services/oauth/getOauthProfile.ts +53 -0
- package/src/services/oauth/index.ts +198 -0
- package/src/services/plugins/PluginInstallationManager.ts +184 -0
- package/src/services/plugins/pluginCliCommands.ts +344 -0
- package/src/services/plugins/pluginOperations.ts +1088 -0
- package/src/services/policyLimits/index.ts +664 -0
- package/src/services/policyLimits/types.ts +27 -0
- package/src/services/preventSleep.ts +165 -0
- package/src/services/rateLimitMessages.ts +344 -0
- package/src/services/rateLimitMocking.ts +144 -0
- package/src/services/remoteManagedSettings/index.ts +639 -0
- package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/src/services/remoteManagedSettings/syncCache.ts +112 -0
- package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/src/services/remoteManagedSettings/types.ts +31 -0
- package/src/services/settingsSync/index.ts +581 -0
- package/src/services/settingsSync/types.ts +67 -0
- package/src/services/teamMemorySync/index.ts +1256 -0
- package/src/services/teamMemorySync/secretScanner.ts +324 -0
- package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/src/services/teamMemorySync/types.ts +156 -0
- package/src/services/teamMemorySync/watcher.ts +387 -0
- package/src/services/tips/tipHistory.ts +17 -0
- package/src/services/tips/tipRegistry.ts +686 -0
- package/src/services/tips/tipScheduler.ts +58 -0
- package/src/services/tokenEstimation.ts +495 -0
- package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/src/services/tools/StreamingToolExecutor.ts +530 -0
- package/src/services/tools/toolExecution.ts +1745 -0
- package/src/services/tools/toolHooks.ts +650 -0
- package/src/services/tools/toolOrchestration.ts +188 -0
- package/src/services/vcr.ts +406 -0
- package/src/services/voice.ts +525 -0
- package/src/services/voiceKeyterms.ts +106 -0
- package/src/services/voiceStreamSTT.ts +544 -0
- package/src/setup.ts +477 -0
- package/src/skills/bundled/batch.ts +124 -0
- package/src/skills/bundled/claudeApi.ts +196 -0
- package/src/skills/bundled/claudeApiContent.ts +75 -0
- package/src/skills/bundled/claudeInChrome.ts +34 -0
- package/src/skills/bundled/debug.ts +103 -0
- package/src/skills/bundled/index.ts +79 -0
- package/src/skills/bundled/keybindings.ts +339 -0
- package/src/skills/bundled/loop.ts +92 -0
- package/src/skills/bundled/loremIpsum.ts +282 -0
- package/src/skills/bundled/remember.ts +82 -0
- package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
- package/src/skills/bundled/simplify.ts +69 -0
- package/src/skills/bundled/skillify.ts +197 -0
- package/src/skills/bundled/stuck.ts +79 -0
- package/src/skills/bundled/updateConfig.ts +475 -0
- package/src/skills/bundled/verify.ts +30 -0
- package/src/skills/bundled/verifyContent.ts +13 -0
- package/src/skills/bundledSkills.ts +220 -0
- package/src/skills/loadSkillsDir.ts +1086 -0
- package/src/skills/mcpSkillBuilders.ts +44 -0
- package/src/state/AppState.tsx +200 -0
- package/src/state/AppStateStore.ts +569 -0
- package/src/state/onChangeAppState.ts +171 -0
- package/src/state/selectors.ts +76 -0
- package/src/state/store.ts +34 -0
- package/src/state/teammateViewHelpers.ts +141 -0
- package/src/tasks/DreamTask/DreamTask.ts +157 -0
- package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
- package/src/tasks/InProcessTeammateTask/types.ts +121 -0
- package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
- package/src/tasks/LocalMainSessionTask.ts +479 -0
- package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
- package/src/tasks/LocalShellTask/guards.ts +41 -0
- package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
- package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
- package/src/tasks/pillLabel.ts +82 -0
- package/src/tasks/stopTask.ts +100 -0
- package/src/tasks/types.ts +46 -0
- package/src/tasks.ts +39 -0
- package/src/tools/AgentTool/AgentTool.tsx +1398 -0
- package/src/tools/AgentTool/UI.tsx +872 -0
- package/src/tools/AgentTool/agentColorManager.ts +66 -0
- package/src/tools/AgentTool/agentDisplay.ts +104 -0
- package/src/tools/AgentTool/agentMemory.ts +177 -0
- package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/src/tools/AgentTool/agentToolUtils.ts +686 -0
- package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/src/tools/AgentTool/builtInAgents.ts +72 -0
- package/src/tools/AgentTool/constants.ts +12 -0
- package/src/tools/AgentTool/forkSubagent.ts +210 -0
- package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/src/tools/AgentTool/prompt.ts +287 -0
- package/src/tools/AgentTool/resumeAgent.ts +265 -0
- package/src/tools/AgentTool/runAgent.ts +973 -0
- package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/src/tools/BashTool/BashTool.tsx +1144 -0
- package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/src/tools/BashTool/UI.tsx +185 -0
- package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/src/tools/BashTool/bashPermissions.ts +2621 -0
- package/src/tools/BashTool/bashSecurity.ts +2592 -0
- package/src/tools/BashTool/commandSemantics.ts +140 -0
- package/src/tools/BashTool/commentLabel.ts +13 -0
- package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/src/tools/BashTool/modeValidation.ts +115 -0
- package/src/tools/BashTool/pathValidation.ts +1303 -0
- package/src/tools/BashTool/prompt.ts +369 -0
- package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/src/tools/BashTool/sedEditParser.ts +322 -0
- package/src/tools/BashTool/sedValidation.ts +684 -0
- package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/src/tools/BashTool/toolName.ts +2 -0
- package/src/tools/BashTool/utils.ts +223 -0
- package/src/tools/BriefTool/BriefTool.ts +204 -0
- package/src/tools/BriefTool/UI.tsx +101 -0
- package/src/tools/BriefTool/attachments.ts +110 -0
- package/src/tools/BriefTool/prompt.ts +22 -0
- package/src/tools/BriefTool/upload.ts +174 -0
- package/src/tools/ConfigTool/ConfigTool.ts +467 -0
- package/src/tools/ConfigTool/UI.tsx +38 -0
- package/src/tools/ConfigTool/constants.ts +1 -0
- package/src/tools/ConfigTool/prompt.ts +93 -0
- package/src/tools/ConfigTool/supportedSettings.ts +211 -0
- package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/src/tools/EnterPlanModeTool/constants.ts +1 -0
- package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/src/tools/EnterWorktreeTool/constants.ts +1 -0
- package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/src/tools/ExitPlanModeTool/constants.ts +2 -0
- package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/src/tools/ExitWorktreeTool/constants.ts +1 -0
- package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/src/tools/FileEditTool/FileEditTool.ts +625 -0
- package/src/tools/FileEditTool/UI.tsx +289 -0
- package/src/tools/FileEditTool/constants.ts +11 -0
- package/src/tools/FileEditTool/prompt.ts +28 -0
- package/src/tools/FileEditTool/types.ts +85 -0
- package/src/tools/FileEditTool/utils.ts +775 -0
- package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/src/tools/FileReadTool/UI.tsx +185 -0
- package/src/tools/FileReadTool/imageProcessor.ts +94 -0
- package/src/tools/FileReadTool/limits.ts +92 -0
- package/src/tools/FileReadTool/prompt.ts +49 -0
- package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/src/tools/FileWriteTool/UI.tsx +405 -0
- package/src/tools/FileWriteTool/prompt.ts +18 -0
- package/src/tools/GlobTool/GlobTool.ts +198 -0
- package/src/tools/GlobTool/UI.tsx +63 -0
- package/src/tools/GlobTool/prompt.ts +7 -0
- package/src/tools/GrepTool/GrepTool.ts +577 -0
- package/src/tools/GrepTool/UI.tsx +201 -0
- package/src/tools/GrepTool/prompt.ts +18 -0
- package/src/tools/LSPTool/LSPTool.ts +860 -0
- package/src/tools/LSPTool/UI.tsx +228 -0
- package/src/tools/LSPTool/formatters.ts +592 -0
- package/src/tools/LSPTool/prompt.ts +21 -0
- package/src/tools/LSPTool/schemas.ts +215 -0
- package/src/tools/LSPTool/symbolContext.ts +90 -0
- package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/src/tools/MCPTool/MCPTool.ts +77 -0
- package/src/tools/MCPTool/UI.tsx +403 -0
- package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/src/tools/MCPTool/prompt.ts +3 -0
- package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/src/tools/NotebookEditTool/UI.tsx +93 -0
- package/src/tools/NotebookEditTool/constants.ts +2 -0
- package/src/tools/NotebookEditTool/prompt.ts +3 -0
- package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/src/tools/PowerShellTool/UI.tsx +131 -0
- package/src/tools/PowerShellTool/clmTypes.ts +211 -0
- package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/src/tools/PowerShellTool/commonParameters.ts +30 -0
- package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/src/tools/PowerShellTool/gitSafety.ts +176 -0
- package/src/tools/PowerShellTool/modeValidation.ts +404 -0
- package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/src/tools/PowerShellTool/prompt.ts +145 -0
- package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/src/tools/PowerShellTool/toolName.ts +2 -0
- package/src/tools/REPLTool/constants.ts +46 -0
- package/src/tools/REPLTool/primitiveTools.ts +39 -0
- package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/src/tools/ScheduleCronTool/UI.tsx +60 -0
- package/src/tools/ScheduleCronTool/prompt.ts +135 -0
- package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/src/tools/SendMessageTool/UI.tsx +31 -0
- package/src/tools/SendMessageTool/constants.ts +1 -0
- package/src/tools/SendMessageTool/prompt.ts +49 -0
- package/src/tools/SkillTool/SkillTool.ts +1108 -0
- package/src/tools/SkillTool/UI.tsx +128 -0
- package/src/tools/SkillTool/constants.ts +1 -0
- package/src/tools/SkillTool/prompt.ts +241 -0
- package/src/tools/SleepTool/prompt.ts +17 -0
- package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/src/tools/TaskCreateTool/constants.ts +1 -0
- package/src/tools/TaskCreateTool/prompt.ts +56 -0
- package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/src/tools/TaskGetTool/constants.ts +1 -0
- package/src/tools/TaskGetTool/prompt.ts +24 -0
- package/src/tools/TaskListTool/TaskListTool.ts +116 -0
- package/src/tools/TaskListTool/constants.ts +1 -0
- package/src/tools/TaskListTool/prompt.ts +49 -0
- package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/src/tools/TaskOutputTool/constants.ts +1 -0
- package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/src/tools/TaskStopTool/UI.tsx +41 -0
- package/src/tools/TaskStopTool/prompt.ts +8 -0
- package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/src/tools/TaskUpdateTool/constants.ts +1 -0
- package/src/tools/TaskUpdateTool/prompt.ts +77 -0
- package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/src/tools/TeamCreateTool/UI.tsx +6 -0
- package/src/tools/TeamCreateTool/constants.ts +1 -0
- package/src/tools/TeamCreateTool/prompt.ts +113 -0
- package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/src/tools/TeamDeleteTool/UI.tsx +20 -0
- package/src/tools/TeamDeleteTool/constants.ts +1 -0
- package/src/tools/TeamDeleteTool/prompt.ts +16 -0
- package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/src/tools/TodoWriteTool/constants.ts +1 -0
- package/src/tools/TodoWriteTool/prompt.ts +184 -0
- package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/src/tools/ToolSearchTool/constants.ts +1 -0
- package/src/tools/ToolSearchTool/prompt.ts +121 -0
- package/src/tools/TungstenTool/TungstenTool.js +2 -0
- package/src/tools/TungstenTool/TungstenTool.ts +1 -0
- package/src/tools/WebFetchTool/UI.tsx +72 -0
- package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/src/tools/WebFetchTool/preapproved.ts +166 -0
- package/src/tools/WebFetchTool/prompt.ts +46 -0
- package/src/tools/WebFetchTool/utils.ts +530 -0
- package/src/tools/WebSearchTool/UI.tsx +101 -0
- package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/src/tools/WebSearchTool/prompt.ts +34 -0
- package/src/tools/shared/gitOperationTracking.ts +277 -0
- package/src/tools/shared/spawnMultiAgent.ts +1093 -0
- package/src/tools/testing/TestingPermissionTool.tsx +74 -0
- package/src/tools/utils.ts +40 -0
- package/src/tools.ts +389 -0
- package/src/types/command.ts +216 -0
- package/src/types/connectorText.js +5 -0
- package/src/types/connectorText.ts +1 -0
- package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
- package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
- package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
- package/src/types/generated/google/protobuf/timestamp.ts +187 -0
- package/src/types/hooks.ts +290 -0
- package/src/types/ids.ts +44 -0
- package/src/types/logs.ts +330 -0
- package/src/types/permissions.ts +441 -0
- package/src/types/plugin.ts +363 -0
- package/src/types/textInputTypes.ts +387 -0
- package/src/upstreamproxy/relay.ts +455 -0
- package/src/upstreamproxy/upstreamproxy.ts +285 -0
- package/src/utils/CircularBuffer.ts +84 -0
- package/src/utils/Cursor.ts +1530 -0
- package/src/utils/QueryGuard.ts +121 -0
- package/src/utils/Shell.ts +474 -0
- package/src/utils/ShellCommand.ts +465 -0
- package/src/utils/abortController.ts +99 -0
- package/src/utils/activityManager.ts +164 -0
- package/src/utils/advisor.ts +145 -0
- package/src/utils/agentContext.ts +178 -0
- package/src/utils/agentId.ts +99 -0
- package/src/utils/agentSwarmsEnabled.ts +44 -0
- package/src/utils/agenticSessionSearch.ts +307 -0
- package/src/utils/analyzeContext.ts +1382 -0
- package/src/utils/ansiToPng.ts +334 -0
- package/src/utils/ansiToSvg.ts +272 -0
- package/src/utils/api.ts +718 -0
- package/src/utils/apiPreconnect.ts +72 -0
- package/src/utils/appleTerminalBackup.ts +124 -0
- package/src/utils/argumentSubstitution.ts +145 -0
- package/src/utils/array.ts +13 -0
- package/src/utils/asciicast.ts +239 -0
- package/src/utils/attachments.ts +3997 -0
- package/src/utils/attribution.ts +393 -0
- package/src/utils/auth.ts +2007 -0
- package/src/utils/authFileDescriptor.ts +196 -0
- package/src/utils/authPortable.ts +19 -0
- package/src/utils/autoModeDenials.ts +26 -0
- package/src/utils/autoRunIssue.tsx +122 -0
- package/src/utils/autoUpdater.ts +562 -0
- package/src/utils/aws.ts +74 -0
- package/src/utils/awsAuthStatusManager.ts +81 -0
- package/src/utils/background/remote/preconditions.ts +235 -0
- package/src/utils/background/remote/remoteSession.ts +98 -0
- package/src/utils/backgroundHousekeeping.ts +94 -0
- package/src/utils/bash/ParsedCommand.ts +318 -0
- package/src/utils/bash/ShellSnapshot.ts +582 -0
- package/src/utils/bash/ast.ts +2679 -0
- package/src/utils/bash/bashParser.ts +4436 -0
- package/src/utils/bash/bashPipeCommand.ts +294 -0
- package/src/utils/bash/commands.ts +1339 -0
- package/src/utils/bash/heredoc.ts +733 -0
- package/src/utils/bash/parser.ts +230 -0
- package/src/utils/bash/prefix.ts +204 -0
- package/src/utils/bash/registry.ts +53 -0
- package/src/utils/bash/shellCompletion.ts +259 -0
- package/src/utils/bash/shellPrefix.ts +28 -0
- package/src/utils/bash/shellQuote.ts +304 -0
- package/src/utils/bash/shellQuoting.ts +128 -0
- package/src/utils/bash/specs/alias.ts +14 -0
- package/src/utils/bash/specs/index.ts +18 -0
- package/src/utils/bash/specs/nohup.ts +13 -0
- package/src/utils/bash/specs/pyright.ts +91 -0
- package/src/utils/bash/specs/sleep.ts +13 -0
- package/src/utils/bash/specs/srun.ts +31 -0
- package/src/utils/bash/specs/time.ts +13 -0
- package/src/utils/bash/specs/timeout.ts +20 -0
- package/src/utils/bash/treeSitterAnalysis.ts +506 -0
- package/src/utils/betas.ts +438 -0
- package/src/utils/billing.ts +78 -0
- package/src/utils/binaryCheck.ts +53 -0
- package/src/utils/browser.ts +68 -0
- package/src/utils/bufferedWriter.ts +100 -0
- package/src/utils/bundledMode.ts +22 -0
- package/src/utils/caCerts.ts +115 -0
- package/src/utils/caCertsConfig.ts +88 -0
- package/src/utils/cachePaths.ts +38 -0
- package/src/utils/classifierApprovals.ts +88 -0
- package/src/utils/classifierApprovalsHook.ts +17 -0
- package/src/utils/claudeCodeHints.ts +193 -0
- package/src/utils/claudeDesktop.ts +152 -0
- package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/src/utils/claudeInChrome/common.ts +540 -0
- package/src/utils/claudeInChrome/mcpServer.ts +293 -0
- package/src/utils/claudeInChrome/prompt.ts +83 -0
- package/src/utils/claudeInChrome/setup.ts +400 -0
- package/src/utils/claudeInChrome/setupPortable.ts +233 -0
- package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/src/utils/claudemd.ts +1479 -0
- package/src/utils/cleanup.ts +602 -0
- package/src/utils/cleanupRegistry.ts +25 -0
- package/src/utils/cliArgs.ts +60 -0
- package/src/utils/cliHighlight.ts +54 -0
- package/src/utils/codeIndexing.ts +206 -0
- package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/src/utils/collapseHookSummaries.ts +59 -0
- package/src/utils/collapseReadSearch.ts +1109 -0
- package/src/utils/collapseTeammateShutdowns.ts +55 -0
- package/src/utils/combinedAbortSignal.ts +47 -0
- package/src/utils/commandLifecycle.ts +21 -0
- package/src/utils/commitAttribution.ts +961 -0
- package/src/utils/completionCache.ts +166 -0
- package/src/utils/computerUse/appNames.ts +196 -0
- package/src/utils/computerUse/cleanup.ts +86 -0
- package/src/utils/computerUse/common.ts +61 -0
- package/src/utils/computerUse/computerUseLock.ts +215 -0
- package/src/utils/computerUse/drainRunLoop.ts +79 -0
- package/src/utils/computerUse/escHotkey.ts +54 -0
- package/src/utils/computerUse/executor.ts +658 -0
- package/src/utils/computerUse/gates.ts +72 -0
- package/src/utils/computerUse/hostAdapter.ts +69 -0
- package/src/utils/computerUse/inputLoader.ts +30 -0
- package/src/utils/computerUse/mcpServer.ts +106 -0
- package/src/utils/computerUse/setup.ts +53 -0
- package/src/utils/computerUse/swiftLoader.ts +23 -0
- package/src/utils/computerUse/toolRendering.tsx +125 -0
- package/src/utils/computerUse/wrapper.tsx +336 -0
- package/src/utils/concurrentSessions.ts +204 -0
- package/src/utils/config.ts +1817 -0
- package/src/utils/configConstants.ts +21 -0
- package/src/utils/contentArray.ts +51 -0
- package/src/utils/context.ts +221 -0
- package/src/utils/contextAnalysis.ts +272 -0
- package/src/utils/contextSuggestions.ts +235 -0
- package/src/utils/controlMessageCompat.ts +32 -0
- package/src/utils/conversationRecovery.ts +597 -0
- package/src/utils/cron.ts +308 -0
- package/src/utils/cronJitterConfig.ts +75 -0
- package/src/utils/cronScheduler.ts +565 -0
- package/src/utils/cronTasks.ts +458 -0
- package/src/utils/cronTasksLock.ts +195 -0
- package/src/utils/crossProjectResume.ts +75 -0
- package/src/utils/crypto.ts +13 -0
- package/src/utils/cwd.ts +32 -0
- package/src/utils/debug.ts +268 -0
- package/src/utils/debugFilter.ts +157 -0
- package/src/utils/deepLink/banner.ts +123 -0
- package/src/utils/deepLink/parseDeepLink.ts +170 -0
- package/src/utils/deepLink/protocolHandler.ts +136 -0
- package/src/utils/deepLink/registerProtocol.ts +348 -0
- package/src/utils/deepLink/terminalLauncher.ts +557 -0
- package/src/utils/deepLink/terminalPreference.ts +54 -0
- package/src/utils/desktopDeepLink.ts +236 -0
- package/src/utils/detectRepository.ts +178 -0
- package/src/utils/diagLogs.ts +94 -0
- package/src/utils/diff.ts +177 -0
- package/src/utils/directMemberMessage.ts +69 -0
- package/src/utils/displayTags.ts +51 -0
- package/src/utils/doctorContextWarnings.ts +265 -0
- package/src/utils/doctorDiagnostic.ts +625 -0
- package/src/utils/dxt/helpers.ts +88 -0
- package/src/utils/dxt/zip.ts +226 -0
- package/src/utils/earlyInput.ts +191 -0
- package/src/utils/editor.ts +183 -0
- package/src/utils/effort.ts +329 -0
- package/src/utils/embeddedTools.ts +29 -0
- package/src/utils/env.ts +347 -0
- package/src/utils/envDynamic.ts +151 -0
- package/src/utils/envUtils.ts +183 -0
- package/src/utils/envValidation.ts +38 -0
- package/src/utils/errorLogSink.ts +235 -0
- package/src/utils/errors.ts +238 -0
- package/src/utils/exampleCommands.ts +184 -0
- package/src/utils/execFileNoThrow.ts +150 -0
- package/src/utils/execFileNoThrowPortable.ts +89 -0
- package/src/utils/execSyncWrapper.ts +38 -0
- package/src/utils/exportRenderer.tsx +98 -0
- package/src/utils/extraUsage.ts +23 -0
- package/src/utils/fastMode.ts +532 -0
- package/src/utils/file.ts +584 -0
- package/src/utils/fileHistory.ts +1115 -0
- package/src/utils/fileOperationAnalytics.ts +71 -0
- package/src/utils/filePersistence/filePersistence.ts +287 -0
- package/src/utils/filePersistence/outputsScanner.ts +126 -0
- package/src/utils/fileRead.ts +102 -0
- package/src/utils/fileReadCache.ts +96 -0
- package/src/utils/fileStateCache.ts +142 -0
- package/src/utils/findExecutable.ts +17 -0
- package/src/utils/fingerprint.ts +76 -0
- package/src/utils/forkedAgent.ts +689 -0
- package/src/utils/format.ts +308 -0
- package/src/utils/formatBriefTimestamp.ts +81 -0
- package/src/utils/fpsTracker.ts +47 -0
- package/src/utils/frontmatterParser.ts +370 -0
- package/src/utils/fsOperations.ts +770 -0
- package/src/utils/fullscreen.ts +202 -0
- package/src/utils/generatedFiles.ts +136 -0
- package/src/utils/generators.ts +88 -0
- package/src/utils/genericProcessUtils.ts +184 -0
- package/src/utils/getWorktreePaths.ts +70 -0
- package/src/utils/getWorktreePathsPortable.ts +27 -0
- package/src/utils/ghPrStatus.ts +106 -0
- package/src/utils/git/gitConfigParser.ts +277 -0
- package/src/utils/git/gitFilesystem.ts +699 -0
- package/src/utils/git/gitignore.ts +99 -0
- package/src/utils/git.ts +926 -0
- package/src/utils/gitDiff.ts +532 -0
- package/src/utils/gitSettings.ts +18 -0
- package/src/utils/github/ghAuthStatus.ts +29 -0
- package/src/utils/githubRepoPathMapping.ts +162 -0
- package/src/utils/glob.ts +130 -0
- package/src/utils/gracefulShutdown.ts +529 -0
- package/src/utils/groupToolUses.ts +182 -0
- package/src/utils/handlePromptSubmit.ts +610 -0
- package/src/utils/hash.ts +46 -0
- package/src/utils/headlessProfiler.ts +178 -0
- package/src/utils/heapDumpService.ts +303 -0
- package/src/utils/heatmap.ts +198 -0
- package/src/utils/highlightMatch.tsx +28 -0
- package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/src/utils/hooks/execAgentHook.ts +339 -0
- package/src/utils/hooks/execHttpHook.ts +242 -0
- package/src/utils/hooks/execPromptHook.ts +211 -0
- package/src/utils/hooks/fileChangedWatcher.ts +191 -0
- package/src/utils/hooks/hookEvents.ts +192 -0
- package/src/utils/hooks/hookHelpers.ts +83 -0
- package/src/utils/hooks/hooksConfigManager.ts +400 -0
- package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/src/utils/hooks/hooksSettings.ts +271 -0
- package/src/utils/hooks/postSamplingHooks.ts +70 -0
- package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/src/utils/hooks/registerSkillHooks.ts +64 -0
- package/src/utils/hooks/sessionHooks.ts +447 -0
- package/src/utils/hooks/skillImprovement.ts +267 -0
- package/src/utils/hooks/ssrfGuard.ts +294 -0
- package/src/utils/hooks.ts +5022 -0
- package/src/utils/horizontalScroll.ts +137 -0
- package/src/utils/http.ts +136 -0
- package/src/utils/hyperlink.ts +39 -0
- package/src/utils/iTermBackup.ts +73 -0
- package/src/utils/ide.ts +1494 -0
- package/src/utils/idePathConversion.ts +90 -0
- package/src/utils/idleTimeout.ts +53 -0
- package/src/utils/imagePaste.ts +416 -0
- package/src/utils/imageResizer.ts +880 -0
- package/src/utils/imageStore.ts +167 -0
- package/src/utils/imageValidation.ts +104 -0
- package/src/utils/immediateCommand.ts +15 -0
- package/src/utils/inProcessTeammateHelpers.ts +102 -0
- package/src/utils/ink.ts +26 -0
- package/src/utils/intl.ts +94 -0
- package/src/utils/jetbrains.ts +191 -0
- package/src/utils/json.ts +277 -0
- package/src/utils/jsonRead.ts +16 -0
- package/src/utils/keyboardShortcuts.ts +14 -0
- package/src/utils/lazySchema.ts +8 -0
- package/src/utils/listSessionsImpl.ts +454 -0
- package/src/utils/localInstaller.ts +162 -0
- package/src/utils/lockfile.ts +43 -0
- package/src/utils/log.ts +362 -0
- package/src/utils/logoV2Utils.ts +350 -0
- package/src/utils/mailbox.ts +73 -0
- package/src/utils/managedEnv.ts +199 -0
- package/src/utils/managedEnvConstants.ts +191 -0
- package/src/utils/markdown.ts +381 -0
- package/src/utils/markdownConfigLoader.ts +600 -0
- package/src/utils/mcp/dateTimeParser.ts +121 -0
- package/src/utils/mcp/elicitationValidation.ts +336 -0
- package/src/utils/mcpInstructionsDelta.ts +130 -0
- package/src/utils/mcpOutputStorage.ts +189 -0
- package/src/utils/mcpValidation.ts +208 -0
- package/src/utils/mcpWebSocketTransport.ts +200 -0
- package/src/utils/memoize.ts +269 -0
- package/src/utils/memory/types.ts +12 -0
- package/src/utils/memory/versions.ts +8 -0
- package/src/utils/memoryFileDetection.ts +289 -0
- package/src/utils/messagePredicates.ts +8 -0
- package/src/utils/messageQueueManager.ts +547 -0
- package/src/utils/messages/mappers.ts +290 -0
- package/src/utils/messages/systemInit.ts +96 -0
- package/src/utils/messages.ts +5512 -0
- package/src/utils/model/agent.ts +157 -0
- package/src/utils/model/aliases.ts +25 -0
- package/src/utils/model/antModels.ts +64 -0
- package/src/utils/model/bedrock.ts +265 -0
- package/src/utils/model/check1mAccess.ts +72 -0
- package/src/utils/model/configs.ts +118 -0
- package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/src/utils/model/deprecation.ts +101 -0
- package/src/utils/model/model.ts +634 -0
- package/src/utils/model/modelAllowlist.ts +170 -0
- package/src/utils/model/modelCapabilities.ts +118 -0
- package/src/utils/model/modelOptions.ts +540 -0
- package/src/utils/model/modelStrings.ts +166 -0
- package/src/utils/model/modelSupportOverrides.ts +50 -0
- package/src/utils/model/providers.ts +46 -0
- package/src/utils/model/validateModel.ts +159 -0
- package/src/utils/modelCost.ts +235 -0
- package/src/utils/modifiers.ts +36 -0
- package/src/utils/mtls.ts +179 -0
- package/src/utils/nativeInstaller/download.ts +523 -0
- package/src/utils/nativeInstaller/index.ts +18 -0
- package/src/utils/nativeInstaller/installer.ts +1708 -0
- package/src/utils/nativeInstaller/packageManagers.ts +336 -0
- package/src/utils/nativeInstaller/pidLock.ts +433 -0
- package/src/utils/notebook.ts +224 -0
- package/src/utils/objectGroupBy.ts +18 -0
- package/src/utils/pasteStore.ts +104 -0
- package/src/utils/path.ts +155 -0
- package/src/utils/pdf.ts +300 -0
- package/src/utils/pdfUtils.ts +70 -0
- package/src/utils/peerAddress.ts +21 -0
- package/src/utils/permissions/PermissionMode.ts +141 -0
- package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/src/utils/permissions/PermissionResult.ts +35 -0
- package/src/utils/permissions/PermissionRule.ts +40 -0
- package/src/utils/permissions/PermissionUpdate.ts +389 -0
- package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/src/utils/permissions/autoModeState.ts +39 -0
- package/src/utils/permissions/bashClassifier.ts +61 -0
- package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/src/utils/permissions/classifierDecision.ts +98 -0
- package/src/utils/permissions/classifierShared.ts +39 -0
- package/src/utils/permissions/dangerousPatterns.ts +80 -0
- package/src/utils/permissions/denialTracking.ts +45 -0
- package/src/utils/permissions/filesystem.ts +1777 -0
- package/src/utils/permissions/getNextPermissionMode.ts +101 -0
- package/src/utils/permissions/pathValidation.ts +485 -0
- package/src/utils/permissions/permissionExplainer.ts +250 -0
- package/src/utils/permissions/permissionRuleParser.ts +198 -0
- package/src/utils/permissions/permissionSetup.ts +1532 -0
- package/src/utils/permissions/permissions.ts +1486 -0
- package/src/utils/permissions/permissionsLoader.ts +296 -0
- package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/src/utils/permissions/shellRuleMatching.ts +228 -0
- package/src/utils/permissions/yoloClassifier.ts +1495 -0
- package/src/utils/planModeV2.ts +95 -0
- package/src/utils/plans.ts +397 -0
- package/src/utils/platform.ts +150 -0
- package/src/utils/plugins/addDirPluginSettings.ts +71 -0
- package/src/utils/plugins/cacheUtils.ts +196 -0
- package/src/utils/plugins/dependencyResolver.ts +305 -0
- package/src/utils/plugins/fetchTelemetry.ts +135 -0
- package/src/utils/plugins/gitAvailability.ts +69 -0
- package/src/utils/plugins/headlessPluginInstall.ts +174 -0
- package/src/utils/plugins/hintRecommendation.ts +164 -0
- package/src/utils/plugins/installCounts.ts +292 -0
- package/src/utils/plugins/installedPluginsManager.ts +1268 -0
- package/src/utils/plugins/loadPluginAgents.ts +348 -0
- package/src/utils/plugins/loadPluginCommands.ts +946 -0
- package/src/utils/plugins/loadPluginHooks.ts +287 -0
- package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/src/utils/plugins/lspPluginIntegration.ts +387 -0
- package/src/utils/plugins/lspRecommendation.ts +374 -0
- package/src/utils/plugins/managedPlugins.ts +27 -0
- package/src/utils/plugins/marketplaceHelpers.ts +592 -0
- package/src/utils/plugins/marketplaceManager.ts +2643 -0
- package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/src/utils/plugins/mcpbHandler.ts +968 -0
- package/src/utils/plugins/officialMarketplace.ts +25 -0
- package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/src/utils/plugins/performStartupChecks.tsx +70 -0
- package/src/utils/plugins/pluginAutoupdate.ts +284 -0
- package/src/utils/plugins/pluginBlocklist.ts +127 -0
- package/src/utils/plugins/pluginDirectories.ts +178 -0
- package/src/utils/plugins/pluginFlagging.ts +208 -0
- package/src/utils/plugins/pluginIdentifier.ts +123 -0
- package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/src/utils/plugins/pluginLoader.ts +3302 -0
- package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/src/utils/plugins/pluginPolicy.ts +20 -0
- package/src/utils/plugins/pluginStartupCheck.ts +341 -0
- package/src/utils/plugins/pluginVersioning.ts +157 -0
- package/src/utils/plugins/reconciler.ts +265 -0
- package/src/utils/plugins/refresh.ts +215 -0
- package/src/utils/plugins/schemas.ts +1681 -0
- package/src/utils/plugins/validatePlugin.ts +903 -0
- package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/src/utils/plugins/zipCache.ts +406 -0
- package/src/utils/plugins/zipCacheAdapters.ts +164 -0
- package/src/utils/powershell/dangerousCmdlets.ts +185 -0
- package/src/utils/powershell/parser.ts +1804 -0
- package/src/utils/powershell/staticPrefix.ts +316 -0
- package/src/utils/preflightChecks.tsx +151 -0
- package/src/utils/privacyLevel.ts +55 -0
- package/src/utils/process.ts +68 -0
- package/src/utils/processUserInput/processBashCommand.tsx +140 -0
- package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/src/utils/processUserInput/processTextPrompt.ts +100 -0
- package/src/utils/processUserInput/processUserInput.ts +605 -0
- package/src/utils/profilerBase.ts +46 -0
- package/src/utils/promptCategory.ts +49 -0
- package/src/utils/promptEditor.ts +188 -0
- package/src/utils/promptShellExecution.ts +183 -0
- package/src/utils/proxy.ts +426 -0
- package/src/utils/queryContext.ts +179 -0
- package/src/utils/queryHelpers.ts +552 -0
- package/src/utils/queryProfiler.ts +301 -0
- package/src/utils/queueProcessor.ts +95 -0
- package/src/utils/readEditContext.ts +227 -0
- package/src/utils/readFileInRange.ts +383 -0
- package/src/utils/releaseNotes.ts +360 -0
- package/src/utils/renderOptions.ts +77 -0
- package/src/utils/ripgrep.ts +679 -0
- package/src/utils/sandbox/sandbox-adapter.ts +985 -0
- package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/src/utils/sanitization.ts +91 -0
- package/src/utils/screenshotClipboard.ts +121 -0
- package/src/utils/sdkEventQueue.ts +134 -0
- package/src/utils/secureStorage/fallbackStorage.ts +70 -0
- package/src/utils/secureStorage/index.ts +17 -0
- package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/src/utils/secureStorage/plainTextStorage.ts +84 -0
- package/src/utils/semanticBoolean.ts +29 -0
- package/src/utils/semanticNumber.ts +36 -0
- package/src/utils/semver.ts +59 -0
- package/src/utils/sequential.ts +56 -0
- package/src/utils/sessionActivity.ts +133 -0
- package/src/utils/sessionEnvVars.ts +22 -0
- package/src/utils/sessionEnvironment.ts +166 -0
- package/src/utils/sessionFileAccessHooks.ts +250 -0
- package/src/utils/sessionIngressAuth.ts +140 -0
- package/src/utils/sessionRestore.ts +551 -0
- package/src/utils/sessionStart.ts +232 -0
- package/src/utils/sessionState.ts +150 -0
- package/src/utils/sessionStorage.ts +5105 -0
- package/src/utils/sessionStoragePortable.ts +793 -0
- package/src/utils/sessionTitle.ts +129 -0
- package/src/utils/sessionUrl.ts +64 -0
- package/src/utils/set.ts +53 -0
- package/src/utils/settings/allErrors.ts +32 -0
- package/src/utils/settings/applySettingsChange.ts +92 -0
- package/src/utils/settings/changeDetector.ts +488 -0
- package/src/utils/settings/constants.ts +202 -0
- package/src/utils/settings/internalWrites.ts +37 -0
- package/src/utils/settings/managedPath.ts +34 -0
- package/src/utils/settings/mdm/constants.ts +81 -0
- package/src/utils/settings/mdm/rawRead.ts +130 -0
- package/src/utils/settings/mdm/settings.ts +316 -0
- package/src/utils/settings/permissionValidation.ts +262 -0
- package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/src/utils/settings/schemaOutput.ts +8 -0
- package/src/utils/settings/settings.ts +1015 -0
- package/src/utils/settings/settingsCache.ts +80 -0
- package/src/utils/settings/toolValidationConfig.ts +103 -0
- package/src/utils/settings/types.ts +1148 -0
- package/src/utils/settings/validateEditTool.ts +45 -0
- package/src/utils/settings/validation.ts +265 -0
- package/src/utils/settings/validationTips.ts +164 -0
- package/src/utils/shell/bashProvider.ts +255 -0
- package/src/utils/shell/outputLimits.ts +14 -0
- package/src/utils/shell/powershellDetection.ts +107 -0
- package/src/utils/shell/powershellProvider.ts +123 -0
- package/src/utils/shell/prefix.ts +367 -0
- package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/src/utils/shell/resolveDefaultShell.ts +14 -0
- package/src/utils/shell/shellProvider.ts +33 -0
- package/src/utils/shell/shellToolUtils.ts +22 -0
- package/src/utils/shell/specPrefix.ts +241 -0
- package/src/utils/shellConfig.ts +167 -0
- package/src/utils/sideQuery.ts +222 -0
- package/src/utils/sideQuestion.ts +155 -0
- package/src/utils/signal.ts +43 -0
- package/src/utils/sinks.ts +16 -0
- package/src/utils/skills/skillChangeDetector.ts +311 -0
- package/src/utils/slashCommandParsing.ts +60 -0
- package/src/utils/sleep.ts +84 -0
- package/src/utils/sliceAnsi.ts +91 -0
- package/src/utils/slowOperations.ts +286 -0
- package/src/utils/standaloneAgent.ts +23 -0
- package/src/utils/startupProfiler.ts +194 -0
- package/src/utils/staticRender.tsx +116 -0
- package/src/utils/stats.ts +1061 -0
- package/src/utils/statsCache.ts +434 -0
- package/src/utils/status.tsx +362 -0
- package/src/utils/statusNoticeDefinitions.tsx +198 -0
- package/src/utils/statusNoticeHelpers.ts +20 -0
- package/src/utils/stream.ts +76 -0
- package/src/utils/streamJsonStdoutGuard.ts +123 -0
- package/src/utils/streamlinedTransform.ts +201 -0
- package/src/utils/stringUtils.ts +235 -0
- package/src/utils/subprocessEnv.ts +99 -0
- package/src/utils/suggestions/commandSuggestions.ts +567 -0
- package/src/utils/suggestions/directoryCompletion.ts +263 -0
- package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/src/utils/suggestions/skillUsageTracking.ts +55 -0
- package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/src/utils/swarm/backends/ITermBackend.ts +370 -0
- package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/src/utils/swarm/backends/detection.ts +128 -0
- package/src/utils/swarm/backends/it2Setup.ts +245 -0
- package/src/utils/swarm/backends/registry.ts +464 -0
- package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/src/utils/swarm/backends/types.ts +311 -0
- package/src/utils/swarm/constants.ts +33 -0
- package/src/utils/swarm/inProcessRunner.ts +1552 -0
- package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/src/utils/swarm/permissionSync.ts +928 -0
- package/src/utils/swarm/reconnection.ts +119 -0
- package/src/utils/swarm/spawnInProcess.ts +328 -0
- package/src/utils/swarm/spawnUtils.ts +146 -0
- package/src/utils/swarm/teamHelpers.ts +683 -0
- package/src/utils/swarm/teammateInit.ts +129 -0
- package/src/utils/swarm/teammateLayoutManager.ts +107 -0
- package/src/utils/swarm/teammateModel.ts +10 -0
- package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/src/utils/systemDirectories.ts +74 -0
- package/src/utils/systemPrompt.ts +123 -0
- package/src/utils/systemPromptType.ts +14 -0
- package/src/utils/systemTheme.ts +119 -0
- package/src/utils/taggedId.ts +54 -0
- package/src/utils/task/TaskOutput.ts +390 -0
- package/src/utils/task/diskOutput.ts +451 -0
- package/src/utils/task/framework.ts +308 -0
- package/src/utils/task/outputFormatting.ts +38 -0
- package/src/utils/task/sdkProgress.ts +36 -0
- package/src/utils/tasks.ts +862 -0
- package/src/utils/teamDiscovery.ts +81 -0
- package/src/utils/teamMemoryOps.ts +88 -0
- package/src/utils/teammate.ts +292 -0
- package/src/utils/teammateContext.ts +96 -0
- package/src/utils/teammateMailbox.ts +1183 -0
- package/src/utils/telemetry/betaSessionTracing.ts +491 -0
- package/src/utils/telemetry/bigqueryExporter.ts +252 -0
- package/src/utils/telemetry/events.ts +75 -0
- package/src/utils/telemetry/instrumentation.ts +825 -0
- package/src/utils/telemetry/logger.ts +26 -0
- package/src/utils/telemetry/perfettoTracing.ts +1120 -0
- package/src/utils/telemetry/pluginTelemetry.ts +289 -0
- package/src/utils/telemetry/sessionTracing.ts +927 -0
- package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/src/utils/telemetryAttributes.ts +71 -0
- package/src/utils/teleport/api.ts +466 -0
- package/src/utils/teleport/environmentSelection.ts +77 -0
- package/src/utils/teleport/environments.ts +120 -0
- package/src/utils/teleport/gitBundle.ts +292 -0
- package/src/utils/teleport.tsx +1226 -0
- package/src/utils/tempfile.ts +31 -0
- package/src/utils/terminal.ts +131 -0
- package/src/utils/terminalPanel.ts +191 -0
- package/src/utils/textHighlighting.ts +166 -0
- package/src/utils/theme.ts +639 -0
- package/src/utils/thinking.ts +162 -0
- package/src/utils/timeouts.ts +39 -0
- package/src/utils/tmuxSocket.ts +427 -0
- package/src/utils/todo/types.ts +18 -0
- package/src/utils/tokenBudget.ts +73 -0
- package/src/utils/tokens.ts +261 -0
- package/src/utils/toolErrors.ts +132 -0
- package/src/utils/toolPool.ts +79 -0
- package/src/utils/toolResultStorage.ts +1040 -0
- package/src/utils/toolSchemaCache.ts +26 -0
- package/src/utils/toolSearch.ts +756 -0
- package/src/utils/transcriptSearch.ts +202 -0
- package/src/utils/treeify.ts +170 -0
- package/src/utils/truncate.ts +179 -0
- package/src/utils/ultraplan/ccrSession.ts +349 -0
- package/src/utils/ultraplan/keyword.ts +127 -0
- package/src/utils/ultraplan/prompt.txt +1 -0
- package/src/utils/unaryLogging.ts +39 -0
- package/src/utils/undercover.ts +89 -0
- package/src/utils/user.ts +194 -0
- package/src/utils/userAgent.ts +10 -0
- package/src/utils/userPromptKeywords.ts +27 -0
- package/src/utils/uuid.ts +27 -0
- package/src/utils/warningHandler.ts +121 -0
- package/src/utils/which.ts +82 -0
- package/src/utils/windowsPaths.ts +173 -0
- package/src/utils/withResolvers.ts +13 -0
- package/src/utils/words.ts +800 -0
- package/src/utils/workloadContext.ts +57 -0
- package/src/utils/worktree.ts +1519 -0
- package/src/utils/worktreeModeEnabled.ts +11 -0
- package/src/utils/xdg.ts +65 -0
- package/src/utils/xml.ts +16 -0
- package/src/utils/yaml.ts +15 -0
- package/src/utils/zodToJsonSchema.ts +23 -0
- package/src/vim/motions.ts +82 -0
- package/src/vim/operators.ts +556 -0
- package/src/vim/textObjects.ts +186 -0
- package/src/vim/transitions.ts +490 -0
- package/src/vim/types.ts +199 -0
- package/src/voice/voiceModeEnabled.ts +54 -0
- package/start.js +1 -0
|
@@ -0,0 +1,917 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text selection state for fullscreen mode.
|
|
3
|
+
*
|
|
4
|
+
* Tracks a linear selection in screen-buffer coordinates (0-indexed col/row).
|
|
5
|
+
* Selection is line-based: cells from (startCol, startRow) through
|
|
6
|
+
* (endCol, endRow) inclusive, wrapping across line boundaries. This matches
|
|
7
|
+
* terminal-native selection behavior (not rectangular/block).
|
|
8
|
+
*
|
|
9
|
+
* The selection is stored as ANCHOR (where the drag started) + FOCUS (where
|
|
10
|
+
* the cursor is now). The rendered highlight normalizes to start ≤ end.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { clamp } from './layout/geometry.js'
|
|
14
|
+
import type { Screen, StylePool } from './screen.js'
|
|
15
|
+
import { CellWidth, cellAt, cellAtIndex, setCellStyleId } from './screen.js'
|
|
16
|
+
|
|
17
|
+
type Point = { col: number; row: number }
|
|
18
|
+
|
|
19
|
+
export type SelectionState = {
|
|
20
|
+
/** Where the mouse-down occurred. Null when no selection. */
|
|
21
|
+
anchor: Point | null
|
|
22
|
+
/** Current drag position (updated on mouse-move while dragging). */
|
|
23
|
+
focus: Point | null
|
|
24
|
+
/** True between mouse-down and mouse-up. */
|
|
25
|
+
isDragging: boolean
|
|
26
|
+
/** For word/line mode: the initial word/line bounds from the first
|
|
27
|
+
* multi-click. Drag extends from this span to the word/line at the
|
|
28
|
+
* current mouse position so the original word/line stays selected
|
|
29
|
+
* even when dragging backward past it. Null ⇔ char mode. The kind
|
|
30
|
+
* tells extendSelection whether to snap to word or line boundaries. */
|
|
31
|
+
anchorSpan: { lo: Point; hi: Point; kind: 'word' | 'line' } | null
|
|
32
|
+
/** Text from rows that scrolled out ABOVE the viewport during
|
|
33
|
+
* drag-to-scroll. The screen buffer only holds the current viewport,
|
|
34
|
+
* so without this accumulator, dragging down past the bottom edge
|
|
35
|
+
* loses the top of the selection once the anchor clamps. Prepended
|
|
36
|
+
* to the on-screen text by getSelectedText. Reset on start/clear. */
|
|
37
|
+
scrolledOffAbove: string[]
|
|
38
|
+
/** Symmetric: rows scrolled out BELOW when dragging up. Appended. */
|
|
39
|
+
scrolledOffBelow: string[]
|
|
40
|
+
/** Soft-wrap bits parallel to scrolledOffAbove — true means the row
|
|
41
|
+
* is a continuation of the one before it (the `\n` was inserted by
|
|
42
|
+
* word-wrap, not in the source). Captured alongside the text at
|
|
43
|
+
* scroll time since the screen's softWrap bitmap shifts with content.
|
|
44
|
+
* getSelectedText uses these to join wrapped rows back into logical
|
|
45
|
+
* lines. */
|
|
46
|
+
scrolledOffAboveSW: boolean[]
|
|
47
|
+
/** Parallel to scrolledOffBelow. */
|
|
48
|
+
scrolledOffBelowSW: boolean[]
|
|
49
|
+
/** Pre-clamp anchor row. Set when shiftSelection clamps anchor so a
|
|
50
|
+
* reverse scroll can restore the true position and pop accumulators.
|
|
51
|
+
* Without this, PgDn (clamps anchor) → PgUp leaves anchor at the wrong
|
|
52
|
+
* row AND scrolledOffAbove stale — highlight ≠ copy. Undefined when
|
|
53
|
+
* anchor is in-bounds (no clamp debt). Cleared on start/clear. */
|
|
54
|
+
virtualAnchorRow?: number
|
|
55
|
+
/** Same for focus. */
|
|
56
|
+
virtualFocusRow?: number
|
|
57
|
+
/** True if the mouse-down that started this selection had the alt
|
|
58
|
+
* modifier set (SGR button bit 0x08). On macOS xterm.js this is a
|
|
59
|
+
* signal that VS Code's macOptionClickForcesSelection is OFF — if it
|
|
60
|
+
* were on, xterm.js would have consumed the event for native selection
|
|
61
|
+
* and we'd never receive it. Used by the footer to show the right hint. */
|
|
62
|
+
lastPressHadAlt: boolean
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function createSelectionState(): SelectionState {
|
|
66
|
+
return {
|
|
67
|
+
anchor: null,
|
|
68
|
+
focus: null,
|
|
69
|
+
isDragging: false,
|
|
70
|
+
anchorSpan: null,
|
|
71
|
+
scrolledOffAbove: [],
|
|
72
|
+
scrolledOffBelow: [],
|
|
73
|
+
scrolledOffAboveSW: [],
|
|
74
|
+
scrolledOffBelowSW: [],
|
|
75
|
+
lastPressHadAlt: false,
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function startSelection(
|
|
80
|
+
s: SelectionState,
|
|
81
|
+
col: number,
|
|
82
|
+
row: number,
|
|
83
|
+
): void {
|
|
84
|
+
s.anchor = { col, row }
|
|
85
|
+
// Focus is not set until the first drag motion. A click-release with no
|
|
86
|
+
// drag leaves focus null → hasSelection/selectionBounds return false/null
|
|
87
|
+
// via the `!s.focus` check, so a bare click never highlights a cell.
|
|
88
|
+
s.focus = null
|
|
89
|
+
s.isDragging = true
|
|
90
|
+
s.anchorSpan = null
|
|
91
|
+
s.scrolledOffAbove = []
|
|
92
|
+
s.scrolledOffBelow = []
|
|
93
|
+
s.scrolledOffAboveSW = []
|
|
94
|
+
s.scrolledOffBelowSW = []
|
|
95
|
+
s.virtualAnchorRow = undefined
|
|
96
|
+
s.virtualFocusRow = undefined
|
|
97
|
+
s.lastPressHadAlt = false
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function updateSelection(
|
|
101
|
+
s: SelectionState,
|
|
102
|
+
col: number,
|
|
103
|
+
row: number,
|
|
104
|
+
): void {
|
|
105
|
+
if (!s.isDragging) return
|
|
106
|
+
// First motion at the same cell as anchor is a no-op. Terminals in mode
|
|
107
|
+
// 1002 can fire a drag event at the anchor cell (sub-pixel tremor, or a
|
|
108
|
+
// motion-release pair). Setting focus here would turn a bare click into
|
|
109
|
+
// a 1-cell selection and clobber the clipboard via useCopyOnSelect. Once
|
|
110
|
+
// focus is set (real drag), we track normally including back to anchor.
|
|
111
|
+
if (!s.focus && s.anchor && s.anchor.col === col && s.anchor.row === row)
|
|
112
|
+
return
|
|
113
|
+
s.focus = { col, row }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function finishSelection(s: SelectionState): void {
|
|
117
|
+
s.isDragging = false
|
|
118
|
+
// Keep anchor/focus so highlight stays visible and text can be copied.
|
|
119
|
+
// Clear via clearSelection() on Esc or after copy.
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function clearSelection(s: SelectionState): void {
|
|
123
|
+
s.anchor = null
|
|
124
|
+
s.focus = null
|
|
125
|
+
s.isDragging = false
|
|
126
|
+
s.anchorSpan = null
|
|
127
|
+
s.scrolledOffAbove = []
|
|
128
|
+
s.scrolledOffBelow = []
|
|
129
|
+
s.scrolledOffAboveSW = []
|
|
130
|
+
s.scrolledOffBelowSW = []
|
|
131
|
+
s.virtualAnchorRow = undefined
|
|
132
|
+
s.virtualFocusRow = undefined
|
|
133
|
+
s.lastPressHadAlt = false
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Unicode-aware word character matcher: letters (any script), digits,
|
|
137
|
+
// and the punctuation set iTerm2 treats as word-part by default.
|
|
138
|
+
// Matching iTerm2's default means double-clicking a path like
|
|
139
|
+
// `/usr/bin/bash` or `~/.claude/config.json` selects the whole thing,
|
|
140
|
+
// which is the muscle memory most macOS terminal users have.
|
|
141
|
+
// iTerm2 default "characters considered part of a word": /-+\~_.
|
|
142
|
+
const WORD_CHAR = /[\p{L}\p{N}_/.\-+~\\]/u
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Character class for double-click word-expansion. Cells with the same
|
|
146
|
+
* class as the clicked cell are included in the selection; a class change
|
|
147
|
+
* is a boundary. Matches typical terminal-emulator behavior (iTerm2 etc.):
|
|
148
|
+
* double-click on `foo` selects `foo`, on `->` selects `->`, on spaces
|
|
149
|
+
* selects the whitespace run.
|
|
150
|
+
*/
|
|
151
|
+
function charClass(c: string): 0 | 1 | 2 {
|
|
152
|
+
if (c === ' ' || c === '') return 0
|
|
153
|
+
if (WORD_CHAR.test(c)) return 1
|
|
154
|
+
return 2
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Find the bounds of the same-class character run at (col, row). Returns
|
|
159
|
+
* null if the click is out of bounds or lands on a noSelect cell. Used by
|
|
160
|
+
* selectWordAt (initial double-click) and extendWordSelection (drag).
|
|
161
|
+
*/
|
|
162
|
+
function wordBoundsAt(
|
|
163
|
+
screen: Screen,
|
|
164
|
+
col: number,
|
|
165
|
+
row: number,
|
|
166
|
+
): { lo: number; hi: number } | null {
|
|
167
|
+
if (row < 0 || row >= screen.height) return null
|
|
168
|
+
const width = screen.width
|
|
169
|
+
const noSelect = screen.noSelect
|
|
170
|
+
const rowOff = row * width
|
|
171
|
+
|
|
172
|
+
// If the click landed on the spacer tail of a wide char, step back to
|
|
173
|
+
// the head so the class check sees the actual grapheme.
|
|
174
|
+
let c = col
|
|
175
|
+
if (c > 0) {
|
|
176
|
+
const cell = cellAt(screen, c, row)
|
|
177
|
+
if (cell && cell.width === CellWidth.SpacerTail) c -= 1
|
|
178
|
+
}
|
|
179
|
+
if (c < 0 || c >= width || noSelect[rowOff + c] === 1) return null
|
|
180
|
+
|
|
181
|
+
const startCell = cellAt(screen, c, row)
|
|
182
|
+
if (!startCell) return null
|
|
183
|
+
const cls = charClass(startCell.char)
|
|
184
|
+
|
|
185
|
+
// Expand left: include cells of the same class, stop at noSelect or
|
|
186
|
+
// class change. SpacerTail cells are stepped over (the wide-char head
|
|
187
|
+
// at the preceding column determines the class).
|
|
188
|
+
let lo = c
|
|
189
|
+
while (lo > 0) {
|
|
190
|
+
const prev = lo - 1
|
|
191
|
+
if (noSelect[rowOff + prev] === 1) break
|
|
192
|
+
const pc = cellAt(screen, prev, row)
|
|
193
|
+
if (!pc) break
|
|
194
|
+
if (pc.width === CellWidth.SpacerTail) {
|
|
195
|
+
// Step over the spacer to the wide-char head
|
|
196
|
+
if (prev === 0 || noSelect[rowOff + prev - 1] === 1) break
|
|
197
|
+
const head = cellAt(screen, prev - 1, row)
|
|
198
|
+
if (!head || charClass(head.char) !== cls) break
|
|
199
|
+
lo = prev - 1
|
|
200
|
+
continue
|
|
201
|
+
}
|
|
202
|
+
if (charClass(pc.char) !== cls) break
|
|
203
|
+
lo = prev
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// Expand right: same logic, skipping spacer tails.
|
|
207
|
+
let hi = c
|
|
208
|
+
while (hi < width - 1) {
|
|
209
|
+
const next = hi + 1
|
|
210
|
+
if (noSelect[rowOff + next] === 1) break
|
|
211
|
+
const nc = cellAt(screen, next, row)
|
|
212
|
+
if (!nc) break
|
|
213
|
+
if (nc.width === CellWidth.SpacerTail) {
|
|
214
|
+
// Include the spacer tail in the selection range (it belongs to
|
|
215
|
+
// the wide char at hi) and continue past it.
|
|
216
|
+
hi = next
|
|
217
|
+
continue
|
|
218
|
+
}
|
|
219
|
+
if (charClass(nc.char) !== cls) break
|
|
220
|
+
hi = next
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return { lo, hi }
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/** -1 if a < b, 1 if a > b, 0 if equal (reading order: row then col). */
|
|
227
|
+
function comparePoints(a: Point, b: Point): number {
|
|
228
|
+
if (a.row !== b.row) return a.row < b.row ? -1 : 1
|
|
229
|
+
if (a.col !== b.col) return a.col < b.col ? -1 : 1
|
|
230
|
+
return 0
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Select the word at (col, row) by scanning the screen buffer for the
|
|
235
|
+
* bounds of the same-class character run. Mutates the selection in place.
|
|
236
|
+
* No-op if the click is out of bounds or lands on a noSelect cell.
|
|
237
|
+
* Sets isDragging=true and anchorSpan so a subsequent drag extends the
|
|
238
|
+
* selection word-by-word (native macOS behavior).
|
|
239
|
+
*/
|
|
240
|
+
export function selectWordAt(
|
|
241
|
+
s: SelectionState,
|
|
242
|
+
screen: Screen,
|
|
243
|
+
col: number,
|
|
244
|
+
row: number,
|
|
245
|
+
): void {
|
|
246
|
+
const b = wordBoundsAt(screen, col, row)
|
|
247
|
+
if (!b) return
|
|
248
|
+
const lo = { col: b.lo, row }
|
|
249
|
+
const hi = { col: b.hi, row }
|
|
250
|
+
s.anchor = lo
|
|
251
|
+
s.focus = hi
|
|
252
|
+
s.isDragging = true
|
|
253
|
+
s.anchorSpan = { lo, hi, kind: 'word' }
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Printable ASCII minus terminal URL delimiters. Restricting to single-
|
|
257
|
+
// codeunit ASCII keeps cell-count === string-index, so the column-span
|
|
258
|
+
// check below is exact (no wide-char/grapheme drift).
|
|
259
|
+
const URL_BOUNDARY = new Set([...'<>"\'` '])
|
|
260
|
+
function isUrlChar(c: string): boolean {
|
|
261
|
+
if (c.length !== 1) return false
|
|
262
|
+
const code = c.charCodeAt(0)
|
|
263
|
+
return code >= 0x21 && code <= 0x7e && !URL_BOUNDARY.has(c)
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Scan the screen buffer for a plain-text URL at (col, row). Mirrors the
|
|
268
|
+
* terminal's native Cmd+Click URL detection, which fullscreen mode's mouse
|
|
269
|
+
* tracking intercepts. Called from getHyperlinkAt as a fallback when the
|
|
270
|
+
* cell has no OSC 8 hyperlink.
|
|
271
|
+
*/
|
|
272
|
+
export function findPlainTextUrlAt(
|
|
273
|
+
screen: Screen,
|
|
274
|
+
col: number,
|
|
275
|
+
row: number,
|
|
276
|
+
): string | undefined {
|
|
277
|
+
if (row < 0 || row >= screen.height) return undefined
|
|
278
|
+
const width = screen.width
|
|
279
|
+
const noSelect = screen.noSelect
|
|
280
|
+
const rowOff = row * width
|
|
281
|
+
|
|
282
|
+
let c = col
|
|
283
|
+
if (c > 0) {
|
|
284
|
+
const cell = cellAt(screen, c, row)
|
|
285
|
+
if (cell && cell.width === CellWidth.SpacerTail) c -= 1
|
|
286
|
+
}
|
|
287
|
+
if (c < 0 || c >= width || noSelect[rowOff + c] === 1) return undefined
|
|
288
|
+
|
|
289
|
+
const startCell = cellAt(screen, c, row)
|
|
290
|
+
if (!startCell || !isUrlChar(startCell.char)) return undefined
|
|
291
|
+
|
|
292
|
+
// Expand left/right to the bounds of the URL-char run. URLs are ASCII
|
|
293
|
+
// (CellWidth.Narrow, 1 codeunit), so hitting a non-ASCII/wide/spacer
|
|
294
|
+
// cell is a boundary — no need to step over spacers like wordBoundsAt.
|
|
295
|
+
let lo = c
|
|
296
|
+
while (lo > 0) {
|
|
297
|
+
const prev = lo - 1
|
|
298
|
+
if (noSelect[rowOff + prev] === 1) break
|
|
299
|
+
const pc = cellAt(screen, prev, row)
|
|
300
|
+
if (!pc || pc.width !== CellWidth.Narrow || !isUrlChar(pc.char)) break
|
|
301
|
+
lo = prev
|
|
302
|
+
}
|
|
303
|
+
let hi = c
|
|
304
|
+
while (hi < width - 1) {
|
|
305
|
+
const next = hi + 1
|
|
306
|
+
if (noSelect[rowOff + next] === 1) break
|
|
307
|
+
const nc = cellAt(screen, next, row)
|
|
308
|
+
if (!nc || nc.width !== CellWidth.Narrow || !isUrlChar(nc.char)) break
|
|
309
|
+
hi = next
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
let token = ''
|
|
313
|
+
for (let i = lo; i <= hi; i++) token += cellAt(screen, i, row)!.char
|
|
314
|
+
|
|
315
|
+
// 1 cell = 1 char across [lo, hi] (ASCII-only run), so string index =
|
|
316
|
+
// column offset. Find the last scheme anchor at or before the click —
|
|
317
|
+
// a run like `https://a.com,https://b.com` has two, and clicking the
|
|
318
|
+
// second should return the second URL, not the greedy match of both.
|
|
319
|
+
const clickIdx = c - lo
|
|
320
|
+
const schemeRe = /(?:https?|file):\/\//g
|
|
321
|
+
let urlStart = -1
|
|
322
|
+
let urlEnd = token.length
|
|
323
|
+
for (let m; (m = schemeRe.exec(token)); ) {
|
|
324
|
+
if (m.index > clickIdx) {
|
|
325
|
+
urlEnd = m.index
|
|
326
|
+
break
|
|
327
|
+
}
|
|
328
|
+
urlStart = m.index
|
|
329
|
+
}
|
|
330
|
+
if (urlStart < 0) return undefined
|
|
331
|
+
let url = token.slice(urlStart, urlEnd)
|
|
332
|
+
|
|
333
|
+
// Strip trailing sentence punctuation. For closers () ] }, only strip
|
|
334
|
+
// if unbalanced — `/wiki/Foo_(bar)` keeps `)`, `/arr[0]` keeps `]`.
|
|
335
|
+
const OPENER: Record<string, string> = { ')': '(', ']': '[', '}': '{' }
|
|
336
|
+
while (url.length > 0) {
|
|
337
|
+
const last = url.at(-1)!
|
|
338
|
+
if ('.,;:!?'.includes(last)) {
|
|
339
|
+
url = url.slice(0, -1)
|
|
340
|
+
continue
|
|
341
|
+
}
|
|
342
|
+
const opener = OPENER[last]
|
|
343
|
+
if (!opener) break
|
|
344
|
+
let opens = 0
|
|
345
|
+
let closes = 0
|
|
346
|
+
for (let i = 0; i < url.length; i++) {
|
|
347
|
+
const ch = url.charAt(i)
|
|
348
|
+
if (ch === opener) opens++
|
|
349
|
+
else if (ch === last) closes++
|
|
350
|
+
}
|
|
351
|
+
if (closes > opens) url = url.slice(0, -1)
|
|
352
|
+
else break
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// urlStart already guarantees click >= URL start; check right edge.
|
|
356
|
+
if (clickIdx >= urlStart + url.length) return undefined
|
|
357
|
+
|
|
358
|
+
return url
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Select the entire row. Sets isDragging=true and anchorSpan so a
|
|
363
|
+
* subsequent drag extends the selection line-by-line. The anchor/focus
|
|
364
|
+
* span from col 0 to width-1; getSelectedText handles noSelect skipping
|
|
365
|
+
* and trailing-whitespace trimming so the copied text is just the visible
|
|
366
|
+
* line content.
|
|
367
|
+
*/
|
|
368
|
+
export function selectLineAt(
|
|
369
|
+
s: SelectionState,
|
|
370
|
+
screen: Screen,
|
|
371
|
+
row: number,
|
|
372
|
+
): void {
|
|
373
|
+
if (row < 0 || row >= screen.height) return
|
|
374
|
+
const lo = { col: 0, row }
|
|
375
|
+
const hi = { col: screen.width - 1, row }
|
|
376
|
+
s.anchor = lo
|
|
377
|
+
s.focus = hi
|
|
378
|
+
s.isDragging = true
|
|
379
|
+
s.anchorSpan = { lo, hi, kind: 'line' }
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Extend a word/line-mode selection to the word/line at (col, row). The
|
|
384
|
+
* anchor span (the original multi-clicked word/line) stays selected; the
|
|
385
|
+
* selection grows from that span to the word/line at the current mouse
|
|
386
|
+
* position. Word mode falls back to the raw cell when the mouse is over a
|
|
387
|
+
* noSelect cell or out of bounds, so dragging into gutters still extends.
|
|
388
|
+
*/
|
|
389
|
+
export function extendSelection(
|
|
390
|
+
s: SelectionState,
|
|
391
|
+
screen: Screen,
|
|
392
|
+
col: number,
|
|
393
|
+
row: number,
|
|
394
|
+
): void {
|
|
395
|
+
if (!s.isDragging || !s.anchorSpan) return
|
|
396
|
+
const span = s.anchorSpan
|
|
397
|
+
let mLo: Point
|
|
398
|
+
let mHi: Point
|
|
399
|
+
if (span.kind === 'word') {
|
|
400
|
+
const b = wordBoundsAt(screen, col, row)
|
|
401
|
+
mLo = { col: b ? b.lo : col, row }
|
|
402
|
+
mHi = { col: b ? b.hi : col, row }
|
|
403
|
+
} else {
|
|
404
|
+
const r = clamp(row, 0, screen.height - 1)
|
|
405
|
+
mLo = { col: 0, row: r }
|
|
406
|
+
mHi = { col: screen.width - 1, row: r }
|
|
407
|
+
}
|
|
408
|
+
if (comparePoints(mHi, span.lo) < 0) {
|
|
409
|
+
// Mouse target ends before anchor span: extend backward.
|
|
410
|
+
s.anchor = span.hi
|
|
411
|
+
s.focus = mLo
|
|
412
|
+
} else if (comparePoints(mLo, span.hi) > 0) {
|
|
413
|
+
// Mouse target starts after anchor span: extend forward.
|
|
414
|
+
s.anchor = span.lo
|
|
415
|
+
s.focus = mHi
|
|
416
|
+
} else {
|
|
417
|
+
// Mouse overlaps the anchor span: just select the anchor span.
|
|
418
|
+
s.anchor = span.lo
|
|
419
|
+
s.focus = span.hi
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/** Semantic keyboard focus moves. See moveSelectionFocus in ink.tsx for
|
|
424
|
+
* how screen bounds + row-wrap are applied. */
|
|
425
|
+
export type FocusMove =
|
|
426
|
+
| 'left'
|
|
427
|
+
| 'right'
|
|
428
|
+
| 'up'
|
|
429
|
+
| 'down'
|
|
430
|
+
| 'lineStart'
|
|
431
|
+
| 'lineEnd'
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Set focus to (col, row) for keyboard selection extension (shift+arrow).
|
|
435
|
+
* Anchor stays fixed; selection grows or shrinks depending on where focus
|
|
436
|
+
* moves relative to anchor. Drops to char mode (clears anchorSpan) —
|
|
437
|
+
* native macOS does this too: shift+arrow after a double-click word-select
|
|
438
|
+
* extends char-by-char from the word edge, not word-by-word. Scrolled-off
|
|
439
|
+
* accumulators are preserved: keyboard-extending a drag-scrolled selection
|
|
440
|
+
* keeps the off-screen rows. Caller supplies coords already clamped/wrapped.
|
|
441
|
+
*/
|
|
442
|
+
export function moveFocus(s: SelectionState, col: number, row: number): void {
|
|
443
|
+
if (!s.focus) return
|
|
444
|
+
s.anchorSpan = null
|
|
445
|
+
s.focus = { col, row }
|
|
446
|
+
// Explicit user repositioning — any stale virtual focus (from a prior
|
|
447
|
+
// shiftSelection clamp) no longer reflects intent. Anchor stays put so
|
|
448
|
+
// virtualAnchorRow is still valid for its own round-trip.
|
|
449
|
+
s.virtualFocusRow = undefined
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Shift anchor AND focus by dRow, clamped to [minRow, maxRow]. Used for
|
|
454
|
+
* keyboard scroll (PgUp/PgDn/ctrl+u/d/b/f): the whole selection must track
|
|
455
|
+
* the content, unlike drag-to-scroll where focus stays at the mouse. Any
|
|
456
|
+
* point that hits a clamp bound gets its col reset to the full-width edge —
|
|
457
|
+
* its original content scrolled off-screen and was captured by
|
|
458
|
+
* captureScrolledRows, so the col constraint was already consumed. Keeping
|
|
459
|
+
* it would truncate the NEW content now at that screen row. Clamp col is 0
|
|
460
|
+
* for dRow<0 (scrolling down, top leaves, 'above' semantics) or width-1 for
|
|
461
|
+
* dRow>0 (scrolling up, bottom leaves, 'below' semantics).
|
|
462
|
+
*
|
|
463
|
+
* If both ends overshoot the SAME viewport edge (select text → Home/End/g/G
|
|
464
|
+
* jumps far enough that both are out of view), clear — otherwise both clamp
|
|
465
|
+
* to the same corner cell and a ghost 1-cell highlight lingers, and
|
|
466
|
+
* getSelectedText returns one unrelated char from that corner. Symmetric
|
|
467
|
+
* with shiftSelectionForFollow's top-edge check, but bidirectional: keyboard
|
|
468
|
+
* scroll can jump either way.
|
|
469
|
+
*/
|
|
470
|
+
export function shiftSelection(
|
|
471
|
+
s: SelectionState,
|
|
472
|
+
dRow: number,
|
|
473
|
+
minRow: number,
|
|
474
|
+
maxRow: number,
|
|
475
|
+
width: number,
|
|
476
|
+
): void {
|
|
477
|
+
if (!s.anchor || !s.focus) return
|
|
478
|
+
// Virtual rows track pre-clamp positions so reverse scrolls restore
|
|
479
|
+
// correctly. Without this, clamp(5→0) + shift(+10) = 10, not the true 5,
|
|
480
|
+
// and scrolledOffAbove stays stale (highlight ≠ copy).
|
|
481
|
+
const vAnchor = (s.virtualAnchorRow ?? s.anchor.row) + dRow
|
|
482
|
+
const vFocus = (s.virtualFocusRow ?? s.focus.row) + dRow
|
|
483
|
+
if (
|
|
484
|
+
(vAnchor < minRow && vFocus < minRow) ||
|
|
485
|
+
(vAnchor > maxRow && vFocus > maxRow)
|
|
486
|
+
) {
|
|
487
|
+
clearSelection(s)
|
|
488
|
+
return
|
|
489
|
+
}
|
|
490
|
+
// Debt = how far the nearer endpoint overshoots each edge. When debt
|
|
491
|
+
// shrinks (reverse scroll), those rows are back on-screen — pop from
|
|
492
|
+
// the accumulator so getSelectedText doesn't double-count them.
|
|
493
|
+
const oldMin = Math.min(
|
|
494
|
+
s.virtualAnchorRow ?? s.anchor.row,
|
|
495
|
+
s.virtualFocusRow ?? s.focus.row,
|
|
496
|
+
)
|
|
497
|
+
const oldMax = Math.max(
|
|
498
|
+
s.virtualAnchorRow ?? s.anchor.row,
|
|
499
|
+
s.virtualFocusRow ?? s.focus.row,
|
|
500
|
+
)
|
|
501
|
+
const oldAboveDebt = Math.max(0, minRow - oldMin)
|
|
502
|
+
const oldBelowDebt = Math.max(0, oldMax - maxRow)
|
|
503
|
+
const newAboveDebt = Math.max(0, minRow - Math.min(vAnchor, vFocus))
|
|
504
|
+
const newBelowDebt = Math.max(0, Math.max(vAnchor, vFocus) - maxRow)
|
|
505
|
+
if (newAboveDebt < oldAboveDebt) {
|
|
506
|
+
// scrolledOffAbove pushes newest at the end (closest to on-screen).
|
|
507
|
+
const drop = oldAboveDebt - newAboveDebt
|
|
508
|
+
s.scrolledOffAbove.length -= drop
|
|
509
|
+
s.scrolledOffAboveSW.length = s.scrolledOffAbove.length
|
|
510
|
+
}
|
|
511
|
+
if (newBelowDebt < oldBelowDebt) {
|
|
512
|
+
// scrolledOffBelow unshifts newest at the front (closest to on-screen).
|
|
513
|
+
const drop = oldBelowDebt - newBelowDebt
|
|
514
|
+
s.scrolledOffBelow.splice(0, drop)
|
|
515
|
+
s.scrolledOffBelowSW.splice(0, drop)
|
|
516
|
+
}
|
|
517
|
+
// Invariant: accumulator length ≤ debt. If the accumulator exceeds debt,
|
|
518
|
+
// the excess is stale — e.g., moveFocus cleared virtualFocusRow without
|
|
519
|
+
// trimming the accumulator, orphaning entries the pop above can never
|
|
520
|
+
// reach because oldDebt was ALREADY 0. Truncate to debt (keeping the
|
|
521
|
+
// newest = closest-to-on-screen entries). Check newDebt (not oldDebt):
|
|
522
|
+
// captureScrolledRows runs BEFORE this shift in the real flow (ink.tsx),
|
|
523
|
+
// so at entry the accumulator is populated but oldDebt is still 0 —
|
|
524
|
+
// that's the normal establish-debt path, not stale.
|
|
525
|
+
if (s.scrolledOffAbove.length > newAboveDebt) {
|
|
526
|
+
// Above pushes newest at END → keep END.
|
|
527
|
+
s.scrolledOffAbove =
|
|
528
|
+
newAboveDebt > 0 ? s.scrolledOffAbove.slice(-newAboveDebt) : []
|
|
529
|
+
s.scrolledOffAboveSW =
|
|
530
|
+
newAboveDebt > 0 ? s.scrolledOffAboveSW.slice(-newAboveDebt) : []
|
|
531
|
+
}
|
|
532
|
+
if (s.scrolledOffBelow.length > newBelowDebt) {
|
|
533
|
+
// Below unshifts newest at FRONT → keep FRONT.
|
|
534
|
+
s.scrolledOffBelow = s.scrolledOffBelow.slice(0, newBelowDebt)
|
|
535
|
+
s.scrolledOffBelowSW = s.scrolledOffBelowSW.slice(0, newBelowDebt)
|
|
536
|
+
}
|
|
537
|
+
// Clamp col depends on which EDGE (not dRow direction): virtual tracking
|
|
538
|
+
// means a top-clamped point can stay top-clamped during a dRow>0 reverse
|
|
539
|
+
// shift — dRow-based clampCol would give it the bottom col.
|
|
540
|
+
const shift = (p: Point, vRow: number): Point => {
|
|
541
|
+
if (vRow < minRow) return { col: 0, row: minRow }
|
|
542
|
+
if (vRow > maxRow) return { col: width - 1, row: maxRow }
|
|
543
|
+
return { col: p.col, row: vRow }
|
|
544
|
+
}
|
|
545
|
+
s.anchor = shift(s.anchor, vAnchor)
|
|
546
|
+
s.focus = shift(s.focus, vFocus)
|
|
547
|
+
s.virtualAnchorRow =
|
|
548
|
+
vAnchor < minRow || vAnchor > maxRow ? vAnchor : undefined
|
|
549
|
+
s.virtualFocusRow = vFocus < minRow || vFocus > maxRow ? vFocus : undefined
|
|
550
|
+
// anchorSpan not virtual-tracked: it's for word/line extend-on-drag,
|
|
551
|
+
// irrelevant to the keyboard-scroll round-trip case.
|
|
552
|
+
if (s.anchorSpan) {
|
|
553
|
+
const sp = (p: Point): Point => {
|
|
554
|
+
const r = p.row + dRow
|
|
555
|
+
if (r < minRow) return { col: 0, row: minRow }
|
|
556
|
+
if (r > maxRow) return { col: width - 1, row: maxRow }
|
|
557
|
+
return { col: p.col, row: r }
|
|
558
|
+
}
|
|
559
|
+
s.anchorSpan = {
|
|
560
|
+
lo: sp(s.anchorSpan.lo),
|
|
561
|
+
hi: sp(s.anchorSpan.hi),
|
|
562
|
+
kind: s.anchorSpan.kind,
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* Shift the anchor row by dRow, clamped to [minRow, maxRow]. Used during
|
|
569
|
+
* drag-to-scroll: when the ScrollBox scrolls by N rows, the content that
|
|
570
|
+
* was under the anchor is now at a different viewport row, so the anchor
|
|
571
|
+
* must follow it. Focus is left unchanged (it stays at the mouse position).
|
|
572
|
+
*/
|
|
573
|
+
export function shiftAnchor(
|
|
574
|
+
s: SelectionState,
|
|
575
|
+
dRow: number,
|
|
576
|
+
minRow: number,
|
|
577
|
+
maxRow: number,
|
|
578
|
+
): void {
|
|
579
|
+
if (!s.anchor) return
|
|
580
|
+
// Same virtual-row tracking as shiftSelection/shiftSelectionForFollow: the
|
|
581
|
+
// drag→follow transition hands off to shiftSelectionForFollow, which reads
|
|
582
|
+
// (virtualAnchorRow ?? anchor.row). Without this, drag-phase clamping
|
|
583
|
+
// leaves virtual undefined → follow initializes from the already-clamped
|
|
584
|
+
// row, under-counting total drift → shiftSelection's invariant-restore
|
|
585
|
+
// prematurely clears valid drag-phase accumulator entries.
|
|
586
|
+
const raw = (s.virtualAnchorRow ?? s.anchor.row) + dRow
|
|
587
|
+
s.anchor = { col: s.anchor.col, row: clamp(raw, minRow, maxRow) }
|
|
588
|
+
s.virtualAnchorRow = raw < minRow || raw > maxRow ? raw : undefined
|
|
589
|
+
// anchorSpan not virtual-tracked (word/line extend, irrelevant to
|
|
590
|
+
// keyboard-scroll round-trip) — plain clamp from current row.
|
|
591
|
+
if (s.anchorSpan) {
|
|
592
|
+
const shift = (p: Point): Point => ({
|
|
593
|
+
col: p.col,
|
|
594
|
+
row: clamp(p.row + dRow, minRow, maxRow),
|
|
595
|
+
})
|
|
596
|
+
s.anchorSpan = {
|
|
597
|
+
lo: shift(s.anchorSpan.lo),
|
|
598
|
+
hi: shift(s.anchorSpan.hi),
|
|
599
|
+
kind: s.anchorSpan.kind,
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Shift the whole selection (anchor + focus + anchorSpan) by dRow, clamped
|
|
606
|
+
* to [minRow, maxRow]. Used when sticky/auto-follow scrolls the ScrollBox
|
|
607
|
+
* while a selection is active — native terminal behavior is for the
|
|
608
|
+
* highlight to walk up the screen with the text (not stay at the same
|
|
609
|
+
* screen position).
|
|
610
|
+
*
|
|
611
|
+
* Differs from shiftAnchor: during drag-to-scroll, focus tracks the live
|
|
612
|
+
* mouse position and only anchor follows the text. During streaming-follow,
|
|
613
|
+
* the selection is text-anchored at both ends — both must move. The
|
|
614
|
+
* isDragging check in ink.tsx picks which shift to apply.
|
|
615
|
+
*
|
|
616
|
+
* If both ends would shift strictly BELOW minRow (unclamped), the selected
|
|
617
|
+
* text has scrolled entirely off the top. Clear it — otherwise a single
|
|
618
|
+
* inverted cell lingers at the viewport top as a ghost (native terminals
|
|
619
|
+
* drop the selection when it leaves scrollback). Landing AT minRow is
|
|
620
|
+
* still valid: that cell holds the correct text. Returns true if the
|
|
621
|
+
* selection was cleared so the caller can notify React-land subscribers
|
|
622
|
+
* (useHasSelection) — the caller is inside onRender so it can't use
|
|
623
|
+
* notifySelectionChange (recursion), must fire listeners directly.
|
|
624
|
+
*/
|
|
625
|
+
export function shiftSelectionForFollow(
|
|
626
|
+
s: SelectionState,
|
|
627
|
+
dRow: number,
|
|
628
|
+
minRow: number,
|
|
629
|
+
maxRow: number,
|
|
630
|
+
): boolean {
|
|
631
|
+
if (!s.anchor) return false
|
|
632
|
+
// Mirror shiftSelection: compute raw (unclamped) positions from virtual
|
|
633
|
+
// if set, else current. This handles BOTH the update path (virtual already
|
|
634
|
+
// set from a prior keyboard scroll) AND the initialize path (first clamp
|
|
635
|
+
// happens HERE via follow-scroll, no prior keyboard scroll). Without the
|
|
636
|
+
// initialize path, follow-scroll-first leaves virtual undefined even
|
|
637
|
+
// though the clamp below occurred → a later PgUp computes debt from the
|
|
638
|
+
// clamped row instead of the true pre-clamp row and never pops the
|
|
639
|
+
// accumulator — getSelectedText double-counts the off-screen rows.
|
|
640
|
+
const rawAnchor = (s.virtualAnchorRow ?? s.anchor.row) + dRow
|
|
641
|
+
const rawFocus = s.focus
|
|
642
|
+
? (s.virtualFocusRow ?? s.focus.row) + dRow
|
|
643
|
+
: undefined
|
|
644
|
+
if (rawAnchor < minRow && rawFocus !== undefined && rawFocus < minRow) {
|
|
645
|
+
clearSelection(s)
|
|
646
|
+
return true
|
|
647
|
+
}
|
|
648
|
+
// Clamp from raw, not p.row+dRow — so a virtual position coming back
|
|
649
|
+
// in-bounds lands at the TRUE position, not the stale clamped one.
|
|
650
|
+
s.anchor = { col: s.anchor.col, row: clamp(rawAnchor, minRow, maxRow) }
|
|
651
|
+
if (s.focus && rawFocus !== undefined) {
|
|
652
|
+
s.focus = { col: s.focus.col, row: clamp(rawFocus, minRow, maxRow) }
|
|
653
|
+
}
|
|
654
|
+
s.virtualAnchorRow =
|
|
655
|
+
rawAnchor < minRow || rawAnchor > maxRow ? rawAnchor : undefined
|
|
656
|
+
s.virtualFocusRow =
|
|
657
|
+
rawFocus !== undefined && (rawFocus < minRow || rawFocus > maxRow)
|
|
658
|
+
? rawFocus
|
|
659
|
+
: undefined
|
|
660
|
+
// anchorSpan not virtual-tracked (word/line extend, irrelevant to
|
|
661
|
+
// keyboard-scroll round-trip) — plain clamp from current row.
|
|
662
|
+
if (s.anchorSpan) {
|
|
663
|
+
const shift = (p: Point): Point => ({
|
|
664
|
+
col: p.col,
|
|
665
|
+
row: clamp(p.row + dRow, minRow, maxRow),
|
|
666
|
+
})
|
|
667
|
+
s.anchorSpan = {
|
|
668
|
+
lo: shift(s.anchorSpan.lo),
|
|
669
|
+
hi: shift(s.anchorSpan.hi),
|
|
670
|
+
kind: s.anchorSpan.kind,
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
return false
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
export function hasSelection(s: SelectionState): boolean {
|
|
677
|
+
return s.anchor !== null && s.focus !== null
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Normalized selection bounds: start is always before end in reading order.
|
|
682
|
+
* Returns null if no active selection.
|
|
683
|
+
*/
|
|
684
|
+
export function selectionBounds(s: SelectionState): {
|
|
685
|
+
start: { col: number; row: number }
|
|
686
|
+
end: { col: number; row: number }
|
|
687
|
+
} | null {
|
|
688
|
+
if (!s.anchor || !s.focus) return null
|
|
689
|
+
return comparePoints(s.anchor, s.focus) <= 0
|
|
690
|
+
? { start: s.anchor, end: s.focus }
|
|
691
|
+
: { start: s.focus, end: s.anchor }
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
/**
|
|
695
|
+
* Check if a cell at (col, row) is within the current selection range.
|
|
696
|
+
* Used by the renderer to apply inverse style.
|
|
697
|
+
*/
|
|
698
|
+
export function isCellSelected(
|
|
699
|
+
s: SelectionState,
|
|
700
|
+
col: number,
|
|
701
|
+
row: number,
|
|
702
|
+
): boolean {
|
|
703
|
+
const b = selectionBounds(s)
|
|
704
|
+
if (!b) return false
|
|
705
|
+
const { start, end } = b
|
|
706
|
+
if (row < start.row || row > end.row) return false
|
|
707
|
+
if (row === start.row && col < start.col) return false
|
|
708
|
+
if (row === end.row && col > end.col) return false
|
|
709
|
+
return true
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/** Extract text from one screen row. When the next row is a soft-wrap
|
|
713
|
+
* continuation (screen.softWrap[row+1]>0), clamp to that content-end
|
|
714
|
+
* column and skip the trailing trim so the word-separator space survives
|
|
715
|
+
* the join. See Screen.softWrap for why the clamp is necessary. */
|
|
716
|
+
function extractRowText(
|
|
717
|
+
screen: Screen,
|
|
718
|
+
row: number,
|
|
719
|
+
colStart: number,
|
|
720
|
+
colEnd: number,
|
|
721
|
+
): string {
|
|
722
|
+
const noSelect = screen.noSelect
|
|
723
|
+
const rowOff = row * screen.width
|
|
724
|
+
const contentEnd = row + 1 < screen.height ? screen.softWrap[row + 1]! : 0
|
|
725
|
+
const lastCol = contentEnd > 0 ? Math.min(colEnd, contentEnd - 1) : colEnd
|
|
726
|
+
let line = ''
|
|
727
|
+
for (let col = colStart; col <= lastCol; col++) {
|
|
728
|
+
// Skip cells marked noSelect (gutters, line numbers, diff sigils).
|
|
729
|
+
// Check before cellAt to avoid the decode cost for excluded cells.
|
|
730
|
+
if (noSelect[rowOff + col] === 1) continue
|
|
731
|
+
const cell = cellAt(screen, col, row)
|
|
732
|
+
if (!cell) continue
|
|
733
|
+
// Skip spacer tails (second half of wide chars) — the head already
|
|
734
|
+
// contains the full grapheme. SpacerHead is a blank at line-end.
|
|
735
|
+
if (
|
|
736
|
+
cell.width === CellWidth.SpacerTail ||
|
|
737
|
+
cell.width === CellWidth.SpacerHead
|
|
738
|
+
) {
|
|
739
|
+
continue
|
|
740
|
+
}
|
|
741
|
+
line += cell.char
|
|
742
|
+
}
|
|
743
|
+
return contentEnd > 0 ? line : line.replace(/\s+$/, '')
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
/** Accumulator for selected text that merges soft-wrapped rows back
|
|
747
|
+
* into logical lines. push(text, sw) appends a newline before text
|
|
748
|
+
* only when sw=false (i.e. the row starts a new logical line). Rows
|
|
749
|
+
* with sw=true are concatenated onto the previous row. */
|
|
750
|
+
function joinRows(
|
|
751
|
+
lines: string[],
|
|
752
|
+
text: string,
|
|
753
|
+
sw: boolean | undefined,
|
|
754
|
+
): void {
|
|
755
|
+
if (sw && lines.length > 0) {
|
|
756
|
+
lines[lines.length - 1] += text
|
|
757
|
+
} else {
|
|
758
|
+
lines.push(text)
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Extract text from the screen buffer within the selection range.
|
|
764
|
+
* Rows are joined with newlines unless the screen's softWrap bitmap
|
|
765
|
+
* marks a row as a word-wrap continuation — those rows are concatenated
|
|
766
|
+
* onto the previous row so the copied text matches the logical source
|
|
767
|
+
* line, not the visual wrapped layout. Trailing whitespace on the last
|
|
768
|
+
* fragment of each logical line is trimmed. Wide-char spacer cells are
|
|
769
|
+
* skipped. Rows that scrolled out of the viewport during drag-to-scroll
|
|
770
|
+
* are joined back in from the scrolledOffAbove/Below accumulators along
|
|
771
|
+
* with their captured softWrap bits.
|
|
772
|
+
*/
|
|
773
|
+
export function getSelectedText(s: SelectionState, screen: Screen): string {
|
|
774
|
+
const b = selectionBounds(s)
|
|
775
|
+
if (!b) return ''
|
|
776
|
+
const { start, end } = b
|
|
777
|
+
const sw = screen.softWrap
|
|
778
|
+
const lines: string[] = []
|
|
779
|
+
|
|
780
|
+
for (let i = 0; i < s.scrolledOffAbove.length; i++) {
|
|
781
|
+
joinRows(lines, s.scrolledOffAbove[i]!, s.scrolledOffAboveSW[i])
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
for (let row = start.row; row <= end.row; row++) {
|
|
785
|
+
const rowStart = row === start.row ? start.col : 0
|
|
786
|
+
const rowEnd = row === end.row ? end.col : screen.width - 1
|
|
787
|
+
joinRows(lines, extractRowText(screen, row, rowStart, rowEnd), sw[row]! > 0)
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
for (let i = 0; i < s.scrolledOffBelow.length; i++) {
|
|
791
|
+
joinRows(lines, s.scrolledOffBelow[i]!, s.scrolledOffBelowSW[i])
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
return lines.join('\n')
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Capture text from rows about to scroll out of the viewport during
|
|
799
|
+
* drag-to-scroll, BEFORE scrollBy overwrites them. Only the rows that
|
|
800
|
+
* intersect the selection are captured, using the selection's col bounds
|
|
801
|
+
* for the anchor-side boundary row. After capturing the anchor row, the
|
|
802
|
+
* anchor.col AND anchorSpan cols are reset to the full-width boundary so
|
|
803
|
+
* subsequent captures and the final getSelectedText don't re-apply a stale
|
|
804
|
+
* col constraint to content that's no longer under the original anchor.
|
|
805
|
+
* Both span cols are reset (not just the near side): after a blocked
|
|
806
|
+
* reversal the drag can flip direction, and extendSelection then reads the
|
|
807
|
+
* OPPOSITE span side — which would otherwise still hold the original word
|
|
808
|
+
* boundary and truncate one subsequently-captured row.
|
|
809
|
+
*
|
|
810
|
+
* side='above': rows scrolling out the top (dragging down, anchor=start).
|
|
811
|
+
* side='below': rows scrolling out the bottom (dragging up, anchor=end).
|
|
812
|
+
*/
|
|
813
|
+
export function captureScrolledRows(
|
|
814
|
+
s: SelectionState,
|
|
815
|
+
screen: Screen,
|
|
816
|
+
firstRow: number,
|
|
817
|
+
lastRow: number,
|
|
818
|
+
side: 'above' | 'below',
|
|
819
|
+
): void {
|
|
820
|
+
const b = selectionBounds(s)
|
|
821
|
+
if (!b || firstRow > lastRow) return
|
|
822
|
+
const { start, end } = b
|
|
823
|
+
// Intersect [firstRow, lastRow] with [start.row, end.row]. Rows outside
|
|
824
|
+
// the selection aren't captured — they weren't selected.
|
|
825
|
+
const lo = Math.max(firstRow, start.row)
|
|
826
|
+
const hi = Math.min(lastRow, end.row)
|
|
827
|
+
if (lo > hi) return
|
|
828
|
+
|
|
829
|
+
const width = screen.width
|
|
830
|
+
const sw = screen.softWrap
|
|
831
|
+
const captured: string[] = []
|
|
832
|
+
const capturedSW: boolean[] = []
|
|
833
|
+
for (let row = lo; row <= hi; row++) {
|
|
834
|
+
const colStart = row === start.row ? start.col : 0
|
|
835
|
+
const colEnd = row === end.row ? end.col : width - 1
|
|
836
|
+
captured.push(extractRowText(screen, row, colStart, colEnd))
|
|
837
|
+
capturedSW.push(sw[row]! > 0)
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
if (side === 'above') {
|
|
841
|
+
// Newest rows go at the bottom of the above-accumulator (closest to
|
|
842
|
+
// the on-screen content in reading order).
|
|
843
|
+
s.scrolledOffAbove.push(...captured)
|
|
844
|
+
s.scrolledOffAboveSW.push(...capturedSW)
|
|
845
|
+
// We just captured the top of the selection. The anchor (=start when
|
|
846
|
+
// dragging down) is now pointing at content that will scroll out; its
|
|
847
|
+
// col constraint was applied to the captured row. Reset to col 0 so
|
|
848
|
+
// the NEXT tick and the final getSelectedText read the full row.
|
|
849
|
+
if (s.anchor && s.anchor.row === start.row && lo === start.row) {
|
|
850
|
+
s.anchor = { col: 0, row: s.anchor.row }
|
|
851
|
+
if (s.anchorSpan) {
|
|
852
|
+
s.anchorSpan = {
|
|
853
|
+
kind: s.anchorSpan.kind,
|
|
854
|
+
lo: { col: 0, row: s.anchorSpan.lo.row },
|
|
855
|
+
hi: { col: width - 1, row: s.anchorSpan.hi.row },
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
} else {
|
|
860
|
+
// Newest rows go at the TOP of the below-accumulator — they're
|
|
861
|
+
// closest to the on-screen content.
|
|
862
|
+
s.scrolledOffBelow.unshift(...captured)
|
|
863
|
+
s.scrolledOffBelowSW.unshift(...capturedSW)
|
|
864
|
+
if (s.anchor && s.anchor.row === end.row && hi === end.row) {
|
|
865
|
+
s.anchor = { col: width - 1, row: s.anchor.row }
|
|
866
|
+
if (s.anchorSpan) {
|
|
867
|
+
s.anchorSpan = {
|
|
868
|
+
kind: s.anchorSpan.kind,
|
|
869
|
+
lo: { col: 0, row: s.anchorSpan.lo.row },
|
|
870
|
+
hi: { col: width - 1, row: s.anchorSpan.hi.row },
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
/**
|
|
878
|
+
* Apply the selection overlay directly to the screen buffer by changing
|
|
879
|
+
* the style of every cell in the selection range. Called after the
|
|
880
|
+
* renderer produces the Frame but before the diff — the normal diffEach
|
|
881
|
+
* then picks up the restyled cells as ordinary changes, so LogUpdate
|
|
882
|
+
* stays a pure diff engine with no selection awareness.
|
|
883
|
+
*
|
|
884
|
+
* Uses a SOLID selection background (theme-provided via StylePool.
|
|
885
|
+
* setSelectionBg) that REPLACES each cell's bg while PRESERVING its fg —
|
|
886
|
+
* matches native terminal selection. Previously SGR-7 inverse (swapped
|
|
887
|
+
* fg/bg per cell), which fragmented badly over syntax-highlighted text:
|
|
888
|
+
* every distinct fg color became a different bg stripe.
|
|
889
|
+
*
|
|
890
|
+
* Uses StylePool caches so on drag the only work per cell is a Map
|
|
891
|
+
* lookup + packed-int write.
|
|
892
|
+
*/
|
|
893
|
+
export function applySelectionOverlay(
|
|
894
|
+
screen: Screen,
|
|
895
|
+
selection: SelectionState,
|
|
896
|
+
stylePool: StylePool,
|
|
897
|
+
): void {
|
|
898
|
+
const b = selectionBounds(selection)
|
|
899
|
+
if (!b) return
|
|
900
|
+
const { start, end } = b
|
|
901
|
+
const width = screen.width
|
|
902
|
+
const noSelect = screen.noSelect
|
|
903
|
+
for (let row = start.row; row <= end.row && row < screen.height; row++) {
|
|
904
|
+
const colStart = row === start.row ? start.col : 0
|
|
905
|
+
const colEnd = row === end.row ? Math.min(end.col, width - 1) : width - 1
|
|
906
|
+
const rowOff = row * width
|
|
907
|
+
for (let col = colStart; col <= colEnd; col++) {
|
|
908
|
+
const idx = rowOff + col
|
|
909
|
+
// Skip noSelect cells — gutters stay visually unchanged so it's
|
|
910
|
+
// clear they're not part of the copy. Surrounding selectable cells
|
|
911
|
+
// still highlight so the selection extent remains visible.
|
|
912
|
+
if (noSelect[idx] === 1) continue
|
|
913
|
+
const cell = cellAtIndex(screen, idx)
|
|
914
|
+
setCellStyleId(screen, col, row, stylePool.withSelectionBg(cell.styleId))
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
}
|