@xmem-ai/memcode 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +96 -0
- package/bin/memcode.js +145 -0
- package/dist/QueryEngine.js +905 -0
- package/dist/Task.js +46 -0
- package/dist/Tool.js +42 -0
- package/dist/assistant/gate.js +6 -0
- package/dist/assistant/index.js +21 -0
- package/dist/assistant/sessionDiscovery.js +6 -0
- package/dist/assistant/sessionHistory.js +45 -0
- package/dist/bootstrap/state.js +1252 -0
- package/dist/bridge/bridgeApi.js +368 -0
- package/dist/bridge/bridgeConfig.js +47 -0
- package/dist/bridge/bridgeDebug.js +73 -0
- package/dist/bridge/bridgeEnabled.js +99 -0
- package/dist/bridge/bridgeMain.js +2018 -0
- package/dist/bridge/bridgeMessaging.js +272 -0
- package/dist/bridge/bridgePermissionCallbacks.js +7 -0
- package/dist/bridge/bridgePointer.js +120 -0
- package/dist/bridge/bridgeStatusUtil.js +95 -0
- package/dist/bridge/bridgeUI.js +388 -0
- package/dist/bridge/capacityWake.js +30 -0
- package/dist/bridge/codeSessionApi.js +107 -0
- package/dist/bridge/createSession.js +266 -0
- package/dist/bridge/debugUtils.js +91 -0
- package/dist/bridge/envLessBridgeConfig.js +85 -0
- package/dist/bridge/flushGate.js +52 -0
- package/dist/bridge/inboundAttachments.js +109 -0
- package/dist/bridge/inboundMessages.js +36 -0
- package/dist/bridge/initReplBridge.js +322 -0
- package/dist/bridge/jwtUtils.js +163 -0
- package/dist/bridge/pollConfig.js +58 -0
- package/dist/bridge/pollConfigDefaults.js +33 -0
- package/dist/bridge/remoteBridgeCore.js +645 -0
- package/dist/bridge/remotePairing.js +49 -0
- package/dist/bridge/replBridge.js +1336 -0
- package/dist/bridge/replBridgeHandle.js +20 -0
- package/dist/bridge/replBridgeTransport.js +179 -0
- package/dist/bridge/sessionIdCompat.js +18 -0
- package/dist/bridge/sessionRunner.js +398 -0
- package/dist/bridge/trustedDevice.js +144 -0
- package/dist/bridge/types.js +10 -0
- package/dist/bridge/webhookSanitizer.js +6 -0
- package/dist/bridge/workSecret.js +67 -0
- package/dist/buddy/CompanionSprite.js +341 -0
- package/dist/buddy/companion.js +106 -0
- package/dist/buddy/observer.js +52 -0
- package/dist/buddy/prompt.js +29 -0
- package/dist/buddy/sprites.js +506 -0
- package/dist/buddy/types.js +131 -0
- package/dist/buddy/useBuddyNotification.js +87 -0
- package/dist/bun-bundle-shim.js +10 -0
- package/dist/cli/exit.js +14 -0
- package/dist/cli/handlers/agents.js +56 -0
- package/dist/cli/handlers/auth.js +263 -0
- package/dist/cli/handlers/autoMode.js +106 -0
- package/dist/cli/handlers/mcp.js +301 -0
- package/dist/cli/handlers/plugins.js +599 -0
- package/dist/cli/handlers/util.js +121 -0
- package/dist/cli/ndjsonSafeStringify.js +14 -0
- package/dist/cli/print.js +3810 -0
- package/dist/cli/remoteIO.js +184 -0
- package/dist/cli/structuredIO.js +613 -0
- package/dist/cli/transports/HybridTransport.js +193 -0
- package/dist/cli/transports/SSETransport.js +491 -0
- package/dist/cli/transports/SerialBatchEventUploader.js +191 -0
- package/dist/cli/transports/WebSocketTransport.js +584 -0
- package/dist/cli/transports/WorkerStateUploader.js +75 -0
- package/dist/cli/transports/ccrClient.js +711 -0
- package/dist/cli/transports/transportUtils.js +28 -0
- package/dist/cli/update.js +325 -0
- package/dist/commands/add-dir/add-dir.js +121 -0
- package/dist/commands/add-dir/index.js +11 -0
- package/dist/commands/add-dir/validation.js +71 -0
- package/dist/commands/advisor.js +98 -0
- package/dist/commands/agents/agents.js +12 -0
- package/dist/commands/agents/index.js +10 -0
- package/dist/commands/ant-trace/index.js +1 -0
- package/dist/commands/apikey/apikey.js +139 -0
- package/dist/commands/apikey/index.js +33 -0
- package/dist/commands/assistant-room/assistantRoom.js +15 -0
- package/dist/commands/assistant-room/index.js +12 -0
- package/dist/commands/autofix-pr/index.js +1 -0
- package/dist/commands/backfill-sessions/index.js +1 -0
- package/dist/commands/background/background.js +17 -0
- package/dist/commands/background/index.js +12 -0
- package/dist/commands/branch/branch.js +183 -0
- package/dist/commands/branch/index.js +14 -0
- package/dist/commands/break-cache/index.js +1 -0
- package/dist/commands/bridge/bridge.js +487 -0
- package/dist/commands/bridge/index.js +27 -0
- package/dist/commands/bridge/preflight.js +30 -0
- package/dist/commands/bridge-kick.js +148 -0
- package/dist/commands/brief.js +79 -0
- package/dist/commands/btw/btw.js +235 -0
- package/dist/commands/btw/index.js +12 -0
- package/dist/commands/buddy/buddy.js +136 -0
- package/dist/commands/buddy/index.js +40 -0
- package/dist/commands/bughunter/index.js +1 -0
- package/dist/commands/chrome/chrome.js +317 -0
- package/dist/commands/chrome/index.js +14 -0
- package/dist/commands/clear/caches.js +84 -0
- package/dist/commands/clear/clear.js +8 -0
- package/dist/commands/clear/conversation.js +175 -0
- package/dist/commands/clear/index.js +13 -0
- package/dist/commands/color/color.js +66 -0
- package/dist/commands/color/index.js +12 -0
- package/dist/commands/commit-push-pr.js +151 -0
- package/dist/commands/commit.js +90 -0
- package/dist/commands/compact/compact.js +204 -0
- package/dist/commands/compact/index.js +14 -0
- package/dist/commands/config/config.js +8 -0
- package/dist/commands/config/index.js +11 -0
- package/dist/commands/context/context-noninteractive.js +308 -0
- package/dist/commands/context/context.js +53 -0
- package/dist/commands/context/index.js +25 -0
- package/dist/commands/copy/copy.js +356 -0
- package/dist/commands/copy/index.js +10 -0
- package/dist/commands/cost/cost.js +93 -0
- package/dist/commands/cost/index.js +19 -0
- package/dist/commands/createMovedToPluginCommand.js +44 -0
- package/dist/commands/credits/credits.js +246 -0
- package/dist/commands/credits/index.js +11 -0
- package/dist/commands/ctx_viz/index.js +1 -0
- package/dist/commands/debug-tool-call/index.js +1 -0
- package/dist/commands/desktop/desktop.js +8 -0
- package/dist/commands/desktop/index.js +25 -0
- package/dist/commands/diff/diff.js +10 -0
- package/dist/commands/diff/index.js +9 -0
- package/dist/commands/doctor/doctor.js +8 -0
- package/dist/commands/doctor/index.js +12 -0
- package/dist/commands/effort/effort.js +250 -0
- package/dist/commands/effort/index.js +15 -0
- package/dist/commands/env/index.js +1 -0
- package/dist/commands/exit/exit.js +37 -0
- package/dist/commands/exit/index.js +12 -0
- package/dist/commands/export/export.js +79 -0
- package/dist/commands/export/index.js +11 -0
- package/dist/commands/extra-usage/extra-usage-core.js +91 -0
- package/dist/commands/extra-usage/extra-usage-noninteractive.js +14 -0
- package/dist/commands/extra-usage/extra-usage.js +17 -0
- package/dist/commands/extra-usage/index.js +37 -0
- package/dist/commands/fast/fast.js +290 -0
- package/dist/commands/fast/index.js +26 -0
- package/dist/commands/feedback/feedback.js +13 -0
- package/dist/commands/feedback/index.js +16 -0
- package/dist/commands/files/files.js +15 -0
- package/dist/commands/files/index.js +12 -0
- package/dist/commands/good-memcode/index.js +1 -0
- package/dist/commands/heapdump/heapdump.js +18 -0
- package/dist/commands/heapdump/index.js +12 -0
- package/dist/commands/help/help.js +33 -0
- package/dist/commands/help/index.js +11 -0
- package/dist/commands/hooks/hooks.js +14 -0
- package/dist/commands/hooks/index.js +11 -0
- package/dist/commands/ide/ide.js +607 -0
- package/dist/commands/ide/index.js +11 -0
- package/dist/commands/init-verifiers.js +262 -0
- package/dist/commands/init.js +245 -0
- package/dist/commands/insights.js +2262 -0
- package/dist/commands/install-github-app/ApiKeyStep.js +244 -0
- package/dist/commands/install-github-app/CheckExistingSecretStep.js +208 -0
- package/dist/commands/install-github-app/CheckGitHubStep.js +17 -0
- package/dist/commands/install-github-app/ChooseRepoStep.js +228 -0
- package/dist/commands/install-github-app/CreatingStep.js +68 -0
- package/dist/commands/install-github-app/ErrorStep.js +107 -0
- package/dist/commands/install-github-app/ExistingWorkflowStep.js +123 -0
- package/dist/commands/install-github-app/InstallAppStep.js +114 -0
- package/dist/commands/install-github-app/OAuthFlowStep.js +222 -0
- package/dist/commands/install-github-app/SuccessStep.js +117 -0
- package/dist/commands/install-github-app/WarningsStep.js +92 -0
- package/dist/commands/install-github-app/index.js +14 -0
- package/dist/commands/install-github-app/install-github-app.js +551 -0
- package/dist/commands/install-github-app/setupGitHubActions.js +246 -0
- package/dist/commands/install-github-app/types.js +0 -0
- package/dist/commands/install-slack-app/index.js +14 -0
- package/dist/commands/install-slack-app/install-slack-app.js +26 -0
- package/dist/commands/install.js +241 -0
- package/dist/commands/issue/index.js +1 -0
- package/dist/commands/keybindings/index.js +13 -0
- package/dist/commands/keybindings/keybindings.js +46 -0
- package/dist/commands/login/index.js +11 -0
- package/dist/commands/login/login.js +59 -0
- package/dist/commands/logout/index.js +11 -0
- package/dist/commands/logout/logout.js +71 -0
- package/dist/commands/mcp/addCommand.js +199 -0
- package/dist/commands/mcp/index.js +24 -0
- package/dist/commands/mcp/mcp.js +80 -0
- package/dist/commands/mcp/xaaIdpCommand.js +176 -0
- package/dist/commands/memory/index.js +10 -0
- package/dist/commands/memory/memory.js +75 -0
- package/dist/commands/mobile/index.js +12 -0
- package/dist/commands/mobile/localMobileServer.js +260 -0
- package/dist/commands/mobile/memcodeRelay.js +188 -0
- package/dist/commands/mobile/mobile.js +88 -0
- package/dist/commands/mock-limits/index.js +1 -0
- package/dist/commands/mode/index.js +11 -0
- package/dist/commands/mode/mode.js +88 -0
- package/dist/commands/model/index.js +14 -0
- package/dist/commands/model/model.js +279 -0
- package/dist/commands/oauth-refresh/index.js +1 -0
- package/dist/commands/onboarding/index.js +1 -0
- package/dist/commands/output-style/index.js +11 -0
- package/dist/commands/output-style/output-style.js +8 -0
- package/dist/commands/passes/index.js +28 -0
- package/dist/commands/passes/passes.js +24 -0
- package/dist/commands/perf-issue/index.js +1 -0
- package/dist/commands/permissions/index.js +11 -0
- package/dist/commands/permissions/permissions.js +11 -0
- package/dist/commands/plan/index.js +11 -0
- package/dist/commands/plan/plan.js +123 -0
- package/dist/commands/plugin/AddMarketplace.js +126 -0
- package/dist/commands/plugin/BrowseMarketplace.js +658 -0
- package/dist/commands/plugin/DiscoverPlugins.js +685 -0
- package/dist/commands/plugin/ManageMarketplaces.js +695 -0
- package/dist/commands/plugin/ManagePlugins.js +1728 -0
- package/dist/commands/plugin/PluginErrors.js +122 -0
- package/dist/commands/plugin/PluginOptionsDialog.js +361 -0
- package/dist/commands/plugin/PluginOptionsFlow.js +78 -0
- package/dist/commands/plugin/PluginSettings.js +1066 -0
- package/dist/commands/plugin/PluginTrustWarning.js +43 -0
- package/dist/commands/plugin/UnifiedInstalledCell.js +640 -0
- package/dist/commands/plugin/ValidatePlugin.js +107 -0
- package/dist/commands/plugin/index.js +12 -0
- package/dist/commands/plugin/parseArgs.js +64 -0
- package/dist/commands/plugin/plugin.js +8 -0
- package/dist/commands/plugin/pluginDetailsHelpers.js +89 -0
- package/dist/commands/plugin/usePagination.js +94 -0
- package/dist/commands/pr_comments/index.js +52 -0
- package/dist/commands/privacy-settings/index.js +15 -0
- package/dist/commands/privacy-settings/privacy-settings.js +53 -0
- package/dist/commands/rate-limit-options/index.js +23 -0
- package/dist/commands/rate-limit-options/rate-limit-options.js +204 -0
- package/dist/commands/release-notes/index.js +11 -0
- package/dist/commands/release-notes/release-notes.js +39 -0
- package/dist/commands/reload-plugins/index.js +14 -0
- package/dist/commands/reload-plugins/reload-plugins.js +39 -0
- package/dist/commands/remote-env/index.js +16 -0
- package/dist/commands/remote-env/remote-env.js +8 -0
- package/dist/commands/remote-setup/api.js +138 -0
- package/dist/commands/remote-setup/index.js +16 -0
- package/dist/commands/remote-setup/remote-setup.js +153 -0
- package/dist/commands/rename/generateSessionName.js +54 -0
- package/dist/commands/rename/index.js +12 -0
- package/dist/commands/rename/rename.js +67 -0
- package/dist/commands/reset-limits/index.js +4 -0
- package/dist/commands/resume/index.js +12 -0
- package/dist/commands/resume/resume.js +242 -0
- package/dist/commands/review/UltrareviewOverageDialog.js +98 -0
- package/dist/commands/review/reviewRemote.js +211 -0
- package/dist/commands/review/ultrareviewCommand.js +47 -0
- package/dist/commands/review/ultrareviewEnabled.js +8 -0
- package/dist/commands/review.js +48 -0
- package/dist/commands/rewind/index.js +13 -0
- package/dist/commands/rewind/rewind.js +9 -0
- package/dist/commands/sandbox-toggle/index.js +45 -0
- package/dist/commands/sandbox-toggle/sandbox-toggle.js +61 -0
- package/dist/commands/security-review.js +237 -0
- package/dist/commands/session/index.js +16 -0
- package/dist/commands/session/session.js +149 -0
- package/dist/commands/share/index.js +1 -0
- package/dist/commands/skills/index.js +11 -0
- package/dist/commands/skills/skills.js +8 -0
- package/dist/commands/stats/index.js +10 -0
- package/dist/commands/stats/stats.js +8 -0
- package/dist/commands/status/index.js +11 -0
- package/dist/commands/status/status.js +8 -0
- package/dist/commands/statusline.js +24 -0
- package/dist/commands/stickers/index.js +11 -0
- package/dist/commands/stickers/stickers.js +16 -0
- package/dist/commands/summary/index.js +1 -0
- package/dist/commands/tag/index.js +12 -0
- package/dist/commands/tag/tag.js +218 -0
- package/dist/commands/tasks/index.js +11 -0
- package/dist/commands/tasks/tasks.js +8 -0
- package/dist/commands/teleport/index.js +1 -0
- package/dist/commands/terminalSetup/index.js +18 -0
- package/dist/commands/terminalSetup/terminalSetup.js +423 -0
- package/dist/commands/theme/index.js +10 -0
- package/dist/commands/theme/theme.js +52 -0
- package/dist/commands/thinkback/index.js +12 -0
- package/dist/commands/thinkback/thinkback.js +516 -0
- package/dist/commands/thinkback-play/index.js +14 -0
- package/dist/commands/thinkback-play/thinkback-play.js +34 -0
- package/dist/commands/ultraplan.js +365 -0
- package/dist/commands/upgrade/index.js +13 -0
- package/dist/commands/upgrade/upgrade.js +37 -0
- package/dist/commands/usage/index.js +9 -0
- package/dist/commands/usage/usage.js +8 -0
- package/dist/commands/version.js +18 -0
- package/dist/commands/vim/index.js +11 -0
- package/dist/commands/vim/vim.js +27 -0
- package/dist/commands/voice/index.js +18 -0
- package/dist/commands/voice/voice.js +126 -0
- package/dist/commands/xingest/index.js +11 -0
- package/dist/commands/xingest/xingest.js +105 -0
- package/dist/commands/xmem/index.js +11 -0
- package/dist/commands/xmem/xmem.js +65 -0
- package/dist/commands/xsearch/index.js +11 -0
- package/dist/commands/xsearch/xsearch.js +76 -0
- package/dist/commands.js +936 -0
- package/dist/components/AgentProgressLine.js +158 -0
- package/dist/components/AntModelSwitchCallout.js +6 -0
- package/dist/components/App.js +46 -0
- package/dist/components/ApproveApiKey.js +133 -0
- package/dist/components/AutoModeOptInDialog.js +141 -0
- package/dist/components/AutoUpdater.js +154 -0
- package/dist/components/AutoUpdaterWrapper.js +85 -0
- package/dist/components/AwsAuthStatusBox.js +93 -0
- package/dist/components/BaseTextInput.js +139 -0
- package/dist/components/BashModeProgress.js +55 -0
- package/dist/components/BridgeDialog.js +423 -0
- package/dist/components/BypassPermissionsModeDialog.js +96 -0
- package/dist/components/ChannelDowngradeDialog.js +102 -0
- package/dist/components/ClickableImageRef.js +60 -0
- package/dist/components/CommandSelectModal.js +51 -0
- package/dist/components/CompactSummary.js +148 -0
- package/dist/components/ConfigurableShortcutHint.js +31 -0
- package/dist/components/ConsoleOAuthFlow.js +620 -0
- package/dist/components/ContextSuggestions.js +60 -0
- package/dist/components/ContextVisualization.js +709 -0
- package/dist/components/CoordinatorAgentStatus.js +264 -0
- package/dist/components/CostThresholdDialog.js +55 -0
- package/dist/components/CtrlOToExpand.js +52 -0
- package/dist/components/CustomSelect/SelectMulti.js +185 -0
- package/dist/components/CustomSelect/index.js +2 -0
- package/dist/components/CustomSelect/option-map.js +35 -0
- package/dist/components/CustomSelect/select-input-option.js +452 -0
- package/dist/components/CustomSelect/select-option.js +33 -0
- package/dist/components/CustomSelect/select.js +571 -0
- package/dist/components/CustomSelect/use-multi-select-state.js +188 -0
- package/dist/components/CustomSelect/use-select-input.js +169 -0
- package/dist/components/CustomSelect/use-select-navigation.js +379 -0
- package/dist/components/CustomSelect/use-select-state.js +33 -0
- package/dist/components/DesktopHandoff.js +200 -0
- package/dist/components/DesktopUpsell/DesktopUpsellStartup.js +167 -0
- package/dist/components/DevBar.js +52 -0
- package/dist/components/DevChannelsDialog.js +111 -0
- package/dist/components/DiagnosticsDisplay.js +121 -0
- package/dist/components/EffortCallout.js +259 -0
- package/dist/components/EffortIndicator.js +33 -0
- package/dist/components/ExitFlow.js +45 -0
- package/dist/components/ExportDialog.js +113 -0
- package/dist/components/FallbackToolUseErrorMessage.js +62 -0
- package/dist/components/FallbackToolUseRejectedMessage.js +18 -0
- package/dist/components/FastIcon.js +46 -0
- package/dist/components/Feedback.js +494 -0
- package/dist/components/FeedbackSurvey/FeedbackSurvey.js +177 -0
- package/dist/components/FeedbackSurvey/FeedbackSurveyView.js +126 -0
- package/dist/components/FeedbackSurvey/TranscriptSharePrompt.js +106 -0
- package/dist/components/FeedbackSurvey/submitTranscriptShare.js +81 -0
- package/dist/components/FeedbackSurvey/useDebouncedDigitInput.js +56 -0
- package/dist/components/FeedbackSurvey/useFeedbackSurvey.js +245 -0
- package/dist/components/FeedbackSurvey/useFrustrationDetection.js +6 -0
- package/dist/components/FeedbackSurvey/useMemorySurvey.js +190 -0
- package/dist/components/FeedbackSurvey/usePostCompactSurvey.js +203 -0
- package/dist/components/FeedbackSurvey/useSurveyState.js +84 -0
- package/dist/components/FileEditToolDiff.js +164 -0
- package/dist/components/FileEditToolUpdatedMessage.js +134 -0
- package/dist/components/FileEditToolUseRejectedMessage.js +177 -0
- package/dist/components/FilePathLink.js +33 -0
- package/dist/components/FullscreenLayout.js +512 -0
- package/dist/components/GlobalSearchDialog.js +339 -0
- package/dist/components/HelpV2/Commands.js +78 -0
- package/dist/components/HelpV2/General.js +31 -0
- package/dist/components/HelpV2/HelpV2.js +195 -0
- package/dist/components/HighlightedCode/Fallback.js +186 -0
- package/dist/components/HighlightedCode.js +189 -0
- package/dist/components/HistorySearchDialog.js +105 -0
- package/dist/components/IdeAutoConnectDialog.js +156 -0
- package/dist/components/IdeOnboardingDialog.js +200 -0
- package/dist/components/IdeStatusIndicator.js +63 -0
- package/dist/components/IdleReturnDialog.js +117 -0
- package/dist/components/InterruptedByUser.js +11 -0
- package/dist/components/InvalidConfigDialog.js +143 -0
- package/dist/components/InvalidSettingsDialog.js +84 -0
- package/dist/components/KeybindingWarnings.js +85 -0
- package/dist/components/LanguagePicker.js +91 -0
- package/dist/components/LogSelector.js +1561 -0
- package/dist/components/LogoV2/AnimatedAsterisk.js +39 -0
- package/dist/components/LogoV2/AnimatedXGlyph.js +90 -0
- package/dist/components/LogoV2/ChannelsNotice.js +288 -0
- package/dist/components/LogoV2/CondensedLogo.js +180 -0
- package/dist/components/LogoV2/EmergencyTip.js +42 -0
- package/dist/components/LogoV2/Feed.js +112 -0
- package/dist/components/LogoV2/FeedColumn.js +60 -0
- package/dist/components/LogoV2/GuestPassesUpsell.js +79 -0
- package/dist/components/LogoV2/LogoV2.js +47 -0
- package/dist/components/LogoV2/Opus1mMergeNotice.js +63 -0
- package/dist/components/LogoV2/OverageCreditUpsell.js +141 -0
- package/dist/components/LogoV2/VoiceModeNotice.js +73 -0
- package/dist/components/LogoV2/WelcomeV2.js +653 -0
- package/dist/components/LogoV2/XGlyph.js +59 -0
- package/dist/components/LogoV2/feedConfigs.js +92 -0
- package/dist/components/LspRecommendation/LspRecommendationMenu.js +78 -0
- package/dist/components/MCPServerApprovalDialog.js +114 -0
- package/dist/components/MCPServerDesktopImportDialog.js +213 -0
- package/dist/components/MCPServerDialogCopy.js +22 -0
- package/dist/components/MCPServerMultiselectDialog.js +141 -0
- package/dist/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.js +161 -0
- package/dist/components/ManagedSettingsSecurityDialog/utils.js +81 -0
- package/dist/components/Markdown.js +173 -0
- package/dist/components/MarkdownTable.js +205 -0
- package/dist/components/MemoryUsageIndicator.js +30 -0
- package/dist/components/Message.js +485 -0
- package/dist/components/MessageModel.js +40 -0
- package/dist/components/MessageResponse.js +79 -0
- package/dist/components/MessageRow.js +306 -0
- package/dist/components/MessageSelector.js +803 -0
- package/dist/components/MessageTimestamp.js +60 -0
- package/dist/components/Messages.js +501 -0
- package/dist/components/ModelPicker.js +487 -0
- package/dist/components/NativeAutoUpdater.js +155 -0
- package/dist/components/NotebookEditToolUseRejectedMessage.js +100 -0
- package/dist/components/OffscreenFreeze.js +22 -0
- package/dist/components/Onboarding.js +231 -0
- package/dist/components/OutputStylePicker.js +107 -0
- package/dist/components/PackageManagerAutoUpdater.js +112 -0
- package/dist/components/Passes/Passes.js +147 -0
- package/dist/components/PrBadge.js +102 -0
- package/dist/components/PressEnterToContinue.js +21 -0
- package/dist/components/PromptInput/HistorySearchInput.js +52 -0
- package/dist/components/PromptInput/IssueFlagBanner.js +6 -0
- package/dist/components/PromptInput/Notifications.js +262 -0
- package/dist/components/PromptInput/PromptInput.js +1875 -0
- package/dist/components/PromptInput/PromptInputFooter.js +171 -0
- package/dist/components/PromptInput/PromptInputFooterLeftSide.js +413 -0
- package/dist/components/PromptInput/PromptInputFooterSuggestions.js +144 -0
- package/dist/components/PromptInput/PromptInputHelpMenu.js +409 -0
- package/dist/components/PromptInput/PromptInputModeIndicator.js +76 -0
- package/dist/components/PromptInput/PromptInputQueuedCommands.js +75 -0
- package/dist/components/PromptInput/PromptInputStashNotice.js +27 -0
- package/dist/components/PromptInput/SandboxPromptFooterHint.js +75 -0
- package/dist/components/PromptInput/ShimmeredInput.js +136 -0
- package/dist/components/PromptInput/VoiceIndicator.js +152 -0
- package/dist/components/PromptInput/inputModes.js +30 -0
- package/dist/components/PromptInput/inputPaste.js +53 -0
- package/dist/components/PromptInput/useMaybeTruncateInput.js +42 -0
- package/dist/components/PromptInput/usePromptInputPlaceholder.js +54 -0
- package/dist/components/PromptInput/useShowFastIconHint.js +22 -0
- package/dist/components/PromptInput/useSwarmBanner.js +106 -0
- package/dist/components/PromptInput/utils.js +30 -0
- package/dist/components/QuickOpenDialog.js +243 -0
- package/dist/components/RemoteCallout.js +58 -0
- package/dist/components/RemoteEnvironmentDialog.js +369 -0
- package/dist/components/ResumeTask.js +231 -0
- package/dist/components/SandboxViolationExpandedView.js +115 -0
- package/dist/components/ScrollKeybindingHandler.js +566 -0
- package/dist/components/SearchBox.js +75 -0
- package/dist/components/SentryErrorBoundary.js +19 -0
- package/dist/components/SessionBackgroundHint.js +74 -0
- package/dist/components/SessionPreview.js +209 -0
- package/dist/components/Settings/Config.js +1652 -0
- package/dist/components/Settings/Settings.js +130 -0
- package/dist/components/Settings/Status.js +254 -0
- package/dist/components/Settings/Usage.js +379 -0
- package/dist/components/ShowInIDEPrompt.js +177 -0
- package/dist/components/SkillImprovementSurvey.js +163 -0
- package/dist/components/Spinner/FlashingChar.js +57 -0
- package/dist/components/Spinner/GlimmerMessage.js +340 -0
- package/dist/components/Spinner/ShimmerChar.js +30 -0
- package/dist/components/Spinner/SpinnerAnimationRow.js +189 -0
- package/dist/components/Spinner/SpinnerGlyph.js +36 -0
- package/dist/components/Spinner/SubagentStatusList.js +79 -0
- package/dist/components/Spinner/TeammateSpinnerLine.js +183 -0
- package/dist/components/Spinner/TeammateSpinnerTree.js +302 -0
- package/dist/components/Spinner/index.js +17 -0
- package/dist/components/Spinner/teammateSelectHint.js +4 -0
- package/dist/components/Spinner/useShimmerAnimation.js +20 -0
- package/dist/components/Spinner/useStalledAnimation.js +50 -0
- package/dist/components/Spinner/utils.js +72 -0
- package/dist/components/Spinner.js +481 -0
- package/dist/components/StartupCarousel.js +255 -0
- package/dist/components/Stats.js +1130 -0
- package/dist/components/StatusLine.js +257 -0
- package/dist/components/StatusNotices.js +48 -0
- package/dist/components/StructuredDiff/Fallback.js +340 -0
- package/dist/components/StructuredDiff/colorDiff.js +27 -0
- package/dist/components/StructuredDiff.js +146 -0
- package/dist/components/StructuredDiffList.js +17 -0
- package/dist/components/TagTabs.js +106 -0
- package/dist/components/TaskListV2.js +368 -0
- package/dist/components/TeammateViewHeader.js +92 -0
- package/dist/components/TeleportError.js +182 -0
- package/dist/components/TeleportProgress.js +138 -0
- package/dist/components/TeleportRepoMismatchDialog.js +123 -0
- package/dist/components/TeleportResumeWrapper.js +174 -0
- package/dist/components/TeleportStash.js +108 -0
- package/dist/components/TextInput.js +88 -0
- package/dist/components/ThemePicker.js +353 -0
- package/dist/components/ThinkingToggle.js +152 -0
- package/dist/components/TokenWarning.js +170 -0
- package/dist/components/ToolUseLoader.js +39 -0
- package/dist/components/TrustDialog/TrustDialog.js +307 -0
- package/dist/components/TrustDialog/utils.js +160 -0
- package/dist/components/UndercoverAutoCallout.js +6 -0
- package/dist/components/UsageMeter.js +40 -0
- package/dist/components/ValidationErrorsList.js +141 -0
- package/dist/components/VimTextInput.js +138 -0
- package/dist/components/VirtualMessageList.js +699 -0
- package/dist/components/WorkflowMultiselectDialog.js +133 -0
- package/dist/components/WorktreeExitDialog.js +210 -0
- package/dist/components/XMemExitSummary.js +29 -0
- package/dist/components/XMemOAuthFlow.js +296 -0
- package/dist/components/XUI.js +57 -0
- package/dist/components/agents/AgentDetail.js +282 -0
- package/dist/components/agents/AgentEditor.js +161 -0
- package/dist/components/agents/AgentNavigationFooter.js +25 -0
- package/dist/components/agents/AgentsList.js +498 -0
- package/dist/components/agents/AgentsMenu.js +812 -0
- package/dist/components/agents/ColorPicker.js +130 -0
- package/dist/components/agents/ModelSelector.js +68 -0
- package/dist/components/agents/ToolSelector.js +558 -0
- package/dist/components/agents/agentFileUtils.js +174 -0
- package/dist/components/agents/generateAgent.js +164 -0
- package/dist/components/agents/new-agent-creation/CreateAgentWizard.js +90 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/ColorStep.js +88 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/ConfirmStep.js +437 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.js +69 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/DescriptionStep.js +134 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/GenerateStep.js +125 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/LocationStep.js +84 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +114 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/MethodStep.js +85 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/ModelStep.js +57 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/PromptStep.js +140 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/ToolsStep.js +62 -0
- package/dist/components/agents/new-agent-creation/wizard-steps/TypeStep.js +109 -0
- package/dist/components/agents/types.js +7 -0
- package/dist/components/agents/utils.js +17 -0
- package/dist/components/agents/validateAgent.js +78 -0
- package/dist/components/assistant-room/AssistantRoom.js +437 -0
- package/dist/components/design-system/Byline.js +50 -0
- package/dist/components/design-system/Dialog.js +136 -0
- package/dist/components/design-system/Divider.js +97 -0
- package/dist/components/design-system/FuzzyPicker.js +231 -0
- package/dist/components/design-system/KeyboardShortcutHint.js +59 -0
- package/dist/components/design-system/ListItem.js +155 -0
- package/dist/components/design-system/LoadingState.js +62 -0
- package/dist/components/design-system/Pane.js +55 -0
- package/dist/components/design-system/ProgressBar.js +66 -0
- package/dist/components/design-system/Ratchet.js +79 -0
- package/dist/components/design-system/StatusIcon.js +59 -0
- package/dist/components/design-system/Tabs.js +297 -0
- package/dist/components/design-system/ThemeProvider.js +140 -0
- package/dist/components/design-system/ThemedBox.js +115 -0
- package/dist/components/design-system/ThemedText.js +62 -0
- package/dist/components/design-system/color.js +16 -0
- package/dist/components/diff/DiffDetailView.js +298 -0
- package/dist/components/diff/DiffDialog.js +419 -0
- package/dist/components/diff/DiffFileList.js +308 -0
- package/dist/components/grove/Grove.js +544 -0
- package/dist/components/hooks/HooksConfigMenu.js +564 -0
- package/dist/components/hooks/PromptDialog.js +84 -0
- package/dist/components/hooks/SelectEventMode.js +133 -0
- package/dist/components/hooks/SelectHookMode.js +100 -0
- package/dist/components/hooks/SelectMatcherMode.js +129 -0
- package/dist/components/hooks/ViewHookMode.js +217 -0
- package/dist/components/mcp/CapabilitiesSection.js +61 -0
- package/dist/components/mcp/ElicitationDialog.js +969 -0
- package/dist/components/mcp/MCPAgentServerMenu.js +158 -0
- package/dist/components/mcp/MCPListPanel.js +547 -0
- package/dist/components/mcp/MCPReconnect.js +184 -0
- package/dist/components/mcp/MCPRemoteServerMenu.js +599 -0
- package/dist/components/mcp/MCPSettings.js +388 -0
- package/dist/components/mcp/MCPStdioServerMenu.js +161 -0
- package/dist/components/mcp/MCPToolDetailView.js +245 -0
- package/dist/components/mcp/MCPToolListView.js +144 -0
- package/dist/components/mcp/McpParsingWarnings.js +252 -0
- package/dist/components/mcp/index.js +18 -0
- package/dist/components/mcp/utils/reconnectHelpers.js +32 -0
- package/dist/components/memCodeHint/PluginHintMenu.js +72 -0
- package/dist/components/memCodeInChromeOnboarding.js +149 -0
- package/dist/components/memCodeMdExternalIncludesDialog.js +150 -0
- package/dist/components/memcode/Eye.js +29 -0
- package/dist/components/memcode/MemCodeViews.js +154 -0
- package/dist/components/memcode/MessageBubbleView.js +53 -0
- package/dist/components/memcode/SessionChrome.js +39 -0
- package/dist/components/memcode/SessionChromeView.js +208 -0
- package/dist/components/memcode/__snapshots__/header.txt +1 -0
- package/dist/components/memcode/__snapshots__/home.txt +15 -0
- package/dist/components/memcode/__snapshots__/inline-activity.txt +18 -0
- package/dist/components/memcode/__snapshots__/status-line.txt +1 -0
- package/dist/components/memcode/ink-primitives.js +11 -0
- package/dist/components/memcode/render-fixtures.js +308 -0
- package/dist/components/memcode/theme.js +93 -0
- package/dist/components/memory/MemoryFileSelector.js +444 -0
- package/dist/components/memory/MemoryUpdateNotification.js +48 -0
- package/dist/components/messageActions.js +414 -0
- package/dist/components/messages/AdvisorMessage.js +169 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +18 -0
- package/dist/components/messages/AssistantTextMessage.js +241 -0
- package/dist/components/messages/AssistantThinkingMessage.js +70 -0
- package/dist/components/messages/AssistantToolUseMessage.js +330 -0
- package/dist/components/messages/AttachmentMessage.js +556 -0
- package/dist/components/messages/CollapsedReadSearchContent.js +507 -0
- package/dist/components/messages/CompactBoundaryMessage.js +24 -0
- package/dist/components/messages/GroupedToolUseContent.js +44 -0
- package/dist/components/messages/HighlightedThinkingText.js +180 -0
- package/dist/components/messages/HookProgressMessage.js +123 -0
- package/dist/components/messages/PlanApprovalMessage.js +210 -0
- package/dist/components/messages/RateLimitMessage.js +156 -0
- package/dist/components/messages/ShutdownMessage.js +129 -0
- package/dist/components/messages/SnipBoundaryMessage.js +8 -0
- package/dist/components/messages/SystemAPIErrorMessage.js +57 -0
- package/dist/components/messages/SystemTextMessage.js +920 -0
- package/dist/components/messages/TaskAssignmentMessage.js +74 -0
- package/dist/components/messages/UserAgentNotificationMessage.js +84 -0
- package/dist/components/messages/UserBashInputMessage.js +58 -0
- package/dist/components/messages/UserBashOutputMessage.js +56 -0
- package/dist/components/messages/UserChannelMessage.js +137 -0
- package/dist/components/messages/UserCommandMessage.js +121 -0
- package/dist/components/messages/UserCrossSessionMessage.js +11 -0
- package/dist/components/messages/UserForkBoilerplateMessage.js +11 -0
- package/dist/components/messages/UserGitHubWebhookMessage.js +11 -0
- package/dist/components/messages/UserImageMessage.js +50 -0
- package/dist/components/messages/UserLocalCommandOutputMessage.js +182 -0
- package/dist/components/messages/UserMemoryInputMessage.js +82 -0
- package/dist/components/messages/UserPlanMessage.js +43 -0
- package/dist/components/messages/UserPromptMessage.js +60 -0
- package/dist/components/messages/UserResourceUpdateMessage.js +114 -0
- package/dist/components/messages/UserTeammateMessage.js +171 -0
- package/dist/components/messages/UserTextMessage.js +268 -0
- package/dist/components/messages/UserToolResultMessage/RejectedPlanMessage.js +33 -0
- package/dist/components/messages/UserToolResultMessage/RejectedToolUseMessage.js +15 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +18 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +99 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +83 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +92 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +70 -0
- package/dist/components/messages/UserToolResultMessage/utils.js +43 -0
- package/dist/components/messages/nullRenderingAttachments.js +43 -0
- package/dist/components/messages/teamMemCollapsed.js +144 -0
- package/dist/components/messages/teamMemSaved.js +11 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +648 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.js +229 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.js +261 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.js +205 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/QuestionView.js +489 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.js +162 -0
- package/dist/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.js +107 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +409 -0
- package/dist/components/permissions/BashPermissionRequest/bashToolUseOptions.js +106 -0
- package/dist/components/permissions/ComputerUseApproval/ComputerUseApproval.js +483 -0
- package/dist/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.js +134 -0
- package/dist/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.js +659 -0
- package/dist/components/permissions/FallbackPermissionRequest.js +351 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +186 -0
- package/dist/components/permissions/FilePermissionDialog/FilePermissionDialog.js +144 -0
- package/dist/components/permissions/FilePermissionDialog/ideDiffConfig.js +16 -0
- package/dist/components/permissions/FilePermissionDialog/permissionOptions.js +147 -0
- package/dist/components/permissions/FilePermissionDialog/useFilePermissionDialog.js +149 -0
- package/dist/components/permissions/FilePermissionDialog/usePermissionHandler.js +113 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +171 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +84 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +120 -0
- package/dist/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.js +171 -0
- package/dist/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.js +225 -0
- package/dist/components/permissions/PermissionDecisionDebugInfo.js +535 -0
- package/dist/components/permissions/PermissionDialog.js +49 -0
- package/dist/components/permissions/PermissionExplanation.js +258 -0
- package/dist/components/permissions/PermissionPrompt.js +313 -0
- package/dist/components/permissions/PermissionRequest.js +173 -0
- package/dist/components/permissions/PermissionRequestTitle.js +22 -0
- package/dist/components/permissions/PermissionRuleExplanation.js +116 -0
- package/dist/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.js +207 -0
- package/dist/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.js +73 -0
- package/dist/components/permissions/SandboxPermissionRequest.js +170 -0
- package/dist/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.js +230 -0
- package/dist/components/permissions/SkillPermissionRequest/SkillPermissionRequest.js +385 -0
- package/dist/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.js +265 -0
- package/dist/components/permissions/WorkerBadge.js +49 -0
- package/dist/components/permissions/WorkerPendingPermission.js +122 -0
- package/dist/components/permissions/hooks.js +143 -0
- package/dist/components/permissions/rules/AddPermissionRules.js +180 -0
- package/dist/components/permissions/rules/AddWorkspaceDirectory.js +350 -0
- package/dist/components/permissions/rules/PermissionRuleDescription.js +83 -0
- package/dist/components/permissions/rules/PermissionRuleInput.js +159 -0
- package/dist/components/permissions/rules/PermissionRuleList.js +1192 -0
- package/dist/components/permissions/rules/RecentDenialsTab.js +206 -0
- package/dist/components/permissions/rules/RemoveWorkspaceDirectory.js +107 -0
- package/dist/components/permissions/rules/WorkspaceTab.js +142 -0
- package/dist/components/permissions/shellPermissionHelpers.js +155 -0
- package/dist/components/permissions/useShellPermissionFeedback.js +108 -0
- package/dist/components/permissions/utils.js +21 -0
- package/dist/components/sandbox/SandboxConfigTab.js +106 -0
- package/dist/components/sandbox/SandboxDependenciesTab.js +182 -0
- package/dist/components/sandbox/SandboxDoctorSection.js +63 -0
- package/dist/components/sandbox/SandboxOverridesTab.js +211 -0
- package/dist/components/sandbox/SandboxSettings.js +302 -0
- package/dist/components/shell/ExpandShellOutputContext.js +27 -0
- package/dist/components/shell/OutputLine.js +109 -0
- package/dist/components/shell/ShellProgressMessage.js +152 -0
- package/dist/components/shell/ShellTimeDisplay.js +72 -0
- package/dist/components/skills/SkillsMenu.js +363 -0
- package/dist/components/tasks/AsyncAgentDetailDialog.js +273 -0
- package/dist/components/tasks/BackgroundTask.js +353 -0
- package/dist/components/tasks/BackgroundTaskStatus.js +407 -0
- package/dist/components/tasks/BackgroundTasksDialog.js +573 -0
- package/dist/components/tasks/DreamDetailDialog.js +290 -0
- package/dist/components/tasks/InProcessTeammateDetailDialog.js +313 -0
- package/dist/components/tasks/RemoteSessionDetailDialog.js +922 -0
- package/dist/components/tasks/RemoteSessionProgress.js +255 -0
- package/dist/components/tasks/ShellDetailDialog.js +427 -0
- package/dist/components/tasks/ShellProgress.js +82 -0
- package/dist/components/tasks/renderToolActivity.js +36 -0
- package/dist/components/tasks/taskStatusUtils.js +66 -0
- package/dist/components/teams/TeamStatus.js +82 -0
- package/dist/components/teams/TeamsDialog.js +643 -0
- package/dist/components/ui/OrderedList.js +69 -0
- package/dist/components/ui/OrderedListItem.js +49 -0
- package/dist/components/ui/TreeSelect.js +295 -0
- package/dist/components/wizard/WizardDialogLayout.js +62 -0
- package/dist/components/wizard/WizardNavigationFooter.js +19 -0
- package/dist/components/wizard/WizardProvider.js +213 -0
- package/dist/components/wizard/index.js +10 -0
- package/dist/components/wizard/useWizard.js +12 -0
- package/dist/constants/apiLimits.js +24 -0
- package/dist/constants/betas.js +51 -0
- package/dist/constants/common.js +21 -0
- package/dist/constants/cyberRiskInstruction.js +4 -0
- package/dist/constants/errorIds.js +4 -0
- package/dist/constants/figures.js +58 -0
- package/dist/constants/files.js +134 -0
- package/dist/constants/github-app.js +148 -0
- package/dist/constants/keys.js +7 -0
- package/dist/constants/memcodeDefaults.js +15 -0
- package/dist/constants/messages.js +4 -0
- package/dist/constants/oauth.js +159 -0
- package/dist/constants/outputStyles.js +176 -0
- package/dist/constants/product.js +49 -0
- package/dist/constants/prompts.js +664 -0
- package/dist/constants/querySource.js +0 -0
- package/dist/constants/spinnerVerbs.js +38 -0
- package/dist/constants/system.js +54 -0
- package/dist/constants/systemPromptSections.js +35 -0
- package/dist/constants/toolLimits.js +14 -0
- package/dist/constants/tools.js +89 -0
- package/dist/constants/turnCompletionVerbs.js +13 -0
- package/dist/constants/xml.js +89 -0
- package/dist/context/QueuedMessageContext.js +56 -0
- package/dist/context/fpsMetrics.js +28 -0
- package/dist/context/mailbox.js +39 -0
- package/dist/context/modalContext.js +32 -0
- package/dist/context/notifications.js +181 -0
- package/dist/context/overlayContext.js +97 -0
- package/dist/context/promptOverlayContext.js +95 -0
- package/dist/context/stats.js +211 -0
- package/dist/context/voice.js +66 -0
- package/dist/context.js +136 -0
- package/dist/coordinator/coordinatorMode.js +332 -0
- package/dist/cost-tracker.js +248 -0
- package/dist/costHook.js +20 -0
- package/dist/dialogLaunchers.js +63 -0
- package/dist/entrypoints/agentSdkTypes.js +68 -0
- package/dist/entrypoints/cli.js +320 -0
- package/dist/entrypoints/init.js +235 -0
- package/dist/entrypoints/mcp.js +162 -0
- package/dist/entrypoints/sandboxTypes.js +75 -0
- package/dist/entrypoints/sdk/controlSchemas.js +533 -0
- package/dist/entrypoints/sdk/coreSchemas.js +1562 -0
- package/dist/entrypoints/sdk/coreTypes.generated.js +4 -0
- package/dist/entrypoints/sdk/coreTypes.js +42 -0
- package/dist/entrypoints/sdk/runtimeTypes.js +0 -0
- package/dist/entrypoints/sdk/sdkUtilityTypes.js +4 -0
- package/dist/entrypoints/sdk/settingsTypes.generated.js +0 -0
- package/dist/entrypoints/sdk/toolTypes.js +0 -0
- package/dist/history.js +300 -0
- package/dist/hooks/fileSuggestions.js +527 -0
- package/dist/hooks/notifs/useAntOrgWarningNotification.js +5 -0
- package/dist/hooks/notifs/useAutoModeUnavailableNotification.js +40 -0
- package/dist/hooks/notifs/useCanSwitchToExistingSubscription.js +60 -0
- package/dist/hooks/notifs/useDeprecationWarningNotification.js +46 -0
- package/dist/hooks/notifs/useFastModeNotification.js +164 -0
- package/dist/hooks/notifs/useIDEStatusIndicator.js +185 -0
- package/dist/hooks/notifs/useInstallMessages.js +28 -0
- package/dist/hooks/notifs/useLspInitializationNotification.js +143 -0
- package/dist/hooks/notifs/useMcpConnectivityStatus.js +125 -0
- package/dist/hooks/notifs/useModelMigrationNotifications.js +49 -0
- package/dist/hooks/notifs/useNpmDeprecationNotification.js +6 -0
- package/dist/hooks/notifs/usePluginAutoupdateNotification.js +88 -0
- package/dist/hooks/notifs/usePluginInstallationStatus.js +138 -0
- package/dist/hooks/notifs/useRateLimitWarningNotification.js +116 -0
- package/dist/hooks/notifs/useSettingsErrors.js +70 -0
- package/dist/hooks/notifs/useStartupNotification.js +25 -0
- package/dist/hooks/notifs/useTeammateShutdownNotification.js +63 -0
- package/dist/hooks/renderPlaceholder.js +30 -0
- package/dist/hooks/toolPermission/PermissionContext.js +259 -0
- package/dist/hooks/toolPermission/handlers/coordinatorHandler.js +27 -0
- package/dist/hooks/toolPermission/handlers/interactiveHandler.js +375 -0
- package/dist/hooks/toolPermission/handlers/swarmWorkerHandler.js +90 -0
- package/dist/hooks/toolPermission/permissionLogging.js +149 -0
- package/dist/hooks/unifiedSuggestions.js +137 -0
- package/dist/hooks/useAfterFirstRender.js +17 -0
- package/dist/hooks/useApiKeyVerification.js +61 -0
- package/dist/hooks/useArrowKeyHistory.js +170 -0
- package/dist/hooks/useAssistantHistory.js +153 -0
- package/dist/hooks/useAwaySummary.js +96 -0
- package/dist/hooks/useBackgroundTaskNavigation.js +165 -0
- package/dist/hooks/useBlink.js +12 -0
- package/dist/hooks/useCanUseTool.js +197 -0
- package/dist/hooks/useCancelRequest.js +175 -0
- package/dist/hooks/useChromeExtensionNotification.js +52 -0
- package/dist/hooks/useClipboardImageHint.js +54 -0
- package/dist/hooks/useCommandKeybindings.js +86 -0
- package/dist/hooks/useCommandQueue.js +11 -0
- package/dist/hooks/useCopyOnSelect.js +45 -0
- package/dist/hooks/useDeferredHookMessages.js +34 -0
- package/dist/hooks/useDiffData.js +67 -0
- package/dist/hooks/useDiffInIDE.js +232 -0
- package/dist/hooks/useDirectConnect.js +176 -0
- package/dist/hooks/useDoublePress.js +45 -0
- package/dist/hooks/useDynamicConfig.js +17 -0
- package/dist/hooks/useElapsedTime.js +18 -0
- package/dist/hooks/useExitOnCtrlCD.js +38 -0
- package/dist/hooks/useExitOnCtrlCDWithKeybindings.js +8 -0
- package/dist/hooks/useFileHistorySnapshotInit.js +20 -0
- package/dist/hooks/useGlobalKeybindings.js +188 -0
- package/dist/hooks/useHistorySearch.js +237 -0
- package/dist/hooks/useIDEIntegration.js +63 -0
- package/dist/hooks/useIdeAtMentioned.js +50 -0
- package/dist/hooks/useIdeConnectionStatus.js +21 -0
- package/dist/hooks/useIdeLogging.js +37 -0
- package/dist/hooks/useIdeSelection.js +86 -0
- package/dist/hooks/useInboxPoller.js +735 -0
- package/dist/hooks/useInputBuffer.js +81 -0
- package/dist/hooks/useIssueFlagBanner.js +115 -0
- package/dist/hooks/useLogMessages.js +53 -0
- package/dist/hooks/useLspPluginRecommendation.js +166 -0
- package/dist/hooks/useMailboxBridge.js +16 -0
- package/dist/hooks/useMainLoopModel.js +20 -0
- package/dist/hooks/useManagePlugins.js +213 -0
- package/dist/hooks/useMemoryUsage.js +19 -0
- package/dist/hooks/useMergedClients.js +18 -0
- package/dist/hooks/useMergedCommands.js +13 -0
- package/dist/hooks/useMergedTools.js +24 -0
- package/dist/hooks/useMinDisplayTime.js +28 -0
- package/dist/hooks/useNotifyAfterTimeout.js +38 -0
- package/dist/hooks/useOfficialMarketplaceNotification.js +38 -0
- package/dist/hooks/usePasteHandler.js +164 -0
- package/dist/hooks/usePluginRecommendationBase.js +97 -0
- package/dist/hooks/usePrStatus.js +76 -0
- package/dist/hooks/usePromptSuggestion.js +129 -0
- package/dist/hooks/usePromptsFrommemCodeInChrome.js +64 -0
- package/dist/hooks/useQueueProcessor.js +35 -0
- package/dist/hooks/useRemoteSession.js +379 -0
- package/dist/hooks/useReplBridge.js +591 -0
- package/dist/hooks/useSSHSession.js +182 -0
- package/dist/hooks/useScheduledTasks.js +86 -0
- package/dist/hooks/useSearchInput.js +289 -0
- package/dist/hooks/useSessionBackgrounding.js +120 -0
- package/dist/hooks/useSettings.js +7 -0
- package/dist/hooks/useSettingsChange.js +19 -0
- package/dist/hooks/useSkillImprovementSurvey.js +74 -0
- package/dist/hooks/useSkillsChange.js +43 -0
- package/dist/hooks/useSwarmInitialization.js +43 -0
- package/dist/hooks/useSwarmPermissionPoller.js +175 -0
- package/dist/hooks/useTaskListWatcher.js +141 -0
- package/dist/hooks/useTasksV2.js +184 -0
- package/dist/hooks/useTeammateViewAutoExit.js +39 -0
- package/dist/hooks/useTeleportResume.js +79 -0
- package/dist/hooks/useTerminalSize.js +14 -0
- package/dist/hooks/useTextInput.js +372 -0
- package/dist/hooks/useTimeout.js +13 -0
- package/dist/hooks/useTurnDiffs.js +127 -0
- package/dist/hooks/useTypeahead.js +1037 -0
- package/dist/hooks/useUpdateNotification.js +28 -0
- package/dist/hooks/useVimInput.js +230 -0
- package/dist/hooks/useVirtualScroll.js +290 -0
- package/dist/hooks/useVoice.js +796 -0
- package/dist/hooks/useVoiceEnabled.js +15 -0
- package/dist/hooks/useVoiceIntegration.js +365 -0
- package/dist/hooks/usememCodeHintRecommendation.js +115 -0
- package/dist/ink/Ansi.js +233 -0
- package/dist/ink/bidi.js +78 -0
- package/dist/ink/clearTerminal.js +46 -0
- package/dist/ink/colorize.js +125 -0
- package/dist/ink/components/AlternateScreen.js +58 -0
- package/dist/ink/components/App.js +381 -0
- package/dist/ink/components/AppContext.js +10 -0
- package/dist/ink/components/Box.js +169 -0
- package/dist/ink/components/Button.js +159 -0
- package/dist/ink/components/ClockContext.js +102 -0
- package/dist/ink/components/CursorDeclarationContext.js +9 -0
- package/dist/ink/components/ErrorOverview.js +95 -0
- package/dist/ink/components/Link.js +38 -0
- package/dist/ink/components/Newline.js +29 -0
- package/dist/ink/components/NoSelect.js +39 -0
- package/dist/ink/components/RawAnsi.js +34 -0
- package/dist/ink/components/ScrollBox.js +131 -0
- package/dist/ink/components/Spacer.js +17 -0
- package/dist/ink/components/StdinContext.js +16 -0
- package/dist/ink/components/TerminalFocusContext.js +45 -0
- package/dist/ink/components/TerminalSizeContext.js +5 -0
- package/dist/ink/components/Text.js +195 -0
- package/dist/ink/constants.js +4 -0
- package/dist/ink/dom.js +240 -0
- package/dist/ink/events/click-event.js +32 -0
- package/dist/ink/events/dispatcher.js +148 -0
- package/dist/ink/events/emitter.js +28 -0
- package/dist/ink/events/event-handlers.js +26 -0
- package/dist/ink/events/event.js +12 -0
- package/dist/ink/events/focus-event.js +11 -0
- package/dist/ink/events/input-event.js +92 -0
- package/dist/ink/events/keyboard-event.js +31 -0
- package/dist/ink/events/terminal-event.js +73 -0
- package/dist/ink/events/terminal-focus-event.js +11 -0
- package/dist/ink/focus.js +127 -0
- package/dist/ink/frame.js +26 -0
- package/dist/ink/get-max-width.js +8 -0
- package/dist/ink/global.d.js +0 -0
- package/dist/ink/hit-test.js +76 -0
- package/dist/ink/hooks/use-animation-frame.js +25 -0
- package/dist/ink/hooks/use-app.js +7 -0
- package/dist/ink/hooks/use-declared-cursor.js +30 -0
- package/dist/ink/hooks/use-input.js +34 -0
- package/dist/ink/hooks/use-interval.js +40 -0
- package/dist/ink/hooks/use-search-highlight.js +26 -0
- package/dist/ink/hooks/use-selection.js +62 -0
- package/dist/ink/hooks/use-stdin.js +7 -0
- package/dist/ink/hooks/use-tab-status.js +50 -0
- package/dist/ink/hooks/use-terminal-focus.js +9 -0
- package/dist/ink/hooks/use-terminal-title.js +19 -0
- package/dist/ink/hooks/use-terminal-viewport.js +42 -0
- package/dist/ink/ink.js +1306 -0
- package/dist/ink/instances.js +5 -0
- package/dist/ink/layout/engine.js +7 -0
- package/dist/ink/layout/geometry.js +63 -0
- package/dist/ink/layout/node.js +72 -0
- package/dist/ink/layout/yoga.js +242 -0
- package/dist/ink/line-width-cache.js +16 -0
- package/dist/ink/log-update.js +458 -0
- package/dist/ink/measure-element.js +8 -0
- package/dist/ink/measure-text.js +31 -0
- package/dist/ink/node-cache.js +25 -0
- package/dist/ink/optimizer.js +52 -0
- package/dist/ink/output.js +440 -0
- package/dist/ink/parse-keypress.js +547 -0
- package/dist/ink/reconciler.js +400 -0
- package/dist/ink/render-border.js +140 -0
- package/dist/ink/render-node-to-output.js +774 -0
- package/dist/ink/render-to-screen.js +145 -0
- package/dist/ink/renderer.js +101 -0
- package/dist/ink/root.js +83 -0
- package/dist/ink/screen.js +913 -0
- package/dist/ink/searchHighlight.js +50 -0
- package/dist/ink/selection.js +476 -0
- package/dist/ink/squash-text-nodes.js +54 -0
- package/dist/ink/stringWidth.js +129 -0
- package/dist/ink/styles.js +296 -0
- package/dist/ink/supports-hyperlinks.js +33 -0
- package/dist/ink/tabstops.js +37 -0
- package/dist/ink/terminal-focus-state.js +40 -0
- package/dist/ink/terminal-querier.js +136 -0
- package/dist/ink/terminal.js +127 -0
- package/dist/ink/termio/ansi.js +69 -0
- package/dist/ink/termio/csi.js +243 -0
- package/dist/ink/termio/dec.js +48 -0
- package/dist/ink/termio/esc.js +38 -0
- package/dist/ink/termio/osc.js +304 -0
- package/dist/ink/termio/parser.js +284 -0
- package/dist/ink/termio/sgr.js +262 -0
- package/dist/ink/termio/tokenize.js +184 -0
- package/dist/ink/termio/types.js +37 -0
- package/dist/ink/termio.js +8 -0
- package/dist/ink/useTerminalNotification.js +103 -0
- package/dist/ink/warn.js +11 -0
- package/dist/ink/widest-line.js +16 -0
- package/dist/ink/wrap-text.js +50 -0
- package/dist/ink/wrapAnsi.js +6 -0
- package/dist/ink.js +95 -0
- package/dist/interactiveHelpers.js +282 -0
- package/dist/keybindings/KeybindingContext.js +175 -0
- package/dist/keybindings/KeybindingProviderSetup.js +212 -0
- package/dist/keybindings/defaultBindings.js +311 -0
- package/dist/keybindings/loadUserBindings.js +302 -0
- package/dist/keybindings/match.js +55 -0
- package/dist/keybindings/parser.js +153 -0
- package/dist/keybindings/reservedShortcuts.js +85 -0
- package/dist/keybindings/resolver.js +115 -0
- package/dist/keybindings/schema.js +187 -0
- package/dist/keybindings/shortcutFormat.js +27 -0
- package/dist/keybindings/template.js +32 -0
- package/dist/keybindings/useKeybinding.js +108 -0
- package/dist/keybindings/useShortcutDisplay.js +27 -0
- package/dist/keybindings/validate.js +321 -0
- package/dist/macro.js +19 -0
- package/dist/main.js +3574 -0
- package/dist/memdir/findRelevantMemories.js +93 -0
- package/dist/memdir/memdir.js +317 -0
- package/dist/memdir/memoryAge.js +26 -0
- package/dist/memdir/memoryScan.js +51 -0
- package/dist/memdir/memoryShapeTelemetry.js +5 -0
- package/dist/memdir/memoryTypes.js +206 -0
- package/dist/memdir/paths.js +126 -0
- package/dist/memdir/teamMemPaths.js +158 -0
- package/dist/memdir/teamMemPrompts.js +89 -0
- package/dist/migrations/migrateAutoUpdatesToSettings.js +44 -0
- package/dist/migrations/migrateBypassPermissionsAcceptedToSettings.js +33 -0
- package/dist/migrations/migrateEnableAllProjectMcpServersToSettings.js +73 -0
- package/dist/migrations/migrateFennecToOpus.js +30 -0
- package/dist/migrations/migrateLegacyOpusToCurrent.js +33 -0
- package/dist/migrations/migrateOpusToOpus1m.js +26 -0
- package/dist/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js +14 -0
- package/dist/migrations/migrateSonnet1mToSonnet45.js +32 -0
- package/dist/migrations/migrateSonnet45ToSonnet46.js +44 -0
- package/dist/migrations/resetAutoModeOptInForDefaultOffer.js +34 -0
- package/dist/migrations/resetProToOpusDefault.js +45 -0
- package/dist/moreright/useMoreRight.js +11 -0
- package/dist/native-ts/color-diff/index.js +714 -0
- package/dist/native-ts/file-index/index.js +310 -0
- package/dist/native-ts/file-search/index.js +73 -0
- package/dist/native-ts/yoga-layout/enums.js +114 -0
- package/dist/native-ts/yoga-layout/index.js +1815 -0
- package/dist/outputStyles/loadOutputStylesDir.js +65 -0
- package/dist/plugins/builtinPlugins.js +99 -0
- package/dist/plugins/bundled/index.js +5 -0
- package/dist/projectOnboardingState.js +65 -0
- package/dist/public/leak-tweet.png +0 -0
- package/dist/public/memcode-files.png +0 -0
- package/dist/query/config.js +24 -0
- package/dist/query/deps.js +15 -0
- package/dist/query/stopHooks.js +327 -0
- package/dist/query/tokenBudget.js +51 -0
- package/dist/query.js +1160 -0
- package/dist/remote/RemoteSessionManager.js +210 -0
- package/dist/remote/SessionsWebSocket.js +291 -0
- package/dist/remote/remotePermissionBridge.js +60 -0
- package/dist/remote/sdkMessageAdapter.js +171 -0
- package/dist/replLauncher.js +22 -0
- package/dist/schemas/hooks.js +110 -0
- package/dist/screens/Doctor.js +789 -0
- package/dist/screens/REPL.js +4977 -0
- package/dist/screens/ResumeConversation.js +365 -0
- package/dist/server/createDirectConnectSession.js +64 -0
- package/dist/server/directConnectManager.js +143 -0
- package/dist/server/types.js +12 -0
- package/dist/server/xmemServer.js +172 -0
- package/dist/services/AgentSummary/agentSummary.js +121 -0
- package/dist/services/MagicDocs/magicDocs.js +168 -0
- package/dist/services/MagicDocs/prompts.js +91 -0
- package/dist/services/PromptSuggestion/promptSuggestion.js +380 -0
- package/dist/services/PromptSuggestion/speculation.js +706 -0
- package/dist/services/SessionMemory/prompts.js +247 -0
- package/dist/services/SessionMemory/sessionMemory.js +298 -0
- package/dist/services/SessionMemory/sessionMemoryUtils.js +111 -0
- package/dist/services/analytics/config.js +12 -0
- package/dist/services/analytics/datadog.js +225 -0
- package/dist/services/analytics/firstPartyEventLogger.js +274 -0
- package/dist/services/analytics/firstPartyEventLoggingExporter.js +548 -0
- package/dist/services/analytics/growthbook.js +638 -0
- package/dist/services/analytics/index.js +63 -0
- package/dist/services/analytics/metadata.js +535 -0
- package/dist/services/analytics/sink.js +48 -0
- package/dist/services/analytics/sinkKillswitch.js +9 -0
- package/dist/services/api/adminRequests.js +45 -0
- package/dist/services/api/bootstrap.js +126 -0
- package/dist/services/api/client.js +299 -0
- package/dist/services/api/dumpPrompts.js +164 -0
- package/dist/services/api/emptyUsage.js +18 -0
- package/dist/services/api/errorUtils.js +148 -0
- package/dist/services/api/errors.js +710 -0
- package/dist/services/api/filesApi.js +450 -0
- package/dist/services/api/firstTokenDate.js +49 -0
- package/dist/services/api/gemini.js +22 -0
- package/dist/services/api/geminiAdapter.js +92 -0
- package/dist/services/api/geminiClient.js +522 -0
- package/dist/services/api/grove.js +258 -0
- package/dist/services/api/logging.js +511 -0
- package/dist/services/api/memcode.js +2207 -0
- package/dist/services/api/metricsOptOut.js +98 -0
- package/dist/services/api/nvidiaClient.js +653 -0
- package/dist/services/api/openAICompatibleClient.js +576 -0
- package/dist/services/api/openRouterClient.js +636 -0
- package/dist/services/api/overageCreditGrant.js +80 -0
- package/dist/services/api/promptCacheBreakDetection.js +442 -0
- package/dist/services/api/reasoning.js +94 -0
- package/dist/services/api/referral.js +195 -0
- package/dist/services/api/sessionIngress.js +323 -0
- package/dist/services/api/ultrareviewQuota.js +28 -0
- package/dist/services/api/usage.js +38 -0
- package/dist/services/api/withRetry.js +522 -0
- package/dist/services/autoDream/autoDream.js +215 -0
- package/dist/services/autoDream/config.js +14 -0
- package/dist/services/autoDream/consolidationLock.js +89 -0
- package/dist/services/autoDream/consolidationPrompt.js +64 -0
- package/dist/services/awaySummary.js +63 -0
- package/dist/services/compact/apiMicrocompact.js +89 -0
- package/dist/services/compact/autoCompact.js +216 -0
- package/dist/services/compact/cachedMCConfig.js +4 -0
- package/dist/services/compact/cachedMicrocompact.js +55 -0
- package/dist/services/compact/compact.js +1132 -0
- package/dist/services/compact/compactWarningHook.js +11 -0
- package/dist/services/compact/compactWarningState.js +13 -0
- package/dist/services/compact/grouping.js +23 -0
- package/dist/services/compact/microCompact.js +296 -0
- package/dist/services/compact/postCompactCleanup.js +36 -0
- package/dist/services/compact/prompt.js +327 -0
- package/dist/services/compact/reactiveCompact.js +26 -0
- package/dist/services/compact/sessionMemoryCompact.js +364 -0
- package/dist/services/compact/snipCompact.js +8 -0
- package/dist/services/compact/snipProjection.js +6 -0
- package/dist/services/compact/timeBasedMCConfig.js +15 -0
- package/dist/services/contextCollapse/index.js +37 -0
- package/dist/services/contextCollapse/operations.js +6 -0
- package/dist/services/contextCollapse/persist.js +5 -0
- package/dist/services/diagnosticTracking.js +270 -0
- package/dist/services/extractMemories/extractMemories.js +287 -0
- package/dist/services/extractMemories/prompts.js +119 -0
- package/dist/services/internalLogging.js +58 -0
- package/dist/services/lsp/LSPClient.js +301 -0
- package/dist/services/lsp/LSPDiagnosticRegistry.js +224 -0
- package/dist/services/lsp/LSPServerInstance.js +292 -0
- package/dist/services/lsp/LSPServerManager.js +260 -0
- package/dist/services/lsp/config.js +52 -0
- package/dist/services/lsp/manager.js +148 -0
- package/dist/services/lsp/passiveFeedback.js +193 -0
- package/dist/services/mcp/InProcessTransport.js +42 -0
- package/dist/services/mcp/MCPConnectionManager.js +59 -0
- package/dist/services/mcp/SdkControlTransport.js +59 -0
- package/dist/services/mcp/auth.js +1723 -0
- package/dist/services/mcp/channelAllowlist.js +36 -0
- package/dist/services/mcp/channelNotification.js +141 -0
- package/dist/services/mcp/channelPermissions.js +98 -0
- package/dist/services/mcp/client.js +2269 -0
- package/dist/services/mcp/config.js +1028 -0
- package/dist/services/mcp/elicitationHandler.js +209 -0
- package/dist/services/mcp/envExpansion.js +22 -0
- package/dist/services/mcp/headersHelper.js +88 -0
- package/dist/services/mcp/mcpStringUtils.js +41 -0
- package/dist/services/mcp/memcodeProxy.js +106 -0
- package/dist/services/mcp/normalization.js +11 -0
- package/dist/services/mcp/oauthPort.js +51 -0
- package/dist/services/mcp/officialRegistry.js +50 -0
- package/dist/services/mcp/types.js +123 -0
- package/dist/services/mcp/useManageMCPConnections.js +770 -0
- package/dist/services/mcp/utils.js +314 -0
- package/dist/services/mcp/vscodeSdkMcp.js +85 -0
- package/dist/services/mcp/xaa.js +301 -0
- package/dist/services/mcp/xaaIdpLogin.js +329 -0
- package/dist/services/mcpServerApproval.js +28 -0
- package/dist/services/memcodeLimits.js +318 -0
- package/dist/services/memcodeLimitsHook.js +21 -0
- package/dist/services/mockRateLimits.js +585 -0
- package/dist/services/notifier.js +115 -0
- package/dist/services/oauth/auth-code-listener.js +152 -0
- package/dist/services/oauth/client.js +372 -0
- package/dist/services/oauth/crypto.js +20 -0
- package/dist/services/oauth/getOauthProfile.js +48 -0
- package/dist/services/oauth/index.js +120 -0
- package/dist/services/openAIVoiceSTT.js +242 -0
- package/dist/services/plugins/PluginInstallationManager.js +134 -0
- package/dist/services/plugins/pluginCliCommands.js +205 -0
- package/dist/services/plugins/pluginOperations.js +657 -0
- package/dist/services/policyLimits/index.js +444 -0
- package/dist/services/policyLimits/types.js +10 -0
- package/dist/services/preventSleep.js +103 -0
- package/dist/services/providers/catalog.js +141 -0
- package/dist/services/rateLimitMessages.js +202 -0
- package/dist/services/rateLimitMocking.js +85 -0
- package/dist/services/remoteManagedSettings/index.js +406 -0
- package/dist/services/remoteManagedSettings/securityCheck.js +48 -0
- package/dist/services/remoteManagedSettings/syncCache.js +51 -0
- package/dist/services/remoteManagedSettings/syncCacheState.js +53 -0
- package/dist/services/remoteManagedSettings/types.js +13 -0
- package/dist/services/sessionTranscript/sessionTranscript.js +8 -0
- package/dist/services/settingsSync/index.js +420 -0
- package/dist/services/settingsSync/types.js +29 -0
- package/dist/services/skillSearch/featureCheck.js +6 -0
- package/dist/services/skillSearch/localSearch.js +5 -0
- package/dist/services/skillSearch/prefetch.js +13 -0
- package/dist/services/skillSearch/remoteSkillLoader.js +6 -0
- package/dist/services/skillSearch/remoteSkillState.js +10 -0
- package/dist/services/skillSearch/signals.js +0 -0
- package/dist/services/skillSearch/telemetry.js +5 -0
- package/dist/services/teamMemorySync/index.js +813 -0
- package/dist/services/teamMemorySync/secretScanner.js +233 -0
- package/dist/services/teamMemorySync/teamMemSecretGuard.js +20 -0
- package/dist/services/teamMemorySync/types.js +39 -0
- package/dist/services/teamMemorySync/watcher.js +236 -0
- package/dist/services/tips/tipHistory.js +19 -0
- package/dist/services/tips/tipRegistry.js +583 -0
- package/dist/services/tips/tipScheduler.js +42 -0
- package/dist/services/tokenEstimation.js +310 -0
- package/dist/services/toolUseSummary/toolUseSummaryGenerator.js +76 -0
- package/dist/services/tools/StreamingToolExecutor.js +391 -0
- package/dist/services/tools/toolExecution.js +1219 -0
- package/dist/services/tools/toolHooks.js +454 -0
- package/dist/services/tools/toolOrchestration.js +137 -0
- package/dist/services/vcr.js +285 -0
- package/dist/services/voice.js +436 -0
- package/dist/services/voiceKeyterms.js +65 -0
- package/dist/services/voiceSTTProvider.js +73 -0
- package/dist/services/voiceSTTTypes.js +0 -0
- package/dist/services/voiceStreamSTT.js +309 -0
- package/dist/setup.js +315 -0
- package/dist/skills/bundled/assistantRoom.js +39 -0
- package/dist/skills/bundled/backgroundSession.js +27 -0
- package/dist/skills/bundled/batch.js +125 -0
- package/dist/skills/bundled/debug.js +91 -0
- package/dist/skills/bundled/github-auth-check/SKILL.md +31 -0
- package/dist/skills/bundled/github-ci-fix/SKILL.md +24 -0
- package/dist/skills/bundled/github-orient/SKILL.md +29 -0
- package/dist/skills/bundled/github-pr/SKILL.md +36 -0
- package/dist/skills/bundled/github-release/SKILL.md +23 -0
- package/dist/skills/bundled/github-review-fix/SKILL.md +25 -0
- package/dist/skills/bundled/github.js +90 -0
- package/dist/skills/bundled/githubContent.js +59 -0
- package/dist/skills/bundled/index.js +40 -0
- package/dist/skills/bundled/keybindings.js +304 -0
- package/dist/skills/bundled/loop.js +90 -0
- package/dist/skills/bundled/loremIpsum.js +273 -0
- package/dist/skills/bundled/remember.js +89 -0
- package/dist/skills/bundled/simplify.js +74 -0
- package/dist/skills/bundled/skillify.js +178 -0
- package/dist/skills/bundled/stuck.js +60 -0
- package/dist/skills/bundled/updateConfig.js +475 -0
- package/dist/skills/bundled/verify/SKILL.md +26 -0
- package/dist/skills/bundled/verify/examples/cli.md +9 -0
- package/dist/skills/bundled/verify/examples/server.md +9 -0
- package/dist/skills/bundled/verify.js +25 -0
- package/dist/skills/bundled/verifyContent.js +12 -0
- package/dist/skills/bundledSkills.js +124 -0
- package/dist/skills/loadSkillsDir.js +687 -0
- package/dist/skills/mcpSkillBuilders.js +16 -0
- package/dist/skills/mcpSkills.js +7 -0
- package/dist/src/ui/Eye.js +125 -0
- package/dist/src/ui/eye-frames.js +134 -0
- package/dist/src/ui/ink-primitives.js +26 -0
- package/dist/src/ui/preview.js +93 -0
- package/dist/state/AppState.js +155 -0
- package/dist/state/AppStateStore.js +120 -0
- package/dist/state/onChangeAppState.js +98 -0
- package/dist/state/selectors.js +33 -0
- package/dist/state/store.js +22 -0
- package/dist/state/teammateViewHelpers.js +89 -0
- package/dist/tasks/DreamTask/DreamTask.js +86 -0
- package/dist/tasks/InProcessTeammateTask/InProcessTeammateTask.js +79 -0
- package/dist/tasks/InProcessTeammateTask/types.js +20 -0
- package/dist/tasks/LocalAgentTask/LocalAgentTask.js +471 -0
- package/dist/tasks/LocalMainSessionTask.js +292 -0
- package/dist/tasks/LocalShellTask/LocalShellTask.js +445 -0
- package/dist/tasks/LocalShellTask/guards.js +6 -0
- package/dist/tasks/LocalShellTask/killShellTasks.js +50 -0
- package/dist/tasks/LocalWorkflowTask/LocalWorkflowTask.js +11 -0
- package/dist/tasks/MonitorMcpTask/MonitorMcpTask.js +8 -0
- package/dist/tasks/RemoteAgentTask/RemoteAgentTask.js +540 -0
- package/dist/tasks/pillLabel.js +85 -0
- package/dist/tasks/stopTask.js +62 -0
- package/dist/tasks/types.js +12 -0
- package/dist/tasks.js +25 -0
- package/dist/tools/AgentTool/AgentTool.js +1053 -0
- package/dist/tools/AgentTool/UI.js +679 -0
- package/dist/tools/AgentTool/agentColorManager.js +48 -0
- package/dist/tools/AgentTool/agentDisplay.js +50 -0
- package/dist/tools/AgentTool/agentMemory.js +104 -0
- package/dist/tools/AgentTool/agentMemorySnapshot.js +131 -0
- package/dist/tools/AgentTool/agentToolUtils.js +529 -0
- package/dist/tools/AgentTool/built-in/exploreAgent.js +74 -0
- package/dist/tools/AgentTool/built-in/generalPurposeAgent.js +30 -0
- package/dist/tools/AgentTool/built-in/memcodeGuideAgent.js +138 -0
- package/dist/tools/AgentTool/built-in/planAgent.js +86 -0
- package/dist/tools/AgentTool/built-in/statuslineSetup.js +143 -0
- package/dist/tools/AgentTool/built-in/verificationAgent.js +149 -0
- package/dist/tools/AgentTool/builtInAgents.js +56 -0
- package/dist/tools/AgentTool/constants.js +13 -0
- package/dist/tools/AgentTool/forkSubagent.js +127 -0
- package/dist/tools/AgentTool/loadAgentsDir.js +474 -0
- package/dist/tools/AgentTool/prompt.js +200 -0
- package/dist/tools/AgentTool/resumeAgent.js +217 -0
- package/dist/tools/AgentTool/runAgent.js +582 -0
- package/dist/tools/ApplyPatchTool/ApplyPatchTool.js +359 -0
- package/dist/tools/ApplyPatchTool/applyPatch.js +223 -0
- package/dist/tools/ApplyPatchTool/constants.js +4 -0
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +258 -0
- package/dist/tools/AskUserQuestionTool/prompt.js +45 -0
- package/dist/tools/BashTool/BashTool.js +887 -0
- package/dist/tools/BashTool/BashToolResultMessage.js +174 -0
- package/dist/tools/BashTool/UI.js +155 -0
- package/dist/tools/BashTool/bashCommandHelpers.js +164 -0
- package/dist/tools/BashTool/bashPermissions.js +1606 -0
- package/dist/tools/BashTool/bashSecurity.js +1483 -0
- package/dist/tools/BashTool/commandSemantics.js +81 -0
- package/dist/tools/BashTool/commentLabel.js +9 -0
- package/dist/tools/BashTool/destructiveCommandWarning.js +82 -0
- package/dist/tools/BashTool/modeValidation.js +69 -0
- package/dist/tools/BashTool/pathValidation.js +819 -0
- package/dist/tools/BashTool/prompt.js +317 -0
- package/dist/tools/BashTool/readOnlyValidation.js +1727 -0
- package/dist/tools/BashTool/sedEditParser.js +180 -0
- package/dist/tools/BashTool/sedValidation.js +386 -0
- package/dist/tools/BashTool/shouldUseSandbox.js +106 -0
- package/dist/tools/BashTool/toolName.js +4 -0
- package/dist/tools/BashTool/utils.js +150 -0
- package/dist/tools/BriefTool/BriefTool.js +128 -0
- package/dist/tools/BriefTool/UI.js +97 -0
- package/dist/tools/BriefTool/attachments.js +73 -0
- package/dist/tools/BriefTool/prompt.js +26 -0
- package/dist/tools/BriefTool/upload.js +109 -0
- package/dist/tools/ConfigTool/ConfigTool.js +381 -0
- package/dist/tools/ConfigTool/UI.js +49 -0
- package/dist/tools/ConfigTool/constants.js +4 -0
- package/dist/tools/ConfigTool/prompt.js +76 -0
- package/dist/tools/ConfigTool/supportedSettings.js +175 -0
- package/dist/tools/EnterPlanModeTool/EnterPlanModeTool.js +106 -0
- package/dist/tools/EnterPlanModeTool/UI.js +17 -0
- package/dist/tools/EnterPlanModeTool/constants.js +4 -0
- package/dist/tools/EnterPlanModeTool/prompt.js +157 -0
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +122 -0
- package/dist/tools/EnterWorktreeTool/UI.js +18 -0
- package/dist/tools/EnterWorktreeTool/constants.js +4 -0
- package/dist/tools/EnterWorktreeTool/prompt.js +33 -0
- package/dist/tools/ExitPlanModeTool/ExitPlanModeV2Tool.js +342 -0
- package/dist/tools/ExitPlanModeTool/UI.js +71 -0
- package/dist/tools/ExitPlanModeTool/constants.js +6 -0
- package/dist/tools/ExitPlanModeTool/prompt.js +28 -0
- package/dist/tools/ExitWorktreeTool/ExitWorktreeTool.js +255 -0
- package/dist/tools/ExitWorktreeTool/UI.js +27 -0
- package/dist/tools/ExitWorktreeTool/constants.js +4 -0
- package/dist/tools/ExitWorktreeTool/prompt.js +35 -0
- package/dist/tools/FileEditTool/FileEditTool.js +480 -0
- package/dist/tools/FileEditTool/UI.js +228 -0
- package/dist/tools/FileEditTool/constants.js +10 -0
- package/dist/tools/FileEditTool/prompt.js +25 -0
- package/dist/tools/FileEditTool/types.js +53 -0
- package/dist/tools/FileEditTool/utils.js +440 -0
- package/dist/tools/FileReadTool/FileReadTool.js +859 -0
- package/dist/tools/FileReadTool/UI.js +177 -0
- package/dist/tools/FileReadTool/imageProcessor.js +40 -0
- package/dist/tools/FileReadTool/limits.js +35 -0
- package/dist/tools/FileReadTool/prompt.js +34 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js +330 -0
- package/dist/tools/FileWriteTool/UI.js +369 -0
- package/dist/tools/FileWriteTool/prompt.js +21 -0
- package/dist/tools/GlobTool/GlobTool.js +174 -0
- package/dist/tools/GlobTool/UI.js +52 -0
- package/dist/tools/GlobTool/prompt.js +10 -0
- package/dist/tools/GrepTool/GrepTool.js +586 -0
- package/dist/tools/GrepTool/UI.js +198 -0
- package/dist/tools/GrepTool/prompt.js +20 -0
- package/dist/tools/LSPTool/LSPTool.js +627 -0
- package/dist/tools/LSPTool/UI.js +230 -0
- package/dist/tools/LSPTool/formatters.js +384 -0
- package/dist/tools/LSPTool/prompt.js +24 -0
- package/dist/tools/LSPTool/schemas.js +86 -0
- package/dist/tools/LSPTool/symbolContext.js +48 -0
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +103 -0
- package/dist/tools/ListMcpResourcesTool/UI.js +21 -0
- package/dist/tools/ListMcpResourcesTool/prompt.js +23 -0
- package/dist/tools/MCPTool/MCPTool.js +70 -0
- package/dist/tools/MCPTool/UI.js +324 -0
- package/dist/tools/MCPTool/classifyForCollapse.js +584 -0
- package/dist/tools/MCPTool/prompt.js +6 -0
- package/dist/tools/McpAuthTool/McpAuthTool.js +155 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +394 -0
- package/dist/tools/NotebookEditTool/UI.js +76 -0
- package/dist/tools/NotebookEditTool/constants.js +4 -0
- package/dist/tools/NotebookEditTool/prompt.js +6 -0
- package/dist/tools/PowerShellTool/PowerShellTool.js +736 -0
- package/dist/tools/PowerShellTool/UI.js +101 -0
- package/dist/tools/PowerShellTool/clmTypes.js +182 -0
- package/dist/tools/PowerShellTool/commandSemantics.js +52 -0
- package/dist/tools/PowerShellTool/commonParameters.js +22 -0
- package/dist/tools/PowerShellTool/destructiveCommandWarning.js +86 -0
- package/dist/tools/PowerShellTool/gitSafety.js +88 -0
- package/dist/tools/PowerShellTool/modeValidation.js +202 -0
- package/dist/tools/PowerShellTool/pathValidation.js +1448 -0
- package/dist/tools/PowerShellTool/powershellPermissions.js +891 -0
- package/dist/tools/PowerShellTool/powershellSecurity.js +625 -0
- package/dist/tools/PowerShellTool/prompt.js +133 -0
- package/dist/tools/PowerShellTool/readOnlyValidation.js +1230 -0
- package/dist/tools/PowerShellTool/toolName.js +4 -0
- package/dist/tools/REPLTool/constants.js +32 -0
- package/dist/tools/REPLTool/primitiveTools.js +26 -0
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +142 -0
- package/dist/tools/ReadMcpResourceTool/UI.js +28 -0
- package/dist/tools/ReadMcpResourceTool/prompt.js +19 -0
- package/dist/tools/RemoteTriggerTool/RemoteTriggerTool.js +142 -0
- package/dist/tools/RemoteTriggerTool/UI.js +24 -0
- package/dist/tools/RemoteTriggerTool/prompt.js +17 -0
- package/dist/tools/ScheduleCronTool/CronCreateTool.js +136 -0
- package/dist/tools/ScheduleCronTool/CronDeleteTool.js +90 -0
- package/dist/tools/ScheduleCronTool/CronListTool.js +85 -0
- package/dist/tools/ScheduleCronTool/UI.js +49 -0
- package/dist/tools/ScheduleCronTool/prompt.js +90 -0
- package/dist/tools/SendMessageTool/SendMessageTool.js +745 -0
- package/dist/tools/SendMessageTool/UI.js +29 -0
- package/dist/tools/SendMessageTool/constants.js +4 -0
- package/dist/tools/SendMessageTool/prompt.js +66 -0
- package/dist/tools/SkillTool/SkillTool.js +762 -0
- package/dist/tools/SkillTool/UI.js +93 -0
- package/dist/tools/SkillTool/constants.js +4 -0
- package/dist/tools/SkillTool/prompt.js +181 -0
- package/dist/tools/SleepTool/SleepTool.js +97 -0
- package/dist/tools/SleepTool/prompt.js +19 -0
- package/dist/tools/SyntheticOutputTool/SyntheticOutputTool.js +130 -0
- package/dist/tools/TaskCreateTool/TaskCreateTool.js +123 -0
- package/dist/tools/TaskCreateTool/constants.js +4 -0
- package/dist/tools/TaskCreateTool/prompt.js +52 -0
- package/dist/tools/TaskGetTool/TaskGetTool.js +116 -0
- package/dist/tools/TaskGetTool/constants.js +4 -0
- package/dist/tools/TaskGetTool/prompt.js +27 -0
- package/dist/tools/TaskListTool/TaskListTool.js +102 -0
- package/dist/tools/TaskListTool/constants.js +4 -0
- package/dist/tools/TaskListTool/prompt.js +42 -0
- package/dist/tools/TaskOutputTool/TaskOutputTool.js +582 -0
- package/dist/tools/TaskOutputTool/constants.js +4 -0
- package/dist/tools/TaskStopTool/TaskStopTool.js +109 -0
- package/dist/tools/TaskStopTool/UI.js +39 -0
- package/dist/tools/TaskStopTool/prompt.js +11 -0
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +311 -0
- package/dist/tools/TaskUpdateTool/constants.js +4 -0
- package/dist/tools/TaskUpdateTool/prompt.js +80 -0
- package/dist/tools/TeamCreateTool/TeamCreateTool.js +173 -0
- package/dist/tools/TeamCreateTool/UI.js +6 -0
- package/dist/tools/TeamCreateTool/constants.js +4 -0
- package/dist/tools/TeamCreateTool/prompt.js +116 -0
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +102 -0
- package/dist/tools/TeamDeleteTool/UI.js +17 -0
- package/dist/tools/TeamDeleteTool/constants.js +4 -0
- package/dist/tools/TeamDeleteTool/prompt.js +19 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +96 -0
- package/dist/tools/TodoWriteTool/constants.js +4 -0
- package/dist/tools/TodoWriteTool/prompt.js +185 -0
- package/dist/tools/ToolSearchTool/ToolSearchTool.js +359 -0
- package/dist/tools/ToolSearchTool/constants.js +4 -0
- package/dist/tools/ToolSearchTool/prompt.js +65 -0
- package/dist/tools/TungstenTool/TungstenTool.js +12 -0
- package/dist/tools/WebBrowserTool/WebBrowserPanel.js +6 -0
- package/dist/tools/WebFetchTool/UI.js +67 -0
- package/dist/tools/WebFetchTool/WebFetchTool.js +261 -0
- package/dist/tools/WebFetchTool/preapproved.js +219 -0
- package/dist/tools/WebFetchTool/prompt.js +42 -0
- package/dist/tools/WebFetchTool/utils.js +330 -0
- package/dist/tools/WebSearchTool/UI.js +96 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js +440 -0
- package/dist/tools/WebSearchTool/prompt.js +35 -0
- package/dist/tools/WorkflowTool/constants.js +6 -0
- package/dist/tools/XMemIngestTool/XMemIngestTool.js +158 -0
- package/dist/tools/XMemIngestTool/prompt.js +16 -0
- package/dist/tools/XMemRetrieveTool/XMemRetrieveTool.js +185 -0
- package/dist/tools/XMemRetrieveTool/prompt.js +20 -0
- package/dist/tools/XMemSearchTool/XMemSearchTool.js +190 -0
- package/dist/tools/XMemSearchTool/prompt.js +14 -0
- package/dist/tools/ink-render-mcp/package-lock.json +1177 -0
- package/dist/tools/ink-render-mcp/package.json +13 -0
- package/dist/tools/ink-render-mcp/sample/Hello.js +17 -0
- package/dist/tools/ink-render-mcp/sample/Hello.snapshot.txt +6 -0
- package/dist/tools/ink-render-mcp/tsconfig.runner.json +12 -0
- package/dist/tools/shared/gitOperationTracking.js +169 -0
- package/dist/tools/shared/spawnMultiAgent.js +687 -0
- package/dist/tools/testing/TestingPermissionTool.js +69 -0
- package/dist/tools/tui-vision-mcp/package-lock.json +1177 -0
- package/dist/tools/tui-vision-mcp/package.json +11 -0
- package/dist/tools/utils.js +23 -0
- package/dist/tools.js +360 -0
- package/dist/tsconfig.json +19 -0
- package/dist/types/command.js +10 -0
- package/dist/types/connectorText.js +6 -0
- package/dist/types/generated/events_mono/claude_code/v1/claude_code_internal_event.js +535 -0
- package/dist/types/generated/events_mono/common/v1/auth.js +41 -0
- package/dist/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.js +115 -0
- package/dist/types/generated/google/protobuf/timestamp.js +36 -0
- package/dist/types/hooks.js +136 -0
- package/dist/types/ids.js +15 -0
- package/dist/types/logs.js +12 -0
- package/dist/types/message.js +0 -0
- package/dist/types/notebook.js +0 -0
- package/dist/types/permissions.js +18 -0
- package/dist/types/plugin.js +67 -0
- package/dist/types/textInputTypes.js +14 -0
- package/dist/types/tools.js +0 -0
- package/dist/types/utils.js +0 -0
- package/dist/upstreamproxy/relay.js +265 -0
- package/dist/upstreamproxy/upstreamproxy.js +195 -0
- package/dist/utils/CircularBuffer.js +73 -0
- package/dist/utils/Cursor.js +1103 -0
- package/dist/utils/QueryGuard.js +86 -0
- package/dist/utils/Shell.js +315 -0
- package/dist/utils/ShellCommand.js +307 -0
- package/dist/utils/abortController.js +39 -0
- package/dist/utils/activityManager.js +117 -0
- package/dist/utils/advisor.js +79 -0
- package/dist/utils/agentContext.js +44 -0
- package/dist/utils/agentId.js +42 -0
- package/dist/utils/agentSwarmsEnabled.js +20 -0
- package/dist/utils/agenticSessionSearch.js +195 -0
- package/dist/utils/analyzeContext.js +857 -0
- package/dist/utils/ansiToPng.js +212 -0
- package/dist/utils/ansiToSvg.js +210 -0
- package/dist/utils/api.js +478 -0
- package/dist/utils/apiKeyHelper.js +11 -0
- package/dist/utils/apiPreconnect.js +22 -0
- package/dist/utils/appleTerminalBackup.js +102 -0
- package/dist/utils/argumentSubstitution.js +67 -0
- package/dist/utils/array.js +16 -0
- package/dist/utils/asciicast.js +167 -0
- package/dist/utils/attachments.js +2340 -0
- package/dist/utils/attribution.js +234 -0
- package/dist/utils/auth.js +1329 -0
- package/dist/utils/authFileDescriptor.js +127 -0
- package/dist/utils/authPortable.js +21 -0
- package/dist/utils/autoModeDenials.js +14 -0
- package/dist/utils/autoRunIssue.js +112 -0
- package/dist/utils/autoUpdater.js +387 -0
- package/dist/utils/aws.js +38 -0
- package/dist/utils/awsAuthStatusManager.js +58 -0
- package/dist/utils/axios.js +8 -0
- package/dist/utils/background/remote/preconditions.js +160 -0
- package/dist/utils/background/remote/remoteSession.js +49 -0
- package/dist/utils/backgroundHousekeeping.js +64 -0
- package/dist/utils/bash/ParsedCommand.js +213 -0
- package/dist/utils/bash/ShellSnapshot.js +387 -0
- package/dist/utils/bash/ast.js +1408 -0
- package/dist/utils/bash/bashParser.js +3380 -0
- package/dist/utils/bash/bashPipeCommand.js +140 -0
- package/dist/utils/bash/commands.js +772 -0
- package/dist/utils/bash/heredoc.js +283 -0
- package/dist/utils/bash/parser.js +152 -0
- package/dist/utils/bash/prefix.js +127 -0
- package/dist/utils/bash/registry.js +24 -0
- package/dist/utils/bash/shellCompletion.js +137 -0
- package/dist/utils/bash/shellPrefix.js +14 -0
- package/dist/utils/bash/shellQuote.js +167 -0
- package/dist/utils/bash/shellQuoting.js +49 -0
- package/dist/utils/bash/specs/alias.js +14 -0
- package/dist/utils/bash/specs/index.js +19 -0
- package/dist/utils/bash/specs/nohup.js +13 -0
- package/dist/utils/bash/specs/pyright.js +91 -0
- package/dist/utils/bash/specs/sleep.js +13 -0
- package/dist/utils/bash/specs/srun.js +31 -0
- package/dist/utils/bash/specs/time.js +13 -0
- package/dist/utils/bash/specs/timeout.js +20 -0
- package/dist/utils/bash/treeSitterAnalysis.js +263 -0
- package/dist/utils/betas.js +244 -0
- package/dist/utils/billing.js +51 -0
- package/dist/utils/binaryCheck.js +33 -0
- package/dist/utils/browser.js +57 -0
- package/dist/utils/bufferedWriter.js +74 -0
- package/dist/utils/bundledMode.js +10 -0
- package/dist/utils/caCerts.js +66 -0
- package/dist/utils/caCertsConfig.js +41 -0
- package/dist/utils/cachePaths.js +30 -0
- package/dist/utils/classifierApprovals.js +70 -0
- package/dist/utils/classifierApprovalsHook.js +14 -0
- package/dist/utils/cleanup.js +459 -0
- package/dist/utils/cleanupRegistry.js +12 -0
- package/dist/utils/cliArgs.js +25 -0
- package/dist/utils/cliHighlight.js +30 -0
- package/dist/utils/codeIndexing.js +105 -0
- package/dist/utils/collapseBackgroundBashNotifications.js +57 -0
- package/dist/utils/collapseHookSummaries.js +41 -0
- package/dist/utils/collapseReadSearch.js +622 -0
- package/dist/utils/collapseTeammateShutdowns.js +37 -0
- package/dist/utils/color-diff-mock.js +25 -0
- package/dist/utils/combinedAbortSignal.js +30 -0
- package/dist/utils/commandLifecycle.js +11 -0
- package/dist/utils/commitAttribution.js +572 -0
- package/dist/utils/completionCache.js +131 -0
- package/dist/utils/computerUse/appNames.js +110 -0
- package/dist/utils/computerUse/cleanup.js +49 -0
- package/dist/utils/computerUse/common.js +31 -0
- package/dist/utils/computerUse/computerUseLock.js +124 -0
- package/dist/utils/computerUse/drainRunLoop.js +50 -0
- package/dist/utils/computerUse/escHotkey.js +35 -0
- package/dist/utils/computerUse/executor.js +411 -0
- package/dist/utils/computerUse/gates.js +47 -0
- package/dist/utils/computerUse/hostAdapter.js +56 -0
- package/dist/utils/computerUse/inputLoader.js +12 -0
- package/dist/utils/computerUse/mcpServer.js +72 -0
- package/dist/utils/computerUse/setup.js +31 -0
- package/dist/utils/computerUse/swiftLoader.js +10 -0
- package/dist/utils/computerUse/toolRendering.js +93 -0
- package/dist/utils/computerUse/wrapper.js +268 -0
- package/dist/utils/concurrentSessions.js +127 -0
- package/dist/utils/config.js +930 -0
- package/dist/utils/configConstants.js +16 -0
- package/dist/utils/contentArray.js +22 -0
- package/dist/utils/context.js +151 -0
- package/dist/utils/contextAnalysis.js +192 -0
- package/dist/utils/contextSuggestions.js +148 -0
- package/dist/utils/controlMessageCompat.js +19 -0
- package/dist/utils/conversationRecovery.js +324 -0
- package/dist/utils/cron.js +180 -0
- package/dist/utils/cronJitterConfig.js +31 -0
- package/dist/utils/cronScheduler.js +325 -0
- package/dist/utils/cronTasks.js +194 -0
- package/dist/utils/cronTasksLock.js +127 -0
- package/dist/utils/crossProjectResume.js +41 -0
- package/dist/utils/crypto.js +4 -0
- package/dist/utils/cwd.js +21 -0
- package/dist/utils/debug.js +192 -0
- package/dist/utils/debugFilter.js +79 -0
- package/dist/utils/deepLink/banner.js +55 -0
- package/dist/utils/deepLink/parseDeepLink.js +99 -0
- package/dist/utils/deepLink/protocolHandler.js +74 -0
- package/dist/utils/deepLink/registerProtocol.js +270 -0
- package/dist/utils/deepLink/terminalLauncher.js +353 -0
- package/dist/utils/deepLink/terminalPreference.js +25 -0
- package/dist/utils/desktopDeepLink.js +188 -0
- package/dist/utils/detectRepository.js +102 -0
- package/dist/utils/diagLogs.js +51 -0
- package/dist/utils/diff.js +127 -0
- package/dist/utils/directMemberMessage.js +34 -0
- package/dist/utils/displayTags.js +17 -0
- package/dist/utils/doctorContextWarnings.js +164 -0
- package/dist/utils/doctorDiagnostic.js +415 -0
- package/dist/utils/dxt/helpers.js +44 -0
- package/dist/utils/dxt/zip.js +123 -0
- package/dist/utils/earlyInput.js +104 -0
- package/dist/utils/editor.js +108 -0
- package/dist/utils/effort.js +209 -0
- package/dist/utils/embeddedTools.js +13 -0
- package/dist/utils/env.js +240 -0
- package/dist/utils/envDynamic.js +99 -0
- package/dist/utils/envUtils.js +111 -0
- package/dist/utils/envValidation.js +29 -0
- package/dist/utils/errorLogSink.js +149 -0
- package/dist/utils/errors.js +128 -0
- package/dist/utils/exampleCommands.js +138 -0
- package/dist/utils/execFileNoThrow.js +92 -0
- package/dist/utils/execFileNoThrowPortable.js +101 -0
- package/dist/utils/execSyncWrapper.js +63 -0
- package/dist/utils/exportRenderer.js +54 -0
- package/dist/utils/extraUsage.js +15 -0
- package/dist/utils/fastMode.js +367 -0
- package/dist/utils/file.js +353 -0
- package/dist/utils/fileHistory.js +750 -0
- package/dist/utils/fileOperationAnalytics.js +26 -0
- package/dist/utils/filePersistence/filePersistence.js +190 -0
- package/dist/utils/filePersistence/outputsScanner.js +81 -0
- package/dist/utils/filePersistence/types.js +8 -0
- package/dist/utils/fileRead.js +55 -0
- package/dist/utils/fileReadCache.js +67 -0
- package/dist/utils/fileStateCache.js +87 -0
- package/dist/utils/findExecutable.js +8 -0
- package/dist/utils/fingerprint.js +36 -0
- package/dist/utils/forkedAgent.js +318 -0
- package/dist/utils/format.js +211 -0
- package/dist/utils/formatBriefTimestamp.js +52 -0
- package/dist/utils/fpsTracker.js +35 -0
- package/dist/utils/frontmatterParser.js +172 -0
- package/dist/utils/fsOperations.js +619 -0
- package/dist/utils/fullscreen.js +90 -0
- package/dist/utils/generatedFiles.js +115 -0
- package/dist/utils/generators.js +67 -0
- package/dist/utils/genericProcessUtils.js +108 -0
- package/dist/utils/getWorktreePaths.js +38 -0
- package/dist/utils/getWorktreePathsPortable.js +19 -0
- package/dist/utils/ghPrStatus.js +55 -0
- package/dist/utils/git/gitConfigParser.js +168 -0
- package/dist/utils/git/gitFilesystem.js +454 -0
- package/dist/utils/git/gitignore.js +61 -0
- package/dist/utils/git.js +617 -0
- package/dist/utils/gitDiff.js +313 -0
- package/dist/utils/gitSettings.js +11 -0
- package/dist/utils/github/ghAuthStatus.js +18 -0
- package/dist/utils/githubRepoPathMapping.js +103 -0
- package/dist/utils/glob.js +128 -0
- package/dist/utils/gracefulShutdown.js +303 -0
- package/dist/utils/groupToolUses.js +114 -0
- package/dist/utils/handlePromptSubmit.js +355 -0
- package/dist/utils/hash.js +26 -0
- package/dist/utils/headlessProfiler.js +99 -0
- package/dist/utils/heapDumpService.js +175 -0
- package/dist/utils/heatmap.js +120 -0
- package/dist/utils/highlightMatch.js +22 -0
- package/dist/utils/hooks/AsyncHookRegistry.js +231 -0
- package/dist/utils/hooks/apiQueryHookHelper.js +76 -0
- package/dist/utils/hooks/execAgentHook.js +254 -0
- package/dist/utils/hooks/execHttpHook.js +132 -0
- package/dist/utils/hooks/execPromptHook.js +166 -0
- package/dist/utils/hooks/fileChangedWatcher.js +154 -0
- package/dist/utils/hooks/hookEvents.js +99 -0
- package/dist/utils/hooks/hookHelpers.js +60 -0
- package/dist/utils/hooks/hooksConfigManager.js +319 -0
- package/dist/utils/hooks/hooksConfigSnapshot.js +60 -0
- package/dist/utils/hooks/hooksSettings.js +187 -0
- package/dist/utils/hooks/postSamplingHooks.js +31 -0
- package/dist/utils/hooks/registerFrontmatterHooks.js +41 -0
- package/dist/utils/hooks/registerSkillHooks.js +38 -0
- package/dist/utils/hooks/sessionHooks.js +206 -0
- package/dist/utils/hooks/skillImprovement.js +209 -0
- package/dist/utils/hooks/ssrfGuard.js +158 -0
- package/dist/utils/hooks.js +3203 -0
- package/dist/utils/horizontalScroll.js +73 -0
- package/dist/utils/http.js +84 -0
- package/dist/utils/hyperlink.js +18 -0
- package/dist/utils/iTermBackup.js +57 -0
- package/dist/utils/ide.js +1042 -0
- package/dist/utils/idePathConversion.js +54 -0
- package/dist/utils/idleTimeout.js +36 -0
- package/dist/utils/imagePaste.js +262 -0
- package/dist/utils/imageResizer.js +493 -0
- package/dist/utils/imageStore.js +120 -0
- package/dist/utils/imageValidation.js +57 -0
- package/dist/utils/immediateCommand.js +7 -0
- package/dist/utils/inProcessTeammateHelpers.js +34 -0
- package/dist/utils/ink.js +17 -0
- package/dist/utils/intl.js +68 -0
- package/dist/utils/jetbrains.js +149 -0
- package/dist/utils/json.js +231 -0
- package/dist/utils/jsonRead.js +7 -0
- package/dist/utils/keyboardShortcuts.js +15 -0
- package/dist/utils/lazySchema.js +7 -0
- package/dist/utils/listSessionsImpl.js +219 -0
- package/dist/utils/localInstaller.js +107 -0
- package/dist/utils/lockfile.js +40 -0
- package/dist/utils/log.js +201 -0
- package/dist/utils/logoV2Utils.js +214 -0
- package/dist/utils/mailbox.js +52 -0
- package/dist/utils/managedEnv.js +96 -0
- package/dist/utils/managedEnvConstants.js +156 -0
- package/dist/utils/markdown.js +253 -0
- package/dist/utils/markdownConfigLoader.js +340 -0
- package/dist/utils/mcp/dateTimeParser.js +77 -0
- package/dist/utils/mcp/elicitationValidation.js +231 -0
- package/dist/utils/mcpInstructionsDelta.js +69 -0
- package/dist/utils/mcpOutputStorage.js +125 -0
- package/dist/utils/mcpValidation.js +150 -0
- package/dist/utils/mcpWebSocketTransport.js +168 -0
- package/dist/utils/memcodeDesktop.js +115 -0
- package/dist/utils/memcodeHints.js +95 -0
- package/dist/utils/memcodeInChrome/chromeNativeHost.js +388 -0
- package/dist/utils/memcodeInChrome/common.js +442 -0
- package/dist/utils/memcodeInChrome/mcpServer.js +263 -0
- package/dist/utils/memcodeInChrome/prompt.js +67 -0
- package/dist/utils/memcodeInChrome/setup.js +305 -0
- package/dist/utils/memcodeInChrome/setupPortable.js +151 -0
- package/dist/utils/memcodeInChrome/toolRendering.js +214 -0
- package/dist/utils/memcodemd.js +938 -0
- package/dist/utils/memoize.js +130 -0
- package/dist/utils/memory/types.js +12 -0
- package/dist/utils/memory/versions.js +7 -0
- package/dist/utils/memoryFileDetection.js +167 -0
- package/dist/utils/messagePredicates.js +6 -0
- package/dist/utils/messageQueueManager.js +307 -0
- package/dist/utils/messages/mappers.js +215 -0
- package/dist/utils/messages/systemInit.js +55 -0
- package/dist/utils/messages.js +3754 -0
- package/dist/utils/model/agent.js +95 -0
- package/dist/utils/model/aliases.js +48 -0
- package/dist/utils/model/antModels.js +33 -0
- package/dist/utils/model/bedrock.js +170 -0
- package/dist/utils/model/check1mAccess.js +55 -0
- package/dist/utils/model/configs.js +142 -0
- package/dist/utils/model/contextWindowUpgradeCheck.js +34 -0
- package/dist/utils/model/deprecation.js +59 -0
- package/dist/utils/model/model.js +523 -0
- package/dist/utils/model/modelAllowlist.js +94 -0
- package/dist/utils/model/modelCapabilities.js +102 -0
- package/dist/utils/model/modelOptions.js +570 -0
- package/dist/utils/model/modelStrings.js +120 -0
- package/dist/utils/model/modelSupportOverrides.js +36 -0
- package/dist/utils/model/providers.js +48 -0
- package/dist/utils/model/validateModel.js +111 -0
- package/dist/utils/modelCost.js +158 -0
- package/dist/utils/modelPricingTable.js +86 -0
- package/dist/utils/modifiers.js +26 -0
- package/dist/utils/mtls.js +120 -0
- package/dist/utils/nativeInstaller/download.js +387 -0
- package/dist/utils/nativeInstaller/index.js +22 -0
- package/dist/utils/nativeInstaller/installer.js +1254 -0
- package/dist/utils/nativeInstaller/packageManagers.js +192 -0
- package/dist/utils/nativeInstaller/pidLock.js +252 -0
- package/dist/utils/notebook.js +176 -0
- package/dist/utils/objectGroupBy.js +15 -0
- package/dist/utils/pasteStore.js +68 -0
- package/dist/utils/path.js +76 -0
- package/dist/utils/pdf.js +205 -0
- package/dist/utils/pdfUtils.js +42 -0
- package/dist/utils/peerAddress.js +9 -0
- package/dist/utils/permissions/PermissionMode.js +102 -0
- package/dist/utils/permissions/PermissionPromptToolResultSchema.js +87 -0
- package/dist/utils/permissions/PermissionResult.js +13 -0
- package/dist/utils/permissions/PermissionRule.js +15 -0
- package/dist/utils/permissions/PermissionUpdate.js +271 -0
- package/dist/utils/permissions/PermissionUpdateSchema.js +62 -0
- package/dist/utils/permissions/autoModeState.js +35 -0
- package/dist/utils/permissions/bashClassifier.js +40 -0
- package/dist/utils/permissions/bypassPermissionsKillswitch.js +114 -0
- package/dist/utils/permissions/classifierDecision.js +83 -0
- package/dist/utils/permissions/classifierShared.js +18 -0
- package/dist/utils/permissions/dangerousPatterns.js +64 -0
- package/dist/utils/permissions/denialTracking.js +34 -0
- package/dist/utils/permissions/filesystem.js +1046 -0
- package/dist/utils/permissions/getNextPermissionMode.js +33 -0
- package/dist/utils/permissions/pathValidation.js +284 -0
- package/dist/utils/permissions/permissionExplainer.js +172 -0
- package/dist/utils/permissions/permissionRuleParser.js +98 -0
- package/dist/utils/permissions/permissionSetup.js +905 -0
- package/dist/utils/permissions/permissions.js +939 -0
- package/dist/utils/permissions/permissionsLoader.js +174 -0
- package/dist/utils/permissions/shadowedRuleDetection.js +89 -0
- package/dist/utils/permissions/shellRuleMatching.js +119 -0
- package/dist/utils/permissions/yolo-classifier-prompts/auto_mode_system_prompt.txt +5 -0
- package/dist/utils/permissions/yolo-classifier-prompts/permissions_anthropic.txt +11 -0
- package/dist/utils/permissions/yolo-classifier-prompts/permissions_external.txt +14 -0
- package/dist/utils/permissions/yoloClassifier.js +945 -0
- package/dist/utils/planModeV2.js +56 -0
- package/dist/utils/plans.js +255 -0
- package/dist/utils/platform.js +115 -0
- package/dist/utils/plugins/addDirPluginSettings.js +34 -0
- package/dist/utils/plugins/cacheUtils.js +151 -0
- package/dist/utils/plugins/dependencyResolver.js +124 -0
- package/dist/utils/plugins/fetchTelemetry.js +70 -0
- package/dist/utils/plugins/gitAvailability.js +23 -0
- package/dist/utils/plugins/headlessPluginInstall.js +107 -0
- package/dist/utils/plugins/hintRecommendation.js +100 -0
- package/dist/utils/plugins/installCounts.js +166 -0
- package/dist/utils/plugins/installedPluginsManager.js +728 -0
- package/dist/utils/plugins/loadPluginAgents.js +270 -0
- package/dist/utils/plugins/loadPluginCommands.js +706 -0
- package/dist/utils/plugins/loadPluginHooks.js +186 -0
- package/dist/utils/plugins/loadPluginOutputStyles.js +143 -0
- package/dist/utils/plugins/lspPluginIntegration.js +235 -0
- package/dist/utils/plugins/lspRecommendation.js +212 -0
- package/dist/utils/plugins/managedPlugins.js +21 -0
- package/dist/utils/plugins/marketplaceHelpers.js +328 -0
- package/dist/utils/plugins/marketplaceManager.js +1595 -0
- package/dist/utils/plugins/mcpPluginIntegration.js +395 -0
- package/dist/utils/plugins/mcpbHandler.js +568 -0
- package/dist/utils/plugins/officialMarketplace.js +14 -0
- package/dist/utils/plugins/officialMarketplaceGcs.js +126 -0
- package/dist/utils/plugins/officialMarketplaceStartupCheck.js +296 -0
- package/dist/utils/plugins/orphanedPluginFilter.js +55 -0
- package/dist/utils/plugins/parseMarketplaceInput.js +82 -0
- package/dist/utils/plugins/performStartupChecks.js +36 -0
- package/dist/utils/plugins/pluginAutoupdate.js +160 -0
- package/dist/utils/plugins/pluginBlocklist.js +78 -0
- package/dist/utils/plugins/pluginDirectories.js +87 -0
- package/dist/utils/plugins/pluginFlagging.js +129 -0
- package/dist/utils/plugins/pluginIdentifier.js +45 -0
- package/dist/utils/plugins/pluginInstallationHelpers.js +329 -0
- package/dist/utils/plugins/pluginLoader.js +2114 -0
- package/dist/utils/plugins/pluginOptionsStorage.js +206 -0
- package/dist/utils/plugins/pluginPolicy.js +8 -0
- package/dist/utils/plugins/pluginStartupCheck.js +200 -0
- package/dist/utils/plugins/pluginVersioning.js +67 -0
- package/dist/utils/plugins/reconciler.js +143 -0
- package/dist/utils/plugins/refresh.js +107 -0
- package/dist/utils/plugins/schemas.js +723 -0
- package/dist/utils/plugins/validatePlugin.js +620 -0
- package/dist/utils/plugins/walkPluginMarkdown.js +42 -0
- package/dist/utils/plugins/zipCache.js +236 -0
- package/dist/utils/plugins/zipCacheAdapters.js +109 -0
- package/dist/utils/powershell/dangerousCmdlets.js +127 -0
- package/dist/utils/powershell/parser.js +1049 -0
- package/dist/utils/powershell/staticPrefix.js +146 -0
- package/dist/utils/preflightChecks.js +160 -0
- package/dist/utils/privacyLevel.js +27 -0
- package/dist/utils/process.js +52 -0
- package/dist/utils/processUserInput/processBashCommand.js +103 -0
- package/dist/utils/processUserInput/processSlashCommand.js +724 -0
- package/dist/utils/processUserInput/processTextPrompt.js +57 -0
- package/dist/utils/processUserInput/processUserInput.js +379 -0
- package/dist/utils/profilerBase.js +20 -0
- package/dist/utils/promptCategory.js +25 -0
- package/dist/utils/promptEditor.js +123 -0
- package/dist/utils/promptShellExecution.js +98 -0
- package/dist/utils/protectedNamespace.js +6 -0
- package/dist/utils/proxy.js +247 -0
- package/dist/utils/queryContext.js +98 -0
- package/dist/utils/queryHelpers.js +350 -0
- package/dist/utils/queryProfiler.js +195 -0
- package/dist/utils/queueProcessor.js +47 -0
- package/dist/utils/readEditContext.js +147 -0
- package/dist/utils/readFileInRange.js +231 -0
- package/dist/utils/releaseNotes.js +205 -0
- package/dist/utils/renderOptions.js +68 -0
- package/dist/utils/renderProbe.js +77 -0
- package/dist/utils/ripgrep.js +431 -0
- package/dist/utils/sandbox/sandbox-adapter.js +529 -0
- package/dist/utils/sandbox/sandbox-ui-utils.js +6 -0
- package/dist/utils/sanitization.js +39 -0
- package/dist/utils/screenshotClipboard.js +89 -0
- package/dist/utils/sdkEventQueue.js +41 -0
- package/dist/utils/secureStorage/fallbackStorage.js +48 -0
- package/dist/utils/secureStorage/index.js +12 -0
- package/dist/utils/secureStorage/keychainPrefetch.js +54 -0
- package/dist/utils/secureStorage/macOsKeychainHelpers.js +50 -0
- package/dist/utils/secureStorage/macOsKeychainStorage.js +175 -0
- package/dist/utils/secureStorage/plainTextStorage.js +80 -0
- package/dist/utils/semanticBoolean.js +10 -0
- package/dist/utils/semanticNumber.js +13 -0
- package/dist/utils/semver.js +51 -0
- package/dist/utils/sequential.js +31 -0
- package/dist/utils/sessionActivity.js +102 -0
- package/dist/utils/sessionEnvVars.js +19 -0
- package/dist/utils/sessionEnvironment.js +137 -0
- package/dist/utils/sessionFileAccessHooks.js +173 -0
- package/dist/utils/sessionIngressAuth.js +93 -0
- package/dist/utils/sessionRestore.js +261 -0
- package/dist/utils/sessionStart.js +147 -0
- package/dist/utils/sessionState.js +57 -0
- package/dist/utils/sessionStorage.js +3157 -0
- package/dist/utils/sessionStoragePortable.js +506 -0
- package/dist/utils/sessionTime.js +11 -0
- package/dist/utils/sessionTitle.js +91 -0
- package/dist/utils/sessionUrl.js +37 -0
- package/dist/utils/set.js +44 -0
- package/dist/utils/settings/allErrors.js +14 -0
- package/dist/utils/settings/applySettingsChange.js +51 -0
- package/dist/utils/settings/changeDetector.js +294 -0
- package/dist/utils/settings/constants.js +137 -0
- package/dist/utils/settings/internalWrites.js +20 -0
- package/dist/utils/settings/managedPath.js +23 -0
- package/dist/utils/settings/mdm/constants.js +49 -0
- package/dist/utils/settings/mdm/rawRead.js +90 -0
- package/dist/utils/settings/mdm/settings.js +182 -0
- package/dist/utils/settings/permissionValidation.js +175 -0
- package/dist/utils/settings/pluginOnlyPolicy.js +21 -0
- package/dist/utils/settings/schemaOutput.js +10 -0
- package/dist/utils/settings/settings.js +682 -0
- package/dist/utils/settings/settingsCache.js +48 -0
- package/dist/utils/settings/toolValidationConfig.js +69 -0
- package/dist/utils/settings/types.js +528 -0
- package/dist/utils/settings/validateEditTool.js +29 -0
- package/dist/utils/settings/validation.js +155 -0
- package/dist/utils/settings/validationTips.js +103 -0
- package/dist/utils/shell/bashProvider.js +141 -0
- package/dist/utils/shell/outputLimits.js +17 -0
- package/dist/utils/shell/powershellDetection.js +55 -0
- package/dist/utils/shell/powershellProvider.js +54 -0
- package/dist/utils/shell/prefix.js +227 -0
- package/dist/utils/shell/readOnlyCommandValidation.js +1796 -0
- package/dist/utils/shell/resolveDefaultShell.js +7 -0
- package/dist/utils/shell/shellProvider.js +6 -0
- package/dist/utils/shell/shellToolUtils.js +13 -0
- package/dist/utils/shell/specPrefix.js +149 -0
- package/dist/utils/shellConfig.js +93 -0
- package/dist/utils/sideQuery.js +113 -0
- package/dist/utils/sideQuestion.js +88 -0
- package/dist/utils/signal.js +20 -0
- package/dist/utils/sinks.js +9 -0
- package/dist/utils/skills/skillChangeDetector.js +199 -0
- package/dist/utils/slashCommandParsing.js +28 -0
- package/dist/utils/sleep.js +51 -0
- package/dist/utils/sliceAnsi.js +49 -0
- package/dist/utils/slowOperations.js +220 -0
- package/dist/utils/standaloneAgent.js +10 -0
- package/dist/utils/startupProfiler.js +146 -0
- package/dist/utils/staticRender.js +77 -0
- package/dist/utils/stats.js +667 -0
- package/dist/utils/statsCache.js +277 -0
- package/dist/utils/status.js +366 -0
- package/dist/utils/statusNoticeDefinitions.js +196 -0
- package/dist/utils/statusNoticeHelpers.js +13 -0
- package/dist/utils/stream.js +75 -0
- package/dist/utils/streamJsonStdoutGuard.js +79 -0
- package/dist/utils/streamlinedTransform.js +137 -0
- package/dist/utils/stringUtils.js +143 -0
- package/dist/utils/subprocessEnv.js +55 -0
- package/dist/utils/suggestions/commandSuggestions.js +374 -0
- package/dist/utils/suggestions/directoryCompletion.js +141 -0
- package/dist/utils/suggestions/shellHistoryCompletion.js +70 -0
- package/dist/utils/suggestions/skillUsageTracking.js +36 -0
- package/dist/utils/suggestions/slackChannelSuggestions.js +151 -0
- package/dist/utils/swarm/It2SetupPrompt.js +409 -0
- package/dist/utils/swarm/backends/ITermBackend.js +224 -0
- package/dist/utils/swarm/backends/InProcessBackend.js +256 -0
- package/dist/utils/swarm/backends/PaneBackendExecutor.js +253 -0
- package/dist/utils/swarm/backends/TmuxBackend.js +556 -0
- package/dist/utils/swarm/backends/detection.js +53 -0
- package/dist/utils/swarm/backends/it2Setup.js +152 -0
- package/dist/utils/swarm/backends/registry.js +270 -0
- package/dist/utils/swarm/backends/teammateModeSnapshot.js +50 -0
- package/dist/utils/swarm/backends/types.js +6 -0
- package/dist/utils/swarm/constants.js +22 -0
- package/dist/utils/swarm/inProcessRunner.js +1060 -0
- package/dist/utils/swarm/leaderPermissionBridge.js +28 -0
- package/dist/utils/swarm/permissionSync.js +596 -0
- package/dist/utils/swarm/reconnection.js +75 -0
- package/dist/utils/swarm/spawnInProcess.js +184 -0
- package/dist/utils/swarm/spawnUtils.js +96 -0
- package/dist/utils/swarm/teamHelpers.js +407 -0
- package/dist/utils/swarm/teammateInit.js +90 -0
- package/dist/utils/swarm/teammateLayoutManager.js +49 -0
- package/dist/utils/swarm/teammateModel.js +11 -0
- package/dist/utils/swarm/teammatePromptAddendum.js +14 -0
- package/dist/utils/systemDirectories.js +45 -0
- package/dist/utils/systemPrompt.js +74 -0
- package/dist/utils/systemPromptType.js +6 -0
- package/dist/utils/systemTheme.js +63 -0
- package/dist/utils/taggedId.js +30 -0
- package/dist/utils/task/TaskOutput.js +298 -0
- package/dist/utils/task/diskOutput.js +310 -0
- package/dist/utils/task/framework.js +189 -0
- package/dist/utils/task/outputFormatting.js +32 -0
- package/dist/utils/task/sdkProgress.js +21 -0
- package/dist/utils/taskSummary.js +9 -0
- package/dist/utils/tasks.js +544 -0
- package/dist/utils/teamDiscovery.js +36 -0
- package/dist/utils/teamMemoryOps.js +48 -0
- package/dist/utils/teammate.js +144 -0
- package/dist/utils/teammateContext.js +23 -0
- package/dist/utils/teammateMailbox.js +661 -0
- package/dist/utils/telemetry/betaSessionTracing.js +270 -0
- package/dist/utils/telemetry/bigqueryExporter.js +174 -0
- package/dist/utils/telemetry/events.js +55 -0
- package/dist/utils/telemetry/instrumentation.js +602 -0
- package/dist/utils/telemetry/logger.js +28 -0
- package/dist/utils/telemetry/perfettoTracing.js +716 -0
- package/dist/utils/telemetry/pluginTelemetry.js +119 -0
- package/dist/utils/telemetry/sessionTracing.js +646 -0
- package/dist/utils/telemetry/skillLoadedEvent.js +26 -0
- package/dist/utils/telemetryAttributes.js +51 -0
- package/dist/utils/teleport/api.js +282 -0
- package/dist/utils/teleport/environmentSelection.js +47 -0
- package/dist/utils/teleport/environments.js +86 -0
- package/dist/utils/teleport/gitBundle.js +201 -0
- package/dist/utils/teleport.js +857 -0
- package/dist/utils/tempfile.js +10 -0
- package/dist/utils/terminal.js +72 -0
- package/dist/utils/terminalPanel.js +157 -0
- package/dist/utils/textHighlighting.js +111 -0
- package/dist/utils/theme.js +698 -0
- package/dist/utils/thinking.js +135 -0
- package/dist/utils/timeouts.js +26 -0
- package/dist/utils/tmuxSocket.js +250 -0
- package/dist/utils/todo/types.js +17 -0
- package/dist/utils/tokenBudget.js +58 -0
- package/dist/utils/tokens.js +133 -0
- package/dist/utils/toolErrors.js +99 -0
- package/dist/utils/toolExposurePlanner.js +62 -0
- package/dist/utils/toolPool.js +40 -0
- package/dist/utils/toolResultStorage.js +498 -0
- package/dist/utils/toolSchemaCache.js +11 -0
- package/dist/utils/toolSearch.js +356 -0
- package/dist/utils/transcriptSearch.js +136 -0
- package/dist/utils/treeify.js +102 -0
- package/dist/utils/truncate.js +109 -0
- package/dist/utils/udsMessaging.js +15 -0
- package/dist/utils/ultraplan/ccrSession.js +211 -0
- package/dist/utils/ultraplan/keyword.js +78 -0
- package/dist/utils/ultraplan/prompt.txt +1 -0
- package/dist/utils/unaryLogging.js +18 -0
- package/dist/utils/undercover.js +58 -0
- package/dist/utils/user.js +122 -0
- package/dist/utils/userAgent.js +7 -0
- package/dist/utils/userPromptKeywords.js +17 -0
- package/dist/utils/uuid.js +14 -0
- package/dist/utils/warningHandler.js +80 -0
- package/dist/utils/which.js +54 -0
- package/dist/utils/windowsPaths.js +126 -0
- package/dist/utils/withResolvers.js +12 -0
- package/dist/utils/words.js +774 -0
- package/dist/utils/workloadContext.js +14 -0
- package/dist/utils/worktree.js +1057 -0
- package/dist/utils/worktreeModeEnabled.js +6 -0
- package/dist/utils/xdg.js +30 -0
- package/dist/utils/xmem.js +263 -0
- package/dist/utils/xmemActivity.js +121 -0
- package/dist/utils/xmemSessionSummary.js +40 -0
- package/dist/utils/xml.js +10 -0
- package/dist/utils/yaml.js +9 -0
- package/dist/utils/zodToJsonSchema.js +12 -0
- package/dist/vim/motions.js +58 -0
- package/dist/vim/operators.js +327 -0
- package/dist/vim/textObjects.js +125 -0
- package/dist/vim/transitions.js +318 -0
- package/dist/vim/types.js +81 -0
- package/dist/voice/voiceModeEnabled.js +16 -0
- package/entrypoints/cli.tsx +421 -0
- package/package.json +168 -0
- package/scripts/postinstall.js +222 -0
package/dist/main.js
ADDED
|
@@ -0,0 +1,3574 @@
|
|
|
1
|
+
import { profileCheckpoint, profileReport } from "./utils/startupProfiler.js";
|
|
2
|
+
profileCheckpoint("main_tsx_entry");
|
|
3
|
+
import { startMdmRawRead } from "./utils/settings/mdm/rawRead.js";
|
|
4
|
+
startMdmRawRead();
|
|
5
|
+
import { ensureKeychainPrefetchCompleted, startKeychainPrefetch } from "./utils/secureStorage/keychainPrefetch.js";
|
|
6
|
+
startKeychainPrefetch();
|
|
7
|
+
async function failOpenStartupGate(name, promise, timeoutMs = 1500) {
|
|
8
|
+
let timedOut = false;
|
|
9
|
+
let timeout;
|
|
10
|
+
const guarded = promise.catch((error) => {
|
|
11
|
+
logForDebugging(`[STARTUP] ${name} failed open: ${error}`);
|
|
12
|
+
});
|
|
13
|
+
try {
|
|
14
|
+
await Promise.race([
|
|
15
|
+
guarded,
|
|
16
|
+
new Promise((resolve2) => {
|
|
17
|
+
timeout = setTimeout(() => {
|
|
18
|
+
timedOut = true;
|
|
19
|
+
resolve2();
|
|
20
|
+
}, timeoutMs);
|
|
21
|
+
})
|
|
22
|
+
]);
|
|
23
|
+
} finally {
|
|
24
|
+
if (timeout) clearTimeout(timeout);
|
|
25
|
+
}
|
|
26
|
+
if (timedOut) {
|
|
27
|
+
logForDebugging(`[STARTUP] ${name} timed out after ${timeoutMs}ms; continuing`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
import { feature } from "bun:bundle";
|
|
31
|
+
import { Command as CommanderCommand, InvalidArgumentError, Option } from "@commander-js/extra-typings";
|
|
32
|
+
import chalk from "chalk";
|
|
33
|
+
import { readFileSync, writeFileSync } from "fs";
|
|
34
|
+
import mapValues from "lodash-es/mapValues.js";
|
|
35
|
+
import pickBy from "lodash-es/pickBy.js";
|
|
36
|
+
import uniqBy from "lodash-es/uniqBy.js";
|
|
37
|
+
import { getOauthConfig } from "./constants/oauth.js";
|
|
38
|
+
import { getRemoteSessionUrl } from "./constants/product.js";
|
|
39
|
+
import { getSystemContext, getUserContext } from "./context.js";
|
|
40
|
+
import { init, initializeTelemetryAfterTrust } from "./entrypoints/init.js";
|
|
41
|
+
import { addToHistory } from "./history.js";
|
|
42
|
+
import { launchRepl } from "./replLauncher.js";
|
|
43
|
+
import { refreshGrowthBookAfterAuthChange } from "./services/analytics/growthbook.js";
|
|
44
|
+
import { fetchBootstrapData } from "./services/api/bootstrap.js";
|
|
45
|
+
import { downloadSessionFiles, parseFileSpecs } from "./services/api/filesApi.js";
|
|
46
|
+
import { prefetchPassesEligibility } from "./services/api/referral.js";
|
|
47
|
+
import { prefetchOfficialMcpUrls } from "./services/mcp/officialRegistry.js";
|
|
48
|
+
import { isPolicyAllowed, loadPolicyLimits, refreshPolicyLimits, waitForPolicyLimitsToLoad } from "./services/policyLimits/index.js";
|
|
49
|
+
import { loadRemoteManagedSettings, refreshRemoteManagedSettings } from "./services/remoteManagedSettings/index.js";
|
|
50
|
+
import { createSyntheticOutputTool, isSyntheticOutputToolEnabled } from "./tools/SyntheticOutputTool/SyntheticOutputTool.js";
|
|
51
|
+
import { getTools } from "./tools.js";
|
|
52
|
+
import { canUserConfigureAdvisor, getInitialAdvisorSetting, isAdvisorEnabled, isValidAdvisorModel, modelSupportsAdvisor } from "./utils/advisor.js";
|
|
53
|
+
import { isAgentSwarmsEnabled } from "./utils/agentSwarmsEnabled.js";
|
|
54
|
+
import { count, uniq } from "./utils/array.js";
|
|
55
|
+
import "./utils/asciicast.js";
|
|
56
|
+
import { getClaudeAIOAuthTokensAsync, getConfiguredApiKeyHelper, getSubscriptionType, isClaudeAISubscriber, prefetchAwsCredentialsAndBedRockInfoIfSafe, prefetchGcpCredentialsIfSafe, validateForceLoginOrg } from "./utils/auth.js";
|
|
57
|
+
import { resolveOpenRouterApiKey } from "./utils/apiKeyHelper.js";
|
|
58
|
+
import { checkHasTrustDialogAccepted, getGlobalConfig, getRemoteControlAtStartup, isAutoUpdaterDisabled, saveGlobalConfig } from "./utils/config.js";
|
|
59
|
+
import { seedEarlyInput, stopCapturingEarlyInput } from "./utils/earlyInput.js";
|
|
60
|
+
import { getInitialEffortSetting, parseEffortValue } from "./utils/effort.js";
|
|
61
|
+
import { getInitialFastModeSetting, isFastModeEnabled, prefetchFastModeStatus, resolveFastModeStatusFromCache } from "./utils/fastMode.js";
|
|
62
|
+
import { applyConfigEnvironmentVariables } from "./utils/managedEnv.js";
|
|
63
|
+
import { createSystemMessage, createUserMessage } from "./utils/messages.js";
|
|
64
|
+
import { getPlatform } from "./utils/platform.js";
|
|
65
|
+
import { getBaseRenderOptions } from "./utils/renderOptions.js";
|
|
66
|
+
import { getSessionIngressAuthToken } from "./utils/sessionIngressAuth.js";
|
|
67
|
+
import { settingsChangeDetector } from "./utils/settings/changeDetector.js";
|
|
68
|
+
import { skillChangeDetector } from "./utils/skills/skillChangeDetector.js";
|
|
69
|
+
import { jsonParse, writeFileSync_DEPRECATED } from "./utils/slowOperations.js";
|
|
70
|
+
import { computeInitialTeamContext } from "./utils/swarm/reconnection.js";
|
|
71
|
+
import { initializeWarningHandler } from "./utils/warningHandler.js";
|
|
72
|
+
import { isWorktreeModeEnabled } from "./utils/worktreeModeEnabled.js";
|
|
73
|
+
const getTeammateUtils = () => require("./utils/teammate.js");
|
|
74
|
+
const getTeammatePromptAddendum = () => require("./utils/swarm/teammatePromptAddendum.js");
|
|
75
|
+
const getTeammateModeSnapshot = () => require("./utils/swarm/backends/teammateModeSnapshot.js");
|
|
76
|
+
const coordinatorModeModule = feature("COORDINATOR_MODE") ? require("./coordinator/coordinatorMode.js") : null;
|
|
77
|
+
const assistantModule = feature("KAIROS") ? require("./assistant/index.js") : null;
|
|
78
|
+
const kairosGate = feature("KAIROS") ? require("./assistant/gate.js") : null;
|
|
79
|
+
import { resolve } from "path";
|
|
80
|
+
import { isAnalyticsDisabled } from "src/services/analytics/config.js";
|
|
81
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from "src/services/analytics/growthbook.js";
|
|
82
|
+
import { logEvent } from "src/services/analytics/index.js";
|
|
83
|
+
import { initializeAnalyticsGates } from "src/services/analytics/sink.js";
|
|
84
|
+
import { getOriginalCwd, setAdditionalDirectoriesForClaudeMd, setIsRemoteMode, setMainLoopModelOverride, setMainThreadAgentType, setTeleportedSessionInfo } from "./bootstrap/state.js";
|
|
85
|
+
import { filterCommandsForRemoteMode, getCommands } from "./commands.js";
|
|
86
|
+
import { launchAssistantInstallWizard, launchAssistantSessionChooser, launchInvalidSettingsDialog, launchResumeChooser, launchSnapshotUpdateDialog, launchTeleportRepoMismatchDialog, launchTeleportResumeWrapper } from "./dialogLaunchers.js";
|
|
87
|
+
import { SHOW_CURSOR } from "./ink/termio/dec.js";
|
|
88
|
+
import { exitWithError, exitWithMessage, getRenderContext, renderAndRun, showSetupScreens } from "./interactiveHelpers.js";
|
|
89
|
+
import { initBuiltinPlugins } from "./plugins/bundled/index.js";
|
|
90
|
+
import { checkQuotaStatus } from "./services/memcodeLimits.js";
|
|
91
|
+
import { getMcpToolsCommandsAndResources, prefetchAllMcpResources } from "./services/mcp/client.js";
|
|
92
|
+
import { VALID_INSTALLABLE_SCOPES, VALID_UPDATE_SCOPES } from "./services/plugins/pluginCliCommands.js";
|
|
93
|
+
import { initBundledSkills } from "./skills/bundled/index.js";
|
|
94
|
+
import { getActiveAgentsFromList, getAgentDefinitionsWithOverrides, isBuiltInAgent, isCustomAgent, parseAgentsFromJson } from "./tools/AgentTool/loadAgentsDir.js";
|
|
95
|
+
import { assertMinVersion } from "./utils/autoUpdater.js";
|
|
96
|
+
import { XCODE_IN_CHROME_SKILL_HINT, XCODE_IN_CHROME_SKILL_HINT_WITH_WEBBROWSER } from "./utils/memcodeInChrome/prompt.js";
|
|
97
|
+
import { setupmemCodeInChrome, shouldAutoEnablememCodeInChrome, shouldEnablememCodeInChrome } from "./utils/memcodeInChrome/setup.js";
|
|
98
|
+
import { isBridgeModeAvailable } from "./bridge/bridgeEnabled.js";
|
|
99
|
+
import { getContextWindowForModel } from "./utils/context.js";
|
|
100
|
+
import { loadConversationForResume } from "./utils/conversationRecovery.js";
|
|
101
|
+
import { buildDeepLinkBanner } from "./utils/deepLink/banner.js";
|
|
102
|
+
import { hasNodeOption, isBareMode, isEnvTruthy, isInProtectedNamespace, isUpstreamFeatureEnabled } from "./utils/envUtils.js";
|
|
103
|
+
import { refreshExampleCommands } from "./utils/exampleCommands.js";
|
|
104
|
+
import { getWorktreePaths } from "./utils/getWorktreePaths.js";
|
|
105
|
+
import { getBranch, getIsGit, getWorktreeCount } from "./utils/git.js";
|
|
106
|
+
import { getGhAuthStatus } from "./utils/github/ghAuthStatus.js";
|
|
107
|
+
import { safeParseJSON } from "./utils/json.js";
|
|
108
|
+
import { logError } from "./utils/log.js";
|
|
109
|
+
import { getModelDeprecationWarning } from "./utils/model/deprecation.js";
|
|
110
|
+
import { getDefaultMainLoopModel, getUserSpecifiedModelSetting, normalizeModelStringForAPI, parseUserSpecifiedModel } from "./utils/model/model.js";
|
|
111
|
+
import { ensureModelStringsInitialized } from "./utils/model/modelStrings.js";
|
|
112
|
+
import { PERMISSION_MODES } from "./utils/permissions/PermissionMode.js";
|
|
113
|
+
import { checkAndDisableBypassPermissions, getAutoModeEnabledStateIfCached, initializeToolPermissionContext, initialPermissionModeFromCLI, isDefaultPermissionModeAuto, parseToolListFromCLI, stripDangerousPermissionsForAutoMode, verifyAutoModeGateAccess } from "./utils/permissions/permissionSetup.js";
|
|
114
|
+
import { cleanupOrphanedPluginVersionsInBackground } from "./utils/plugins/cacheUtils.js";
|
|
115
|
+
import { initializeVersionedPlugins } from "./utils/plugins/installedPluginsManager.js";
|
|
116
|
+
import { getManagedPluginNames } from "./utils/plugins/managedPlugins.js";
|
|
117
|
+
import { getGlobExclusionsForPluginCache } from "./utils/plugins/orphanedPluginFilter.js";
|
|
118
|
+
import { getPluginSeedDirs } from "./utils/plugins/pluginDirectories.js";
|
|
119
|
+
import { countFilesRoundedRg } from "./utils/ripgrep.js";
|
|
120
|
+
import { processSessionStartHooks, processSetupHooks } from "./utils/sessionStart.js";
|
|
121
|
+
import { cacheSessionTitle, getSessionIdFromLog, saveAgentSetting, saveMode, searchSessionsByCustomTitle, sessionIdExists } from "./utils/sessionStorage.js";
|
|
122
|
+
import { ensureMdmSettingsLoaded } from "./utils/settings/mdm/settings.js";
|
|
123
|
+
import { getInitialSettings, getManagedSettingsKeysForLogging, getSettingsForSource, getSettingsWithErrors } from "./utils/settings/settings.js";
|
|
124
|
+
import { resetSettingsCache } from "./utils/settings/settingsCache.js";
|
|
125
|
+
import { DEFAULT_TASKS_MODE_TASK_LIST_ID } from "./utils/tasks.js";
|
|
126
|
+
import { logPluginLoadErrors, logPluginsEnabledForSession } from "./utils/telemetry/pluginTelemetry.js";
|
|
127
|
+
import { logSkillsLoaded } from "./utils/telemetry/skillLoadedEvent.js";
|
|
128
|
+
import { generateTempFilePath } from "./utils/tempfile.js";
|
|
129
|
+
import { validateUuid } from "./utils/uuid.js";
|
|
130
|
+
import { XCODE_DEFAULT_NVIDIA_API_KEY } from "./constants/memcodeDefaults.js";
|
|
131
|
+
async function validatePrintCredentialsOrExit() {
|
|
132
|
+
if (isEnvTruthy(process.env.XCODE_USE_BEDROCK) || isEnvTruthy(process.env.XCODE_USE_VERTEX) || isEnvTruthy(process.env.XCODE_USE_FOUNDRY)) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (resolveOpenRouterApiKey() || process.env.OPENAI_API_KEY || process.env.OPENAI_API_TOKEN || process.env.XCODE_OPENAI_API_KEY || process.env.XCODE_API_URL || process.env.ANTHROPIC_API_KEY || process.env.ANTHROPIC_AUTH_TOKEN || process.env.GEMINI_API_KEY || process.env.NVIDIA_API_KEY || XCODE_DEFAULT_NVIDIA_API_KEY || getConfiguredApiKeyHelper()) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const oauthTokens = await getClaudeAIOAuthTokensAsync();
|
|
139
|
+
if (oauthTokens?.accessToken) return;
|
|
140
|
+
process.stderr.write(
|
|
141
|
+
"Error: No API credentials found for --print mode. Set OPENROUTER_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XCODE_API_URL, or another provider-specific credential.\n"
|
|
142
|
+
);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
function isHeadlessLocalSlashCommand(inputPrompt, commands) {
|
|
146
|
+
if (typeof inputPrompt !== "string") return false;
|
|
147
|
+
const trimmed = inputPrompt.trim();
|
|
148
|
+
if (!trimmed.startsWith("/")) return false;
|
|
149
|
+
const commandName = trimmed.slice(1).split(/\s+/, 1)[0];
|
|
150
|
+
if (!commandName) return false;
|
|
151
|
+
return commands.some(
|
|
152
|
+
(command) => command.type === "local" && command.supportsNonInteractive && (command.name === commandName || command.aliases?.includes(commandName))
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
import { registerMcpAddCommand } from "src/commands/mcp/addCommand.js";
|
|
156
|
+
import { registerMcpXaaIdpCommand } from "src/commands/mcp/xaaIdpCommand.js";
|
|
157
|
+
import { logPermissionContextForAnts } from "src/services/internalLogging.js";
|
|
158
|
+
import { fetchmemCodeProxyMcpConfigsIfEligible } from "src/services/mcp/memcodeProxy.js";
|
|
159
|
+
import { clearServerCache } from "src/services/mcp/client.js";
|
|
160
|
+
import { areMcpConfigsAllowedWithEnterpriseMcpConfig, dedupClaudeAiMcpServers, doesEnterpriseMcpConfigExist, filterMcpServersByPolicy, getClaudeCodeMcpConfigs, getMcpServerSignature, parseMcpConfig, parseMcpConfigFromFilePath } from "src/services/mcp/config.js";
|
|
161
|
+
import { excludeCommandsByServer, excludeResourcesByServer } from "src/services/mcp/utils.js";
|
|
162
|
+
import { isXaaEnabled } from "src/services/mcp/xaaIdpLogin.js";
|
|
163
|
+
import { getRelevantTips } from "src/services/tips/tipRegistry.js";
|
|
164
|
+
import { logContextMetrics } from "src/utils/api.js";
|
|
165
|
+
import { XCODE_IN_CHROME_MCP_SERVER_NAME, ismemCodeInChromeMCPServer } from "src/utils/memcodeInChrome/common.js";
|
|
166
|
+
import { registerCleanup } from "src/utils/cleanupRegistry.js";
|
|
167
|
+
import { eagerParseCliFlag } from "src/utils/cliArgs.js";
|
|
168
|
+
import { createEmptyAttributionState } from "src/utils/commitAttribution.js";
|
|
169
|
+
import { countConcurrentSessions, registerSession, updateSessionName } from "src/utils/concurrentSessions.js";
|
|
170
|
+
import { getCwd } from "src/utils/cwd.js";
|
|
171
|
+
import { logForDebugging, setHasFormattedOutput } from "src/utils/debug.js";
|
|
172
|
+
import { errorMessage, getErrnoCode, isENOENT, TeleportOperationError, toError } from "src/utils/errors.js";
|
|
173
|
+
import { getFsImplementation, safeResolvePath } from "src/utils/fsOperations.js";
|
|
174
|
+
import { gracefulShutdown, gracefulShutdownSync } from "src/utils/gracefulShutdown.js";
|
|
175
|
+
import { setAllHookEventsEnabled } from "src/utils/hooks/hookEvents.js";
|
|
176
|
+
import { refreshModelCapabilities } from "src/utils/model/modelCapabilities.js";
|
|
177
|
+
import { peekForStdinData, writeToStderr } from "src/utils/process.js";
|
|
178
|
+
import { setCwd } from "src/utils/Shell.js";
|
|
179
|
+
import { processResumedConversation } from "src/utils/sessionRestore.js";
|
|
180
|
+
import { parseSettingSourcesFlag } from "src/utils/settings/constants.js";
|
|
181
|
+
import { plural } from "src/utils/stringUtils.js";
|
|
182
|
+
import { getInitialMainLoopModel, getIsNonInteractiveSession, getSdkBetas, getSessionId, getUserMsgOptIn, setAllowedChannels, setAllowedSettingSources, setChromeFlagOverride, setClientType, setCwdState, setDirectConnectServerUrl, setFlagSettingsPath, setInitialMainLoopModel, setInlinePlugins, setIsInteractive, setKairosActive, setOriginalCwd, setQuestionPreviewFormat, setSdkBetas, setSessionBypassPermissionsMode, setSessionPersistenceDisabled, setSessionSource, setUserMsgOptIn, switchSession } from "./bootstrap/state.js";
|
|
183
|
+
const autoModeStateModule = feature("TRANSCRIPT_CLASSIFIER") ? require("./utils/permissions/autoModeState.js") : null;
|
|
184
|
+
import { migrateAutoUpdatesToSettings } from "./migrations/migrateAutoUpdatesToSettings.js";
|
|
185
|
+
import { migrateBypassPermissionsAcceptedToSettings } from "./migrations/migrateBypassPermissionsAcceptedToSettings.js";
|
|
186
|
+
import { migrateEnableAllProjectMcpServersToSettings } from "./migrations/migrateEnableAllProjectMcpServersToSettings.js";
|
|
187
|
+
import "./migrations/migrateFennecToOpus.js";
|
|
188
|
+
import { migrateLegacyOpusToCurrent } from "./migrations/migrateLegacyOpusToCurrent.js";
|
|
189
|
+
import { migrateOpusToOpus1m } from "./migrations/migrateOpusToOpus1m.js";
|
|
190
|
+
import { migrateReplBridgeEnabledToRemoteControlAtStartup } from "./migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js";
|
|
191
|
+
import { migrateSonnet1mToSonnet45 } from "./migrations/migrateSonnet1mToSonnet45.js";
|
|
192
|
+
import { migrateSonnet45ToSonnet46 } from "./migrations/migrateSonnet45ToSonnet46.js";
|
|
193
|
+
import { resetAutoModeOptInForDefaultOffer } from "./migrations/resetAutoModeOptInForDefaultOffer.js";
|
|
194
|
+
import { resetProToOpusDefault } from "./migrations/resetProToOpusDefault.js";
|
|
195
|
+
import { createRemoteSessionConfig } from "./remote/RemoteSessionManager.js";
|
|
196
|
+
import { createDirectConnectSession, DirectConnectError } from "./server/createDirectConnectSession.js";
|
|
197
|
+
import { initializeLspServerManager } from "./services/lsp/manager.js";
|
|
198
|
+
import { shouldEnablePromptSuggestion } from "./services/PromptSuggestion/promptSuggestion.js";
|
|
199
|
+
import { getDefaultAppState, IDLE_SPECULATION_STATE } from "./state/AppStateStore.js";
|
|
200
|
+
import { onChangeAppState } from "./state/onChangeAppState.js";
|
|
201
|
+
import { createStore } from "./state/store.js";
|
|
202
|
+
import { asSessionId } from "./types/ids.js";
|
|
203
|
+
import { filterAllowedSdkBetas } from "./utils/betas.js";
|
|
204
|
+
import { isInBundledMode, isRunningWithBun } from "./utils/bundledMode.js";
|
|
205
|
+
import { logForDiagnosticsNoPII } from "./utils/diagLogs.js";
|
|
206
|
+
import { filterExistingPaths, getKnownPathsForRepo } from "./utils/githubRepoPathMapping.js";
|
|
207
|
+
import { clearPluginCache, loadAllPluginsCacheOnly } from "./utils/plugins/pluginLoader.js";
|
|
208
|
+
import { migrateChangelogFromConfig } from "./utils/releaseNotes.js";
|
|
209
|
+
import { SandboxManager } from "./utils/sandbox/sandbox-adapter.js";
|
|
210
|
+
import { fetchSession, prepareApiRequest } from "./utils/teleport/api.js";
|
|
211
|
+
import { checkOutTeleportedSessionBranch, processMessagesForTeleportResume, teleportToRemoteWithErrorHandling, validateGitState, validateSessionRepository } from "./utils/teleport.js";
|
|
212
|
+
import { shouldEnableThinkingByDefault } from "./utils/thinking.js";
|
|
213
|
+
import { initUser, resetUserCache } from "./utils/user.js";
|
|
214
|
+
import { getTmuxInstallInstructions, isTmuxAvailable, parsePRReference } from "./utils/worktree.js";
|
|
215
|
+
profileCheckpoint("main_tsx_imports_loaded");
|
|
216
|
+
function logManagedSettings() {
|
|
217
|
+
try {
|
|
218
|
+
const policySettings = getSettingsForSource("policySettings");
|
|
219
|
+
if (policySettings) {
|
|
220
|
+
const allKeys = getManagedSettingsKeysForLogging(policySettings);
|
|
221
|
+
logEvent("tengu_managed_settings_loaded", {
|
|
222
|
+
keyCount: allKeys.length,
|
|
223
|
+
keys: allKeys.join(",")
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
} catch {
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function isBeingDebugged() {
|
|
230
|
+
const isBun = isRunningWithBun();
|
|
231
|
+
const hasInspectArg = process.execArgv.some((arg) => {
|
|
232
|
+
if (isBun) {
|
|
233
|
+
return /--inspect(-brk)?/.test(arg);
|
|
234
|
+
} else {
|
|
235
|
+
return /--inspect(-brk)?|--debug(-brk)?/.test(arg);
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
const hasInspectEnv = process.env.NODE_OPTIONS && /--inspect(-brk)?|--debug(-brk)?/.test(process.env.NODE_OPTIONS);
|
|
239
|
+
try {
|
|
240
|
+
const inspector = global.require("inspector");
|
|
241
|
+
const hasInspectorUrl = !!inspector.url();
|
|
242
|
+
return hasInspectorUrl || hasInspectArg || hasInspectEnv;
|
|
243
|
+
} catch {
|
|
244
|
+
return hasInspectArg || hasInspectEnv;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (isBeingDebugged()) {
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
function logSessionTelemetry() {
|
|
251
|
+
const model = parseUserSpecifiedModel(getInitialMainLoopModel() ?? getDefaultMainLoopModel());
|
|
252
|
+
void logSkillsLoaded(getCwd(), getContextWindowForModel(model, getSdkBetas()));
|
|
253
|
+
void loadAllPluginsCacheOnly().then(({
|
|
254
|
+
enabled,
|
|
255
|
+
errors
|
|
256
|
+
}) => {
|
|
257
|
+
const managedNames = getManagedPluginNames();
|
|
258
|
+
logPluginsEnabledForSession(enabled, managedNames, getPluginSeedDirs());
|
|
259
|
+
logPluginLoadErrors(errors, managedNames);
|
|
260
|
+
}).catch((err) => logError(err));
|
|
261
|
+
}
|
|
262
|
+
function getCertEnvVarTelemetry() {
|
|
263
|
+
const result = {};
|
|
264
|
+
if (process.env.NODE_EXTRA_CA_CERTS) {
|
|
265
|
+
result.has_node_extra_ca_certs = true;
|
|
266
|
+
}
|
|
267
|
+
if (process.env.XCODE_CLIENT_CERT) {
|
|
268
|
+
result.has_client_cert = true;
|
|
269
|
+
}
|
|
270
|
+
if (hasNodeOption("--use-system-ca")) {
|
|
271
|
+
result.has_use_system_ca = true;
|
|
272
|
+
}
|
|
273
|
+
if (hasNodeOption("--use-openssl-ca")) {
|
|
274
|
+
result.has_use_openssl_ca = true;
|
|
275
|
+
}
|
|
276
|
+
return result;
|
|
277
|
+
}
|
|
278
|
+
async function logStartupTelemetry() {
|
|
279
|
+
if (isAnalyticsDisabled()) return;
|
|
280
|
+
const [isGit, worktreeCount, ghAuthStatus] = await Promise.all([getIsGit(), getWorktreeCount(), getGhAuthStatus()]);
|
|
281
|
+
logEvent("tengu_startup_telemetry", {
|
|
282
|
+
is_git: isGit,
|
|
283
|
+
worktree_count: worktreeCount,
|
|
284
|
+
gh_auth_status: ghAuthStatus,
|
|
285
|
+
sandbox_enabled: SandboxManager.isSandboxingEnabled(),
|
|
286
|
+
are_unsandboxed_commands_allowed: SandboxManager.areUnsandboxedCommandsAllowed(),
|
|
287
|
+
is_auto_bash_allowed_if_sandbox_enabled: SandboxManager.isAutoAllowBashIfSandboxedEnabled(),
|
|
288
|
+
auto_updater_disabled: isAutoUpdaterDisabled(),
|
|
289
|
+
prefers_reduced_motion: getInitialSettings().prefersReducedMotion ?? false,
|
|
290
|
+
...getCertEnvVarTelemetry()
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
const CURRENT_MIGRATION_VERSION = 11;
|
|
294
|
+
function runMigrations() {
|
|
295
|
+
if (getGlobalConfig().migrationVersion !== CURRENT_MIGRATION_VERSION) {
|
|
296
|
+
migrateAutoUpdatesToSettings();
|
|
297
|
+
migrateBypassPermissionsAcceptedToSettings();
|
|
298
|
+
migrateEnableAllProjectMcpServersToSettings();
|
|
299
|
+
resetProToOpusDefault();
|
|
300
|
+
migrateSonnet1mToSonnet45();
|
|
301
|
+
migrateLegacyOpusToCurrent();
|
|
302
|
+
migrateSonnet45ToSonnet46();
|
|
303
|
+
migrateOpusToOpus1m();
|
|
304
|
+
migrateReplBridgeEnabledToRemoteControlAtStartup();
|
|
305
|
+
if (feature("TRANSCRIPT_CLASSIFIER")) {
|
|
306
|
+
resetAutoModeOptInForDefaultOffer();
|
|
307
|
+
}
|
|
308
|
+
if (false) {
|
|
309
|
+
migrateFennecToOpus();
|
|
310
|
+
}
|
|
311
|
+
saveGlobalConfig((prev) => prev.migrationVersion === CURRENT_MIGRATION_VERSION ? prev : {
|
|
312
|
+
...prev,
|
|
313
|
+
migrationVersion: CURRENT_MIGRATION_VERSION
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
migrateChangelogFromConfig().catch(() => {
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
function prefetchSystemContextIfSafe() {
|
|
320
|
+
const isNonInteractiveSession = getIsNonInteractiveSession();
|
|
321
|
+
if (isNonInteractiveSession) {
|
|
322
|
+
logForDiagnosticsNoPII("info", "prefetch_system_context_non_interactive");
|
|
323
|
+
void getSystemContext();
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const hasTrust = checkHasTrustDialogAccepted();
|
|
327
|
+
if (hasTrust) {
|
|
328
|
+
logForDiagnosticsNoPII("info", "prefetch_system_context_has_trust");
|
|
329
|
+
void getSystemContext();
|
|
330
|
+
} else {
|
|
331
|
+
logForDiagnosticsNoPII("info", "prefetch_system_context_skipped_no_trust");
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
function startDeferredPrefetches() {
|
|
335
|
+
if (isEnvTruthy(process.env.XCODE_EXIT_AFTER_FIRST_RENDER) || // --bare: skip ALL prefetches. These are cache-warms for the REPL's
|
|
336
|
+
// first-turn responsiveness (initUser, getUserContext, tips, countFiles,
|
|
337
|
+
// modelCapabilities, change detectors). Scripted -p calls don't have a
|
|
338
|
+
// "user is typing" window to hide this work in — it's pure overhead on
|
|
339
|
+
// the critical path.
|
|
340
|
+
isBareMode()) {
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
void initUser();
|
|
344
|
+
void getUserContext();
|
|
345
|
+
prefetchSystemContextIfSafe();
|
|
346
|
+
void getRelevantTips();
|
|
347
|
+
if (isEnvTruthy(process.env.XCODE_USE_BEDROCK) && !isEnvTruthy(process.env.XCODE_SKIP_BEDROCK_AUTH)) {
|
|
348
|
+
void prefetchAwsCredentialsAndBedRockInfoIfSafe();
|
|
349
|
+
}
|
|
350
|
+
if (isEnvTruthy(process.env.XCODE_USE_VERTEX) && !isEnvTruthy(process.env.XCODE_SKIP_VERTEX_AUTH)) {
|
|
351
|
+
void prefetchGcpCredentialsIfSafe();
|
|
352
|
+
}
|
|
353
|
+
void countFilesRoundedRg(getCwd(), AbortSignal.timeout(3e3), []);
|
|
354
|
+
void initializeAnalyticsGates();
|
|
355
|
+
void prefetchOfficialMcpUrls();
|
|
356
|
+
void refreshModelCapabilities();
|
|
357
|
+
void settingsChangeDetector.initialize();
|
|
358
|
+
if (!isBareMode()) {
|
|
359
|
+
void skillChangeDetector.initialize();
|
|
360
|
+
}
|
|
361
|
+
if (false) {
|
|
362
|
+
void null.then((m) => m.startEventLoopStallDetector());
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
function loadSettingsFromFlag(settingsFile) {
|
|
366
|
+
try {
|
|
367
|
+
const trimmedSettings = settingsFile.trim();
|
|
368
|
+
const looksLikeJson = trimmedSettings.startsWith("{") && trimmedSettings.endsWith("}");
|
|
369
|
+
let settingsPath;
|
|
370
|
+
if (looksLikeJson) {
|
|
371
|
+
const parsedJson = safeParseJSON(trimmedSettings);
|
|
372
|
+
if (!parsedJson) {
|
|
373
|
+
process.stderr.write(chalk.red("Error: Invalid JSON provided to --settings\n"));
|
|
374
|
+
process.exit(1);
|
|
375
|
+
}
|
|
376
|
+
settingsPath = generateTempFilePath("claude-settings", ".json", {
|
|
377
|
+
contentHash: trimmedSettings
|
|
378
|
+
});
|
|
379
|
+
writeFileSync_DEPRECATED(settingsPath, trimmedSettings, "utf8");
|
|
380
|
+
} else {
|
|
381
|
+
const {
|
|
382
|
+
resolvedPath: resolvedSettingsPath
|
|
383
|
+
} = safeResolvePath(getFsImplementation(), settingsFile);
|
|
384
|
+
try {
|
|
385
|
+
readFileSync(resolvedSettingsPath, "utf8");
|
|
386
|
+
} catch (e) {
|
|
387
|
+
if (isENOENT(e)) {
|
|
388
|
+
process.stderr.write(chalk.red(`Error: Settings file not found: ${resolvedSettingsPath}
|
|
389
|
+
`));
|
|
390
|
+
process.exit(1);
|
|
391
|
+
}
|
|
392
|
+
throw e;
|
|
393
|
+
}
|
|
394
|
+
settingsPath = resolvedSettingsPath;
|
|
395
|
+
}
|
|
396
|
+
setFlagSettingsPath(settingsPath);
|
|
397
|
+
resetSettingsCache();
|
|
398
|
+
} catch (error) {
|
|
399
|
+
if (error instanceof Error) {
|
|
400
|
+
logError(error);
|
|
401
|
+
}
|
|
402
|
+
process.stderr.write(chalk.red(`Error processing settings: ${errorMessage(error)}
|
|
403
|
+
`));
|
|
404
|
+
process.exit(1);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
function loadSettingSourcesFromFlag(settingSourcesArg) {
|
|
408
|
+
try {
|
|
409
|
+
const sources = parseSettingSourcesFlag(settingSourcesArg);
|
|
410
|
+
setAllowedSettingSources(sources);
|
|
411
|
+
resetSettingsCache();
|
|
412
|
+
} catch (error) {
|
|
413
|
+
if (error instanceof Error) {
|
|
414
|
+
logError(error);
|
|
415
|
+
}
|
|
416
|
+
process.stderr.write(chalk.red(`Error processing --setting-sources: ${errorMessage(error)}
|
|
417
|
+
`));
|
|
418
|
+
process.exit(1);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
function eagerLoadSettings() {
|
|
422
|
+
profileCheckpoint("eagerLoadSettings_start");
|
|
423
|
+
const settingsFile = eagerParseCliFlag("--settings");
|
|
424
|
+
if (settingsFile) {
|
|
425
|
+
loadSettingsFromFlag(settingsFile);
|
|
426
|
+
}
|
|
427
|
+
const settingSourcesArg = eagerParseCliFlag("--setting-sources");
|
|
428
|
+
if (settingSourcesArg !== void 0) {
|
|
429
|
+
loadSettingSourcesFromFlag(settingSourcesArg);
|
|
430
|
+
}
|
|
431
|
+
profileCheckpoint("eagerLoadSettings_end");
|
|
432
|
+
}
|
|
433
|
+
function initializeEntrypoint(isNonInteractive) {
|
|
434
|
+
if (process.env.XCODE_ENTRYPOINT) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
const cliArgs = process.argv.slice(2);
|
|
438
|
+
const mcpIndex = cliArgs.indexOf("mcp");
|
|
439
|
+
if (mcpIndex !== -1 && cliArgs[mcpIndex + 1] === "serve") {
|
|
440
|
+
process.env.XCODE_ENTRYPOINT = "mcp";
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
if (isEnvTruthy(process.env.XCODE_ACTION)) {
|
|
444
|
+
process.env.XCODE_ENTRYPOINT = "memcode-github-action";
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
process.env.XCODE_ENTRYPOINT = isNonInteractive ? "sdk-cli" : "cli";
|
|
448
|
+
}
|
|
449
|
+
const _pendingConnect = feature("DIRECT_CONNECT") ? {
|
|
450
|
+
url: void 0,
|
|
451
|
+
authToken: void 0,
|
|
452
|
+
dangerouslySkipPermissions: false
|
|
453
|
+
} : void 0;
|
|
454
|
+
const _pendingAssistantChat = feature("KAIROS") ? {
|
|
455
|
+
sessionId: void 0,
|
|
456
|
+
discover: false
|
|
457
|
+
} : void 0;
|
|
458
|
+
const _pendingSSH = feature("SSH_REMOTE") ? {
|
|
459
|
+
host: void 0,
|
|
460
|
+
cwd: void 0,
|
|
461
|
+
permissionMode: void 0,
|
|
462
|
+
dangerouslySkipPermissions: false,
|
|
463
|
+
local: false,
|
|
464
|
+
extraCliArgs: []
|
|
465
|
+
} : void 0;
|
|
466
|
+
async function main() {
|
|
467
|
+
profileCheckpoint("main_function_start");
|
|
468
|
+
process.env.NoDefaultCurrentDirectoryInExePath = "1";
|
|
469
|
+
initializeWarningHandler();
|
|
470
|
+
process.on("exit", () => {
|
|
471
|
+
resetCursor();
|
|
472
|
+
});
|
|
473
|
+
process.on("SIGINT", () => {
|
|
474
|
+
if (process.argv.includes("-p") || process.argv.includes("--print")) {
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
process.exit(0);
|
|
478
|
+
});
|
|
479
|
+
profileCheckpoint("main_warning_handler_initialized");
|
|
480
|
+
if (feature("DIRECT_CONNECT")) {
|
|
481
|
+
const rawCliArgs = process.argv.slice(2);
|
|
482
|
+
const ccIdx = rawCliArgs.findIndex((a) => a.startsWith("cc://") || a.startsWith("cc+unix://"));
|
|
483
|
+
if (ccIdx !== -1 && _pendingConnect) {
|
|
484
|
+
const ccUrl = rawCliArgs[ccIdx];
|
|
485
|
+
const {
|
|
486
|
+
parseConnectUrl
|
|
487
|
+
} = await import("./server/parseConnectUrl.js");
|
|
488
|
+
const parsed = parseConnectUrl(ccUrl);
|
|
489
|
+
_pendingConnect.dangerouslySkipPermissions = rawCliArgs.includes("--dangerously-skip-permissions");
|
|
490
|
+
if (rawCliArgs.includes("-p") || rawCliArgs.includes("--print")) {
|
|
491
|
+
const stripped = rawCliArgs.filter((_, i) => i !== ccIdx);
|
|
492
|
+
const dspIdx = stripped.indexOf("--dangerously-skip-permissions");
|
|
493
|
+
if (dspIdx !== -1) {
|
|
494
|
+
stripped.splice(dspIdx, 1);
|
|
495
|
+
}
|
|
496
|
+
process.argv = [process.argv[0], process.argv[1], "open", ccUrl, ...stripped];
|
|
497
|
+
} else {
|
|
498
|
+
_pendingConnect.url = parsed.serverUrl;
|
|
499
|
+
_pendingConnect.authToken = parsed.authToken;
|
|
500
|
+
const stripped = rawCliArgs.filter((_, i) => i !== ccIdx);
|
|
501
|
+
const dspIdx = stripped.indexOf("--dangerously-skip-permissions");
|
|
502
|
+
if (dspIdx !== -1) {
|
|
503
|
+
stripped.splice(dspIdx, 1);
|
|
504
|
+
}
|
|
505
|
+
process.argv = [process.argv[0], process.argv[1], ...stripped];
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
if (feature("LODESTONE")) {
|
|
510
|
+
const handleUriIdx = process.argv.indexOf("--handle-uri");
|
|
511
|
+
if (handleUriIdx !== -1 && process.argv[handleUriIdx + 1]) {
|
|
512
|
+
const {
|
|
513
|
+
enableConfigs
|
|
514
|
+
} = await import("./utils/config.js");
|
|
515
|
+
enableConfigs();
|
|
516
|
+
const uri = process.argv[handleUriIdx + 1];
|
|
517
|
+
const {
|
|
518
|
+
handleDeepLinkUri
|
|
519
|
+
} = await import("./utils/deepLink/protocolHandler.js");
|
|
520
|
+
const exitCode = await handleDeepLinkUri(uri);
|
|
521
|
+
process.exit(exitCode);
|
|
522
|
+
}
|
|
523
|
+
if (process.platform === "darwin" && process.env.__CFBundleIdentifier === "com.xortex.memcode-url-handler") {
|
|
524
|
+
const {
|
|
525
|
+
enableConfigs
|
|
526
|
+
} = await import("./utils/config.js");
|
|
527
|
+
enableConfigs();
|
|
528
|
+
const {
|
|
529
|
+
handleUrlSchemeLaunch
|
|
530
|
+
} = await import("./utils/deepLink/protocolHandler.js");
|
|
531
|
+
const urlSchemeResult = await handleUrlSchemeLaunch();
|
|
532
|
+
process.exit(urlSchemeResult ?? 1);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
if (feature("KAIROS") && _pendingAssistantChat) {
|
|
536
|
+
const rawArgs = process.argv.slice(2);
|
|
537
|
+
if (rawArgs[0] === "assistant") {
|
|
538
|
+
const nextArg = rawArgs[1];
|
|
539
|
+
if (nextArg && !nextArg.startsWith("-")) {
|
|
540
|
+
_pendingAssistantChat.sessionId = nextArg;
|
|
541
|
+
rawArgs.splice(0, 2);
|
|
542
|
+
process.argv = [process.argv[0], process.argv[1], ...rawArgs];
|
|
543
|
+
} else if (!nextArg) {
|
|
544
|
+
_pendingAssistantChat.discover = true;
|
|
545
|
+
rawArgs.splice(0, 1);
|
|
546
|
+
process.argv = [process.argv[0], process.argv[1], ...rawArgs];
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
if (feature("SSH_REMOTE") && _pendingSSH) {
|
|
551
|
+
const rawCliArgs = process.argv.slice(2);
|
|
552
|
+
if (rawCliArgs[0] === "ssh") {
|
|
553
|
+
const localIdx = rawCliArgs.indexOf("--local");
|
|
554
|
+
if (localIdx !== -1) {
|
|
555
|
+
_pendingSSH.local = true;
|
|
556
|
+
rawCliArgs.splice(localIdx, 1);
|
|
557
|
+
}
|
|
558
|
+
const dspIdx = rawCliArgs.indexOf("--dangerously-skip-permissions");
|
|
559
|
+
if (dspIdx !== -1) {
|
|
560
|
+
_pendingSSH.dangerouslySkipPermissions = true;
|
|
561
|
+
rawCliArgs.splice(dspIdx, 1);
|
|
562
|
+
}
|
|
563
|
+
const pmIdx = rawCliArgs.indexOf("--permission-mode");
|
|
564
|
+
if (pmIdx !== -1 && rawCliArgs[pmIdx + 1] && !rawCliArgs[pmIdx + 1].startsWith("-")) {
|
|
565
|
+
_pendingSSH.permissionMode = rawCliArgs[pmIdx + 1];
|
|
566
|
+
rawCliArgs.splice(pmIdx, 2);
|
|
567
|
+
}
|
|
568
|
+
const pmEqIdx = rawCliArgs.findIndex((a) => a.startsWith("--permission-mode="));
|
|
569
|
+
if (pmEqIdx !== -1) {
|
|
570
|
+
_pendingSSH.permissionMode = rawCliArgs[pmEqIdx].split("=")[1];
|
|
571
|
+
rawCliArgs.splice(pmEqIdx, 1);
|
|
572
|
+
}
|
|
573
|
+
const extractFlag = (flag, opts = {}) => {
|
|
574
|
+
const i = rawCliArgs.indexOf(flag);
|
|
575
|
+
if (i !== -1) {
|
|
576
|
+
_pendingSSH.extraCliArgs.push(opts.as ?? flag);
|
|
577
|
+
const val = rawCliArgs[i + 1];
|
|
578
|
+
if (opts.hasValue && val && !val.startsWith("-")) {
|
|
579
|
+
_pendingSSH.extraCliArgs.push(val);
|
|
580
|
+
rawCliArgs.splice(i, 2);
|
|
581
|
+
} else {
|
|
582
|
+
rawCliArgs.splice(i, 1);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
const eqI = rawCliArgs.findIndex((a) => a.startsWith(`${flag}=`));
|
|
586
|
+
if (eqI !== -1) {
|
|
587
|
+
_pendingSSH.extraCliArgs.push(opts.as ?? flag, rawCliArgs[eqI].slice(flag.length + 1));
|
|
588
|
+
rawCliArgs.splice(eqI, 1);
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
extractFlag("-c", {
|
|
592
|
+
as: "--continue"
|
|
593
|
+
});
|
|
594
|
+
extractFlag("--continue");
|
|
595
|
+
extractFlag("--resume", {
|
|
596
|
+
hasValue: true
|
|
597
|
+
});
|
|
598
|
+
extractFlag("--model", {
|
|
599
|
+
hasValue: true
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
if (rawCliArgs[0] === "ssh" && rawCliArgs[1] && !rawCliArgs[1].startsWith("-")) {
|
|
603
|
+
_pendingSSH.host = rawCliArgs[1];
|
|
604
|
+
let consumed = 2;
|
|
605
|
+
if (rawCliArgs[2] && !rawCliArgs[2].startsWith("-")) {
|
|
606
|
+
_pendingSSH.cwd = rawCliArgs[2];
|
|
607
|
+
consumed = 3;
|
|
608
|
+
}
|
|
609
|
+
const rest = rawCliArgs.slice(consumed);
|
|
610
|
+
if (rest.includes("-p") || rest.includes("--print")) {
|
|
611
|
+
process.stderr.write("Error: headless (-p/--print) mode is not supported with claude ssh\n");
|
|
612
|
+
gracefulShutdownSync(1);
|
|
613
|
+
return;
|
|
614
|
+
}
|
|
615
|
+
process.argv = [process.argv[0], process.argv[1], ...rest];
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
const cliArgs = process.argv.slice(2);
|
|
619
|
+
const hasPrintFlag = cliArgs.includes("-p") || cliArgs.includes("--print");
|
|
620
|
+
const hasInitOnlyFlag = cliArgs.includes("--init-only");
|
|
621
|
+
const hasSdkUrl = cliArgs.some((arg) => arg.startsWith("--sdk-url"));
|
|
622
|
+
const forceInteractive = !hasPrintFlag;
|
|
623
|
+
const isNonInteractive = hasPrintFlag || hasInitOnlyFlag || hasSdkUrl || !forceInteractive && !process.stdout.isTTY;
|
|
624
|
+
if (isNonInteractive) {
|
|
625
|
+
stopCapturingEarlyInput();
|
|
626
|
+
}
|
|
627
|
+
const isInteractive = !isNonInteractive;
|
|
628
|
+
setIsInteractive(isInteractive);
|
|
629
|
+
initializeEntrypoint(isNonInteractive);
|
|
630
|
+
const clientType = (() => {
|
|
631
|
+
if (isEnvTruthy(process.env.GITHUB_ACTIONS)) return "github-action";
|
|
632
|
+
if (process.env.XCODE_ENTRYPOINT === "sdk-ts") return "sdk-typescript";
|
|
633
|
+
if (process.env.XCODE_ENTRYPOINT === "sdk-py") return "sdk-python";
|
|
634
|
+
if (process.env.XCODE_ENTRYPOINT === "sdk-cli") return "sdk-cli";
|
|
635
|
+
if (process.env.XCODE_ENTRYPOINT === "memcode-vscode") return "memcode-vscode";
|
|
636
|
+
if (process.env.XCODE_ENTRYPOINT === "local-agent") return "local-agent";
|
|
637
|
+
if (process.env.XCODE_ENTRYPOINT === "memcode-desktop" || process.env.XCODE_ENTRYPOINT === "claude-desktop") return "memcode-desktop";
|
|
638
|
+
const hasSessionIngressToken = process.env.XCODE_SESSION_ACCESS_TOKEN || process.env.XCODE_WEBSOCKET_AUTH_FILE_DESCRIPTOR;
|
|
639
|
+
if (process.env.XCODE_ENTRYPOINT === "remote" || hasSessionIngressToken) {
|
|
640
|
+
return "remote";
|
|
641
|
+
}
|
|
642
|
+
return "cli";
|
|
643
|
+
})();
|
|
644
|
+
setClientType(clientType);
|
|
645
|
+
const previewFormat = process.env.XCODE_QUESTION_PREVIEW_FORMAT;
|
|
646
|
+
if (previewFormat === "markdown" || previewFormat === "html") {
|
|
647
|
+
setQuestionPreviewFormat(previewFormat);
|
|
648
|
+
} else if (!clientType.startsWith("sdk-") && // Desktop and CCR pass previewFormat via toolConfig; when the feature is
|
|
649
|
+
// gated off they pass undefined — don't override that with markdown.
|
|
650
|
+
clientType !== "memcode-desktop" && clientType !== "local-agent" && clientType !== "remote") {
|
|
651
|
+
setQuestionPreviewFormat("markdown");
|
|
652
|
+
}
|
|
653
|
+
if (process.env.XCODE_ENVIRONMENT_KIND === "bridge") {
|
|
654
|
+
setSessionSource("remote-control");
|
|
655
|
+
}
|
|
656
|
+
profileCheckpoint("main_client_type_determined");
|
|
657
|
+
eagerLoadSettings();
|
|
658
|
+
profileCheckpoint("main_before_run");
|
|
659
|
+
await run();
|
|
660
|
+
profileCheckpoint("main_after_run");
|
|
661
|
+
}
|
|
662
|
+
async function getInputPrompt(prompt, inputFormat) {
|
|
663
|
+
if (isEnvTruthy(process.env.XCODE_SKIP_STDIN_PROBE)) {
|
|
664
|
+
logForDebugging("[STARTUP] Skipping stdin probe due to XCODE_SKIP_STDIN_PROBE");
|
|
665
|
+
return prompt;
|
|
666
|
+
}
|
|
667
|
+
if (!process.stdin.isTTY && // Input hijacking breaks MCP.
|
|
668
|
+
!process.argv.includes("mcp")) {
|
|
669
|
+
if (inputFormat === "stream-json") {
|
|
670
|
+
return process.stdin;
|
|
671
|
+
}
|
|
672
|
+
process.stdin.setEncoding("utf8");
|
|
673
|
+
let data = "";
|
|
674
|
+
const onData = (chunk) => {
|
|
675
|
+
data += chunk;
|
|
676
|
+
};
|
|
677
|
+
process.stdin.on("data", onData);
|
|
678
|
+
const timedOut = await peekForStdinData(process.stdin, 3e3);
|
|
679
|
+
process.stdin.off("data", onData);
|
|
680
|
+
if (timedOut) {
|
|
681
|
+
process.stderr.write("Warning: no stdin data received in 3s, proceeding without it. If piping from a slow command, redirect stdin explicitly: < /dev/null to skip, or wait longer.\n");
|
|
682
|
+
}
|
|
683
|
+
return [prompt, data].filter(Boolean).join("\n");
|
|
684
|
+
}
|
|
685
|
+
return prompt;
|
|
686
|
+
}
|
|
687
|
+
async function run() {
|
|
688
|
+
profileCheckpoint("run_function_start");
|
|
689
|
+
function createSortedHelpConfig() {
|
|
690
|
+
const getOptionSortKey = (opt) => opt.long?.replace(/^--/, "") ?? opt.short?.replace(/^-/, "") ?? "";
|
|
691
|
+
return Object.assign({
|
|
692
|
+
sortSubcommands: true,
|
|
693
|
+
sortOptions: true
|
|
694
|
+
}, {
|
|
695
|
+
compareOptions: (a, b) => getOptionSortKey(a).localeCompare(getOptionSortKey(b))
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
const program = new CommanderCommand().configureHelp(createSortedHelpConfig()).enablePositionalOptions();
|
|
699
|
+
profileCheckpoint("run_commander_initialized");
|
|
700
|
+
program.hook("preAction", async (thisCommand) => {
|
|
701
|
+
profileCheckpoint("preAction_start");
|
|
702
|
+
await Promise.all([
|
|
703
|
+
failOpenStartupGate("MDM settings", ensureMdmSettingsLoaded()),
|
|
704
|
+
failOpenStartupGate("keychain prefetch", ensureKeychainPrefetchCompleted())
|
|
705
|
+
]);
|
|
706
|
+
profileCheckpoint("preAction_after_mdm");
|
|
707
|
+
await init();
|
|
708
|
+
profileCheckpoint("preAction_after_init");
|
|
709
|
+
if (!isEnvTruthy(process.env.XCODE_DISABLE_TERMINAL_TITLE)) {
|
|
710
|
+
process.title = "memcode";
|
|
711
|
+
}
|
|
712
|
+
const {
|
|
713
|
+
initSinks
|
|
714
|
+
} = await import("./utils/sinks.js");
|
|
715
|
+
initSinks();
|
|
716
|
+
profileCheckpoint("preAction_after_sinks");
|
|
717
|
+
const pluginDir = thisCommand.getOptionValue("pluginDir");
|
|
718
|
+
if (Array.isArray(pluginDir) && pluginDir.length > 0 && pluginDir.every((p) => typeof p === "string")) {
|
|
719
|
+
setInlinePlugins(pluginDir);
|
|
720
|
+
clearPluginCache("preAction: --plugin-dir inline plugins");
|
|
721
|
+
}
|
|
722
|
+
runMigrations();
|
|
723
|
+
profileCheckpoint("preAction_after_migrations");
|
|
724
|
+
void loadRemoteManagedSettings();
|
|
725
|
+
void loadPolicyLimits();
|
|
726
|
+
profileCheckpoint("preAction_after_remote_settings");
|
|
727
|
+
if (feature("UPLOAD_USER_SETTINGS")) {
|
|
728
|
+
void import("./services/settingsSync/index.js").then((m) => m.uploadUserSettingsInBackground());
|
|
729
|
+
}
|
|
730
|
+
profileCheckpoint("preAction_after_settings_sync");
|
|
731
|
+
});
|
|
732
|
+
program.name("memcode").description(`memCode - starts an interactive session by default, use -p/--print for non-interactive output`).argument("[prompt]", "Your prompt", String).helpOption("-h, --help", "Display help for command").option("-d, --debug [filter]", 'Enable debug mode with optional category filtering (e.g., "api,hooks" or "!1p,!file")', (_value) => {
|
|
733
|
+
return true;
|
|
734
|
+
}).addOption(new Option("--debug-to-stderr", "Enable debug mode (to stderr)").argParser(Boolean).hideHelp()).option("--debug-file <path>", "Write debug logs to a specific file path (implicitly enables debug mode)", () => true).option("--verbose", "Override verbose mode setting from config", () => true).option("-p, --print", "Print response and exit (useful for pipes). Note: The workspace trust dialog is skipped in -p mode. Only use this flag in directories you trust.", () => true).option("--bare", "Minimal mode: skip hooks, LSP, plugin sync, attribution, auto-memory, background prefetches, keychain reads, and XCODE.md auto-discovery. Sets XCODE_SIMPLE=1. Use OPENROUTER_API_KEY, OPENAI_API_KEY, XCODE_API_URL, GEMINI_API_KEY, or --settings for credentials. Explicitly provide context via: --system-prompt[-file], --append-system-prompt[-file], --add-dir (XCODE.md dirs), --mcp-config, --settings, --agents, --plugin-dir.", () => true).addOption(new Option("--init", "Run Setup hooks with init trigger, then continue").hideHelp()).addOption(new Option("--init-only", "Run Setup and SessionStart:startup hooks, then exit").hideHelp()).addOption(new Option("--maintenance", "Run Setup hooks with maintenance trigger, then continue").hideHelp()).addOption(new Option("--output-format <format>", 'Output format (only works with --print): "text" (default), "json" (single result), or "stream-json" (realtime streaming)').choices(["text", "json", "stream-json"])).addOption(new Option("--json-schema <schema>", 'JSON Schema for structured output validation. Example: {"type":"object","properties":{"name":{"type":"string"}},"required":["name"]}').argParser(String)).option("--include-hook-events", "Include all hook lifecycle events in the output stream (only works with --output-format=stream-json)", () => true).option("--include-partial-messages", "Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)", () => true).addOption(new Option("--input-format <format>", 'Input format (only works with --print): "text" (default), or "stream-json" (realtime streaming input)').choices(["text", "stream-json"])).option("--mcp-debug", "[DEPRECATED. Use --debug instead] Enable MCP debug mode (shows MCP server errors)", () => true).option("--dangerously-skip-permissions", "Bypass all permission checks. Recommended only for sandboxes with no internet access.", () => true).option("--allow-dangerously-skip-permissions", "Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.", () => true).addOption(new Option("--thinking <mode>", "Thinking mode: enabled (equivalent to adaptive), disabled").choices(["enabled", "adaptive", "disabled"]).hideHelp()).addOption(new Option("--max-thinking-tokens <tokens>", "[DEPRECATED. Use --thinking instead for newer models] Maximum number of thinking tokens (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-turns <turns>", "Maximum number of agentic turns in non-interactive mode. This will early exit the conversation after the specified number of turns. (only works with --print)").argParser(Number).hideHelp()).addOption(new Option("--max-budget-usd <amount>", "Maximum dollar amount to spend on API calls (only works with --print)").argParser((value) => {
|
|
735
|
+
const amount = Number(value);
|
|
736
|
+
if (isNaN(amount) || amount <= 0) {
|
|
737
|
+
throw new Error("--max-budget-usd must be a positive number greater than 0");
|
|
738
|
+
}
|
|
739
|
+
return amount;
|
|
740
|
+
})).addOption(new Option("--task-budget <tokens>", "API-side task budget in tokens (output_config.task_budget)").argParser((value) => {
|
|
741
|
+
const tokens = Number(value);
|
|
742
|
+
if (isNaN(tokens) || tokens <= 0 || !Number.isInteger(tokens)) {
|
|
743
|
+
throw new Error("--task-budget must be a positive integer");
|
|
744
|
+
}
|
|
745
|
+
return tokens;
|
|
746
|
+
}).hideHelp()).option("--replay-user-messages", "Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)", () => true).addOption(new Option("--enable-auth-status", "Enable auth status messages in SDK mode").default(false).hideHelp()).option("--allowedTools, --allowed-tools <tools...>", 'Comma or space-separated list of tool names to allow (e.g. "Bash(git:*) Edit")').option("--tools <tools...>", 'Specify the list of available tools from the built-in set. Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read").').option("--disallowedTools, --disallowed-tools <tools...>", 'Comma or space-separated list of tool names to deny (e.g. "Bash(git:*) Edit")').option("--mcp-config <configs...>", "Load MCP servers from JSON files or strings (space-separated)").addOption(new Option("--permission-prompt-tool <tool>", "MCP tool to use for permission prompts (only works with --print)").argParser(String).hideHelp()).addOption(new Option("--system-prompt <prompt>", "System prompt to use for the session").argParser(String)).addOption(new Option("--system-prompt-file <file>", "Read system prompt from a file").argParser(String).hideHelp()).addOption(new Option("--append-system-prompt <prompt>", "Append a system prompt to the default system prompt").argParser(String)).addOption(new Option("--append-system-prompt-file <file>", "Read system prompt from a file and append to the default system prompt").argParser(String).hideHelp()).addOption(new Option("--permission-mode <mode>", "Permission mode to use for the session").argParser(String).choices(PERMISSION_MODES)).option("-c, --continue", "Continue the most recent conversation in the current directory", () => true).option("-r, --resume [value]", "Resume a conversation by session ID, or open interactive picker with optional search term", (value) => value || true).option("--fork-session", "When resuming, create a new session ID instead of reusing the original (use with --resume or --continue)", () => true).addOption(new Option("--prefill <text>", "Pre-fill the prompt input with text without submitting it").hideHelp()).addOption(new Option("--deep-link-origin", "Signal that this session was launched from a deep link").hideHelp()).addOption(new Option("--deep-link-repo <slug>", "Repo slug the deep link ?repo= parameter resolved to the current cwd").hideHelp()).addOption(new Option("--deep-link-last-fetch <ms>", "FETCH_HEAD mtime in epoch ms, precomputed by the deep link trampoline").argParser((v) => {
|
|
747
|
+
const n = Number(v);
|
|
748
|
+
return Number.isFinite(n) ? n : void 0;
|
|
749
|
+
}).hideHelp()).option("--from-pr [value]", "Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term", (value) => value || true).option("--no-session-persistence", "Disable session persistence - sessions will not be saved to disk and cannot be resumed (only works with --print)").addOption(new Option("--resume-session-at <message id>", "When resuming, only messages up to and including the assistant message with <message.id> (use with --resume in print mode)").argParser(String).hideHelp()).addOption(new Option("--rewind-files <user-message-id>", "Restore files to state at the specified user message and exit (requires --resume)").hideHelp()).option("--model <model>", `Model for the current session. Examples: 'gpt', 'gpt-4o', 'gemini', 'kimi', 'deepseek', or a full provider model name.`).addOption(new Option("--effort <level>", `Effort level for the current session (low, medium, high, max)`).argParser((rawValue) => {
|
|
750
|
+
const value = rawValue.toLowerCase();
|
|
751
|
+
const allowed = ["low", "medium", "high", "max"];
|
|
752
|
+
if (!allowed.includes(value)) {
|
|
753
|
+
throw new InvalidArgumentError(`It must be one of: ${allowed.join(", ")}`);
|
|
754
|
+
}
|
|
755
|
+
return value;
|
|
756
|
+
})).option("--agent <agent>", `Agent for the current session. Overrides the 'agent' setting.`).option("--betas <betas...>", "Beta headers to include in API requests (API key users only)").option("--fallback-model <model>", "Enable automatic fallback to specified model when default model is overloaded (only works with --print)").addOption(new Option("--workload <tag>", "Workload tag for billing-header attribution (cc_workload). Process-scoped; set by SDK daemon callers that spawn subprocesses for cron work. (only works with --print)").hideHelp()).option("--settings <file-or-json>", "Path to a settings JSON file or a JSON string to load additional settings from").option("--add-dir <directories...>", "Additional directories to allow tool access to").option("--ide", "Automatically connect to IDE on startup if exactly one valid IDE is available", () => true).option("--strict-mcp-config", "Only use MCP servers from --mcp-config, ignoring all other MCP configurations", () => true).option("--session-id <uuid>", "Use a specific session ID for the conversation (must be a valid UUID)").option("-n, --name <name>", "Set a display name for this session (shown in /resume and terminal title)").option("--agents <json>", `JSON object defining custom agents (e.g. '{"reviewer": {"description": "Reviews code", "prompt": "You are a code reviewer"}}')`).option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").option("--plugin-dir <path>", "Load plugins from a directory for this session only (repeatable: --plugin-dir A --plugin-dir B)", (val, prev) => [...prev, val], []).option("--disable-slash-commands", "Disable all skills", () => true).addOption(new Option("--chrome", "Enable upstream Chrome integration").hideHelp()).addOption(new Option("--no-chrome", "Disable upstream Chrome integration").hideHelp()).option("--file <specs...>", "File resources to download at startup. Format: file_id:relative_path (e.g., --file file_abc:doc.txt file_def:img.png)").action(async (prompt, options) => {
|
|
757
|
+
profileCheckpoint("action_handler_start");
|
|
758
|
+
if (options.bare) {
|
|
759
|
+
process.env.XCODE_SIMPLE = "1";
|
|
760
|
+
}
|
|
761
|
+
if (prompt === "code") {
|
|
762
|
+
logEvent("tengu_code_prompt_ignored", {});
|
|
763
|
+
console.warn(chalk.yellow("Tip: You can launch memCode with just `memcode`"));
|
|
764
|
+
prompt = void 0;
|
|
765
|
+
}
|
|
766
|
+
if (prompt && typeof prompt === "string" && !/\s/.test(prompt) && prompt.length > 0) {
|
|
767
|
+
logEvent("tengu_single_word_prompt", {
|
|
768
|
+
length: prompt.length
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
let kairosEnabled = false;
|
|
772
|
+
let assistantTeamContext;
|
|
773
|
+
if (feature("KAIROS") && options.assistant && assistantModule) {
|
|
774
|
+
assistantModule.markAssistantForced();
|
|
775
|
+
}
|
|
776
|
+
if (feature("KAIROS") && assistantModule?.isAssistantMode() && // Spawned teammates share the leader's cwd + settings.json, so
|
|
777
|
+
// isAssistantMode() is true for them too. --agent-id being set
|
|
778
|
+
// means we ARE a spawned teammate (extractTeammateOptions runs
|
|
779
|
+
// ~170 lines later so check the raw commander option) — don't
|
|
780
|
+
// re-init the team or override teammateMode/proactive/brief.
|
|
781
|
+
!options.agentId && kairosGate) {
|
|
782
|
+
if (!checkHasTrustDialogAccepted()) {
|
|
783
|
+
console.warn(chalk.yellow("Assistant mode disabled: directory is not trusted. Accept the trust dialog and restart."));
|
|
784
|
+
} else {
|
|
785
|
+
kairosEnabled = assistantModule.isAssistantForced() || await kairosGate.isKairosEnabled();
|
|
786
|
+
if (kairosEnabled) {
|
|
787
|
+
const opts = options;
|
|
788
|
+
opts.brief = true;
|
|
789
|
+
setKairosActive(true);
|
|
790
|
+
assistantTeamContext = await assistantModule.initializeAssistantTeam();
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
const {
|
|
795
|
+
debug = false,
|
|
796
|
+
debugToStderr = false,
|
|
797
|
+
dangerouslySkipPermissions,
|
|
798
|
+
allowDangerouslySkipPermissions = false,
|
|
799
|
+
tools: baseTools = [],
|
|
800
|
+
allowedTools = [],
|
|
801
|
+
disallowedTools = [],
|
|
802
|
+
mcpConfig = [],
|
|
803
|
+
permissionMode: permissionModeCli,
|
|
804
|
+
addDir = [],
|
|
805
|
+
fallbackModel,
|
|
806
|
+
betas = [],
|
|
807
|
+
ide = false,
|
|
808
|
+
sessionId,
|
|
809
|
+
includeHookEvents,
|
|
810
|
+
includePartialMessages
|
|
811
|
+
} = options;
|
|
812
|
+
if (options.prefill) {
|
|
813
|
+
seedEarlyInput(options.prefill);
|
|
814
|
+
}
|
|
815
|
+
let fileDownloadPromise;
|
|
816
|
+
const agentsJson = options.agents;
|
|
817
|
+
const agentCli = options.agent;
|
|
818
|
+
if (feature("BG_SESSIONS") && agentCli) {
|
|
819
|
+
process.env.XCODE_AGENT = agentCli;
|
|
820
|
+
}
|
|
821
|
+
let outputFormat = options.outputFormat;
|
|
822
|
+
let inputFormat = options.inputFormat;
|
|
823
|
+
let verbose = options.verbose ?? getGlobalConfig().verbose;
|
|
824
|
+
let print = options.print;
|
|
825
|
+
const init2 = options.init ?? false;
|
|
826
|
+
const initOnly = options.initOnly ?? false;
|
|
827
|
+
const maintenance = options.maintenance ?? false;
|
|
828
|
+
const disableSlashCommands = options.disableSlashCommands || false;
|
|
829
|
+
const tasksOption = false;
|
|
830
|
+
const taskListId = tasksOption ? typeof tasksOption === "string" ? tasksOption : DEFAULT_TASKS_MODE_TASK_LIST_ID : void 0;
|
|
831
|
+
if (false) {
|
|
832
|
+
process.env.XCODE_TASK_LIST_ID = taskListId;
|
|
833
|
+
}
|
|
834
|
+
const worktreeOption = isWorktreeModeEnabled() ? options.worktree : void 0;
|
|
835
|
+
let worktreeName = typeof worktreeOption === "string" ? worktreeOption : void 0;
|
|
836
|
+
const worktreeEnabled = worktreeOption !== void 0;
|
|
837
|
+
let worktreePRNumber;
|
|
838
|
+
if (worktreeName) {
|
|
839
|
+
const prNum = parsePRReference(worktreeName);
|
|
840
|
+
if (prNum !== null) {
|
|
841
|
+
worktreePRNumber = prNum;
|
|
842
|
+
worktreeName = void 0;
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
const tmuxEnabled = isWorktreeModeEnabled() && options.tmux === true;
|
|
846
|
+
if (tmuxEnabled) {
|
|
847
|
+
if (!worktreeEnabled) {
|
|
848
|
+
process.stderr.write(chalk.red("Error: --tmux requires --worktree\n"));
|
|
849
|
+
process.exit(1);
|
|
850
|
+
}
|
|
851
|
+
if (getPlatform() === "windows") {
|
|
852
|
+
process.stderr.write(chalk.red("Error: --tmux is not supported on Windows\n"));
|
|
853
|
+
process.exit(1);
|
|
854
|
+
}
|
|
855
|
+
if (!await isTmuxAvailable()) {
|
|
856
|
+
process.stderr.write(chalk.red(`Error: tmux is not installed.
|
|
857
|
+
${getTmuxInstallInstructions()}
|
|
858
|
+
`));
|
|
859
|
+
process.exit(1);
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
let storedTeammateOpts;
|
|
863
|
+
if (isAgentSwarmsEnabled()) {
|
|
864
|
+
const teammateOpts = extractTeammateOptions(options);
|
|
865
|
+
storedTeammateOpts = teammateOpts;
|
|
866
|
+
const hasAnyTeammateOpt = teammateOpts.agentId || teammateOpts.agentName || teammateOpts.teamName;
|
|
867
|
+
const hasAllRequiredTeammateOpts = teammateOpts.agentId && teammateOpts.agentName && teammateOpts.teamName;
|
|
868
|
+
if (hasAnyTeammateOpt && !hasAllRequiredTeammateOpts) {
|
|
869
|
+
process.stderr.write(chalk.red("Error: --agent-id, --agent-name, and --team-name must all be provided together\n"));
|
|
870
|
+
process.exit(1);
|
|
871
|
+
}
|
|
872
|
+
if (teammateOpts.agentId && teammateOpts.agentName && teammateOpts.teamName) {
|
|
873
|
+
getTeammateUtils().setDynamicTeamContext?.({
|
|
874
|
+
agentId: teammateOpts.agentId,
|
|
875
|
+
agentName: teammateOpts.agentName,
|
|
876
|
+
teamName: teammateOpts.teamName,
|
|
877
|
+
color: teammateOpts.agentColor,
|
|
878
|
+
planModeRequired: teammateOpts.planModeRequired ?? false,
|
|
879
|
+
parentSessionId: teammateOpts.parentSessionId
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
if (teammateOpts.teammateMode) {
|
|
883
|
+
getTeammateModeSnapshot().setCliTeammateModeOverride?.(teammateOpts.teammateMode);
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
const sdkUrl = options.sdkUrl ?? void 0;
|
|
887
|
+
const effectiveIncludePartialMessages = includePartialMessages || isEnvTruthy(process.env.XCODE_INCLUDE_PARTIAL_MESSAGES);
|
|
888
|
+
if (includeHookEvents || isEnvTruthy(process.env.XCODE_REMOTE)) {
|
|
889
|
+
setAllHookEventsEnabled(true);
|
|
890
|
+
}
|
|
891
|
+
if (sdkUrl) {
|
|
892
|
+
if (!inputFormat) {
|
|
893
|
+
inputFormat = "stream-json";
|
|
894
|
+
}
|
|
895
|
+
if (!outputFormat) {
|
|
896
|
+
outputFormat = "stream-json";
|
|
897
|
+
}
|
|
898
|
+
if (options.verbose === void 0) {
|
|
899
|
+
verbose = true;
|
|
900
|
+
}
|
|
901
|
+
if (!options.print) {
|
|
902
|
+
print = true;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
const teleport = options.teleport ?? null;
|
|
906
|
+
const remoteOption = options.remote;
|
|
907
|
+
const remote = remoteOption === true ? "" : remoteOption ?? null;
|
|
908
|
+
const remoteControlOption = options.remoteControl ?? options.rc;
|
|
909
|
+
let remoteControl = false;
|
|
910
|
+
const remoteControlName = typeof remoteControlOption === "string" && remoteControlOption.length > 0 ? remoteControlOption : void 0;
|
|
911
|
+
if (sessionId) {
|
|
912
|
+
if ((options.continue || options.resume) && !options.forkSession) {
|
|
913
|
+
process.stderr.write(chalk.red("Error: --session-id can only be used with --continue or --resume if --fork-session is also specified.\n"));
|
|
914
|
+
process.exit(1);
|
|
915
|
+
}
|
|
916
|
+
if (!sdkUrl) {
|
|
917
|
+
const validatedSessionId = validateUuid(sessionId);
|
|
918
|
+
if (!validatedSessionId) {
|
|
919
|
+
process.stderr.write(chalk.red("Error: Invalid session ID. Must be a valid UUID.\n"));
|
|
920
|
+
process.exit(1);
|
|
921
|
+
}
|
|
922
|
+
if (sessionIdExists(validatedSessionId)) {
|
|
923
|
+
process.stderr.write(chalk.red(`Error: Session ID ${validatedSessionId} is already in use.
|
|
924
|
+
`));
|
|
925
|
+
process.exit(1);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
}
|
|
929
|
+
const fileSpecs = options.file;
|
|
930
|
+
if (fileSpecs && fileSpecs.length > 0) {
|
|
931
|
+
const sessionToken = getSessionIngressAuthToken();
|
|
932
|
+
if (!sessionToken) {
|
|
933
|
+
process.stderr.write(chalk.red("Error: Session token required for file downloads. XCODE_SESSION_ACCESS_TOKEN must be set.\n"));
|
|
934
|
+
process.exit(1);
|
|
935
|
+
}
|
|
936
|
+
const fileSessionId = process.env.XCODE_REMOTE_SESSION_ID || getSessionId();
|
|
937
|
+
const files = parseFileSpecs(fileSpecs);
|
|
938
|
+
if (files.length > 0) {
|
|
939
|
+
const config = {
|
|
940
|
+
baseUrl: process.env.ANTHROPIC_BASE_URL || getOauthConfig().BASE_API_URL,
|
|
941
|
+
oauthToken: sessionToken,
|
|
942
|
+
sessionId: fileSessionId
|
|
943
|
+
};
|
|
944
|
+
fileDownloadPromise = downloadSessionFiles(files, config);
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
const isNonInteractiveSession = getIsNonInteractiveSession();
|
|
948
|
+
if (fallbackModel && options.model && fallbackModel === options.model) {
|
|
949
|
+
process.stderr.write(chalk.red("Error: Fallback model cannot be the same as the main model. Please specify a different model for --fallback-model.\n"));
|
|
950
|
+
process.exit(1);
|
|
951
|
+
}
|
|
952
|
+
let systemPrompt = options.systemPrompt;
|
|
953
|
+
if (options.systemPromptFile) {
|
|
954
|
+
if (options.systemPrompt) {
|
|
955
|
+
process.stderr.write(chalk.red("Error: Cannot use both --system-prompt and --system-prompt-file. Please use only one.\n"));
|
|
956
|
+
process.exit(1);
|
|
957
|
+
}
|
|
958
|
+
try {
|
|
959
|
+
const filePath = resolve(options.systemPromptFile);
|
|
960
|
+
systemPrompt = readFileSync(filePath, "utf8");
|
|
961
|
+
} catch (error) {
|
|
962
|
+
const code = getErrnoCode(error);
|
|
963
|
+
if (code === "ENOENT") {
|
|
964
|
+
process.stderr.write(chalk.red(`Error: System prompt file not found: ${resolve(options.systemPromptFile)}
|
|
965
|
+
`));
|
|
966
|
+
process.exit(1);
|
|
967
|
+
}
|
|
968
|
+
process.stderr.write(chalk.red(`Error reading system prompt file: ${errorMessage(error)}
|
|
969
|
+
`));
|
|
970
|
+
process.exit(1);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
let appendSystemPrompt = options.appendSystemPrompt;
|
|
974
|
+
if (options.appendSystemPromptFile) {
|
|
975
|
+
if (options.appendSystemPrompt) {
|
|
976
|
+
process.stderr.write(chalk.red("Error: Cannot use both --append-system-prompt and --append-system-prompt-file. Please use only one.\n"));
|
|
977
|
+
process.exit(1);
|
|
978
|
+
}
|
|
979
|
+
try {
|
|
980
|
+
const filePath = resolve(options.appendSystemPromptFile);
|
|
981
|
+
appendSystemPrompt = readFileSync(filePath, "utf8");
|
|
982
|
+
} catch (error) {
|
|
983
|
+
const code = getErrnoCode(error);
|
|
984
|
+
if (code === "ENOENT") {
|
|
985
|
+
process.stderr.write(chalk.red(`Error: Append system prompt file not found: ${resolve(options.appendSystemPromptFile)}
|
|
986
|
+
`));
|
|
987
|
+
process.exit(1);
|
|
988
|
+
}
|
|
989
|
+
process.stderr.write(chalk.red(`Error reading append system prompt file: ${errorMessage(error)}
|
|
990
|
+
`));
|
|
991
|
+
process.exit(1);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
if (isAgentSwarmsEnabled() && storedTeammateOpts?.agentId && storedTeammateOpts?.agentName && storedTeammateOpts?.teamName) {
|
|
995
|
+
const addendum = getTeammatePromptAddendum().TEAMMATE_SYSTEM_PROMPT_ADDENDUM;
|
|
996
|
+
appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
|
|
997
|
+
|
|
998
|
+
${addendum}` : addendum;
|
|
999
|
+
}
|
|
1000
|
+
const {
|
|
1001
|
+
mode: permissionMode,
|
|
1002
|
+
notification: permissionModeNotification
|
|
1003
|
+
} = initialPermissionModeFromCLI({
|
|
1004
|
+
permissionModeCli,
|
|
1005
|
+
dangerouslySkipPermissions
|
|
1006
|
+
});
|
|
1007
|
+
setSessionBypassPermissionsMode(permissionMode === "bypassPermissions");
|
|
1008
|
+
if (feature("TRANSCRIPT_CLASSIFIER")) {
|
|
1009
|
+
if (options.enableAutoMode || permissionModeCli === "auto" || permissionMode === "auto" || !permissionModeCli && isDefaultPermissionModeAuto()) {
|
|
1010
|
+
autoModeStateModule?.setAutoModeFlagCli(true);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
let dynamicMcpConfig = {};
|
|
1014
|
+
if (mcpConfig && mcpConfig.length > 0) {
|
|
1015
|
+
const processedConfigs = mcpConfig.map((config) => config.trim()).filter((config) => config.length > 0);
|
|
1016
|
+
let allConfigs = {};
|
|
1017
|
+
const allErrors = [];
|
|
1018
|
+
for (const configItem of processedConfigs) {
|
|
1019
|
+
let configs = null;
|
|
1020
|
+
let errors = [];
|
|
1021
|
+
const parsedJson = safeParseJSON(configItem);
|
|
1022
|
+
if (parsedJson) {
|
|
1023
|
+
const result = parseMcpConfig({
|
|
1024
|
+
configObject: parsedJson,
|
|
1025
|
+
filePath: "command line",
|
|
1026
|
+
expandVars: true,
|
|
1027
|
+
scope: "dynamic"
|
|
1028
|
+
});
|
|
1029
|
+
if (result.config) {
|
|
1030
|
+
configs = result.config.mcpServers;
|
|
1031
|
+
} else {
|
|
1032
|
+
errors = result.errors;
|
|
1033
|
+
}
|
|
1034
|
+
} else {
|
|
1035
|
+
const configPath = resolve(configItem);
|
|
1036
|
+
const result = parseMcpConfigFromFilePath({
|
|
1037
|
+
filePath: configPath,
|
|
1038
|
+
expandVars: true,
|
|
1039
|
+
scope: "dynamic"
|
|
1040
|
+
});
|
|
1041
|
+
if (result.config) {
|
|
1042
|
+
configs = result.config.mcpServers;
|
|
1043
|
+
} else {
|
|
1044
|
+
errors = result.errors;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
if (errors.length > 0) {
|
|
1048
|
+
allErrors.push(...errors);
|
|
1049
|
+
} else if (configs) {
|
|
1050
|
+
allConfigs = {
|
|
1051
|
+
...allConfigs,
|
|
1052
|
+
...configs
|
|
1053
|
+
};
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
if (allErrors.length > 0) {
|
|
1057
|
+
const formattedErrors = allErrors.map((err) => `${err.path ? err.path + ": " : ""}${err.message}`).join("\n");
|
|
1058
|
+
logForDebugging(`--mcp-config validation failed (${allErrors.length} errors): ${formattedErrors}`, {
|
|
1059
|
+
level: "error"
|
|
1060
|
+
});
|
|
1061
|
+
process.stderr.write(`Error: Invalid MCP configuration:
|
|
1062
|
+
${formattedErrors}
|
|
1063
|
+
`);
|
|
1064
|
+
process.exit(1);
|
|
1065
|
+
}
|
|
1066
|
+
if (Object.keys(allConfigs).length > 0) {
|
|
1067
|
+
const nonSdkConfigNames = Object.entries(allConfigs).filter(([, config]) => config.type !== "sdk").map(([name]) => name);
|
|
1068
|
+
let reservedNameError = null;
|
|
1069
|
+
if (nonSdkConfigNames.some(ismemCodeInChromeMCPServer)) {
|
|
1070
|
+
reservedNameError = `Invalid MCP configuration: "${XCODE_IN_CHROME_MCP_SERVER_NAME}" is a reserved MCP name.`;
|
|
1071
|
+
} else if (feature("CHICAGO_MCP")) {
|
|
1072
|
+
const {
|
|
1073
|
+
isComputerUseMCPServer,
|
|
1074
|
+
COMPUTER_USE_MCP_SERVER_NAME
|
|
1075
|
+
} = await import("src/utils/computerUse/common.js");
|
|
1076
|
+
if (nonSdkConfigNames.some(isComputerUseMCPServer)) {
|
|
1077
|
+
reservedNameError = `Invalid MCP configuration: "${COMPUTER_USE_MCP_SERVER_NAME}" is a reserved MCP name.`;
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
if (reservedNameError) {
|
|
1081
|
+
process.stderr.write(`Error: ${reservedNameError}
|
|
1082
|
+
`);
|
|
1083
|
+
process.exit(1);
|
|
1084
|
+
}
|
|
1085
|
+
const scopedConfigs = mapValues(allConfigs, (config) => ({
|
|
1086
|
+
...config,
|
|
1087
|
+
scope: "dynamic"
|
|
1088
|
+
}));
|
|
1089
|
+
const {
|
|
1090
|
+
allowed,
|
|
1091
|
+
blocked
|
|
1092
|
+
} = filterMcpServersByPolicy(scopedConfigs);
|
|
1093
|
+
if (blocked.length > 0) {
|
|
1094
|
+
process.stderr.write(`Warning: MCP ${plural(blocked.length, "server")} blocked by enterprise policy: ${blocked.join(", ")}
|
|
1095
|
+
`);
|
|
1096
|
+
}
|
|
1097
|
+
dynamicMcpConfig = {
|
|
1098
|
+
...dynamicMcpConfig,
|
|
1099
|
+
...allowed
|
|
1100
|
+
};
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
const chromeOpts = options;
|
|
1104
|
+
setChromeFlagOverride(chromeOpts.chrome);
|
|
1105
|
+
const upstreamFeaturesEnabled = isUpstreamFeatureEnabled();
|
|
1106
|
+
const enablememCodeInChrome = upstreamFeaturesEnabled && shouldEnablememCodeInChrome(chromeOpts.chrome) && isClaudeAISubscriber();
|
|
1107
|
+
const autoEnablememCodeInChrome = upstreamFeaturesEnabled && !enablememCodeInChrome && shouldAutoEnablememCodeInChrome();
|
|
1108
|
+
if (enablememCodeInChrome) {
|
|
1109
|
+
const platform = getPlatform();
|
|
1110
|
+
try {
|
|
1111
|
+
logEvent("memcode_in_chrome_setup", {
|
|
1112
|
+
platform
|
|
1113
|
+
});
|
|
1114
|
+
const {
|
|
1115
|
+
mcpConfig: chromeMcpConfig,
|
|
1116
|
+
allowedTools: chromeMcpTools,
|
|
1117
|
+
systemPrompt: chromeSystemPrompt
|
|
1118
|
+
} = setupmemCodeInChrome();
|
|
1119
|
+
dynamicMcpConfig = {
|
|
1120
|
+
...dynamicMcpConfig,
|
|
1121
|
+
...chromeMcpConfig
|
|
1122
|
+
};
|
|
1123
|
+
allowedTools.push(...chromeMcpTools);
|
|
1124
|
+
if (chromeSystemPrompt) {
|
|
1125
|
+
appendSystemPrompt = appendSystemPrompt ? `${chromeSystemPrompt}
|
|
1126
|
+
|
|
1127
|
+
${appendSystemPrompt}` : chromeSystemPrompt;
|
|
1128
|
+
}
|
|
1129
|
+
} catch (error) {
|
|
1130
|
+
logEvent("memcode_in_chrome_setup_failed", {
|
|
1131
|
+
platform
|
|
1132
|
+
});
|
|
1133
|
+
logForDebugging(`[memCode in Chrome] Error: ${error}`);
|
|
1134
|
+
logError(error);
|
|
1135
|
+
console.error(`Error: Failed to run with memCode in Chrome.`);
|
|
1136
|
+
process.exit(1);
|
|
1137
|
+
}
|
|
1138
|
+
} else if (autoEnablememCodeInChrome) {
|
|
1139
|
+
try {
|
|
1140
|
+
const {
|
|
1141
|
+
mcpConfig: chromeMcpConfig
|
|
1142
|
+
} = setupmemCodeInChrome();
|
|
1143
|
+
dynamicMcpConfig = {
|
|
1144
|
+
...dynamicMcpConfig,
|
|
1145
|
+
...chromeMcpConfig
|
|
1146
|
+
};
|
|
1147
|
+
const hint = feature("WEB_BROWSER_TOOL") && typeof Bun !== "undefined" && "WebView" in Bun ? XCODE_IN_CHROME_SKILL_HINT_WITH_WEBBROWSER : XCODE_IN_CHROME_SKILL_HINT;
|
|
1148
|
+
appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
|
|
1149
|
+
|
|
1150
|
+
${hint}` : hint;
|
|
1151
|
+
} catch (error) {
|
|
1152
|
+
logForDebugging(`[memCode in Chrome] Error (auto-enable): ${error}`);
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
const strictMcpConfig = options.strictMcpConfig || false;
|
|
1156
|
+
if (doesEnterpriseMcpConfigExist()) {
|
|
1157
|
+
if (strictMcpConfig) {
|
|
1158
|
+
process.stderr.write(chalk.red("You cannot use --strict-mcp-config when an enterprise MCP config is present"));
|
|
1159
|
+
process.exit(1);
|
|
1160
|
+
}
|
|
1161
|
+
if (dynamicMcpConfig && !areMcpConfigsAllowedWithEnterpriseMcpConfig(dynamicMcpConfig)) {
|
|
1162
|
+
process.stderr.write(chalk.red("You cannot dynamically configure MCP servers when an enterprise MCP config is present"));
|
|
1163
|
+
process.exit(1);
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
if (feature("CHICAGO_MCP") && getPlatform() === "macos" && !getIsNonInteractiveSession()) {
|
|
1167
|
+
try {
|
|
1168
|
+
const {
|
|
1169
|
+
getChicagoEnabled
|
|
1170
|
+
} = await import("src/utils/computerUse/gates.js");
|
|
1171
|
+
if (getChicagoEnabled()) {
|
|
1172
|
+
const {
|
|
1173
|
+
setupComputerUseMCP
|
|
1174
|
+
} = await import("src/utils/computerUse/setup.js");
|
|
1175
|
+
const {
|
|
1176
|
+
mcpConfig: mcpConfig2,
|
|
1177
|
+
allowedTools: cuTools
|
|
1178
|
+
} = setupComputerUseMCP();
|
|
1179
|
+
dynamicMcpConfig = {
|
|
1180
|
+
...dynamicMcpConfig,
|
|
1181
|
+
...mcpConfig2
|
|
1182
|
+
};
|
|
1183
|
+
allowedTools.push(...cuTools);
|
|
1184
|
+
}
|
|
1185
|
+
} catch (error) {
|
|
1186
|
+
logForDebugging(`[Computer Use MCP] Setup failed: ${errorMessage(error)}`);
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
setAdditionalDirectoriesForClaudeMd(addDir);
|
|
1190
|
+
let devChannels;
|
|
1191
|
+
if (feature("KAIROS") || feature("KAIROS_CHANNELS")) {
|
|
1192
|
+
const parseChannelEntries = (raw, flag) => {
|
|
1193
|
+
const entries = [];
|
|
1194
|
+
const bad = [];
|
|
1195
|
+
for (const c of raw) {
|
|
1196
|
+
if (c.startsWith("plugin:")) {
|
|
1197
|
+
const rest = c.slice(7);
|
|
1198
|
+
const at = rest.indexOf("@");
|
|
1199
|
+
if (at <= 0 || at === rest.length - 1) {
|
|
1200
|
+
bad.push(c);
|
|
1201
|
+
} else {
|
|
1202
|
+
entries.push({
|
|
1203
|
+
kind: "plugin",
|
|
1204
|
+
name: rest.slice(0, at),
|
|
1205
|
+
marketplace: rest.slice(at + 1)
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
} else if (c.startsWith("server:") && c.length > 7) {
|
|
1209
|
+
entries.push({
|
|
1210
|
+
kind: "server",
|
|
1211
|
+
name: c.slice(7)
|
|
1212
|
+
});
|
|
1213
|
+
} else {
|
|
1214
|
+
bad.push(c);
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
if (bad.length > 0) {
|
|
1218
|
+
process.stderr.write(chalk.red(`${flag} entries must be tagged: ${bad.join(", ")}
|
|
1219
|
+
plugin:<name>@<marketplace> \u2014 plugin-provided channel (allowlist enforced)
|
|
1220
|
+
server:<name> \u2014 manually configured MCP server
|
|
1221
|
+
`));
|
|
1222
|
+
process.exit(1);
|
|
1223
|
+
}
|
|
1224
|
+
return entries;
|
|
1225
|
+
};
|
|
1226
|
+
const channelOpts = options;
|
|
1227
|
+
const rawChannels = channelOpts.channels;
|
|
1228
|
+
const rawDev = channelOpts.dangerouslyLoadDevelopmentChannels;
|
|
1229
|
+
let channelEntries = [];
|
|
1230
|
+
if (rawChannels && rawChannels.length > 0) {
|
|
1231
|
+
channelEntries = parseChannelEntries(rawChannels, "--channels");
|
|
1232
|
+
setAllowedChannels(channelEntries);
|
|
1233
|
+
}
|
|
1234
|
+
if (!isNonInteractiveSession) {
|
|
1235
|
+
if (rawDev && rawDev.length > 0) {
|
|
1236
|
+
devChannels = parseChannelEntries(rawDev, "--dangerously-load-development-channels");
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
if (channelEntries.length > 0 || (devChannels?.length ?? 0) > 0) {
|
|
1240
|
+
const joinPluginIds = (entries) => {
|
|
1241
|
+
const ids = entries.flatMap((e) => e.kind === "plugin" ? [`${e.name}@${e.marketplace}`] : []);
|
|
1242
|
+
return ids.length > 0 ? ids.sort().join(",") : void 0;
|
|
1243
|
+
};
|
|
1244
|
+
logEvent("tengu_mcp_channel_flags", {
|
|
1245
|
+
channels_count: channelEntries.length,
|
|
1246
|
+
dev_count: devChannels?.length ?? 0,
|
|
1247
|
+
plugins: joinPluginIds(channelEntries),
|
|
1248
|
+
dev_plugins: joinPluginIds(devChannels ?? [])
|
|
1249
|
+
});
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
if (isNonInteractiveSession) {
|
|
1253
|
+
applyConfigEnvironmentVariables();
|
|
1254
|
+
}
|
|
1255
|
+
if ((feature("KAIROS") || feature("KAIROS_BRIEF")) && baseTools.length > 0) {
|
|
1256
|
+
const {
|
|
1257
|
+
BRIEF_TOOL_NAME,
|
|
1258
|
+
LEGACY_BRIEF_TOOL_NAME
|
|
1259
|
+
} = require("./tools/BriefTool/prompt.js");
|
|
1260
|
+
const {
|
|
1261
|
+
isBriefEntitled
|
|
1262
|
+
} = require("./tools/BriefTool/BriefTool.js");
|
|
1263
|
+
const parsed = parseToolListFromCLI(baseTools);
|
|
1264
|
+
if ((parsed.includes(BRIEF_TOOL_NAME) || parsed.includes(LEGACY_BRIEF_TOOL_NAME)) && isBriefEntitled()) {
|
|
1265
|
+
setUserMsgOptIn(true);
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
const initResult = await initializeToolPermissionContext({
|
|
1269
|
+
allowedToolsCli: allowedTools,
|
|
1270
|
+
disallowedToolsCli: disallowedTools,
|
|
1271
|
+
baseToolsCli: baseTools,
|
|
1272
|
+
permissionMode,
|
|
1273
|
+
allowDangerouslySkipPermissions,
|
|
1274
|
+
addDirs: addDir
|
|
1275
|
+
});
|
|
1276
|
+
let toolPermissionContext = initResult.toolPermissionContext;
|
|
1277
|
+
const {
|
|
1278
|
+
warnings,
|
|
1279
|
+
dangerousPermissions,
|
|
1280
|
+
overlyBroadBashPermissions
|
|
1281
|
+
} = initResult;
|
|
1282
|
+
if (false) {
|
|
1283
|
+
for (const permission of overlyBroadBashPermissions) {
|
|
1284
|
+
logForDebugging(`Ignoring overly broad shell permission ${permission.ruleDisplay} from ${permission.sourceDisplay}`);
|
|
1285
|
+
}
|
|
1286
|
+
toolPermissionContext = removeDangerousPermissions(toolPermissionContext, overlyBroadBashPermissions);
|
|
1287
|
+
}
|
|
1288
|
+
if (feature("TRANSCRIPT_CLASSIFIER") && dangerousPermissions.length > 0) {
|
|
1289
|
+
toolPermissionContext = stripDangerousPermissionsForAutoMode(toolPermissionContext);
|
|
1290
|
+
}
|
|
1291
|
+
warnings.forEach((warning) => {
|
|
1292
|
+
console.error(warning);
|
|
1293
|
+
});
|
|
1294
|
+
void assertMinVersion();
|
|
1295
|
+
const claudeaiConfigPromise = isNonInteractiveSession && !strictMcpConfig && !doesEnterpriseMcpConfigExist() && // --bare / SIMPLE: skip claude.ai proxy servers (datadog, Gmail,
|
|
1296
|
+
// Slack, BigQuery, PubMed — 6-14s each to connect). Scripted calls
|
|
1297
|
+
// that need MCP pass --mcp-config explicitly.
|
|
1298
|
+
!isBareMode() ? fetchmemCodeProxyMcpConfigsIfEligible().then((configs) => {
|
|
1299
|
+
const {
|
|
1300
|
+
allowed,
|
|
1301
|
+
blocked
|
|
1302
|
+
} = filterMcpServersByPolicy(configs);
|
|
1303
|
+
if (blocked.length > 0) {
|
|
1304
|
+
process.stderr.write(`Warning: memCode MCP ${plural(blocked.length, "server")} blocked by enterprise policy: ${blocked.join(", ")}
|
|
1305
|
+
`);
|
|
1306
|
+
}
|
|
1307
|
+
return allowed;
|
|
1308
|
+
}) : Promise.resolve({});
|
|
1309
|
+
logForDebugging("[STARTUP] Loading MCP configs...");
|
|
1310
|
+
const mcpConfigStart = Date.now();
|
|
1311
|
+
let mcpConfigResolvedMs;
|
|
1312
|
+
const mcpConfigPromise = (strictMcpConfig || isBareMode() ? Promise.resolve({
|
|
1313
|
+
servers: {}
|
|
1314
|
+
}) : getClaudeCodeMcpConfigs(dynamicMcpConfig)).then((result) => {
|
|
1315
|
+
mcpConfigResolvedMs = Date.now() - mcpConfigStart;
|
|
1316
|
+
return result;
|
|
1317
|
+
});
|
|
1318
|
+
if (inputFormat && inputFormat !== "text" && inputFormat !== "stream-json") {
|
|
1319
|
+
console.error(`Error: Invalid input format "${inputFormat}".`);
|
|
1320
|
+
process.exit(1);
|
|
1321
|
+
}
|
|
1322
|
+
if (inputFormat === "stream-json" && outputFormat !== "stream-json") {
|
|
1323
|
+
console.error(`Error: --input-format=stream-json requires output-format=stream-json.`);
|
|
1324
|
+
process.exit(1);
|
|
1325
|
+
}
|
|
1326
|
+
if (sdkUrl) {
|
|
1327
|
+
if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
|
|
1328
|
+
console.error(`Error: --sdk-url requires both --input-format=stream-json and --output-format=stream-json.`);
|
|
1329
|
+
process.exit(1);
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
if (options.replayUserMessages) {
|
|
1333
|
+
if (inputFormat !== "stream-json" || outputFormat !== "stream-json") {
|
|
1334
|
+
console.error(`Error: --replay-user-messages requires both --input-format=stream-json and --output-format=stream-json.`);
|
|
1335
|
+
process.exit(1);
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
if (effectiveIncludePartialMessages) {
|
|
1339
|
+
if (!isNonInteractiveSession || outputFormat !== "stream-json") {
|
|
1340
|
+
writeToStderr(`Error: --include-partial-messages requires --print and --output-format=stream-json.`);
|
|
1341
|
+
process.exit(1);
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
if (options.sessionPersistence === false && !isNonInteractiveSession) {
|
|
1345
|
+
writeToStderr(`Error: --no-session-persistence can only be used with --print mode.`);
|
|
1346
|
+
process.exit(1);
|
|
1347
|
+
}
|
|
1348
|
+
const effectivePrompt = prompt || "";
|
|
1349
|
+
logForDebugging("[STARTUP] Resolving input prompt, stdinTTY=" + process.stdin.isTTY + ", stdoutTTY=" + process.stdout.isTTY);
|
|
1350
|
+
let inputPrompt = await getInputPrompt(effectivePrompt, inputFormat ?? "text");
|
|
1351
|
+
logForDebugging("[STARTUP] Input prompt resolved");
|
|
1352
|
+
profileCheckpoint("action_after_input_prompt");
|
|
1353
|
+
maybeActivateProactive(options);
|
|
1354
|
+
logForDebugging("[STARTUP] Loading built-in tools...");
|
|
1355
|
+
let tools = getTools(toolPermissionContext);
|
|
1356
|
+
logForDebugging("[STARTUP] Built-in tools loaded: " + tools.length);
|
|
1357
|
+
if (feature("COORDINATOR_MODE") && isEnvTruthy(process.env.XCODE_COORDINATOR_MODE)) {
|
|
1358
|
+
const {
|
|
1359
|
+
applyCoordinatorToolFilter
|
|
1360
|
+
} = await import("./utils/toolPool.js");
|
|
1361
|
+
tools = applyCoordinatorToolFilter(tools);
|
|
1362
|
+
}
|
|
1363
|
+
profileCheckpoint("action_tools_loaded");
|
|
1364
|
+
let jsonSchema;
|
|
1365
|
+
if (isSyntheticOutputToolEnabled({
|
|
1366
|
+
isNonInteractiveSession
|
|
1367
|
+
}) && options.jsonSchema) {
|
|
1368
|
+
jsonSchema = jsonParse(options.jsonSchema);
|
|
1369
|
+
}
|
|
1370
|
+
if (jsonSchema) {
|
|
1371
|
+
const syntheticOutputResult = createSyntheticOutputTool(jsonSchema);
|
|
1372
|
+
if ("tool" in syntheticOutputResult) {
|
|
1373
|
+
tools = [...tools, syntheticOutputResult.tool];
|
|
1374
|
+
logEvent("tengu_structured_output_enabled", {
|
|
1375
|
+
schema_property_count: Object.keys(jsonSchema.properties || {}).length,
|
|
1376
|
+
has_required_fields: Boolean(jsonSchema.required)
|
|
1377
|
+
});
|
|
1378
|
+
} else {
|
|
1379
|
+
logEvent("tengu_structured_output_failure", {
|
|
1380
|
+
error: "Invalid JSON schema"
|
|
1381
|
+
});
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
profileCheckpoint("action_before_setup");
|
|
1385
|
+
logForDebugging("[STARTUP] Running setup()...");
|
|
1386
|
+
const setupStart = Date.now();
|
|
1387
|
+
const {
|
|
1388
|
+
setup
|
|
1389
|
+
} = await import("./setup.js");
|
|
1390
|
+
const messagingSocketPath = feature("UDS_INBOX") ? options.messagingSocketPath : void 0;
|
|
1391
|
+
const preSetupCwd = getCwd();
|
|
1392
|
+
if (process.env.XCODE_ENTRYPOINT !== "local-agent") {
|
|
1393
|
+
initBuiltinPlugins();
|
|
1394
|
+
initBundledSkills();
|
|
1395
|
+
}
|
|
1396
|
+
logForDebugging("[STARTUP] Starting setup() promise...");
|
|
1397
|
+
const setupPromise = setup(preSetupCwd, permissionMode, allowDangerouslySkipPermissions, worktreeEnabled, worktreeName, tmuxEnabled, sessionId ? validateUuid(sessionId) : void 0, worktreePRNumber, messagingSocketPath);
|
|
1398
|
+
const commandsPromise = worktreeEnabled ? null : getCommands(preSetupCwd);
|
|
1399
|
+
const agentDefsPromise = worktreeEnabled ? null : getAgentDefinitionsWithOverrides(preSetupCwd);
|
|
1400
|
+
commandsPromise?.catch(() => {
|
|
1401
|
+
});
|
|
1402
|
+
agentDefsPromise?.catch(() => {
|
|
1403
|
+
});
|
|
1404
|
+
await setupPromise;
|
|
1405
|
+
logForDebugging(`[STARTUP] setup() completed in ${Date.now() - setupStart}ms`);
|
|
1406
|
+
profileCheckpoint("action_after_setup");
|
|
1407
|
+
let effectiveReplayUserMessages = !!options.replayUserMessages;
|
|
1408
|
+
if (feature("UDS_INBOX")) {
|
|
1409
|
+
if (!effectiveReplayUserMessages && outputFormat === "stream-json") {
|
|
1410
|
+
effectiveReplayUserMessages = !!options.messagingSocketPath;
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
if (getIsNonInteractiveSession()) {
|
|
1414
|
+
applyConfigEnvironmentVariables();
|
|
1415
|
+
void getSystemContext();
|
|
1416
|
+
void getUserContext();
|
|
1417
|
+
void ensureModelStringsInitialized();
|
|
1418
|
+
}
|
|
1419
|
+
const sessionNameArg = options.name?.trim();
|
|
1420
|
+
if (sessionNameArg) {
|
|
1421
|
+
cacheSessionTitle(sessionNameArg);
|
|
1422
|
+
}
|
|
1423
|
+
const explicitModel = options.model || process.env.XCODE_MODEL || process.env.ANTHROPIC_MODEL;
|
|
1424
|
+
if (false) {
|
|
1425
|
+
await initializeGrowthBook();
|
|
1426
|
+
}
|
|
1427
|
+
const userSpecifiedModel = options.model === "default" ? getDefaultMainLoopModel() : options.model;
|
|
1428
|
+
const userSpecifiedFallbackModel = fallbackModel === "default" ? getDefaultMainLoopModel() : fallbackModel;
|
|
1429
|
+
const currentCwd = worktreeEnabled ? getCwd() : preSetupCwd;
|
|
1430
|
+
logForDebugging("[STARTUP] Loading commands and agents...");
|
|
1431
|
+
const commandsStart = Date.now();
|
|
1432
|
+
const [commands, agentDefinitionsResult] = await Promise.all([commandsPromise ?? getCommands(currentCwd), agentDefsPromise ?? getAgentDefinitionsWithOverrides(currentCwd)]);
|
|
1433
|
+
logForDebugging(`[STARTUP] Commands and agents loaded in ${Date.now() - commandsStart}ms`);
|
|
1434
|
+
profileCheckpoint("action_commands_loaded");
|
|
1435
|
+
let cliAgents = [];
|
|
1436
|
+
if (agentsJson) {
|
|
1437
|
+
try {
|
|
1438
|
+
const parsedAgents = safeParseJSON(agentsJson);
|
|
1439
|
+
if (parsedAgents) {
|
|
1440
|
+
cliAgents = parseAgentsFromJson(parsedAgents, "flagSettings");
|
|
1441
|
+
}
|
|
1442
|
+
} catch (error) {
|
|
1443
|
+
logError(error);
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
const allAgents = [...agentDefinitionsResult.allAgents, ...cliAgents];
|
|
1447
|
+
const agentDefinitions = {
|
|
1448
|
+
...agentDefinitionsResult,
|
|
1449
|
+
allAgents,
|
|
1450
|
+
activeAgents: getActiveAgentsFromList(allAgents)
|
|
1451
|
+
};
|
|
1452
|
+
const agentSetting = agentCli ?? getInitialSettings().agent;
|
|
1453
|
+
let mainThreadAgentDefinition;
|
|
1454
|
+
if (agentSetting) {
|
|
1455
|
+
mainThreadAgentDefinition = agentDefinitions.activeAgents.find((agent) => agent.agentType === agentSetting);
|
|
1456
|
+
if (!mainThreadAgentDefinition) {
|
|
1457
|
+
logForDebugging(`Warning: agent "${agentSetting}" not found. Available agents: ${agentDefinitions.activeAgents.map((a) => a.agentType).join(", ")}. Using default behavior.`);
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
setMainThreadAgentType(mainThreadAgentDefinition?.agentType);
|
|
1461
|
+
if (mainThreadAgentDefinition) {
|
|
1462
|
+
logEvent("tengu_agent_flag", {
|
|
1463
|
+
agentType: isBuiltInAgent(mainThreadAgentDefinition) ? mainThreadAgentDefinition.agentType : "custom",
|
|
1464
|
+
...agentCli && {
|
|
1465
|
+
source: "cli"
|
|
1466
|
+
}
|
|
1467
|
+
});
|
|
1468
|
+
}
|
|
1469
|
+
if (mainThreadAgentDefinition?.agentType) {
|
|
1470
|
+
saveAgentSetting(mainThreadAgentDefinition.agentType);
|
|
1471
|
+
}
|
|
1472
|
+
if (isNonInteractiveSession && mainThreadAgentDefinition && !systemPrompt && !isBuiltInAgent(mainThreadAgentDefinition)) {
|
|
1473
|
+
const agentSystemPrompt = mainThreadAgentDefinition.getSystemPrompt();
|
|
1474
|
+
if (agentSystemPrompt) {
|
|
1475
|
+
systemPrompt = agentSystemPrompt;
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
if (mainThreadAgentDefinition?.initialPrompt) {
|
|
1479
|
+
if (typeof inputPrompt === "string") {
|
|
1480
|
+
inputPrompt = inputPrompt ? `${mainThreadAgentDefinition.initialPrompt}
|
|
1481
|
+
|
|
1482
|
+
${inputPrompt}` : mainThreadAgentDefinition.initialPrompt;
|
|
1483
|
+
} else if (!inputPrompt) {
|
|
1484
|
+
inputPrompt = mainThreadAgentDefinition.initialPrompt;
|
|
1485
|
+
}
|
|
1486
|
+
}
|
|
1487
|
+
let effectiveModel = userSpecifiedModel;
|
|
1488
|
+
if (!effectiveModel && mainThreadAgentDefinition?.model && mainThreadAgentDefinition.model !== "inherit") {
|
|
1489
|
+
effectiveModel = parseUserSpecifiedModel(mainThreadAgentDefinition.model);
|
|
1490
|
+
}
|
|
1491
|
+
setMainLoopModelOverride(effectiveModel);
|
|
1492
|
+
setInitialMainLoopModel(getUserSpecifiedModelSetting() || null);
|
|
1493
|
+
const initialMainLoopModel = getInitialMainLoopModel();
|
|
1494
|
+
const resolvedInitialModel = parseUserSpecifiedModel(initialMainLoopModel ?? getDefaultMainLoopModel());
|
|
1495
|
+
let advisorModel;
|
|
1496
|
+
if (isAdvisorEnabled()) {
|
|
1497
|
+
const advisorOption = canUserConfigureAdvisor() ? options.advisor : void 0;
|
|
1498
|
+
if (advisorOption) {
|
|
1499
|
+
logForDebugging(`[AdvisorTool] --advisor ${advisorOption}`);
|
|
1500
|
+
if (!modelSupportsAdvisor(resolvedInitialModel)) {
|
|
1501
|
+
process.stderr.write(chalk.red(`Error: The model "${resolvedInitialModel}" does not support the advisor tool.
|
|
1502
|
+
`));
|
|
1503
|
+
process.exit(1);
|
|
1504
|
+
}
|
|
1505
|
+
const normalizedAdvisorModel = normalizeModelStringForAPI(parseUserSpecifiedModel(advisorOption));
|
|
1506
|
+
if (!isValidAdvisorModel(normalizedAdvisorModel)) {
|
|
1507
|
+
process.stderr.write(chalk.red(`Error: The model "${advisorOption}" cannot be used as an advisor.
|
|
1508
|
+
`));
|
|
1509
|
+
process.exit(1);
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
advisorModel = canUserConfigureAdvisor() ? advisorOption ?? getInitialAdvisorSetting() : advisorOption;
|
|
1513
|
+
if (advisorModel) {
|
|
1514
|
+
logForDebugging(`[AdvisorTool] Advisor model: ${advisorModel}`);
|
|
1515
|
+
}
|
|
1516
|
+
}
|
|
1517
|
+
if (isAgentSwarmsEnabled() && storedTeammateOpts?.agentId && storedTeammateOpts?.agentName && storedTeammateOpts?.teamName && storedTeammateOpts?.agentType) {
|
|
1518
|
+
const customAgent = agentDefinitions.activeAgents.find((a) => a.agentType === storedTeammateOpts.agentType);
|
|
1519
|
+
if (customAgent) {
|
|
1520
|
+
let customPrompt;
|
|
1521
|
+
if (customAgent.source === "built-in") {
|
|
1522
|
+
logForDebugging(`[teammate] Built-in agent ${storedTeammateOpts.agentType} - skipping custom prompt (not supported)`);
|
|
1523
|
+
} else {
|
|
1524
|
+
customPrompt = customAgent.getSystemPrompt();
|
|
1525
|
+
}
|
|
1526
|
+
if (customAgent.memory) {
|
|
1527
|
+
logEvent("tengu_agent_memory_loaded", {
|
|
1528
|
+
...false,
|
|
1529
|
+
scope: customAgent.memory,
|
|
1530
|
+
source: "teammate"
|
|
1531
|
+
});
|
|
1532
|
+
}
|
|
1533
|
+
if (customPrompt) {
|
|
1534
|
+
const customInstructions = `
|
|
1535
|
+
# Custom Agent Instructions
|
|
1536
|
+
${customPrompt}`;
|
|
1537
|
+
appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
|
|
1538
|
+
|
|
1539
|
+
${customInstructions}` : customInstructions;
|
|
1540
|
+
}
|
|
1541
|
+
} else {
|
|
1542
|
+
logForDebugging(`[teammate] Custom agent ${storedTeammateOpts.agentType} not found in available agents`);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
maybeActivateBrief(options);
|
|
1546
|
+
if ((feature("KAIROS") || feature("KAIROS_BRIEF")) && !getIsNonInteractiveSession() && !getUserMsgOptIn() && getInitialSettings().defaultView === "chat") {
|
|
1547
|
+
const {
|
|
1548
|
+
isBriefEntitled
|
|
1549
|
+
} = require("./tools/BriefTool/BriefTool.js");
|
|
1550
|
+
if (isBriefEntitled()) {
|
|
1551
|
+
setUserMsgOptIn(true);
|
|
1552
|
+
}
|
|
1553
|
+
}
|
|
1554
|
+
if ((feature("PROACTIVE") || feature("KAIROS")) && (options.proactive || isEnvTruthy(process.env.XCODE_PROACTIVE)) && !coordinatorModeModule?.isCoordinatorMode()) {
|
|
1555
|
+
const briefVisibility = feature("KAIROS") || feature("KAIROS_BRIEF") ? require("./tools/BriefTool/BriefTool.js").isBriefEnabled() ? "Call SendUserMessage at checkpoints to mark where things stand." : "The user will see any text you output." : "The user will see any text you output.";
|
|
1556
|
+
const proactivePrompt = `
|
|
1557
|
+
# Proactive Mode
|
|
1558
|
+
|
|
1559
|
+
You are in proactive mode. Take initiative \u2014 explore, act, and make progress without waiting for instructions.
|
|
1560
|
+
|
|
1561
|
+
Start by briefly greeting the user.
|
|
1562
|
+
|
|
1563
|
+
You will receive periodic <tick> prompts. These are check-ins. Do whatever seems most useful, or call Sleep if there's nothing to do. ${briefVisibility}`;
|
|
1564
|
+
appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
|
|
1565
|
+
|
|
1566
|
+
${proactivePrompt}` : proactivePrompt;
|
|
1567
|
+
}
|
|
1568
|
+
if (feature("KAIROS") && kairosEnabled && assistantModule) {
|
|
1569
|
+
const assistantAddendum = assistantModule.getAssistantSystemPromptAddendum();
|
|
1570
|
+
appendSystemPrompt = appendSystemPrompt ? `${appendSystemPrompt}
|
|
1571
|
+
|
|
1572
|
+
${assistantAddendum}` : assistantAddendum;
|
|
1573
|
+
}
|
|
1574
|
+
let root;
|
|
1575
|
+
let getFpsMetrics;
|
|
1576
|
+
let stats;
|
|
1577
|
+
if (!isNonInteractiveSession) {
|
|
1578
|
+
const ctx = getRenderContext(false);
|
|
1579
|
+
getFpsMetrics = ctx.getFpsMetrics;
|
|
1580
|
+
stats = ctx.stats;
|
|
1581
|
+
if (false) {
|
|
1582
|
+
installAsciicastRecorder();
|
|
1583
|
+
}
|
|
1584
|
+
const {
|
|
1585
|
+
createRoot
|
|
1586
|
+
} = await import("./ink.js");
|
|
1587
|
+
root = await createRoot(ctx.renderOptions);
|
|
1588
|
+
logEvent("tengu_timer", {
|
|
1589
|
+
event: "startup",
|
|
1590
|
+
durationMs: Math.round(process.uptime() * 1e3)
|
|
1591
|
+
});
|
|
1592
|
+
logForDebugging("[STARTUP] Running showSetupScreens()...");
|
|
1593
|
+
const setupScreensStart = Date.now();
|
|
1594
|
+
const onboardingShown = await showSetupScreens(root, permissionMode, allowDangerouslySkipPermissions, commands, enablememCodeInChrome, devChannels);
|
|
1595
|
+
profileCheckpoint("interactive_after_setup_screens");
|
|
1596
|
+
logForDebugging(`[STARTUP] showSetupScreens() completed in ${Date.now() - setupScreensStart}ms`);
|
|
1597
|
+
if (isBridgeModeAvailable() && remoteControlOption !== void 0) {
|
|
1598
|
+
const {
|
|
1599
|
+
getBridgeDisabledReason
|
|
1600
|
+
} = await import("./bridge/bridgeEnabled.js");
|
|
1601
|
+
const disabledReason = await getBridgeDisabledReason();
|
|
1602
|
+
remoteControl = disabledReason === null;
|
|
1603
|
+
if (disabledReason) {
|
|
1604
|
+
process.stderr.write(chalk.yellow(`${disabledReason}
|
|
1605
|
+
--rc flag ignored.
|
|
1606
|
+
`));
|
|
1607
|
+
}
|
|
1608
|
+
}
|
|
1609
|
+
if (feature("AGENT_MEMORY_SNAPSHOT") && mainThreadAgentDefinition && isCustomAgent(mainThreadAgentDefinition) && mainThreadAgentDefinition.memory && mainThreadAgentDefinition.pendingSnapshotUpdate) {
|
|
1610
|
+
const agentDef = mainThreadAgentDefinition;
|
|
1611
|
+
const choice = await launchSnapshotUpdateDialog(root, {
|
|
1612
|
+
agentType: agentDef.agentType,
|
|
1613
|
+
scope: agentDef.memory,
|
|
1614
|
+
snapshotTimestamp: agentDef.pendingSnapshotUpdate.snapshotTimestamp
|
|
1615
|
+
});
|
|
1616
|
+
if (choice === "merge") {
|
|
1617
|
+
const {
|
|
1618
|
+
buildMergePrompt
|
|
1619
|
+
} = await import("./components/agents/SnapshotUpdateDialog.js");
|
|
1620
|
+
const mergePrompt = buildMergePrompt(agentDef.agentType, agentDef.memory);
|
|
1621
|
+
inputPrompt = inputPrompt ? `${mergePrompt}
|
|
1622
|
+
|
|
1623
|
+
${inputPrompt}` : mergePrompt;
|
|
1624
|
+
}
|
|
1625
|
+
agentDef.pendingSnapshotUpdate = void 0;
|
|
1626
|
+
}
|
|
1627
|
+
if (onboardingShown && prompt?.trim().toLowerCase() === "/login") {
|
|
1628
|
+
prompt = "";
|
|
1629
|
+
}
|
|
1630
|
+
if (onboardingShown) {
|
|
1631
|
+
void refreshRemoteManagedSettings();
|
|
1632
|
+
void refreshPolicyLimits();
|
|
1633
|
+
resetUserCache();
|
|
1634
|
+
refreshGrowthBookAfterAuthChange();
|
|
1635
|
+
void import("./bridge/trustedDevice.js").then((m) => {
|
|
1636
|
+
m.clearTrustedDeviceToken();
|
|
1637
|
+
return m.enrollTrustedDevice();
|
|
1638
|
+
});
|
|
1639
|
+
}
|
|
1640
|
+
const orgValidation = await validateForceLoginOrg();
|
|
1641
|
+
if (!orgValidation.valid) {
|
|
1642
|
+
await exitWithError(root, orgValidation.message);
|
|
1643
|
+
}
|
|
1644
|
+
}
|
|
1645
|
+
if (process.exitCode !== void 0) {
|
|
1646
|
+
logForDebugging("Graceful shutdown initiated, skipping further initialization");
|
|
1647
|
+
return;
|
|
1648
|
+
}
|
|
1649
|
+
initializeLspServerManager();
|
|
1650
|
+
if (!isNonInteractiveSession) {
|
|
1651
|
+
const {
|
|
1652
|
+
errors
|
|
1653
|
+
} = getSettingsWithErrors();
|
|
1654
|
+
const nonMcpErrors = errors.filter((e) => !e.mcpErrorMetadata);
|
|
1655
|
+
if (nonMcpErrors.length > 0) {
|
|
1656
|
+
await launchInvalidSettingsDialog(root, {
|
|
1657
|
+
settingsErrors: nonMcpErrors,
|
|
1658
|
+
onExit: () => gracefulShutdownSync(1)
|
|
1659
|
+
});
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
const bgRefreshThrottleMs = getFeatureValue_CACHED_MAY_BE_STALE("tengu_cicada_nap_ms", 0);
|
|
1663
|
+
const lastPrefetched = getGlobalConfig().startupPrefetchedAt ?? 0;
|
|
1664
|
+
const skipStartupPrefetches = isBareMode() || bgRefreshThrottleMs > 0 && Date.now() - lastPrefetched < bgRefreshThrottleMs;
|
|
1665
|
+
if (!skipStartupPrefetches) {
|
|
1666
|
+
const lastPrefetchedInfo = lastPrefetched > 0 ? ` last ran ${Math.round((Date.now() - lastPrefetched) / 1e3)}s ago` : "";
|
|
1667
|
+
logForDebugging(`Starting background startup prefetches${lastPrefetchedInfo}`);
|
|
1668
|
+
checkQuotaStatus().catch((error) => logError(error));
|
|
1669
|
+
void fetchBootstrapData();
|
|
1670
|
+
void prefetchPassesEligibility();
|
|
1671
|
+
if (!getFeatureValue_CACHED_MAY_BE_STALE("tengu_miraculo_the_bard", false)) {
|
|
1672
|
+
void prefetchFastModeStatus();
|
|
1673
|
+
} else {
|
|
1674
|
+
resolveFastModeStatusFromCache();
|
|
1675
|
+
}
|
|
1676
|
+
if (bgRefreshThrottleMs > 0) {
|
|
1677
|
+
saveGlobalConfig((current) => ({
|
|
1678
|
+
...current,
|
|
1679
|
+
startupPrefetchedAt: Date.now()
|
|
1680
|
+
}));
|
|
1681
|
+
}
|
|
1682
|
+
} else {
|
|
1683
|
+
logForDebugging(`Skipping startup prefetches, last ran ${Math.round((Date.now() - lastPrefetched) / 1e3)}s ago`);
|
|
1684
|
+
resolveFastModeStatusFromCache();
|
|
1685
|
+
}
|
|
1686
|
+
if (!isNonInteractiveSession) {
|
|
1687
|
+
void refreshExampleCommands();
|
|
1688
|
+
}
|
|
1689
|
+
const {
|
|
1690
|
+
servers: existingMcpConfigs
|
|
1691
|
+
} = await mcpConfigPromise;
|
|
1692
|
+
logForDebugging(`[STARTUP] MCP configs resolved in ${mcpConfigResolvedMs}ms (awaited at +${Date.now() - mcpConfigStart}ms)`);
|
|
1693
|
+
const allMcpConfigs = {
|
|
1694
|
+
...existingMcpConfigs,
|
|
1695
|
+
...dynamicMcpConfig
|
|
1696
|
+
};
|
|
1697
|
+
const sdkMcpConfigs = {};
|
|
1698
|
+
const regularMcpConfigs = {};
|
|
1699
|
+
for (const [name, config] of Object.entries(allMcpConfigs)) {
|
|
1700
|
+
const typedConfig = config;
|
|
1701
|
+
if (typedConfig.type === "sdk") {
|
|
1702
|
+
sdkMcpConfigs[name] = typedConfig;
|
|
1703
|
+
} else {
|
|
1704
|
+
regularMcpConfigs[name] = typedConfig;
|
|
1705
|
+
}
|
|
1706
|
+
}
|
|
1707
|
+
profileCheckpoint("action_mcp_configs_loaded");
|
|
1708
|
+
const localMcpPromise = isNonInteractiveSession ? Promise.resolve({
|
|
1709
|
+
clients: [],
|
|
1710
|
+
tools: [],
|
|
1711
|
+
commands: []
|
|
1712
|
+
}) : prefetchAllMcpResources(regularMcpConfigs);
|
|
1713
|
+
const claudeaiMcpPromise = isNonInteractiveSession ? Promise.resolve({
|
|
1714
|
+
clients: [],
|
|
1715
|
+
tools: [],
|
|
1716
|
+
commands: []
|
|
1717
|
+
}) : claudeaiConfigPromise.then((configs) => Object.keys(configs).length > 0 ? prefetchAllMcpResources(configs) : {
|
|
1718
|
+
clients: [],
|
|
1719
|
+
tools: [],
|
|
1720
|
+
commands: []
|
|
1721
|
+
});
|
|
1722
|
+
const mcpPromise = Promise.all([localMcpPromise, claudeaiMcpPromise]).then(([local, claudeai]) => ({
|
|
1723
|
+
clients: [...local.clients, ...claudeai.clients],
|
|
1724
|
+
tools: uniqBy([...local.tools, ...claudeai.tools], "name"),
|
|
1725
|
+
commands: uniqBy([...local.commands, ...claudeai.commands], "name")
|
|
1726
|
+
}));
|
|
1727
|
+
const hooksPromise = initOnly || init2 || maintenance || isNonInteractiveSession || options.continue || options.resume ? null : processSessionStartHooks("startup", {
|
|
1728
|
+
agentType: mainThreadAgentDefinition?.agentType,
|
|
1729
|
+
model: resolvedInitialModel
|
|
1730
|
+
});
|
|
1731
|
+
const hookMessages = [];
|
|
1732
|
+
mcpPromise.catch(() => {
|
|
1733
|
+
});
|
|
1734
|
+
const mcpClients = [];
|
|
1735
|
+
const mcpTools = [];
|
|
1736
|
+
const mcpCommands = [];
|
|
1737
|
+
let thinkingEnabled = shouldEnableThinkingByDefault();
|
|
1738
|
+
let thinkingConfig = thinkingEnabled !== false ? {
|
|
1739
|
+
type: "adaptive"
|
|
1740
|
+
} : {
|
|
1741
|
+
type: "disabled"
|
|
1742
|
+
};
|
|
1743
|
+
if (options.thinking === "adaptive" || options.thinking === "enabled") {
|
|
1744
|
+
thinkingEnabled = true;
|
|
1745
|
+
thinkingConfig = {
|
|
1746
|
+
type: "adaptive"
|
|
1747
|
+
};
|
|
1748
|
+
} else if (options.thinking === "disabled") {
|
|
1749
|
+
thinkingEnabled = false;
|
|
1750
|
+
thinkingConfig = {
|
|
1751
|
+
type: "disabled"
|
|
1752
|
+
};
|
|
1753
|
+
} else {
|
|
1754
|
+
const maxThinkingTokens = process.env.MAX_THINKING_TOKENS ? parseInt(process.env.MAX_THINKING_TOKENS, 10) : options.maxThinkingTokens;
|
|
1755
|
+
if (maxThinkingTokens !== void 0) {
|
|
1756
|
+
if (maxThinkingTokens > 0) {
|
|
1757
|
+
thinkingEnabled = true;
|
|
1758
|
+
thinkingConfig = {
|
|
1759
|
+
type: "enabled",
|
|
1760
|
+
budgetTokens: maxThinkingTokens
|
|
1761
|
+
};
|
|
1762
|
+
} else if (maxThinkingTokens === 0) {
|
|
1763
|
+
thinkingEnabled = false;
|
|
1764
|
+
thinkingConfig = {
|
|
1765
|
+
type: "disabled"
|
|
1766
|
+
};
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
logForDiagnosticsNoPII("info", "started", {
|
|
1771
|
+
version: MACRO.VERSION,
|
|
1772
|
+
is_native_binary: isInBundledMode()
|
|
1773
|
+
});
|
|
1774
|
+
registerCleanup(async () => {
|
|
1775
|
+
logForDiagnosticsNoPII("info", "exited");
|
|
1776
|
+
});
|
|
1777
|
+
void logTenguInit({
|
|
1778
|
+
hasInitialPrompt: Boolean(prompt),
|
|
1779
|
+
hasStdin: Boolean(inputPrompt),
|
|
1780
|
+
verbose,
|
|
1781
|
+
debug,
|
|
1782
|
+
debugToStderr,
|
|
1783
|
+
print: print ?? false,
|
|
1784
|
+
outputFormat: outputFormat ?? "text",
|
|
1785
|
+
inputFormat: inputFormat ?? "text",
|
|
1786
|
+
numAllowedTools: allowedTools.length,
|
|
1787
|
+
numDisallowedTools: disallowedTools.length,
|
|
1788
|
+
mcpClientCount: Object.keys(allMcpConfigs).length,
|
|
1789
|
+
worktreeEnabled,
|
|
1790
|
+
skipWebFetchPreflight: getInitialSettings().skipWebFetchPreflight,
|
|
1791
|
+
githubActionInputs: process.env.GITHUB_ACTION_INPUTS,
|
|
1792
|
+
dangerouslySkipPermissionsPassed: dangerouslySkipPermissions ?? false,
|
|
1793
|
+
permissionMode,
|
|
1794
|
+
modeIsBypass: permissionMode === "bypassPermissions",
|
|
1795
|
+
allowDangerouslySkipPermissionsPassed: allowDangerouslySkipPermissions,
|
|
1796
|
+
systemPromptFlag: systemPrompt ? options.systemPromptFile ? "file" : "flag" : void 0,
|
|
1797
|
+
appendSystemPromptFlag: appendSystemPrompt ? options.appendSystemPromptFile ? "file" : "flag" : void 0,
|
|
1798
|
+
thinkingConfig,
|
|
1799
|
+
assistantActivationPath: feature("KAIROS") && kairosEnabled ? assistantModule?.getAssistantActivationPath() : void 0
|
|
1800
|
+
});
|
|
1801
|
+
void logContextMetrics(regularMcpConfigs, toolPermissionContext);
|
|
1802
|
+
void logPermissionContextForAnts(null, "initialization");
|
|
1803
|
+
logManagedSettings();
|
|
1804
|
+
void registerSession().then((registered) => {
|
|
1805
|
+
if (!registered) return;
|
|
1806
|
+
if (sessionNameArg) {
|
|
1807
|
+
void updateSessionName(sessionNameArg);
|
|
1808
|
+
}
|
|
1809
|
+
void countConcurrentSessions().then((count2) => {
|
|
1810
|
+
if (count2 >= 2) {
|
|
1811
|
+
logEvent("tengu_concurrent_sessions", {
|
|
1812
|
+
num_sessions: count2
|
|
1813
|
+
});
|
|
1814
|
+
}
|
|
1815
|
+
});
|
|
1816
|
+
});
|
|
1817
|
+
if (isBareMode()) {
|
|
1818
|
+
} else if (isNonInteractiveSession) {
|
|
1819
|
+
await initializeVersionedPlugins();
|
|
1820
|
+
profileCheckpoint("action_after_plugins_init");
|
|
1821
|
+
void cleanupOrphanedPluginVersionsInBackground().then(() => getGlobExclusionsForPluginCache());
|
|
1822
|
+
} else {
|
|
1823
|
+
void initializeVersionedPlugins().then(async () => {
|
|
1824
|
+
profileCheckpoint("action_after_plugins_init");
|
|
1825
|
+
await cleanupOrphanedPluginVersionsInBackground();
|
|
1826
|
+
void getGlobExclusionsForPluginCache();
|
|
1827
|
+
});
|
|
1828
|
+
}
|
|
1829
|
+
const setupTrigger = initOnly || init2 ? "init" : maintenance ? "maintenance" : null;
|
|
1830
|
+
if (initOnly) {
|
|
1831
|
+
applyConfigEnvironmentVariables();
|
|
1832
|
+
await processSetupHooks("init", {
|
|
1833
|
+
forceSyncExecution: true
|
|
1834
|
+
});
|
|
1835
|
+
await processSessionStartHooks("startup", {
|
|
1836
|
+
forceSyncExecution: true
|
|
1837
|
+
});
|
|
1838
|
+
gracefulShutdownSync(0);
|
|
1839
|
+
return;
|
|
1840
|
+
}
|
|
1841
|
+
if (isNonInteractiveSession) {
|
|
1842
|
+
if (outputFormat === "stream-json" || outputFormat === "json") {
|
|
1843
|
+
setHasFormattedOutput(true);
|
|
1844
|
+
}
|
|
1845
|
+
applyConfigEnvironmentVariables();
|
|
1846
|
+
initializeTelemetryAfterTrust();
|
|
1847
|
+
const sessionStartHooksPromise = options.continue || options.resume || teleport || setupTrigger ? void 0 : processSessionStartHooks("startup");
|
|
1848
|
+
sessionStartHooksPromise?.catch(() => {
|
|
1849
|
+
});
|
|
1850
|
+
const commandsHeadless = disableSlashCommands ? [] : commands.filter((command) => command.type === "prompt" && !command.disableNonInteractive || command.type === "local" && command.supportsNonInteractive);
|
|
1851
|
+
const isLocalHeadlessCommand = isHeadlessLocalSlashCommand(inputPrompt, commandsHeadless);
|
|
1852
|
+
if (!isLocalHeadlessCommand) {
|
|
1853
|
+
logForDebugging("[STARTUP] Print mode validating auth/org...");
|
|
1854
|
+
await validatePrintCredentialsOrExit();
|
|
1855
|
+
profileCheckpoint("before_validateForceLoginOrg");
|
|
1856
|
+
const orgValidation = await validateForceLoginOrg();
|
|
1857
|
+
if (!orgValidation.valid) {
|
|
1858
|
+
process.stderr.write(orgValidation.message + "\n");
|
|
1859
|
+
process.exit(1);
|
|
1860
|
+
}
|
|
1861
|
+
logForDebugging("[STARTUP] Print mode auth/org validation complete");
|
|
1862
|
+
} else {
|
|
1863
|
+
logForDebugging("[STARTUP] Print mode skipping credential validation for local slash command");
|
|
1864
|
+
}
|
|
1865
|
+
const defaultState = getDefaultAppState();
|
|
1866
|
+
const headlessInitialState = {
|
|
1867
|
+
...defaultState,
|
|
1868
|
+
mcp: {
|
|
1869
|
+
...defaultState.mcp,
|
|
1870
|
+
clients: mcpClients,
|
|
1871
|
+
commands: mcpCommands,
|
|
1872
|
+
tools: mcpTools
|
|
1873
|
+
},
|
|
1874
|
+
toolPermissionContext,
|
|
1875
|
+
effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
|
|
1876
|
+
...isFastModeEnabled() && {
|
|
1877
|
+
fastMode: getInitialFastModeSetting(effectiveModel ?? null)
|
|
1878
|
+
},
|
|
1879
|
+
...isAdvisorEnabled() && advisorModel && {
|
|
1880
|
+
advisorModel
|
|
1881
|
+
},
|
|
1882
|
+
// kairosEnabled gates the async fire-and-forget path in
|
|
1883
|
+
// executeForkedSlashCommand (processSlashCommand.tsx:132) and
|
|
1884
|
+
// AgentTool's shouldRunAsync. The REPL initialState sets this at
|
|
1885
|
+
// ~3459; headless was defaulting to false, so the daemon child's
|
|
1886
|
+
// scheduled tasks and Agent-tool calls ran synchronously — N
|
|
1887
|
+
// overdue cron tasks on spawn = N serial subagent turns blocking
|
|
1888
|
+
// user input. Computed at :1620, well before this branch.
|
|
1889
|
+
...feature("KAIROS") ? {
|
|
1890
|
+
kairosEnabled
|
|
1891
|
+
} : {}
|
|
1892
|
+
};
|
|
1893
|
+
const headlessStore = createStore(headlessInitialState, onChangeAppState);
|
|
1894
|
+
if (toolPermissionContext.mode === "bypassPermissions" || allowDangerouslySkipPermissions) {
|
|
1895
|
+
void checkAndDisableBypassPermissions(toolPermissionContext);
|
|
1896
|
+
}
|
|
1897
|
+
if (feature("TRANSCRIPT_CLASSIFIER")) {
|
|
1898
|
+
void verifyAutoModeGateAccess(toolPermissionContext, headlessStore.getState().fastMode).then(({
|
|
1899
|
+
updateContext
|
|
1900
|
+
}) => {
|
|
1901
|
+
headlessStore.setState((prev) => {
|
|
1902
|
+
const nextCtx = updateContext(prev.toolPermissionContext);
|
|
1903
|
+
if (nextCtx === prev.toolPermissionContext) return prev;
|
|
1904
|
+
return {
|
|
1905
|
+
...prev,
|
|
1906
|
+
toolPermissionContext: nextCtx
|
|
1907
|
+
};
|
|
1908
|
+
});
|
|
1909
|
+
});
|
|
1910
|
+
}
|
|
1911
|
+
if (options.sessionPersistence === false) {
|
|
1912
|
+
setSessionPersistenceDisabled(true);
|
|
1913
|
+
}
|
|
1914
|
+
setSdkBetas(filterAllowedSdkBetas(betas));
|
|
1915
|
+
const connectMcpBatch = (configs, label) => {
|
|
1916
|
+
if (Object.keys(configs).length === 0) return Promise.resolve();
|
|
1917
|
+
headlessStore.setState((prev) => ({
|
|
1918
|
+
...prev,
|
|
1919
|
+
mcp: {
|
|
1920
|
+
...prev.mcp,
|
|
1921
|
+
clients: [...prev.mcp.clients, ...Object.entries(configs).map(([name, config]) => ({
|
|
1922
|
+
name,
|
|
1923
|
+
type: "pending",
|
|
1924
|
+
config
|
|
1925
|
+
}))]
|
|
1926
|
+
}
|
|
1927
|
+
}));
|
|
1928
|
+
return getMcpToolsCommandsAndResources(({
|
|
1929
|
+
client,
|
|
1930
|
+
tools: tools2,
|
|
1931
|
+
commands: commands2
|
|
1932
|
+
}) => {
|
|
1933
|
+
headlessStore.setState((prev) => ({
|
|
1934
|
+
...prev,
|
|
1935
|
+
mcp: {
|
|
1936
|
+
...prev.mcp,
|
|
1937
|
+
clients: prev.mcp.clients.some((c) => c.name === client.name) ? prev.mcp.clients.map((c) => c.name === client.name ? client : c) : [...prev.mcp.clients, client],
|
|
1938
|
+
tools: uniqBy([...prev.mcp.tools, ...tools2], "name"),
|
|
1939
|
+
commands: uniqBy([...prev.mcp.commands, ...commands2], "name")
|
|
1940
|
+
}
|
|
1941
|
+
}));
|
|
1942
|
+
}, configs).catch((err) => logForDebugging(`[MCP] ${label} connect error: ${err}`));
|
|
1943
|
+
};
|
|
1944
|
+
profileCheckpoint("before_connectMcp");
|
|
1945
|
+
logForDebugging("[STARTUP] Print mode connecting MCP servers...");
|
|
1946
|
+
await connectMcpBatch(regularMcpConfigs, "regular");
|
|
1947
|
+
profileCheckpoint("after_connectMcp");
|
|
1948
|
+
logForDebugging("[STARTUP] Print mode regular MCP connect complete");
|
|
1949
|
+
const CLAUDE_AI_MCP_TIMEOUT_MS = 5e3;
|
|
1950
|
+
const claudeaiConnect = claudeaiConfigPromise.then((claudeaiConfigs) => {
|
|
1951
|
+
if (Object.keys(claudeaiConfigs).length > 0) {
|
|
1952
|
+
const claudeaiSigs = /* @__PURE__ */ new Set();
|
|
1953
|
+
for (const config of Object.values(claudeaiConfigs)) {
|
|
1954
|
+
const sig = getMcpServerSignature(config);
|
|
1955
|
+
if (sig) claudeaiSigs.add(sig);
|
|
1956
|
+
}
|
|
1957
|
+
const suppressed = /* @__PURE__ */ new Set();
|
|
1958
|
+
for (const [name, config] of Object.entries(regularMcpConfigs)) {
|
|
1959
|
+
if (!name.startsWith("plugin:")) continue;
|
|
1960
|
+
const sig = getMcpServerSignature(config);
|
|
1961
|
+
if (sig && claudeaiSigs.has(sig)) suppressed.add(name);
|
|
1962
|
+
}
|
|
1963
|
+
if (suppressed.size > 0) {
|
|
1964
|
+
logForDebugging(`[MCP] Lazy dedup: suppressing ${suppressed.size} plugin server(s) that duplicate claude.ai connectors: ${[...suppressed].join(", ")}`);
|
|
1965
|
+
for (const c of headlessStore.getState().mcp.clients) {
|
|
1966
|
+
if (!suppressed.has(c.name) || c.type !== "connected") continue;
|
|
1967
|
+
c.client.onclose = void 0;
|
|
1968
|
+
void clearServerCache(c.name, c.config).catch(() => {
|
|
1969
|
+
});
|
|
1970
|
+
}
|
|
1971
|
+
headlessStore.setState((prev) => {
|
|
1972
|
+
let {
|
|
1973
|
+
clients,
|
|
1974
|
+
tools: tools2,
|
|
1975
|
+
commands: commands2,
|
|
1976
|
+
resources
|
|
1977
|
+
} = prev.mcp;
|
|
1978
|
+
clients = clients.filter((c) => !suppressed.has(c.name));
|
|
1979
|
+
tools2 = tools2.filter((t) => !t.mcpInfo || !suppressed.has(t.mcpInfo.serverName));
|
|
1980
|
+
for (const name of suppressed) {
|
|
1981
|
+
commands2 = excludeCommandsByServer(commands2, name);
|
|
1982
|
+
resources = excludeResourcesByServer(resources, name);
|
|
1983
|
+
}
|
|
1984
|
+
return {
|
|
1985
|
+
...prev,
|
|
1986
|
+
mcp: {
|
|
1987
|
+
...prev.mcp,
|
|
1988
|
+
clients,
|
|
1989
|
+
tools: tools2,
|
|
1990
|
+
commands: commands2,
|
|
1991
|
+
resources
|
|
1992
|
+
}
|
|
1993
|
+
};
|
|
1994
|
+
});
|
|
1995
|
+
}
|
|
1996
|
+
}
|
|
1997
|
+
const nonPluginConfigs = pickBy(regularMcpConfigs, (_, n) => !n.startsWith("plugin:"));
|
|
1998
|
+
const {
|
|
1999
|
+
servers: dedupedClaudeAi
|
|
2000
|
+
} = dedupClaudeAiMcpServers(claudeaiConfigs, nonPluginConfigs);
|
|
2001
|
+
return connectMcpBatch(dedupedClaudeAi, "claudeai");
|
|
2002
|
+
});
|
|
2003
|
+
let claudeaiTimer;
|
|
2004
|
+
const claudeaiTimedOut = await Promise.race([claudeaiConnect.then(() => false), new Promise((resolve2) => {
|
|
2005
|
+
claudeaiTimer = setTimeout((r) => r(true), CLAUDE_AI_MCP_TIMEOUT_MS, resolve2);
|
|
2006
|
+
})]);
|
|
2007
|
+
if (claudeaiTimer) clearTimeout(claudeaiTimer);
|
|
2008
|
+
if (claudeaiTimedOut) {
|
|
2009
|
+
logForDebugging(`[MCP] claude.ai connectors not ready after ${CLAUDE_AI_MCP_TIMEOUT_MS}ms \u2014 proceeding; background connection continues`);
|
|
2010
|
+
}
|
|
2011
|
+
profileCheckpoint("after_connectMcp_claudeai");
|
|
2012
|
+
logForDebugging("[STARTUP] Print mode claude.ai MCP connect complete");
|
|
2013
|
+
if (!isBareMode()) {
|
|
2014
|
+
startDeferredPrefetches();
|
|
2015
|
+
void import("./utils/backgroundHousekeeping.js").then((m) => m.startBackgroundHousekeeping());
|
|
2016
|
+
if (false) {
|
|
2017
|
+
void null.then((m) => m.startSdkMemoryMonitor());
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
logSessionTelemetry();
|
|
2021
|
+
profileCheckpoint("before_print_import");
|
|
2022
|
+
const {
|
|
2023
|
+
runHeadless
|
|
2024
|
+
} = await import("src/cli/print.js");
|
|
2025
|
+
profileCheckpoint("after_print_import");
|
|
2026
|
+
logForDebugging("[STARTUP] Print mode starting headless runner");
|
|
2027
|
+
await runHeadless(inputPrompt, () => headlessStore.getState(), headlessStore.setState, commandsHeadless, tools, sdkMcpConfigs, agentDefinitions.activeAgents, {
|
|
2028
|
+
continue: options.continue,
|
|
2029
|
+
resume: options.resume,
|
|
2030
|
+
verbose,
|
|
2031
|
+
outputFormat,
|
|
2032
|
+
jsonSchema,
|
|
2033
|
+
permissionPromptToolName: options.permissionPromptTool,
|
|
2034
|
+
allowedTools,
|
|
2035
|
+
thinkingConfig,
|
|
2036
|
+
maxTurns: options.maxTurns,
|
|
2037
|
+
maxBudgetUsd: options.maxBudgetUsd,
|
|
2038
|
+
taskBudget: options.taskBudget ? {
|
|
2039
|
+
total: options.taskBudget
|
|
2040
|
+
} : void 0,
|
|
2041
|
+
systemPrompt,
|
|
2042
|
+
appendSystemPrompt,
|
|
2043
|
+
userSpecifiedModel: effectiveModel,
|
|
2044
|
+
fallbackModel: userSpecifiedFallbackModel,
|
|
2045
|
+
teleport,
|
|
2046
|
+
sdkUrl,
|
|
2047
|
+
replayUserMessages: effectiveReplayUserMessages,
|
|
2048
|
+
includePartialMessages: effectiveIncludePartialMessages,
|
|
2049
|
+
forkSession: options.forkSession || false,
|
|
2050
|
+
resumeSessionAt: options.resumeSessionAt || void 0,
|
|
2051
|
+
rewindFiles: options.rewindFiles,
|
|
2052
|
+
enableAuthStatus: options.enableAuthStatus,
|
|
2053
|
+
agent: agentCli,
|
|
2054
|
+
workload: options.workload,
|
|
2055
|
+
setupTrigger: setupTrigger ?? void 0,
|
|
2056
|
+
sessionStartHooksPromise
|
|
2057
|
+
});
|
|
2058
|
+
logForDebugging("[STARTUP] Print mode headless runner completed");
|
|
2059
|
+
return;
|
|
2060
|
+
}
|
|
2061
|
+
logEvent("tengu_startup_manual_model_config", {
|
|
2062
|
+
cli_flag: options.model,
|
|
2063
|
+
env_var: process.env.ANTHROPIC_MODEL,
|
|
2064
|
+
settings_file: (getInitialSettings() || {}).model,
|
|
2065
|
+
subscriptionType: getSubscriptionType(),
|
|
2066
|
+
agent: agentSetting
|
|
2067
|
+
});
|
|
2068
|
+
const deprecationWarning = getModelDeprecationWarning(resolvedInitialModel);
|
|
2069
|
+
const initialNotifications = [];
|
|
2070
|
+
if (permissionModeNotification) {
|
|
2071
|
+
initialNotifications.push({
|
|
2072
|
+
key: "permission-mode-notification",
|
|
2073
|
+
text: permissionModeNotification,
|
|
2074
|
+
priority: "high"
|
|
2075
|
+
});
|
|
2076
|
+
}
|
|
2077
|
+
if (deprecationWarning) {
|
|
2078
|
+
initialNotifications.push({
|
|
2079
|
+
key: "model-deprecation-warning",
|
|
2080
|
+
text: deprecationWarning,
|
|
2081
|
+
color: "warning",
|
|
2082
|
+
priority: "high"
|
|
2083
|
+
});
|
|
2084
|
+
}
|
|
2085
|
+
if (overlyBroadBashPermissions.length > 0) {
|
|
2086
|
+
const displayList = uniq(overlyBroadBashPermissions.map((p) => p.ruleDisplay));
|
|
2087
|
+
const displays = displayList.join(", ");
|
|
2088
|
+
const sources = uniq(overlyBroadBashPermissions.map((p) => p.sourceDisplay)).join(", ");
|
|
2089
|
+
const n = displayList.length;
|
|
2090
|
+
initialNotifications.push({
|
|
2091
|
+
key: "overly-broad-bash-notification",
|
|
2092
|
+
text: `${displays} allow ${plural(n, "rule")} from ${sources} ${plural(n, "was", "were")} ignored \u2014 not available for Ants, please use auto-mode instead`,
|
|
2093
|
+
color: "warning",
|
|
2094
|
+
priority: "high"
|
|
2095
|
+
});
|
|
2096
|
+
}
|
|
2097
|
+
const effectiveToolPermissionContext = {
|
|
2098
|
+
...toolPermissionContext,
|
|
2099
|
+
mode: isAgentSwarmsEnabled() && getTeammateUtils().isPlanModeRequired() ? "plan" : toolPermissionContext.mode
|
|
2100
|
+
};
|
|
2101
|
+
const initialIsBriefOnly = feature("KAIROS") || feature("KAIROS_BRIEF") ? getUserMsgOptIn() : false;
|
|
2102
|
+
const fullRemoteControl = remoteControl || getRemoteControlAtStartup() || kairosEnabled;
|
|
2103
|
+
let ccrMirrorEnabled = false;
|
|
2104
|
+
if (feature("CCR_MIRROR") && !fullRemoteControl) {
|
|
2105
|
+
const {
|
|
2106
|
+
isCcrMirrorEnabled
|
|
2107
|
+
} = require("./bridge/bridgeEnabled.js");
|
|
2108
|
+
ccrMirrorEnabled = isCcrMirrorEnabled();
|
|
2109
|
+
}
|
|
2110
|
+
const initialState = {
|
|
2111
|
+
settings: getInitialSettings(),
|
|
2112
|
+
tasks: {},
|
|
2113
|
+
agentNameRegistry: /* @__PURE__ */ new Map(),
|
|
2114
|
+
verbose: verbose ?? getGlobalConfig().verbose ?? false,
|
|
2115
|
+
mainLoopModel: initialMainLoopModel,
|
|
2116
|
+
mainLoopModelForSession: null,
|
|
2117
|
+
isBriefOnly: initialIsBriefOnly,
|
|
2118
|
+
expandedView: getGlobalConfig().showSpinnerTree ? "teammates" : getGlobalConfig().showExpandedTodos ? "tasks" : "none",
|
|
2119
|
+
showTeammateMessagePreview: isAgentSwarmsEnabled() ? false : void 0,
|
|
2120
|
+
selectedIPAgentIndex: -1,
|
|
2121
|
+
coordinatorTaskIndex: -1,
|
|
2122
|
+
viewSelectionMode: "none",
|
|
2123
|
+
footerSelection: null,
|
|
2124
|
+
toolPermissionContext: effectiveToolPermissionContext,
|
|
2125
|
+
agent: mainThreadAgentDefinition?.agentType,
|
|
2126
|
+
agentDefinitions,
|
|
2127
|
+
mcp: {
|
|
2128
|
+
clients: [],
|
|
2129
|
+
tools: [],
|
|
2130
|
+
commands: [],
|
|
2131
|
+
resources: {},
|
|
2132
|
+
pluginReconnectKey: 0
|
|
2133
|
+
},
|
|
2134
|
+
plugins: {
|
|
2135
|
+
enabled: [],
|
|
2136
|
+
disabled: [],
|
|
2137
|
+
commands: [],
|
|
2138
|
+
errors: [],
|
|
2139
|
+
installationStatus: {
|
|
2140
|
+
marketplaces: [],
|
|
2141
|
+
plugins: []
|
|
2142
|
+
},
|
|
2143
|
+
needsRefresh: false
|
|
2144
|
+
},
|
|
2145
|
+
statusLineText: void 0,
|
|
2146
|
+
kairosEnabled,
|
|
2147
|
+
remoteSessionUrl: void 0,
|
|
2148
|
+
remoteConnectionStatus: "connecting",
|
|
2149
|
+
remoteBackgroundTaskCount: 0,
|
|
2150
|
+
replBridgeEnabled: fullRemoteControl || ccrMirrorEnabled,
|
|
2151
|
+
replBridgeExplicit: remoteControl,
|
|
2152
|
+
replBridgeOutboundOnly: ccrMirrorEnabled,
|
|
2153
|
+
replBridgeConnected: false,
|
|
2154
|
+
replBridgeSessionActive: false,
|
|
2155
|
+
replBridgeReconnecting: false,
|
|
2156
|
+
replBridgeConnectUrl: void 0,
|
|
2157
|
+
replBridgeSessionUrl: void 0,
|
|
2158
|
+
replBridgeEnvironmentId: void 0,
|
|
2159
|
+
replBridgeSessionId: void 0,
|
|
2160
|
+
replBridgeError: void 0,
|
|
2161
|
+
replBridgeInitialName: remoteControlName,
|
|
2162
|
+
showRemoteCallout: false,
|
|
2163
|
+
notifications: {
|
|
2164
|
+
current: null,
|
|
2165
|
+
queue: initialNotifications
|
|
2166
|
+
},
|
|
2167
|
+
elicitation: {
|
|
2168
|
+
queue: []
|
|
2169
|
+
},
|
|
2170
|
+
todos: {},
|
|
2171
|
+
remoteAgentTaskSuggestions: [],
|
|
2172
|
+
fileHistory: {
|
|
2173
|
+
snapshots: [],
|
|
2174
|
+
trackedFiles: /* @__PURE__ */ new Set(),
|
|
2175
|
+
snapshotSequence: 0
|
|
2176
|
+
},
|
|
2177
|
+
attribution: createEmptyAttributionState(),
|
|
2178
|
+
thinkingEnabled,
|
|
2179
|
+
promptSuggestionEnabled: shouldEnablePromptSuggestion(),
|
|
2180
|
+
sessionHooks: /* @__PURE__ */ new Map(),
|
|
2181
|
+
inbox: {
|
|
2182
|
+
messages: []
|
|
2183
|
+
},
|
|
2184
|
+
promptSuggestion: {
|
|
2185
|
+
text: null,
|
|
2186
|
+
promptId: null,
|
|
2187
|
+
shownAt: 0,
|
|
2188
|
+
acceptedAt: 0,
|
|
2189
|
+
generationRequestId: null
|
|
2190
|
+
},
|
|
2191
|
+
speculation: IDLE_SPECULATION_STATE,
|
|
2192
|
+
speculationSessionTimeSavedMs: 0,
|
|
2193
|
+
skillImprovement: {
|
|
2194
|
+
suggestion: null
|
|
2195
|
+
},
|
|
2196
|
+
workerSandboxPermissions: {
|
|
2197
|
+
queue: [],
|
|
2198
|
+
selectedIndex: 0
|
|
2199
|
+
},
|
|
2200
|
+
pendingWorkerRequest: null,
|
|
2201
|
+
pendingSandboxRequest: null,
|
|
2202
|
+
authVersion: 0,
|
|
2203
|
+
initialMessage: inputPrompt ? {
|
|
2204
|
+
message: createUserMessage({
|
|
2205
|
+
content: String(inputPrompt)
|
|
2206
|
+
})
|
|
2207
|
+
} : null,
|
|
2208
|
+
effortValue: parseEffortValue(options.effort) ?? getInitialEffortSetting(),
|
|
2209
|
+
activeOverlays: /* @__PURE__ */ new Set(),
|
|
2210
|
+
fastMode: getInitialFastModeSetting(resolvedInitialModel),
|
|
2211
|
+
...isAdvisorEnabled() && advisorModel && {
|
|
2212
|
+
advisorModel
|
|
2213
|
+
},
|
|
2214
|
+
// Compute teamContext synchronously to avoid useEffect setState during render.
|
|
2215
|
+
// KAIROS: assistantTeamContext takes precedence — set earlier in the
|
|
2216
|
+
// KAIROS block so Agent(name: "foo") can spawn in-process teammates
|
|
2217
|
+
// without TeamCreate. computeInitialTeamContext() is for tmux-spawned
|
|
2218
|
+
// teammates reading their own identity, not the assistant-mode leader.
|
|
2219
|
+
teamContext: feature("KAIROS") ? assistantTeamContext ?? computeInitialTeamContext?.() : computeInitialTeamContext?.()
|
|
2220
|
+
};
|
|
2221
|
+
if (inputPrompt) {
|
|
2222
|
+
addToHistory(String(inputPrompt));
|
|
2223
|
+
}
|
|
2224
|
+
const initialTools = mcpTools;
|
|
2225
|
+
saveGlobalConfig((current) => ({
|
|
2226
|
+
...current,
|
|
2227
|
+
numStartups: (current.numStartups ?? 0) + 1
|
|
2228
|
+
}));
|
|
2229
|
+
setImmediate(() => {
|
|
2230
|
+
void logStartupTelemetry();
|
|
2231
|
+
logSessionTelemetry();
|
|
2232
|
+
});
|
|
2233
|
+
const sessionUploaderPromise = false ? null : null;
|
|
2234
|
+
const uploaderReady = sessionUploaderPromise ? sessionUploaderPromise.then((mod) => mod.createSessionTurnUploader()).catch(() => null) : null;
|
|
2235
|
+
const sessionConfig = {
|
|
2236
|
+
debug: debug || debugToStderr,
|
|
2237
|
+
commands: [...commands, ...mcpCommands],
|
|
2238
|
+
initialTools,
|
|
2239
|
+
mcpClients,
|
|
2240
|
+
autoConnectIdeFlag: ide,
|
|
2241
|
+
mainThreadAgentDefinition,
|
|
2242
|
+
disableSlashCommands,
|
|
2243
|
+
dynamicMcpConfig,
|
|
2244
|
+
strictMcpConfig,
|
|
2245
|
+
systemPrompt,
|
|
2246
|
+
appendSystemPrompt,
|
|
2247
|
+
taskListId,
|
|
2248
|
+
thinkingConfig,
|
|
2249
|
+
...uploaderReady && {
|
|
2250
|
+
onTurnComplete: (messages) => {
|
|
2251
|
+
void uploaderReady.then((uploader) => uploader?.(messages));
|
|
2252
|
+
}
|
|
2253
|
+
}
|
|
2254
|
+
};
|
|
2255
|
+
const resumeContext = {
|
|
2256
|
+
modeApi: coordinatorModeModule,
|
|
2257
|
+
mainThreadAgentDefinition,
|
|
2258
|
+
agentDefinitions,
|
|
2259
|
+
currentCwd,
|
|
2260
|
+
cliAgents,
|
|
2261
|
+
initialState
|
|
2262
|
+
};
|
|
2263
|
+
if (options.continue) {
|
|
2264
|
+
let resumeSucceeded = false;
|
|
2265
|
+
try {
|
|
2266
|
+
const resumeStart = performance.now();
|
|
2267
|
+
const {
|
|
2268
|
+
clearSessionCaches
|
|
2269
|
+
} = await import("./commands/clear/caches.js");
|
|
2270
|
+
clearSessionCaches();
|
|
2271
|
+
const result = await loadConversationForResume(
|
|
2272
|
+
void 0,
|
|
2273
|
+
void 0
|
|
2274
|
+
/* sourceFile */
|
|
2275
|
+
);
|
|
2276
|
+
if (!result) {
|
|
2277
|
+
logEvent("tengu_continue", {
|
|
2278
|
+
success: false
|
|
2279
|
+
});
|
|
2280
|
+
return await exitWithError(root, "No conversation found to continue");
|
|
2281
|
+
}
|
|
2282
|
+
const loaded = await processResumedConversation(result, {
|
|
2283
|
+
forkSession: !!options.forkSession,
|
|
2284
|
+
includeAttribution: true,
|
|
2285
|
+
transcriptPath: result.fullPath
|
|
2286
|
+
}, resumeContext);
|
|
2287
|
+
if (loaded.restoredAgentDef) {
|
|
2288
|
+
mainThreadAgentDefinition = loaded.restoredAgentDef;
|
|
2289
|
+
}
|
|
2290
|
+
maybeActivateProactive(options);
|
|
2291
|
+
maybeActivateBrief(options);
|
|
2292
|
+
logEvent("tengu_continue", {
|
|
2293
|
+
success: true,
|
|
2294
|
+
resume_duration_ms: Math.round(performance.now() - resumeStart)
|
|
2295
|
+
});
|
|
2296
|
+
resumeSucceeded = true;
|
|
2297
|
+
await launchRepl(root, {
|
|
2298
|
+
getFpsMetrics,
|
|
2299
|
+
stats,
|
|
2300
|
+
initialState: loaded.initialState
|
|
2301
|
+
}, {
|
|
2302
|
+
...sessionConfig,
|
|
2303
|
+
mainThreadAgentDefinition: loaded.restoredAgentDef ?? mainThreadAgentDefinition,
|
|
2304
|
+
initialMessages: loaded.messages,
|
|
2305
|
+
initialFileHistorySnapshots: loaded.fileHistorySnapshots,
|
|
2306
|
+
initialContentReplacements: loaded.contentReplacements,
|
|
2307
|
+
initialAgentName: loaded.agentName,
|
|
2308
|
+
initialAgentColor: loaded.agentColor
|
|
2309
|
+
}, renderAndRun);
|
|
2310
|
+
} catch (error) {
|
|
2311
|
+
if (!resumeSucceeded) {
|
|
2312
|
+
logEvent("tengu_continue", {
|
|
2313
|
+
success: false
|
|
2314
|
+
});
|
|
2315
|
+
}
|
|
2316
|
+
logError(error);
|
|
2317
|
+
process.exit(1);
|
|
2318
|
+
}
|
|
2319
|
+
} else if (feature("DIRECT_CONNECT") && _pendingConnect?.url) {
|
|
2320
|
+
let directConnectConfig;
|
|
2321
|
+
try {
|
|
2322
|
+
const session = await createDirectConnectSession({
|
|
2323
|
+
serverUrl: _pendingConnect.url,
|
|
2324
|
+
authToken: _pendingConnect.authToken,
|
|
2325
|
+
cwd: getOriginalCwd(),
|
|
2326
|
+
dangerouslySkipPermissions: _pendingConnect.dangerouslySkipPermissions
|
|
2327
|
+
});
|
|
2328
|
+
if (session.workDir) {
|
|
2329
|
+
setOriginalCwd(session.workDir);
|
|
2330
|
+
setCwdState(session.workDir);
|
|
2331
|
+
}
|
|
2332
|
+
setDirectConnectServerUrl(_pendingConnect.url);
|
|
2333
|
+
directConnectConfig = session.config;
|
|
2334
|
+
} catch (err) {
|
|
2335
|
+
return await exitWithError(root, err instanceof DirectConnectError ? err.message : String(err), () => gracefulShutdown(1));
|
|
2336
|
+
}
|
|
2337
|
+
const connectInfoMessage = createSystemMessage(`Connected to server at ${_pendingConnect.url}
|
|
2338
|
+
Session: ${directConnectConfig.sessionId}`, "info");
|
|
2339
|
+
await launchRepl(root, {
|
|
2340
|
+
getFpsMetrics,
|
|
2341
|
+
stats,
|
|
2342
|
+
initialState
|
|
2343
|
+
}, {
|
|
2344
|
+
debug: debug || debugToStderr,
|
|
2345
|
+
commands,
|
|
2346
|
+
initialTools: [],
|
|
2347
|
+
initialMessages: [connectInfoMessage],
|
|
2348
|
+
mcpClients: [],
|
|
2349
|
+
autoConnectIdeFlag: ide,
|
|
2350
|
+
mainThreadAgentDefinition,
|
|
2351
|
+
disableSlashCommands,
|
|
2352
|
+
directConnectConfig,
|
|
2353
|
+
thinkingConfig
|
|
2354
|
+
}, renderAndRun);
|
|
2355
|
+
return;
|
|
2356
|
+
} else if (feature("SSH_REMOTE") && _pendingSSH?.host) {
|
|
2357
|
+
const {
|
|
2358
|
+
createSSHSession,
|
|
2359
|
+
createLocalSSHSession,
|
|
2360
|
+
SSHSessionError
|
|
2361
|
+
} = await import("./ssh/createSSHSession.js");
|
|
2362
|
+
let sshSession;
|
|
2363
|
+
try {
|
|
2364
|
+
if (_pendingSSH.local) {
|
|
2365
|
+
process.stderr.write("Starting local ssh-proxy test session...\n");
|
|
2366
|
+
sshSession = createLocalSSHSession({
|
|
2367
|
+
cwd: _pendingSSH.cwd,
|
|
2368
|
+
permissionMode: _pendingSSH.permissionMode,
|
|
2369
|
+
dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions
|
|
2370
|
+
});
|
|
2371
|
+
} else {
|
|
2372
|
+
process.stderr.write(`Connecting to ${_pendingSSH.host}\u2026
|
|
2373
|
+
`);
|
|
2374
|
+
const isTTY = process.stderr.isTTY;
|
|
2375
|
+
let hadProgress = false;
|
|
2376
|
+
sshSession = await createSSHSession({
|
|
2377
|
+
host: _pendingSSH.host,
|
|
2378
|
+
cwd: _pendingSSH.cwd,
|
|
2379
|
+
localVersion: MACRO.VERSION,
|
|
2380
|
+
permissionMode: _pendingSSH.permissionMode,
|
|
2381
|
+
dangerouslySkipPermissions: _pendingSSH.dangerouslySkipPermissions,
|
|
2382
|
+
extraCliArgs: _pendingSSH.extraCliArgs
|
|
2383
|
+
}, isTTY ? {
|
|
2384
|
+
onProgress: (msg) => {
|
|
2385
|
+
hadProgress = true;
|
|
2386
|
+
process.stderr.write(`\r ${msg}\x1B[K`);
|
|
2387
|
+
}
|
|
2388
|
+
} : {});
|
|
2389
|
+
if (hadProgress) process.stderr.write("\n");
|
|
2390
|
+
}
|
|
2391
|
+
setOriginalCwd(sshSession.remoteCwd);
|
|
2392
|
+
setCwdState(sshSession.remoteCwd);
|
|
2393
|
+
setDirectConnectServerUrl(_pendingSSH.local ? "local" : _pendingSSH.host);
|
|
2394
|
+
} catch (err) {
|
|
2395
|
+
return await exitWithError(root, err instanceof SSHSessionError ? err.message : String(err), () => gracefulShutdown(1));
|
|
2396
|
+
}
|
|
2397
|
+
const sshInfoMessage = createSystemMessage(_pendingSSH.local ? `Local ssh-proxy test session
|
|
2398
|
+
cwd: ${sshSession.remoteCwd}
|
|
2399
|
+
Auth: unix socket \u2192 local proxy` : `SSH session to ${_pendingSSH.host}
|
|
2400
|
+
Remote cwd: ${sshSession.remoteCwd}
|
|
2401
|
+
Auth: unix socket -R \u2192 local proxy`, "info");
|
|
2402
|
+
await launchRepl(root, {
|
|
2403
|
+
getFpsMetrics,
|
|
2404
|
+
stats,
|
|
2405
|
+
initialState
|
|
2406
|
+
}, {
|
|
2407
|
+
debug: debug || debugToStderr,
|
|
2408
|
+
commands,
|
|
2409
|
+
initialTools: [],
|
|
2410
|
+
initialMessages: [sshInfoMessage],
|
|
2411
|
+
mcpClients: [],
|
|
2412
|
+
autoConnectIdeFlag: ide,
|
|
2413
|
+
mainThreadAgentDefinition,
|
|
2414
|
+
disableSlashCommands,
|
|
2415
|
+
sshSession,
|
|
2416
|
+
thinkingConfig
|
|
2417
|
+
}, renderAndRun);
|
|
2418
|
+
return;
|
|
2419
|
+
} else if (feature("KAIROS") && _pendingAssistantChat && (_pendingAssistantChat.sessionId || _pendingAssistantChat.discover)) {
|
|
2420
|
+
const {
|
|
2421
|
+
discoverAssistantSessions
|
|
2422
|
+
} = await import("./assistant/sessionDiscovery.js");
|
|
2423
|
+
let targetSessionId = _pendingAssistantChat.sessionId;
|
|
2424
|
+
if (!targetSessionId) {
|
|
2425
|
+
let sessions;
|
|
2426
|
+
try {
|
|
2427
|
+
sessions = await discoverAssistantSessions();
|
|
2428
|
+
} catch (e) {
|
|
2429
|
+
return await exitWithError(root, `Failed to discover sessions: ${e instanceof Error ? e.message : e}`, () => gracefulShutdown(1));
|
|
2430
|
+
}
|
|
2431
|
+
if (sessions.length === 0) {
|
|
2432
|
+
let installedDir;
|
|
2433
|
+
try {
|
|
2434
|
+
installedDir = await launchAssistantInstallWizard(root);
|
|
2435
|
+
} catch (e) {
|
|
2436
|
+
return await exitWithError(root, `Assistant installation failed: ${e instanceof Error ? e.message : e}`, () => gracefulShutdown(1));
|
|
2437
|
+
}
|
|
2438
|
+
if (installedDir === null) {
|
|
2439
|
+
await gracefulShutdown(0);
|
|
2440
|
+
process.exit(0);
|
|
2441
|
+
}
|
|
2442
|
+
return await exitWithMessage(root, `Assistant installed in ${installedDir}. The daemon is starting up \u2014 run \`claude assistant\` again in a few seconds to connect.`, {
|
|
2443
|
+
exitCode: 0,
|
|
2444
|
+
beforeExit: () => gracefulShutdown(0)
|
|
2445
|
+
});
|
|
2446
|
+
}
|
|
2447
|
+
if (sessions.length === 1) {
|
|
2448
|
+
targetSessionId = sessions[0].id;
|
|
2449
|
+
} else {
|
|
2450
|
+
const picked = await launchAssistantSessionChooser(root, {
|
|
2451
|
+
sessions
|
|
2452
|
+
});
|
|
2453
|
+
if (!picked) {
|
|
2454
|
+
await gracefulShutdown(0);
|
|
2455
|
+
process.exit(0);
|
|
2456
|
+
}
|
|
2457
|
+
targetSessionId = picked;
|
|
2458
|
+
}
|
|
2459
|
+
}
|
|
2460
|
+
const {
|
|
2461
|
+
checkAndRefreshOAuthTokenIfNeeded,
|
|
2462
|
+
getClaudeAIOAuthTokens
|
|
2463
|
+
} = await import("./utils/auth.js");
|
|
2464
|
+
await checkAndRefreshOAuthTokenIfNeeded();
|
|
2465
|
+
let apiCreds;
|
|
2466
|
+
try {
|
|
2467
|
+
apiCreds = await prepareApiRequest();
|
|
2468
|
+
} catch (e) {
|
|
2469
|
+
return await exitWithError(root, `Error: ${e instanceof Error ? e.message : "Failed to authenticate"}`, () => gracefulShutdown(1));
|
|
2470
|
+
}
|
|
2471
|
+
const getAccessToken = () => getClaudeAIOAuthTokens()?.accessToken ?? apiCreds.accessToken;
|
|
2472
|
+
setKairosActive(true);
|
|
2473
|
+
setUserMsgOptIn(true);
|
|
2474
|
+
setIsRemoteMode(true);
|
|
2475
|
+
const remoteSessionConfig = createRemoteSessionConfig(
|
|
2476
|
+
targetSessionId,
|
|
2477
|
+
getAccessToken,
|
|
2478
|
+
apiCreds.orgUUID,
|
|
2479
|
+
/* hasInitialPrompt */
|
|
2480
|
+
false,
|
|
2481
|
+
/* viewerOnly */
|
|
2482
|
+
true
|
|
2483
|
+
);
|
|
2484
|
+
const infoMessage = createSystemMessage(`Attached to assistant session ${targetSessionId.slice(0, 8)}\u2026`, "info");
|
|
2485
|
+
const assistantInitialState = {
|
|
2486
|
+
...initialState,
|
|
2487
|
+
isBriefOnly: true,
|
|
2488
|
+
kairosEnabled: false,
|
|
2489
|
+
replBridgeEnabled: false
|
|
2490
|
+
};
|
|
2491
|
+
const remoteCommands = filterCommandsForRemoteMode(commands);
|
|
2492
|
+
await launchRepl(root, {
|
|
2493
|
+
getFpsMetrics,
|
|
2494
|
+
stats,
|
|
2495
|
+
initialState: assistantInitialState
|
|
2496
|
+
}, {
|
|
2497
|
+
debug: debug || debugToStderr,
|
|
2498
|
+
commands: remoteCommands,
|
|
2499
|
+
initialTools: [],
|
|
2500
|
+
initialMessages: [infoMessage],
|
|
2501
|
+
mcpClients: [],
|
|
2502
|
+
autoConnectIdeFlag: ide,
|
|
2503
|
+
mainThreadAgentDefinition,
|
|
2504
|
+
disableSlashCommands,
|
|
2505
|
+
remoteSessionConfig,
|
|
2506
|
+
thinkingConfig
|
|
2507
|
+
}, renderAndRun);
|
|
2508
|
+
return;
|
|
2509
|
+
} else if (options.resume || options.fromPr || teleport || remote !== null) {
|
|
2510
|
+
const {
|
|
2511
|
+
clearSessionCaches
|
|
2512
|
+
} = await import("./commands/clear/caches.js");
|
|
2513
|
+
clearSessionCaches();
|
|
2514
|
+
let messages = null;
|
|
2515
|
+
let processedResume = void 0;
|
|
2516
|
+
let maybeSessionId = validateUuid(options.resume);
|
|
2517
|
+
let searchTerm = void 0;
|
|
2518
|
+
let matchedLog = null;
|
|
2519
|
+
let filterByPr = void 0;
|
|
2520
|
+
if (options.fromPr) {
|
|
2521
|
+
if (options.fromPr === true) {
|
|
2522
|
+
filterByPr = true;
|
|
2523
|
+
} else if (typeof options.fromPr === "string") {
|
|
2524
|
+
filterByPr = options.fromPr;
|
|
2525
|
+
}
|
|
2526
|
+
}
|
|
2527
|
+
if (options.resume && typeof options.resume === "string" && !maybeSessionId) {
|
|
2528
|
+
const trimmedValue = options.resume.trim();
|
|
2529
|
+
if (trimmedValue) {
|
|
2530
|
+
const matches = await searchSessionsByCustomTitle(trimmedValue, {
|
|
2531
|
+
exact: true
|
|
2532
|
+
});
|
|
2533
|
+
if (matches.length === 1) {
|
|
2534
|
+
matchedLog = matches[0];
|
|
2535
|
+
maybeSessionId = getSessionIdFromLog(matchedLog) ?? null;
|
|
2536
|
+
} else {
|
|
2537
|
+
searchTerm = trimmedValue;
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
}
|
|
2541
|
+
if (remote !== null || teleport) {
|
|
2542
|
+
await waitForPolicyLimitsToLoad();
|
|
2543
|
+
if (!isPolicyAllowed("allow_remote_sessions")) {
|
|
2544
|
+
return await exitWithError(root, "Error: Remote sessions are disabled by your organization's policy.", () => gracefulShutdown(1));
|
|
2545
|
+
}
|
|
2546
|
+
}
|
|
2547
|
+
if (remote !== null) {
|
|
2548
|
+
const hasInitialPrompt = remote.length > 0;
|
|
2549
|
+
const isRemoteTuiEnabled = getFeatureValue_CACHED_MAY_BE_STALE("tengu_remote_backend", false);
|
|
2550
|
+
if (!isRemoteTuiEnabled && !hasInitialPrompt) {
|
|
2551
|
+
return await exitWithError(root, 'Error: --remote requires a description.\nUsage: memcode --remote "your task description"', () => gracefulShutdown(1));
|
|
2552
|
+
}
|
|
2553
|
+
logEvent("tengu_remote_create_session", {
|
|
2554
|
+
has_initial_prompt: String(hasInitialPrompt)
|
|
2555
|
+
});
|
|
2556
|
+
const currentBranch = await getBranch();
|
|
2557
|
+
const createdSession = await teleportToRemoteWithErrorHandling(root, hasInitialPrompt ? remote : null, new AbortController().signal, currentBranch || void 0);
|
|
2558
|
+
if (!createdSession) {
|
|
2559
|
+
logEvent("tengu_remote_create_session_error", {
|
|
2560
|
+
error: "unable_to_create_session"
|
|
2561
|
+
});
|
|
2562
|
+
return await exitWithError(root, "Error: Unable to create remote session", () => gracefulShutdown(1));
|
|
2563
|
+
}
|
|
2564
|
+
logEvent("tengu_remote_create_session_success", {
|
|
2565
|
+
session_id: createdSession.id
|
|
2566
|
+
});
|
|
2567
|
+
if (!isRemoteTuiEnabled) {
|
|
2568
|
+
process.stdout.write(`Created remote session: ${createdSession.title}
|
|
2569
|
+
`);
|
|
2570
|
+
process.stdout.write(`View: ${getRemoteSessionUrl(createdSession.id)}?m=0
|
|
2571
|
+
`);
|
|
2572
|
+
process.stdout.write(`Resume with: memcode --teleport ${createdSession.id}
|
|
2573
|
+
`);
|
|
2574
|
+
await gracefulShutdown(0);
|
|
2575
|
+
process.exit(0);
|
|
2576
|
+
}
|
|
2577
|
+
setIsRemoteMode(true);
|
|
2578
|
+
switchSession(asSessionId(createdSession.id));
|
|
2579
|
+
let apiCreds;
|
|
2580
|
+
try {
|
|
2581
|
+
apiCreds = await prepareApiRequest();
|
|
2582
|
+
} catch (error) {
|
|
2583
|
+
logError(toError(error));
|
|
2584
|
+
return await exitWithError(root, `Error: ${errorMessage(error) || "Failed to authenticate"}`, () => gracefulShutdown(1));
|
|
2585
|
+
}
|
|
2586
|
+
const {
|
|
2587
|
+
getClaudeAIOAuthTokens: getTokensForRemote
|
|
2588
|
+
} = await import("./utils/auth.js");
|
|
2589
|
+
const getAccessTokenForRemote = () => getTokensForRemote()?.accessToken ?? apiCreds.accessToken;
|
|
2590
|
+
const remoteSessionConfig = createRemoteSessionConfig(createdSession.id, getAccessTokenForRemote, apiCreds.orgUUID, hasInitialPrompt);
|
|
2591
|
+
const remoteSessionUrl = `${getRemoteSessionUrl(createdSession.id)}?m=0`;
|
|
2592
|
+
const remoteInfoMessage = createSystemMessage(`/remote-control is active. Code in CLI or at ${remoteSessionUrl}`, "info");
|
|
2593
|
+
const initialUserMessage = hasInitialPrompt ? createUserMessage({
|
|
2594
|
+
content: remote
|
|
2595
|
+
}) : null;
|
|
2596
|
+
const remoteInitialState = {
|
|
2597
|
+
...initialState,
|
|
2598
|
+
remoteSessionUrl
|
|
2599
|
+
};
|
|
2600
|
+
const remoteCommands = filterCommandsForRemoteMode(commands);
|
|
2601
|
+
await launchRepl(root, {
|
|
2602
|
+
getFpsMetrics,
|
|
2603
|
+
stats,
|
|
2604
|
+
initialState: remoteInitialState
|
|
2605
|
+
}, {
|
|
2606
|
+
debug: debug || debugToStderr,
|
|
2607
|
+
commands: remoteCommands,
|
|
2608
|
+
initialTools: [],
|
|
2609
|
+
initialMessages: initialUserMessage ? [remoteInfoMessage, initialUserMessage] : [remoteInfoMessage],
|
|
2610
|
+
mcpClients: [],
|
|
2611
|
+
autoConnectIdeFlag: ide,
|
|
2612
|
+
mainThreadAgentDefinition,
|
|
2613
|
+
disableSlashCommands,
|
|
2614
|
+
remoteSessionConfig,
|
|
2615
|
+
thinkingConfig
|
|
2616
|
+
}, renderAndRun);
|
|
2617
|
+
return;
|
|
2618
|
+
} else if (teleport) {
|
|
2619
|
+
if (teleport === true || teleport === "") {
|
|
2620
|
+
logEvent("tengu_teleport_interactive_mode", {});
|
|
2621
|
+
logForDebugging("selectAndResumeTeleportTask: Starting teleport flow...");
|
|
2622
|
+
const teleportResult = await launchTeleportResumeWrapper(root);
|
|
2623
|
+
if (!teleportResult) {
|
|
2624
|
+
await gracefulShutdown(0);
|
|
2625
|
+
process.exit(0);
|
|
2626
|
+
}
|
|
2627
|
+
const {
|
|
2628
|
+
branchError
|
|
2629
|
+
} = await checkOutTeleportedSessionBranch(teleportResult.branch);
|
|
2630
|
+
messages = processMessagesForTeleportResume(teleportResult.log, branchError);
|
|
2631
|
+
} else if (typeof teleport === "string") {
|
|
2632
|
+
logEvent("tengu_teleport_resume_session", {
|
|
2633
|
+
mode: "direct"
|
|
2634
|
+
});
|
|
2635
|
+
try {
|
|
2636
|
+
const sessionData = await fetchSession(teleport);
|
|
2637
|
+
const repoValidation = await validateSessionRepository(sessionData);
|
|
2638
|
+
if (repoValidation.status === "mismatch" || repoValidation.status === "not_in_repo") {
|
|
2639
|
+
const sessionRepo = repoValidation.sessionRepo;
|
|
2640
|
+
if (sessionRepo) {
|
|
2641
|
+
const knownPaths = getKnownPathsForRepo(sessionRepo);
|
|
2642
|
+
const existingPaths = await filterExistingPaths(knownPaths);
|
|
2643
|
+
if (existingPaths.length > 0) {
|
|
2644
|
+
const selectedPath = await launchTeleportRepoMismatchDialog(root, {
|
|
2645
|
+
targetRepo: sessionRepo,
|
|
2646
|
+
initialPaths: existingPaths
|
|
2647
|
+
});
|
|
2648
|
+
if (selectedPath) {
|
|
2649
|
+
process.chdir(selectedPath);
|
|
2650
|
+
setCwd(selectedPath);
|
|
2651
|
+
setOriginalCwd(selectedPath);
|
|
2652
|
+
} else {
|
|
2653
|
+
await gracefulShutdown(0);
|
|
2654
|
+
}
|
|
2655
|
+
} else {
|
|
2656
|
+
throw new TeleportOperationError(`You must run memcode --teleport ${teleport} from a checkout of ${sessionRepo}.`, chalk.red(`You must run memcode --teleport ${teleport} from a checkout of ${chalk.bold(sessionRepo)}.
|
|
2657
|
+
`));
|
|
2658
|
+
}
|
|
2659
|
+
}
|
|
2660
|
+
} else if (repoValidation.status === "error") {
|
|
2661
|
+
throw new TeleportOperationError(repoValidation.errorMessage || "Failed to validate session", chalk.red(`Error: ${repoValidation.errorMessage || "Failed to validate session"}
|
|
2662
|
+
`));
|
|
2663
|
+
}
|
|
2664
|
+
await validateGitState();
|
|
2665
|
+
const {
|
|
2666
|
+
teleportWithProgress
|
|
2667
|
+
} = await import("./components/TeleportProgress.js");
|
|
2668
|
+
const result = await teleportWithProgress(root, teleport);
|
|
2669
|
+
setTeleportedSessionInfo({
|
|
2670
|
+
sessionId: teleport
|
|
2671
|
+
});
|
|
2672
|
+
messages = result.messages;
|
|
2673
|
+
} catch (error) {
|
|
2674
|
+
if (error instanceof TeleportOperationError) {
|
|
2675
|
+
process.stderr.write(error.formattedMessage + "\n");
|
|
2676
|
+
} else {
|
|
2677
|
+
logError(error);
|
|
2678
|
+
process.stderr.write(chalk.red(`Error: ${errorMessage(error)}
|
|
2679
|
+
`));
|
|
2680
|
+
}
|
|
2681
|
+
await gracefulShutdown(1);
|
|
2682
|
+
}
|
|
2683
|
+
}
|
|
2684
|
+
}
|
|
2685
|
+
if (false) {
|
|
2686
|
+
if (options.resume && typeof options.resume === "string" && !maybeSessionId) {
|
|
2687
|
+
const {
|
|
2688
|
+
parseCcshareId,
|
|
2689
|
+
loadCcshare
|
|
2690
|
+
} = await null;
|
|
2691
|
+
const ccshareId = parseCcshareId(options.resume);
|
|
2692
|
+
if (ccshareId) {
|
|
2693
|
+
try {
|
|
2694
|
+
const resumeStart = performance.now();
|
|
2695
|
+
const logOption = await loadCcshare(ccshareId);
|
|
2696
|
+
const result = await loadConversationForResume(logOption, void 0);
|
|
2697
|
+
if (result) {
|
|
2698
|
+
processedResume = await processResumedConversation(result, {
|
|
2699
|
+
forkSession: true,
|
|
2700
|
+
transcriptPath: result.fullPath
|
|
2701
|
+
}, resumeContext);
|
|
2702
|
+
if (processedResume.restoredAgentDef) {
|
|
2703
|
+
mainThreadAgentDefinition = processedResume.restoredAgentDef;
|
|
2704
|
+
}
|
|
2705
|
+
logEvent("tengu_session_resumed", {
|
|
2706
|
+
entrypoint: "ccshare",
|
|
2707
|
+
success: true,
|
|
2708
|
+
resume_duration_ms: Math.round(performance.now() - resumeStart)
|
|
2709
|
+
});
|
|
2710
|
+
} else {
|
|
2711
|
+
logEvent("tengu_session_resumed", {
|
|
2712
|
+
entrypoint: "ccshare",
|
|
2713
|
+
success: false
|
|
2714
|
+
});
|
|
2715
|
+
}
|
|
2716
|
+
} catch (error) {
|
|
2717
|
+
logEvent("tengu_session_resumed", {
|
|
2718
|
+
entrypoint: "ccshare",
|
|
2719
|
+
success: false
|
|
2720
|
+
});
|
|
2721
|
+
logError(error);
|
|
2722
|
+
await exitWithError(root, `Unable to resume from ccshare: ${errorMessage(error)}`, () => gracefulShutdown(1));
|
|
2723
|
+
}
|
|
2724
|
+
} else {
|
|
2725
|
+
const resolvedPath = resolve(options.resume);
|
|
2726
|
+
try {
|
|
2727
|
+
const resumeStart = performance.now();
|
|
2728
|
+
let logOption;
|
|
2729
|
+
try {
|
|
2730
|
+
logOption = await loadTranscriptFromFile(resolvedPath);
|
|
2731
|
+
} catch (error) {
|
|
2732
|
+
if (!isENOENT(error)) throw error;
|
|
2733
|
+
}
|
|
2734
|
+
if (logOption) {
|
|
2735
|
+
const result = await loadConversationForResume(
|
|
2736
|
+
logOption,
|
|
2737
|
+
void 0
|
|
2738
|
+
/* sourceFile */
|
|
2739
|
+
);
|
|
2740
|
+
if (result) {
|
|
2741
|
+
processedResume = await processResumedConversation(result, {
|
|
2742
|
+
forkSession: !!options.forkSession,
|
|
2743
|
+
transcriptPath: result.fullPath
|
|
2744
|
+
}, resumeContext);
|
|
2745
|
+
if (processedResume.restoredAgentDef) {
|
|
2746
|
+
mainThreadAgentDefinition = processedResume.restoredAgentDef;
|
|
2747
|
+
}
|
|
2748
|
+
logEvent("tengu_session_resumed", {
|
|
2749
|
+
entrypoint: "file",
|
|
2750
|
+
success: true,
|
|
2751
|
+
resume_duration_ms: Math.round(performance.now() - resumeStart)
|
|
2752
|
+
});
|
|
2753
|
+
} else {
|
|
2754
|
+
logEvent("tengu_session_resumed", {
|
|
2755
|
+
entrypoint: "file",
|
|
2756
|
+
success: false
|
|
2757
|
+
});
|
|
2758
|
+
}
|
|
2759
|
+
}
|
|
2760
|
+
} catch (error) {
|
|
2761
|
+
logEvent("tengu_session_resumed", {
|
|
2762
|
+
entrypoint: "file",
|
|
2763
|
+
success: false
|
|
2764
|
+
});
|
|
2765
|
+
logError(error);
|
|
2766
|
+
await exitWithError(root, `Unable to load transcript from file: ${options.resume}`, () => gracefulShutdown(1));
|
|
2767
|
+
}
|
|
2768
|
+
}
|
|
2769
|
+
}
|
|
2770
|
+
}
|
|
2771
|
+
if (maybeSessionId) {
|
|
2772
|
+
const sessionId2 = maybeSessionId;
|
|
2773
|
+
try {
|
|
2774
|
+
const resumeStart = performance.now();
|
|
2775
|
+
const result = await loadConversationForResume(matchedLog ?? sessionId2, void 0);
|
|
2776
|
+
if (!result) {
|
|
2777
|
+
logEvent("tengu_session_resumed", {
|
|
2778
|
+
entrypoint: "cli_flag",
|
|
2779
|
+
success: false
|
|
2780
|
+
});
|
|
2781
|
+
return await exitWithError(root, `No conversation found with session ID: ${sessionId2}`);
|
|
2782
|
+
}
|
|
2783
|
+
const fullPath = matchedLog?.fullPath ?? result.fullPath;
|
|
2784
|
+
processedResume = await processResumedConversation(result, {
|
|
2785
|
+
forkSession: !!options.forkSession,
|
|
2786
|
+
sessionIdOverride: sessionId2,
|
|
2787
|
+
transcriptPath: fullPath
|
|
2788
|
+
}, resumeContext);
|
|
2789
|
+
if (processedResume.restoredAgentDef) {
|
|
2790
|
+
mainThreadAgentDefinition = processedResume.restoredAgentDef;
|
|
2791
|
+
}
|
|
2792
|
+
logEvent("tengu_session_resumed", {
|
|
2793
|
+
entrypoint: "cli_flag",
|
|
2794
|
+
success: true,
|
|
2795
|
+
resume_duration_ms: Math.round(performance.now() - resumeStart)
|
|
2796
|
+
});
|
|
2797
|
+
} catch (error) {
|
|
2798
|
+
logEvent("tengu_session_resumed", {
|
|
2799
|
+
entrypoint: "cli_flag",
|
|
2800
|
+
success: false
|
|
2801
|
+
});
|
|
2802
|
+
logError(error);
|
|
2803
|
+
await exitWithError(root, `Failed to resume session ${sessionId2}`);
|
|
2804
|
+
}
|
|
2805
|
+
}
|
|
2806
|
+
if (fileDownloadPromise) {
|
|
2807
|
+
try {
|
|
2808
|
+
const results = await fileDownloadPromise;
|
|
2809
|
+
const failedCount = count(results, (r) => !r.success);
|
|
2810
|
+
if (failedCount > 0) {
|
|
2811
|
+
process.stderr.write(chalk.yellow(`Warning: ${failedCount}/${results.length} file(s) failed to download.
|
|
2812
|
+
`));
|
|
2813
|
+
}
|
|
2814
|
+
} catch (error) {
|
|
2815
|
+
return await exitWithError(root, `Error downloading files: ${errorMessage(error)}`);
|
|
2816
|
+
}
|
|
2817
|
+
}
|
|
2818
|
+
const resumeData = processedResume ?? (Array.isArray(messages) ? {
|
|
2819
|
+
messages,
|
|
2820
|
+
fileHistorySnapshots: void 0,
|
|
2821
|
+
agentName: void 0,
|
|
2822
|
+
agentColor: void 0,
|
|
2823
|
+
restoredAgentDef: mainThreadAgentDefinition,
|
|
2824
|
+
initialState,
|
|
2825
|
+
contentReplacements: void 0
|
|
2826
|
+
} : void 0);
|
|
2827
|
+
if (resumeData) {
|
|
2828
|
+
maybeActivateProactive(options);
|
|
2829
|
+
maybeActivateBrief(options);
|
|
2830
|
+
await launchRepl(root, {
|
|
2831
|
+
getFpsMetrics,
|
|
2832
|
+
stats,
|
|
2833
|
+
initialState: resumeData.initialState
|
|
2834
|
+
}, {
|
|
2835
|
+
...sessionConfig,
|
|
2836
|
+
mainThreadAgentDefinition: resumeData.restoredAgentDef ?? mainThreadAgentDefinition,
|
|
2837
|
+
initialMessages: resumeData.messages,
|
|
2838
|
+
initialFileHistorySnapshots: resumeData.fileHistorySnapshots,
|
|
2839
|
+
initialContentReplacements: resumeData.contentReplacements,
|
|
2840
|
+
initialAgentName: resumeData.agentName,
|
|
2841
|
+
initialAgentColor: resumeData.agentColor
|
|
2842
|
+
}, renderAndRun);
|
|
2843
|
+
} else {
|
|
2844
|
+
await launchResumeChooser(root, {
|
|
2845
|
+
getFpsMetrics,
|
|
2846
|
+
stats,
|
|
2847
|
+
initialState
|
|
2848
|
+
}, getWorktreePaths(getOriginalCwd()), {
|
|
2849
|
+
...sessionConfig,
|
|
2850
|
+
initialSearchQuery: searchTerm,
|
|
2851
|
+
forkSession: options.forkSession,
|
|
2852
|
+
filterByPr
|
|
2853
|
+
});
|
|
2854
|
+
}
|
|
2855
|
+
} else {
|
|
2856
|
+
const pendingHookMessages = hooksPromise && hookMessages.length === 0 ? hooksPromise : void 0;
|
|
2857
|
+
profileCheckpoint("action_after_hooks");
|
|
2858
|
+
maybeActivateProactive(options);
|
|
2859
|
+
maybeActivateBrief(options);
|
|
2860
|
+
if (feature("COORDINATOR_MODE")) {
|
|
2861
|
+
saveMode(coordinatorModeModule?.isCoordinatorMode() ? "coordinator" : "normal");
|
|
2862
|
+
}
|
|
2863
|
+
let deepLinkBanner = null;
|
|
2864
|
+
if (feature("LODESTONE")) {
|
|
2865
|
+
if (options.deepLinkOrigin) {
|
|
2866
|
+
logEvent("tengu_deep_link_opened", {
|
|
2867
|
+
has_prefill: Boolean(options.prefill),
|
|
2868
|
+
has_repo: Boolean(options.deepLinkRepo)
|
|
2869
|
+
});
|
|
2870
|
+
deepLinkBanner = createSystemMessage(buildDeepLinkBanner({
|
|
2871
|
+
cwd: getCwd(),
|
|
2872
|
+
prefillLength: options.prefill?.length,
|
|
2873
|
+
repo: options.deepLinkRepo,
|
|
2874
|
+
lastFetch: options.deepLinkLastFetch !== void 0 ? new Date(options.deepLinkLastFetch) : void 0
|
|
2875
|
+
}), "warning");
|
|
2876
|
+
} else if (options.prefill) {
|
|
2877
|
+
deepLinkBanner = createSystemMessage("Launched with a pre-filled prompt \u2014 review it before pressing Enter.", "warning");
|
|
2878
|
+
}
|
|
2879
|
+
}
|
|
2880
|
+
const initialMessages = deepLinkBanner ? [deepLinkBanner, ...hookMessages] : hookMessages.length > 0 ? hookMessages : void 0;
|
|
2881
|
+
await launchRepl(root, {
|
|
2882
|
+
getFpsMetrics,
|
|
2883
|
+
stats,
|
|
2884
|
+
initialState
|
|
2885
|
+
}, {
|
|
2886
|
+
...sessionConfig,
|
|
2887
|
+
initialMessages,
|
|
2888
|
+
pendingHookMessages
|
|
2889
|
+
}, renderAndRun);
|
|
2890
|
+
}
|
|
2891
|
+
}).version(`${MACRO.VERSION} (memcode)`, "-v, --version", "Output the version number");
|
|
2892
|
+
program.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
|
|
2893
|
+
program.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
|
|
2894
|
+
program.addOption(new Option("--no-animation", "Disable animated terminal UI elements").hideHelp());
|
|
2895
|
+
if (canUserConfigureAdvisor()) {
|
|
2896
|
+
program.addOption(new Option("--advisor <model>", "Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp());
|
|
2897
|
+
}
|
|
2898
|
+
if (false) {
|
|
2899
|
+
program.addOption(new Option("--delegate-permissions", "[ANT-ONLY] Alias for --permission-mode auto.").implies({
|
|
2900
|
+
permissionMode: "auto"
|
|
2901
|
+
}));
|
|
2902
|
+
program.addOption(new Option("--dangerously-skip-permissions-with-classifiers", "[ANT-ONLY] Deprecated alias for --permission-mode auto.").hideHelp().implies({
|
|
2903
|
+
permissionMode: "auto"
|
|
2904
|
+
}));
|
|
2905
|
+
program.addOption(new Option("--afk", "[ANT-ONLY] Deprecated alias for --permission-mode auto.").hideHelp().implies({
|
|
2906
|
+
permissionMode: "auto"
|
|
2907
|
+
}));
|
|
2908
|
+
program.addOption(new Option("--tasks [id]", '[ANT-ONLY] Tasks mode: watch for tasks and auto-process them. Optional id is used as both the task list ID and agent ID (defaults to "tasklist").').argParser(String).hideHelp());
|
|
2909
|
+
program.option("--agent-teams", "[ANT-ONLY] Force memCode to use multi-agent mode for solving problems", () => true);
|
|
2910
|
+
}
|
|
2911
|
+
if (feature("TRANSCRIPT_CLASSIFIER")) {
|
|
2912
|
+
program.addOption(new Option("--enable-auto-mode", "Opt in to auto mode").hideHelp());
|
|
2913
|
+
}
|
|
2914
|
+
if (feature("PROACTIVE") || feature("KAIROS")) {
|
|
2915
|
+
program.addOption(new Option("--proactive", "Start in proactive autonomous mode"));
|
|
2916
|
+
}
|
|
2917
|
+
if (feature("UDS_INBOX")) {
|
|
2918
|
+
program.addOption(new Option("--messaging-socket-path <path>", "Unix domain socket path for the UDS messaging server (defaults to a tmp path)"));
|
|
2919
|
+
}
|
|
2920
|
+
if (feature("KAIROS") || feature("KAIROS_BRIEF")) {
|
|
2921
|
+
program.addOption(new Option("--brief", "Enable SendUserMessage tool for agent-to-user communication"));
|
|
2922
|
+
}
|
|
2923
|
+
if (feature("KAIROS")) {
|
|
2924
|
+
program.addOption(new Option("--assistant", "Force assistant mode (Agent SDK daemon use)").hideHelp());
|
|
2925
|
+
}
|
|
2926
|
+
if (feature("KAIROS") || feature("KAIROS_CHANNELS")) {
|
|
2927
|
+
program.addOption(new Option("--channels <servers...>", "MCP servers whose channel notifications (inbound push) should register this session. Space-separated server names.").hideHelp());
|
|
2928
|
+
program.addOption(new Option("--dangerously-load-development-channels <servers...>", "Load channel servers not on the approved allowlist. For local channel development only. Shows a confirmation dialog at startup.").hideHelp());
|
|
2929
|
+
}
|
|
2930
|
+
program.addOption(new Option("--agent-id <id>", "Teammate agent ID").hideHelp());
|
|
2931
|
+
program.addOption(new Option("--agent-name <name>", "Teammate display name").hideHelp());
|
|
2932
|
+
program.addOption(new Option("--team-name <name>", "Team name for swarm coordination").hideHelp());
|
|
2933
|
+
program.addOption(new Option("--agent-color <color>", "Teammate UI color").hideHelp());
|
|
2934
|
+
program.addOption(new Option("--plan-mode-required", "Require plan mode before implementation").hideHelp());
|
|
2935
|
+
program.addOption(new Option("--parent-session-id <id>", "Parent session ID for analytics correlation").hideHelp());
|
|
2936
|
+
program.addOption(new Option("--teammate-mode <mode>", 'How to spawn teammates: "tmux", "in-process", or "auto"').choices(["auto", "tmux", "in-process"]).hideHelp());
|
|
2937
|
+
program.addOption(new Option("--agent-type <type>", "Custom agent type for this teammate").hideHelp());
|
|
2938
|
+
program.addOption(new Option("--sdk-url <url>", "Use remote WebSocket endpoint for SDK I/O streaming (only with -p and stream-json format)").hideHelp());
|
|
2939
|
+
program.addOption(new Option("--teleport [session]", "Resume a teleport session, optionally specify session ID").hideHelp());
|
|
2940
|
+
program.addOption(new Option("--remote [description]", "Create a remote session with the given description").hideHelp());
|
|
2941
|
+
if (isBridgeModeAvailable()) {
|
|
2942
|
+
program.addOption(new Option("--remote-control [name]", "Start an interactive session with Remote Control enabled (optionally named)").argParser((value) => value || true).hideHelp());
|
|
2943
|
+
program.addOption(new Option("--rc [name]", "Alias for --remote-control").argParser((value) => value || true).hideHelp());
|
|
2944
|
+
}
|
|
2945
|
+
if (feature("HARD_FAIL")) {
|
|
2946
|
+
program.addOption(new Option("--hard-fail", "Crash on logError calls instead of silently logging").hideHelp());
|
|
2947
|
+
}
|
|
2948
|
+
profileCheckpoint("run_main_options_built");
|
|
2949
|
+
const isPrintMode = process.argv.includes("-p") || process.argv.includes("--print");
|
|
2950
|
+
const isCcUrl = process.argv.some((a) => a.startsWith("cc://") || a.startsWith("cc+unix://"));
|
|
2951
|
+
if (isPrintMode && !isCcUrl) {
|
|
2952
|
+
profileCheckpoint("run_before_parse");
|
|
2953
|
+
await program.parseAsync(process.argv);
|
|
2954
|
+
profileCheckpoint("run_after_parse");
|
|
2955
|
+
return program;
|
|
2956
|
+
}
|
|
2957
|
+
const mcp = program.command("mcp").description("Configure and manage MCP servers").configureHelp(createSortedHelpConfig()).enablePositionalOptions();
|
|
2958
|
+
mcp.command("serve").description(`Start the memCode MCP server`).option("-d, --debug", "Enable debug mode", () => true).option("--verbose", "Override verbose mode setting from config", () => true).action(async ({
|
|
2959
|
+
debug,
|
|
2960
|
+
verbose
|
|
2961
|
+
}) => {
|
|
2962
|
+
const {
|
|
2963
|
+
mcpServeHandler
|
|
2964
|
+
} = await import("./cli/handlers/mcp.js");
|
|
2965
|
+
await mcpServeHandler({
|
|
2966
|
+
debug,
|
|
2967
|
+
verbose
|
|
2968
|
+
});
|
|
2969
|
+
});
|
|
2970
|
+
registerMcpAddCommand(mcp);
|
|
2971
|
+
if (isXaaEnabled()) {
|
|
2972
|
+
registerMcpXaaIdpCommand(mcp);
|
|
2973
|
+
}
|
|
2974
|
+
mcp.command("remove <name>").description("Remove an MCP server").option("-s, --scope <scope>", "Configuration scope (local, user, or project) - if not specified, removes from whichever scope it exists in").action(async (name, options) => {
|
|
2975
|
+
const {
|
|
2976
|
+
mcpRemoveHandler
|
|
2977
|
+
} = await import("./cli/handlers/mcp.js");
|
|
2978
|
+
await mcpRemoveHandler(name, options);
|
|
2979
|
+
});
|
|
2980
|
+
mcp.command("list").description("List configured MCP servers. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
|
|
2981
|
+
const {
|
|
2982
|
+
mcpListHandler
|
|
2983
|
+
} = await import("./cli/handlers/mcp.js");
|
|
2984
|
+
await mcpListHandler();
|
|
2985
|
+
});
|
|
2986
|
+
mcp.command("get <name>").description("Get details about an MCP server. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async (name) => {
|
|
2987
|
+
const {
|
|
2988
|
+
mcpGetHandler
|
|
2989
|
+
} = await import("./cli/handlers/mcp.js");
|
|
2990
|
+
await mcpGetHandler(name);
|
|
2991
|
+
});
|
|
2992
|
+
mcp.command("add-json <name> <json>").description("Add an MCP server (stdio or SSE) with a JSON string").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").option("--client-secret", "Prompt for OAuth client secret (or set MCP_CLIENT_SECRET env var)").action(async (name, json, options) => {
|
|
2993
|
+
const {
|
|
2994
|
+
mcpAddJsonHandler
|
|
2995
|
+
} = await import("./cli/handlers/mcp.js");
|
|
2996
|
+
await mcpAddJsonHandler(name, json, options);
|
|
2997
|
+
});
|
|
2998
|
+
mcp.command("add-from-memcode-desktop", { hidden: !isUpstreamFeatureEnabled() }).description("Import MCP servers from memCode Desktop (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
|
|
2999
|
+
const {
|
|
3000
|
+
mcpAddFromDesktopHandler
|
|
3001
|
+
} = await import("./cli/handlers/mcp.js");
|
|
3002
|
+
await mcpAddFromDesktopHandler(options);
|
|
3003
|
+
});
|
|
3004
|
+
mcp.command("add-from-claude-desktop", { hidden: true }).description("Import MCP servers from memCode Desktop (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
|
|
3005
|
+
const {
|
|
3006
|
+
mcpAddFromDesktopHandler
|
|
3007
|
+
} = await import("./cli/handlers/mcp.js");
|
|
3008
|
+
await mcpAddFromDesktopHandler(options);
|
|
3009
|
+
});
|
|
3010
|
+
mcp.command("reset-project-choices").description("Reset all approved and rejected project-scoped (.mcp.json) servers within this project").action(async () => {
|
|
3011
|
+
const {
|
|
3012
|
+
mcpResetChoicesHandler
|
|
3013
|
+
} = await import("./cli/handlers/mcp.js");
|
|
3014
|
+
await mcpResetChoicesHandler();
|
|
3015
|
+
});
|
|
3016
|
+
if (feature("DIRECT_CONNECT")) {
|
|
3017
|
+
program.command("server").description("Start a memCode session server").option("--port <number>", "HTTP port", "0").option("--host <string>", "Bind address", "0.0.0.0").option("--auth-token <token>", "Bearer token for auth").option("--unix <path>", "Listen on a unix domain socket").option("--workspace <dir>", "Default working directory for sessions that do not specify cwd").option("--idle-timeout <ms>", "Idle timeout for detached sessions in ms (0 = never expire)", "600000").option("--max-sessions <n>", "Maximum concurrent sessions (0 = unlimited)", "32").action(async (opts) => {
|
|
3018
|
+
const {
|
|
3019
|
+
randomBytes
|
|
3020
|
+
} = await import("crypto");
|
|
3021
|
+
const {
|
|
3022
|
+
startServer
|
|
3023
|
+
} = await import("./server/server.js");
|
|
3024
|
+
const {
|
|
3025
|
+
SessionManager
|
|
3026
|
+
} = await import("./server/sessionManager.js");
|
|
3027
|
+
const {
|
|
3028
|
+
DangerousBackend
|
|
3029
|
+
} = await import("./server/backends/dangerousBackend.js");
|
|
3030
|
+
const {
|
|
3031
|
+
printBanner
|
|
3032
|
+
} = await import("./server/serverBanner.js");
|
|
3033
|
+
const {
|
|
3034
|
+
createServerLogger
|
|
3035
|
+
} = await import("./server/serverLog.js");
|
|
3036
|
+
const {
|
|
3037
|
+
writeServerLock,
|
|
3038
|
+
removeServerLock,
|
|
3039
|
+
probeRunningServer
|
|
3040
|
+
} = await import("./server/lockfile.js");
|
|
3041
|
+
const existing = await probeRunningServer();
|
|
3042
|
+
if (existing) {
|
|
3043
|
+
process.stderr.write(`A claude server is already running (pid ${existing.pid}) at ${existing.httpUrl}
|
|
3044
|
+
`);
|
|
3045
|
+
process.exit(1);
|
|
3046
|
+
}
|
|
3047
|
+
const authToken = opts.authToken ?? `sk-ant-cc-${randomBytes(16).toString("base64url")}`;
|
|
3048
|
+
const config = {
|
|
3049
|
+
port: parseInt(opts.port, 10),
|
|
3050
|
+
host: opts.host,
|
|
3051
|
+
authToken,
|
|
3052
|
+
unix: opts.unix,
|
|
3053
|
+
workspace: opts.workspace,
|
|
3054
|
+
idleTimeoutMs: parseInt(opts.idleTimeout, 10),
|
|
3055
|
+
maxSessions: parseInt(opts.maxSessions, 10)
|
|
3056
|
+
};
|
|
3057
|
+
const backend = new DangerousBackend();
|
|
3058
|
+
const sessionManager = new SessionManager(backend, {
|
|
3059
|
+
idleTimeoutMs: config.idleTimeoutMs,
|
|
3060
|
+
maxSessions: config.maxSessions
|
|
3061
|
+
});
|
|
3062
|
+
const logger = createServerLogger();
|
|
3063
|
+
const server = startServer(config, sessionManager, logger);
|
|
3064
|
+
const actualPort = server.port ?? config.port;
|
|
3065
|
+
printBanner(config, authToken, actualPort);
|
|
3066
|
+
await writeServerLock({
|
|
3067
|
+
pid: process.pid,
|
|
3068
|
+
port: actualPort,
|
|
3069
|
+
host: config.host,
|
|
3070
|
+
httpUrl: config.unix ? `unix:${config.unix}` : `http://${config.host}:${actualPort}`,
|
|
3071
|
+
startedAt: Date.now()
|
|
3072
|
+
});
|
|
3073
|
+
let shuttingDown = false;
|
|
3074
|
+
const shutdown = async () => {
|
|
3075
|
+
if (shuttingDown) return;
|
|
3076
|
+
shuttingDown = true;
|
|
3077
|
+
server.stop(true);
|
|
3078
|
+
await sessionManager.destroyAll();
|
|
3079
|
+
await removeServerLock();
|
|
3080
|
+
process.exit(0);
|
|
3081
|
+
};
|
|
3082
|
+
process.once("SIGINT", () => void shutdown());
|
|
3083
|
+
process.once("SIGTERM", () => void shutdown());
|
|
3084
|
+
});
|
|
3085
|
+
}
|
|
3086
|
+
if (feature("SSH_REMOTE")) {
|
|
3087
|
+
program.command("ssh <host> [dir]").description("Run memCode on a remote host over SSH. Deploys the binary and tunnels API auth back through your local machine \u2014 no remote setup needed.").option("--permission-mode <mode>", "Permission mode for the remote session").option("--dangerously-skip-permissions", "Skip all permission prompts on the remote (dangerous)").option("--local", "e2e test mode \u2014 spawn the child CLI locally (skip ssh/deploy). Exercises the auth proxy and unix-socket plumbing without a remote host.").action(async () => {
|
|
3088
|
+
process.stderr.write("Usage: memcode ssh <user@host | ssh-config-alias> [dir]\n\nRuns memCode on a remote Linux host. You don't need to install\nanything on the remote or run `memcode auth login` there \u2014 the binary is\ndeployed over SSH and API auth tunnels back through your local machine.\n");
|
|
3089
|
+
process.exit(1);
|
|
3090
|
+
});
|
|
3091
|
+
}
|
|
3092
|
+
if (feature("DIRECT_CONNECT")) {
|
|
3093
|
+
program.command("open <cc-url>").description("Connect to a memCode server (internal \u2014 use cc:// URLs)").option("-p, --print [prompt]", "Print mode (headless)").option("--output-format <format>", "Output format: text, json, stream-json", "text").action(async (ccUrl, opts) => {
|
|
3094
|
+
const {
|
|
3095
|
+
parseConnectUrl
|
|
3096
|
+
} = await import("./server/parseConnectUrl.js");
|
|
3097
|
+
const {
|
|
3098
|
+
serverUrl,
|
|
3099
|
+
authToken
|
|
3100
|
+
} = parseConnectUrl(ccUrl);
|
|
3101
|
+
let connectConfig;
|
|
3102
|
+
try {
|
|
3103
|
+
const session = await createDirectConnectSession({
|
|
3104
|
+
serverUrl,
|
|
3105
|
+
authToken,
|
|
3106
|
+
cwd: getOriginalCwd(),
|
|
3107
|
+
dangerouslySkipPermissions: _pendingConnect?.dangerouslySkipPermissions
|
|
3108
|
+
});
|
|
3109
|
+
if (session.workDir) {
|
|
3110
|
+
setOriginalCwd(session.workDir);
|
|
3111
|
+
setCwdState(session.workDir);
|
|
3112
|
+
}
|
|
3113
|
+
setDirectConnectServerUrl(serverUrl);
|
|
3114
|
+
connectConfig = session.config;
|
|
3115
|
+
} catch (err) {
|
|
3116
|
+
console.error(err instanceof DirectConnectError ? err.message : String(err));
|
|
3117
|
+
process.exit(1);
|
|
3118
|
+
}
|
|
3119
|
+
const {
|
|
3120
|
+
runConnectHeadless
|
|
3121
|
+
} = await import("./server/connectHeadless.js");
|
|
3122
|
+
const prompt = typeof opts.print === "string" ? opts.print : "";
|
|
3123
|
+
const interactive = opts.print === true;
|
|
3124
|
+
await runConnectHeadless(connectConfig, prompt, opts.outputFormat, interactive);
|
|
3125
|
+
});
|
|
3126
|
+
}
|
|
3127
|
+
const auth = program.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());
|
|
3128
|
+
auth.command("login", { hidden: !isUpstreamFeatureEnabled() }).description("Sign in to an upstream account").option("--email <email>", "Pre-populate email address on the login page").option("--sso", "Force SSO login flow").option("--console", "Use Console API usage billing instead of subscription auth").option("--claudeai", "Use subscription auth (default)").action(async ({
|
|
3129
|
+
email,
|
|
3130
|
+
sso,
|
|
3131
|
+
console: useConsole,
|
|
3132
|
+
claudeai
|
|
3133
|
+
}) => {
|
|
3134
|
+
const {
|
|
3135
|
+
authLogin
|
|
3136
|
+
} = await import("./cli/handlers/auth.js");
|
|
3137
|
+
await authLogin({
|
|
3138
|
+
email,
|
|
3139
|
+
sso,
|
|
3140
|
+
console: useConsole,
|
|
3141
|
+
claudeai
|
|
3142
|
+
});
|
|
3143
|
+
});
|
|
3144
|
+
auth.command("status").description("Show authentication status").option("--json", "Output as JSON (default)").option("--text", "Output as human-readable text").action(async (opts) => {
|
|
3145
|
+
const {
|
|
3146
|
+
authStatus
|
|
3147
|
+
} = await import("./cli/handlers/auth.js");
|
|
3148
|
+
await authStatus(opts);
|
|
3149
|
+
});
|
|
3150
|
+
auth.command("logout", { hidden: !isUpstreamFeatureEnabled() }).description("Log out from an upstream account").action(async () => {
|
|
3151
|
+
const {
|
|
3152
|
+
authLogout
|
|
3153
|
+
} = await import("./cli/handlers/auth.js");
|
|
3154
|
+
await authLogout();
|
|
3155
|
+
});
|
|
3156
|
+
const coworkOption = () => new Option("--cowork", "Use cowork_plugins directory").hideHelp();
|
|
3157
|
+
const pluginCmd = program.command("plugin").alias("plugins").description("Manage memCode plugins").configureHelp(createSortedHelpConfig());
|
|
3158
|
+
pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async (manifestPath, options) => {
|
|
3159
|
+
const {
|
|
3160
|
+
pluginValidateHandler
|
|
3161
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3162
|
+
await pluginValidateHandler(manifestPath, options);
|
|
3163
|
+
});
|
|
3164
|
+
pluginCmd.command("list").description("List installed plugins").option("--json", "Output as JSON").option("--available", "Include available plugins from marketplaces (requires --json)").addOption(coworkOption()).action(async (options) => {
|
|
3165
|
+
const {
|
|
3166
|
+
pluginListHandler
|
|
3167
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3168
|
+
await pluginListHandler(options);
|
|
3169
|
+
});
|
|
3170
|
+
const marketplaceCmd = pluginCmd.command("marketplace").description("Manage memCode marketplaces").configureHelp(createSortedHelpConfig());
|
|
3171
|
+
marketplaceCmd.command("add <source>").description("Add a marketplace from a URL, path, or GitHub repo").addOption(coworkOption()).option("--sparse <paths...>", "Limit checkout to specific directories via git sparse-checkout (for monorepos). Example: --sparse .claude-plugin plugins").option("--scope <scope>", "Where to declare the marketplace: user (default), project, or local").action(async (source, options) => {
|
|
3172
|
+
const {
|
|
3173
|
+
marketplaceAddHandler
|
|
3174
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3175
|
+
await marketplaceAddHandler(source, options);
|
|
3176
|
+
});
|
|
3177
|
+
marketplaceCmd.command("list").description("List all configured marketplaces").option("--json", "Output as JSON").addOption(coworkOption()).action(async (options) => {
|
|
3178
|
+
const {
|
|
3179
|
+
marketplaceListHandler
|
|
3180
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3181
|
+
await marketplaceListHandler(options);
|
|
3182
|
+
});
|
|
3183
|
+
marketplaceCmd.command("remove <name>").alias("rm").description("Remove a configured marketplace").addOption(coworkOption()).action(async (name, options) => {
|
|
3184
|
+
const {
|
|
3185
|
+
marketplaceRemoveHandler
|
|
3186
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3187
|
+
await marketplaceRemoveHandler(name, options);
|
|
3188
|
+
});
|
|
3189
|
+
marketplaceCmd.command("update [name]").description("Update marketplace(s) from their source - updates all if no name specified").addOption(coworkOption()).action(async (name, options) => {
|
|
3190
|
+
const {
|
|
3191
|
+
marketplaceUpdateHandler
|
|
3192
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3193
|
+
await marketplaceUpdateHandler(name, options);
|
|
3194
|
+
});
|
|
3195
|
+
pluginCmd.command("install <plugin>").alias("i").description("Install a plugin from available marketplaces (use plugin@marketplace for specific marketplace)").option("-s, --scope <scope>", "Installation scope: user, project, or local", "user").addOption(coworkOption()).action(async (plugin, options) => {
|
|
3196
|
+
const {
|
|
3197
|
+
pluginInstallHandler
|
|
3198
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3199
|
+
await pluginInstallHandler(plugin, options);
|
|
3200
|
+
});
|
|
3201
|
+
pluginCmd.command("uninstall <plugin>").alias("remove").alias("rm").description("Uninstall an installed plugin").option("-s, --scope <scope>", "Uninstall from scope: user, project, or local", "user").option("--keep-data", "Preserve the plugin's persistent data directory (~/.memcode/plugins/data/{id}/)").addOption(coworkOption()).action(async (plugin, options) => {
|
|
3202
|
+
const {
|
|
3203
|
+
pluginUninstallHandler
|
|
3204
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3205
|
+
await pluginUninstallHandler(plugin, options);
|
|
3206
|
+
});
|
|
3207
|
+
pluginCmd.command("enable <plugin>").description("Enable a disabled plugin").option("-s, --scope <scope>", `Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async (plugin, options) => {
|
|
3208
|
+
const {
|
|
3209
|
+
pluginEnableHandler
|
|
3210
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3211
|
+
await pluginEnableHandler(plugin, options);
|
|
3212
|
+
});
|
|
3213
|
+
pluginCmd.command("disable [plugin]").description("Disable an enabled plugin").option("-a, --all", "Disable all enabled plugins").option("-s, --scope <scope>", `Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async (plugin, options) => {
|
|
3214
|
+
const {
|
|
3215
|
+
pluginDisableHandler
|
|
3216
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3217
|
+
await pluginDisableHandler(plugin, options);
|
|
3218
|
+
});
|
|
3219
|
+
pluginCmd.command("update <plugin>").description("Update a plugin to the latest version (restart required to apply)").option("-s, --scope <scope>", `Installation scope: ${VALID_UPDATE_SCOPES.join(", ")} (default: user)`).addOption(coworkOption()).action(async (plugin, options) => {
|
|
3220
|
+
const {
|
|
3221
|
+
pluginUpdateHandler
|
|
3222
|
+
} = await import("./cli/handlers/plugins.js");
|
|
3223
|
+
await pluginUpdateHandler(plugin, options);
|
|
3224
|
+
});
|
|
3225
|
+
program.command("setup-token", { hidden: true }).description("Set up a long-lived authentication token").action(async () => {
|
|
3226
|
+
const [{
|
|
3227
|
+
setupTokenHandler
|
|
3228
|
+
}, {
|
|
3229
|
+
createRoot
|
|
3230
|
+
}] = await Promise.all([import("./cli/handlers/util.js"), import("./ink.js")]);
|
|
3231
|
+
const root = await createRoot(getBaseRenderOptions(false));
|
|
3232
|
+
await setupTokenHandler(root);
|
|
3233
|
+
});
|
|
3234
|
+
program.command("agents").description("List configured agents").option("--setting-sources <sources>", "Comma-separated list of setting sources to load (user, project, local).").action(async () => {
|
|
3235
|
+
const {
|
|
3236
|
+
agentsHandler
|
|
3237
|
+
} = await import("./cli/handlers/agents.js");
|
|
3238
|
+
await agentsHandler();
|
|
3239
|
+
process.exit(0);
|
|
3240
|
+
});
|
|
3241
|
+
if (feature("TRANSCRIPT_CLASSIFIER")) {
|
|
3242
|
+
if (getAutoModeEnabledStateIfCached() !== "disabled") {
|
|
3243
|
+
const autoModeCmd = program.command("auto-mode").description("Inspect auto mode classifier configuration");
|
|
3244
|
+
autoModeCmd.command("defaults").description("Print the default auto mode environment, allow, and deny rules as JSON").action(async () => {
|
|
3245
|
+
const {
|
|
3246
|
+
autoModeDefaultsHandler
|
|
3247
|
+
} = await import("./cli/handlers/autoMode.js");
|
|
3248
|
+
autoModeDefaultsHandler();
|
|
3249
|
+
process.exit(0);
|
|
3250
|
+
});
|
|
3251
|
+
autoModeCmd.command("config").description("Print the effective auto mode config as JSON: your settings where set, defaults otherwise").action(async () => {
|
|
3252
|
+
const {
|
|
3253
|
+
autoModeConfigHandler
|
|
3254
|
+
} = await import("./cli/handlers/autoMode.js");
|
|
3255
|
+
autoModeConfigHandler();
|
|
3256
|
+
process.exit(0);
|
|
3257
|
+
});
|
|
3258
|
+
autoModeCmd.command("critique").description("Get AI feedback on your custom auto mode rules").option("--model <model>", "Override which model is used").action(async (options) => {
|
|
3259
|
+
const {
|
|
3260
|
+
autoModeCritiqueHandler
|
|
3261
|
+
} = await import("./cli/handlers/autoMode.js");
|
|
3262
|
+
await autoModeCritiqueHandler(options);
|
|
3263
|
+
process.exit();
|
|
3264
|
+
});
|
|
3265
|
+
}
|
|
3266
|
+
}
|
|
3267
|
+
if (isBridgeModeAvailable()) {
|
|
3268
|
+
program.command("remote-control", {
|
|
3269
|
+
hidden: true
|
|
3270
|
+
}).alias("rc").description("Connect your local environment for remote-control sessions via memCode").action(async () => {
|
|
3271
|
+
const {
|
|
3272
|
+
bridgeMain
|
|
3273
|
+
} = await import("./bridge/bridgeMain.js");
|
|
3274
|
+
await bridgeMain(process.argv.slice(3));
|
|
3275
|
+
});
|
|
3276
|
+
}
|
|
3277
|
+
if (feature("KAIROS")) {
|
|
3278
|
+
program.command("assistant [sessionId]").description("Attach the REPL as a client to a running bridge session. Discovers sessions via API if no sessionId given.").action(() => {
|
|
3279
|
+
process.stderr.write("Usage: memcode assistant [sessionId]\n\nAttach the REPL as a viewer client to a running bridge session.\nOmit sessionId to discover and pick from available sessions.\n");
|
|
3280
|
+
process.exit(1);
|
|
3281
|
+
});
|
|
3282
|
+
}
|
|
3283
|
+
program.command("doctor").description("Check the health of your memCode auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async () => {
|
|
3284
|
+
const {
|
|
3285
|
+
doctorHandler
|
|
3286
|
+
} = await import("./cli/handlers/util.js");
|
|
3287
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
3288
|
+
await doctorHandler({
|
|
3289
|
+
render() {
|
|
3290
|
+
},
|
|
3291
|
+
unmount() {
|
|
3292
|
+
}
|
|
3293
|
+
});
|
|
3294
|
+
return;
|
|
3295
|
+
}
|
|
3296
|
+
const {
|
|
3297
|
+
createRoot
|
|
3298
|
+
} = await import("./ink.js");
|
|
3299
|
+
const root = await createRoot(getBaseRenderOptions(false));
|
|
3300
|
+
await doctorHandler(root);
|
|
3301
|
+
});
|
|
3302
|
+
program.command("update").alias("upgrade").description("Check for updates and install if available").action(async () => {
|
|
3303
|
+
const {
|
|
3304
|
+
update
|
|
3305
|
+
} = await import("src/cli/update.js");
|
|
3306
|
+
await update();
|
|
3307
|
+
});
|
|
3308
|
+
if (false) {
|
|
3309
|
+
program.command("up").description('[ANT-ONLY] Initialize or upgrade the local dev environment using the "# claude up" section of the nearest XCODE.md').action(async () => {
|
|
3310
|
+
const {
|
|
3311
|
+
up
|
|
3312
|
+
} = await null;
|
|
3313
|
+
await up();
|
|
3314
|
+
});
|
|
3315
|
+
}
|
|
3316
|
+
if (false) {
|
|
3317
|
+
program.command("rollback [target]").description("[ANT-ONLY] Roll back to a previous release\n\nExamples:\n memcode rollback Go 1 version back from current\n memcode rollback 3 Go 3 versions back from current\n memcode rollback 2.0.73-dev.20251217.t190658 Roll back to a specific version").option("-l, --list", "List recent published versions with ages").option("--dry-run", "Show what would be installed without installing").option("--safe", "Roll back to the server-pinned safe version (set by oncall during incidents)").action(async (target, options) => {
|
|
3318
|
+
const {
|
|
3319
|
+
rollback
|
|
3320
|
+
} = await null;
|
|
3321
|
+
await rollback(target, options);
|
|
3322
|
+
});
|
|
3323
|
+
}
|
|
3324
|
+
program.command("install [target]").description("Install memCode native build. Use [target] to specify version (stable, latest, or specific version)").option("--force", "Force installation even if already installed").action(async (target, options) => {
|
|
3325
|
+
const {
|
|
3326
|
+
installHandler
|
|
3327
|
+
} = await import("./cli/handlers/util.js");
|
|
3328
|
+
await installHandler(target, options);
|
|
3329
|
+
});
|
|
3330
|
+
if (false) {
|
|
3331
|
+
const validateLogId = (value) => {
|
|
3332
|
+
const maybeSessionId = validateUuid(value);
|
|
3333
|
+
if (maybeSessionId) return maybeSessionId;
|
|
3334
|
+
return Number(value);
|
|
3335
|
+
};
|
|
3336
|
+
program.command("log").description("[ANT-ONLY] Manage conversation logs.").argument("[number|sessionId]", "A number (0, 1, 2, etc.) to display a specific log, or the sesssion ID (uuid) of a log", validateLogId).action(async (logId) => {
|
|
3337
|
+
const {
|
|
3338
|
+
logHandler
|
|
3339
|
+
} = await null;
|
|
3340
|
+
await logHandler(logId);
|
|
3341
|
+
});
|
|
3342
|
+
program.command("error").description("[ANT-ONLY] View error logs. Optionally provide a number (0, -1, -2, etc.) to display a specific log.").argument("[number]", "A number (0, 1, 2, etc.) to display a specific log", parseInt).action(async (number) => {
|
|
3343
|
+
const {
|
|
3344
|
+
errorHandler
|
|
3345
|
+
} = await null;
|
|
3346
|
+
await errorHandler(number);
|
|
3347
|
+
});
|
|
3348
|
+
program.command("export").description("[ANT-ONLY] Export a conversation to a text file.").usage("<source> <outputFile>").argument("<source>", "Session ID, log index (0, 1, 2...), or path to a .json/.jsonl log file").argument("<outputFile>", "Output file path for the exported text").addHelpText("after", `
|
|
3349
|
+
Examples:
|
|
3350
|
+
$ claude export 0 conversation.txt Export conversation at log index 0
|
|
3351
|
+
$ claude export <uuid> conversation.txt Export conversation by session ID
|
|
3352
|
+
$ claude export input.json output.txt Render JSON log file to text
|
|
3353
|
+
$ claude export <uuid>.jsonl output.txt Render JSONL session file to text`).action(async (source, outputFile) => {
|
|
3354
|
+
const {
|
|
3355
|
+
exportHandler
|
|
3356
|
+
} = await null;
|
|
3357
|
+
await exportHandler(source, outputFile);
|
|
3358
|
+
});
|
|
3359
|
+
if (false) {
|
|
3360
|
+
const taskCmd = program.command("task").description("[ANT-ONLY] Manage task list tasks");
|
|
3361
|
+
taskCmd.command("create <subject>").description("Create a new task").option("-d, --description <text>", "Task description").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (subject, opts) => {
|
|
3362
|
+
const {
|
|
3363
|
+
taskCreateHandler
|
|
3364
|
+
} = await null;
|
|
3365
|
+
await taskCreateHandler(subject, opts);
|
|
3366
|
+
});
|
|
3367
|
+
taskCmd.command("list").description("List all tasks").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').option("--pending", "Show only pending tasks").option("--json", "Output as JSON").action(async (opts) => {
|
|
3368
|
+
const {
|
|
3369
|
+
taskListHandler
|
|
3370
|
+
} = await null;
|
|
3371
|
+
await taskListHandler(opts);
|
|
3372
|
+
});
|
|
3373
|
+
taskCmd.command("get <id>").description("Get details of a task").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (id, opts) => {
|
|
3374
|
+
const {
|
|
3375
|
+
taskGetHandler
|
|
3376
|
+
} = await null;
|
|
3377
|
+
await taskGetHandler(id, opts);
|
|
3378
|
+
});
|
|
3379
|
+
taskCmd.command("update <id>").description("Update a task").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').option("-s, --status <status>", `Set status (${TASK_STATUSES.join(", ")})`).option("--subject <text>", "Update subject").option("-d, --description <text>", "Update description").option("--owner <agentId>", "Set owner").option("--clear-owner", "Clear owner").action(async (id, opts) => {
|
|
3380
|
+
const {
|
|
3381
|
+
taskUpdateHandler
|
|
3382
|
+
} = await null;
|
|
3383
|
+
await taskUpdateHandler(id, opts);
|
|
3384
|
+
});
|
|
3385
|
+
taskCmd.command("dir").description("Show the tasks directory path").option("-l, --list <id>", 'Task list ID (defaults to "tasklist")').action(async (opts) => {
|
|
3386
|
+
const {
|
|
3387
|
+
taskDirHandler
|
|
3388
|
+
} = await null;
|
|
3389
|
+
await taskDirHandler(opts);
|
|
3390
|
+
});
|
|
3391
|
+
}
|
|
3392
|
+
program.command("completion <shell>", {
|
|
3393
|
+
hidden: true
|
|
3394
|
+
}).description("Generate shell completion script (bash, zsh, or fish)").option("--output <file>", "Write completion script directly to a file instead of stdout").action(async (shell, opts) => {
|
|
3395
|
+
const {
|
|
3396
|
+
completionHandler
|
|
3397
|
+
} = await null;
|
|
3398
|
+
await completionHandler(shell, opts, program);
|
|
3399
|
+
});
|
|
3400
|
+
}
|
|
3401
|
+
program.command("completion <shell>").description("Generate shell completion script (bash, zsh, or fish)").option("--output <file>", "Write completion script directly to a file instead of stdout").action(async (shell, opts) => {
|
|
3402
|
+
const commands = program.commands.map((command) => command.name()).sort().join(" ");
|
|
3403
|
+
let script;
|
|
3404
|
+
switch (shell) {
|
|
3405
|
+
case "bash":
|
|
3406
|
+
script = `# bash completion for memcode
|
|
3407
|
+
_memcode_completions() {
|
|
3408
|
+
local cur
|
|
3409
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
3410
|
+
if [[ \${COMP_CWORD} -eq 1 ]]; then
|
|
3411
|
+
COMPREPLY=( $(compgen -W "${commands}" -- "$cur") )
|
|
3412
|
+
fi
|
|
3413
|
+
}
|
|
3414
|
+
complete -F _memcode_completions memcode
|
|
3415
|
+
`;
|
|
3416
|
+
break;
|
|
3417
|
+
case "zsh":
|
|
3418
|
+
script = `#compdef memcode
|
|
3419
|
+
_memcode() {
|
|
3420
|
+
local -a commands
|
|
3421
|
+
commands=(${commands})
|
|
3422
|
+
_describe 'command' commands
|
|
3423
|
+
}
|
|
3424
|
+
compdef _memcode memcode
|
|
3425
|
+
`;
|
|
3426
|
+
break;
|
|
3427
|
+
case "fish":
|
|
3428
|
+
script = `# fish completion for memcode
|
|
3429
|
+
complete -c memcode -f -a "${commands}"
|
|
3430
|
+
`;
|
|
3431
|
+
break;
|
|
3432
|
+
default:
|
|
3433
|
+
process.stderr.write("Unsupported shell. Expected one of: bash, zsh, fish\n");
|
|
3434
|
+
process.exit(1);
|
|
3435
|
+
}
|
|
3436
|
+
if (opts.output) {
|
|
3437
|
+
writeFileSync(opts.output, script);
|
|
3438
|
+
} else {
|
|
3439
|
+
process.stdout.write(script);
|
|
3440
|
+
}
|
|
3441
|
+
process.exit(0);
|
|
3442
|
+
});
|
|
3443
|
+
profileCheckpoint("run_before_parse");
|
|
3444
|
+
await program.parseAsync(process.argv);
|
|
3445
|
+
profileCheckpoint("run_after_parse");
|
|
3446
|
+
profileCheckpoint("main_after_run");
|
|
3447
|
+
profileReport();
|
|
3448
|
+
return program;
|
|
3449
|
+
}
|
|
3450
|
+
async function logTenguInit({
|
|
3451
|
+
hasInitialPrompt,
|
|
3452
|
+
hasStdin,
|
|
3453
|
+
verbose,
|
|
3454
|
+
debug,
|
|
3455
|
+
debugToStderr,
|
|
3456
|
+
print,
|
|
3457
|
+
outputFormat,
|
|
3458
|
+
inputFormat,
|
|
3459
|
+
numAllowedTools,
|
|
3460
|
+
numDisallowedTools,
|
|
3461
|
+
mcpClientCount,
|
|
3462
|
+
worktreeEnabled,
|
|
3463
|
+
skipWebFetchPreflight,
|
|
3464
|
+
githubActionInputs,
|
|
3465
|
+
dangerouslySkipPermissionsPassed,
|
|
3466
|
+
permissionMode,
|
|
3467
|
+
modeIsBypass,
|
|
3468
|
+
allowDangerouslySkipPermissionsPassed,
|
|
3469
|
+
systemPromptFlag,
|
|
3470
|
+
appendSystemPromptFlag,
|
|
3471
|
+
thinkingConfig,
|
|
3472
|
+
assistantActivationPath
|
|
3473
|
+
}) {
|
|
3474
|
+
try {
|
|
3475
|
+
logEvent("tengu_init", {
|
|
3476
|
+
entrypoint: "claude",
|
|
3477
|
+
hasInitialPrompt,
|
|
3478
|
+
hasStdin,
|
|
3479
|
+
verbose,
|
|
3480
|
+
debug,
|
|
3481
|
+
debugToStderr,
|
|
3482
|
+
print,
|
|
3483
|
+
outputFormat,
|
|
3484
|
+
inputFormat,
|
|
3485
|
+
numAllowedTools,
|
|
3486
|
+
numDisallowedTools,
|
|
3487
|
+
mcpClientCount,
|
|
3488
|
+
worktree: worktreeEnabled,
|
|
3489
|
+
skipWebFetchPreflight,
|
|
3490
|
+
...githubActionInputs && {
|
|
3491
|
+
githubActionInputs
|
|
3492
|
+
},
|
|
3493
|
+
dangerouslySkipPermissionsPassed,
|
|
3494
|
+
permissionMode,
|
|
3495
|
+
modeIsBypass,
|
|
3496
|
+
inProtectedNamespace: isInProtectedNamespace(),
|
|
3497
|
+
allowDangerouslySkipPermissionsPassed,
|
|
3498
|
+
thinkingType: thinkingConfig.type,
|
|
3499
|
+
...systemPromptFlag && {
|
|
3500
|
+
systemPromptFlag
|
|
3501
|
+
},
|
|
3502
|
+
...appendSystemPromptFlag && {
|
|
3503
|
+
appendSystemPromptFlag
|
|
3504
|
+
},
|
|
3505
|
+
is_simple: isBareMode() || void 0,
|
|
3506
|
+
is_coordinator: feature("COORDINATOR_MODE") && coordinatorModeModule?.isCoordinatorMode() ? true : void 0,
|
|
3507
|
+
...assistantActivationPath && {
|
|
3508
|
+
assistantActivationPath
|
|
3509
|
+
},
|
|
3510
|
+
autoUpdatesChannel: getInitialSettings().autoUpdatesChannel ?? "latest",
|
|
3511
|
+
...false ? (() => {
|
|
3512
|
+
const cwd = getCwd();
|
|
3513
|
+
const gitRoot = findGitRoot(cwd);
|
|
3514
|
+
const rp = gitRoot ? relative(gitRoot, cwd) || "." : void 0;
|
|
3515
|
+
return rp ? {
|
|
3516
|
+
relativeProjectPath: rp
|
|
3517
|
+
} : {};
|
|
3518
|
+
})() : {}
|
|
3519
|
+
});
|
|
3520
|
+
} catch (error) {
|
|
3521
|
+
logError(error);
|
|
3522
|
+
}
|
|
3523
|
+
}
|
|
3524
|
+
function maybeActivateProactive(options) {
|
|
3525
|
+
if ((feature("PROACTIVE") || feature("KAIROS")) && (options.proactive || isEnvTruthy(process.env.XCODE_PROACTIVE))) {
|
|
3526
|
+
const proactiveModule = require("./proactive/index.js");
|
|
3527
|
+
if (!proactiveModule.isProactiveActive()) {
|
|
3528
|
+
proactiveModule.activateProactive("command");
|
|
3529
|
+
}
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
function maybeActivateBrief(options) {
|
|
3533
|
+
if (!(feature("KAIROS") || feature("KAIROS_BRIEF"))) return;
|
|
3534
|
+
const briefFlag = options.brief;
|
|
3535
|
+
const briefEnv = isEnvTruthy(process.env.XCODE_BRIEF);
|
|
3536
|
+
if (!briefFlag && !briefEnv) return;
|
|
3537
|
+
const {
|
|
3538
|
+
isBriefEntitled
|
|
3539
|
+
} = require("./tools/BriefTool/BriefTool.js");
|
|
3540
|
+
const entitled = isBriefEntitled();
|
|
3541
|
+
if (entitled) {
|
|
3542
|
+
setUserMsgOptIn(true);
|
|
3543
|
+
}
|
|
3544
|
+
logEvent("tengu_brief_mode_enabled", {
|
|
3545
|
+
enabled: entitled,
|
|
3546
|
+
gated: !entitled,
|
|
3547
|
+
source: briefEnv ? "env" : "flag"
|
|
3548
|
+
});
|
|
3549
|
+
}
|
|
3550
|
+
function resetCursor() {
|
|
3551
|
+
const terminal = process.stderr.isTTY ? process.stderr : process.stdout.isTTY ? process.stdout : void 0;
|
|
3552
|
+
terminal?.write(SHOW_CURSOR);
|
|
3553
|
+
}
|
|
3554
|
+
function extractTeammateOptions(options) {
|
|
3555
|
+
if (typeof options !== "object" || options === null) {
|
|
3556
|
+
return {};
|
|
3557
|
+
}
|
|
3558
|
+
const opts = options;
|
|
3559
|
+
const teammateMode = opts.teammateMode;
|
|
3560
|
+
return {
|
|
3561
|
+
agentId: typeof opts.agentId === "string" ? opts.agentId : void 0,
|
|
3562
|
+
agentName: typeof opts.agentName === "string" ? opts.agentName : void 0,
|
|
3563
|
+
teamName: typeof opts.teamName === "string" ? opts.teamName : void 0,
|
|
3564
|
+
agentColor: typeof opts.agentColor === "string" ? opts.agentColor : void 0,
|
|
3565
|
+
planModeRequired: typeof opts.planModeRequired === "boolean" ? opts.planModeRequired : void 0,
|
|
3566
|
+
parentSessionId: typeof opts.parentSessionId === "string" ? opts.parentSessionId : void 0,
|
|
3567
|
+
teammateMode: teammateMode === "auto" || teammateMode === "tmux" || teammateMode === "in-process" ? teammateMode : void 0,
|
|
3568
|
+
agentType: typeof opts.agentType === "string" ? opts.agentType : void 0
|
|
3569
|
+
};
|
|
3570
|
+
}
|
|
3571
|
+
export {
|
|
3572
|
+
main,
|
|
3573
|
+
startDeferredPrefetches
|
|
3574
|
+
};
|