@xortex/xcode 3.0.1 → 3.0.2
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/QueryEngine.ts +1331 -0
- package/Task.ts +125 -0
- package/Tool.ts +792 -0
- package/assistant/sessionHistory.ts +87 -0
- package/bin/xcode +57 -25
- package/bridge/bridgeApi.ts +539 -0
- package/bridge/bridgeConfig.ts +48 -0
- package/bridge/bridgeDebug.ts +135 -0
- package/bridge/bridgeEnabled.ts +202 -0
- package/bridge/bridgeMain.ts +2999 -0
- package/bridge/bridgeMessaging.ts +461 -0
- package/bridge/bridgePermissionCallbacks.ts +43 -0
- package/bridge/bridgePointer.ts +210 -0
- package/bridge/bridgeStatusUtil.ts +163 -0
- package/bridge/bridgeUI.ts +530 -0
- package/bridge/capacityWake.ts +56 -0
- package/bridge/codeSessionApi.ts +168 -0
- package/bridge/createSession.ts +384 -0
- package/bridge/debugUtils.ts +141 -0
- package/bridge/envLessBridgeConfig.ts +165 -0
- package/bridge/flushGate.ts +71 -0
- package/bridge/inboundAttachments.ts +175 -0
- package/bridge/inboundMessages.ts +80 -0
- package/bridge/initReplBridge.ts +569 -0
- package/bridge/jwtUtils.ts +256 -0
- package/bridge/pollConfig.ts +110 -0
- package/bridge/pollConfigDefaults.ts +82 -0
- package/bridge/remoteBridgeCore.ts +1008 -0
- package/bridge/replBridge.ts +2406 -0
- package/bridge/replBridgeHandle.ts +36 -0
- package/bridge/replBridgeTransport.ts +370 -0
- package/bridge/sessionIdCompat.ts +57 -0
- package/bridge/sessionRunner.ts +550 -0
- package/bridge/trustedDevice.ts +210 -0
- package/bridge/types.ts +262 -0
- package/bridge/workSecret.ts +127 -0
- package/buddy/CompanionSprite.tsx +371 -0
- package/buddy/companion.ts +133 -0
- package/buddy/prompt.ts +36 -0
- package/buddy/sprites.ts +514 -0
- package/buddy/types.ts +148 -0
- package/buddy/useBuddyNotification.tsx +98 -0
- package/cli/exit.ts +31 -0
- package/cli/handlers/agents.ts +70 -0
- package/cli/handlers/auth.ts +330 -0
- package/cli/handlers/autoMode.ts +170 -0
- package/cli/handlers/mcp.tsx +362 -0
- package/cli/handlers/plugins.ts +878 -0
- package/cli/handlers/util.tsx +110 -0
- package/cli/ndjsonSafeStringify.ts +32 -0
- package/cli/print.ts +5594 -0
- package/cli/remoteIO.ts +255 -0
- package/cli/structuredIO.ts +859 -0
- package/cli/transports/HybridTransport.ts +282 -0
- package/cli/transports/SSETransport.ts +711 -0
- package/cli/transports/SerialBatchEventUploader.ts +275 -0
- package/cli/transports/WebSocketTransport.ts +800 -0
- package/cli/transports/WorkerStateUploader.ts +131 -0
- package/cli/transports/ccrClient.ts +998 -0
- package/cli/transports/transportUtils.ts +45 -0
- package/cli/update.ts +422 -0
- package/commands/add-dir/add-dir.tsx +126 -0
- package/commands/add-dir/index.ts +11 -0
- package/commands/add-dir/validation.ts +110 -0
- package/commands/advisor.ts +109 -0
- package/commands/agents/agents.tsx +12 -0
- package/commands/agents/index.ts +10 -0
- package/commands/ant-trace/index.js +1 -0
- package/commands/autofix-pr/index.js +1 -0
- package/commands/backfill-sessions/index.js +1 -0
- package/commands/branch/branch.ts +296 -0
- package/commands/branch/index.ts +14 -0
- package/commands/break-cache/index.js +1 -0
- package/commands/bridge/bridge.tsx +509 -0
- package/commands/bridge/index.ts +26 -0
- package/commands/bridge-kick.ts +200 -0
- package/commands/brief.ts +130 -0
- package/commands/btw/btw.tsx +243 -0
- package/commands/btw/index.ts +13 -0
- package/commands/bughunter/index.js +1 -0
- package/commands/chrome/chrome.tsx +285 -0
- package/commands/chrome/index.ts +13 -0
- package/commands/clear/caches.ts +144 -0
- package/commands/clear/clear.ts +7 -0
- package/commands/clear/conversation.ts +251 -0
- package/commands/clear/index.ts +19 -0
- package/commands/color/color.ts +93 -0
- package/commands/color/index.ts +16 -0
- package/commands/commit-push-pr.ts +158 -0
- package/commands/commit.ts +92 -0
- package/commands/compact/compact.ts +287 -0
- package/commands/compact/index.ts +15 -0
- package/commands/config/config.tsx +7 -0
- package/commands/config/index.ts +11 -0
- package/commands/context/context-noninteractive.ts +325 -0
- package/commands/context/context.tsx +64 -0
- package/commands/context/index.ts +24 -0
- package/commands/copy/copy.tsx +371 -0
- package/commands/copy/index.ts +15 -0
- package/commands/cost/cost.ts +24 -0
- package/commands/cost/index.ts +23 -0
- package/commands/createMovedToPluginCommand.ts +65 -0
- package/commands/ctx_viz/index.js +1 -0
- package/commands/debug-tool-call/index.js +1 -0
- package/commands/desktop/desktop.tsx +9 -0
- package/commands/desktop/index.ts +26 -0
- package/commands/diff/diff.tsx +9 -0
- package/commands/diff/index.ts +8 -0
- package/commands/doctor/doctor.tsx +7 -0
- package/commands/doctor/index.ts +12 -0
- package/commands/effort/effort.tsx +183 -0
- package/commands/effort/index.ts +13 -0
- package/commands/env/index.js +1 -0
- package/commands/exit/exit.tsx +33 -0
- package/commands/exit/index.ts +12 -0
- package/commands/export/export.tsx +91 -0
- package/commands/export/index.ts +11 -0
- package/commands/extra-usage/extra-usage-core.ts +118 -0
- package/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
- package/commands/extra-usage/extra-usage.tsx +17 -0
- package/commands/extra-usage/index.ts +31 -0
- package/commands/fast/fast.tsx +269 -0
- package/commands/fast/index.ts +26 -0
- package/commands/feedback/feedback.tsx +25 -0
- package/commands/feedback/index.ts +26 -0
- package/commands/files/files.ts +19 -0
- package/commands/files/index.ts +12 -0
- package/commands/good-claude/index.js +1 -0
- package/commands/heapdump/heapdump.ts +17 -0
- package/commands/heapdump/index.ts +12 -0
- package/commands/help/help.tsx +11 -0
- package/commands/help/index.ts +10 -0
- package/commands/hooks/hooks.tsx +13 -0
- package/commands/hooks/index.ts +11 -0
- package/commands/ide/ide.tsx +646 -0
- package/commands/ide/index.ts +11 -0
- package/commands/init-verifiers.ts +262 -0
- package/commands/init.ts +256 -0
- package/commands/insights.ts +3200 -0
- package/commands/install-github-app/ApiKeyStep.tsx +231 -0
- package/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
- package/commands/install-github-app/CheckGitHubStep.tsx +15 -0
- package/commands/install-github-app/ChooseRepoStep.tsx +211 -0
- package/commands/install-github-app/CreatingStep.tsx +65 -0
- package/commands/install-github-app/ErrorStep.tsx +85 -0
- package/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
- package/commands/install-github-app/InstallAppStep.tsx +94 -0
- package/commands/install-github-app/OAuthFlowStep.tsx +276 -0
- package/commands/install-github-app/SuccessStep.tsx +96 -0
- package/commands/install-github-app/WarningsStep.tsx +73 -0
- package/commands/install-github-app/index.ts +13 -0
- package/commands/install-github-app/install-github-app.tsx +587 -0
- package/commands/install-github-app/setupGitHubActions.ts +325 -0
- package/commands/install-slack-app/index.ts +12 -0
- package/commands/install-slack-app/install-slack-app.ts +30 -0
- package/commands/install.tsx +300 -0
- package/commands/issue/index.js +1 -0
- package/commands/keybindings/index.ts +13 -0
- package/commands/keybindings/keybindings.ts +53 -0
- package/commands/login/index.ts +14 -0
- package/commands/login/login.tsx +104 -0
- package/commands/logout/index.ts +10 -0
- package/commands/logout/logout.tsx +82 -0
- package/commands/mcp/addCommand.ts +280 -0
- package/commands/mcp/index.ts +12 -0
- package/commands/mcp/mcp.tsx +85 -0
- package/commands/mcp/xaaIdpCommand.ts +266 -0
- package/commands/memory/index.ts +10 -0
- package/commands/memory/memory.tsx +90 -0
- package/commands/mobile/index.ts +11 -0
- package/commands/mobile/mobile.tsx +274 -0
- package/commands/mock-limits/index.js +1 -0
- package/commands/model/index.ts +16 -0
- package/commands/model/model.tsx +297 -0
- package/commands/oauth-refresh/index.js +1 -0
- package/commands/onboarding/index.js +1 -0
- package/commands/output-style/index.ts +11 -0
- package/commands/output-style/output-style.tsx +7 -0
- package/commands/passes/index.ts +22 -0
- package/commands/passes/passes.tsx +24 -0
- package/commands/perf-issue/index.js +1 -0
- package/commands/permissions/index.ts +11 -0
- package/commands/permissions/permissions.tsx +10 -0
- package/commands/plan/index.ts +11 -0
- package/commands/plan/plan.tsx +122 -0
- package/commands/plugin/AddMarketplace.tsx +162 -0
- package/commands/plugin/BrowseMarketplace.tsx +802 -0
- package/commands/plugin/DiscoverPlugins.tsx +781 -0
- package/commands/plugin/ManageMarketplaces.tsx +838 -0
- package/commands/plugin/ManagePlugins.tsx +2215 -0
- package/commands/plugin/PluginErrors.tsx +124 -0
- package/commands/plugin/PluginOptionsDialog.tsx +357 -0
- package/commands/plugin/PluginOptionsFlow.tsx +135 -0
- package/commands/plugin/PluginSettings.tsx +1072 -0
- package/commands/plugin/PluginTrustWarning.tsx +32 -0
- package/commands/plugin/UnifiedInstalledCell.tsx +565 -0
- package/commands/plugin/ValidatePlugin.tsx +98 -0
- package/commands/plugin/index.tsx +11 -0
- package/commands/plugin/parseArgs.ts +103 -0
- package/commands/plugin/plugin.tsx +7 -0
- package/commands/plugin/pluginDetailsHelpers.tsx +117 -0
- package/commands/plugin/usePagination.ts +171 -0
- package/commands/pr_comments/index.ts +50 -0
- package/commands/privacy-settings/index.ts +14 -0
- package/commands/privacy-settings/privacy-settings.tsx +58 -0
- package/commands/rate-limit-options/index.ts +19 -0
- package/commands/rate-limit-options/rate-limit-options.tsx +210 -0
- package/commands/release-notes/index.ts +11 -0
- package/commands/release-notes/release-notes.ts +50 -0
- package/commands/reload-plugins/index.ts +18 -0
- package/commands/reload-plugins/reload-plugins.ts +61 -0
- package/commands/remote-env/index.ts +15 -0
- package/commands/remote-env/remote-env.tsx +7 -0
- package/commands/remote-setup/api.ts +182 -0
- package/commands/remote-setup/index.ts +20 -0
- package/commands/remote-setup/remote-setup.tsx +187 -0
- package/commands/rename/generateSessionName.ts +67 -0
- package/commands/rename/index.ts +12 -0
- package/commands/rename/rename.ts +87 -0
- package/commands/reset-limits/index.js +4 -0
- package/commands/resume/index.ts +12 -0
- package/commands/resume/resume.tsx +275 -0
- package/commands/review/UltrareviewOverageDialog.tsx +96 -0
- package/commands/review/reviewRemote.ts +316 -0
- package/commands/review/ultrareviewCommand.tsx +58 -0
- package/commands/review/ultrareviewEnabled.ts +14 -0
- package/commands/review.ts +57 -0
- package/commands/rewind/index.ts +13 -0
- package/commands/rewind/rewind.ts +13 -0
- package/commands/sandbox-toggle/index.ts +50 -0
- package/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
- package/commands/security-review.ts +243 -0
- package/commands/session/index.ts +16 -0
- package/commands/session/session.tsx +140 -0
- package/commands/share/index.js +1 -0
- package/commands/skills/index.ts +10 -0
- package/commands/skills/skills.tsx +8 -0
- package/commands/stats/index.ts +10 -0
- package/commands/stats/stats.tsx +7 -0
- package/commands/status/index.ts +12 -0
- package/commands/status/status.tsx +8 -0
- package/commands/statusline.tsx +24 -0
- package/commands/stickers/index.ts +11 -0
- package/commands/stickers/stickers.ts +16 -0
- package/commands/summary/index.js +1 -0
- package/commands/tag/index.ts +12 -0
- package/commands/tag/tag.tsx +215 -0
- package/commands/tasks/index.ts +11 -0
- package/commands/tasks/tasks.tsx +8 -0
- package/commands/teleport/index.js +1 -0
- package/commands/terminalSetup/index.ts +23 -0
- package/commands/terminalSetup/terminalSetup.tsx +531 -0
- package/commands/theme/index.ts +10 -0
- package/commands/theme/theme.tsx +57 -0
- package/commands/thinkback/index.ts +13 -0
- package/commands/thinkback/thinkback.tsx +554 -0
- package/commands/thinkback-play/index.ts +17 -0
- package/commands/thinkback-play/thinkback-play.ts +43 -0
- package/commands/ultraplan.tsx +471 -0
- package/commands/upgrade/index.ts +16 -0
- package/commands/upgrade/upgrade.tsx +38 -0
- package/commands/usage/index.ts +9 -0
- package/commands/usage/usage.tsx +7 -0
- package/commands/version.ts +22 -0
- package/commands/vim/index.ts +11 -0
- package/commands/vim/vim.ts +38 -0
- package/commands/voice/index.ts +20 -0
- package/commands/voice/voice.ts +150 -0
- package/commands/xingest/index.ts +11 -0
- package/commands/xingest/xingest.ts +90 -0
- package/commands/xsearch/index.ts +11 -0
- package/commands/xsearch/xsearch.ts +56 -0
- package/commands.ts +758 -0
- package/components/AgentProgressLine.tsx +136 -0
- package/components/App.tsx +56 -0
- package/components/ApproveApiKey.tsx +123 -0
- package/components/AutoModeOptInDialog.tsx +142 -0
- package/components/AutoUpdater.tsx +198 -0
- package/components/AutoUpdaterWrapper.tsx +91 -0
- package/components/AwsAuthStatusBox.tsx +82 -0
- package/components/BaseTextInput.tsx +136 -0
- package/components/BashModeProgress.tsx +56 -0
- package/components/BridgeDialog.tsx +401 -0
- package/components/BypassPermissionsModeDialog.tsx +87 -0
- package/components/ChannelDowngradeDialog.tsx +102 -0
- package/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
- package/components/ClaudeInChromeOnboarding.tsx +121 -0
- package/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
- package/components/ClickableImageRef.tsx +73 -0
- package/components/CompactSummary.tsx +118 -0
- package/components/ConfigurableShortcutHint.tsx +57 -0
- package/components/ConsoleOAuthFlow.tsx +631 -0
- package/components/ContextSuggestions.tsx +47 -0
- package/components/ContextVisualization.tsx +489 -0
- package/components/CoordinatorAgentStatus.tsx +273 -0
- package/components/CostThresholdDialog.tsx +50 -0
- package/components/CtrlOToExpand.tsx +51 -0
- package/components/CustomSelect/SelectMulti.tsx +213 -0
- package/components/CustomSelect/index.ts +3 -0
- package/components/CustomSelect/option-map.ts +50 -0
- package/components/CustomSelect/select-input-option.tsx +488 -0
- package/components/CustomSelect/select-option.tsx +68 -0
- package/components/CustomSelect/select.tsx +690 -0
- package/components/CustomSelect/use-multi-select-state.ts +414 -0
- package/components/CustomSelect/use-select-input.ts +287 -0
- package/components/CustomSelect/use-select-navigation.ts +653 -0
- package/components/CustomSelect/use-select-state.ts +157 -0
- package/components/DesktopHandoff.tsx +193 -0
- package/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
- package/components/DevBar.tsx +49 -0
- package/components/DevChannelsDialog.tsx +105 -0
- package/components/DiagnosticsDisplay.tsx +95 -0
- package/components/EffortCallout.tsx +265 -0
- package/components/EffortIndicator.ts +42 -0
- package/components/ExitFlow.tsx +48 -0
- package/components/ExportDialog.tsx +128 -0
- package/components/FallbackToolUseErrorMessage.tsx +116 -0
- package/components/FallbackToolUseRejectedMessage.tsx +16 -0
- package/components/FastIcon.tsx +46 -0
- package/components/Feedback.tsx +592 -0
- package/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
- package/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
- package/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
- package/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
- package/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
- package/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
- package/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
- package/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
- package/components/FeedbackSurvey/useSurveyState.tsx +100 -0
- package/components/FileEditToolDiff.tsx +181 -0
- package/components/FileEditToolUpdatedMessage.tsx +124 -0
- package/components/FileEditToolUseRejectedMessage.tsx +170 -0
- package/components/FilePathLink.tsx +43 -0
- package/components/FullscreenLayout.tsx +645 -0
- package/components/GlobalSearchDialog.tsx +343 -0
- package/components/HelpV2/Commands.tsx +82 -0
- package/components/HelpV2/General.tsx +23 -0
- package/components/HelpV2/HelpV2.tsx +184 -0
- package/components/HighlightedCode/Fallback.tsx +193 -0
- package/components/HighlightedCode.tsx +190 -0
- package/components/HistorySearchDialog.tsx +118 -0
- package/components/IdeAutoConnectDialog.tsx +154 -0
- package/components/IdeOnboardingDialog.tsx +167 -0
- package/components/IdeStatusIndicator.tsx +58 -0
- package/components/IdleReturnDialog.tsx +118 -0
- package/components/InterruptedByUser.tsx +15 -0
- package/components/InvalidConfigDialog.tsx +156 -0
- package/components/InvalidSettingsDialog.tsx +89 -0
- package/components/KeybindingWarnings.tsx +55 -0
- package/components/LanguagePicker.tsx +86 -0
- package/components/LogSelector.tsx +1575 -0
- package/components/LogoV2/AnimatedAsterisk.tsx +50 -0
- package/components/LogoV2/AnimatedClawd.tsx +124 -0
- package/components/LogoV2/ChannelsNotice.tsx +266 -0
- package/components/LogoV2/Clawd.tsx +14 -0
- package/components/LogoV2/CondensedLogo.tsx +161 -0
- package/components/LogoV2/EmergencyTip.tsx +58 -0
- package/components/LogoV2/Feed.tsx +112 -0
- package/components/LogoV2/FeedColumn.tsx +59 -0
- package/components/LogoV2/GuestPassesUpsell.tsx +70 -0
- package/components/LogoV2/LogoV2.tsx +543 -0
- package/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
- package/components/LogoV2/OverageCreditUpsell.tsx +166 -0
- package/components/LogoV2/VoiceModeNotice.tsx +68 -0
- package/components/LogoV2/WelcomeV2.tsx +433 -0
- package/components/LogoV2/feedConfigs.tsx +92 -0
- package/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
- package/components/MCPServerApprovalDialog.tsx +115 -0
- package/components/MCPServerDesktopImportDialog.tsx +203 -0
- package/components/MCPServerDialogCopy.tsx +15 -0
- package/components/MCPServerMultiselectDialog.tsx +133 -0
- package/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
- package/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
- package/components/Markdown.tsx +236 -0
- package/components/MarkdownTable.tsx +322 -0
- package/components/MemoryUsageIndicator.tsx +37 -0
- package/components/Message.tsx +627 -0
- package/components/MessageModel.tsx +43 -0
- package/components/MessageResponse.tsx +78 -0
- package/components/MessageRow.tsx +383 -0
- package/components/MessageSelector.tsx +831 -0
- package/components/MessageTimestamp.tsx +63 -0
- package/components/Messages.tsx +834 -0
- package/components/ModelPicker.tsx +448 -0
- package/components/NativeAutoUpdater.tsx +193 -0
- package/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
- package/components/OffscreenFreeze.tsx +44 -0
- package/components/Onboarding.tsx +244 -0
- package/components/OutputStylePicker.tsx +112 -0
- package/components/PackageManagerAutoUpdater.tsx +104 -0
- package/components/Passes/Passes.tsx +184 -0
- package/components/PrBadge.tsx +97 -0
- package/components/PressEnterToContinue.tsx +15 -0
- package/components/PromptInput/HistorySearchInput.tsx +51 -0
- package/components/PromptInput/IssueFlagBanner.tsx +12 -0
- package/components/PromptInput/Notifications.tsx +332 -0
- package/components/PromptInput/PromptInput.tsx +2350 -0
- package/components/PromptInput/PromptInputFooter.tsx +191 -0
- package/components/PromptInput/PromptInputFooterLeftSide.tsx +524 -0
- package/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
- package/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
- package/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
- package/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
- package/components/PromptInput/PromptInputStashNotice.tsx +25 -0
- package/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
- package/components/PromptInput/ShimmeredInput.tsx +143 -0
- package/components/PromptInput/VoiceIndicator.tsx +137 -0
- package/components/PromptInput/inputModes.ts +33 -0
- package/components/PromptInput/inputPaste.ts +90 -0
- package/components/PromptInput/useMaybeTruncateInput.ts +58 -0
- package/components/PromptInput/usePromptInputPlaceholder.ts +78 -0
- package/components/PromptInput/useShowFastIconHint.ts +31 -0
- package/components/PromptInput/useSwarmBanner.ts +155 -0
- package/components/PromptInput/utils.ts +60 -0
- package/components/QuickOpenDialog.tsx +244 -0
- package/components/RemoteCallout.tsx +76 -0
- package/components/RemoteEnvironmentDialog.tsx +340 -0
- package/components/ResumeTask.tsx +268 -0
- package/components/SandboxViolationExpandedView.tsx +99 -0
- package/components/ScrollKeybindingHandler.tsx +1012 -0
- package/components/SearchBox.tsx +72 -0
- package/components/SentryErrorBoundary.ts +28 -0
- package/components/SessionBackgroundHint.tsx +108 -0
- package/components/SessionPreview.tsx +194 -0
- package/components/Settings/Config.tsx +1822 -0
- package/components/Settings/Settings.tsx +137 -0
- package/components/Settings/Status.tsx +241 -0
- package/components/Settings/Usage.tsx +377 -0
- package/components/ShowInIDEPrompt.tsx +170 -0
- package/components/SkillImprovementSurvey.tsx +152 -0
- package/components/Spinner/FlashingChar.tsx +61 -0
- package/components/Spinner/GlimmerMessage.tsx +328 -0
- package/components/Spinner/ShimmerChar.tsx +36 -0
- package/components/Spinner/SpinnerAnimationRow.tsx +265 -0
- package/components/Spinner/SpinnerGlyph.tsx +80 -0
- package/components/Spinner/TeammateSpinnerLine.tsx +233 -0
- package/components/Spinner/TeammateSpinnerTree.tsx +272 -0
- package/components/Spinner/index.ts +10 -0
- package/components/Spinner/teammateSelectHint.ts +1 -0
- package/components/Spinner/useShimmerAnimation.ts +31 -0
- package/components/Spinner/useStalledAnimation.ts +75 -0
- package/components/Spinner/utils.ts +84 -0
- package/components/Spinner.tsx +562 -0
- package/components/Stats.tsx +1228 -0
- package/components/StatusLine.tsx +324 -0
- package/components/StatusNotices.tsx +55 -0
- package/components/StructuredDiff/Fallback.tsx +487 -0
- package/components/StructuredDiff/colorDiff.ts +37 -0
- package/components/StructuredDiff.tsx +190 -0
- package/components/StructuredDiffList.tsx +30 -0
- package/components/TagTabs.tsx +139 -0
- package/components/TaskListV2.tsx +378 -0
- package/components/TeammateViewHeader.tsx +82 -0
- package/components/TeleportError.tsx +189 -0
- package/components/TeleportProgress.tsx +140 -0
- package/components/TeleportRepoMismatchDialog.tsx +104 -0
- package/components/TeleportResumeWrapper.tsx +167 -0
- package/components/TeleportStash.tsx +116 -0
- package/components/TextInput.tsx +124 -0
- package/components/ThemePicker.tsx +333 -0
- package/components/ThinkingToggle.tsx +153 -0
- package/components/TokenWarning.tsx +179 -0
- package/components/ToolUseLoader.tsx +42 -0
- package/components/TrustDialog/TrustDialog.tsx +290 -0
- package/components/TrustDialog/utils.ts +245 -0
- package/components/ValidationErrorsList.tsx +148 -0
- package/components/VimTextInput.tsx +140 -0
- package/components/VirtualMessageList.tsx +1082 -0
- package/components/WorkflowMultiselectDialog.tsx +128 -0
- package/components/WorktreeExitDialog.tsx +231 -0
- package/components/agents/AgentDetail.tsx +220 -0
- package/components/agents/AgentEditor.tsx +178 -0
- package/components/agents/AgentNavigationFooter.tsx +26 -0
- package/components/agents/AgentsList.tsx +440 -0
- package/components/agents/AgentsMenu.tsx +800 -0
- package/components/agents/ColorPicker.tsx +112 -0
- package/components/agents/ModelSelector.tsx +68 -0
- package/components/agents/ToolSelector.tsx +562 -0
- package/components/agents/agentFileUtils.ts +272 -0
- package/components/agents/generateAgent.ts +197 -0
- package/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
- package/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
- package/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
- package/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
- package/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
- package/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
- package/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
- package/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
- package/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
- package/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
- package/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
- package/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
- package/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
- package/components/agents/types.ts +27 -0
- package/components/agents/utils.ts +18 -0
- package/components/agents/validateAgent.ts +109 -0
- package/components/design-system/Byline.tsx +77 -0
- package/components/design-system/Dialog.tsx +138 -0
- package/components/design-system/Divider.tsx +149 -0
- package/components/design-system/FuzzyPicker.tsx +312 -0
- package/components/design-system/KeyboardShortcutHint.tsx +81 -0
- package/components/design-system/ListItem.tsx +244 -0
- package/components/design-system/LoadingState.tsx +94 -0
- package/components/design-system/Pane.tsx +77 -0
- package/components/design-system/ProgressBar.tsx +86 -0
- package/components/design-system/Ratchet.tsx +80 -0
- package/components/design-system/StatusIcon.tsx +95 -0
- package/components/design-system/Tabs.tsx +340 -0
- package/components/design-system/ThemeProvider.tsx +170 -0
- package/components/design-system/ThemedBox.tsx +156 -0
- package/components/design-system/ThemedText.tsx +124 -0
- package/components/design-system/color.ts +30 -0
- package/components/diff/DiffDetailView.tsx +281 -0
- package/components/diff/DiffDialog.tsx +383 -0
- package/components/diff/DiffFileList.tsx +292 -0
- package/components/grove/Grove.tsx +463 -0
- package/components/hooks/HooksConfigMenu.tsx +578 -0
- package/components/hooks/PromptDialog.tsx +90 -0
- package/components/hooks/SelectEventMode.tsx +127 -0
- package/components/hooks/SelectHookMode.tsx +112 -0
- package/components/hooks/SelectMatcherMode.tsx +144 -0
- package/components/hooks/ViewHookMode.tsx +199 -0
- package/components/mcp/CapabilitiesSection.tsx +61 -0
- package/components/mcp/ElicitationDialog.tsx +1169 -0
- package/components/mcp/MCPAgentServerMenu.tsx +183 -0
- package/components/mcp/MCPListPanel.tsx +504 -0
- package/components/mcp/MCPReconnect.tsx +167 -0
- package/components/mcp/MCPRemoteServerMenu.tsx +649 -0
- package/components/mcp/MCPSettings.tsx +398 -0
- package/components/mcp/MCPStdioServerMenu.tsx +177 -0
- package/components/mcp/MCPToolDetailView.tsx +212 -0
- package/components/mcp/MCPToolListView.tsx +141 -0
- package/components/mcp/McpParsingWarnings.tsx +213 -0
- package/components/mcp/index.ts +9 -0
- package/components/mcp/utils/reconnectHelpers.tsx +49 -0
- package/components/memory/MemoryFileSelector.tsx +438 -0
- package/components/memory/MemoryUpdateNotification.tsx +45 -0
- package/components/messageActions.tsx +450 -0
- package/components/messages/AdvisorMessage.tsx +158 -0
- package/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
- package/components/messages/AssistantTextMessage.tsx +270 -0
- package/components/messages/AssistantThinkingMessage.tsx +86 -0
- package/components/messages/AssistantToolUseMessage.tsx +368 -0
- package/components/messages/AttachmentMessage.tsx +536 -0
- package/components/messages/CollapsedReadSearchContent.tsx +484 -0
- package/components/messages/CompactBoundaryMessage.tsx +18 -0
- package/components/messages/GroupedToolUseContent.tsx +58 -0
- package/components/messages/HighlightedThinkingText.tsx +162 -0
- package/components/messages/HookProgressMessage.tsx +116 -0
- package/components/messages/PlanApprovalMessage.tsx +222 -0
- package/components/messages/RateLimitMessage.tsx +161 -0
- package/components/messages/ShutdownMessage.tsx +132 -0
- package/components/messages/SystemAPIErrorMessage.tsx +141 -0
- package/components/messages/SystemTextMessage.tsx +827 -0
- package/components/messages/TaskAssignmentMessage.tsx +76 -0
- package/components/messages/UserAgentNotificationMessage.tsx +83 -0
- package/components/messages/UserBashInputMessage.tsx +58 -0
- package/components/messages/UserBashOutputMessage.tsx +54 -0
- package/components/messages/UserChannelMessage.tsx +137 -0
- package/components/messages/UserCommandMessage.tsx +108 -0
- package/components/messages/UserImageMessage.tsx +59 -0
- package/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
- package/components/messages/UserMemoryInputMessage.tsx +75 -0
- package/components/messages/UserPlanMessage.tsx +42 -0
- package/components/messages/UserPromptMessage.tsx +80 -0
- package/components/messages/UserResourceUpdateMessage.tsx +121 -0
- package/components/messages/UserTeammateMessage.tsx +206 -0
- package/components/messages/UserTextMessage.tsx +275 -0
- package/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
- package/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
- package/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
- package/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
- package/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
- package/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
- package/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
- package/components/messages/UserToolResultMessage/utils.tsx +44 -0
- package/components/messages/nullRenderingAttachments.ts +70 -0
- package/components/messages/teamMemCollapsed.tsx +140 -0
- package/components/messages/teamMemSaved.ts +19 -0
- package/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
- package/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
- package/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
- package/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
- package/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
- package/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
- package/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
- package/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
- package/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
- package/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
- package/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
- package/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
- package/components/permissions/FallbackPermissionRequest.tsx +333 -0
- package/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
- package/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
- package/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
- package/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
- package/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
- package/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
- package/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
- package/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
- package/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
- package/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
- package/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
- package/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
- package/components/permissions/PermissionDialog.tsx +72 -0
- package/components/permissions/PermissionExplanation.tsx +272 -0
- package/components/permissions/PermissionPrompt.tsx +336 -0
- package/components/permissions/PermissionRequest.tsx +217 -0
- package/components/permissions/PermissionRequestTitle.tsx +66 -0
- package/components/permissions/PermissionRuleExplanation.tsx +121 -0
- package/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
- package/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
- package/components/permissions/SandboxPermissionRequest.tsx +163 -0
- package/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
- package/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
- package/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
- package/components/permissions/WorkerBadge.tsx +49 -0
- package/components/permissions/WorkerPendingPermission.tsx +105 -0
- package/components/permissions/hooks.ts +209 -0
- package/components/permissions/rules/AddPermissionRules.tsx +180 -0
- package/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
- package/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
- package/components/permissions/rules/PermissionRuleInput.tsx +138 -0
- package/components/permissions/rules/PermissionRuleList.tsx +1179 -0
- package/components/permissions/rules/RecentDenialsTab.tsx +207 -0
- package/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
- package/components/permissions/rules/WorkspaceTab.tsx +150 -0
- package/components/permissions/shellPermissionHelpers.tsx +164 -0
- package/components/permissions/useShellPermissionFeedback.ts +148 -0
- package/components/permissions/utils.ts +25 -0
- package/components/sandbox/SandboxConfigTab.tsx +45 -0
- package/components/sandbox/SandboxDependenciesTab.tsx +120 -0
- package/components/sandbox/SandboxDoctorSection.tsx +46 -0
- package/components/sandbox/SandboxOverridesTab.tsx +193 -0
- package/components/sandbox/SandboxSettings.tsx +296 -0
- package/components/shell/ExpandShellOutputContext.tsx +36 -0
- package/components/shell/OutputLine.tsx +118 -0
- package/components/shell/ShellProgressMessage.tsx +150 -0
- package/components/shell/ShellTimeDisplay.tsx +74 -0
- package/components/skills/SkillsMenu.tsx +237 -0
- package/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
- package/components/tasks/BackgroundTask.tsx +345 -0
- package/components/tasks/BackgroundTaskStatus.tsx +429 -0
- package/components/tasks/BackgroundTasksDialog.tsx +652 -0
- package/components/tasks/DreamDetailDialog.tsx +251 -0
- package/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
- package/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
- package/components/tasks/RemoteSessionProgress.tsx +243 -0
- package/components/tasks/ShellDetailDialog.tsx +404 -0
- package/components/tasks/ShellProgress.tsx +87 -0
- package/components/tasks/renderToolActivity.tsx +33 -0
- package/components/tasks/taskStatusUtils.tsx +107 -0
- package/components/teams/TeamStatus.tsx +80 -0
- package/components/teams/TeamsDialog.tsx +715 -0
- package/components/ui/OrderedList.tsx +71 -0
- package/components/ui/OrderedListItem.tsx +45 -0
- package/components/ui/TreeSelect.tsx +397 -0
- package/components/wizard/WizardDialogLayout.tsx +65 -0
- package/components/wizard/WizardNavigationFooter.tsx +24 -0
- package/components/wizard/WizardProvider.tsx +213 -0
- package/components/wizard/index.ts +9 -0
- package/components/wizard/useWizard.ts +13 -0
- package/context.ts +189 -0
- package/cost-tracker.ts +323 -0
- package/history.ts +464 -0
- package/hooks/fileSuggestions.ts +811 -0
- package/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
- package/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
- package/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
- package/hooks/notifs/useFastModeNotification.tsx +162 -0
- package/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
- package/hooks/notifs/useInstallMessages.tsx +26 -0
- package/hooks/notifs/useLspInitializationNotification.tsx +143 -0
- package/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
- package/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
- package/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
- package/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
- package/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
- package/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
- package/hooks/notifs/useSettingsErrors.tsx +69 -0
- package/hooks/notifs/useStartupNotification.ts +41 -0
- package/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
- package/hooks/renderPlaceholder.ts +51 -0
- package/hooks/toolPermission/PermissionContext.ts +388 -0
- package/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
- package/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
- package/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
- package/hooks/toolPermission/permissionLogging.ts +238 -0
- package/hooks/unifiedSuggestions.ts +202 -0
- package/hooks/useAfterFirstRender.ts +17 -0
- package/hooks/useApiKeyVerification.ts +84 -0
- package/hooks/useArrowKeyHistory.tsx +229 -0
- package/hooks/useAssistantHistory.ts +250 -0
- package/hooks/useAwaySummary.ts +125 -0
- package/hooks/useBackgroundTaskNavigation.ts +251 -0
- package/hooks/useBlink.ts +34 -0
- package/hooks/useCanUseTool.tsx +204 -0
- package/hooks/useCancelRequest.ts +276 -0
- package/hooks/useChromeExtensionNotification.tsx +50 -0
- package/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
- package/hooks/useClipboardImageHint.ts +77 -0
- package/hooks/useCommandKeybindings.tsx +108 -0
- package/hooks/useCommandQueue.ts +15 -0
- package/hooks/useCopyOnSelect.ts +98 -0
- package/hooks/useDeferredHookMessages.ts +46 -0
- package/hooks/useDiffData.ts +110 -0
- package/hooks/useDiffInIDE.ts +379 -0
- package/hooks/useDirectConnect.ts +229 -0
- package/hooks/useDoublePress.ts +62 -0
- package/hooks/useDynamicConfig.ts +22 -0
- package/hooks/useElapsedTime.ts +37 -0
- package/hooks/useExitOnCtrlCD.ts +95 -0
- package/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
- package/hooks/useFileHistorySnapshotInit.ts +25 -0
- package/hooks/useGlobalKeybindings.tsx +249 -0
- package/hooks/useHistorySearch.ts +303 -0
- package/hooks/useIDEIntegration.tsx +70 -0
- package/hooks/useIdeAtMentioned.ts +76 -0
- package/hooks/useIdeConnectionStatus.ts +33 -0
- package/hooks/useIdeLogging.ts +41 -0
- package/hooks/useIdeSelection.ts +150 -0
- package/hooks/useInboxPoller.ts +969 -0
- package/hooks/useInputBuffer.ts +132 -0
- package/hooks/useIssueFlagBanner.ts +133 -0
- package/hooks/useLogMessages.ts +119 -0
- package/hooks/useLspPluginRecommendation.tsx +194 -0
- package/hooks/useMailboxBridge.ts +21 -0
- package/hooks/useMainLoopModel.ts +34 -0
- package/hooks/useManagePlugins.ts +304 -0
- package/hooks/useMemoryUsage.ts +39 -0
- package/hooks/useMergedClients.ts +23 -0
- package/hooks/useMergedCommands.ts +15 -0
- package/hooks/useMergedTools.ts +44 -0
- package/hooks/useMinDisplayTime.ts +35 -0
- package/hooks/useNotifyAfterTimeout.ts +65 -0
- package/hooks/useOfficialMarketplaceNotification.tsx +48 -0
- package/hooks/usePasteHandler.ts +285 -0
- package/hooks/usePluginRecommendationBase.tsx +105 -0
- package/hooks/usePrStatus.ts +106 -0
- package/hooks/usePromptSuggestion.ts +177 -0
- package/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
- package/hooks/useQueueProcessor.ts +68 -0
- package/hooks/useRemoteSession.ts +605 -0
- package/hooks/useReplBridge.tsx +723 -0
- package/hooks/useSSHSession.ts +241 -0
- package/hooks/useScheduledTasks.ts +139 -0
- package/hooks/useSearchInput.ts +364 -0
- package/hooks/useSessionBackgrounding.ts +158 -0
- package/hooks/useSettings.ts +17 -0
- package/hooks/useSettingsChange.ts +25 -0
- package/hooks/useSkillImprovementSurvey.ts +105 -0
- package/hooks/useSkillsChange.ts +62 -0
- package/hooks/useSwarmInitialization.ts +81 -0
- package/hooks/useSwarmPermissionPoller.ts +330 -0
- package/hooks/useTaskListWatcher.ts +221 -0
- package/hooks/useTasksV2.ts +250 -0
- package/hooks/useTeammateViewAutoExit.ts +63 -0
- package/hooks/useTeleportResume.tsx +85 -0
- package/hooks/useTerminalSize.ts +15 -0
- package/hooks/useTextInput.ts +529 -0
- package/hooks/useTimeout.ts +14 -0
- package/hooks/useTurnDiffs.ts +213 -0
- package/hooks/useTypeahead.tsx +1385 -0
- package/hooks/useUpdateNotification.ts +34 -0
- package/hooks/useVimInput.ts +316 -0
- package/hooks/useVirtualScroll.ts +721 -0
- package/hooks/useVoice.ts +1144 -0
- package/hooks/useVoiceEnabled.ts +25 -0
- package/hooks/useVoiceIntegration.tsx +677 -0
- package/ink/Ansi.tsx +292 -0
- package/ink/bidi.ts +139 -0
- package/ink/clearTerminal.ts +74 -0
- package/ink/colorize.ts +231 -0
- package/ink/components/AlternateScreen.tsx +80 -0
- package/ink/components/App.tsx +658 -0
- package/ink/components/AppContext.ts +21 -0
- package/ink/components/Box.tsx +214 -0
- package/ink/components/Button.tsx +192 -0
- package/ink/components/ClockContext.tsx +112 -0
- package/ink/components/CursorDeclarationContext.ts +32 -0
- package/ink/components/ErrorOverview.tsx +109 -0
- package/ink/components/Link.tsx +42 -0
- package/ink/components/Newline.tsx +39 -0
- package/ink/components/NoSelect.tsx +68 -0
- package/ink/components/RawAnsi.tsx +57 -0
- package/ink/components/ScrollBox.tsx +237 -0
- package/ink/components/Spacer.tsx +20 -0
- package/ink/components/StdinContext.ts +49 -0
- package/ink/components/TerminalFocusContext.tsx +52 -0
- package/ink/components/TerminalSizeContext.tsx +7 -0
- package/ink/components/Text.tsx +254 -0
- package/ink/constants.ts +2 -0
- package/ink/dom.ts +484 -0
- package/ink/events/click-event.ts +38 -0
- package/ink/events/dispatcher.ts +233 -0
- package/ink/events/emitter.ts +39 -0
- package/ink/events/event-handlers.ts +73 -0
- package/ink/events/event.ts +11 -0
- package/ink/events/focus-event.ts +21 -0
- package/ink/events/input-event.ts +205 -0
- package/ink/events/keyboard-event.ts +51 -0
- package/ink/events/terminal-event.ts +107 -0
- package/ink/events/terminal-focus-event.ts +19 -0
- package/ink/focus.ts +181 -0
- package/ink/frame.ts +124 -0
- package/ink/get-max-width.ts +27 -0
- package/ink/global.d.ts +26 -0
- package/ink/hit-test.ts +130 -0
- package/ink/hooks/use-animation-frame.ts +57 -0
- package/ink/hooks/use-app.ts +8 -0
- package/ink/hooks/use-declared-cursor.ts +73 -0
- package/ink/hooks/use-input.ts +92 -0
- package/ink/hooks/use-interval.ts +67 -0
- package/ink/hooks/use-search-highlight.ts +53 -0
- package/ink/hooks/use-selection.ts +104 -0
- package/ink/hooks/use-stdin.ts +8 -0
- package/ink/hooks/use-tab-status.ts +72 -0
- package/ink/hooks/use-terminal-focus.ts +16 -0
- package/ink/hooks/use-terminal-title.ts +31 -0
- package/ink/hooks/use-terminal-viewport.ts +96 -0
- package/ink/ink.tsx +1754 -0
- package/ink/instances.ts +10 -0
- package/ink/layout/engine.ts +6 -0
- package/ink/layout/geometry.ts +97 -0
- package/ink/layout/node.ts +152 -0
- package/ink/layout/yoga.ts +308 -0
- package/ink/line-width-cache.ts +24 -0
- package/ink/log-update.ts +773 -0
- package/ink/measure-element.ts +23 -0
- package/ink/measure-text.ts +47 -0
- package/ink/node-cache.ts +54 -0
- package/ink/optimizer.ts +93 -0
- package/ink/output.ts +797 -0
- package/ink/parse-keypress.ts +801 -0
- package/ink/reconciler.ts +512 -0
- package/ink/render-border.ts +231 -0
- package/ink/render-node-to-output.ts +1462 -0
- package/ink/render-to-screen.ts +231 -0
- package/ink/renderer.ts +178 -0
- package/ink/root.ts +184 -0
- package/ink/screen.ts +1486 -0
- package/ink/searchHighlight.ts +93 -0
- package/ink/selection.ts +917 -0
- package/ink/squash-text-nodes.ts +92 -0
- package/ink/stringWidth.ts +223 -0
- package/ink/styles.ts +771 -0
- package/ink/supports-hyperlinks.ts +57 -0
- package/ink/tabstops.ts +46 -0
- package/ink/terminal-focus-state.ts +47 -0
- package/ink/terminal-querier.ts +212 -0
- package/ink/terminal.ts +248 -0
- package/ink/termio/ansi.ts +75 -0
- package/ink/termio/csi.ts +319 -0
- package/ink/termio/dec.ts +60 -0
- package/ink/termio/esc.ts +67 -0
- package/ink/termio/osc.ts +493 -0
- package/ink/termio/parser.ts +394 -0
- package/ink/termio/sgr.ts +308 -0
- package/ink/termio/tokenize.ts +319 -0
- package/ink/termio/types.ts +236 -0
- package/ink/termio.ts +42 -0
- package/ink/useTerminalNotification.ts +126 -0
- package/ink/warn.ts +9 -0
- package/ink/widest-line.ts +19 -0
- package/ink/wrap-text.ts +74 -0
- package/ink/wrapAnsi.ts +20 -0
- package/inspect.js +7 -0
- package/keybindings/KeybindingContext.tsx +243 -0
- package/keybindings/KeybindingProviderSetup.tsx +308 -0
- package/keybindings/defaultBindings.ts +340 -0
- package/keybindings/loadUserBindings.ts +472 -0
- package/keybindings/match.ts +120 -0
- package/keybindings/parser.ts +203 -0
- package/keybindings/reservedShortcuts.ts +127 -0
- package/keybindings/resolver.ts +244 -0
- package/keybindings/schema.ts +236 -0
- package/keybindings/shortcutFormat.ts +63 -0
- package/keybindings/template.ts +52 -0
- package/keybindings/useKeybinding.ts +196 -0
- package/keybindings/useShortcutDisplay.ts +59 -0
- package/keybindings/validate.ts +498 -0
- package/macro.ts +24 -0
- package/migrations/migrateAutoUpdatesToSettings.ts +61 -0
- package/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
- package/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
- package/migrations/migrateFennecToOpus.ts +45 -0
- package/migrations/migrateLegacyOpusToCurrent.ts +57 -0
- package/migrations/migrateOpusToOpus1m.ts +43 -0
- package/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
- package/migrations/migrateSonnet1mToSonnet45.ts +48 -0
- package/migrations/migrateSonnet45ToSonnet46.ts +67 -0
- package/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
- package/migrations/resetProToOpusDefault.ts +51 -0
- package/package.json +29 -3
- package/patch-box.js +54 -0
- package/patch-compact.js +13 -0
- package/patch-condensed-center.js +13 -0
- package/patch-condensed-row.js +13 -0
- package/patch-condensed.js +13 -0
- package/patch-final.js +58 -0
- package/patch-input-body.js +46 -0
- package/patch-input-body2.js +35 -0
- package/patch-input-style.js +13 -0
- package/patch-input-width.js +13 -0
- package/patch-layout.js +87 -0
- package/patch-logo-row.js +12 -0
- package/patch-width.js +13 -0
- package/patch-width2.js +13 -0
- package/patch2.js +74 -0
- package/patch3.js +13 -0
- package/query.ts +1750 -0
- package/remote/RemoteSessionManager.ts +343 -0
- package/remote/SessionsWebSocket.ts +404 -0
- package/remote/remotePermissionBridge.ts +78 -0
- package/remote/sdkMessageAdapter.ts +302 -0
- package/skills/bundled/batch.ts +124 -0
- package/skills/bundled/claudeApi.ts +196 -0
- package/skills/bundled/claudeApiContent.ts +75 -0
- package/skills/bundled/claudeInChrome.ts +34 -0
- package/skills/bundled/debug.ts +103 -0
- package/skills/bundled/index.ts +79 -0
- package/skills/bundled/keybindings.ts +339 -0
- package/skills/bundled/loop.ts +92 -0
- package/skills/bundled/loremIpsum.ts +282 -0
- package/skills/bundled/remember.ts +82 -0
- package/skills/bundled/scheduleRemoteAgents.ts +447 -0
- package/skills/bundled/simplify.ts +69 -0
- package/skills/bundled/skillify.ts +197 -0
- package/skills/bundled/stuck.ts +79 -0
- package/skills/bundled/updateConfig.ts +475 -0
- package/skills/bundled/verify/SKILL.md +3 -0
- package/skills/bundled/verify/examples/cli.md +3 -0
- package/skills/bundled/verify/examples/server.md +3 -0
- package/skills/bundled/verify.ts +30 -0
- package/skills/bundled/verifyContent.ts +13 -0
- package/skills/bundledSkills.ts +220 -0
- package/skills/loadSkillsDir.ts +1086 -0
- package/skills/mcpSkillBuilders.ts +44 -0
- package/state/AppState.tsx +200 -0
- package/state/AppStateStore.ts +569 -0
- package/state/onChangeAppState.ts +171 -0
- package/state/selectors.ts +76 -0
- package/state/store.ts +34 -0
- package/state/teammateViewHelpers.ts +141 -0
- package/tasks/DreamTask/DreamTask.ts +157 -0
- package/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
- package/tasks/InProcessTeammateTask/types.ts +121 -0
- package/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
- package/tasks/LocalMainSessionTask.ts +479 -0
- package/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
- package/tasks/LocalShellTask/guards.ts +41 -0
- package/tasks/LocalShellTask/killShellTasks.ts +76 -0
- package/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
- package/tasks/pillLabel.ts +82 -0
- package/tasks/stopTask.ts +100 -0
- package/tasks/types.ts +46 -0
- package/types/command.ts +216 -0
- package/types/connectorText.ts +13 -0
- package/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
- package/types/generated/events_mono/common/v1/auth.ts +100 -0
- package/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
- package/types/generated/google/protobuf/timestamp.ts +187 -0
- package/types/hooks.ts +290 -0
- package/types/ids.ts +44 -0
- package/types/logs.ts +330 -0
- package/types/permissions.ts +441 -0
- package/types/plugin.ts +363 -0
- package/types/textInputTypes.ts +387 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schema for keybindings.json configuration.
|
|
3
|
+
* Used for validation and JSON schema generation.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { z } from 'zod/v4'
|
|
7
|
+
import { lazySchema } from '../utils/lazySchema.js'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Valid context names where keybindings can be applied.
|
|
11
|
+
*/
|
|
12
|
+
export const KEYBINDING_CONTEXTS = [
|
|
13
|
+
'Global',
|
|
14
|
+
'Chat',
|
|
15
|
+
'Autocomplete',
|
|
16
|
+
'Confirmation',
|
|
17
|
+
'Help',
|
|
18
|
+
'Transcript',
|
|
19
|
+
'HistorySearch',
|
|
20
|
+
'Task',
|
|
21
|
+
'ThemePicker',
|
|
22
|
+
'Settings',
|
|
23
|
+
'Tabs',
|
|
24
|
+
// New contexts for keybindings migration
|
|
25
|
+
'Attachments',
|
|
26
|
+
'Footer',
|
|
27
|
+
'MessageSelector',
|
|
28
|
+
'DiffDialog',
|
|
29
|
+
'ModelPicker',
|
|
30
|
+
'Select',
|
|
31
|
+
'Plugin',
|
|
32
|
+
] as const
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Human-readable descriptions for each keybinding context.
|
|
36
|
+
*/
|
|
37
|
+
export const KEYBINDING_CONTEXT_DESCRIPTIONS: Record<
|
|
38
|
+
(typeof KEYBINDING_CONTEXTS)[number],
|
|
39
|
+
string
|
|
40
|
+
> = {
|
|
41
|
+
Global: 'Active everywhere, regardless of focus',
|
|
42
|
+
Chat: 'When the chat input is focused',
|
|
43
|
+
Autocomplete: 'When autocomplete menu is visible',
|
|
44
|
+
Confirmation: 'When a confirmation/permission dialog is shown',
|
|
45
|
+
Help: 'When the help overlay is open',
|
|
46
|
+
Transcript: 'When viewing the transcript',
|
|
47
|
+
HistorySearch: 'When searching command history (ctrl+r)',
|
|
48
|
+
Task: 'When a task/agent is running in the foreground',
|
|
49
|
+
ThemePicker: 'When the theme picker is open',
|
|
50
|
+
Settings: 'When the settings menu is open',
|
|
51
|
+
Tabs: 'When tab navigation is active',
|
|
52
|
+
Attachments: 'When navigating image attachments in a select dialog',
|
|
53
|
+
Footer: 'When footer indicators are focused',
|
|
54
|
+
MessageSelector: 'When the message selector (rewind) is open',
|
|
55
|
+
DiffDialog: 'When the diff dialog is open',
|
|
56
|
+
ModelPicker: 'When the model picker is open',
|
|
57
|
+
Select: 'When a select/list component is focused',
|
|
58
|
+
Plugin: 'When the plugin dialog is open',
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* All valid keybinding action identifiers.
|
|
63
|
+
*/
|
|
64
|
+
export const KEYBINDING_ACTIONS = [
|
|
65
|
+
// App-level actions (Global context)
|
|
66
|
+
'app:interrupt',
|
|
67
|
+
'app:exit',
|
|
68
|
+
'app:toggleTodos',
|
|
69
|
+
'app:toggleTranscript',
|
|
70
|
+
'app:toggleBrief',
|
|
71
|
+
'app:toggleTeammatePreview',
|
|
72
|
+
'app:toggleTerminal',
|
|
73
|
+
'app:redraw',
|
|
74
|
+
'app:globalSearch',
|
|
75
|
+
'app:quickOpen',
|
|
76
|
+
// History navigation
|
|
77
|
+
'history:search',
|
|
78
|
+
'history:previous',
|
|
79
|
+
'history:next',
|
|
80
|
+
// Chat input actions
|
|
81
|
+
'chat:cancel',
|
|
82
|
+
'chat:killAgents',
|
|
83
|
+
'chat:cycleMode',
|
|
84
|
+
'chat:modelPicker',
|
|
85
|
+
'chat:fastMode',
|
|
86
|
+
'chat:thinkingToggle',
|
|
87
|
+
'chat:submit',
|
|
88
|
+
'chat:newline',
|
|
89
|
+
'chat:undo',
|
|
90
|
+
'chat:externalEditor',
|
|
91
|
+
'chat:stash',
|
|
92
|
+
'chat:imagePaste',
|
|
93
|
+
'chat:messageActions',
|
|
94
|
+
// Autocomplete menu actions
|
|
95
|
+
'autocomplete:accept',
|
|
96
|
+
'autocomplete:dismiss',
|
|
97
|
+
'autocomplete:previous',
|
|
98
|
+
'autocomplete:next',
|
|
99
|
+
// Confirmation dialog actions
|
|
100
|
+
'confirm:yes',
|
|
101
|
+
'confirm:no',
|
|
102
|
+
'confirm:previous',
|
|
103
|
+
'confirm:next',
|
|
104
|
+
'confirm:nextField',
|
|
105
|
+
'confirm:previousField',
|
|
106
|
+
'confirm:cycleMode',
|
|
107
|
+
'confirm:toggle',
|
|
108
|
+
'confirm:toggleExplanation',
|
|
109
|
+
// Tabs navigation actions
|
|
110
|
+
'tabs:next',
|
|
111
|
+
'tabs:previous',
|
|
112
|
+
// Transcript viewer actions
|
|
113
|
+
'transcript:toggleShowAll',
|
|
114
|
+
'transcript:exit',
|
|
115
|
+
// History search actions
|
|
116
|
+
'historySearch:next',
|
|
117
|
+
'historySearch:accept',
|
|
118
|
+
'historySearch:cancel',
|
|
119
|
+
'historySearch:execute',
|
|
120
|
+
// Task/agent actions
|
|
121
|
+
'task:background',
|
|
122
|
+
// Theme picker actions
|
|
123
|
+
'theme:toggleSyntaxHighlighting',
|
|
124
|
+
// Help menu actions
|
|
125
|
+
'help:dismiss',
|
|
126
|
+
// Attachment navigation (select dialog image attachments)
|
|
127
|
+
'attachments:next',
|
|
128
|
+
'attachments:previous',
|
|
129
|
+
'attachments:remove',
|
|
130
|
+
'attachments:exit',
|
|
131
|
+
// Footer indicator actions
|
|
132
|
+
'footer:up',
|
|
133
|
+
'footer:down',
|
|
134
|
+
'footer:next',
|
|
135
|
+
'footer:previous',
|
|
136
|
+
'footer:openSelected',
|
|
137
|
+
'footer:clearSelection',
|
|
138
|
+
'footer:close',
|
|
139
|
+
// Message selector (rewind) actions
|
|
140
|
+
'messageSelector:up',
|
|
141
|
+
'messageSelector:down',
|
|
142
|
+
'messageSelector:top',
|
|
143
|
+
'messageSelector:bottom',
|
|
144
|
+
'messageSelector:select',
|
|
145
|
+
// Diff dialog actions
|
|
146
|
+
'diff:dismiss',
|
|
147
|
+
'diff:previousSource',
|
|
148
|
+
'diff:nextSource',
|
|
149
|
+
'diff:back',
|
|
150
|
+
'diff:viewDetails',
|
|
151
|
+
'diff:previousFile',
|
|
152
|
+
'diff:nextFile',
|
|
153
|
+
// Model picker actions (ant-only)
|
|
154
|
+
'modelPicker:decreaseEffort',
|
|
155
|
+
'modelPicker:increaseEffort',
|
|
156
|
+
// Select component actions (distinct from confirm: to avoid collisions)
|
|
157
|
+
'select:next',
|
|
158
|
+
'select:previous',
|
|
159
|
+
'select:accept',
|
|
160
|
+
'select:cancel',
|
|
161
|
+
// Plugin dialog actions
|
|
162
|
+
'plugin:toggle',
|
|
163
|
+
'plugin:install',
|
|
164
|
+
// Permission dialog actions
|
|
165
|
+
'permission:toggleDebug',
|
|
166
|
+
// Settings config panel actions
|
|
167
|
+
'settings:search',
|
|
168
|
+
'settings:retry',
|
|
169
|
+
'settings:close',
|
|
170
|
+
// Voice actions
|
|
171
|
+
'voice:pushToTalk',
|
|
172
|
+
] as const
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Schema for a single keybinding block.
|
|
176
|
+
*/
|
|
177
|
+
export const KeybindingBlockSchema = lazySchema(() =>
|
|
178
|
+
z
|
|
179
|
+
.object({
|
|
180
|
+
context: z
|
|
181
|
+
.enum(KEYBINDING_CONTEXTS)
|
|
182
|
+
.describe(
|
|
183
|
+
'UI context where these bindings apply. Global bindings work everywhere.',
|
|
184
|
+
),
|
|
185
|
+
bindings: z
|
|
186
|
+
.record(
|
|
187
|
+
z
|
|
188
|
+
.string()
|
|
189
|
+
.describe('Keystroke pattern (e.g., "ctrl+k", "shift+tab")'),
|
|
190
|
+
z
|
|
191
|
+
.union([
|
|
192
|
+
z.enum(KEYBINDING_ACTIONS),
|
|
193
|
+
z
|
|
194
|
+
.string()
|
|
195
|
+
.regex(/^command:[a-zA-Z0-9:\-_]+$/)
|
|
196
|
+
.describe(
|
|
197
|
+
'Command binding (e.g., "command:help", "command:compact"). Executes the slash command as if typed.',
|
|
198
|
+
),
|
|
199
|
+
z.null().describe('Set to null to unbind a default shortcut'),
|
|
200
|
+
])
|
|
201
|
+
.describe(
|
|
202
|
+
'Action to trigger, command to invoke, or null to unbind',
|
|
203
|
+
),
|
|
204
|
+
)
|
|
205
|
+
.describe('Map of keystroke patterns to actions'),
|
|
206
|
+
})
|
|
207
|
+
.describe('A block of keybindings for a specific context'),
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Schema for the entire keybindings.json file.
|
|
212
|
+
* Uses object wrapper format with optional $schema and $docs metadata.
|
|
213
|
+
*/
|
|
214
|
+
export const KeybindingsSchema = lazySchema(() =>
|
|
215
|
+
z
|
|
216
|
+
.object({
|
|
217
|
+
$schema: z
|
|
218
|
+
.string()
|
|
219
|
+
.optional()
|
|
220
|
+
.describe('JSON Schema URL for editor validation'),
|
|
221
|
+
$docs: z.string().optional().describe('Documentation URL'),
|
|
222
|
+
bindings: z
|
|
223
|
+
.array(KeybindingBlockSchema())
|
|
224
|
+
.describe('Array of keybinding blocks by context'),
|
|
225
|
+
})
|
|
226
|
+
.describe(
|
|
227
|
+
'Claude Code keybindings configuration. Customize keyboard shortcuts by context.',
|
|
228
|
+
),
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* TypeScript types derived from the schema.
|
|
233
|
+
*/
|
|
234
|
+
export type KeybindingsSchemaType = z.infer<
|
|
235
|
+
ReturnType<typeof KeybindingsSchema>
|
|
236
|
+
>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
3
|
+
logEvent,
|
|
4
|
+
} from '../services/analytics/index.js'
|
|
5
|
+
import { loadKeybindingsSync } from './loadUserBindings.js'
|
|
6
|
+
import { getBindingDisplayText } from './resolver.js'
|
|
7
|
+
import type { KeybindingContextName } from './types.js'
|
|
8
|
+
|
|
9
|
+
// TODO(keybindings-migration): Remove fallback parameter after migration is
|
|
10
|
+
// complete and we've confirmed no 'keybinding_fallback_used' events are being
|
|
11
|
+
// logged. The fallback exists as a safety net during migration - if bindings
|
|
12
|
+
// fail to load or an action isn't found, we fall back to hardcoded values.
|
|
13
|
+
// Once stable, callers should be able to trust that getBindingDisplayText
|
|
14
|
+
// always returns a value for known actions, and we can remove this defensive
|
|
15
|
+
// pattern.
|
|
16
|
+
|
|
17
|
+
// Track which action+context pairs have already logged a fallback event
|
|
18
|
+
// to avoid duplicate events from repeated calls in non-React contexts.
|
|
19
|
+
const LOGGED_FALLBACKS = new Set<string>()
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get the display text for a configured shortcut without React hooks.
|
|
23
|
+
* Use this in non-React contexts (commands, services, etc.).
|
|
24
|
+
*
|
|
25
|
+
* This lives in its own module (not useShortcutDisplay.ts) so that
|
|
26
|
+
* non-React callers like query/stopHooks.ts don't pull React into their
|
|
27
|
+
* module graph via the sibling hook.
|
|
28
|
+
*
|
|
29
|
+
* @param action - The action name (e.g., 'app:toggleTranscript')
|
|
30
|
+
* @param context - The keybinding context (e.g., 'Global')
|
|
31
|
+
* @param fallback - Fallback text if binding not found
|
|
32
|
+
* @returns The configured shortcut display text
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* const expandShortcut = getShortcutDisplay('app:toggleTranscript', 'Global', 'ctrl+o')
|
|
36
|
+
* // Returns the user's configured binding, or 'ctrl+o' as default
|
|
37
|
+
*/
|
|
38
|
+
export function getShortcutDisplay(
|
|
39
|
+
action: string,
|
|
40
|
+
context: KeybindingContextName,
|
|
41
|
+
fallback: string,
|
|
42
|
+
): string {
|
|
43
|
+
const bindings = loadKeybindingsSync()
|
|
44
|
+
const resolved = getBindingDisplayText(action, context, bindings)
|
|
45
|
+
if (resolved === undefined) {
|
|
46
|
+
const key = `${action}:${context}`
|
|
47
|
+
if (!LOGGED_FALLBACKS.has(key)) {
|
|
48
|
+
LOGGED_FALLBACKS.add(key)
|
|
49
|
+
logEvent('tengu_keybinding_fallback_used', {
|
|
50
|
+
action:
|
|
51
|
+
action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
52
|
+
context:
|
|
53
|
+
context as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
54
|
+
fallback:
|
|
55
|
+
fallback as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
56
|
+
reason:
|
|
57
|
+
'action_not_found' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
return fallback
|
|
61
|
+
}
|
|
62
|
+
return resolved
|
|
63
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keybindings template generator.
|
|
3
|
+
* Generates a well-documented template file for ~/.claude/keybindings.json
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { jsonStringify } from '../utils/slowOperations.js'
|
|
7
|
+
import { DEFAULT_BINDINGS } from './defaultBindings.js'
|
|
8
|
+
import {
|
|
9
|
+
NON_REBINDABLE,
|
|
10
|
+
normalizeKeyForComparison,
|
|
11
|
+
} from './reservedShortcuts.js'
|
|
12
|
+
import type { KeybindingBlock } from './types.js'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Filter out reserved shortcuts that cannot be rebound.
|
|
16
|
+
* These would cause /doctor to warn, so we exclude them from the template.
|
|
17
|
+
*/
|
|
18
|
+
function filterReservedShortcuts(blocks: KeybindingBlock[]): KeybindingBlock[] {
|
|
19
|
+
const reservedKeys = new Set(
|
|
20
|
+
NON_REBINDABLE.map(r => normalizeKeyForComparison(r.key)),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
return blocks
|
|
24
|
+
.map(block => {
|
|
25
|
+
const filteredBindings: Record<string, string | null> = {}
|
|
26
|
+
for (const [key, action] of Object.entries(block.bindings)) {
|
|
27
|
+
if (!reservedKeys.has(normalizeKeyForComparison(key))) {
|
|
28
|
+
filteredBindings[key] = action
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { context: block.context, bindings: filteredBindings }
|
|
32
|
+
})
|
|
33
|
+
.filter(block => Object.keys(block.bindings).length > 0)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Generate a template keybindings.json file content.
|
|
38
|
+
* Creates a fully valid JSON file with all default bindings that users can customize.
|
|
39
|
+
*/
|
|
40
|
+
export function generateKeybindingsTemplate(): string {
|
|
41
|
+
// Filter out reserved shortcuts that cannot be rebound
|
|
42
|
+
const bindings = filterReservedShortcuts(DEFAULT_BINDINGS)
|
|
43
|
+
|
|
44
|
+
// Format as object wrapper with bindings array
|
|
45
|
+
const config = {
|
|
46
|
+
$schema: 'https://www.schemastore.org/claude-code-keybindings.json',
|
|
47
|
+
$docs: 'https://code.claude.com/docs/en/keybindings',
|
|
48
|
+
bindings,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return jsonStringify(config, null, 2) + '\n'
|
|
52
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { useCallback, useEffect } from 'react'
|
|
2
|
+
import type { InputEvent } from '../ink/events/input-event.js'
|
|
3
|
+
import { type Key, useInput } from '../ink.js'
|
|
4
|
+
import { useOptionalKeybindingContext } from './KeybindingContext.js'
|
|
5
|
+
import type { KeybindingContextName } from './types.js'
|
|
6
|
+
|
|
7
|
+
type Options = {
|
|
8
|
+
/** Which context this binding belongs to (default: 'Global') */
|
|
9
|
+
context?: KeybindingContextName
|
|
10
|
+
/** Only handle when active (like useInput's isActive) */
|
|
11
|
+
isActive?: boolean
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Ink-native hook for handling a keybinding.
|
|
16
|
+
*
|
|
17
|
+
* The handler stays in the component (React way).
|
|
18
|
+
* The binding (keystroke → action) comes from config.
|
|
19
|
+
*
|
|
20
|
+
* Supports chord sequences (e.g., "ctrl+k ctrl+s"). When a chord is started,
|
|
21
|
+
* the hook will manage the pending state automatically.
|
|
22
|
+
*
|
|
23
|
+
* Uses stopImmediatePropagation() to prevent other handlers from firing
|
|
24
|
+
* once this binding is handled.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* useKeybinding('app:toggleTodos', () => {
|
|
29
|
+
* setShowTodos(prev => !prev)
|
|
30
|
+
* }, { context: 'Global' })
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function useKeybinding(
|
|
34
|
+
action: string,
|
|
35
|
+
handler: () => void | false | Promise<void>,
|
|
36
|
+
options: Options = {},
|
|
37
|
+
): void {
|
|
38
|
+
const { context = 'Global', isActive = true } = options
|
|
39
|
+
const keybindingContext = useOptionalKeybindingContext()
|
|
40
|
+
|
|
41
|
+
// Register handler with the context for ChordInterceptor to invoke
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (!keybindingContext || !isActive) return
|
|
44
|
+
return keybindingContext.registerHandler({ action, context, handler })
|
|
45
|
+
}, [action, context, handler, keybindingContext, isActive])
|
|
46
|
+
|
|
47
|
+
const handleInput = useCallback(
|
|
48
|
+
(input: string, key: Key, event: InputEvent) => {
|
|
49
|
+
// If no keybinding context available, skip resolution
|
|
50
|
+
if (!keybindingContext) return
|
|
51
|
+
|
|
52
|
+
// Build context list: registered active contexts + this context + Global
|
|
53
|
+
// More specific contexts (registered ones) take precedence over Global
|
|
54
|
+
const contextsToCheck: KeybindingContextName[] = [
|
|
55
|
+
...keybindingContext.activeContexts,
|
|
56
|
+
context,
|
|
57
|
+
'Global',
|
|
58
|
+
]
|
|
59
|
+
// Deduplicate while preserving order (first occurrence wins for priority)
|
|
60
|
+
const uniqueContexts = [...new Set(contextsToCheck)]
|
|
61
|
+
|
|
62
|
+
const result = keybindingContext.resolve(input, key, uniqueContexts)
|
|
63
|
+
|
|
64
|
+
switch (result.type) {
|
|
65
|
+
case 'match':
|
|
66
|
+
// Chord completed (if any) - clear pending state
|
|
67
|
+
keybindingContext.setPendingChord(null)
|
|
68
|
+
if (result.action === action) {
|
|
69
|
+
if (handler() !== false) {
|
|
70
|
+
event.stopImmediatePropagation()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
break
|
|
74
|
+
case 'chord_started':
|
|
75
|
+
// User started a chord sequence - update pending state
|
|
76
|
+
keybindingContext.setPendingChord(result.pending)
|
|
77
|
+
event.stopImmediatePropagation()
|
|
78
|
+
break
|
|
79
|
+
case 'chord_cancelled':
|
|
80
|
+
// Chord was cancelled (escape or invalid key)
|
|
81
|
+
keybindingContext.setPendingChord(null)
|
|
82
|
+
break
|
|
83
|
+
case 'unbound':
|
|
84
|
+
// Explicitly unbound - clear any pending chord
|
|
85
|
+
keybindingContext.setPendingChord(null)
|
|
86
|
+
event.stopImmediatePropagation()
|
|
87
|
+
break
|
|
88
|
+
case 'none':
|
|
89
|
+
// No match - let other handlers try
|
|
90
|
+
break
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
[action, context, handler, keybindingContext],
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
useInput(handleInput, { isActive })
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Handle multiple keybindings in one hook (reduces useInput calls).
|
|
101
|
+
*
|
|
102
|
+
* Supports chord sequences. When a chord is started, the hook will
|
|
103
|
+
* manage the pending state automatically.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```tsx
|
|
107
|
+
* useKeybindings({
|
|
108
|
+
* 'chat:submit': () => handleSubmit(),
|
|
109
|
+
* 'chat:cancel': () => handleCancel(),
|
|
110
|
+
* }, { context: 'Chat' })
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export function useKeybindings(
|
|
114
|
+
// Handler returning `false` means "not consumed" — the event propagates
|
|
115
|
+
// to later useInput/useKeybindings handlers. Useful for fall-through:
|
|
116
|
+
// e.g. ScrollKeybindingHandler's scroll:line* returns false when the
|
|
117
|
+
// ScrollBox content fits (scroll is a no-op), letting a child component's
|
|
118
|
+
// handler take the wheel event for list navigation instead. Promise<void>
|
|
119
|
+
// is allowed for fire-and-forget async handlers (the `!== false` check
|
|
120
|
+
// only skips propagation for a sync `false`, not a pending Promise).
|
|
121
|
+
handlers: Record<string, () => void | false | Promise<void>>,
|
|
122
|
+
options: Options = {},
|
|
123
|
+
): void {
|
|
124
|
+
const { context = 'Global', isActive = true } = options
|
|
125
|
+
const keybindingContext = useOptionalKeybindingContext()
|
|
126
|
+
|
|
127
|
+
// Register all handlers with the context for ChordInterceptor to invoke
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
if (!keybindingContext || !isActive) return
|
|
130
|
+
|
|
131
|
+
const unregisterFns: Array<() => void> = []
|
|
132
|
+
for (const [action, handler] of Object.entries(handlers)) {
|
|
133
|
+
unregisterFns.push(
|
|
134
|
+
keybindingContext.registerHandler({ action, context, handler }),
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return () => {
|
|
139
|
+
for (const unregister of unregisterFns) {
|
|
140
|
+
unregister()
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}, [context, handlers, keybindingContext, isActive])
|
|
144
|
+
|
|
145
|
+
const handleInput = useCallback(
|
|
146
|
+
(input: string, key: Key, event: InputEvent) => {
|
|
147
|
+
// If no keybinding context available, skip resolution
|
|
148
|
+
if (!keybindingContext) return
|
|
149
|
+
|
|
150
|
+
// Build context list: registered active contexts + this context + Global
|
|
151
|
+
// More specific contexts (registered ones) take precedence over Global
|
|
152
|
+
const contextsToCheck: KeybindingContextName[] = [
|
|
153
|
+
...keybindingContext.activeContexts,
|
|
154
|
+
context,
|
|
155
|
+
'Global',
|
|
156
|
+
]
|
|
157
|
+
// Deduplicate while preserving order (first occurrence wins for priority)
|
|
158
|
+
const uniqueContexts = [...new Set(contextsToCheck)]
|
|
159
|
+
|
|
160
|
+
const result = keybindingContext.resolve(input, key, uniqueContexts)
|
|
161
|
+
|
|
162
|
+
switch (result.type) {
|
|
163
|
+
case 'match':
|
|
164
|
+
// Chord completed (if any) - clear pending state
|
|
165
|
+
keybindingContext.setPendingChord(null)
|
|
166
|
+
if (result.action in handlers) {
|
|
167
|
+
const handler = handlers[result.action]
|
|
168
|
+
if (handler && handler() !== false) {
|
|
169
|
+
event.stopImmediatePropagation()
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
break
|
|
173
|
+
case 'chord_started':
|
|
174
|
+
// User started a chord sequence - update pending state
|
|
175
|
+
keybindingContext.setPendingChord(result.pending)
|
|
176
|
+
event.stopImmediatePropagation()
|
|
177
|
+
break
|
|
178
|
+
case 'chord_cancelled':
|
|
179
|
+
// Chord was cancelled (escape or invalid key)
|
|
180
|
+
keybindingContext.setPendingChord(null)
|
|
181
|
+
break
|
|
182
|
+
case 'unbound':
|
|
183
|
+
// Explicitly unbound - clear any pending chord
|
|
184
|
+
keybindingContext.setPendingChord(null)
|
|
185
|
+
event.stopImmediatePropagation()
|
|
186
|
+
break
|
|
187
|
+
case 'none':
|
|
188
|
+
// No match - let other handlers try
|
|
189
|
+
break
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
[context, handlers, keybindingContext],
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
useInput(handleInput, { isActive })
|
|
196
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react'
|
|
2
|
+
import {
|
|
3
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
4
|
+
logEvent,
|
|
5
|
+
} from '../services/analytics/index.js'
|
|
6
|
+
import { useOptionalKeybindingContext } from './KeybindingContext.js'
|
|
7
|
+
import type { KeybindingContextName } from './types.js'
|
|
8
|
+
|
|
9
|
+
// TODO(keybindings-migration): Remove fallback parameter after migration is complete
|
|
10
|
+
// and we've confirmed no 'keybinding_fallback_used' events are being logged.
|
|
11
|
+
// The fallback exists as a safety net during migration - if bindings fail to load
|
|
12
|
+
// or an action isn't found, we fall back to hardcoded values. Once stable, callers
|
|
13
|
+
// should be able to trust that getBindingDisplayText always returns a value for
|
|
14
|
+
// known actions, and we can remove this defensive pattern.
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Hook to get the display text for a configured shortcut.
|
|
18
|
+
* Returns the configured binding or a fallback if unavailable.
|
|
19
|
+
*
|
|
20
|
+
* @param action - The action name (e.g., 'app:toggleTranscript')
|
|
21
|
+
* @param context - The keybinding context (e.g., 'Global')
|
|
22
|
+
* @param fallback - Fallback text if keybinding context unavailable
|
|
23
|
+
* @returns The configured shortcut display text
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const expandShortcut = useShortcutDisplay('app:toggleTranscript', 'Global', 'ctrl+o')
|
|
27
|
+
* // Returns the user's configured binding, or 'ctrl+o' as default
|
|
28
|
+
*/
|
|
29
|
+
export function useShortcutDisplay(
|
|
30
|
+
action: string,
|
|
31
|
+
context: KeybindingContextName,
|
|
32
|
+
fallback: string,
|
|
33
|
+
): string {
|
|
34
|
+
const keybindingContext = useOptionalKeybindingContext()
|
|
35
|
+
const resolved = keybindingContext?.getDisplayText(action, context)
|
|
36
|
+
const isFallback = resolved === undefined
|
|
37
|
+
const reason = keybindingContext ? 'action_not_found' : 'no_context'
|
|
38
|
+
|
|
39
|
+
// Log fallback usage once per mount (not on every render) to avoid
|
|
40
|
+
// flooding analytics with events from frequent re-renders.
|
|
41
|
+
const hasLoggedRef = useRef(false)
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (isFallback && !hasLoggedRef.current) {
|
|
44
|
+
hasLoggedRef.current = true
|
|
45
|
+
logEvent('tengu_keybinding_fallback_used', {
|
|
46
|
+
action:
|
|
47
|
+
action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
48
|
+
context:
|
|
49
|
+
context as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
50
|
+
fallback:
|
|
51
|
+
fallback as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
52
|
+
reason:
|
|
53
|
+
reason as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}, [isFallback, action, context, fallback, reason])
|
|
57
|
+
|
|
58
|
+
return isFallback ? fallback : resolved
|
|
59
|
+
}
|