@xelauvas/xela-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +200 -0
- package/bin/xela +100 -0
- package/package.json +88 -0
- package/src/QueryEngine.ts +1295 -0
- package/src/Task.ts +125 -0
- package/src/Tool.ts +792 -0
- package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
- package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
- package/src/_shims/bun_bundle.js +9 -0
- package/src/_shims/cjs_stub.cjs +23 -0
- package/src/_shims/empty_stub.js +33 -0
- package/src/_shims/loader.js +352 -0
- package/src/_shims/openai_adapter.ts +486 -0
- package/src/_shims/react_compiler_runtime.js +17 -0
- package/src/_shims/register.js +148 -0
- package/src/assistant/sessionHistory.ts +87 -0
- package/src/bootstrap/state.ts +1759 -0
- package/src/bridge/bridgeApi.ts +539 -0
- package/src/bridge/bridgeConfig.ts +48 -0
- package/src/bridge/bridgeDebug.ts +135 -0
- package/src/bridge/bridgeEnabled.ts +202 -0
- package/src/bridge/bridgeMain.ts +2999 -0
- package/src/bridge/bridgeMessaging.ts +461 -0
- package/src/bridge/bridgePermissionCallbacks.ts +43 -0
- package/src/bridge/bridgePointer.ts +210 -0
- package/src/bridge/bridgeStatusUtil.ts +163 -0
- package/src/bridge/bridgeUI.ts +530 -0
- package/src/bridge/capacityWake.ts +56 -0
- package/src/bridge/codeSessionApi.ts +168 -0
- package/src/bridge/createSession.ts +384 -0
- package/src/bridge/debugUtils.ts +141 -0
- package/src/bridge/envLessBridgeConfig.ts +165 -0
- package/src/bridge/flushGate.ts +71 -0
- package/src/bridge/inboundAttachments.ts +175 -0
- package/src/bridge/inboundMessages.ts +80 -0
- package/src/bridge/initReplBridge.ts +569 -0
- package/src/bridge/jwtUtils.ts +256 -0
- package/src/bridge/pollConfig.ts +110 -0
- package/src/bridge/pollConfigDefaults.ts +82 -0
- package/src/bridge/remoteBridgeCore.ts +1008 -0
- package/src/bridge/replBridge.ts +2406 -0
- package/src/bridge/replBridgeHandle.ts +36 -0
- package/src/bridge/replBridgeTransport.ts +370 -0
- package/src/bridge/sessionIdCompat.ts +57 -0
- package/src/bridge/sessionRunner.ts +550 -0
- package/src/bridge/trustedDevice.ts +210 -0
- package/src/bridge/types.ts +262 -0
- package/src/bridge/workSecret.ts +127 -0
- package/src/buddy/CompanionSprite.tsx +371 -0
- package/src/buddy/companion.ts +133 -0
- package/src/buddy/prompt.ts +36 -0
- package/src/buddy/sprites.ts +514 -0
- package/src/buddy/types.ts +148 -0
- package/src/buddy/useBuddyNotification.tsx +98 -0
- package/src/cli/exit.ts +31 -0
- package/src/cli/handlers/agents.ts +70 -0
- package/src/cli/handlers/auth.ts +330 -0
- package/src/cli/handlers/autoMode.ts +170 -0
- package/src/cli/handlers/mcp.tsx +362 -0
- package/src/cli/handlers/plugins.ts +878 -0
- package/src/cli/handlers/util.tsx +110 -0
- package/src/cli/ndjsonSafeStringify.ts +32 -0
- package/src/cli/print.ts +5594 -0
- package/src/cli/remoteIO.ts +255 -0
- package/src/cli/structuredIO.ts +859 -0
- package/src/cli/transports/HybridTransport.ts +282 -0
- package/src/cli/transports/SSETransport.ts +711 -0
- package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
- package/src/cli/transports/WebSocketTransport.ts +800 -0
- package/src/cli/transports/WorkerStateUploader.ts +131 -0
- package/src/cli/transports/ccrClient.ts +998 -0
- package/src/cli/transports/transportUtils.ts +45 -0
- package/src/cli/update.ts +422 -0
- package/src/commands/add-dir/add-dir.tsx +126 -0
- package/src/commands/add-dir/index.ts +11 -0
- package/src/commands/add-dir/validation.ts +110 -0
- package/src/commands/advisor.ts +109 -0
- package/src/commands/agents/agents.tsx +12 -0
- package/src/commands/agents/index.ts +10 -0
- package/src/commands/ant-trace/index.js +1 -0
- package/src/commands/autofix-pr/index.js +1 -0
- package/src/commands/backfill-sessions/index.js +1 -0
- package/src/commands/branch/branch.ts +296 -0
- package/src/commands/branch/index.ts +14 -0
- package/src/commands/break-cache/index.js +1 -0
- package/src/commands/bridge/bridge.tsx +509 -0
- package/src/commands/bridge/index.ts +26 -0
- package/src/commands/bridge-kick.ts +200 -0
- package/src/commands/brief.ts +130 -0
- package/src/commands/btw/btw.tsx +243 -0
- package/src/commands/btw/index.ts +13 -0
- package/src/commands/bughunter/index.js +1 -0
- package/src/commands/chrome/chrome.tsx +285 -0
- package/src/commands/chrome/index.ts +13 -0
- package/src/commands/clear/caches.ts +144 -0
- package/src/commands/clear/clear.ts +7 -0
- package/src/commands/clear/conversation.ts +251 -0
- package/src/commands/clear/index.ts +19 -0
- package/src/commands/color/color.ts +93 -0
- package/src/commands/color/index.ts +16 -0
- package/src/commands/commit-push-pr.ts +158 -0
- package/src/commands/commit.ts +92 -0
- package/src/commands/compact/compact.ts +287 -0
- package/src/commands/compact/index.ts +15 -0
- package/src/commands/config/config.tsx +7 -0
- package/src/commands/config/index.ts +11 -0
- package/src/commands/context/context-noninteractive.ts +325 -0
- package/src/commands/context/context.tsx +64 -0
- package/src/commands/context/index.ts +24 -0
- package/src/commands/copy/copy.tsx +371 -0
- package/src/commands/copy/index.ts +15 -0
- package/src/commands/cost/cost.ts +24 -0
- package/src/commands/cost/index.ts +23 -0
- package/src/commands/createMovedToPluginCommand.ts +65 -0
- package/src/commands/ctx_viz/index.js +1 -0
- package/src/commands/debug-tool-call/index.js +1 -0
- package/src/commands/desktop/desktop.tsx +9 -0
- package/src/commands/desktop/index.ts +26 -0
- package/src/commands/diff/diff.tsx +9 -0
- package/src/commands/diff/index.ts +8 -0
- package/src/commands/doctor/doctor.tsx +7 -0
- package/src/commands/doctor/index.ts +12 -0
- package/src/commands/effort/effort.tsx +183 -0
- package/src/commands/effort/index.ts +13 -0
- package/src/commands/env/index.js +1 -0
- package/src/commands/exit/exit.tsx +33 -0
- package/src/commands/exit/index.ts +12 -0
- package/src/commands/export/export.tsx +91 -0
- package/src/commands/export/index.ts +11 -0
- package/src/commands/extra-usage/extra-usage-core.ts +118 -0
- package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
- package/src/commands/extra-usage/extra-usage.tsx +17 -0
- package/src/commands/extra-usage/index.ts +31 -0
- package/src/commands/fast/fast.tsx +269 -0
- package/src/commands/fast/index.ts +26 -0
- package/src/commands/feedback/feedback.tsx +25 -0
- package/src/commands/feedback/index.ts +26 -0
- package/src/commands/files/files.ts +19 -0
- package/src/commands/files/index.ts +12 -0
- package/src/commands/good-claude/index.js +1 -0
- package/src/commands/heapdump/heapdump.ts +17 -0
- package/src/commands/heapdump/index.ts +12 -0
- package/src/commands/help/help.tsx +11 -0
- package/src/commands/help/index.ts +10 -0
- package/src/commands/hooks/hooks.tsx +13 -0
- package/src/commands/hooks/index.ts +11 -0
- package/src/commands/ide/ide.tsx +646 -0
- package/src/commands/ide/index.ts +11 -0
- package/src/commands/init-verifiers.ts +262 -0
- package/src/commands/init.ts +256 -0
- package/src/commands/insights.ts +3200 -0
- package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
- package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
- package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
- package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
- package/src/commands/install-github-app/CreatingStep.tsx +65 -0
- package/src/commands/install-github-app/ErrorStep.tsx +85 -0
- package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
- package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
- package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
- package/src/commands/install-github-app/SuccessStep.tsx +96 -0
- package/src/commands/install-github-app/WarningsStep.tsx +73 -0
- package/src/commands/install-github-app/index.ts +13 -0
- package/src/commands/install-github-app/install-github-app.tsx +587 -0
- package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
- package/src/commands/install-slack-app/index.ts +12 -0
- package/src/commands/install-slack-app/install-slack-app.ts +30 -0
- package/src/commands/install.tsx +300 -0
- package/src/commands/issue/index.js +1 -0
- package/src/commands/keybindings/index.ts +13 -0
- package/src/commands/keybindings/keybindings.ts +53 -0
- package/src/commands/login/index.ts +14 -0
- package/src/commands/login/login.tsx +104 -0
- package/src/commands/logout/index.ts +10 -0
- package/src/commands/logout/logout.tsx +82 -0
- package/src/commands/mcp/addCommand.ts +280 -0
- package/src/commands/mcp/index.ts +12 -0
- package/src/commands/mcp/mcp.tsx +85 -0
- package/src/commands/mcp/xaaIdpCommand.ts +266 -0
- package/src/commands/memory/index.ts +10 -0
- package/src/commands/memory/memory.tsx +90 -0
- package/src/commands/mobile/index.ts +11 -0
- package/src/commands/mobile/mobile.tsx +274 -0
- package/src/commands/mock-limits/index.js +1 -0
- package/src/commands/model/index.ts +16 -0
- package/src/commands/model/model.tsx +297 -0
- package/src/commands/oauth-refresh/index.js +1 -0
- package/src/commands/onboarding/index.js +1 -0
- package/src/commands/output-style/index.ts +11 -0
- package/src/commands/output-style/output-style.tsx +7 -0
- package/src/commands/passes/index.ts +22 -0
- package/src/commands/passes/passes.tsx +24 -0
- package/src/commands/perf-issue/index.js +1 -0
- package/src/commands/permissions/index.ts +11 -0
- package/src/commands/permissions/permissions.tsx +10 -0
- package/src/commands/plan/index.ts +11 -0
- package/src/commands/plan/plan.tsx +122 -0
- package/src/commands/plugin/AddMarketplace.tsx +162 -0
- package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
- package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
- package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
- package/src/commands/plugin/ManagePlugins.tsx +2215 -0
- package/src/commands/plugin/PluginErrors.tsx +124 -0
- package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
- package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
- package/src/commands/plugin/PluginSettings.tsx +1072 -0
- package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
- package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
- package/src/commands/plugin/ValidatePlugin.tsx +98 -0
- package/src/commands/plugin/index.tsx +11 -0
- package/src/commands/plugin/parseArgs.ts +103 -0
- package/src/commands/plugin/plugin.tsx +7 -0
- package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
- package/src/commands/plugin/usePagination.ts +171 -0
- package/src/commands/pr_comments/index.ts +50 -0
- package/src/commands/privacy-settings/index.ts +14 -0
- package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
- package/src/commands/rate-limit-options/index.ts +19 -0
- package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
- package/src/commands/release-notes/index.ts +11 -0
- package/src/commands/release-notes/release-notes.ts +50 -0
- package/src/commands/reload-plugins/index.ts +18 -0
- package/src/commands/reload-plugins/reload-plugins.ts +61 -0
- package/src/commands/remote-env/index.ts +15 -0
- package/src/commands/remote-env/remote-env.tsx +7 -0
- package/src/commands/remote-setup/api.ts +182 -0
- package/src/commands/remote-setup/index.ts +20 -0
- package/src/commands/remote-setup/remote-setup.tsx +187 -0
- package/src/commands/rename/generateSessionName.ts +67 -0
- package/src/commands/rename/index.ts +12 -0
- package/src/commands/rename/rename.ts +87 -0
- package/src/commands/reset-limits/index.js +4 -0
- package/src/commands/resume/index.ts +12 -0
- package/src/commands/resume/resume.tsx +275 -0
- package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
- package/src/commands/review/reviewRemote.ts +316 -0
- package/src/commands/review/ultrareviewCommand.tsx +58 -0
- package/src/commands/review/ultrareviewEnabled.ts +14 -0
- package/src/commands/review.ts +57 -0
- package/src/commands/rewind/index.ts +13 -0
- package/src/commands/rewind/rewind.ts +13 -0
- package/src/commands/sandbox-toggle/index.ts +50 -0
- package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
- package/src/commands/security-review.ts +243 -0
- package/src/commands/session/index.ts +16 -0
- package/src/commands/session/session.tsx +140 -0
- package/src/commands/share/index.js +1 -0
- package/src/commands/skills/index.ts +10 -0
- package/src/commands/skills/skills.tsx +8 -0
- package/src/commands/stats/index.ts +10 -0
- package/src/commands/stats/stats.tsx +7 -0
- package/src/commands/status/index.ts +12 -0
- package/src/commands/status/status.tsx +8 -0
- package/src/commands/statusline.tsx +24 -0
- package/src/commands/stickers/index.ts +11 -0
- package/src/commands/stickers/stickers.ts +16 -0
- package/src/commands/summary/index.js +1 -0
- package/src/commands/tag/index.ts +12 -0
- package/src/commands/tag/tag.tsx +215 -0
- package/src/commands/tasks/index.ts +11 -0
- package/src/commands/tasks/tasks.tsx +8 -0
- package/src/commands/teleport/index.js +1 -0
- package/src/commands/terminalSetup/index.ts +23 -0
- package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
- package/src/commands/theme/index.ts +10 -0
- package/src/commands/theme/theme.tsx +57 -0
- package/src/commands/thinkback/index.ts +13 -0
- package/src/commands/thinkback/thinkback.tsx +554 -0
- package/src/commands/thinkback-play/index.ts +17 -0
- package/src/commands/thinkback-play/thinkback-play.ts +43 -0
- package/src/commands/ultraplan.tsx +471 -0
- package/src/commands/upgrade/index.ts +16 -0
- package/src/commands/upgrade/upgrade.tsx +38 -0
- package/src/commands/usage/index.ts +9 -0
- package/src/commands/usage/usage.tsx +7 -0
- package/src/commands/version.ts +22 -0
- package/src/commands/vim/index.ts +11 -0
- package/src/commands/vim/vim.ts +38 -0
- package/src/commands/voice/index.ts +20 -0
- package/src/commands/voice/voice.ts +150 -0
- package/src/commands.ts +754 -0
- package/src/components/AgentProgressLine.tsx +136 -0
- package/src/components/App.tsx +56 -0
- package/src/components/ApproveApiKey.tsx +123 -0
- package/src/components/AutoModeOptInDialog.tsx +142 -0
- package/src/components/AutoUpdater.tsx +198 -0
- package/src/components/AutoUpdaterWrapper.tsx +91 -0
- package/src/components/AwsAuthStatusBox.tsx +82 -0
- package/src/components/BaseTextInput.tsx +136 -0
- package/src/components/BashModeProgress.tsx +56 -0
- package/src/components/BridgeDialog.tsx +401 -0
- package/src/components/BypassPermissionsModeDialog.tsx +87 -0
- package/src/components/ChannelDowngradeDialog.tsx +102 -0
- package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
- package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
- package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
- package/src/components/ClickableImageRef.tsx +73 -0
- package/src/components/CompactSummary.tsx +118 -0
- package/src/components/ConfigurableShortcutHint.tsx +57 -0
- package/src/components/ConsoleOAuthFlow.tsx +631 -0
- package/src/components/ContextSuggestions.tsx +47 -0
- package/src/components/ContextVisualization.tsx +489 -0
- package/src/components/CoordinatorAgentStatus.tsx +273 -0
- package/src/components/CostThresholdDialog.tsx +50 -0
- package/src/components/CtrlOToExpand.tsx +51 -0
- package/src/components/CustomSelect/SelectMulti.tsx +213 -0
- package/src/components/CustomSelect/index.ts +3 -0
- package/src/components/CustomSelect/option-map.ts +50 -0
- package/src/components/CustomSelect/select-input-option.tsx +488 -0
- package/src/components/CustomSelect/select-option.tsx +68 -0
- package/src/components/CustomSelect/select.tsx +690 -0
- package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
- package/src/components/CustomSelect/use-select-input.ts +287 -0
- package/src/components/CustomSelect/use-select-navigation.ts +653 -0
- package/src/components/CustomSelect/use-select-state.ts +157 -0
- package/src/components/DesktopHandoff.tsx +193 -0
- package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
- package/src/components/DevBar.tsx +49 -0
- package/src/components/DevChannelsDialog.tsx +105 -0
- package/src/components/DiagnosticsDisplay.tsx +95 -0
- package/src/components/EffortCallout.tsx +265 -0
- package/src/components/EffortIndicator.ts +42 -0
- package/src/components/ExitFlow.tsx +48 -0
- package/src/components/ExportDialog.tsx +128 -0
- package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
- package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
- package/src/components/FastIcon.tsx +46 -0
- package/src/components/Feedback.tsx +592 -0
- package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
- package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
- package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
- package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
- package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
- package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
- package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
- package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
- package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
- package/src/components/FileEditToolDiff.tsx +181 -0
- package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
- package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
- package/src/components/FilePathLink.tsx +43 -0
- package/src/components/FullscreenLayout.tsx +637 -0
- package/src/components/GlobalSearchDialog.tsx +343 -0
- package/src/components/HelpV2/Commands.tsx +82 -0
- package/src/components/HelpV2/General.tsx +23 -0
- package/src/components/HelpV2/HelpV2.tsx +184 -0
- package/src/components/HighlightedCode/Fallback.tsx +193 -0
- package/src/components/HighlightedCode.tsx +190 -0
- package/src/components/HistorySearchDialog.tsx +118 -0
- package/src/components/IdeAutoConnectDialog.tsx +154 -0
- package/src/components/IdeOnboardingDialog.tsx +167 -0
- package/src/components/IdeStatusIndicator.tsx +58 -0
- package/src/components/IdleReturnDialog.tsx +118 -0
- package/src/components/InterruptedByUser.tsx +15 -0
- package/src/components/InvalidConfigDialog.tsx +156 -0
- package/src/components/InvalidSettingsDialog.tsx +89 -0
- package/src/components/KeybindingWarnings.tsx +55 -0
- package/src/components/LanguagePicker.tsx +86 -0
- package/src/components/LogSelector.tsx +1575 -0
- package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
- package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
- package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
- package/src/components/LogoV2/Clawd.tsx +240 -0
- package/src/components/LogoV2/CondensedLogo.tsx +161 -0
- package/src/components/LogoV2/EmergencyTip.tsx +58 -0
- package/src/components/LogoV2/Feed.tsx +112 -0
- package/src/components/LogoV2/FeedColumn.tsx +59 -0
- package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
- package/src/components/LogoV2/LogoV2.tsx +543 -0
- package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
- package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
- package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
- package/src/components/LogoV2/WelcomeV2.tsx +433 -0
- package/src/components/LogoV2/feedConfigs.tsx +92 -0
- package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
- package/src/components/MCPServerApprovalDialog.tsx +115 -0
- package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
- package/src/components/MCPServerDialogCopy.tsx +15 -0
- package/src/components/MCPServerMultiselectDialog.tsx +133 -0
- package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
- package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
- package/src/components/Markdown.tsx +236 -0
- package/src/components/MarkdownTable.tsx +322 -0
- package/src/components/MemoryUsageIndicator.tsx +37 -0
- package/src/components/Message.tsx +627 -0
- package/src/components/MessageModel.tsx +43 -0
- package/src/components/MessageResponse.tsx +78 -0
- package/src/components/MessageRow.tsx +383 -0
- package/src/components/MessageSelector.tsx +831 -0
- package/src/components/MessageTimestamp.tsx +63 -0
- package/src/components/Messages.tsx +834 -0
- package/src/components/ModelPicker.tsx +448 -0
- package/src/components/NativeAutoUpdater.tsx +193 -0
- package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
- package/src/components/OffscreenFreeze.tsx +44 -0
- package/src/components/Onboarding.tsx +244 -0
- package/src/components/OutputStylePicker.tsx +112 -0
- package/src/components/PackageManagerAutoUpdater.tsx +104 -0
- package/src/components/Passes/Passes.tsx +184 -0
- package/src/components/PrBadge.tsx +97 -0
- package/src/components/PressEnterToContinue.tsx +15 -0
- package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
- package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
- package/src/components/PromptInput/Notifications.tsx +332 -0
- package/src/components/PromptInput/PromptInput.tsx +2339 -0
- package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
- package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
- package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
- package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
- package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
- package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
- package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
- package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
- package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
- package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
- package/src/components/PromptInput/inputModes.ts +33 -0
- package/src/components/PromptInput/inputPaste.ts +90 -0
- package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
- package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
- package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
- package/src/components/PromptInput/useSwarmBanner.ts +155 -0
- package/src/components/PromptInput/utils.ts +60 -0
- package/src/components/QuickOpenDialog.tsx +244 -0
- package/src/components/RemoteCallout.tsx +76 -0
- package/src/components/RemoteEnvironmentDialog.tsx +340 -0
- package/src/components/ResumeTask.tsx +268 -0
- package/src/components/SandboxViolationExpandedView.tsx +99 -0
- package/src/components/ScrollKeybindingHandler.tsx +1012 -0
- package/src/components/SearchBox.tsx +72 -0
- package/src/components/SentryErrorBoundary.ts +28 -0
- package/src/components/SessionBackgroundHint.tsx +108 -0
- package/src/components/SessionPreview.tsx +194 -0
- package/src/components/Settings/Config.tsx +1822 -0
- package/src/components/Settings/Settings.tsx +137 -0
- package/src/components/Settings/Status.tsx +241 -0
- package/src/components/Settings/Usage.tsx +377 -0
- package/src/components/ShowInIDEPrompt.tsx +170 -0
- package/src/components/SkillImprovementSurvey.tsx +152 -0
- package/src/components/Spinner/FlashingChar.tsx +61 -0
- package/src/components/Spinner/GlimmerMessage.tsx +328 -0
- package/src/components/Spinner/ShimmerChar.tsx +36 -0
- package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
- package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
- package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
- package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
- package/src/components/Spinner/index.ts +10 -0
- package/src/components/Spinner/teammateSelectHint.ts +1 -0
- package/src/components/Spinner/useShimmerAnimation.ts +31 -0
- package/src/components/Spinner/useStalledAnimation.ts +75 -0
- package/src/components/Spinner/utils.ts +84 -0
- package/src/components/Spinner.tsx +562 -0
- package/src/components/Stats.tsx +1228 -0
- package/src/components/StatusLine.tsx +324 -0
- package/src/components/StatusNotices.tsx +55 -0
- package/src/components/StructuredDiff/Fallback.tsx +487 -0
- package/src/components/StructuredDiff/colorDiff.ts +37 -0
- package/src/components/StructuredDiff.tsx +190 -0
- package/src/components/StructuredDiffList.tsx +30 -0
- package/src/components/TagTabs.tsx +139 -0
- package/src/components/TaskListV2.tsx +378 -0
- package/src/components/TeammateViewHeader.tsx +82 -0
- package/src/components/TeleportError.tsx +189 -0
- package/src/components/TeleportProgress.tsx +140 -0
- package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
- package/src/components/TeleportResumeWrapper.tsx +167 -0
- package/src/components/TeleportStash.tsx +116 -0
- package/src/components/TextInput.tsx +124 -0
- package/src/components/ThemePicker.tsx +333 -0
- package/src/components/ThinkingToggle.tsx +153 -0
- package/src/components/TokenWarning.tsx +179 -0
- package/src/components/ToolUseLoader.tsx +42 -0
- package/src/components/TrustDialog/TrustDialog.tsx +290 -0
- package/src/components/TrustDialog/utils.ts +245 -0
- package/src/components/ValidationErrorsList.tsx +148 -0
- package/src/components/VimTextInput.tsx +140 -0
- package/src/components/VirtualMessageList.tsx +1082 -0
- package/src/components/WorkflowMultiselectDialog.tsx +128 -0
- package/src/components/WorktreeExitDialog.tsx +231 -0
- package/src/components/agents/AgentDetail.tsx +220 -0
- package/src/components/agents/AgentEditor.tsx +178 -0
- package/src/components/agents/AgentNavigationFooter.tsx +26 -0
- package/src/components/agents/AgentsList.tsx +440 -0
- package/src/components/agents/AgentsMenu.tsx +800 -0
- package/src/components/agents/ColorPicker.tsx +112 -0
- package/src/components/agents/ModelSelector.tsx +68 -0
- package/src/components/agents/ToolSelector.tsx +562 -0
- package/src/components/agents/agentFileUtils.ts +272 -0
- package/src/components/agents/generateAgent.ts +197 -0
- package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
- package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
- package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
- package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
- package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
- package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
- package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
- package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
- package/src/components/agents/types.ts +27 -0
- package/src/components/agents/utils.ts +18 -0
- package/src/components/agents/validateAgent.ts +109 -0
- package/src/components/design-system/Byline.tsx +77 -0
- package/src/components/design-system/Dialog.tsx +138 -0
- package/src/components/design-system/Divider.tsx +149 -0
- package/src/components/design-system/FuzzyPicker.tsx +312 -0
- package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
- package/src/components/design-system/ListItem.tsx +244 -0
- package/src/components/design-system/LoadingState.tsx +94 -0
- package/src/components/design-system/Pane.tsx +77 -0
- package/src/components/design-system/ProgressBar.tsx +86 -0
- package/src/components/design-system/Ratchet.tsx +80 -0
- package/src/components/design-system/StatusIcon.tsx +95 -0
- package/src/components/design-system/Tabs.tsx +340 -0
- package/src/components/design-system/ThemeProvider.tsx +174 -0
- package/src/components/design-system/ThemedBox.tsx +156 -0
- package/src/components/design-system/ThemedText.tsx +124 -0
- package/src/components/design-system/color.ts +30 -0
- package/src/components/diff/DiffDetailView.tsx +281 -0
- package/src/components/diff/DiffDialog.tsx +383 -0
- package/src/components/diff/DiffFileList.tsx +292 -0
- package/src/components/grove/Grove.tsx +463 -0
- package/src/components/hooks/HooksConfigMenu.tsx +578 -0
- package/src/components/hooks/PromptDialog.tsx +90 -0
- package/src/components/hooks/SelectEventMode.tsx +127 -0
- package/src/components/hooks/SelectHookMode.tsx +112 -0
- package/src/components/hooks/SelectMatcherMode.tsx +144 -0
- package/src/components/hooks/ViewHookMode.tsx +199 -0
- package/src/components/mcp/CapabilitiesSection.tsx +61 -0
- package/src/components/mcp/ElicitationDialog.tsx +1169 -0
- package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
- package/src/components/mcp/MCPListPanel.tsx +504 -0
- package/src/components/mcp/MCPReconnect.tsx +167 -0
- package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
- package/src/components/mcp/MCPSettings.tsx +398 -0
- package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
- package/src/components/mcp/MCPToolDetailView.tsx +212 -0
- package/src/components/mcp/MCPToolListView.tsx +141 -0
- package/src/components/mcp/McpParsingWarnings.tsx +213 -0
- package/src/components/mcp/index.ts +9 -0
- package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
- package/src/components/memory/MemoryFileSelector.tsx +438 -0
- package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
- package/src/components/messageActions.tsx +450 -0
- package/src/components/messages/AdvisorMessage.tsx +158 -0
- package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
- package/src/components/messages/AssistantTextMessage.tsx +270 -0
- package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
- package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
- package/src/components/messages/AttachmentMessage.tsx +536 -0
- package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
- package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
- package/src/components/messages/GroupedToolUseContent.tsx +58 -0
- package/src/components/messages/HighlightedThinkingText.tsx +162 -0
- package/src/components/messages/HookProgressMessage.tsx +116 -0
- package/src/components/messages/PlanApprovalMessage.tsx +222 -0
- package/src/components/messages/RateLimitMessage.tsx +161 -0
- package/src/components/messages/ShutdownMessage.tsx +132 -0
- package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
- package/src/components/messages/SystemTextMessage.tsx +827 -0
- package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
- package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
- package/src/components/messages/UserBashInputMessage.tsx +58 -0
- package/src/components/messages/UserBashOutputMessage.tsx +54 -0
- package/src/components/messages/UserChannelMessage.tsx +137 -0
- package/src/components/messages/UserCommandMessage.tsx +108 -0
- package/src/components/messages/UserImageMessage.tsx +59 -0
- package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
- package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
- package/src/components/messages/UserPlanMessage.tsx +42 -0
- package/src/components/messages/UserPromptMessage.tsx +80 -0
- package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
- package/src/components/messages/UserTeammateMessage.tsx +206 -0
- package/src/components/messages/UserTextMessage.tsx +275 -0
- package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
- package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
- package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
- package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
- package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
- package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
- package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
- package/src/components/messages/nullRenderingAttachments.ts +70 -0
- package/src/components/messages/teamMemCollapsed.tsx +140 -0
- package/src/components/messages/teamMemSaved.ts +19 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
- package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
- package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
- package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
- package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
- package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
- package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
- package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
- package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
- package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
- package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
- package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
- package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
- package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
- package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
- package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
- package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
- package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
- package/src/components/permissions/PermissionDialog.tsx +72 -0
- package/src/components/permissions/PermissionExplanation.tsx +272 -0
- package/src/components/permissions/PermissionPrompt.tsx +336 -0
- package/src/components/permissions/PermissionRequest.tsx +217 -0
- package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
- package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
- package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
- package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
- package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
- package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
- package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
- package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
- package/src/components/permissions/WorkerBadge.tsx +49 -0
- package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
- package/src/components/permissions/hooks.ts +209 -0
- package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
- package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
- package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
- package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
- package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
- package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
- package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
- package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
- package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
- package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
- package/src/components/permissions/utils.ts +25 -0
- package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
- package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
- package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
- package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
- package/src/components/sandbox/SandboxSettings.tsx +296 -0
- package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
- package/src/components/shell/OutputLine.tsx +118 -0
- package/src/components/shell/ShellProgressMessage.tsx +150 -0
- package/src/components/shell/ShellTimeDisplay.tsx +74 -0
- package/src/components/skills/SkillsMenu.tsx +237 -0
- package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
- package/src/components/tasks/BackgroundTask.tsx +345 -0
- package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
- package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
- package/src/components/tasks/DreamDetailDialog.tsx +251 -0
- package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
- package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
- package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
- package/src/components/tasks/ShellDetailDialog.tsx +404 -0
- package/src/components/tasks/ShellProgress.tsx +87 -0
- package/src/components/tasks/renderToolActivity.tsx +33 -0
- package/src/components/tasks/taskStatusUtils.tsx +107 -0
- package/src/components/teams/TeamStatus.tsx +80 -0
- package/src/components/teams/TeamsDialog.tsx +715 -0
- package/src/components/ui/OrderedList.tsx +71 -0
- package/src/components/ui/OrderedListItem.tsx +45 -0
- package/src/components/ui/TreeSelect.tsx +397 -0
- package/src/components/wizard/WizardDialogLayout.tsx +65 -0
- package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
- package/src/components/wizard/WizardProvider.tsx +213 -0
- package/src/components/wizard/index.ts +9 -0
- package/src/components/wizard/useWizard.ts +13 -0
- package/src/constants/apiLimits.ts +94 -0
- package/src/constants/betas.ts +52 -0
- package/src/constants/common.ts +33 -0
- package/src/constants/cyberRiskInstruction.ts +24 -0
- package/src/constants/errorIds.ts +15 -0
- package/src/constants/figures.ts +45 -0
- package/src/constants/files.ts +156 -0
- package/src/constants/github-app.ts +144 -0
- package/src/constants/keys.ts +11 -0
- package/src/constants/messages.ts +1 -0
- package/src/constants/oauth.ts +234 -0
- package/src/constants/outputStyles.ts +216 -0
- package/src/constants/product.ts +76 -0
- package/src/constants/prompts.ts +914 -0
- package/src/constants/spinnerVerbs.ts +204 -0
- package/src/constants/system.ts +95 -0
- package/src/constants/systemPromptSections.ts +68 -0
- package/src/constants/toolLimits.ts +56 -0
- package/src/constants/tools.ts +112 -0
- package/src/constants/turnCompletionVerbs.ts +12 -0
- package/src/constants/xml.ts +86 -0
- package/src/context/QueuedMessageContext.tsx +63 -0
- package/src/context/fpsMetrics.tsx +30 -0
- package/src/context/mailbox.tsx +38 -0
- package/src/context/modalContext.tsx +58 -0
- package/src/context/notifications.tsx +240 -0
- package/src/context/overlayContext.tsx +151 -0
- package/src/context/promptOverlayContext.tsx +125 -0
- package/src/context/stats.tsx +220 -0
- package/src/context/voice.tsx +88 -0
- package/src/context.ts +189 -0
- package/src/coordinator/coordinatorMode.ts +369 -0
- package/src/cost-tracker.ts +323 -0
- package/src/costHook.ts +22 -0
- package/src/dialogLaunchers.tsx +133 -0
- package/src/entrypoints/agentSdkTypes.ts +443 -0
- package/src/entrypoints/cli.tsx +303 -0
- package/src/entrypoints/init.ts +340 -0
- package/src/entrypoints/mcp.ts +196 -0
- package/src/entrypoints/sandboxTypes.ts +156 -0
- package/src/entrypoints/sdk/controlSchemas.ts +663 -0
- package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/src/entrypoints/sdk/coreTypes.ts +62 -0
- package/src/history.ts +464 -0
- package/src/hooks/fileSuggestions.ts +811 -0
- package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
- package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
- package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
- package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
- package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
- package/src/hooks/notifs/useInstallMessages.tsx +26 -0
- package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
- package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
- package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
- package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
- package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
- package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
- package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
- package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
- package/src/hooks/notifs/useStartupNotification.ts +41 -0
- package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
- package/src/hooks/renderPlaceholder.ts +51 -0
- package/src/hooks/toolPermission/PermissionContext.ts +388 -0
- package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
- package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
- package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
- package/src/hooks/toolPermission/permissionLogging.ts +238 -0
- package/src/hooks/unifiedSuggestions.ts +202 -0
- package/src/hooks/useAfterFirstRender.ts +17 -0
- package/src/hooks/useApiKeyVerification.ts +84 -0
- package/src/hooks/useArrowKeyHistory.tsx +229 -0
- package/src/hooks/useAssistantHistory.ts +250 -0
- package/src/hooks/useAwaySummary.ts +125 -0
- package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
- package/src/hooks/useBlink.ts +34 -0
- package/src/hooks/useCanUseTool.tsx +204 -0
- package/src/hooks/useCancelRequest.ts +276 -0
- package/src/hooks/useChromeExtensionNotification.tsx +50 -0
- package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
- package/src/hooks/useClipboardImageHint.ts +77 -0
- package/src/hooks/useCommandKeybindings.tsx +108 -0
- package/src/hooks/useCommandQueue.ts +15 -0
- package/src/hooks/useCopyOnSelect.ts +98 -0
- package/src/hooks/useDeferredHookMessages.ts +46 -0
- package/src/hooks/useDiffData.ts +110 -0
- package/src/hooks/useDiffInIDE.ts +379 -0
- package/src/hooks/useDirectConnect.ts +229 -0
- package/src/hooks/useDoublePress.ts +62 -0
- package/src/hooks/useDynamicConfig.ts +22 -0
- package/src/hooks/useElapsedTime.ts +37 -0
- package/src/hooks/useExitOnCtrlCD.ts +95 -0
- package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
- package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
- package/src/hooks/useGlobalKeybindings.tsx +249 -0
- package/src/hooks/useHistorySearch.ts +303 -0
- package/src/hooks/useIDEIntegration.tsx +70 -0
- package/src/hooks/useIdeAtMentioned.ts +76 -0
- package/src/hooks/useIdeConnectionStatus.ts +33 -0
- package/src/hooks/useIdeLogging.ts +41 -0
- package/src/hooks/useIdeSelection.ts +150 -0
- package/src/hooks/useInboxPoller.ts +969 -0
- package/src/hooks/useInputBuffer.ts +132 -0
- package/src/hooks/useIssueFlagBanner.ts +133 -0
- package/src/hooks/useLogMessages.ts +119 -0
- package/src/hooks/useLspPluginRecommendation.tsx +194 -0
- package/src/hooks/useMailboxBridge.ts +21 -0
- package/src/hooks/useMainLoopModel.ts +34 -0
- package/src/hooks/useManagePlugins.ts +304 -0
- package/src/hooks/useMemoryUsage.ts +39 -0
- package/src/hooks/useMergedClients.ts +23 -0
- package/src/hooks/useMergedCommands.ts +15 -0
- package/src/hooks/useMergedTools.ts +44 -0
- package/src/hooks/useMinDisplayTime.ts +35 -0
- package/src/hooks/useNotifyAfterTimeout.ts +65 -0
- package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
- package/src/hooks/usePasteHandler.ts +285 -0
- package/src/hooks/usePluginRecommendationBase.tsx +105 -0
- package/src/hooks/usePrStatus.ts +106 -0
- package/src/hooks/usePromptSuggestion.ts +177 -0
- package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
- package/src/hooks/useQueueProcessor.ts +68 -0
- package/src/hooks/useRemoteSession.ts +605 -0
- package/src/hooks/useReplBridge.tsx +723 -0
- package/src/hooks/useSSHSession.ts +241 -0
- package/src/hooks/useScheduledTasks.ts +139 -0
- package/src/hooks/useSearchInput.ts +364 -0
- package/src/hooks/useSessionBackgrounding.ts +158 -0
- package/src/hooks/useSettings.ts +17 -0
- package/src/hooks/useSettingsChange.ts +25 -0
- package/src/hooks/useSkillImprovementSurvey.ts +105 -0
- package/src/hooks/useSkillsChange.ts +62 -0
- package/src/hooks/useSwarmInitialization.ts +81 -0
- package/src/hooks/useSwarmPermissionPoller.ts +330 -0
- package/src/hooks/useTaskListWatcher.ts +221 -0
- package/src/hooks/useTasksV2.ts +250 -0
- package/src/hooks/useTeammateViewAutoExit.ts +63 -0
- package/src/hooks/useTeleportResume.tsx +85 -0
- package/src/hooks/useTerminalSize.ts +15 -0
- package/src/hooks/useTextInput.ts +529 -0
- package/src/hooks/useTimeout.ts +14 -0
- package/src/hooks/useTurnDiffs.ts +213 -0
- package/src/hooks/useTypeahead.tsx +1385 -0
- package/src/hooks/useUpdateNotification.ts +34 -0
- package/src/hooks/useVimInput.ts +316 -0
- package/src/hooks/useVirtualScroll.ts +721 -0
- package/src/hooks/useVoice.ts +1144 -0
- package/src/hooks/useVoiceEnabled.ts +25 -0
- package/src/hooks/useVoiceIntegration.tsx +677 -0
- package/src/ink/Ansi.tsx +292 -0
- package/src/ink/bidi.ts +139 -0
- package/src/ink/clearTerminal.ts +74 -0
- package/src/ink/colorize.ts +231 -0
- package/src/ink/components/AlternateScreen.tsx +80 -0
- package/src/ink/components/App.tsx +659 -0
- package/src/ink/components/AppContext.ts +21 -0
- package/src/ink/components/Box.tsx +214 -0
- package/src/ink/components/Button.tsx +192 -0
- package/src/ink/components/ClockContext.tsx +112 -0
- package/src/ink/components/CursorDeclarationContext.ts +32 -0
- package/src/ink/components/ErrorOverview.tsx +109 -0
- package/src/ink/components/Link.tsx +42 -0
- package/src/ink/components/Newline.tsx +39 -0
- package/src/ink/components/NoSelect.tsx +68 -0
- package/src/ink/components/RawAnsi.tsx +57 -0
- package/src/ink/components/ScrollBox.tsx +237 -0
- package/src/ink/components/Spacer.tsx +20 -0
- package/src/ink/components/StdinContext.ts +49 -0
- package/src/ink/components/TerminalFocusContext.tsx +52 -0
- package/src/ink/components/TerminalSizeContext.tsx +7 -0
- package/src/ink/components/Text.tsx +254 -0
- package/src/ink/constants.ts +2 -0
- package/src/ink/dom.ts +484 -0
- package/src/ink/events/click-event.ts +38 -0
- package/src/ink/events/dispatcher.ts +233 -0
- package/src/ink/events/emitter.ts +39 -0
- package/src/ink/events/event-handlers.ts +73 -0
- package/src/ink/events/event.ts +11 -0
- package/src/ink/events/focus-event.ts +21 -0
- package/src/ink/events/input-event.ts +205 -0
- package/src/ink/events/keyboard-event.ts +51 -0
- package/src/ink/events/terminal-event.ts +107 -0
- package/src/ink/events/terminal-focus-event.ts +19 -0
- package/src/ink/focus.ts +181 -0
- package/src/ink/frame.ts +124 -0
- package/src/ink/get-max-width.ts +27 -0
- package/src/ink/hit-test.ts +130 -0
- package/src/ink/hooks/use-animation-frame.ts +57 -0
- package/src/ink/hooks/use-app.ts +8 -0
- package/src/ink/hooks/use-declared-cursor.ts +73 -0
- package/src/ink/hooks/use-input.ts +92 -0
- package/src/ink/hooks/use-interval.ts +67 -0
- package/src/ink/hooks/use-search-highlight.ts +53 -0
- package/src/ink/hooks/use-selection.ts +104 -0
- package/src/ink/hooks/use-stdin.ts +8 -0
- package/src/ink/hooks/use-tab-status.ts +72 -0
- package/src/ink/hooks/use-terminal-focus.ts +16 -0
- package/src/ink/hooks/use-terminal-title.ts +31 -0
- package/src/ink/hooks/use-terminal-viewport.ts +96 -0
- package/src/ink/ink.tsx +1728 -0
- package/src/ink/instances.ts +10 -0
- package/src/ink/layout/engine.ts +6 -0
- package/src/ink/layout/geometry.ts +97 -0
- package/src/ink/layout/node.ts +152 -0
- package/src/ink/layout/yoga.ts +308 -0
- package/src/ink/line-width-cache.ts +24 -0
- package/src/ink/log-update.ts +773 -0
- package/src/ink/measure-element.ts +23 -0
- package/src/ink/measure-text.ts +47 -0
- package/src/ink/node-cache.ts +54 -0
- package/src/ink/optimizer.ts +93 -0
- package/src/ink/output.ts +797 -0
- package/src/ink/parse-keypress.ts +801 -0
- package/src/ink/reconciler.ts +512 -0
- package/src/ink/render-border.ts +231 -0
- package/src/ink/render-node-to-output.ts +1462 -0
- package/src/ink/render-to-screen.ts +231 -0
- package/src/ink/renderer.ts +178 -0
- package/src/ink/root.ts +184 -0
- package/src/ink/screen.ts +1486 -0
- package/src/ink/searchHighlight.ts +93 -0
- package/src/ink/selection.ts +917 -0
- package/src/ink/squash-text-nodes.ts +92 -0
- package/src/ink/stringWidth.ts +222 -0
- package/src/ink/styles.ts +771 -0
- package/src/ink/supports-hyperlinks.ts +57 -0
- package/src/ink/tabstops.ts +46 -0
- package/src/ink/terminal-focus-state.ts +47 -0
- package/src/ink/terminal-querier.ts +212 -0
- package/src/ink/terminal.ts +248 -0
- package/src/ink/termio/ansi.ts +75 -0
- package/src/ink/termio/csi.ts +319 -0
- package/src/ink/termio/dec.ts +60 -0
- package/src/ink/termio/esc.ts +67 -0
- package/src/ink/termio/osc.ts +493 -0
- package/src/ink/termio/parser.ts +394 -0
- package/src/ink/termio/sgr.ts +308 -0
- package/src/ink/termio/tokenize.ts +319 -0
- package/src/ink/termio/types.ts +236 -0
- package/src/ink/termio.ts +42 -0
- package/src/ink/useTerminalNotification.ts +126 -0
- package/src/ink/warn.ts +9 -0
- package/src/ink/widest-line.ts +19 -0
- package/src/ink/wrap-text.ts +74 -0
- package/src/ink/wrapAnsi.ts +20 -0
- package/src/ink.ts +85 -0
- package/src/interactiveHelpers.tsx +367 -0
- package/src/keybindings/KeybindingContext.tsx +243 -0
- package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
- package/src/keybindings/defaultBindings.ts +340 -0
- package/src/keybindings/loadUserBindings.ts +472 -0
- package/src/keybindings/match.ts +120 -0
- package/src/keybindings/parser.ts +203 -0
- package/src/keybindings/reservedShortcuts.ts +127 -0
- package/src/keybindings/resolver.ts +244 -0
- package/src/keybindings/schema.ts +236 -0
- package/src/keybindings/shortcutFormat.ts +63 -0
- package/src/keybindings/template.ts +52 -0
- package/src/keybindings/useKeybinding.ts +196 -0
- package/src/keybindings/useShortcutDisplay.ts +59 -0
- package/src/keybindings/validate.ts +498 -0
- package/src/main.tsx +4684 -0
- package/src/memdir/findRelevantMemories.ts +141 -0
- package/src/memdir/memdir.ts +507 -0
- package/src/memdir/memoryAge.ts +53 -0
- package/src/memdir/memoryScan.ts +94 -0
- package/src/memdir/memoryTypes.ts +271 -0
- package/src/memdir/paths.ts +278 -0
- package/src/memdir/teamMemPaths.ts +292 -0
- package/src/memdir/teamMemPrompts.ts +100 -0
- package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
- package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
- package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
- package/src/migrations/migrateFennecToOpus.ts +45 -0
- package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
- package/src/migrations/migrateOpusToOpus1m.ts +43 -0
- package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
- package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
- package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
- package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
- package/src/migrations/resetProToOpusDefault.ts +51 -0
- package/src/moreright/useMoreRight.tsx +26 -0
- package/src/native-ts/color-diff/index.ts +999 -0
- package/src/native-ts/file-index/index.ts +370 -0
- package/src/native-ts/yoga-layout/enums.ts +134 -0
- package/src/native-ts/yoga-layout/index.ts +2578 -0
- package/src/outputStyles/loadOutputStylesDir.ts +98 -0
- package/src/plugins/builtinPlugins.ts +159 -0
- package/src/plugins/bundled/index.ts +23 -0
- package/src/projectOnboardingState.ts +83 -0
- package/src/query/config.ts +46 -0
- package/src/query/deps.ts +40 -0
- package/src/query/stopHooks.ts +473 -0
- package/src/query/tokenBudget.ts +93 -0
- package/src/query.ts +1729 -0
- package/src/remote/RemoteSessionManager.ts +343 -0
- package/src/remote/SessionsWebSocket.ts +404 -0
- package/src/remote/remotePermissionBridge.ts +78 -0
- package/src/remote/sdkMessageAdapter.ts +302 -0
- package/src/replLauncher.tsx +23 -0
- package/src/schemas/hooks.ts +222 -0
- package/src/screens/Doctor.tsx +575 -0
- package/src/screens/REPL.tsx +5006 -0
- package/src/screens/ResumeConversation.tsx +399 -0
- package/src/server/createDirectConnectSession.ts +88 -0
- package/src/server/directConnectManager.ts +213 -0
- package/src/server/types.ts +57 -0
- package/src/services/AgentSummary/agentSummary.ts +179 -0
- package/src/services/MagicDocs/magicDocs.ts +254 -0
- package/src/services/MagicDocs/prompts.ts +127 -0
- package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/src/services/PromptSuggestion/speculation.ts +991 -0
- package/src/services/SessionMemory/prompts.ts +324 -0
- package/src/services/SessionMemory/sessionMemory.ts +495 -0
- package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/src/services/analytics/config.ts +38 -0
- package/src/services/analytics/datadog.ts +307 -0
- package/src/services/analytics/firstPartyEventLogger.ts +449 -0
- package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/src/services/analytics/growthbook.ts +1157 -0
- package/src/services/analytics/index.ts +173 -0
- package/src/services/analytics/metadata.ts +973 -0
- package/src/services/analytics/sink.ts +114 -0
- package/src/services/analytics/sinkKillswitch.ts +25 -0
- package/src/services/api/adminRequests.ts +119 -0
- package/src/services/api/bootstrap.ts +142 -0
- package/src/services/api/claude.ts +3433 -0
- package/src/services/api/client.ts +395 -0
- package/src/services/api/dumpPrompts.ts +226 -0
- package/src/services/api/emptyUsage.ts +22 -0
- package/src/services/api/errorUtils.ts +260 -0
- package/src/services/api/errors.ts +1207 -0
- package/src/services/api/filesApi.ts +748 -0
- package/src/services/api/firstTokenDate.ts +60 -0
- package/src/services/api/grove.ts +357 -0
- package/src/services/api/logging.ts +788 -0
- package/src/services/api/metricsOptOut.ts +159 -0
- package/src/services/api/overageCreditGrant.ts +137 -0
- package/src/services/api/promptCacheBreakDetection.ts +727 -0
- package/src/services/api/referral.ts +281 -0
- package/src/services/api/sessionIngress.ts +514 -0
- package/src/services/api/ultrareviewQuota.ts +38 -0
- package/src/services/api/usage.ts +63 -0
- package/src/services/api/withRetry.ts +826 -0
- package/src/services/autoDream/autoDream.ts +324 -0
- package/src/services/autoDream/config.ts +21 -0
- package/src/services/autoDream/consolidationLock.ts +140 -0
- package/src/services/autoDream/consolidationPrompt.ts +65 -0
- package/src/services/awaySummary.ts +74 -0
- package/src/services/claudeAiLimits.ts +515 -0
- package/src/services/claudeAiLimitsHook.ts +23 -0
- package/src/services/compact/apiMicrocompact.ts +153 -0
- package/src/services/compact/autoCompact.ts +351 -0
- package/src/services/compact/compact.ts +1705 -0
- package/src/services/compact/compactWarningHook.ts +16 -0
- package/src/services/compact/compactWarningState.ts +18 -0
- package/src/services/compact/grouping.ts +63 -0
- package/src/services/compact/microCompact.ts +530 -0
- package/src/services/compact/postCompactCleanup.ts +77 -0
- package/src/services/compact/prompt.ts +374 -0
- package/src/services/compact/sessionMemoryCompact.ts +630 -0
- package/src/services/compact/timeBasedMCConfig.ts +43 -0
- package/src/services/diagnosticTracking.ts +397 -0
- package/src/services/extractMemories/extractMemories.ts +615 -0
- package/src/services/extractMemories/prompts.ts +154 -0
- package/src/services/internalLogging.ts +90 -0
- package/src/services/lsp/LSPClient.ts +447 -0
- package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/src/services/lsp/LSPServerInstance.ts +511 -0
- package/src/services/lsp/LSPServerManager.ts +420 -0
- package/src/services/lsp/config.ts +79 -0
- package/src/services/lsp/manager.ts +289 -0
- package/src/services/lsp/passiveFeedback.ts +328 -0
- package/src/services/mcp/InProcessTransport.ts +63 -0
- package/src/services/mcp/MCPConnectionManager.tsx +73 -0
- package/src/services/mcp/SdkControlTransport.ts +136 -0
- package/src/services/mcp/auth.ts +2465 -0
- package/src/services/mcp/channelAllowlist.ts +76 -0
- package/src/services/mcp/channelNotification.ts +316 -0
- package/src/services/mcp/channelPermissions.ts +240 -0
- package/src/services/mcp/claudeai.ts +164 -0
- package/src/services/mcp/client.ts +3348 -0
- package/src/services/mcp/config.ts +1578 -0
- package/src/services/mcp/elicitationHandler.ts +313 -0
- package/src/services/mcp/envExpansion.ts +38 -0
- package/src/services/mcp/headersHelper.ts +138 -0
- package/src/services/mcp/mcpStringUtils.ts +106 -0
- package/src/services/mcp/normalization.ts +23 -0
- package/src/services/mcp/oauthPort.ts +78 -0
- package/src/services/mcp/officialRegistry.ts +72 -0
- package/src/services/mcp/types.ts +258 -0
- package/src/services/mcp/useManageMCPConnections.ts +1141 -0
- package/src/services/mcp/utils.ts +575 -0
- package/src/services/mcp/vscodeSdkMcp.ts +112 -0
- package/src/services/mcp/xaa.ts +511 -0
- package/src/services/mcp/xaaIdpLogin.ts +487 -0
- package/src/services/mcpServerApproval.tsx +41 -0
- package/src/services/mockRateLimits.ts +882 -0
- package/src/services/notifier.ts +156 -0
- package/src/services/oauth/auth-code-listener.ts +211 -0
- package/src/services/oauth/client.ts +566 -0
- package/src/services/oauth/crypto.ts +23 -0
- package/src/services/oauth/getOauthProfile.ts +53 -0
- package/src/services/oauth/index.ts +198 -0
- package/src/services/plugins/PluginInstallationManager.ts +184 -0
- package/src/services/plugins/pluginCliCommands.ts +344 -0
- package/src/services/plugins/pluginOperations.ts +1088 -0
- package/src/services/policyLimits/index.ts +664 -0
- package/src/services/policyLimits/types.ts +27 -0
- package/src/services/preventSleep.ts +165 -0
- package/src/services/rateLimitMessages.ts +344 -0
- package/src/services/rateLimitMocking.ts +144 -0
- package/src/services/remoteManagedSettings/index.ts +639 -0
- package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/src/services/remoteManagedSettings/syncCache.ts +112 -0
- package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/src/services/remoteManagedSettings/types.ts +31 -0
- package/src/services/settingsSync/index.ts +581 -0
- package/src/services/settingsSync/types.ts +67 -0
- package/src/services/teamMemorySync/index.ts +1256 -0
- package/src/services/teamMemorySync/secretScanner.ts +324 -0
- package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/src/services/teamMemorySync/types.ts +156 -0
- package/src/services/teamMemorySync/watcher.ts +387 -0
- package/src/services/tips/tipHistory.ts +17 -0
- package/src/services/tips/tipRegistry.ts +686 -0
- package/src/services/tips/tipScheduler.ts +58 -0
- package/src/services/tokenEstimation.ts +495 -0
- package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/src/services/tools/StreamingToolExecutor.ts +530 -0
- package/src/services/tools/toolExecution.ts +1745 -0
- package/src/services/tools/toolHooks.ts +650 -0
- package/src/services/tools/toolOrchestration.ts +188 -0
- package/src/services/vcr.ts +406 -0
- package/src/services/voice.ts +525 -0
- package/src/services/voiceKeyterms.ts +106 -0
- package/src/services/voiceStreamSTT.ts +544 -0
- package/src/setup.ts +477 -0
- package/src/skills/bundled/batch.ts +124 -0
- package/src/skills/bundled/claudeApi.ts +196 -0
- package/src/skills/bundled/claudeApiContent.ts +75 -0
- package/src/skills/bundled/claudeInChrome.ts +34 -0
- package/src/skills/bundled/debug.ts +103 -0
- package/src/skills/bundled/index.ts +79 -0
- package/src/skills/bundled/keybindings.ts +339 -0
- package/src/skills/bundled/loop.ts +92 -0
- package/src/skills/bundled/loremIpsum.ts +282 -0
- package/src/skills/bundled/remember.ts +82 -0
- package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
- package/src/skills/bundled/simplify.ts +69 -0
- package/src/skills/bundled/skillify.ts +197 -0
- package/src/skills/bundled/stuck.ts +79 -0
- package/src/skills/bundled/updateConfig.ts +475 -0
- package/src/skills/bundled/verify.ts +30 -0
- package/src/skills/bundled/verifyContent.ts +13 -0
- package/src/skills/bundledSkills.ts +220 -0
- package/src/skills/loadSkillsDir.ts +1086 -0
- package/src/skills/mcpSkillBuilders.ts +44 -0
- package/src/state/AppState.tsx +200 -0
- package/src/state/AppStateStore.ts +569 -0
- package/src/state/onChangeAppState.ts +171 -0
- package/src/state/selectors.ts +76 -0
- package/src/state/store.ts +34 -0
- package/src/state/teammateViewHelpers.ts +141 -0
- package/src/tasks/DreamTask/DreamTask.ts +157 -0
- package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
- package/src/tasks/InProcessTeammateTask/types.ts +121 -0
- package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
- package/src/tasks/LocalMainSessionTask.ts +479 -0
- package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
- package/src/tasks/LocalShellTask/guards.ts +41 -0
- package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
- package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
- package/src/tasks/pillLabel.ts +82 -0
- package/src/tasks/stopTask.ts +100 -0
- package/src/tasks/types.ts +46 -0
- package/src/tasks.ts +39 -0
- package/src/tools/AgentTool/AgentTool.tsx +1398 -0
- package/src/tools/AgentTool/UI.tsx +872 -0
- package/src/tools/AgentTool/agentColorManager.ts +66 -0
- package/src/tools/AgentTool/agentDisplay.ts +104 -0
- package/src/tools/AgentTool/agentMemory.ts +177 -0
- package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/src/tools/AgentTool/agentToolUtils.ts +686 -0
- package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/src/tools/AgentTool/builtInAgents.ts +72 -0
- package/src/tools/AgentTool/constants.ts +12 -0
- package/src/tools/AgentTool/forkSubagent.ts +210 -0
- package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/src/tools/AgentTool/prompt.ts +287 -0
- package/src/tools/AgentTool/resumeAgent.ts +265 -0
- package/src/tools/AgentTool/runAgent.ts +973 -0
- package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/src/tools/BashTool/BashTool.tsx +1144 -0
- package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/src/tools/BashTool/UI.tsx +185 -0
- package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/src/tools/BashTool/bashPermissions.ts +2621 -0
- package/src/tools/BashTool/bashSecurity.ts +2592 -0
- package/src/tools/BashTool/commandSemantics.ts +140 -0
- package/src/tools/BashTool/commentLabel.ts +13 -0
- package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/src/tools/BashTool/modeValidation.ts +115 -0
- package/src/tools/BashTool/pathValidation.ts +1303 -0
- package/src/tools/BashTool/prompt.ts +369 -0
- package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/src/tools/BashTool/sedEditParser.ts +322 -0
- package/src/tools/BashTool/sedValidation.ts +684 -0
- package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/src/tools/BashTool/toolName.ts +2 -0
- package/src/tools/BashTool/utils.ts +223 -0
- package/src/tools/BriefTool/BriefTool.ts +204 -0
- package/src/tools/BriefTool/UI.tsx +101 -0
- package/src/tools/BriefTool/attachments.ts +110 -0
- package/src/tools/BriefTool/prompt.ts +22 -0
- package/src/tools/BriefTool/upload.ts +174 -0
- package/src/tools/ConfigTool/ConfigTool.ts +467 -0
- package/src/tools/ConfigTool/UI.tsx +38 -0
- package/src/tools/ConfigTool/constants.ts +1 -0
- package/src/tools/ConfigTool/prompt.ts +93 -0
- package/src/tools/ConfigTool/supportedSettings.ts +211 -0
- package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/src/tools/EnterPlanModeTool/constants.ts +1 -0
- package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/src/tools/EnterWorktreeTool/constants.ts +1 -0
- package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/src/tools/ExitPlanModeTool/constants.ts +2 -0
- package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/src/tools/ExitWorktreeTool/constants.ts +1 -0
- package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/src/tools/FileEditTool/FileEditTool.ts +625 -0
- package/src/tools/FileEditTool/UI.tsx +289 -0
- package/src/tools/FileEditTool/constants.ts +11 -0
- package/src/tools/FileEditTool/prompt.ts +28 -0
- package/src/tools/FileEditTool/types.ts +85 -0
- package/src/tools/FileEditTool/utils.ts +775 -0
- package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/src/tools/FileReadTool/UI.tsx +185 -0
- package/src/tools/FileReadTool/imageProcessor.ts +94 -0
- package/src/tools/FileReadTool/limits.ts +92 -0
- package/src/tools/FileReadTool/prompt.ts +49 -0
- package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/src/tools/FileWriteTool/UI.tsx +405 -0
- package/src/tools/FileWriteTool/prompt.ts +18 -0
- package/src/tools/GlobTool/GlobTool.ts +198 -0
- package/src/tools/GlobTool/UI.tsx +63 -0
- package/src/tools/GlobTool/prompt.ts +7 -0
- package/src/tools/GrepTool/GrepTool.ts +577 -0
- package/src/tools/GrepTool/UI.tsx +201 -0
- package/src/tools/GrepTool/prompt.ts +18 -0
- package/src/tools/LSPTool/LSPTool.ts +860 -0
- package/src/tools/LSPTool/UI.tsx +228 -0
- package/src/tools/LSPTool/formatters.ts +592 -0
- package/src/tools/LSPTool/prompt.ts +21 -0
- package/src/tools/LSPTool/schemas.ts +215 -0
- package/src/tools/LSPTool/symbolContext.ts +90 -0
- package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/src/tools/MCPTool/MCPTool.ts +77 -0
- package/src/tools/MCPTool/UI.tsx +403 -0
- package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/src/tools/MCPTool/prompt.ts +3 -0
- package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/src/tools/NotebookEditTool/UI.tsx +93 -0
- package/src/tools/NotebookEditTool/constants.ts +2 -0
- package/src/tools/NotebookEditTool/prompt.ts +3 -0
- package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/src/tools/PowerShellTool/UI.tsx +131 -0
- package/src/tools/PowerShellTool/clmTypes.ts +211 -0
- package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/src/tools/PowerShellTool/commonParameters.ts +30 -0
- package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/src/tools/PowerShellTool/gitSafety.ts +176 -0
- package/src/tools/PowerShellTool/modeValidation.ts +404 -0
- package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/src/tools/PowerShellTool/prompt.ts +145 -0
- package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/src/tools/PowerShellTool/toolName.ts +2 -0
- package/src/tools/REPLTool/constants.ts +46 -0
- package/src/tools/REPLTool/primitiveTools.ts +39 -0
- package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/src/tools/ScheduleCronTool/UI.tsx +60 -0
- package/src/tools/ScheduleCronTool/prompt.ts +135 -0
- package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/src/tools/SendMessageTool/UI.tsx +31 -0
- package/src/tools/SendMessageTool/constants.ts +1 -0
- package/src/tools/SendMessageTool/prompt.ts +49 -0
- package/src/tools/SkillTool/SkillTool.ts +1108 -0
- package/src/tools/SkillTool/UI.tsx +128 -0
- package/src/tools/SkillTool/constants.ts +1 -0
- package/src/tools/SkillTool/prompt.ts +241 -0
- package/src/tools/SleepTool/prompt.ts +17 -0
- package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/src/tools/TaskCreateTool/constants.ts +1 -0
- package/src/tools/TaskCreateTool/prompt.ts +56 -0
- package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/src/tools/TaskGetTool/constants.ts +1 -0
- package/src/tools/TaskGetTool/prompt.ts +24 -0
- package/src/tools/TaskListTool/TaskListTool.ts +116 -0
- package/src/tools/TaskListTool/constants.ts +1 -0
- package/src/tools/TaskListTool/prompt.ts +49 -0
- package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/src/tools/TaskOutputTool/constants.ts +1 -0
- package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/src/tools/TaskStopTool/UI.tsx +41 -0
- package/src/tools/TaskStopTool/prompt.ts +8 -0
- package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/src/tools/TaskUpdateTool/constants.ts +1 -0
- package/src/tools/TaskUpdateTool/prompt.ts +77 -0
- package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/src/tools/TeamCreateTool/UI.tsx +6 -0
- package/src/tools/TeamCreateTool/constants.ts +1 -0
- package/src/tools/TeamCreateTool/prompt.ts +113 -0
- package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/src/tools/TeamDeleteTool/UI.tsx +20 -0
- package/src/tools/TeamDeleteTool/constants.ts +1 -0
- package/src/tools/TeamDeleteTool/prompt.ts +16 -0
- package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/src/tools/TodoWriteTool/constants.ts +1 -0
- package/src/tools/TodoWriteTool/prompt.ts +184 -0
- package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/src/tools/ToolSearchTool/constants.ts +1 -0
- package/src/tools/ToolSearchTool/prompt.ts +121 -0
- package/src/tools/TungstenTool/TungstenTool.js +2 -0
- package/src/tools/TungstenTool/TungstenTool.ts +1 -0
- package/src/tools/WebFetchTool/UI.tsx +72 -0
- package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/src/tools/WebFetchTool/preapproved.ts +166 -0
- package/src/tools/WebFetchTool/prompt.ts +46 -0
- package/src/tools/WebFetchTool/utils.ts +530 -0
- package/src/tools/WebSearchTool/UI.tsx +101 -0
- package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/src/tools/WebSearchTool/prompt.ts +34 -0
- package/src/tools/shared/gitOperationTracking.ts +277 -0
- package/src/tools/shared/spawnMultiAgent.ts +1093 -0
- package/src/tools/testing/TestingPermissionTool.tsx +74 -0
- package/src/tools/utils.ts +40 -0
- package/src/tools.ts +389 -0
- package/src/types/command.ts +216 -0
- package/src/types/connectorText.js +5 -0
- package/src/types/connectorText.ts +1 -0
- package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
- package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
- package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
- package/src/types/generated/google/protobuf/timestamp.ts +187 -0
- package/src/types/hooks.ts +290 -0
- package/src/types/ids.ts +44 -0
- package/src/types/logs.ts +330 -0
- package/src/types/permissions.ts +441 -0
- package/src/types/plugin.ts +363 -0
- package/src/types/textInputTypes.ts +387 -0
- package/src/upstreamproxy/relay.ts +455 -0
- package/src/upstreamproxy/upstreamproxy.ts +285 -0
- package/src/utils/CircularBuffer.ts +84 -0
- package/src/utils/Cursor.ts +1530 -0
- package/src/utils/QueryGuard.ts +121 -0
- package/src/utils/Shell.ts +474 -0
- package/src/utils/ShellCommand.ts +465 -0
- package/src/utils/abortController.ts +99 -0
- package/src/utils/activityManager.ts +164 -0
- package/src/utils/advisor.ts +145 -0
- package/src/utils/agentContext.ts +178 -0
- package/src/utils/agentId.ts +99 -0
- package/src/utils/agentSwarmsEnabled.ts +44 -0
- package/src/utils/agenticSessionSearch.ts +307 -0
- package/src/utils/analyzeContext.ts +1382 -0
- package/src/utils/ansiToPng.ts +334 -0
- package/src/utils/ansiToSvg.ts +272 -0
- package/src/utils/api.ts +718 -0
- package/src/utils/apiPreconnect.ts +72 -0
- package/src/utils/appleTerminalBackup.ts +124 -0
- package/src/utils/argumentSubstitution.ts +145 -0
- package/src/utils/array.ts +13 -0
- package/src/utils/asciicast.ts +239 -0
- package/src/utils/attachments.ts +3997 -0
- package/src/utils/attribution.ts +393 -0
- package/src/utils/auth.ts +2007 -0
- package/src/utils/authFileDescriptor.ts +196 -0
- package/src/utils/authPortable.ts +19 -0
- package/src/utils/autoModeDenials.ts +26 -0
- package/src/utils/autoRunIssue.tsx +122 -0
- package/src/utils/autoUpdater.ts +562 -0
- package/src/utils/aws.ts +74 -0
- package/src/utils/awsAuthStatusManager.ts +81 -0
- package/src/utils/background/remote/preconditions.ts +235 -0
- package/src/utils/background/remote/remoteSession.ts +98 -0
- package/src/utils/backgroundHousekeeping.ts +94 -0
- package/src/utils/bash/ParsedCommand.ts +318 -0
- package/src/utils/bash/ShellSnapshot.ts +582 -0
- package/src/utils/bash/ast.ts +2679 -0
- package/src/utils/bash/bashParser.ts +4436 -0
- package/src/utils/bash/bashPipeCommand.ts +294 -0
- package/src/utils/bash/commands.ts +1339 -0
- package/src/utils/bash/heredoc.ts +733 -0
- package/src/utils/bash/parser.ts +230 -0
- package/src/utils/bash/prefix.ts +204 -0
- package/src/utils/bash/registry.ts +53 -0
- package/src/utils/bash/shellCompletion.ts +259 -0
- package/src/utils/bash/shellPrefix.ts +28 -0
- package/src/utils/bash/shellQuote.ts +304 -0
- package/src/utils/bash/shellQuoting.ts +128 -0
- package/src/utils/bash/specs/alias.ts +14 -0
- package/src/utils/bash/specs/index.ts +18 -0
- package/src/utils/bash/specs/nohup.ts +13 -0
- package/src/utils/bash/specs/pyright.ts +91 -0
- package/src/utils/bash/specs/sleep.ts +13 -0
- package/src/utils/bash/specs/srun.ts +31 -0
- package/src/utils/bash/specs/time.ts +13 -0
- package/src/utils/bash/specs/timeout.ts +20 -0
- package/src/utils/bash/treeSitterAnalysis.ts +506 -0
- package/src/utils/betas.ts +438 -0
- package/src/utils/billing.ts +78 -0
- package/src/utils/binaryCheck.ts +53 -0
- package/src/utils/browser.ts +68 -0
- package/src/utils/bufferedWriter.ts +100 -0
- package/src/utils/bundledMode.ts +22 -0
- package/src/utils/caCerts.ts +115 -0
- package/src/utils/caCertsConfig.ts +88 -0
- package/src/utils/cachePaths.ts +38 -0
- package/src/utils/classifierApprovals.ts +88 -0
- package/src/utils/classifierApprovalsHook.ts +17 -0
- package/src/utils/claudeCodeHints.ts +193 -0
- package/src/utils/claudeDesktop.ts +152 -0
- package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/src/utils/claudeInChrome/common.ts +540 -0
- package/src/utils/claudeInChrome/mcpServer.ts +293 -0
- package/src/utils/claudeInChrome/prompt.ts +83 -0
- package/src/utils/claudeInChrome/setup.ts +400 -0
- package/src/utils/claudeInChrome/setupPortable.ts +233 -0
- package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/src/utils/claudemd.ts +1479 -0
- package/src/utils/cleanup.ts +602 -0
- package/src/utils/cleanupRegistry.ts +25 -0
- package/src/utils/cliArgs.ts +60 -0
- package/src/utils/cliHighlight.ts +54 -0
- package/src/utils/codeIndexing.ts +206 -0
- package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/src/utils/collapseHookSummaries.ts +59 -0
- package/src/utils/collapseReadSearch.ts +1109 -0
- package/src/utils/collapseTeammateShutdowns.ts +55 -0
- package/src/utils/combinedAbortSignal.ts +47 -0
- package/src/utils/commandLifecycle.ts +21 -0
- package/src/utils/commitAttribution.ts +961 -0
- package/src/utils/completionCache.ts +166 -0
- package/src/utils/computerUse/appNames.ts +196 -0
- package/src/utils/computerUse/cleanup.ts +86 -0
- package/src/utils/computerUse/common.ts +61 -0
- package/src/utils/computerUse/computerUseLock.ts +215 -0
- package/src/utils/computerUse/drainRunLoop.ts +79 -0
- package/src/utils/computerUse/escHotkey.ts +54 -0
- package/src/utils/computerUse/executor.ts +658 -0
- package/src/utils/computerUse/gates.ts +72 -0
- package/src/utils/computerUse/hostAdapter.ts +69 -0
- package/src/utils/computerUse/inputLoader.ts +30 -0
- package/src/utils/computerUse/mcpServer.ts +106 -0
- package/src/utils/computerUse/setup.ts +53 -0
- package/src/utils/computerUse/swiftLoader.ts +23 -0
- package/src/utils/computerUse/toolRendering.tsx +125 -0
- package/src/utils/computerUse/wrapper.tsx +336 -0
- package/src/utils/concurrentSessions.ts +204 -0
- package/src/utils/config.ts +1817 -0
- package/src/utils/configConstants.ts +21 -0
- package/src/utils/contentArray.ts +51 -0
- package/src/utils/context.ts +221 -0
- package/src/utils/contextAnalysis.ts +272 -0
- package/src/utils/contextSuggestions.ts +235 -0
- package/src/utils/controlMessageCompat.ts +32 -0
- package/src/utils/conversationRecovery.ts +597 -0
- package/src/utils/cron.ts +308 -0
- package/src/utils/cronJitterConfig.ts +75 -0
- package/src/utils/cronScheduler.ts +565 -0
- package/src/utils/cronTasks.ts +458 -0
- package/src/utils/cronTasksLock.ts +195 -0
- package/src/utils/crossProjectResume.ts +75 -0
- package/src/utils/crypto.ts +13 -0
- package/src/utils/cwd.ts +32 -0
- package/src/utils/debug.ts +268 -0
- package/src/utils/debugFilter.ts +157 -0
- package/src/utils/deepLink/banner.ts +123 -0
- package/src/utils/deepLink/parseDeepLink.ts +170 -0
- package/src/utils/deepLink/protocolHandler.ts +136 -0
- package/src/utils/deepLink/registerProtocol.ts +348 -0
- package/src/utils/deepLink/terminalLauncher.ts +557 -0
- package/src/utils/deepLink/terminalPreference.ts +54 -0
- package/src/utils/desktopDeepLink.ts +236 -0
- package/src/utils/detectRepository.ts +178 -0
- package/src/utils/diagLogs.ts +94 -0
- package/src/utils/diff.ts +177 -0
- package/src/utils/directMemberMessage.ts +69 -0
- package/src/utils/displayTags.ts +51 -0
- package/src/utils/doctorContextWarnings.ts +265 -0
- package/src/utils/doctorDiagnostic.ts +625 -0
- package/src/utils/dxt/helpers.ts +88 -0
- package/src/utils/dxt/zip.ts +226 -0
- package/src/utils/earlyInput.ts +191 -0
- package/src/utils/editor.ts +183 -0
- package/src/utils/effort.ts +329 -0
- package/src/utils/embeddedTools.ts +29 -0
- package/src/utils/env.ts +347 -0
- package/src/utils/envDynamic.ts +151 -0
- package/src/utils/envUtils.ts +183 -0
- package/src/utils/envValidation.ts +38 -0
- package/src/utils/errorLogSink.ts +235 -0
- package/src/utils/errors.ts +238 -0
- package/src/utils/exampleCommands.ts +184 -0
- package/src/utils/execFileNoThrow.ts +150 -0
- package/src/utils/execFileNoThrowPortable.ts +89 -0
- package/src/utils/execSyncWrapper.ts +38 -0
- package/src/utils/exportRenderer.tsx +98 -0
- package/src/utils/extraUsage.ts +23 -0
- package/src/utils/fastMode.ts +532 -0
- package/src/utils/file.ts +584 -0
- package/src/utils/fileHistory.ts +1115 -0
- package/src/utils/fileOperationAnalytics.ts +71 -0
- package/src/utils/filePersistence/filePersistence.ts +287 -0
- package/src/utils/filePersistence/outputsScanner.ts +126 -0
- package/src/utils/fileRead.ts +102 -0
- package/src/utils/fileReadCache.ts +96 -0
- package/src/utils/fileStateCache.ts +142 -0
- package/src/utils/findExecutable.ts +17 -0
- package/src/utils/fingerprint.ts +76 -0
- package/src/utils/forkedAgent.ts +689 -0
- package/src/utils/format.ts +308 -0
- package/src/utils/formatBriefTimestamp.ts +81 -0
- package/src/utils/fpsTracker.ts +47 -0
- package/src/utils/frontmatterParser.ts +370 -0
- package/src/utils/fsOperations.ts +770 -0
- package/src/utils/fullscreen.ts +202 -0
- package/src/utils/generatedFiles.ts +136 -0
- package/src/utils/generators.ts +88 -0
- package/src/utils/genericProcessUtils.ts +184 -0
- package/src/utils/getWorktreePaths.ts +70 -0
- package/src/utils/getWorktreePathsPortable.ts +27 -0
- package/src/utils/ghPrStatus.ts +106 -0
- package/src/utils/git/gitConfigParser.ts +277 -0
- package/src/utils/git/gitFilesystem.ts +699 -0
- package/src/utils/git/gitignore.ts +99 -0
- package/src/utils/git.ts +926 -0
- package/src/utils/gitDiff.ts +532 -0
- package/src/utils/gitSettings.ts +18 -0
- package/src/utils/github/ghAuthStatus.ts +29 -0
- package/src/utils/githubRepoPathMapping.ts +162 -0
- package/src/utils/glob.ts +130 -0
- package/src/utils/gracefulShutdown.ts +529 -0
- package/src/utils/groupToolUses.ts +182 -0
- package/src/utils/handlePromptSubmit.ts +610 -0
- package/src/utils/hash.ts +46 -0
- package/src/utils/headlessProfiler.ts +178 -0
- package/src/utils/heapDumpService.ts +303 -0
- package/src/utils/heatmap.ts +198 -0
- package/src/utils/highlightMatch.tsx +28 -0
- package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/src/utils/hooks/execAgentHook.ts +339 -0
- package/src/utils/hooks/execHttpHook.ts +242 -0
- package/src/utils/hooks/execPromptHook.ts +211 -0
- package/src/utils/hooks/fileChangedWatcher.ts +191 -0
- package/src/utils/hooks/hookEvents.ts +192 -0
- package/src/utils/hooks/hookHelpers.ts +83 -0
- package/src/utils/hooks/hooksConfigManager.ts +400 -0
- package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/src/utils/hooks/hooksSettings.ts +271 -0
- package/src/utils/hooks/postSamplingHooks.ts +70 -0
- package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/src/utils/hooks/registerSkillHooks.ts +64 -0
- package/src/utils/hooks/sessionHooks.ts +447 -0
- package/src/utils/hooks/skillImprovement.ts +267 -0
- package/src/utils/hooks/ssrfGuard.ts +294 -0
- package/src/utils/hooks.ts +5022 -0
- package/src/utils/horizontalScroll.ts +137 -0
- package/src/utils/http.ts +136 -0
- package/src/utils/hyperlink.ts +39 -0
- package/src/utils/iTermBackup.ts +73 -0
- package/src/utils/ide.ts +1494 -0
- package/src/utils/idePathConversion.ts +90 -0
- package/src/utils/idleTimeout.ts +53 -0
- package/src/utils/imagePaste.ts +416 -0
- package/src/utils/imageResizer.ts +880 -0
- package/src/utils/imageStore.ts +167 -0
- package/src/utils/imageValidation.ts +104 -0
- package/src/utils/immediateCommand.ts +15 -0
- package/src/utils/inProcessTeammateHelpers.ts +102 -0
- package/src/utils/ink.ts +26 -0
- package/src/utils/intl.ts +94 -0
- package/src/utils/jetbrains.ts +191 -0
- package/src/utils/json.ts +277 -0
- package/src/utils/jsonRead.ts +16 -0
- package/src/utils/keyboardShortcuts.ts +14 -0
- package/src/utils/lazySchema.ts +8 -0
- package/src/utils/listSessionsImpl.ts +454 -0
- package/src/utils/localInstaller.ts +162 -0
- package/src/utils/lockfile.ts +43 -0
- package/src/utils/log.ts +362 -0
- package/src/utils/logoV2Utils.ts +350 -0
- package/src/utils/mailbox.ts +73 -0
- package/src/utils/managedEnv.ts +199 -0
- package/src/utils/managedEnvConstants.ts +191 -0
- package/src/utils/markdown.ts +381 -0
- package/src/utils/markdownConfigLoader.ts +600 -0
- package/src/utils/mcp/dateTimeParser.ts +121 -0
- package/src/utils/mcp/elicitationValidation.ts +336 -0
- package/src/utils/mcpInstructionsDelta.ts +130 -0
- package/src/utils/mcpOutputStorage.ts +189 -0
- package/src/utils/mcpValidation.ts +208 -0
- package/src/utils/mcpWebSocketTransport.ts +200 -0
- package/src/utils/memoize.ts +269 -0
- package/src/utils/memory/types.ts +12 -0
- package/src/utils/memory/versions.ts +8 -0
- package/src/utils/memoryFileDetection.ts +289 -0
- package/src/utils/messagePredicates.ts +8 -0
- package/src/utils/messageQueueManager.ts +547 -0
- package/src/utils/messages/mappers.ts +290 -0
- package/src/utils/messages/systemInit.ts +96 -0
- package/src/utils/messages.ts +5512 -0
- package/src/utils/model/agent.ts +157 -0
- package/src/utils/model/aliases.ts +25 -0
- package/src/utils/model/antModels.ts +64 -0
- package/src/utils/model/bedrock.ts +265 -0
- package/src/utils/model/check1mAccess.ts +72 -0
- package/src/utils/model/configs.ts +118 -0
- package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/src/utils/model/deprecation.ts +101 -0
- package/src/utils/model/model.ts +634 -0
- package/src/utils/model/modelAllowlist.ts +170 -0
- package/src/utils/model/modelCapabilities.ts +118 -0
- package/src/utils/model/modelOptions.ts +540 -0
- package/src/utils/model/modelStrings.ts +166 -0
- package/src/utils/model/modelSupportOverrides.ts +50 -0
- package/src/utils/model/providers.ts +46 -0
- package/src/utils/model/validateModel.ts +159 -0
- package/src/utils/modelCost.ts +235 -0
- package/src/utils/modifiers.ts +36 -0
- package/src/utils/mtls.ts +179 -0
- package/src/utils/nativeInstaller/download.ts +523 -0
- package/src/utils/nativeInstaller/index.ts +18 -0
- package/src/utils/nativeInstaller/installer.ts +1708 -0
- package/src/utils/nativeInstaller/packageManagers.ts +336 -0
- package/src/utils/nativeInstaller/pidLock.ts +433 -0
- package/src/utils/notebook.ts +224 -0
- package/src/utils/objectGroupBy.ts +18 -0
- package/src/utils/pasteStore.ts +104 -0
- package/src/utils/path.ts +155 -0
- package/src/utils/pdf.ts +300 -0
- package/src/utils/pdfUtils.ts +70 -0
- package/src/utils/peerAddress.ts +21 -0
- package/src/utils/permissions/PermissionMode.ts +141 -0
- package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/src/utils/permissions/PermissionResult.ts +35 -0
- package/src/utils/permissions/PermissionRule.ts +40 -0
- package/src/utils/permissions/PermissionUpdate.ts +389 -0
- package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/src/utils/permissions/autoModeState.ts +39 -0
- package/src/utils/permissions/bashClassifier.ts +61 -0
- package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/src/utils/permissions/classifierDecision.ts +98 -0
- package/src/utils/permissions/classifierShared.ts +39 -0
- package/src/utils/permissions/dangerousPatterns.ts +80 -0
- package/src/utils/permissions/denialTracking.ts +45 -0
- package/src/utils/permissions/filesystem.ts +1777 -0
- package/src/utils/permissions/getNextPermissionMode.ts +101 -0
- package/src/utils/permissions/pathValidation.ts +485 -0
- package/src/utils/permissions/permissionExplainer.ts +250 -0
- package/src/utils/permissions/permissionRuleParser.ts +198 -0
- package/src/utils/permissions/permissionSetup.ts +1532 -0
- package/src/utils/permissions/permissions.ts +1486 -0
- package/src/utils/permissions/permissionsLoader.ts +296 -0
- package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/src/utils/permissions/shellRuleMatching.ts +228 -0
- package/src/utils/permissions/yoloClassifier.ts +1495 -0
- package/src/utils/planModeV2.ts +95 -0
- package/src/utils/plans.ts +397 -0
- package/src/utils/platform.ts +150 -0
- package/src/utils/plugins/addDirPluginSettings.ts +71 -0
- package/src/utils/plugins/cacheUtils.ts +196 -0
- package/src/utils/plugins/dependencyResolver.ts +305 -0
- package/src/utils/plugins/fetchTelemetry.ts +135 -0
- package/src/utils/plugins/gitAvailability.ts +69 -0
- package/src/utils/plugins/headlessPluginInstall.ts +174 -0
- package/src/utils/plugins/hintRecommendation.ts +164 -0
- package/src/utils/plugins/installCounts.ts +292 -0
- package/src/utils/plugins/installedPluginsManager.ts +1268 -0
- package/src/utils/plugins/loadPluginAgents.ts +348 -0
- package/src/utils/plugins/loadPluginCommands.ts +946 -0
- package/src/utils/plugins/loadPluginHooks.ts +287 -0
- package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/src/utils/plugins/lspPluginIntegration.ts +387 -0
- package/src/utils/plugins/lspRecommendation.ts +374 -0
- package/src/utils/plugins/managedPlugins.ts +27 -0
- package/src/utils/plugins/marketplaceHelpers.ts +592 -0
- package/src/utils/plugins/marketplaceManager.ts +2643 -0
- package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/src/utils/plugins/mcpbHandler.ts +968 -0
- package/src/utils/plugins/officialMarketplace.ts +25 -0
- package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/src/utils/plugins/performStartupChecks.tsx +70 -0
- package/src/utils/plugins/pluginAutoupdate.ts +284 -0
- package/src/utils/plugins/pluginBlocklist.ts +127 -0
- package/src/utils/plugins/pluginDirectories.ts +178 -0
- package/src/utils/plugins/pluginFlagging.ts +208 -0
- package/src/utils/plugins/pluginIdentifier.ts +123 -0
- package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/src/utils/plugins/pluginLoader.ts +3302 -0
- package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/src/utils/plugins/pluginPolicy.ts +20 -0
- package/src/utils/plugins/pluginStartupCheck.ts +341 -0
- package/src/utils/plugins/pluginVersioning.ts +157 -0
- package/src/utils/plugins/reconciler.ts +265 -0
- package/src/utils/plugins/refresh.ts +215 -0
- package/src/utils/plugins/schemas.ts +1681 -0
- package/src/utils/plugins/validatePlugin.ts +903 -0
- package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/src/utils/plugins/zipCache.ts +406 -0
- package/src/utils/plugins/zipCacheAdapters.ts +164 -0
- package/src/utils/powershell/dangerousCmdlets.ts +185 -0
- package/src/utils/powershell/parser.ts +1804 -0
- package/src/utils/powershell/staticPrefix.ts +316 -0
- package/src/utils/preflightChecks.tsx +151 -0
- package/src/utils/privacyLevel.ts +55 -0
- package/src/utils/process.ts +68 -0
- package/src/utils/processUserInput/processBashCommand.tsx +140 -0
- package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/src/utils/processUserInput/processTextPrompt.ts +100 -0
- package/src/utils/processUserInput/processUserInput.ts +605 -0
- package/src/utils/profilerBase.ts +46 -0
- package/src/utils/promptCategory.ts +49 -0
- package/src/utils/promptEditor.ts +188 -0
- package/src/utils/promptShellExecution.ts +183 -0
- package/src/utils/proxy.ts +426 -0
- package/src/utils/queryContext.ts +179 -0
- package/src/utils/queryHelpers.ts +552 -0
- package/src/utils/queryProfiler.ts +301 -0
- package/src/utils/queueProcessor.ts +95 -0
- package/src/utils/readEditContext.ts +227 -0
- package/src/utils/readFileInRange.ts +383 -0
- package/src/utils/releaseNotes.ts +360 -0
- package/src/utils/renderOptions.ts +77 -0
- package/src/utils/ripgrep.ts +679 -0
- package/src/utils/sandbox/sandbox-adapter.ts +985 -0
- package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/src/utils/sanitization.ts +91 -0
- package/src/utils/screenshotClipboard.ts +121 -0
- package/src/utils/sdkEventQueue.ts +134 -0
- package/src/utils/secureStorage/fallbackStorage.ts +70 -0
- package/src/utils/secureStorage/index.ts +17 -0
- package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/src/utils/secureStorage/plainTextStorage.ts +84 -0
- package/src/utils/semanticBoolean.ts +29 -0
- package/src/utils/semanticNumber.ts +36 -0
- package/src/utils/semver.ts +59 -0
- package/src/utils/sequential.ts +56 -0
- package/src/utils/sessionActivity.ts +133 -0
- package/src/utils/sessionEnvVars.ts +22 -0
- package/src/utils/sessionEnvironment.ts +166 -0
- package/src/utils/sessionFileAccessHooks.ts +250 -0
- package/src/utils/sessionIngressAuth.ts +140 -0
- package/src/utils/sessionRestore.ts +551 -0
- package/src/utils/sessionStart.ts +232 -0
- package/src/utils/sessionState.ts +150 -0
- package/src/utils/sessionStorage.ts +5105 -0
- package/src/utils/sessionStoragePortable.ts +793 -0
- package/src/utils/sessionTitle.ts +129 -0
- package/src/utils/sessionUrl.ts +64 -0
- package/src/utils/set.ts +53 -0
- package/src/utils/settings/allErrors.ts +32 -0
- package/src/utils/settings/applySettingsChange.ts +92 -0
- package/src/utils/settings/changeDetector.ts +488 -0
- package/src/utils/settings/constants.ts +202 -0
- package/src/utils/settings/internalWrites.ts +37 -0
- package/src/utils/settings/managedPath.ts +34 -0
- package/src/utils/settings/mdm/constants.ts +81 -0
- package/src/utils/settings/mdm/rawRead.ts +130 -0
- package/src/utils/settings/mdm/settings.ts +316 -0
- package/src/utils/settings/permissionValidation.ts +262 -0
- package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/src/utils/settings/schemaOutput.ts +8 -0
- package/src/utils/settings/settings.ts +1015 -0
- package/src/utils/settings/settingsCache.ts +80 -0
- package/src/utils/settings/toolValidationConfig.ts +103 -0
- package/src/utils/settings/types.ts +1148 -0
- package/src/utils/settings/validateEditTool.ts +45 -0
- package/src/utils/settings/validation.ts +265 -0
- package/src/utils/settings/validationTips.ts +164 -0
- package/src/utils/shell/bashProvider.ts +255 -0
- package/src/utils/shell/outputLimits.ts +14 -0
- package/src/utils/shell/powershellDetection.ts +107 -0
- package/src/utils/shell/powershellProvider.ts +123 -0
- package/src/utils/shell/prefix.ts +367 -0
- package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/src/utils/shell/resolveDefaultShell.ts +14 -0
- package/src/utils/shell/shellProvider.ts +33 -0
- package/src/utils/shell/shellToolUtils.ts +22 -0
- package/src/utils/shell/specPrefix.ts +241 -0
- package/src/utils/shellConfig.ts +167 -0
- package/src/utils/sideQuery.ts +222 -0
- package/src/utils/sideQuestion.ts +155 -0
- package/src/utils/signal.ts +43 -0
- package/src/utils/sinks.ts +16 -0
- package/src/utils/skills/skillChangeDetector.ts +311 -0
- package/src/utils/slashCommandParsing.ts +60 -0
- package/src/utils/sleep.ts +84 -0
- package/src/utils/sliceAnsi.ts +91 -0
- package/src/utils/slowOperations.ts +286 -0
- package/src/utils/standaloneAgent.ts +23 -0
- package/src/utils/startupProfiler.ts +194 -0
- package/src/utils/staticRender.tsx +116 -0
- package/src/utils/stats.ts +1061 -0
- package/src/utils/statsCache.ts +434 -0
- package/src/utils/status.tsx +362 -0
- package/src/utils/statusNoticeDefinitions.tsx +198 -0
- package/src/utils/statusNoticeHelpers.ts +20 -0
- package/src/utils/stream.ts +76 -0
- package/src/utils/streamJsonStdoutGuard.ts +123 -0
- package/src/utils/streamlinedTransform.ts +201 -0
- package/src/utils/stringUtils.ts +235 -0
- package/src/utils/subprocessEnv.ts +99 -0
- package/src/utils/suggestions/commandSuggestions.ts +567 -0
- package/src/utils/suggestions/directoryCompletion.ts +263 -0
- package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/src/utils/suggestions/skillUsageTracking.ts +55 -0
- package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/src/utils/swarm/backends/ITermBackend.ts +370 -0
- package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/src/utils/swarm/backends/detection.ts +128 -0
- package/src/utils/swarm/backends/it2Setup.ts +245 -0
- package/src/utils/swarm/backends/registry.ts +464 -0
- package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/src/utils/swarm/backends/types.ts +311 -0
- package/src/utils/swarm/constants.ts +33 -0
- package/src/utils/swarm/inProcessRunner.ts +1552 -0
- package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/src/utils/swarm/permissionSync.ts +928 -0
- package/src/utils/swarm/reconnection.ts +119 -0
- package/src/utils/swarm/spawnInProcess.ts +328 -0
- package/src/utils/swarm/spawnUtils.ts +146 -0
- package/src/utils/swarm/teamHelpers.ts +683 -0
- package/src/utils/swarm/teammateInit.ts +129 -0
- package/src/utils/swarm/teammateLayoutManager.ts +107 -0
- package/src/utils/swarm/teammateModel.ts +10 -0
- package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/src/utils/systemDirectories.ts +74 -0
- package/src/utils/systemPrompt.ts +123 -0
- package/src/utils/systemPromptType.ts +14 -0
- package/src/utils/systemTheme.ts +119 -0
- package/src/utils/taggedId.ts +54 -0
- package/src/utils/task/TaskOutput.ts +390 -0
- package/src/utils/task/diskOutput.ts +451 -0
- package/src/utils/task/framework.ts +308 -0
- package/src/utils/task/outputFormatting.ts +38 -0
- package/src/utils/task/sdkProgress.ts +36 -0
- package/src/utils/tasks.ts +862 -0
- package/src/utils/teamDiscovery.ts +81 -0
- package/src/utils/teamMemoryOps.ts +88 -0
- package/src/utils/teammate.ts +292 -0
- package/src/utils/teammateContext.ts +96 -0
- package/src/utils/teammateMailbox.ts +1183 -0
- package/src/utils/telemetry/betaSessionTracing.ts +491 -0
- package/src/utils/telemetry/bigqueryExporter.ts +252 -0
- package/src/utils/telemetry/events.ts +75 -0
- package/src/utils/telemetry/instrumentation.ts +825 -0
- package/src/utils/telemetry/logger.ts +26 -0
- package/src/utils/telemetry/perfettoTracing.ts +1120 -0
- package/src/utils/telemetry/pluginTelemetry.ts +289 -0
- package/src/utils/telemetry/sessionTracing.ts +927 -0
- package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/src/utils/telemetryAttributes.ts +71 -0
- package/src/utils/teleport/api.ts +466 -0
- package/src/utils/teleport/environmentSelection.ts +77 -0
- package/src/utils/teleport/environments.ts +120 -0
- package/src/utils/teleport/gitBundle.ts +292 -0
- package/src/utils/teleport.tsx +1226 -0
- package/src/utils/tempfile.ts +31 -0
- package/src/utils/terminal.ts +131 -0
- package/src/utils/terminalPanel.ts +191 -0
- package/src/utils/textHighlighting.ts +166 -0
- package/src/utils/theme.ts +639 -0
- package/src/utils/thinking.ts +162 -0
- package/src/utils/timeouts.ts +39 -0
- package/src/utils/tmuxSocket.ts +427 -0
- package/src/utils/todo/types.ts +18 -0
- package/src/utils/tokenBudget.ts +73 -0
- package/src/utils/tokens.ts +261 -0
- package/src/utils/toolErrors.ts +132 -0
- package/src/utils/toolPool.ts +79 -0
- package/src/utils/toolResultStorage.ts +1040 -0
- package/src/utils/toolSchemaCache.ts +26 -0
- package/src/utils/toolSearch.ts +756 -0
- package/src/utils/transcriptSearch.ts +202 -0
- package/src/utils/treeify.ts +170 -0
- package/src/utils/truncate.ts +179 -0
- package/src/utils/ultraplan/ccrSession.ts +349 -0
- package/src/utils/ultraplan/keyword.ts +127 -0
- package/src/utils/ultraplan/prompt.txt +1 -0
- package/src/utils/unaryLogging.ts +39 -0
- package/src/utils/undercover.ts +89 -0
- package/src/utils/user.ts +194 -0
- package/src/utils/userAgent.ts +10 -0
- package/src/utils/userPromptKeywords.ts +27 -0
- package/src/utils/uuid.ts +27 -0
- package/src/utils/warningHandler.ts +121 -0
- package/src/utils/which.ts +82 -0
- package/src/utils/windowsPaths.ts +173 -0
- package/src/utils/withResolvers.ts +13 -0
- package/src/utils/words.ts +800 -0
- package/src/utils/workloadContext.ts +57 -0
- package/src/utils/worktree.ts +1519 -0
- package/src/utils/worktreeModeEnabled.ts +11 -0
- package/src/utils/xdg.ts +65 -0
- package/src/utils/xml.ts +16 -0
- package/src/utils/yaml.ts +15 -0
- package/src/utils/zodToJsonSchema.ts +23 -0
- package/src/vim/motions.ts +82 -0
- package/src/vim/operators.ts +556 -0
- package/src/vim/textObjects.ts +186 -0
- package/src/vim/transitions.ts +490 -0
- package/src/vim/types.ts +199 -0
- package/src/voice/voiceModeEnabled.ts +54 -0
- package/start.js +1 -0
|
@@ -0,0 +1,1157 @@
|
|
|
1
|
+
import { GrowthBook } from '@growthbook/growthbook'
|
|
2
|
+
import { isEqual, memoize } from 'lodash-es'
|
|
3
|
+
import {
|
|
4
|
+
getIsNonInteractiveSession,
|
|
5
|
+
getSessionTrustAccepted,
|
|
6
|
+
} from '../../bootstrap/state.js'
|
|
7
|
+
import { getGrowthBookClientKey } from '../../constants/keys.js'
|
|
8
|
+
import {
|
|
9
|
+
checkHasTrustDialogAccepted,
|
|
10
|
+
getGlobalConfig,
|
|
11
|
+
saveGlobalConfig,
|
|
12
|
+
} from '../../utils/config.js'
|
|
13
|
+
import { logForDebugging } from '../../utils/debug.js'
|
|
14
|
+
import { toError } from '../../utils/errors.js'
|
|
15
|
+
import { getAuthHeaders } from '../../utils/http.js'
|
|
16
|
+
import { logError } from '../../utils/log.js'
|
|
17
|
+
import { createSignal } from '../../utils/signal.js'
|
|
18
|
+
import { jsonStringify } from '../../utils/slowOperations.js'
|
|
19
|
+
import {
|
|
20
|
+
type GitHubActionsMetadata,
|
|
21
|
+
getUserForGrowthBook,
|
|
22
|
+
} from '../../utils/user.js'
|
|
23
|
+
import {
|
|
24
|
+
is1PEventLoggingEnabled,
|
|
25
|
+
logGrowthBookExperimentTo1P,
|
|
26
|
+
} from './firstPartyEventLogger.js'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* User attributes sent to GrowthBook for targeting.
|
|
30
|
+
* Uses UUID suffix (not Uuid) to align with GrowthBook conventions.
|
|
31
|
+
*/
|
|
32
|
+
export type GrowthBookUserAttributes = {
|
|
33
|
+
id: string
|
|
34
|
+
sessionId: string
|
|
35
|
+
deviceID: string
|
|
36
|
+
platform: 'win32' | 'darwin' | 'linux'
|
|
37
|
+
apiBaseUrlHost?: string
|
|
38
|
+
organizationUUID?: string
|
|
39
|
+
accountUUID?: string
|
|
40
|
+
userType?: string
|
|
41
|
+
subscriptionType?: string
|
|
42
|
+
rateLimitTier?: string
|
|
43
|
+
firstTokenTime?: number
|
|
44
|
+
email?: string
|
|
45
|
+
appVersion?: string
|
|
46
|
+
github?: GitHubActionsMetadata
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Malformed feature response from API that uses "value" instead of "defaultValue".
|
|
51
|
+
* This is a workaround until the API is fixed.
|
|
52
|
+
*/
|
|
53
|
+
type MalformedFeatureDefinition = {
|
|
54
|
+
value?: unknown
|
|
55
|
+
defaultValue?: unknown
|
|
56
|
+
[key: string]: unknown
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let client: GrowthBook | null = null
|
|
60
|
+
|
|
61
|
+
// Named handler refs so resetGrowthBook can remove them to prevent accumulation
|
|
62
|
+
let currentBeforeExitHandler: (() => void) | null = null
|
|
63
|
+
let currentExitHandler: (() => void) | null = null
|
|
64
|
+
|
|
65
|
+
// Track whether auth was available when the client was created
|
|
66
|
+
// This allows us to detect when we need to recreate with fresh auth headers
|
|
67
|
+
let clientCreatedWithAuth = false
|
|
68
|
+
|
|
69
|
+
// Store experiment data from payload for logging exposures later
|
|
70
|
+
type StoredExperimentData = {
|
|
71
|
+
experimentId: string
|
|
72
|
+
variationId: number
|
|
73
|
+
inExperiment?: boolean
|
|
74
|
+
hashAttribute?: string
|
|
75
|
+
hashValue?: string
|
|
76
|
+
}
|
|
77
|
+
const experimentDataByFeature = new Map<string, StoredExperimentData>()
|
|
78
|
+
|
|
79
|
+
// Cache for remote eval feature values - workaround for SDK not respecting remoteEval response
|
|
80
|
+
// The SDK's setForcedFeatures also doesn't work reliably with remoteEval
|
|
81
|
+
const remoteEvalFeatureValues = new Map<string, unknown>()
|
|
82
|
+
|
|
83
|
+
// Track features accessed before init that need exposure logging
|
|
84
|
+
const pendingExposures = new Set<string>()
|
|
85
|
+
|
|
86
|
+
// Track features that have already had their exposure logged this session (dedup)
|
|
87
|
+
// This prevents firing duplicate exposure events when getFeatureValue_CACHED_MAY_BE_STALE
|
|
88
|
+
// is called repeatedly in hot paths (e.g., isAutoMemoryEnabled in render loops)
|
|
89
|
+
const loggedExposures = new Set<string>()
|
|
90
|
+
|
|
91
|
+
// Track re-initialization promise for security gate checks
|
|
92
|
+
// When GrowthBook is re-initializing (e.g., after auth change), security gate checks
|
|
93
|
+
// should wait for init to complete to avoid returning stale values
|
|
94
|
+
let reinitializingPromise: Promise<unknown> | null = null
|
|
95
|
+
|
|
96
|
+
// Listeners notified when GrowthBook feature values refresh (initial init or
|
|
97
|
+
// periodic refresh). Use for systems that bake feature values into long-lived
|
|
98
|
+
// objects at construction time (e.g. firstPartyEventLogger reads
|
|
99
|
+
// tengu_1p_event_batch_config once and builds a LoggerProvider with it) and
|
|
100
|
+
// need to rebuild when config changes. Per-call readers like
|
|
101
|
+
// getEventSamplingConfig / isSinkKilled don't need this — they're already
|
|
102
|
+
// reactive.
|
|
103
|
+
//
|
|
104
|
+
// NOT cleared by resetGrowthBook — subscribers register once (typically in
|
|
105
|
+
// init.ts) and must survive auth-change resets.
|
|
106
|
+
type GrowthBookRefreshListener = () => void | Promise<void>
|
|
107
|
+
const refreshed = createSignal()
|
|
108
|
+
|
|
109
|
+
/** Call a listener with sync-throw and async-rejection both routed to logError. */
|
|
110
|
+
function callSafe(listener: GrowthBookRefreshListener): void {
|
|
111
|
+
try {
|
|
112
|
+
// Promise.resolve() normalizes sync returns and Promises so both
|
|
113
|
+
// sync throws (caught by outer try) and async rejections (caught
|
|
114
|
+
// by .catch) hit logError. Without the .catch, an async listener
|
|
115
|
+
// that rejects becomes an unhandled rejection — the try/catch
|
|
116
|
+
// only sees the Promise, not its eventual rejection.
|
|
117
|
+
void Promise.resolve(listener()).catch(e => {
|
|
118
|
+
logError(e)
|
|
119
|
+
})
|
|
120
|
+
} catch (e) {
|
|
121
|
+
logError(e)
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Register a callback to fire when GrowthBook feature values refresh.
|
|
127
|
+
* Returns an unsubscribe function.
|
|
128
|
+
*
|
|
129
|
+
* If init has already completed with features by the time this is called
|
|
130
|
+
* (remoteEvalFeatureValues is populated), the listener fires once on the
|
|
131
|
+
* next microtask. This catch-up handles the race where GB's network response
|
|
132
|
+
* lands before the REPL's useEffect commits — on external builds with fast
|
|
133
|
+
* networks and MCP-heavy configs, init can finish in ~100ms while REPL mount
|
|
134
|
+
* takes ~600ms (see #20951 external-build trace at 30.540 vs 31.046).
|
|
135
|
+
*
|
|
136
|
+
* Change detection is on the subscriber: the callback fires on every refresh;
|
|
137
|
+
* use isEqual against your last-seen config to decide whether to act.
|
|
138
|
+
*/
|
|
139
|
+
export function onGrowthBookRefresh(
|
|
140
|
+
listener: GrowthBookRefreshListener,
|
|
141
|
+
): () => void {
|
|
142
|
+
let subscribed = true
|
|
143
|
+
const unsubscribe = refreshed.subscribe(() => callSafe(listener))
|
|
144
|
+
if (remoteEvalFeatureValues.size > 0) {
|
|
145
|
+
queueMicrotask(() => {
|
|
146
|
+
// Re-check: listener may have been removed, or resetGrowthBook may have
|
|
147
|
+
// cleared the Map, between registration and this microtask running.
|
|
148
|
+
if (subscribed && remoteEvalFeatureValues.size > 0) {
|
|
149
|
+
callSafe(listener)
|
|
150
|
+
}
|
|
151
|
+
})
|
|
152
|
+
}
|
|
153
|
+
return () => {
|
|
154
|
+
subscribed = false
|
|
155
|
+
unsubscribe()
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Parse env var overrides for GrowthBook features.
|
|
161
|
+
* Set CLAUDE_INTERNAL_FC_OVERRIDES to a JSON object mapping feature keys to values
|
|
162
|
+
* to bypass remote eval and disk cache. Useful for eval harnesses that need to
|
|
163
|
+
* test specific feature flag configurations. Only active when USER_TYPE is 'ant'.
|
|
164
|
+
*
|
|
165
|
+
* Example: CLAUDE_INTERNAL_FC_OVERRIDES='{"my_feature": true, "my_config": {"key": "val"}}'
|
|
166
|
+
*/
|
|
167
|
+
let envOverrides: Record<string, unknown> | null = null
|
|
168
|
+
let envOverridesParsed = false
|
|
169
|
+
|
|
170
|
+
function getEnvOverrides(): Record<string, unknown> | null {
|
|
171
|
+
if (!envOverridesParsed) {
|
|
172
|
+
envOverridesParsed = true
|
|
173
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
174
|
+
const raw = process.env.CLAUDE_INTERNAL_FC_OVERRIDES
|
|
175
|
+
if (raw) {
|
|
176
|
+
try {
|
|
177
|
+
envOverrides = JSON.parse(raw) as Record<string, unknown>
|
|
178
|
+
logForDebugging(
|
|
179
|
+
`GrowthBook: Using env var overrides for ${Object.keys(envOverrides!).length} features: ${Object.keys(envOverrides!).join(', ')}`,
|
|
180
|
+
)
|
|
181
|
+
} catch {
|
|
182
|
+
logError(
|
|
183
|
+
new Error(
|
|
184
|
+
`GrowthBook: Failed to parse CLAUDE_INTERNAL_FC_OVERRIDES: ${raw}`,
|
|
185
|
+
),
|
|
186
|
+
)
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return envOverrides
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Check if a feature has an env-var override (CLAUDE_INTERNAL_FC_OVERRIDES).
|
|
196
|
+
* When true, _CACHED_MAY_BE_STALE will return the override without touching
|
|
197
|
+
* disk or network — callers can skip awaiting init for that feature.
|
|
198
|
+
*/
|
|
199
|
+
export function hasGrowthBookEnvOverride(feature: string): boolean {
|
|
200
|
+
const overrides = getEnvOverrides()
|
|
201
|
+
return overrides !== null && feature in overrides
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Local config overrides set via /config Gates tab (ant-only). Checked after
|
|
206
|
+
* env-var overrides — env wins so eval harnesses remain deterministic. Unlike
|
|
207
|
+
* getEnvOverrides this is not memoized: the user can change overrides at
|
|
208
|
+
* runtime, and getGlobalConfig() is already memory-cached (pointer-chase)
|
|
209
|
+
* until the next saveGlobalConfig() invalidates it.
|
|
210
|
+
*/
|
|
211
|
+
function getConfigOverrides(): Record<string, unknown> | undefined {
|
|
212
|
+
if (process.env.USER_TYPE !== 'ant') return undefined
|
|
213
|
+
try {
|
|
214
|
+
return getGlobalConfig().growthBookOverrides
|
|
215
|
+
} catch {
|
|
216
|
+
// getGlobalConfig() throws before configReadingAllowed is set (early
|
|
217
|
+
// main.tsx startup path). Same degrade as the disk-cache fallback below.
|
|
218
|
+
return undefined
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Enumerate all known GrowthBook features and their current resolved values
|
|
224
|
+
* (not including overrides). In-memory payload first, disk cache fallback —
|
|
225
|
+
* same priority as the getters. Used by the /config Gates tab.
|
|
226
|
+
*/
|
|
227
|
+
export function getAllGrowthBookFeatures(): Record<string, unknown> {
|
|
228
|
+
if (remoteEvalFeatureValues.size > 0) {
|
|
229
|
+
return Object.fromEntries(remoteEvalFeatureValues)
|
|
230
|
+
}
|
|
231
|
+
return getGlobalConfig().cachedGrowthBookFeatures ?? {}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
export function getGrowthBookConfigOverrides(): Record<string, unknown> {
|
|
235
|
+
return getConfigOverrides() ?? {}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Set or clear a single config override. Pass undefined to clear.
|
|
240
|
+
* Fires onGrowthBookRefresh listeners so systems that bake gate values into
|
|
241
|
+
* long-lived objects (useMainLoopModel, useSkillsChange, etc.) rebuild —
|
|
242
|
+
* otherwise overriding e.g. tengu_ant_model_override wouldn't actually
|
|
243
|
+
* change the model until the next periodic refresh.
|
|
244
|
+
*/
|
|
245
|
+
export function setGrowthBookConfigOverride(
|
|
246
|
+
feature: string,
|
|
247
|
+
value: unknown,
|
|
248
|
+
): void {
|
|
249
|
+
if (process.env.USER_TYPE !== 'ant') return
|
|
250
|
+
try {
|
|
251
|
+
saveGlobalConfig(c => {
|
|
252
|
+
const current = c.growthBookOverrides ?? {}
|
|
253
|
+
if (value === undefined) {
|
|
254
|
+
if (!(feature in current)) return c
|
|
255
|
+
const { [feature]: _, ...rest } = current
|
|
256
|
+
if (Object.keys(rest).length === 0) {
|
|
257
|
+
const { growthBookOverrides: __, ...configWithout } = c
|
|
258
|
+
return configWithout
|
|
259
|
+
}
|
|
260
|
+
return { ...c, growthBookOverrides: rest }
|
|
261
|
+
}
|
|
262
|
+
if (isEqual(current[feature], value)) return c
|
|
263
|
+
return { ...c, growthBookOverrides: { ...current, [feature]: value } }
|
|
264
|
+
})
|
|
265
|
+
// Subscribers do their own change detection (see onGrowthBookRefresh docs),
|
|
266
|
+
// so firing on a no-op write is fine.
|
|
267
|
+
refreshed.emit()
|
|
268
|
+
} catch (e) {
|
|
269
|
+
logError(e)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export function clearGrowthBookConfigOverrides(): void {
|
|
274
|
+
if (process.env.USER_TYPE !== 'ant') return
|
|
275
|
+
try {
|
|
276
|
+
saveGlobalConfig(c => {
|
|
277
|
+
if (
|
|
278
|
+
!c.growthBookOverrides ||
|
|
279
|
+
Object.keys(c.growthBookOverrides).length === 0
|
|
280
|
+
) {
|
|
281
|
+
return c
|
|
282
|
+
}
|
|
283
|
+
const { growthBookOverrides: _, ...rest } = c
|
|
284
|
+
return rest
|
|
285
|
+
})
|
|
286
|
+
refreshed.emit()
|
|
287
|
+
} catch (e) {
|
|
288
|
+
logError(e)
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Log experiment exposure for a feature if it has experiment data.
|
|
294
|
+
* Deduplicates within a session - each feature is logged at most once.
|
|
295
|
+
*/
|
|
296
|
+
function logExposureForFeature(feature: string): void {
|
|
297
|
+
// Skip if already logged this session (dedup)
|
|
298
|
+
if (loggedExposures.has(feature)) {
|
|
299
|
+
return
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const expData = experimentDataByFeature.get(feature)
|
|
303
|
+
if (expData) {
|
|
304
|
+
loggedExposures.add(feature)
|
|
305
|
+
logGrowthBookExperimentTo1P({
|
|
306
|
+
experimentId: expData.experimentId,
|
|
307
|
+
variationId: expData.variationId,
|
|
308
|
+
userAttributes: getUserAttributes(),
|
|
309
|
+
experimentMetadata: {
|
|
310
|
+
feature_id: feature,
|
|
311
|
+
},
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Process a remote eval payload from the GrowthBook server and populate
|
|
318
|
+
* local caches. Called after both initial client.init() and after
|
|
319
|
+
* client.refreshFeatures() so that _BLOCKS_ON_INIT callers see fresh values
|
|
320
|
+
* across the process lifetime, not just init-time snapshots.
|
|
321
|
+
*
|
|
322
|
+
* Without this running on refresh, remoteEvalFeatureValues freezes at its
|
|
323
|
+
* init-time snapshot and getDynamicConfig_BLOCKS_ON_INIT returns stale values
|
|
324
|
+
* for the entire process lifetime — which broke the tengu_max_version_config
|
|
325
|
+
* kill switch for long-running sessions.
|
|
326
|
+
*/
|
|
327
|
+
async function processRemoteEvalPayload(
|
|
328
|
+
gbClient: GrowthBook,
|
|
329
|
+
): Promise<boolean> {
|
|
330
|
+
// WORKAROUND: Transform remote eval response format
|
|
331
|
+
// The API returns { "value": ... } but SDK expects { "defaultValue": ... }
|
|
332
|
+
// TODO: Remove this once the API is fixed to return correct format
|
|
333
|
+
const payload = gbClient.getPayload()
|
|
334
|
+
// Empty object is truthy — without the length check, `{features: {}}`
|
|
335
|
+
// (transient server bug, truncated response) would pass, clear the maps
|
|
336
|
+
// below, return true, and syncRemoteEvalToDisk would wholesale-write `{}`
|
|
337
|
+
// to disk: total flag blackout for every process sharing ~/.claude.json.
|
|
338
|
+
if (!payload?.features || Object.keys(payload.features).length === 0) {
|
|
339
|
+
return false
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Clear before rebuild so features removed between refreshes don't
|
|
343
|
+
// leave stale ghost entries that short-circuit getFeatureValueInternal.
|
|
344
|
+
experimentDataByFeature.clear()
|
|
345
|
+
|
|
346
|
+
const transformedFeatures: Record<string, MalformedFeatureDefinition> = {}
|
|
347
|
+
for (const [key, feature] of Object.entries(payload.features)) {
|
|
348
|
+
const f = feature as MalformedFeatureDefinition
|
|
349
|
+
if ('value' in f && !('defaultValue' in f)) {
|
|
350
|
+
transformedFeatures[key] = {
|
|
351
|
+
...f,
|
|
352
|
+
defaultValue: f.value,
|
|
353
|
+
}
|
|
354
|
+
} else {
|
|
355
|
+
transformedFeatures[key] = f
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Store experiment data for later logging when feature is accessed
|
|
359
|
+
if (f.source === 'experiment' && f.experimentResult) {
|
|
360
|
+
const expResult = f.experimentResult as {
|
|
361
|
+
variationId?: number
|
|
362
|
+
}
|
|
363
|
+
const exp = f.experiment as { key?: string } | undefined
|
|
364
|
+
if (exp?.key && expResult.variationId !== undefined) {
|
|
365
|
+
experimentDataByFeature.set(key, {
|
|
366
|
+
experimentId: exp.key,
|
|
367
|
+
variationId: expResult.variationId,
|
|
368
|
+
})
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Re-set the payload with transformed features
|
|
373
|
+
await gbClient.setPayload({
|
|
374
|
+
...payload,
|
|
375
|
+
features: transformedFeatures,
|
|
376
|
+
})
|
|
377
|
+
|
|
378
|
+
// WORKAROUND: Cache the evaluated values directly from remote eval response.
|
|
379
|
+
// The SDK's evalFeature() tries to re-evaluate rules locally, ignoring the
|
|
380
|
+
// pre-evaluated 'value' from remoteEval. setForcedFeatures also doesn't work
|
|
381
|
+
// reliably. So we cache values ourselves and use them in getFeatureValueInternal.
|
|
382
|
+
remoteEvalFeatureValues.clear()
|
|
383
|
+
for (const [key, feature] of Object.entries(transformedFeatures)) {
|
|
384
|
+
// Under remoteEval:true the server pre-evaluates. Whether the answer
|
|
385
|
+
// lands in `value` (current API) or `defaultValue` (post-TODO API shape),
|
|
386
|
+
// it's the authoritative value for this user. Guarding on both keeps
|
|
387
|
+
// syncRemoteEvalToDisk correct across a partial or full API migration.
|
|
388
|
+
const v = 'value' in feature ? feature.value : feature.defaultValue
|
|
389
|
+
if (v !== undefined) {
|
|
390
|
+
remoteEvalFeatureValues.set(key, v)
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return true
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Write the complete remoteEvalFeatureValues map to disk. Called exactly
|
|
398
|
+
* once per successful processRemoteEvalPayload — never from a failure path,
|
|
399
|
+
* so init-timeout poisoning is structurally impossible (the .catch() at init
|
|
400
|
+
* never reaches here).
|
|
401
|
+
*
|
|
402
|
+
* Wholesale replace (not merge): features deleted server-side are dropped
|
|
403
|
+
* from disk on the next successful payload. Ant builds ⊇ external, so
|
|
404
|
+
* switching builds is safe — the write is always a complete answer for this
|
|
405
|
+
* process's SDK key.
|
|
406
|
+
*/
|
|
407
|
+
function syncRemoteEvalToDisk(): void {
|
|
408
|
+
const fresh = Object.fromEntries(remoteEvalFeatureValues)
|
|
409
|
+
const config = getGlobalConfig()
|
|
410
|
+
if (isEqual(config.cachedGrowthBookFeatures, fresh)) {
|
|
411
|
+
return
|
|
412
|
+
}
|
|
413
|
+
saveGlobalConfig(current => ({
|
|
414
|
+
...current,
|
|
415
|
+
cachedGrowthBookFeatures: fresh,
|
|
416
|
+
}))
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Check if GrowthBook operations should be enabled
|
|
421
|
+
*/
|
|
422
|
+
function isGrowthBookEnabled(): boolean {
|
|
423
|
+
// GrowthBook depends on 1P event logging.
|
|
424
|
+
return is1PEventLoggingEnabled()
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Hostname of ANTHROPIC_BASE_URL when it points at a non-Anthropic proxy.
|
|
429
|
+
*
|
|
430
|
+
* Enterprise-proxy deployments (Epic, Marble, etc.) typically use
|
|
431
|
+
* apiKeyHelper auth, which means isAnthropicAuthEnabled() returns false and
|
|
432
|
+
* organizationUUID/accountUUID/email are all absent from GrowthBook
|
|
433
|
+
* attributes. Without this, there's no stable attribute to target them on
|
|
434
|
+
* — only per-device IDs. See src/utils/auth.ts isAnthropicAuthEnabled().
|
|
435
|
+
*
|
|
436
|
+
* Returns undefined for unset/default (api.anthropic.com) so the attribute
|
|
437
|
+
* is absent for direct-API users. Hostname only — no path/query/creds.
|
|
438
|
+
*/
|
|
439
|
+
export function getApiBaseUrlHost(): string | undefined {
|
|
440
|
+
const baseUrl = process.env.ANTHROPIC_BASE_URL
|
|
441
|
+
if (!baseUrl) return undefined
|
|
442
|
+
try {
|
|
443
|
+
const host = new URL(baseUrl).host
|
|
444
|
+
if (host === 'api.anthropic.com') return undefined
|
|
445
|
+
return host
|
|
446
|
+
} catch {
|
|
447
|
+
return undefined
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Get user attributes for GrowthBook from CoreUserData
|
|
453
|
+
*/
|
|
454
|
+
function getUserAttributes(): GrowthBookUserAttributes {
|
|
455
|
+
const user = getUserForGrowthBook()
|
|
456
|
+
|
|
457
|
+
// For ants, always try to include email from OAuth config even if ANTHROPIC_API_KEY is set.
|
|
458
|
+
// This ensures GrowthBook targeting by email works regardless of auth method.
|
|
459
|
+
let email = user.email
|
|
460
|
+
if (!email && process.env.USER_TYPE === 'ant') {
|
|
461
|
+
email = getGlobalConfig().oauthAccount?.emailAddress
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const apiBaseUrlHost = getApiBaseUrlHost()
|
|
465
|
+
|
|
466
|
+
const attributes = {
|
|
467
|
+
id: user.deviceId,
|
|
468
|
+
sessionId: user.sessionId,
|
|
469
|
+
deviceID: user.deviceId,
|
|
470
|
+
platform: user.platform,
|
|
471
|
+
...(apiBaseUrlHost && { apiBaseUrlHost }),
|
|
472
|
+
...(user.organizationUuid && { organizationUUID: user.organizationUuid }),
|
|
473
|
+
...(user.accountUuid && { accountUUID: user.accountUuid }),
|
|
474
|
+
...(user.userType && { userType: user.userType }),
|
|
475
|
+
...(user.subscriptionType && { subscriptionType: user.subscriptionType }),
|
|
476
|
+
...(user.rateLimitTier && { rateLimitTier: user.rateLimitTier }),
|
|
477
|
+
...(user.firstTokenTime && { firstTokenTime: user.firstTokenTime }),
|
|
478
|
+
...(email && { email }),
|
|
479
|
+
...(user.appVersion && { appVersion: user.appVersion }),
|
|
480
|
+
...(user.githubActionsMetadata && {
|
|
481
|
+
githubActionsMetadata: user.githubActionsMetadata,
|
|
482
|
+
}),
|
|
483
|
+
}
|
|
484
|
+
return attributes
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* Get or create the GrowthBook client instance
|
|
489
|
+
*/
|
|
490
|
+
const getGrowthBookClient = memoize(
|
|
491
|
+
(): { client: GrowthBook; initialized: Promise<void> } | null => {
|
|
492
|
+
if (!isGrowthBookEnabled()) {
|
|
493
|
+
return null
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const attributes = getUserAttributes()
|
|
497
|
+
const clientKey = getGrowthBookClientKey()
|
|
498
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
499
|
+
logForDebugging(
|
|
500
|
+
`GrowthBook: Creating client with clientKey=${clientKey}, attributes: ${jsonStringify(attributes)}`,
|
|
501
|
+
)
|
|
502
|
+
}
|
|
503
|
+
const baseUrl =
|
|
504
|
+
process.env.USER_TYPE === 'ant'
|
|
505
|
+
? process.env.CLAUDE_CODE_GB_BASE_URL || 'https://api.anthropic.com/'
|
|
506
|
+
: 'https://api.anthropic.com/'
|
|
507
|
+
|
|
508
|
+
// Skip auth if trust hasn't been established yet
|
|
509
|
+
// This prevents executing apiKeyHelper commands before the trust dialog
|
|
510
|
+
// Non-interactive sessions implicitly have workspace trust
|
|
511
|
+
// getSessionTrustAccepted() covers the case where the TrustDialog auto-resolved
|
|
512
|
+
// without persisting trust for the specific CWD (e.g., home directory) —
|
|
513
|
+
// showSetupScreens() sets this after the trust dialog flow completes.
|
|
514
|
+
const hasTrust =
|
|
515
|
+
checkHasTrustDialogAccepted() ||
|
|
516
|
+
getSessionTrustAccepted() ||
|
|
517
|
+
getIsNonInteractiveSession()
|
|
518
|
+
const authHeaders = hasTrust
|
|
519
|
+
? getAuthHeaders()
|
|
520
|
+
: { headers: {}, error: 'trust not established' }
|
|
521
|
+
const hasAuth = !authHeaders.error
|
|
522
|
+
clientCreatedWithAuth = hasAuth
|
|
523
|
+
|
|
524
|
+
// Capture in local variable so the init callback operates on THIS client,
|
|
525
|
+
// not a later client if reinitialization happens before init completes
|
|
526
|
+
const thisClient = new GrowthBook({
|
|
527
|
+
apiHost: baseUrl,
|
|
528
|
+
clientKey,
|
|
529
|
+
attributes,
|
|
530
|
+
remoteEval: true,
|
|
531
|
+
// Re-fetch when user ID or org changes (org change = login to different org)
|
|
532
|
+
cacheKeyAttributes: ['id', 'organizationUUID'],
|
|
533
|
+
// Add auth headers if available
|
|
534
|
+
...(authHeaders.error
|
|
535
|
+
? {}
|
|
536
|
+
: { apiHostRequestHeaders: authHeaders.headers }),
|
|
537
|
+
// Debug logging for Ants
|
|
538
|
+
...(process.env.USER_TYPE === 'ant'
|
|
539
|
+
? {
|
|
540
|
+
log: (msg: string, ctx: Record<string, unknown>) => {
|
|
541
|
+
logForDebugging(`GrowthBook: ${msg} ${jsonStringify(ctx)}`)
|
|
542
|
+
},
|
|
543
|
+
}
|
|
544
|
+
: {}),
|
|
545
|
+
})
|
|
546
|
+
client = thisClient
|
|
547
|
+
|
|
548
|
+
if (!hasAuth) {
|
|
549
|
+
// No auth available yet — skip HTTP init, rely on disk-cached values.
|
|
550
|
+
// initializeGrowthBook() will reset and re-create with auth when available.
|
|
551
|
+
return { client: thisClient, initialized: Promise.resolve() }
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
const initialized = thisClient
|
|
555
|
+
.init({ timeout: 5000 })
|
|
556
|
+
.then(async result => {
|
|
557
|
+
// Guard: if this client was replaced by a newer one, skip processing
|
|
558
|
+
if (client !== thisClient) {
|
|
559
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
560
|
+
logForDebugging(
|
|
561
|
+
'GrowthBook: Skipping init callback for replaced client',
|
|
562
|
+
)
|
|
563
|
+
}
|
|
564
|
+
return
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
568
|
+
logForDebugging(
|
|
569
|
+
`GrowthBook initialized successfully, source: ${result.source}, success: ${result.success}`,
|
|
570
|
+
)
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
const hadFeatures = await processRemoteEvalPayload(thisClient)
|
|
574
|
+
// Re-check: processRemoteEvalPayload yields at `await setPayload`.
|
|
575
|
+
// Microtask-only today (no encryption, no sticky-bucket service), but
|
|
576
|
+
// the guard at the top of this callback runs before that await;
|
|
577
|
+
// this runs after.
|
|
578
|
+
if (client !== thisClient) return
|
|
579
|
+
|
|
580
|
+
if (hadFeatures) {
|
|
581
|
+
for (const feature of pendingExposures) {
|
|
582
|
+
logExposureForFeature(feature)
|
|
583
|
+
}
|
|
584
|
+
pendingExposures.clear()
|
|
585
|
+
syncRemoteEvalToDisk()
|
|
586
|
+
// Notify subscribers: remoteEvalFeatureValues is populated and
|
|
587
|
+
// disk is freshly synced. _CACHED_MAY_BE_STALE reads memory first
|
|
588
|
+
// (#22295), so subscribers see fresh values immediately.
|
|
589
|
+
refreshed.emit()
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
// Log what features were loaded
|
|
593
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
594
|
+
const features = thisClient.getFeatures()
|
|
595
|
+
if (features) {
|
|
596
|
+
const featureKeys = Object.keys(features)
|
|
597
|
+
logForDebugging(
|
|
598
|
+
`GrowthBook loaded ${featureKeys.length} features: ${featureKeys.slice(0, 10).join(', ')}${featureKeys.length > 10 ? '...' : ''}`,
|
|
599
|
+
)
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
})
|
|
603
|
+
.catch(error => {
|
|
604
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
605
|
+
logError(toError(error))
|
|
606
|
+
}
|
|
607
|
+
})
|
|
608
|
+
|
|
609
|
+
// Register cleanup handlers for graceful shutdown (named refs so resetGrowthBook can remove them)
|
|
610
|
+
currentBeforeExitHandler = () => client?.destroy()
|
|
611
|
+
currentExitHandler = () => client?.destroy()
|
|
612
|
+
process.on('beforeExit', currentBeforeExitHandler)
|
|
613
|
+
process.on('exit', currentExitHandler)
|
|
614
|
+
|
|
615
|
+
return { client: thisClient, initialized }
|
|
616
|
+
},
|
|
617
|
+
)
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Initialize GrowthBook client (blocks until ready)
|
|
621
|
+
*/
|
|
622
|
+
export const initializeGrowthBook = memoize(
|
|
623
|
+
async (): Promise<GrowthBook | null> => {
|
|
624
|
+
if (process.env.OPENAI_API_KEY) return null;
|
|
625
|
+
let clientWrapper = getGrowthBookClient()
|
|
626
|
+
if (!clientWrapper) {
|
|
627
|
+
return null
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
// Check if auth has become available since the client was created
|
|
631
|
+
// If so, we need to recreate the client with fresh auth headers
|
|
632
|
+
// Only check if trust is established to avoid triggering apiKeyHelper before trust dialog
|
|
633
|
+
if (!clientCreatedWithAuth) {
|
|
634
|
+
const hasTrust =
|
|
635
|
+
checkHasTrustDialogAccepted() ||
|
|
636
|
+
getSessionTrustAccepted() ||
|
|
637
|
+
getIsNonInteractiveSession()
|
|
638
|
+
if (hasTrust) {
|
|
639
|
+
const currentAuth = getAuthHeaders()
|
|
640
|
+
if (!currentAuth.error) {
|
|
641
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
642
|
+
logForDebugging(
|
|
643
|
+
'GrowthBook: Auth became available after client creation, reinitializing',
|
|
644
|
+
)
|
|
645
|
+
}
|
|
646
|
+
// Use resetGrowthBook to properly destroy old client and stop periodic refresh
|
|
647
|
+
// This prevents double-init where old client's init promise continues running
|
|
648
|
+
resetGrowthBook()
|
|
649
|
+
clientWrapper = getGrowthBookClient()
|
|
650
|
+
if (!clientWrapper) {
|
|
651
|
+
return null
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
await clientWrapper.initialized
|
|
658
|
+
|
|
659
|
+
// Set up periodic refresh after successful initialization
|
|
660
|
+
// This is called here (not separately) so it's always re-established after any reinit
|
|
661
|
+
setupPeriodicGrowthBookRefresh()
|
|
662
|
+
|
|
663
|
+
return clientWrapper.client
|
|
664
|
+
},
|
|
665
|
+
)
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Get a feature value with a default fallback - blocks until initialized.
|
|
669
|
+
* @internal Used by both deprecated and cached functions.
|
|
670
|
+
*/
|
|
671
|
+
async function getFeatureValueInternal<T>(
|
|
672
|
+
feature: string,
|
|
673
|
+
defaultValue: T,
|
|
674
|
+
logExposure: boolean,
|
|
675
|
+
): Promise<T> {
|
|
676
|
+
// Check env var overrides first (for eval harnesses)
|
|
677
|
+
const overrides = getEnvOverrides()
|
|
678
|
+
if (overrides && feature in overrides) {
|
|
679
|
+
return overrides[feature] as T
|
|
680
|
+
}
|
|
681
|
+
const configOverrides = getConfigOverrides()
|
|
682
|
+
if (configOverrides && feature in configOverrides) {
|
|
683
|
+
return configOverrides[feature] as T
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
if (!isGrowthBookEnabled()) {
|
|
687
|
+
return defaultValue
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
const growthBookClient = await initializeGrowthBook()
|
|
691
|
+
if (!growthBookClient) {
|
|
692
|
+
return defaultValue
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
// Use cached remote eval values if available (workaround for SDK bug)
|
|
696
|
+
let result: T
|
|
697
|
+
if (remoteEvalFeatureValues.has(feature)) {
|
|
698
|
+
result = remoteEvalFeatureValues.get(feature) as T
|
|
699
|
+
} else {
|
|
700
|
+
result = growthBookClient.getFeatureValue(feature, defaultValue) as T
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
// Log experiment exposure using stored experiment data
|
|
704
|
+
if (logExposure) {
|
|
705
|
+
logExposureForFeature(feature)
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
709
|
+
logForDebugging(
|
|
710
|
+
`GrowthBook: getFeatureValue("${feature}") = ${jsonStringify(result)}`,
|
|
711
|
+
)
|
|
712
|
+
}
|
|
713
|
+
return result
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* @deprecated Use getFeatureValue_CACHED_MAY_BE_STALE instead, which is non-blocking.
|
|
718
|
+
* This function blocks on GrowthBook initialization which can slow down startup.
|
|
719
|
+
*/
|
|
720
|
+
export async function getFeatureValue_DEPRECATED<T>(
|
|
721
|
+
feature: string,
|
|
722
|
+
defaultValue: T,
|
|
723
|
+
): Promise<T> {
|
|
724
|
+
return getFeatureValueInternal(feature, defaultValue, true)
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Get a feature value from disk cache immediately. Pure read — disk is
|
|
729
|
+
* populated by syncRemoteEvalToDisk on every successful payload (init +
|
|
730
|
+
* periodic refresh), not by this function.
|
|
731
|
+
*
|
|
732
|
+
* This is the preferred method for startup-critical paths and sync contexts.
|
|
733
|
+
* The value may be stale if the cache was written by a previous process.
|
|
734
|
+
*/
|
|
735
|
+
export function getFeatureValue_CACHED_MAY_BE_STALE<T>(
|
|
736
|
+
feature: string,
|
|
737
|
+
defaultValue: T,
|
|
738
|
+
): T {
|
|
739
|
+
// Check env var overrides first (for eval harnesses)
|
|
740
|
+
const overrides = getEnvOverrides()
|
|
741
|
+
if (overrides && feature in overrides) {
|
|
742
|
+
return overrides[feature] as T
|
|
743
|
+
}
|
|
744
|
+
const configOverrides = getConfigOverrides()
|
|
745
|
+
if (configOverrides && feature in configOverrides) {
|
|
746
|
+
return configOverrides[feature] as T
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if (!isGrowthBookEnabled()) {
|
|
750
|
+
return defaultValue
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
// Log experiment exposure if data is available, otherwise defer until after init
|
|
754
|
+
if (experimentDataByFeature.has(feature)) {
|
|
755
|
+
logExposureForFeature(feature)
|
|
756
|
+
} else {
|
|
757
|
+
pendingExposures.add(feature)
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
// In-memory payload is authoritative once processRemoteEvalPayload has run.
|
|
761
|
+
// Disk is also fresh by then (syncRemoteEvalToDisk runs synchronously inside
|
|
762
|
+
// init), so this is correctness-equivalent to the disk read below — but it
|
|
763
|
+
// skips the config JSON parse and is what onGrowthBookRefresh subscribers
|
|
764
|
+
// depend on to read fresh values the instant they're notified.
|
|
765
|
+
if (remoteEvalFeatureValues.has(feature)) {
|
|
766
|
+
return remoteEvalFeatureValues.get(feature) as T
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
// Fall back to disk cache (survives across process restarts)
|
|
770
|
+
try {
|
|
771
|
+
const cached = getGlobalConfig().cachedGrowthBookFeatures?.[feature]
|
|
772
|
+
return cached !== undefined ? (cached as T) : defaultValue
|
|
773
|
+
} catch {
|
|
774
|
+
return defaultValue
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* @deprecated Disk cache is now synced on every successful payload load
|
|
780
|
+
* (init + 20min/6h periodic refresh). The per-feature TTL never fetched
|
|
781
|
+
* fresh data from the server — it only re-wrote in-memory state to disk,
|
|
782
|
+
* which is now redundant. Use getFeatureValue_CACHED_MAY_BE_STALE directly.
|
|
783
|
+
*/
|
|
784
|
+
export function getFeatureValue_CACHED_WITH_REFRESH<T>(
|
|
785
|
+
feature: string,
|
|
786
|
+
defaultValue: T,
|
|
787
|
+
_refreshIntervalMs: number,
|
|
788
|
+
): T {
|
|
789
|
+
return getFeatureValue_CACHED_MAY_BE_STALE(feature, defaultValue)
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
/**
|
|
793
|
+
* Check a Statsig feature gate value via GrowthBook, with fallback to Statsig cache.
|
|
794
|
+
*
|
|
795
|
+
* **MIGRATION ONLY**: This function is for migrating existing Statsig gates to GrowthBook.
|
|
796
|
+
* For new features, use `getFeatureValue_CACHED_MAY_BE_STALE()` instead.
|
|
797
|
+
*
|
|
798
|
+
* - Checks GrowthBook disk cache first
|
|
799
|
+
* - Falls back to Statsig's cachedStatsigGates during migration
|
|
800
|
+
* - The value may be stale if the cache hasn't been updated recently
|
|
801
|
+
*
|
|
802
|
+
* @deprecated Use getFeatureValue_CACHED_MAY_BE_STALE() for new code. This function
|
|
803
|
+
* exists only to support migration of existing Statsig gates.
|
|
804
|
+
*/
|
|
805
|
+
export function checkStatsigFeatureGate_CACHED_MAY_BE_STALE(
|
|
806
|
+
gate: string,
|
|
807
|
+
): boolean {
|
|
808
|
+
// Check env var overrides first (for eval harnesses)
|
|
809
|
+
const overrides = getEnvOverrides()
|
|
810
|
+
if (overrides && gate in overrides) {
|
|
811
|
+
return Boolean(overrides[gate])
|
|
812
|
+
}
|
|
813
|
+
const configOverrides = getConfigOverrides()
|
|
814
|
+
if (configOverrides && gate in configOverrides) {
|
|
815
|
+
return Boolean(configOverrides[gate])
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
if (!isGrowthBookEnabled()) {
|
|
819
|
+
return false
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// Log experiment exposure if data is available, otherwise defer until after init
|
|
823
|
+
if (experimentDataByFeature.has(gate)) {
|
|
824
|
+
logExposureForFeature(gate)
|
|
825
|
+
} else {
|
|
826
|
+
pendingExposures.add(gate)
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
// Return cached value immediately from disk
|
|
830
|
+
// First check GrowthBook cache, then fall back to Statsig cache for migration
|
|
831
|
+
const config = getGlobalConfig()
|
|
832
|
+
const gbCached = config.cachedGrowthBookFeatures?.[gate]
|
|
833
|
+
if (gbCached !== undefined) {
|
|
834
|
+
return Boolean(gbCached)
|
|
835
|
+
}
|
|
836
|
+
// Fallback to Statsig cache for migration period
|
|
837
|
+
return config.cachedStatsigGates?.[gate] ?? false
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* Check a security restriction gate, waiting for re-init if in progress.
|
|
842
|
+
*
|
|
843
|
+
* Use this for security-critical gates where we need fresh values after auth changes.
|
|
844
|
+
*
|
|
845
|
+
* Behavior:
|
|
846
|
+
* - If GrowthBook is re-initializing (e.g., after login), waits for it to complete
|
|
847
|
+
* - Otherwise, returns cached value immediately (Statsig cache first, then GrowthBook)
|
|
848
|
+
*
|
|
849
|
+
* Statsig cache is checked first as a safety measure for security-related checks:
|
|
850
|
+
* if the Statsig cache indicates the gate is enabled, we honor it.
|
|
851
|
+
*/
|
|
852
|
+
export async function checkSecurityRestrictionGate(
|
|
853
|
+
gate: string,
|
|
854
|
+
): Promise<boolean> {
|
|
855
|
+
// Check env var overrides first (for eval harnesses)
|
|
856
|
+
const overrides = getEnvOverrides()
|
|
857
|
+
if (overrides && gate in overrides) {
|
|
858
|
+
return Boolean(overrides[gate])
|
|
859
|
+
}
|
|
860
|
+
const configOverrides = getConfigOverrides()
|
|
861
|
+
if (configOverrides && gate in configOverrides) {
|
|
862
|
+
return Boolean(configOverrides[gate])
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
if (!isGrowthBookEnabled()) {
|
|
866
|
+
return false
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
// If re-initialization is in progress, wait for it to complete
|
|
870
|
+
// This ensures we get fresh values after auth changes
|
|
871
|
+
if (reinitializingPromise) {
|
|
872
|
+
await reinitializingPromise
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
// Check Statsig cache first - it may have correct value from previous logged-in session
|
|
876
|
+
const config = getGlobalConfig()
|
|
877
|
+
const statsigCached = config.cachedStatsigGates?.[gate]
|
|
878
|
+
if (statsigCached !== undefined) {
|
|
879
|
+
return Boolean(statsigCached)
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
// Then check GrowthBook cache
|
|
883
|
+
const gbCached = config.cachedGrowthBookFeatures?.[gate]
|
|
884
|
+
if (gbCached !== undefined) {
|
|
885
|
+
return Boolean(gbCached)
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// No cache - return false (don't block on init for uncached gates)
|
|
889
|
+
return false
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
/**
|
|
893
|
+
* Check a boolean entitlement gate with fallback-to-blocking semantics.
|
|
894
|
+
*
|
|
895
|
+
* Fast path: if the disk cache already says `true`, return it immediately.
|
|
896
|
+
* Slow path: if disk says `false`/missing, await GrowthBook init and fetch the
|
|
897
|
+
* fresh server value (max ~5s). Disk is populated by syncRemoteEvalToDisk
|
|
898
|
+
* inside init, so by the time the slow path returns, disk already has the
|
|
899
|
+
* fresh value — no write needed here.
|
|
900
|
+
*
|
|
901
|
+
* Use for user-invoked features (e.g. /remote-control) that are gated on
|
|
902
|
+
* subscription/org, where a stale `false` would unfairly block access but a
|
|
903
|
+
* stale `true` is acceptable (the server is the real gatekeeper).
|
|
904
|
+
*/
|
|
905
|
+
export async function checkGate_CACHED_OR_BLOCKING(
|
|
906
|
+
gate: string,
|
|
907
|
+
): Promise<boolean> {
|
|
908
|
+
// Check env var overrides first (for eval harnesses)
|
|
909
|
+
const overrides = getEnvOverrides()
|
|
910
|
+
if (overrides && gate in overrides) {
|
|
911
|
+
return Boolean(overrides[gate])
|
|
912
|
+
}
|
|
913
|
+
const configOverrides = getConfigOverrides()
|
|
914
|
+
if (configOverrides && gate in configOverrides) {
|
|
915
|
+
return Boolean(configOverrides[gate])
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
if (!isGrowthBookEnabled()) {
|
|
919
|
+
return false
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// Fast path: disk cache already says true — trust it
|
|
923
|
+
const cached = getGlobalConfig().cachedGrowthBookFeatures?.[gate]
|
|
924
|
+
if (cached === true) {
|
|
925
|
+
// Log experiment exposure if data is available, otherwise defer
|
|
926
|
+
if (experimentDataByFeature.has(gate)) {
|
|
927
|
+
logExposureForFeature(gate)
|
|
928
|
+
} else {
|
|
929
|
+
pendingExposures.add(gate)
|
|
930
|
+
}
|
|
931
|
+
return true
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
// Slow path: disk says false/missing — may be stale, fetch fresh
|
|
935
|
+
return getFeatureValueInternal(gate, false, true)
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Refresh GrowthBook after auth changes (login/logout).
|
|
940
|
+
*
|
|
941
|
+
* NOTE: This must destroy and recreate the client because GrowthBook's
|
|
942
|
+
* apiHostRequestHeaders cannot be updated after client creation.
|
|
943
|
+
*/
|
|
944
|
+
export function refreshGrowthBookAfterAuthChange(): void {
|
|
945
|
+
if (!isGrowthBookEnabled()) {
|
|
946
|
+
return
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
try {
|
|
950
|
+
// Reset the client completely to get fresh auth headers
|
|
951
|
+
// This is necessary because apiHostRequestHeaders can't be updated after creation
|
|
952
|
+
resetGrowthBook()
|
|
953
|
+
|
|
954
|
+
// resetGrowthBook cleared remoteEvalFeatureValues. If re-init below
|
|
955
|
+
// times out (hadFeatures=false) or short-circuits on !hasAuth (logout),
|
|
956
|
+
// the init-callback notify never fires — subscribers stay synced to the
|
|
957
|
+
// previous account's memoized state. Notify here so they re-read now
|
|
958
|
+
// (falls to disk cache). If re-init succeeds, they'll notify again with
|
|
959
|
+
// fresh values; if not, at least they're synced to the post-reset state.
|
|
960
|
+
refreshed.emit()
|
|
961
|
+
|
|
962
|
+
// Reinitialize with fresh auth headers and attributes
|
|
963
|
+
// Track this promise so security gate checks can wait for it.
|
|
964
|
+
// .catch before .finally: initializeGrowthBook can reject if its sync
|
|
965
|
+
// helpers throw (getGrowthBookClient, getAuthHeaders, resetGrowthBook —
|
|
966
|
+
// clientWrapper.initialized itself has its own .catch so never rejects),
|
|
967
|
+
// and .finally re-settles with the original rejection — the sync
|
|
968
|
+
// try/catch below cannot catch async rejections.
|
|
969
|
+
reinitializingPromise = initializeGrowthBook()
|
|
970
|
+
.catch(error => {
|
|
971
|
+
logError(toError(error))
|
|
972
|
+
return null
|
|
973
|
+
})
|
|
974
|
+
.finally(() => {
|
|
975
|
+
reinitializingPromise = null
|
|
976
|
+
})
|
|
977
|
+
} catch (error) {
|
|
978
|
+
if (process.env.NODE_ENV === 'development') {
|
|
979
|
+
throw error
|
|
980
|
+
}
|
|
981
|
+
logError(toError(error))
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
/**
|
|
986
|
+
* Reset GrowthBook client state (primarily for testing)
|
|
987
|
+
*/
|
|
988
|
+
export function resetGrowthBook(): void {
|
|
989
|
+
stopPeriodicGrowthBookRefresh()
|
|
990
|
+
// Remove process handlers before destroying client to prevent accumulation
|
|
991
|
+
if (currentBeforeExitHandler) {
|
|
992
|
+
process.off('beforeExit', currentBeforeExitHandler)
|
|
993
|
+
currentBeforeExitHandler = null
|
|
994
|
+
}
|
|
995
|
+
if (currentExitHandler) {
|
|
996
|
+
process.off('exit', currentExitHandler)
|
|
997
|
+
currentExitHandler = null
|
|
998
|
+
}
|
|
999
|
+
client?.destroy()
|
|
1000
|
+
client = null
|
|
1001
|
+
clientCreatedWithAuth = false
|
|
1002
|
+
reinitializingPromise = null
|
|
1003
|
+
experimentDataByFeature.clear()
|
|
1004
|
+
pendingExposures.clear()
|
|
1005
|
+
loggedExposures.clear()
|
|
1006
|
+
remoteEvalFeatureValues.clear()
|
|
1007
|
+
getGrowthBookClient.cache?.clear?.()
|
|
1008
|
+
initializeGrowthBook.cache?.clear?.()
|
|
1009
|
+
envOverrides = null
|
|
1010
|
+
envOverridesParsed = false
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// Periodic refresh interval (matches Statsig's 6-hour interval)
|
|
1014
|
+
const GROWTHBOOK_REFRESH_INTERVAL_MS =
|
|
1015
|
+
process.env.USER_TYPE !== 'ant'
|
|
1016
|
+
? 6 * 60 * 60 * 1000 // 6 hours
|
|
1017
|
+
: 20 * 60 * 1000 // 20 min (for ants)
|
|
1018
|
+
let refreshInterval: ReturnType<typeof setInterval> | null = null
|
|
1019
|
+
let beforeExitListener: (() => void) | null = null
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* Light refresh - re-fetch features from server without recreating client.
|
|
1023
|
+
* Use this for periodic refresh when auth headers haven't changed.
|
|
1024
|
+
*
|
|
1025
|
+
* Unlike refreshGrowthBookAfterAuthChange() which destroys and recreates the client,
|
|
1026
|
+
* this preserves client state and just fetches fresh feature values.
|
|
1027
|
+
*/
|
|
1028
|
+
export async function refreshGrowthBookFeatures(): Promise<void> {
|
|
1029
|
+
if (!isGrowthBookEnabled()) {
|
|
1030
|
+
return
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
try {
|
|
1034
|
+
const growthBookClient = await initializeGrowthBook()
|
|
1035
|
+
if (!growthBookClient) {
|
|
1036
|
+
return
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
await growthBookClient.refreshFeatures()
|
|
1040
|
+
|
|
1041
|
+
// Guard: if this client was replaced during the in-flight refresh
|
|
1042
|
+
// (e.g. refreshGrowthBookAfterAuthChange ran), skip processing the
|
|
1043
|
+
// stale payload. Mirrors the init-callback guard above.
|
|
1044
|
+
if (growthBookClient !== client) {
|
|
1045
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
1046
|
+
logForDebugging(
|
|
1047
|
+
'GrowthBook: Skipping refresh processing for replaced client',
|
|
1048
|
+
)
|
|
1049
|
+
}
|
|
1050
|
+
return
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
// Rebuild remoteEvalFeatureValues from the refreshed payload so that
|
|
1054
|
+
// _BLOCKS_ON_INIT callers (e.g. getMaxVersion for the auto-update kill
|
|
1055
|
+
// switch) see fresh values, not the stale init-time snapshot.
|
|
1056
|
+
const hadFeatures = await processRemoteEvalPayload(growthBookClient)
|
|
1057
|
+
// Same re-check as init path: covers the setPayload yield inside
|
|
1058
|
+
// processRemoteEvalPayload (the guard above only covers refreshFeatures).
|
|
1059
|
+
if (growthBookClient !== client) return
|
|
1060
|
+
|
|
1061
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
1062
|
+
logForDebugging('GrowthBook: Light refresh completed')
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
// Gate on hadFeatures: if the payload was empty/malformed,
|
|
1066
|
+
// remoteEvalFeatureValues wasn't rebuilt — skip both the no-op disk
|
|
1067
|
+
// write and the spurious subscriber churn (clearCommandMemoizationCaches
|
|
1068
|
+
// + getCommands + 4× model re-renders).
|
|
1069
|
+
if (hadFeatures) {
|
|
1070
|
+
syncRemoteEvalToDisk()
|
|
1071
|
+
refreshed.emit()
|
|
1072
|
+
}
|
|
1073
|
+
} catch (error) {
|
|
1074
|
+
if (process.env.NODE_ENV === 'development') {
|
|
1075
|
+
throw error
|
|
1076
|
+
}
|
|
1077
|
+
logError(toError(error))
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
/**
|
|
1082
|
+
* Set up periodic refresh of GrowthBook features.
|
|
1083
|
+
* Uses light refresh (refreshGrowthBookFeatures) to re-fetch without recreating client.
|
|
1084
|
+
*
|
|
1085
|
+
* Call this after initialization for long-running sessions to ensure
|
|
1086
|
+
* feature values stay fresh. Matches Statsig's 6-hour refresh interval.
|
|
1087
|
+
*/
|
|
1088
|
+
export function setupPeriodicGrowthBookRefresh(): void {
|
|
1089
|
+
if (!isGrowthBookEnabled()) {
|
|
1090
|
+
return
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
// Clear any existing interval to avoid duplicates
|
|
1094
|
+
if (refreshInterval) {
|
|
1095
|
+
clearInterval(refreshInterval)
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
refreshInterval = setInterval(() => {
|
|
1099
|
+
void refreshGrowthBookFeatures()
|
|
1100
|
+
}, GROWTHBOOK_REFRESH_INTERVAL_MS)
|
|
1101
|
+
// Allow process to exit naturally - this timer shouldn't keep the process alive
|
|
1102
|
+
refreshInterval.unref?.()
|
|
1103
|
+
|
|
1104
|
+
// Register cleanup listener only once
|
|
1105
|
+
if (!beforeExitListener) {
|
|
1106
|
+
beforeExitListener = () => {
|
|
1107
|
+
stopPeriodicGrowthBookRefresh()
|
|
1108
|
+
}
|
|
1109
|
+
process.once('beforeExit', beforeExitListener)
|
|
1110
|
+
}
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* Stop periodic refresh (for testing or cleanup)
|
|
1115
|
+
*/
|
|
1116
|
+
export function stopPeriodicGrowthBookRefresh(): void {
|
|
1117
|
+
if (refreshInterval) {
|
|
1118
|
+
clearInterval(refreshInterval)
|
|
1119
|
+
refreshInterval = null
|
|
1120
|
+
}
|
|
1121
|
+
if (beforeExitListener) {
|
|
1122
|
+
process.removeListener('beforeExit', beforeExitListener)
|
|
1123
|
+
beforeExitListener = null
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
// ============================================================================
|
|
1128
|
+
// Dynamic Config Functions
|
|
1129
|
+
// These are semantic wrappers around feature functions for Statsig API parity.
|
|
1130
|
+
// In GrowthBook, dynamic configs are just features with object values.
|
|
1131
|
+
// ============================================================================
|
|
1132
|
+
|
|
1133
|
+
/**
|
|
1134
|
+
* Get a dynamic config value - blocks until GrowthBook is initialized.
|
|
1135
|
+
* Prefer getFeatureValue_CACHED_MAY_BE_STALE for startup-critical paths.
|
|
1136
|
+
*/
|
|
1137
|
+
export async function getDynamicConfig_BLOCKS_ON_INIT<T>(
|
|
1138
|
+
configName: string,
|
|
1139
|
+
defaultValue: T,
|
|
1140
|
+
): Promise<T> {
|
|
1141
|
+
if (process.env.OPENAI_API_KEY) return defaultValue;
|
|
1142
|
+
return getFeatureValue_DEPRECATED(configName, defaultValue)
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* Get a dynamic config value from disk cache immediately. Pure read — see
|
|
1147
|
+
* getFeatureValue_CACHED_MAY_BE_STALE.
|
|
1148
|
+
* This is the preferred method for startup-critical paths and sync contexts.
|
|
1149
|
+
*
|
|
1150
|
+
* In GrowthBook, dynamic configs are just features with object values.
|
|
1151
|
+
*/
|
|
1152
|
+
export function getDynamicConfig_CACHED_MAY_BE_STALE<T>(
|
|
1153
|
+
configName: string,
|
|
1154
|
+
defaultValue: T,
|
|
1155
|
+
): T {
|
|
1156
|
+
return getFeatureValue_CACHED_MAY_BE_STALE(configName, defaultValue)
|
|
1157
|
+
}
|