@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,302 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
SDKAssistantMessage,
|
|
3
|
+
SDKCompactBoundaryMessage,
|
|
4
|
+
SDKMessage,
|
|
5
|
+
SDKPartialAssistantMessage,
|
|
6
|
+
SDKResultMessage,
|
|
7
|
+
SDKStatusMessage,
|
|
8
|
+
SDKSystemMessage,
|
|
9
|
+
SDKToolProgressMessage,
|
|
10
|
+
} from '../entrypoints/agentSdkTypes.js'
|
|
11
|
+
import type {
|
|
12
|
+
AssistantMessage,
|
|
13
|
+
Message,
|
|
14
|
+
StreamEvent,
|
|
15
|
+
SystemMessage,
|
|
16
|
+
} from '../types/message.js'
|
|
17
|
+
import { logForDebugging } from '../utils/debug.js'
|
|
18
|
+
import { fromSDKCompactMetadata } from '../utils/messages/mappers.js'
|
|
19
|
+
import { createUserMessage } from '../utils/messages.js'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Converts SDKMessage from CCR to REPL Message types.
|
|
23
|
+
*
|
|
24
|
+
* The CCR backend sends SDK-format messages via WebSocket. The REPL expects
|
|
25
|
+
* internal Message types for rendering. This adapter bridges the two.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Convert an SDKAssistantMessage to an AssistantMessage
|
|
30
|
+
*/
|
|
31
|
+
function convertAssistantMessage(msg: SDKAssistantMessage): AssistantMessage {
|
|
32
|
+
return {
|
|
33
|
+
type: 'assistant',
|
|
34
|
+
message: msg.message,
|
|
35
|
+
uuid: msg.uuid,
|
|
36
|
+
requestId: undefined,
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
error: msg.error,
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Convert an SDKPartialAssistantMessage (streaming) to a StreamEvent
|
|
44
|
+
*/
|
|
45
|
+
function convertStreamEvent(msg: SDKPartialAssistantMessage): StreamEvent {
|
|
46
|
+
return {
|
|
47
|
+
type: 'stream_event',
|
|
48
|
+
event: msg.event,
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Convert an SDKResultMessage to a SystemMessage
|
|
54
|
+
*/
|
|
55
|
+
function convertResultMessage(msg: SDKResultMessage): SystemMessage {
|
|
56
|
+
const isError = msg.subtype !== 'success'
|
|
57
|
+
const content = isError
|
|
58
|
+
? msg.errors?.join(', ') || 'Unknown error'
|
|
59
|
+
: 'Session completed successfully'
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
type: 'system',
|
|
63
|
+
subtype: 'informational',
|
|
64
|
+
content,
|
|
65
|
+
level: isError ? 'warning' : 'info',
|
|
66
|
+
uuid: msg.uuid,
|
|
67
|
+
timestamp: new Date().toISOString(),
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Convert an SDKSystemMessage (init) to a SystemMessage
|
|
73
|
+
*/
|
|
74
|
+
function convertInitMessage(msg: SDKSystemMessage): SystemMessage {
|
|
75
|
+
return {
|
|
76
|
+
type: 'system',
|
|
77
|
+
subtype: 'informational',
|
|
78
|
+
content: `Remote session initialized (model: ${msg.model})`,
|
|
79
|
+
level: 'info',
|
|
80
|
+
uuid: msg.uuid,
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Convert an SDKStatusMessage to a SystemMessage
|
|
87
|
+
*/
|
|
88
|
+
function convertStatusMessage(msg: SDKStatusMessage): SystemMessage | null {
|
|
89
|
+
if (!msg.status) {
|
|
90
|
+
return null
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
type: 'system',
|
|
95
|
+
subtype: 'informational',
|
|
96
|
+
content:
|
|
97
|
+
msg.status === 'compacting'
|
|
98
|
+
? 'Compacting conversation…'
|
|
99
|
+
: `Status: ${msg.status}`,
|
|
100
|
+
level: 'info',
|
|
101
|
+
uuid: msg.uuid,
|
|
102
|
+
timestamp: new Date().toISOString(),
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Convert an SDKToolProgressMessage to a SystemMessage.
|
|
108
|
+
* We use a system message instead of ProgressMessage since the Progress type
|
|
109
|
+
* is a complex union that requires tool-specific data we don't have from CCR.
|
|
110
|
+
*/
|
|
111
|
+
function convertToolProgressMessage(
|
|
112
|
+
msg: SDKToolProgressMessage,
|
|
113
|
+
): SystemMessage {
|
|
114
|
+
return {
|
|
115
|
+
type: 'system',
|
|
116
|
+
subtype: 'informational',
|
|
117
|
+
content: `Tool ${msg.tool_name} running for ${msg.elapsed_time_seconds}s…`,
|
|
118
|
+
level: 'info',
|
|
119
|
+
uuid: msg.uuid,
|
|
120
|
+
timestamp: new Date().toISOString(),
|
|
121
|
+
toolUseID: msg.tool_use_id,
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Convert an SDKCompactBoundaryMessage to a SystemMessage
|
|
127
|
+
*/
|
|
128
|
+
function convertCompactBoundaryMessage(
|
|
129
|
+
msg: SDKCompactBoundaryMessage,
|
|
130
|
+
): SystemMessage {
|
|
131
|
+
return {
|
|
132
|
+
type: 'system',
|
|
133
|
+
subtype: 'compact_boundary',
|
|
134
|
+
content: 'Conversation compacted',
|
|
135
|
+
level: 'info',
|
|
136
|
+
uuid: msg.uuid,
|
|
137
|
+
timestamp: new Date().toISOString(),
|
|
138
|
+
compactMetadata: fromSDKCompactMetadata(msg.compact_metadata),
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Result of converting an SDKMessage
|
|
144
|
+
*/
|
|
145
|
+
export type ConvertedMessage =
|
|
146
|
+
| { type: 'message'; message: Message }
|
|
147
|
+
| { type: 'stream_event'; event: StreamEvent }
|
|
148
|
+
| { type: 'ignored' }
|
|
149
|
+
|
|
150
|
+
type ConvertOptions = {
|
|
151
|
+
/** Convert user messages containing tool_result content blocks into UserMessages.
|
|
152
|
+
* Used by direct connect mode where tool results come from the remote server
|
|
153
|
+
* and need to be rendered locally. CCR mode ignores user messages since they
|
|
154
|
+
* are handled differently. */
|
|
155
|
+
convertToolResults?: boolean
|
|
156
|
+
/**
|
|
157
|
+
* Convert user text messages into UserMessages for display. Used when
|
|
158
|
+
* converting historical events where user-typed messages need to be shown.
|
|
159
|
+
* In live WS mode these are already added locally by the REPL so they're
|
|
160
|
+
* ignored by default.
|
|
161
|
+
*/
|
|
162
|
+
convertUserTextMessages?: boolean
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Convert an SDKMessage to REPL message format
|
|
167
|
+
*/
|
|
168
|
+
export function convertSDKMessage(
|
|
169
|
+
msg: SDKMessage,
|
|
170
|
+
opts?: ConvertOptions,
|
|
171
|
+
): ConvertedMessage {
|
|
172
|
+
switch (msg.type) {
|
|
173
|
+
case 'assistant':
|
|
174
|
+
return { type: 'message', message: convertAssistantMessage(msg) }
|
|
175
|
+
|
|
176
|
+
case 'user': {
|
|
177
|
+
const content = msg.message?.content
|
|
178
|
+
// Tool result messages from the remote server need to be converted so
|
|
179
|
+
// they render and collapse like local tool results. Detect via content
|
|
180
|
+
// shape (tool_result blocks) — parent_tool_use_id is NOT reliable: the
|
|
181
|
+
// agent-side normalizeMessage() hardcodes it to null for top-level
|
|
182
|
+
// tool results, so it can't distinguish tool results from prompt echoes.
|
|
183
|
+
const isToolResult =
|
|
184
|
+
Array.isArray(content) && content.some(b => b.type === 'tool_result')
|
|
185
|
+
if (opts?.convertToolResults && isToolResult) {
|
|
186
|
+
return {
|
|
187
|
+
type: 'message',
|
|
188
|
+
message: createUserMessage({
|
|
189
|
+
content,
|
|
190
|
+
toolUseResult: msg.tool_use_result,
|
|
191
|
+
uuid: msg.uuid,
|
|
192
|
+
timestamp: msg.timestamp,
|
|
193
|
+
}),
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// When converting historical events, user-typed messages need to be
|
|
197
|
+
// rendered (they weren't added locally by the REPL). Skip tool_results
|
|
198
|
+
// here — already handled above.
|
|
199
|
+
if (opts?.convertUserTextMessages && !isToolResult) {
|
|
200
|
+
if (typeof content === 'string' || Array.isArray(content)) {
|
|
201
|
+
return {
|
|
202
|
+
type: 'message',
|
|
203
|
+
message: createUserMessage({
|
|
204
|
+
content,
|
|
205
|
+
toolUseResult: msg.tool_use_result,
|
|
206
|
+
uuid: msg.uuid,
|
|
207
|
+
timestamp: msg.timestamp,
|
|
208
|
+
}),
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// User-typed messages (string content) are already added locally by REPL.
|
|
213
|
+
// In CCR mode, all user messages are ignored (tool results handled differently).
|
|
214
|
+
return { type: 'ignored' }
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
case 'stream_event':
|
|
218
|
+
return { type: 'stream_event', event: convertStreamEvent(msg) }
|
|
219
|
+
|
|
220
|
+
case 'result':
|
|
221
|
+
// Only show result messages for errors. Success results are noise
|
|
222
|
+
// in multi-turn sessions (isLoading=false is sufficient signal).
|
|
223
|
+
if (msg.subtype !== 'success') {
|
|
224
|
+
return { type: 'message', message: convertResultMessage(msg) }
|
|
225
|
+
}
|
|
226
|
+
return { type: 'ignored' }
|
|
227
|
+
|
|
228
|
+
case 'system':
|
|
229
|
+
if (msg.subtype === 'init') {
|
|
230
|
+
return { type: 'message', message: convertInitMessage(msg) }
|
|
231
|
+
}
|
|
232
|
+
if (msg.subtype === 'status') {
|
|
233
|
+
const statusMsg = convertStatusMessage(msg)
|
|
234
|
+
return statusMsg
|
|
235
|
+
? { type: 'message', message: statusMsg }
|
|
236
|
+
: { type: 'ignored' }
|
|
237
|
+
}
|
|
238
|
+
if (msg.subtype === 'compact_boundary') {
|
|
239
|
+
return {
|
|
240
|
+
type: 'message',
|
|
241
|
+
message: convertCompactBoundaryMessage(msg),
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// hook_response and other subtypes
|
|
245
|
+
logForDebugging(
|
|
246
|
+
`[sdkMessageAdapter] Ignoring system message subtype: ${msg.subtype}`,
|
|
247
|
+
)
|
|
248
|
+
return { type: 'ignored' }
|
|
249
|
+
|
|
250
|
+
case 'tool_progress':
|
|
251
|
+
return { type: 'message', message: convertToolProgressMessage(msg) }
|
|
252
|
+
|
|
253
|
+
case 'auth_status':
|
|
254
|
+
// Auth status is handled separately, not converted to a display message
|
|
255
|
+
logForDebugging('[sdkMessageAdapter] Ignoring auth_status message')
|
|
256
|
+
return { type: 'ignored' }
|
|
257
|
+
|
|
258
|
+
case 'tool_use_summary':
|
|
259
|
+
// Tool use summaries are SDK-only events, not displayed in REPL
|
|
260
|
+
logForDebugging('[sdkMessageAdapter] Ignoring tool_use_summary message')
|
|
261
|
+
return { type: 'ignored' }
|
|
262
|
+
|
|
263
|
+
case 'rate_limit_event':
|
|
264
|
+
// Rate limit events are SDK-only events, not displayed in REPL
|
|
265
|
+
logForDebugging('[sdkMessageAdapter] Ignoring rate_limit_event message')
|
|
266
|
+
return { type: 'ignored' }
|
|
267
|
+
|
|
268
|
+
default: {
|
|
269
|
+
// Gracefully ignore unknown message types. The backend may send new
|
|
270
|
+
// types before the client is updated; logging helps with debugging
|
|
271
|
+
// without crashing or losing the session.
|
|
272
|
+
logForDebugging(
|
|
273
|
+
`[sdkMessageAdapter] Unknown message type: ${(msg as { type: string }).type}`,
|
|
274
|
+
)
|
|
275
|
+
return { type: 'ignored' }
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Check if an SDKMessage indicates the session has ended
|
|
282
|
+
*/
|
|
283
|
+
export function isSessionEndMessage(msg: SDKMessage): boolean {
|
|
284
|
+
return msg.type === 'result'
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Check if an SDKResultMessage indicates success
|
|
289
|
+
*/
|
|
290
|
+
export function isSuccessResult(msg: SDKResultMessage): boolean {
|
|
291
|
+
return msg.subtype === 'success'
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Extract the result text from a successful SDKResultMessage
|
|
296
|
+
*/
|
|
297
|
+
export function getResultText(msg: SDKResultMessage): string | null {
|
|
298
|
+
if (msg.subtype === 'success') {
|
|
299
|
+
return msg.result
|
|
300
|
+
}
|
|
301
|
+
return null
|
|
302
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { AGENT_TOOL_NAME } from '../../tools/AgentTool/constants.js'
|
|
2
|
+
import { ASK_USER_QUESTION_TOOL_NAME } from '../../tools/AskUserQuestionTool/prompt.js'
|
|
3
|
+
import { ENTER_PLAN_MODE_TOOL_NAME } from '../../tools/EnterPlanModeTool/constants.js'
|
|
4
|
+
import { EXIT_PLAN_MODE_TOOL_NAME } from '../../tools/ExitPlanModeTool/constants.js'
|
|
5
|
+
import { SKILL_TOOL_NAME } from '../../tools/SkillTool/constants.js'
|
|
6
|
+
import { getIsGit } from '../../utils/git.js'
|
|
7
|
+
import { registerBundledSkill } from '../bundledSkills.js'
|
|
8
|
+
|
|
9
|
+
const MIN_AGENTS = 5
|
|
10
|
+
const MAX_AGENTS = 30
|
|
11
|
+
|
|
12
|
+
const WORKER_INSTRUCTIONS = `After you finish implementing the change:
|
|
13
|
+
1. **Simplify** — Invoke the \`${SKILL_TOOL_NAME}\` tool with \`skill: "simplify"\` to review and clean up your changes.
|
|
14
|
+
2. **Run unit tests** — Run the project's test suite (check for package.json scripts, Makefile targets, or common commands like \`npm test\`, \`bun test\`, \`pytest\`, \`go test\`). If tests fail, fix them.
|
|
15
|
+
3. **Test end-to-end** — Follow the e2e test recipe from the coordinator's prompt (below). If the recipe says to skip e2e for this unit, skip it.
|
|
16
|
+
4. **Commit and push** — Commit all changes with a clear message, push the branch, and create a PR with \`gh pr create\`. Use a descriptive title. If \`gh\` is not available or the push fails, note it in your final message.
|
|
17
|
+
5. **Report** — End with a single line: \`PR: <url>\` so the coordinator can track it. If no PR was created, end with \`PR: none — <reason>\`.`
|
|
18
|
+
|
|
19
|
+
function buildPrompt(instruction: string): string {
|
|
20
|
+
return `# Batch: Parallel Work Orchestration
|
|
21
|
+
|
|
22
|
+
You are orchestrating a large, parallelizable change across this codebase.
|
|
23
|
+
|
|
24
|
+
## User Instruction
|
|
25
|
+
|
|
26
|
+
${instruction}
|
|
27
|
+
|
|
28
|
+
## Phase 1: Research and Plan (Plan Mode)
|
|
29
|
+
|
|
30
|
+
Call the \`${ENTER_PLAN_MODE_TOOL_NAME}\` tool now to enter plan mode, then:
|
|
31
|
+
|
|
32
|
+
1. **Understand the scope.** Launch one or more subagents (in the foreground — you need their results) to deeply research what this instruction touches. Find all the files, patterns, and call sites that need to change. Understand the existing conventions so the migration is consistent.
|
|
33
|
+
|
|
34
|
+
2. **Decompose into independent units.** Break the work into ${MIN_AGENTS}–${MAX_AGENTS} self-contained units. Each unit must:
|
|
35
|
+
- Be independently implementable in an isolated git worktree (no shared state with sibling units)
|
|
36
|
+
- Be mergeable on its own without depending on another unit's PR landing first
|
|
37
|
+
- Be roughly uniform in size (split large units, merge trivial ones)
|
|
38
|
+
|
|
39
|
+
Scale the count to the actual work: few files → closer to ${MIN_AGENTS}; hundreds of files → closer to ${MAX_AGENTS}. Prefer per-directory or per-module slicing over arbitrary file lists.
|
|
40
|
+
|
|
41
|
+
3. **Determine the e2e test recipe.** Figure out how a worker can verify its change actually works end-to-end — not just that unit tests pass. Look for:
|
|
42
|
+
- A \`claude-in-chrome\` skill or browser-automation tool (for UI changes: click through the affected flow, screenshot the result)
|
|
43
|
+
- A \`tmux\` or CLI-verifier skill (for CLI changes: launch the app interactively, exercise the changed behavior)
|
|
44
|
+
- A dev-server + curl pattern (for API changes: start the server, hit the affected endpoints)
|
|
45
|
+
- An existing e2e/integration test suite the worker can run
|
|
46
|
+
|
|
47
|
+
If you cannot find a concrete e2e path, use the \`${ASK_USER_QUESTION_TOOL_NAME}\` tool to ask the user how to verify this change end-to-end. Offer 2–3 specific options based on what you found (e.g., "Screenshot via chrome extension", "Run \`bun run dev\` and curl the endpoint", "No e2e — unit tests are sufficient"). Do not skip this — the workers cannot ask the user themselves.
|
|
48
|
+
|
|
49
|
+
Write the recipe as a short, concrete set of steps that a worker can execute autonomously. Include any setup (start a dev server, build first) and the exact command/interaction to verify.
|
|
50
|
+
|
|
51
|
+
4. **Write the plan.** In your plan file, include:
|
|
52
|
+
- A summary of what you found during research
|
|
53
|
+
- A numbered list of work units — for each: a short title, the list of files/directories it covers, and a one-line description of the change
|
|
54
|
+
- The e2e test recipe (or "skip e2e because …" if the user chose that)
|
|
55
|
+
- The exact worker instructions you will give each agent (the shared template)
|
|
56
|
+
|
|
57
|
+
5. Call \`${EXIT_PLAN_MODE_TOOL_NAME}\` to present the plan for approval.
|
|
58
|
+
|
|
59
|
+
## Phase 2: Spawn Workers (After Plan Approval)
|
|
60
|
+
|
|
61
|
+
Once the plan is approved, spawn one background agent per work unit using the \`${AGENT_TOOL_NAME}\` tool. **All agents must use \`isolation: "worktree"\` and \`run_in_background: true\`.** Launch them all in a single message block so they run in parallel.
|
|
62
|
+
|
|
63
|
+
For each agent, the prompt must be fully self-contained. Include:
|
|
64
|
+
- The overall goal (the user's instruction)
|
|
65
|
+
- This unit's specific task (title, file list, change description — copied verbatim from your plan)
|
|
66
|
+
- Any codebase conventions you discovered that the worker needs to follow
|
|
67
|
+
- The e2e test recipe from your plan (or "skip e2e because …")
|
|
68
|
+
- The worker instructions below, copied verbatim:
|
|
69
|
+
|
|
70
|
+
\`\`\`
|
|
71
|
+
${WORKER_INSTRUCTIONS}
|
|
72
|
+
\`\`\`
|
|
73
|
+
|
|
74
|
+
Use \`subagent_type: "general-purpose"\` unless a more specific agent type fits.
|
|
75
|
+
|
|
76
|
+
## Phase 3: Track Progress
|
|
77
|
+
|
|
78
|
+
After launching all workers, render an initial status table:
|
|
79
|
+
|
|
80
|
+
| # | Unit | Status | PR |
|
|
81
|
+
|---|------|--------|----|
|
|
82
|
+
| 1 | <title> | running | — |
|
|
83
|
+
| 2 | <title> | running | — |
|
|
84
|
+
|
|
85
|
+
As background-agent completion notifications arrive, parse the \`PR: <url>\` line from each agent's result and re-render the table with updated status (\`done\` / \`failed\`) and PR links. Keep a brief failure note for any agent that did not produce a PR.
|
|
86
|
+
|
|
87
|
+
When all agents have reported, render the final table and a one-line summary (e.g., "22/24 units landed as PRs").
|
|
88
|
+
`
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const NOT_A_GIT_REPO_MESSAGE = `This is not a git repository. The \`/batch\` command requires a git repo because it spawns agents in isolated git worktrees and creates PRs from each. Initialize a repo first, or run this from inside an existing one.`
|
|
92
|
+
|
|
93
|
+
const MISSING_INSTRUCTION_MESSAGE = `Provide an instruction describing the batch change you want to make.
|
|
94
|
+
|
|
95
|
+
Examples:
|
|
96
|
+
/batch migrate from react to vue
|
|
97
|
+
/batch replace all uses of lodash with native equivalents
|
|
98
|
+
/batch add type annotations to all untyped function parameters`
|
|
99
|
+
|
|
100
|
+
export function registerBatchSkill(): void {
|
|
101
|
+
registerBundledSkill({
|
|
102
|
+
name: 'batch',
|
|
103
|
+
description:
|
|
104
|
+
'Research and plan a large-scale change, then execute it in parallel across 5–30 isolated worktree agents that each open a PR.',
|
|
105
|
+
whenToUse:
|
|
106
|
+
'Use when the user wants to make a sweeping, mechanical change across many files (migrations, refactors, bulk renames) that can be decomposed into independent parallel units.',
|
|
107
|
+
argumentHint: '<instruction>',
|
|
108
|
+
userInvocable: true,
|
|
109
|
+
disableModelInvocation: true,
|
|
110
|
+
async getPromptForCommand(args) {
|
|
111
|
+
const instruction = args.trim()
|
|
112
|
+
if (!instruction) {
|
|
113
|
+
return [{ type: 'text', text: MISSING_INSTRUCTION_MESSAGE }]
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const isGit = await getIsGit()
|
|
117
|
+
if (!isGit) {
|
|
118
|
+
return [{ type: 'text', text: NOT_A_GIT_REPO_MESSAGE }]
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return [{ type: 'text', text: buildPrompt(instruction) }]
|
|
122
|
+
},
|
|
123
|
+
})
|
|
124
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { readdir } from 'fs/promises'
|
|
2
|
+
import { getCwd } from '../../utils/cwd.js'
|
|
3
|
+
import { registerBundledSkill } from '../bundledSkills.js'
|
|
4
|
+
|
|
5
|
+
// claudeApiContent.js bundles 247KB of .md strings. Lazy-load inside
|
|
6
|
+
// getPromptForCommand so they only enter memory when /claude-api is invoked.
|
|
7
|
+
type SkillContent = typeof import('./claudeApiContent.js')
|
|
8
|
+
|
|
9
|
+
type DetectedLanguage =
|
|
10
|
+
| 'python'
|
|
11
|
+
| 'typescript'
|
|
12
|
+
| 'java'
|
|
13
|
+
| 'go'
|
|
14
|
+
| 'ruby'
|
|
15
|
+
| 'csharp'
|
|
16
|
+
| 'php'
|
|
17
|
+
| 'curl'
|
|
18
|
+
|
|
19
|
+
const LANGUAGE_INDICATORS: Record<DetectedLanguage, string[]> = {
|
|
20
|
+
python: ['.py', 'requirements.txt', 'pyproject.toml', 'setup.py', 'Pipfile'],
|
|
21
|
+
typescript: ['.ts', '.tsx', 'tsconfig.json', 'package.json'],
|
|
22
|
+
java: ['.java', 'pom.xml', 'build.gradle'],
|
|
23
|
+
go: ['.go', 'go.mod'],
|
|
24
|
+
ruby: ['.rb', 'Gemfile'],
|
|
25
|
+
csharp: ['.cs', '.csproj'],
|
|
26
|
+
php: ['.php', 'composer.json'],
|
|
27
|
+
curl: [],
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function detectLanguage(): Promise<DetectedLanguage | null> {
|
|
31
|
+
const cwd = getCwd()
|
|
32
|
+
let entries: string[]
|
|
33
|
+
try {
|
|
34
|
+
entries = await readdir(cwd)
|
|
35
|
+
} catch {
|
|
36
|
+
return null
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
for (const [lang, indicators] of Object.entries(LANGUAGE_INDICATORS) as [
|
|
40
|
+
DetectedLanguage,
|
|
41
|
+
string[],
|
|
42
|
+
][]) {
|
|
43
|
+
if (indicators.length === 0) continue
|
|
44
|
+
for (const indicator of indicators) {
|
|
45
|
+
if (indicator.startsWith('.')) {
|
|
46
|
+
if (entries.some(e => e.endsWith(indicator))) return lang
|
|
47
|
+
} else {
|
|
48
|
+
if (entries.includes(indicator)) return lang
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return null
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function getFilesForLanguage(
|
|
56
|
+
lang: DetectedLanguage,
|
|
57
|
+
content: SkillContent,
|
|
58
|
+
): string[] {
|
|
59
|
+
return Object.keys(content.SKILL_FILES).filter(
|
|
60
|
+
path => path.startsWith(`${lang}/`) || path.startsWith('shared/'),
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function processContent(md: string, content: SkillContent): string {
|
|
65
|
+
// Strip HTML comments. Loop to handle nested comments.
|
|
66
|
+
let out = md
|
|
67
|
+
let prev
|
|
68
|
+
do {
|
|
69
|
+
prev = out
|
|
70
|
+
out = out.replace(/<!--[\s\S]*?-->\n?/g, '')
|
|
71
|
+
} while (out !== prev)
|
|
72
|
+
|
|
73
|
+
out = out.replace(
|
|
74
|
+
/\{\{(\w+)\}\}/g,
|
|
75
|
+
(match, key: string) =>
|
|
76
|
+
(content.SKILL_MODEL_VARS as Record<string, string>)[key] ?? match,
|
|
77
|
+
)
|
|
78
|
+
return out
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function buildInlineReference(
|
|
82
|
+
filePaths: string[],
|
|
83
|
+
content: SkillContent,
|
|
84
|
+
): string {
|
|
85
|
+
const sections: string[] = []
|
|
86
|
+
for (const filePath of filePaths.sort()) {
|
|
87
|
+
const md = content.SKILL_FILES[filePath]
|
|
88
|
+
if (!md) continue
|
|
89
|
+
sections.push(
|
|
90
|
+
`<doc path="${filePath}">\n${processContent(md, content).trim()}\n</doc>`,
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
return sections.join('\n\n')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const INLINE_READING_GUIDE = `## Reference Documentation
|
|
97
|
+
|
|
98
|
+
The relevant documentation for your detected language is included below in \`<doc>\` tags. Each tag has a \`path\` attribute showing its original file path. Use this to find the right section:
|
|
99
|
+
|
|
100
|
+
### Quick Task Reference
|
|
101
|
+
|
|
102
|
+
**Single text classification/summarization/extraction/Q&A:**
|
|
103
|
+
→ Refer to \`{lang}/claude-api/README.md\`
|
|
104
|
+
|
|
105
|
+
**Chat UI or real-time response display:**
|
|
106
|
+
→ Refer to \`{lang}/claude-api/README.md\` + \`{lang}/claude-api/streaming.md\`
|
|
107
|
+
|
|
108
|
+
**Long-running conversations (may exceed context window):**
|
|
109
|
+
→ Refer to \`{lang}/claude-api/README.md\` — see Compaction section
|
|
110
|
+
|
|
111
|
+
**Prompt caching / optimize caching / "why is my cache hit rate low":**
|
|
112
|
+
→ Refer to \`shared/prompt-caching.md\` + \`{lang}/claude-api/README.md\` (Prompt Caching section)
|
|
113
|
+
|
|
114
|
+
**Function calling / tool use / agents:**
|
|
115
|
+
→ Refer to \`{lang}/claude-api/README.md\` + \`shared/tool-use-concepts.md\` + \`{lang}/claude-api/tool-use.md\`
|
|
116
|
+
|
|
117
|
+
**Batch processing (non-latency-sensitive):**
|
|
118
|
+
→ Refer to \`{lang}/claude-api/README.md\` + \`{lang}/claude-api/batches.md\`
|
|
119
|
+
|
|
120
|
+
**File uploads across multiple requests:**
|
|
121
|
+
→ Refer to \`{lang}/claude-api/README.md\` + \`{lang}/claude-api/files-api.md\`
|
|
122
|
+
|
|
123
|
+
**Agent with built-in tools (file/web/terminal) (Python & TypeScript only):**
|
|
124
|
+
→ Refer to \`{lang}/agent-sdk/README.md\` + \`{lang}/agent-sdk/patterns.md\`
|
|
125
|
+
|
|
126
|
+
**Error handling:**
|
|
127
|
+
→ Refer to \`shared/error-codes.md\`
|
|
128
|
+
|
|
129
|
+
**Latest docs via WebFetch:**
|
|
130
|
+
→ Refer to \`shared/live-sources.md\` for URLs`
|
|
131
|
+
|
|
132
|
+
function buildPrompt(
|
|
133
|
+
lang: DetectedLanguage | null,
|
|
134
|
+
args: string,
|
|
135
|
+
content: SkillContent,
|
|
136
|
+
): string {
|
|
137
|
+
// Take the SKILL.md content up to the "Reading Guide" section
|
|
138
|
+
const cleanPrompt = processContent(content.SKILL_PROMPT, content)
|
|
139
|
+
const readingGuideIdx = cleanPrompt.indexOf('## Reading Guide')
|
|
140
|
+
const basePrompt =
|
|
141
|
+
readingGuideIdx !== -1
|
|
142
|
+
? cleanPrompt.slice(0, readingGuideIdx).trimEnd()
|
|
143
|
+
: cleanPrompt
|
|
144
|
+
|
|
145
|
+
const parts: string[] = [basePrompt]
|
|
146
|
+
|
|
147
|
+
if (lang) {
|
|
148
|
+
const filePaths = getFilesForLanguage(lang, content)
|
|
149
|
+
const readingGuide = INLINE_READING_GUIDE.replace(/\{lang\}/g, lang)
|
|
150
|
+
parts.push(readingGuide)
|
|
151
|
+
parts.push(
|
|
152
|
+
'---\n\n## Included Documentation\n\n' +
|
|
153
|
+
buildInlineReference(filePaths, content),
|
|
154
|
+
)
|
|
155
|
+
} else {
|
|
156
|
+
// No language detected — include all docs and let the model ask
|
|
157
|
+
parts.push(INLINE_READING_GUIDE.replace(/\{lang\}/g, 'unknown'))
|
|
158
|
+
parts.push(
|
|
159
|
+
'No project language was auto-detected. Ask the user which language they are using, then refer to the matching docs below.',
|
|
160
|
+
)
|
|
161
|
+
parts.push(
|
|
162
|
+
'---\n\n## Included Documentation\n\n' +
|
|
163
|
+
buildInlineReference(Object.keys(content.SKILL_FILES), content),
|
|
164
|
+
)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Preserve the "When to Use WebFetch" and "Common Pitfalls" sections
|
|
168
|
+
const webFetchIdx = cleanPrompt.indexOf('## When to Use WebFetch')
|
|
169
|
+
if (webFetchIdx !== -1) {
|
|
170
|
+
parts.push(cleanPrompt.slice(webFetchIdx).trimEnd())
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (args) {
|
|
174
|
+
parts.push(`## User Request\n\n${args}`)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return parts.join('\n\n')
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function registerClaudeApiSkill(): void {
|
|
181
|
+
registerBundledSkill({
|
|
182
|
+
name: 'claude-api',
|
|
183
|
+
description:
|
|
184
|
+
'Build apps with the Claude API or Anthropic SDK.\n' +
|
|
185
|
+
'TRIGGER when: code imports `anthropic`/`@anthropic-ai/sdk`/`claude_agent_sdk`, or user asks to use Claude API, Anthropic SDKs, or Agent SDK.\n' +
|
|
186
|
+
'DO NOT TRIGGER when: code imports `openai`/other AI SDK, general programming, or ML/data-science tasks.',
|
|
187
|
+
allowedTools: ['Read', 'Grep', 'Glob', 'WebFetch'],
|
|
188
|
+
userInvocable: true,
|
|
189
|
+
async getPromptForCommand(args) {
|
|
190
|
+
const content = await import('./claudeApiContent.js')
|
|
191
|
+
const lang = await detectLanguage()
|
|
192
|
+
const prompt = buildPrompt(lang, args, content)
|
|
193
|
+
return [{ type: 'text', text: prompt }]
|
|
194
|
+
},
|
|
195
|
+
})
|
|
196
|
+
}
|