@xortex/xcode 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +171 -0
- package/bin/xcode +127 -0
- package/bin/xcode-test +84 -0
- package/bin/xcode.cmd +31 -0
- package/constants/apiLimits.ts +94 -0
- package/constants/betas.ts +52 -0
- package/constants/common.ts +33 -0
- package/constants/cyberRiskInstruction.ts +24 -0
- package/constants/errorIds.ts +15 -0
- package/constants/figures.ts +45 -0
- package/constants/files.ts +156 -0
- package/constants/github-app.ts +144 -0
- package/constants/keys.ts +11 -0
- package/constants/messages.ts +1 -0
- package/constants/oauth.ts +234 -0
- package/constants/outputStyles.ts +216 -0
- package/constants/product.ts +76 -0
- package/constants/prompts.ts +939 -0
- package/constants/spinnerVerbs.ts +204 -0
- package/constants/system.ts +95 -0
- package/constants/systemPromptSections.ts +68 -0
- package/constants/toolLimits.ts +56 -0
- package/constants/tools.ts +112 -0
- package/constants/turnCompletionVerbs.ts +12 -0
- package/constants/xml.ts +86 -0
- package/entrypoints/agentSdkTypes.ts +443 -0
- package/entrypoints/cli.tsx +307 -0
- package/entrypoints/init.ts +340 -0
- package/entrypoints/mcp.ts +196 -0
- package/entrypoints/sandboxTypes.ts +156 -0
- package/entrypoints/sdk/controlSchemas.ts +663 -0
- package/entrypoints/sdk/coreSchemas.ts +1889 -0
- package/entrypoints/sdk/coreTypes.generated.ts +2 -0
- package/entrypoints/sdk/coreTypes.ts +62 -0
- package/entrypoints/sdk/runtimeTypes.ts +140 -0
- package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
- package/entrypoints/sdk/toolTypes.ts +90 -0
- package/main.tsx +4686 -0
- package/package.json +120 -0
- package/services/AgentSummary/agentSummary.ts +179 -0
- package/services/MagicDocs/magicDocs.ts +254 -0
- package/services/MagicDocs/prompts.ts +127 -0
- package/services/PromptSuggestion/promptSuggestion.ts +523 -0
- package/services/PromptSuggestion/speculation.ts +991 -0
- package/services/SessionMemory/prompts.ts +324 -0
- package/services/SessionMemory/sessionMemory.ts +495 -0
- package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
- package/services/analytics/config.ts +38 -0
- package/services/analytics/datadog.ts +307 -0
- package/services/analytics/firstPartyEventLogger.ts +449 -0
- package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
- package/services/analytics/growthbook.ts +1155 -0
- package/services/analytics/index.ts +173 -0
- package/services/analytics/metadata.ts +973 -0
- package/services/analytics/sink.ts +114 -0
- package/services/analytics/sinkKillswitch.ts +25 -0
- package/services/api/adminRequests.ts +119 -0
- package/services/api/bootstrap.ts +141 -0
- package/services/api/claude.ts +3422 -0
- package/services/api/client.ts +406 -0
- package/services/api/dumpPrompts.ts +226 -0
- package/services/api/emptyUsage.ts +22 -0
- package/services/api/errorUtils.ts +260 -0
- package/services/api/errors.ts +1207 -0
- package/services/api/filesApi.ts +748 -0
- package/services/api/firstTokenDate.ts +60 -0
- package/services/api/gemini.ts +359 -0
- package/services/api/geminiAdapter.ts +123 -0
- package/services/api/geminiClient.ts +291 -0
- package/services/api/grove.ts +357 -0
- package/services/api/logging.ts +788 -0
- package/services/api/metricsOptOut.ts +159 -0
- package/services/api/openRouterClient.ts +453 -0
- package/services/api/overageCreditGrant.ts +137 -0
- package/services/api/promptCacheBreakDetection.ts +727 -0
- package/services/api/referral.ts +281 -0
- package/services/api/sessionIngress.ts +514 -0
- package/services/api/ultrareviewQuota.ts +38 -0
- package/services/api/usage.ts +63 -0
- package/services/api/withRetry.ts +822 -0
- package/services/autoDream/autoDream.ts +324 -0
- package/services/autoDream/config.ts +21 -0
- package/services/autoDream/consolidationLock.ts +140 -0
- package/services/autoDream/consolidationPrompt.ts +65 -0
- package/services/awaySummary.ts +74 -0
- package/services/claudeAiLimits.ts +515 -0
- package/services/claudeAiLimitsHook.ts +23 -0
- package/services/compact/apiMicrocompact.ts +153 -0
- package/services/compact/autoCompact.ts +351 -0
- package/services/compact/compact.ts +1705 -0
- package/services/compact/compactWarningHook.ts +16 -0
- package/services/compact/compactWarningState.ts +18 -0
- package/services/compact/grouping.ts +63 -0
- package/services/compact/microCompact.ts +530 -0
- package/services/compact/postCompactCleanup.ts +77 -0
- package/services/compact/prompt.ts +374 -0
- package/services/compact/sessionMemoryCompact.ts +630 -0
- package/services/compact/timeBasedMCConfig.ts +43 -0
- package/services/diagnosticTracking.ts +397 -0
- package/services/extractMemories/extractMemories.ts +517 -0
- package/services/extractMemories/prompts.ts +154 -0
- package/services/internalLogging.ts +90 -0
- package/services/lsp/LSPClient.ts +447 -0
- package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
- package/services/lsp/LSPServerInstance.ts +511 -0
- package/services/lsp/LSPServerManager.ts +420 -0
- package/services/lsp/config.ts +79 -0
- package/services/lsp/manager.ts +289 -0
- package/services/lsp/passiveFeedback.ts +328 -0
- package/services/mcp/InProcessTransport.ts +63 -0
- package/services/mcp/MCPConnectionManager.tsx +73 -0
- package/services/mcp/SdkControlTransport.ts +136 -0
- package/services/mcp/auth.ts +2465 -0
- package/services/mcp/channelAllowlist.ts +76 -0
- package/services/mcp/channelNotification.ts +316 -0
- package/services/mcp/channelPermissions.ts +240 -0
- package/services/mcp/claudeai.ts +164 -0
- package/services/mcp/client.ts +3348 -0
- package/services/mcp/config.ts +1578 -0
- package/services/mcp/elicitationHandler.ts +313 -0
- package/services/mcp/envExpansion.ts +38 -0
- package/services/mcp/headersHelper.ts +138 -0
- package/services/mcp/mcpStringUtils.ts +106 -0
- package/services/mcp/normalization.ts +23 -0
- package/services/mcp/oauthPort.ts +78 -0
- package/services/mcp/officialRegistry.ts +72 -0
- package/services/mcp/types.ts +258 -0
- package/services/mcp/useManageMCPConnections.ts +1141 -0
- package/services/mcp/utils.ts +575 -0
- package/services/mcp/vscodeSdkMcp.ts +112 -0
- package/services/mcp/xaa.ts +511 -0
- package/services/mcp/xaaIdpLogin.ts +487 -0
- package/services/mcpServerApproval.tsx +41 -0
- package/services/mockRateLimits.ts +882 -0
- package/services/notifier.ts +156 -0
- package/services/oauth/auth-code-listener.ts +211 -0
- package/services/oauth/client.ts +566 -0
- package/services/oauth/crypto.ts +23 -0
- package/services/oauth/getOauthProfile.ts +53 -0
- package/services/oauth/index.ts +198 -0
- package/services/plugins/PluginInstallationManager.ts +184 -0
- package/services/plugins/pluginCliCommands.ts +344 -0
- package/services/plugins/pluginOperations.ts +1088 -0
- package/services/policyLimits/index.ts +663 -0
- package/services/policyLimits/types.ts +27 -0
- package/services/preventSleep.ts +165 -0
- package/services/rateLimitMessages.ts +344 -0
- package/services/rateLimitMocking.ts +144 -0
- package/services/remoteManagedSettings/index.ts +638 -0
- package/services/remoteManagedSettings/securityCheck.tsx +74 -0
- package/services/remoteManagedSettings/syncCache.ts +112 -0
- package/services/remoteManagedSettings/syncCacheState.ts +96 -0
- package/services/remoteManagedSettings/types.ts +31 -0
- package/services/settingsSync/index.ts +581 -0
- package/services/settingsSync/types.ts +67 -0
- package/services/teamMemorySync/index.ts +1256 -0
- package/services/teamMemorySync/secretScanner.ts +324 -0
- package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
- package/services/teamMemorySync/types.ts +156 -0
- package/services/teamMemorySync/watcher.ts +387 -0
- package/services/tips/tipHistory.ts +17 -0
- package/services/tips/tipRegistry.ts +686 -0
- package/services/tips/tipScheduler.ts +58 -0
- package/services/tokenEstimation.ts +495 -0
- package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
- package/services/tools/StreamingToolExecutor.ts +530 -0
- package/services/tools/toolExecution.ts +1745 -0
- package/services/tools/toolHooks.ts +650 -0
- package/services/tools/toolOrchestration.ts +188 -0
- package/services/vcr.ts +406 -0
- package/services/voice.ts +525 -0
- package/services/voiceKeyterms.ts +106 -0
- package/services/voiceStreamSTT.ts +544 -0
- package/tools/AgentTool/AgentTool.tsx +1398 -0
- package/tools/AgentTool/UI.tsx +872 -0
- package/tools/AgentTool/agentColorManager.ts +66 -0
- package/tools/AgentTool/agentDisplay.ts +104 -0
- package/tools/AgentTool/agentMemory.ts +177 -0
- package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
- package/tools/AgentTool/agentToolUtils.ts +686 -0
- package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
- package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
- package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
- package/tools/AgentTool/built-in/planAgent.ts +92 -0
- package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
- package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
- package/tools/AgentTool/builtInAgents.ts +72 -0
- package/tools/AgentTool/constants.ts +12 -0
- package/tools/AgentTool/forkSubagent.ts +210 -0
- package/tools/AgentTool/loadAgentsDir.ts +755 -0
- package/tools/AgentTool/prompt.ts +287 -0
- package/tools/AgentTool/resumeAgent.ts +265 -0
- package/tools/AgentTool/runAgent.ts +973 -0
- package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
- package/tools/AskUserQuestionTool/prompt.ts +44 -0
- package/tools/BashTool/BashTool.tsx +1144 -0
- package/tools/BashTool/BashToolResultMessage.tsx +191 -0
- package/tools/BashTool/UI.tsx +185 -0
- package/tools/BashTool/bashCommandHelpers.ts +265 -0
- package/tools/BashTool/bashPermissions.ts +2621 -0
- package/tools/BashTool/bashSecurity.ts +2592 -0
- package/tools/BashTool/commandSemantics.ts +140 -0
- package/tools/BashTool/commentLabel.ts +13 -0
- package/tools/BashTool/destructiveCommandWarning.ts +102 -0
- package/tools/BashTool/modeValidation.ts +115 -0
- package/tools/BashTool/pathValidation.ts +1303 -0
- package/tools/BashTool/prompt.ts +369 -0
- package/tools/BashTool/readOnlyValidation.ts +1990 -0
- package/tools/BashTool/sedEditParser.ts +322 -0
- package/tools/BashTool/sedValidation.ts +684 -0
- package/tools/BashTool/shouldUseSandbox.ts +153 -0
- package/tools/BashTool/toolName.ts +2 -0
- package/tools/BashTool/utils.ts +223 -0
- package/tools/BriefTool/BriefTool.ts +204 -0
- package/tools/BriefTool/UI.tsx +101 -0
- package/tools/BriefTool/attachments.ts +110 -0
- package/tools/BriefTool/prompt.ts +22 -0
- package/tools/BriefTool/upload.ts +174 -0
- package/tools/ConfigTool/ConfigTool.ts +467 -0
- package/tools/ConfigTool/UI.tsx +38 -0
- package/tools/ConfigTool/constants.ts +1 -0
- package/tools/ConfigTool/prompt.ts +93 -0
- package/tools/ConfigTool/supportedSettings.ts +211 -0
- package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
- package/tools/EnterPlanModeTool/UI.tsx +33 -0
- package/tools/EnterPlanModeTool/constants.ts +1 -0
- package/tools/EnterPlanModeTool/prompt.ts +170 -0
- package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
- package/tools/EnterWorktreeTool/UI.tsx +20 -0
- package/tools/EnterWorktreeTool/constants.ts +1 -0
- package/tools/EnterWorktreeTool/prompt.ts +30 -0
- package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
- package/tools/ExitPlanModeTool/UI.tsx +82 -0
- package/tools/ExitPlanModeTool/constants.ts +2 -0
- package/tools/ExitPlanModeTool/prompt.ts +29 -0
- package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
- package/tools/ExitWorktreeTool/UI.tsx +25 -0
- package/tools/ExitWorktreeTool/constants.ts +1 -0
- package/tools/ExitWorktreeTool/prompt.ts +32 -0
- package/tools/FileEditTool/FileEditTool.ts +625 -0
- package/tools/FileEditTool/UI.tsx +289 -0
- package/tools/FileEditTool/constants.ts +11 -0
- package/tools/FileEditTool/prompt.ts +28 -0
- package/tools/FileEditTool/types.ts +85 -0
- package/tools/FileEditTool/utils.ts +775 -0
- package/tools/FileReadTool/FileReadTool.ts +1183 -0
- package/tools/FileReadTool/UI.tsx +185 -0
- package/tools/FileReadTool/imageProcessor.ts +94 -0
- package/tools/FileReadTool/limits.ts +92 -0
- package/tools/FileReadTool/prompt.ts +49 -0
- package/tools/FileWriteTool/FileWriteTool.ts +434 -0
- package/tools/FileWriteTool/UI.tsx +405 -0
- package/tools/FileWriteTool/prompt.ts +18 -0
- package/tools/GlobTool/GlobTool.ts +198 -0
- package/tools/GlobTool/UI.tsx +63 -0
- package/tools/GlobTool/prompt.ts +7 -0
- package/tools/GrepTool/GrepTool.ts +577 -0
- package/tools/GrepTool/UI.tsx +201 -0
- package/tools/GrepTool/prompt.ts +18 -0
- package/tools/LSPTool/LSPTool.ts +860 -0
- package/tools/LSPTool/UI.tsx +228 -0
- package/tools/LSPTool/formatters.ts +592 -0
- package/tools/LSPTool/prompt.ts +21 -0
- package/tools/LSPTool/schemas.ts +215 -0
- package/tools/LSPTool/symbolContext.ts +90 -0
- package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
- package/tools/ListMcpResourcesTool/UI.tsx +29 -0
- package/tools/ListMcpResourcesTool/prompt.ts +20 -0
- package/tools/MCPTool/MCPTool.ts +77 -0
- package/tools/MCPTool/UI.tsx +403 -0
- package/tools/MCPTool/classifyForCollapse.ts +604 -0
- package/tools/MCPTool/prompt.ts +3 -0
- package/tools/McpAuthTool/McpAuthTool.ts +215 -0
- package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
- package/tools/NotebookEditTool/UI.tsx +93 -0
- package/tools/NotebookEditTool/constants.ts +2 -0
- package/tools/NotebookEditTool/prompt.ts +3 -0
- package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
- package/tools/PowerShellTool/UI.tsx +131 -0
- package/tools/PowerShellTool/clmTypes.ts +211 -0
- package/tools/PowerShellTool/commandSemantics.ts +142 -0
- package/tools/PowerShellTool/commonParameters.ts +30 -0
- package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
- package/tools/PowerShellTool/gitSafety.ts +176 -0
- package/tools/PowerShellTool/modeValidation.ts +404 -0
- package/tools/PowerShellTool/pathValidation.ts +2049 -0
- package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
- package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
- package/tools/PowerShellTool/prompt.ts +145 -0
- package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
- package/tools/PowerShellTool/toolName.ts +2 -0
- package/tools/REPLTool/constants.ts +46 -0
- package/tools/REPLTool/primitiveTools.ts +39 -0
- package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
- package/tools/ReadMcpResourceTool/UI.tsx +37 -0
- package/tools/ReadMcpResourceTool/prompt.ts +16 -0
- package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
- package/tools/RemoteTriggerTool/UI.tsx +17 -0
- package/tools/RemoteTriggerTool/prompt.ts +15 -0
- package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
- package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
- package/tools/ScheduleCronTool/CronListTool.ts +97 -0
- package/tools/ScheduleCronTool/UI.tsx +60 -0
- package/tools/ScheduleCronTool/prompt.ts +135 -0
- package/tools/SendMessageTool/SendMessageTool.ts +917 -0
- package/tools/SendMessageTool/UI.tsx +31 -0
- package/tools/SendMessageTool/constants.ts +1 -0
- package/tools/SendMessageTool/prompt.ts +49 -0
- package/tools/SkillTool/SkillTool.ts +1108 -0
- package/tools/SkillTool/UI.tsx +128 -0
- package/tools/SkillTool/constants.ts +1 -0
- package/tools/SkillTool/prompt.ts +241 -0
- package/tools/SleepTool/prompt.ts +17 -0
- package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
- package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
- package/tools/TaskCreateTool/constants.ts +1 -0
- package/tools/TaskCreateTool/prompt.ts +56 -0
- package/tools/TaskGetTool/TaskGetTool.ts +128 -0
- package/tools/TaskGetTool/constants.ts +1 -0
- package/tools/TaskGetTool/prompt.ts +24 -0
- package/tools/TaskListTool/TaskListTool.ts +116 -0
- package/tools/TaskListTool/constants.ts +1 -0
- package/tools/TaskListTool/prompt.ts +49 -0
- package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
- package/tools/TaskOutputTool/constants.ts +1 -0
- package/tools/TaskStopTool/TaskStopTool.ts +131 -0
- package/tools/TaskStopTool/UI.tsx +41 -0
- package/tools/TaskStopTool/prompt.ts +8 -0
- package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
- package/tools/TaskUpdateTool/constants.ts +1 -0
- package/tools/TaskUpdateTool/prompt.ts +77 -0
- package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
- package/tools/TeamCreateTool/UI.tsx +6 -0
- package/tools/TeamCreateTool/constants.ts +1 -0
- package/tools/TeamCreateTool/prompt.ts +113 -0
- package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
- package/tools/TeamDeleteTool/UI.tsx +20 -0
- package/tools/TeamDeleteTool/constants.ts +1 -0
- package/tools/TeamDeleteTool/prompt.ts +16 -0
- package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
- package/tools/TodoWriteTool/constants.ts +1 -0
- package/tools/TodoWriteTool/prompt.ts +184 -0
- package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
- package/tools/ToolSearchTool/constants.ts +1 -0
- package/tools/ToolSearchTool/prompt.ts +121 -0
- package/tools/TungstenTool/TungstenTool.ts +4 -0
- package/tools/WebFetchTool/UI.tsx +72 -0
- package/tools/WebFetchTool/WebFetchTool.ts +318 -0
- package/tools/WebFetchTool/preapproved.ts +166 -0
- package/tools/WebFetchTool/prompt.ts +46 -0
- package/tools/WebFetchTool/utils.ts +530 -0
- package/tools/WebSearchTool/UI.tsx +101 -0
- package/tools/WebSearchTool/WebSearchTool.ts +435 -0
- package/tools/WebSearchTool/prompt.ts +34 -0
- package/tools/WorkflowTool/constants.ts +2 -0
- package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
- package/tools/XMemIngestTool/prompt.ts +13 -0
- package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
- package/tools/XMemRetrieveTool/prompt.ts +16 -0
- package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
- package/tools/XMemSearchTool/prompt.ts +11 -0
- package/tools/shared/gitOperationTracking.ts +277 -0
- package/tools/shared/spawnMultiAgent.ts +1093 -0
- package/tools/testing/TestingPermissionTool.tsx +74 -0
- package/tools/utils.ts +40 -0
- package/utils/CircularBuffer.ts +84 -0
- package/utils/Cursor.ts +1530 -0
- package/utils/QueryGuard.ts +121 -0
- package/utils/Shell.ts +474 -0
- package/utils/ShellCommand.ts +465 -0
- package/utils/abortController.ts +99 -0
- package/utils/activityManager.ts +164 -0
- package/utils/advisor.ts +145 -0
- package/utils/agentContext.ts +178 -0
- package/utils/agentId.ts +99 -0
- package/utils/agentSwarmsEnabled.ts +44 -0
- package/utils/agenticSessionSearch.ts +307 -0
- package/utils/analyzeContext.ts +1382 -0
- package/utils/ansiToPng.ts +334 -0
- package/utils/ansiToSvg.ts +272 -0
- package/utils/api.ts +718 -0
- package/utils/apiPreconnect.ts +71 -0
- package/utils/appleTerminalBackup.ts +124 -0
- package/utils/argumentSubstitution.ts +145 -0
- package/utils/array.ts +13 -0
- package/utils/asciicast.ts +239 -0
- package/utils/attachments.ts +4091 -0
- package/utils/attribution.ts +393 -0
- package/utils/auth.ts +2002 -0
- package/utils/authFileDescriptor.ts +196 -0
- package/utils/authPortable.ts +19 -0
- package/utils/autoModeDenials.ts +26 -0
- package/utils/autoRunIssue.tsx +122 -0
- package/utils/autoUpdater.ts +561 -0
- package/utils/aws.ts +74 -0
- package/utils/awsAuthStatusManager.ts +81 -0
- package/utils/axios.ts +8 -0
- package/utils/background/remote/preconditions.ts +235 -0
- package/utils/background/remote/remoteSession.ts +98 -0
- package/utils/backgroundHousekeeping.ts +94 -0
- package/utils/bash/ParsedCommand.ts +318 -0
- package/utils/bash/ShellSnapshot.ts +582 -0
- package/utils/bash/ast.ts +2679 -0
- package/utils/bash/bashParser.ts +4436 -0
- package/utils/bash/bashPipeCommand.ts +294 -0
- package/utils/bash/commands.ts +1339 -0
- package/utils/bash/heredoc.ts +733 -0
- package/utils/bash/parser.ts +230 -0
- package/utils/bash/prefix.ts +204 -0
- package/utils/bash/registry.ts +53 -0
- package/utils/bash/shellCompletion.ts +259 -0
- package/utils/bash/shellPrefix.ts +28 -0
- package/utils/bash/shellQuote.ts +304 -0
- package/utils/bash/shellQuoting.ts +128 -0
- package/utils/bash/specs/alias.ts +14 -0
- package/utils/bash/specs/index.ts +18 -0
- package/utils/bash/specs/nohup.ts +13 -0
- package/utils/bash/specs/pyright.ts +91 -0
- package/utils/bash/specs/sleep.ts +13 -0
- package/utils/bash/specs/srun.ts +31 -0
- package/utils/bash/specs/time.ts +13 -0
- package/utils/bash/specs/timeout.ts +20 -0
- package/utils/bash/treeSitterAnalysis.ts +506 -0
- package/utils/betas.ts +434 -0
- package/utils/billing.ts +78 -0
- package/utils/binaryCheck.ts +53 -0
- package/utils/browser.ts +68 -0
- package/utils/bufferedWriter.ts +100 -0
- package/utils/bundledMode.ts +22 -0
- package/utils/caCerts.ts +115 -0
- package/utils/caCertsConfig.ts +88 -0
- package/utils/cachePaths.ts +38 -0
- package/utils/classifierApprovals.ts +88 -0
- package/utils/classifierApprovalsHook.ts +17 -0
- package/utils/claudeCodeHints.ts +193 -0
- package/utils/claudeDesktop.ts +152 -0
- package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
- package/utils/claudeInChrome/common.ts +540 -0
- package/utils/claudeInChrome/mcpServer.ts +292 -0
- package/utils/claudeInChrome/prompt.ts +83 -0
- package/utils/claudeInChrome/setup.ts +400 -0
- package/utils/claudeInChrome/setupPortable.ts +233 -0
- package/utils/claudeInChrome/toolRendering.tsx +262 -0
- package/utils/claudemd.ts +1479 -0
- package/utils/cleanup.ts +602 -0
- package/utils/cleanupRegistry.ts +25 -0
- package/utils/cliArgs.ts +60 -0
- package/utils/cliHighlight.ts +54 -0
- package/utils/codeIndexing.ts +206 -0
- package/utils/collapseBackgroundBashNotifications.ts +84 -0
- package/utils/collapseHookSummaries.ts +59 -0
- package/utils/collapseReadSearch.ts +1109 -0
- package/utils/collapseTeammateShutdowns.ts +55 -0
- package/utils/color-diff-mock.ts +27 -0
- package/utils/combinedAbortSignal.ts +47 -0
- package/utils/commandLifecycle.ts +21 -0
- package/utils/commitAttribution.ts +961 -0
- package/utils/completionCache.ts +166 -0
- package/utils/computerUse/appNames.ts +196 -0
- package/utils/computerUse/cleanup.ts +86 -0
- package/utils/computerUse/common.ts +61 -0
- package/utils/computerUse/computerUseLock.ts +215 -0
- package/utils/computerUse/drainRunLoop.ts +79 -0
- package/utils/computerUse/escHotkey.ts +54 -0
- package/utils/computerUse/executor.ts +658 -0
- package/utils/computerUse/gates.ts +72 -0
- package/utils/computerUse/hostAdapter.ts +69 -0
- package/utils/computerUse/inputLoader.ts +30 -0
- package/utils/computerUse/mcpServer.ts +106 -0
- package/utils/computerUse/setup.ts +53 -0
- package/utils/computerUse/swiftLoader.ts +23 -0
- package/utils/computerUse/toolRendering.tsx +125 -0
- package/utils/computerUse/wrapper.tsx +336 -0
- package/utils/concurrentSessions.ts +204 -0
- package/utils/config.ts +1817 -0
- package/utils/configConstants.ts +21 -0
- package/utils/contentArray.ts +51 -0
- package/utils/context.ts +221 -0
- package/utils/contextAnalysis.ts +272 -0
- package/utils/contextSuggestions.ts +235 -0
- package/utils/controlMessageCompat.ts +32 -0
- package/utils/conversationRecovery.ts +597 -0
- package/utils/cron.ts +308 -0
- package/utils/cronJitterConfig.ts +75 -0
- package/utils/cronScheduler.ts +565 -0
- package/utils/cronTasks.ts +458 -0
- package/utils/cronTasksLock.ts +195 -0
- package/utils/crossProjectResume.ts +75 -0
- package/utils/crypto.ts +13 -0
- package/utils/cwd.ts +32 -0
- package/utils/debug.ts +268 -0
- package/utils/debugFilter.ts +157 -0
- package/utils/deepLink/banner.ts +123 -0
- package/utils/deepLink/parseDeepLink.ts +170 -0
- package/utils/deepLink/protocolHandler.ts +136 -0
- package/utils/deepLink/registerProtocol.ts +348 -0
- package/utils/deepLink/terminalLauncher.ts +557 -0
- package/utils/deepLink/terminalPreference.ts +54 -0
- package/utils/desktopDeepLink.ts +236 -0
- package/utils/detectRepository.ts +178 -0
- package/utils/diagLogs.ts +94 -0
- package/utils/diff.ts +177 -0
- package/utils/directMemberMessage.ts +69 -0
- package/utils/displayTags.ts +51 -0
- package/utils/doctorContextWarnings.ts +265 -0
- package/utils/doctorDiagnostic.ts +625 -0
- package/utils/dxt/helpers.ts +88 -0
- package/utils/dxt/zip.ts +226 -0
- package/utils/earlyInput.ts +191 -0
- package/utils/editor.ts +183 -0
- package/utils/effort.ts +329 -0
- package/utils/embeddedTools.ts +29 -0
- package/utils/env.ts +347 -0
- package/utils/envDynamic.ts +151 -0
- package/utils/envUtils.ts +183 -0
- package/utils/envValidation.ts +38 -0
- package/utils/errorLogSink.ts +235 -0
- package/utils/errors.ts +238 -0
- package/utils/exampleCommands.ts +184 -0
- package/utils/execFileNoThrow.ts +150 -0
- package/utils/execFileNoThrowPortable.ts +89 -0
- package/utils/execSyncWrapper.ts +38 -0
- package/utils/exportRenderer.tsx +98 -0
- package/utils/extraUsage.ts +23 -0
- package/utils/fastMode.ts +532 -0
- package/utils/file.ts +584 -0
- package/utils/fileHistory.ts +1115 -0
- package/utils/fileOperationAnalytics.ts +71 -0
- package/utils/filePersistence/filePersistence.ts +287 -0
- package/utils/filePersistence/outputsScanner.ts +126 -0
- package/utils/fileRead.ts +102 -0
- package/utils/fileReadCache.ts +96 -0
- package/utils/fileStateCache.ts +142 -0
- package/utils/findExecutable.ts +17 -0
- package/utils/fingerprint.ts +76 -0
- package/utils/forkedAgent.ts +689 -0
- package/utils/format.ts +308 -0
- package/utils/formatBriefTimestamp.ts +81 -0
- package/utils/fpsTracker.ts +47 -0
- package/utils/frontmatterParser.ts +370 -0
- package/utils/fsOperations.ts +770 -0
- package/utils/fullscreen.ts +202 -0
- package/utils/generatedFiles.ts +136 -0
- package/utils/generators.ts +88 -0
- package/utils/genericProcessUtils.ts +184 -0
- package/utils/getWorktreePaths.ts +70 -0
- package/utils/getWorktreePathsPortable.ts +27 -0
- package/utils/ghPrStatus.ts +106 -0
- package/utils/git/gitConfigParser.ts +277 -0
- package/utils/git/gitFilesystem.ts +699 -0
- package/utils/git/gitignore.ts +99 -0
- package/utils/git.ts +926 -0
- package/utils/gitDiff.ts +532 -0
- package/utils/gitSettings.ts +18 -0
- package/utils/github/ghAuthStatus.ts +29 -0
- package/utils/githubRepoPathMapping.ts +162 -0
- package/utils/glob.ts +130 -0
- package/utils/gracefulShutdown.ts +529 -0
- package/utils/groupToolUses.ts +182 -0
- package/utils/handlePromptSubmit.ts +610 -0
- package/utils/hash.ts +46 -0
- package/utils/headlessProfiler.ts +178 -0
- package/utils/heapDumpService.ts +303 -0
- package/utils/heatmap.ts +198 -0
- package/utils/highlightMatch.tsx +28 -0
- package/utils/hooks/AsyncHookRegistry.ts +309 -0
- package/utils/hooks/apiQueryHookHelper.ts +141 -0
- package/utils/hooks/execAgentHook.ts +339 -0
- package/utils/hooks/execHttpHook.ts +242 -0
- package/utils/hooks/execPromptHook.ts +211 -0
- package/utils/hooks/fileChangedWatcher.ts +191 -0
- package/utils/hooks/hookEvents.ts +192 -0
- package/utils/hooks/hookHelpers.ts +83 -0
- package/utils/hooks/hooksConfigManager.ts +400 -0
- package/utils/hooks/hooksConfigSnapshot.ts +133 -0
- package/utils/hooks/hooksSettings.ts +271 -0
- package/utils/hooks/postSamplingHooks.ts +70 -0
- package/utils/hooks/registerFrontmatterHooks.ts +67 -0
- package/utils/hooks/registerSkillHooks.ts +64 -0
- package/utils/hooks/sessionHooks.ts +447 -0
- package/utils/hooks/skillImprovement.ts +267 -0
- package/utils/hooks/ssrfGuard.ts +294 -0
- package/utils/hooks.ts +5022 -0
- package/utils/horizontalScroll.ts +137 -0
- package/utils/http.ts +136 -0
- package/utils/hyperlink.ts +39 -0
- package/utils/iTermBackup.ts +73 -0
- package/utils/ide.ts +1494 -0
- package/utils/idePathConversion.ts +90 -0
- package/utils/idleTimeout.ts +53 -0
- package/utils/imagePaste.ts +416 -0
- package/utils/imageResizer.ts +880 -0
- package/utils/imageStore.ts +167 -0
- package/utils/imageValidation.ts +104 -0
- package/utils/immediateCommand.ts +15 -0
- package/utils/inProcessTeammateHelpers.ts +102 -0
- package/utils/ink.ts +26 -0
- package/utils/intl.ts +94 -0
- package/utils/jetbrains.ts +191 -0
- package/utils/json.ts +277 -0
- package/utils/jsonRead.ts +16 -0
- package/utils/keyboardShortcuts.ts +14 -0
- package/utils/lazySchema.ts +8 -0
- package/utils/listSessionsImpl.ts +454 -0
- package/utils/localInstaller.ts +162 -0
- package/utils/lockfile.ts +43 -0
- package/utils/log.ts +362 -0
- package/utils/logoV2Utils.ts +347 -0
- package/utils/mailbox.ts +73 -0
- package/utils/managedEnv.ts +199 -0
- package/utils/managedEnvConstants.ts +191 -0
- package/utils/markdown.ts +381 -0
- package/utils/markdownConfigLoader.ts +600 -0
- package/utils/mcp/dateTimeParser.ts +121 -0
- package/utils/mcp/elicitationValidation.ts +336 -0
- package/utils/mcpInstructionsDelta.ts +130 -0
- package/utils/mcpOutputStorage.ts +189 -0
- package/utils/mcpValidation.ts +208 -0
- package/utils/mcpWebSocketTransport.ts +200 -0
- package/utils/memoize.ts +269 -0
- package/utils/memory/types.ts +12 -0
- package/utils/memory/versions.ts +8 -0
- package/utils/memoryFileDetection.ts +289 -0
- package/utils/messagePredicates.ts +8 -0
- package/utils/messageQueueManager.ts +547 -0
- package/utils/messages/mappers.ts +290 -0
- package/utils/messages/systemInit.ts +96 -0
- package/utils/messages.ts +5520 -0
- package/utils/model/agent.ts +157 -0
- package/utils/model/aliases.ts +35 -0
- package/utils/model/antModels.ts +64 -0
- package/utils/model/bedrock.ts +265 -0
- package/utils/model/check1mAccess.ts +72 -0
- package/utils/model/configs.ts +158 -0
- package/utils/model/contextWindowUpgradeCheck.ts +47 -0
- package/utils/model/deprecation.ts +101 -0
- package/utils/model/model.ts +654 -0
- package/utils/model/modelAllowlist.ts +170 -0
- package/utils/model/modelCapabilities.ts +118 -0
- package/utils/model/modelOptions.ts +589 -0
- package/utils/model/modelStrings.ts +170 -0
- package/utils/model/modelSupportOverrides.ts +50 -0
- package/utils/model/providers.ts +42 -0
- package/utils/model/validateModel.ts +159 -0
- package/utils/modelCost.ts +231 -0
- package/utils/modifiers.ts +36 -0
- package/utils/mtls.ts +179 -0
- package/utils/nativeInstaller/download.ts +523 -0
- package/utils/nativeInstaller/index.ts +18 -0
- package/utils/nativeInstaller/installer.ts +1708 -0
- package/utils/nativeInstaller/packageManagers.ts +336 -0
- package/utils/nativeInstaller/pidLock.ts +433 -0
- package/utils/notebook.ts +224 -0
- package/utils/objectGroupBy.ts +18 -0
- package/utils/pasteStore.ts +104 -0
- package/utils/path.ts +155 -0
- package/utils/pdf.ts +300 -0
- package/utils/pdfUtils.ts +70 -0
- package/utils/peerAddress.ts +21 -0
- package/utils/permissions/PermissionMode.ts +141 -0
- package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
- package/utils/permissions/PermissionResult.ts +35 -0
- package/utils/permissions/PermissionRule.ts +40 -0
- package/utils/permissions/PermissionUpdate.ts +389 -0
- package/utils/permissions/PermissionUpdateSchema.ts +78 -0
- package/utils/permissions/autoModeState.ts +39 -0
- package/utils/permissions/bashClassifier.ts +61 -0
- package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
- package/utils/permissions/classifierDecision.ts +98 -0
- package/utils/permissions/classifierShared.ts +39 -0
- package/utils/permissions/dangerousPatterns.ts +80 -0
- package/utils/permissions/denialTracking.ts +45 -0
- package/utils/permissions/filesystem.ts +1777 -0
- package/utils/permissions/getNextPermissionMode.ts +101 -0
- package/utils/permissions/pathValidation.ts +485 -0
- package/utils/permissions/permissionExplainer.ts +250 -0
- package/utils/permissions/permissionRuleParser.ts +198 -0
- package/utils/permissions/permissionSetup.ts +1532 -0
- package/utils/permissions/permissions.ts +1486 -0
- package/utils/permissions/permissionsLoader.ts +296 -0
- package/utils/permissions/shadowedRuleDetection.ts +234 -0
- package/utils/permissions/shellRuleMatching.ts +228 -0
- package/utils/permissions/yoloClassifier.ts +1495 -0
- package/utils/planModeV2.ts +95 -0
- package/utils/plans.ts +397 -0
- package/utils/platform.ts +150 -0
- package/utils/plugins/addDirPluginSettings.ts +71 -0
- package/utils/plugins/cacheUtils.ts +196 -0
- package/utils/plugins/dependencyResolver.ts +305 -0
- package/utils/plugins/fetchTelemetry.ts +135 -0
- package/utils/plugins/gitAvailability.ts +69 -0
- package/utils/plugins/headlessPluginInstall.ts +174 -0
- package/utils/plugins/hintRecommendation.ts +164 -0
- package/utils/plugins/installCounts.ts +292 -0
- package/utils/plugins/installedPluginsManager.ts +1268 -0
- package/utils/plugins/loadPluginAgents.ts +348 -0
- package/utils/plugins/loadPluginCommands.ts +946 -0
- package/utils/plugins/loadPluginHooks.ts +287 -0
- package/utils/plugins/loadPluginOutputStyles.ts +178 -0
- package/utils/plugins/lspPluginIntegration.ts +387 -0
- package/utils/plugins/lspRecommendation.ts +374 -0
- package/utils/plugins/managedPlugins.ts +27 -0
- package/utils/plugins/marketplaceHelpers.ts +592 -0
- package/utils/plugins/marketplaceManager.ts +2643 -0
- package/utils/plugins/mcpPluginIntegration.ts +634 -0
- package/utils/plugins/mcpbHandler.ts +968 -0
- package/utils/plugins/officialMarketplace.ts +25 -0
- package/utils/plugins/officialMarketplaceGcs.ts +216 -0
- package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
- package/utils/plugins/orphanedPluginFilter.ts +114 -0
- package/utils/plugins/parseMarketplaceInput.ts +162 -0
- package/utils/plugins/performStartupChecks.tsx +70 -0
- package/utils/plugins/pluginAutoupdate.ts +284 -0
- package/utils/plugins/pluginBlocklist.ts +127 -0
- package/utils/plugins/pluginDirectories.ts +178 -0
- package/utils/plugins/pluginFlagging.ts +208 -0
- package/utils/plugins/pluginIdentifier.ts +123 -0
- package/utils/plugins/pluginInstallationHelpers.ts +595 -0
- package/utils/plugins/pluginLoader.ts +3302 -0
- package/utils/plugins/pluginOptionsStorage.ts +400 -0
- package/utils/plugins/pluginPolicy.ts +20 -0
- package/utils/plugins/pluginStartupCheck.ts +341 -0
- package/utils/plugins/pluginVersioning.ts +157 -0
- package/utils/plugins/reconciler.ts +265 -0
- package/utils/plugins/refresh.ts +215 -0
- package/utils/plugins/schemas.ts +1681 -0
- package/utils/plugins/validatePlugin.ts +903 -0
- package/utils/plugins/walkPluginMarkdown.ts +69 -0
- package/utils/plugins/zipCache.ts +406 -0
- package/utils/plugins/zipCacheAdapters.ts +164 -0
- package/utils/powershell/dangerousCmdlets.ts +185 -0
- package/utils/powershell/parser.ts +1804 -0
- package/utils/powershell/staticPrefix.ts +316 -0
- package/utils/preflightChecks.tsx +151 -0
- package/utils/privacyLevel.ts +55 -0
- package/utils/process.ts +68 -0
- package/utils/processUserInput/processBashCommand.tsx +140 -0
- package/utils/processUserInput/processSlashCommand.tsx +922 -0
- package/utils/processUserInput/processTextPrompt.ts +100 -0
- package/utils/processUserInput/processUserInput.ts +605 -0
- package/utils/profilerBase.ts +46 -0
- package/utils/promptCategory.ts +49 -0
- package/utils/promptEditor.ts +188 -0
- package/utils/promptShellExecution.ts +183 -0
- package/utils/proxy.ts +426 -0
- package/utils/queryContext.ts +179 -0
- package/utils/queryHelpers.ts +552 -0
- package/utils/queryProfiler.ts +301 -0
- package/utils/queueProcessor.ts +95 -0
- package/utils/readEditContext.ts +227 -0
- package/utils/readFileInRange.ts +383 -0
- package/utils/releaseNotes.ts +360 -0
- package/utils/renderOptions.ts +113 -0
- package/utils/ripgrep.ts +679 -0
- package/utils/sandbox/sandbox-adapter.ts +985 -0
- package/utils/sandbox/sandbox-ui-utils.ts +12 -0
- package/utils/sanitization.ts +91 -0
- package/utils/screenshotClipboard.ts +121 -0
- package/utils/sdkEventQueue.ts +134 -0
- package/utils/secureStorage/fallbackStorage.ts +70 -0
- package/utils/secureStorage/index.ts +17 -0
- package/utils/secureStorage/keychainPrefetch.ts +116 -0
- package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
- package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
- package/utils/secureStorage/plainTextStorage.ts +84 -0
- package/utils/semanticBoolean.ts +29 -0
- package/utils/semanticNumber.ts +36 -0
- package/utils/semver.ts +59 -0
- package/utils/sequential.ts +56 -0
- package/utils/sessionActivity.ts +133 -0
- package/utils/sessionEnvVars.ts +22 -0
- package/utils/sessionEnvironment.ts +166 -0
- package/utils/sessionFileAccessHooks.ts +250 -0
- package/utils/sessionIngressAuth.ts +140 -0
- package/utils/sessionRestore.ts +551 -0
- package/utils/sessionStart.ts +232 -0
- package/utils/sessionState.ts +150 -0
- package/utils/sessionStorage.ts +5105 -0
- package/utils/sessionStoragePortable.ts +793 -0
- package/utils/sessionTitle.ts +129 -0
- package/utils/sessionUrl.ts +64 -0
- package/utils/set.ts +53 -0
- package/utils/settings/allErrors.ts +32 -0
- package/utils/settings/applySettingsChange.ts +92 -0
- package/utils/settings/changeDetector.ts +488 -0
- package/utils/settings/constants.ts +202 -0
- package/utils/settings/internalWrites.ts +37 -0
- package/utils/settings/managedPath.ts +34 -0
- package/utils/settings/mdm/constants.ts +81 -0
- package/utils/settings/mdm/rawRead.ts +130 -0
- package/utils/settings/mdm/settings.ts +316 -0
- package/utils/settings/permissionValidation.ts +262 -0
- package/utils/settings/pluginOnlyPolicy.ts +60 -0
- package/utils/settings/schemaOutput.ts +8 -0
- package/utils/settings/settings.ts +1015 -0
- package/utils/settings/settingsCache.ts +80 -0
- package/utils/settings/toolValidationConfig.ts +103 -0
- package/utils/settings/types.ts +1149 -0
- package/utils/settings/validateEditTool.ts +45 -0
- package/utils/settings/validation.ts +265 -0
- package/utils/settings/validationTips.ts +164 -0
- package/utils/shell/bashProvider.ts +255 -0
- package/utils/shell/outputLimits.ts +14 -0
- package/utils/shell/powershellDetection.ts +107 -0
- package/utils/shell/powershellProvider.ts +123 -0
- package/utils/shell/prefix.ts +367 -0
- package/utils/shell/readOnlyCommandValidation.ts +1893 -0
- package/utils/shell/resolveDefaultShell.ts +14 -0
- package/utils/shell/shellProvider.ts +33 -0
- package/utils/shell/shellToolUtils.ts +22 -0
- package/utils/shell/specPrefix.ts +241 -0
- package/utils/shellConfig.ts +167 -0
- package/utils/sideQuery.ts +222 -0
- package/utils/sideQuestion.ts +155 -0
- package/utils/signal.ts +43 -0
- package/utils/sinks.ts +16 -0
- package/utils/skills/skillChangeDetector.ts +311 -0
- package/utils/slashCommandParsing.ts +60 -0
- package/utils/sleep.ts +84 -0
- package/utils/sliceAnsi.ts +91 -0
- package/utils/slowOperations.ts +286 -0
- package/utils/standaloneAgent.ts +23 -0
- package/utils/startupProfiler.ts +194 -0
- package/utils/staticRender.tsx +116 -0
- package/utils/stats.ts +1061 -0
- package/utils/statsCache.ts +434 -0
- package/utils/status.tsx +362 -0
- package/utils/statusNoticeDefinitions.tsx +198 -0
- package/utils/statusNoticeHelpers.ts +20 -0
- package/utils/stream.ts +76 -0
- package/utils/streamJsonStdoutGuard.ts +123 -0
- package/utils/streamlinedTransform.ts +201 -0
- package/utils/stringUtils.ts +235 -0
- package/utils/subprocessEnv.ts +99 -0
- package/utils/suggestions/commandSuggestions.ts +567 -0
- package/utils/suggestions/directoryCompletion.ts +263 -0
- package/utils/suggestions/shellHistoryCompletion.ts +119 -0
- package/utils/suggestions/skillUsageTracking.ts +55 -0
- package/utils/suggestions/slackChannelSuggestions.ts +209 -0
- package/utils/swarm/It2SetupPrompt.tsx +380 -0
- package/utils/swarm/backends/ITermBackend.ts +370 -0
- package/utils/swarm/backends/InProcessBackend.ts +339 -0
- package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
- package/utils/swarm/backends/TmuxBackend.ts +764 -0
- package/utils/swarm/backends/detection.ts +128 -0
- package/utils/swarm/backends/it2Setup.ts +245 -0
- package/utils/swarm/backends/registry.ts +464 -0
- package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
- package/utils/swarm/backends/types.ts +311 -0
- package/utils/swarm/constants.ts +33 -0
- package/utils/swarm/inProcessRunner.ts +1552 -0
- package/utils/swarm/leaderPermissionBridge.ts +54 -0
- package/utils/swarm/permissionSync.ts +928 -0
- package/utils/swarm/reconnection.ts +119 -0
- package/utils/swarm/spawnInProcess.ts +328 -0
- package/utils/swarm/spawnUtils.ts +146 -0
- package/utils/swarm/teamHelpers.ts +683 -0
- package/utils/swarm/teammateInit.ts +129 -0
- package/utils/swarm/teammateLayoutManager.ts +107 -0
- package/utils/swarm/teammateModel.ts +10 -0
- package/utils/swarm/teammatePromptAddendum.ts +18 -0
- package/utils/systemDirectories.ts +74 -0
- package/utils/systemPrompt.ts +123 -0
- package/utils/systemPromptType.ts +14 -0
- package/utils/systemTheme.ts +119 -0
- package/utils/taggedId.ts +54 -0
- package/utils/task/TaskOutput.ts +390 -0
- package/utils/task/diskOutput.ts +451 -0
- package/utils/task/framework.ts +308 -0
- package/utils/task/outputFormatting.ts +38 -0
- package/utils/task/sdkProgress.ts +36 -0
- package/utils/tasks.ts +862 -0
- package/utils/teamDiscovery.ts +81 -0
- package/utils/teamMemoryOps.ts +88 -0
- package/utils/teammate.ts +292 -0
- package/utils/teammateContext.ts +96 -0
- package/utils/teammateMailbox.ts +1183 -0
- package/utils/telemetry/betaSessionTracing.ts +491 -0
- package/utils/telemetry/bigqueryExporter.ts +252 -0
- package/utils/telemetry/events.ts +75 -0
- package/utils/telemetry/instrumentation.ts +825 -0
- package/utils/telemetry/logger.ts +26 -0
- package/utils/telemetry/perfettoTracing.ts +1120 -0
- package/utils/telemetry/pluginTelemetry.ts +289 -0
- package/utils/telemetry/sessionTracing.ts +927 -0
- package/utils/telemetry/skillLoadedEvent.ts +39 -0
- package/utils/telemetryAttributes.ts +71 -0
- package/utils/teleport/api.ts +466 -0
- package/utils/teleport/environmentSelection.ts +77 -0
- package/utils/teleport/environments.ts +120 -0
- package/utils/teleport/gitBundle.ts +292 -0
- package/utils/teleport.tsx +1226 -0
- package/utils/tempfile.ts +31 -0
- package/utils/terminal.ts +131 -0
- package/utils/terminalPanel.ts +191 -0
- package/utils/textHighlighting.ts +166 -0
- package/utils/theme.ts +639 -0
- package/utils/thinking.ts +162 -0
- package/utils/timeouts.ts +39 -0
- package/utils/tmuxSocket.ts +427 -0
- package/utils/todo/types.ts +18 -0
- package/utils/tokenBudget.ts +73 -0
- package/utils/tokens.ts +261 -0
- package/utils/toolErrors.ts +132 -0
- package/utils/toolPool.ts +79 -0
- package/utils/toolResultStorage.ts +1040 -0
- package/utils/toolSchemaCache.ts +26 -0
- package/utils/toolSearch.ts +756 -0
- package/utils/transcriptSearch.ts +202 -0
- package/utils/treeify.ts +170 -0
- package/utils/truncate.ts +179 -0
- package/utils/ultraplan/ccrSession.ts +349 -0
- package/utils/ultraplan/keyword.ts +127 -0
- package/utils/ultraplan/prompt.txt +1 -0
- package/utils/unaryLogging.ts +39 -0
- package/utils/undercover.ts +89 -0
- package/utils/user.ts +194 -0
- package/utils/userAgent.ts +10 -0
- package/utils/userPromptKeywords.ts +27 -0
- package/utils/uuid.ts +27 -0
- package/utils/warningHandler.ts +121 -0
- package/utils/which.ts +82 -0
- package/utils/windowsPaths.ts +173 -0
- package/utils/withResolvers.ts +13 -0
- package/utils/words.ts +800 -0
- package/utils/workloadContext.ts +57 -0
- package/utils/worktree.ts +1519 -0
- package/utils/worktreeModeEnabled.ts +11 -0
- package/utils/xdg.ts +65 -0
- package/utils/xmem.ts +6 -0
- package/utils/xml.ts +16 -0
- package/utils/yaml.ts +15 -0
- package/utils/zodToJsonSchema.ts +23 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for the official Anthropic plugins marketplace.
|
|
3
|
+
*
|
|
4
|
+
* The official marketplace is hosted on GitHub and provides first-party
|
|
5
|
+
* plugins developed by Anthropic. This file defines the constants needed
|
|
6
|
+
* to install and identify this marketplace.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { MarketplaceSource } from './schemas.js'
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Source configuration for the official Anthropic plugins marketplace.
|
|
13
|
+
* Used when auto-installing the marketplace on startup.
|
|
14
|
+
*/
|
|
15
|
+
export const OFFICIAL_MARKETPLACE_SOURCE = {
|
|
16
|
+
source: 'github',
|
|
17
|
+
repo: 'anthropics/claude-plugins-official',
|
|
18
|
+
} as const satisfies MarketplaceSource
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Display name for the official marketplace.
|
|
22
|
+
* This is the name under which the marketplace will be registered
|
|
23
|
+
* in the known_marketplaces.json file.
|
|
24
|
+
*/
|
|
25
|
+
export const OFFICIAL_MARKETPLACE_NAME = 'claude-plugins-official'
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* inc-5046: fetch the official marketplace from a GCS mirror instead of
|
|
3
|
+
* git-cloning GitHub on every startup.
|
|
4
|
+
*
|
|
5
|
+
* Backend (anthropic#317037) publishes a marketplace-only zip alongside the
|
|
6
|
+
* titanium squashfs, keyed by base repo SHA. This module fetches the `latest`
|
|
7
|
+
* pointer, compares against a local sentinel, and downloads+extracts the zip
|
|
8
|
+
* when there's a new SHA. Callers decide fallback behavior on failure.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import axios from 'src/utils/axios.js'
|
|
12
|
+
import { chmod, mkdir, readFile, rename, rm, writeFile } from 'fs/promises'
|
|
13
|
+
import { dirname, join, resolve, sep } from 'path'
|
|
14
|
+
import { waitForScrollIdle } from '../../bootstrap/state.js'
|
|
15
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/index.js'
|
|
16
|
+
import { logEvent } from '../../services/analytics/index.js'
|
|
17
|
+
import { logForDebugging } from '../debug.js'
|
|
18
|
+
import { parseZipModes, unzipFile } from '../dxt/zip.js'
|
|
19
|
+
import { errorMessage, getErrnoCode } from '../errors.js'
|
|
20
|
+
|
|
21
|
+
type SafeString = AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
22
|
+
|
|
23
|
+
// CDN-fronted domain for the public GCS bucket (same bucket the native
|
|
24
|
+
// binary ships from — nativeInstaller/download.ts:24 uses the raw GCS URL).
|
|
25
|
+
// `{sha}.zip` is content-addressed so CDN can cache it indefinitely;
|
|
26
|
+
// `latest` has Cache-Control: max-age=300 so CDN staleness is bounded.
|
|
27
|
+
// Backend (anthropic#317037) populates this prefix.
|
|
28
|
+
const GCS_BASE =
|
|
29
|
+
'https://downloads.claude.ai/claude-code-releases/plugins/claude-plugins-official'
|
|
30
|
+
|
|
31
|
+
// Zip arc paths are seed-dir-relative (marketplaces/claude-plugins-official/…)
|
|
32
|
+
// so the titanium seed machinery can use the same zip. Strip this prefix when
|
|
33
|
+
// extracting for a laptop install.
|
|
34
|
+
const ARC_PREFIX = 'marketplaces/claude-plugins-official/'
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Fetch the official marketplace from GCS and extract to installLocation.
|
|
38
|
+
* Idempotent — checks a `.gcs-sha` sentinel before downloading the ~3.5MB zip.
|
|
39
|
+
*
|
|
40
|
+
* @param installLocation where to extract (must be inside marketplacesCacheDir)
|
|
41
|
+
* @param marketplacesCacheDir the plugins marketplace cache root — passed in
|
|
42
|
+
* by callers (rather than imported from pluginDirectories) to break a
|
|
43
|
+
* circular-dep edge through marketplaceManager
|
|
44
|
+
* @returns the fetched SHA on success (including no-op), null on any failure
|
|
45
|
+
* (network, 404, zip parse). Caller decides whether to fall through to git.
|
|
46
|
+
*/
|
|
47
|
+
export async function fetchOfficialMarketplaceFromGcs(
|
|
48
|
+
installLocation: string,
|
|
49
|
+
marketplacesCacheDir: string,
|
|
50
|
+
): Promise<string | null> {
|
|
51
|
+
// Defense in depth: this function does `rm(installLocation, {recursive})`
|
|
52
|
+
// during the atomic swap. A corrupted known_marketplaces.json (gh-32793 —
|
|
53
|
+
// Windows path read on WSL, literal tilde, manual edit) could point at the
|
|
54
|
+
// user's project. Refuse any path outside the marketplaces cache dir.
|
|
55
|
+
// Same guard as refreshMarketplace() at marketplaceManager.ts:~2392 but
|
|
56
|
+
// inside the function so ALL callers are covered.
|
|
57
|
+
const cacheDir = resolve(marketplacesCacheDir)
|
|
58
|
+
const resolvedLoc = resolve(installLocation)
|
|
59
|
+
if (resolvedLoc !== cacheDir && !resolvedLoc.startsWith(cacheDir + sep)) {
|
|
60
|
+
logForDebugging(
|
|
61
|
+
`fetchOfficialMarketplaceFromGcs: refusing path outside cache dir: ${installLocation}`,
|
|
62
|
+
{ level: 'error' },
|
|
63
|
+
)
|
|
64
|
+
return null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Network + zip extraction competes for the event loop with scroll frames.
|
|
68
|
+
// This is a fire-and-forget startup call — delaying by a few hundred ms
|
|
69
|
+
// until scroll settles is invisible to the user.
|
|
70
|
+
await waitForScrollIdle()
|
|
71
|
+
|
|
72
|
+
const start = performance.now()
|
|
73
|
+
let outcome: 'noop' | 'updated' | 'failed' = 'failed'
|
|
74
|
+
let sha: string | undefined
|
|
75
|
+
let bytes: number | undefined
|
|
76
|
+
let errKind: string | undefined
|
|
77
|
+
|
|
78
|
+
try {
|
|
79
|
+
// 1. Latest pointer — ~40 bytes, backend sets Cache-Control: no-cache,
|
|
80
|
+
// max-age=300. Cheap enough to hit every startup.
|
|
81
|
+
const latest = await axios.get(`${GCS_BASE}/latest`, {
|
|
82
|
+
responseType: 'text',
|
|
83
|
+
timeout: 10_000,
|
|
84
|
+
})
|
|
85
|
+
sha = String(latest.data).trim()
|
|
86
|
+
if (!sha) {
|
|
87
|
+
// Empty /latest body — backend misconfigured. Bail (null), don't
|
|
88
|
+
// lock into a permanently-broken empty-sentinel state.
|
|
89
|
+
throw new Error('latest pointer returned empty body')
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 2. Sentinel check — `.gcs-sha` at the install root holds the last
|
|
93
|
+
// extracted SHA. Matching means we already have this content.
|
|
94
|
+
const sentinelPath = join(installLocation, '.gcs-sha')
|
|
95
|
+
const currentSha = await readFile(sentinelPath, 'utf8').then(
|
|
96
|
+
s => s.trim(),
|
|
97
|
+
() => null, // ENOENT — first fetch, proceed to download
|
|
98
|
+
)
|
|
99
|
+
if (currentSha === sha) {
|
|
100
|
+
outcome = 'noop'
|
|
101
|
+
return sha
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 3. Download zip and extract to a staging dir, then atomic-swap into
|
|
105
|
+
// place. Crash mid-extract leaves a .staging dir (next run rm's it)
|
|
106
|
+
// rather than a half-written installLocation.
|
|
107
|
+
const zipResp = await axios.get(`${GCS_BASE}/${sha}.zip`, {
|
|
108
|
+
responseType: 'arraybuffer',
|
|
109
|
+
timeout: 60_000,
|
|
110
|
+
})
|
|
111
|
+
const zipBuf = Buffer.from(zipResp.data)
|
|
112
|
+
bytes = zipBuf.length
|
|
113
|
+
const files = await unzipFile(zipBuf)
|
|
114
|
+
// fflate doesn't surface external_attr, so parse the central directory
|
|
115
|
+
// ourselves to recover exec bits. Without this, hooks/scripts extract as
|
|
116
|
+
// 0644 and `sh -c "/path/script.sh"` (hooks.ts:~1002) fails with EACCES
|
|
117
|
+
// on Unix. Git-clone preserves +x natively; this keeps GCS at parity.
|
|
118
|
+
const modes = parseZipModes(zipBuf)
|
|
119
|
+
|
|
120
|
+
const staging = `${installLocation}.staging`
|
|
121
|
+
await rm(staging, { recursive: true, force: true })
|
|
122
|
+
await mkdir(staging, { recursive: true })
|
|
123
|
+
for (const [arcPath, data] of Object.entries(files)) {
|
|
124
|
+
if (!arcPath.startsWith(ARC_PREFIX)) continue
|
|
125
|
+
const rel = arcPath.slice(ARC_PREFIX.length)
|
|
126
|
+
if (!rel || rel.endsWith('/')) continue // prefix dir entry or subdir entry
|
|
127
|
+
const dest = join(staging, rel)
|
|
128
|
+
await mkdir(dirname(dest), { recursive: true })
|
|
129
|
+
await writeFile(dest, data)
|
|
130
|
+
const mode = modes[arcPath]
|
|
131
|
+
if (mode && mode & 0o111) {
|
|
132
|
+
// Only chmod when an exec bit is set — skip plain files to save syscalls.
|
|
133
|
+
// Swallow EPERM/ENOTSUP (NFS root_squash, some FUSE mounts) — losing +x
|
|
134
|
+
// is the pre-PR behavior and better than aborting mid-extraction.
|
|
135
|
+
await chmod(dest, mode & 0o777).catch(() => {})
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
await writeFile(join(staging, '.gcs-sha'), sha)
|
|
139
|
+
|
|
140
|
+
// Atomic swap: rm old, rename staging. Brief window where installLocation
|
|
141
|
+
// doesn't exist — acceptable for a background refresh (caller retries next
|
|
142
|
+
// startup if it crashes here).
|
|
143
|
+
await rm(installLocation, { recursive: true, force: true })
|
|
144
|
+
await rename(staging, installLocation)
|
|
145
|
+
|
|
146
|
+
outcome = 'updated'
|
|
147
|
+
return sha
|
|
148
|
+
} catch (e) {
|
|
149
|
+
errKind = classifyGcsError(e)
|
|
150
|
+
logForDebugging(
|
|
151
|
+
`Official marketplace GCS fetch failed: ${errorMessage(e)}`,
|
|
152
|
+
{ level: 'warn' },
|
|
153
|
+
)
|
|
154
|
+
return null
|
|
155
|
+
} finally {
|
|
156
|
+
// tengu_plugin_remote_fetch schema shared with the telemetry PR
|
|
157
|
+
// (.daisy/inc-5046/index.md) — adds source:'marketplace_gcs'. All string
|
|
158
|
+
// values below are static enums or a git SHA — not code/filepaths/PII.
|
|
159
|
+
logEvent('tengu_plugin_remote_fetch', {
|
|
160
|
+
source: 'marketplace_gcs' as SafeString,
|
|
161
|
+
host: 'downloads.claude.ai' as SafeString,
|
|
162
|
+
is_official: true,
|
|
163
|
+
outcome: outcome as SafeString,
|
|
164
|
+
duration_ms: Math.round(performance.now() - start),
|
|
165
|
+
...(bytes !== undefined && { bytes }),
|
|
166
|
+
...(sha && { sha: sha as SafeString }),
|
|
167
|
+
...(errKind && { error_kind: errKind as SafeString }),
|
|
168
|
+
})
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Bounded set of errno codes we report by name. Anything else buckets as
|
|
173
|
+
// fs_other to keep dashboard cardinality tractable.
|
|
174
|
+
const KNOWN_FS_CODES = new Set([
|
|
175
|
+
'ENOSPC',
|
|
176
|
+
'EACCES',
|
|
177
|
+
'EPERM',
|
|
178
|
+
'EXDEV',
|
|
179
|
+
'EBUSY',
|
|
180
|
+
'ENOENT',
|
|
181
|
+
'ENOTDIR',
|
|
182
|
+
'EROFS',
|
|
183
|
+
'EMFILE',
|
|
184
|
+
'ENAMETOOLONG',
|
|
185
|
+
])
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Classify a GCS fetch error into a stable telemetry bucket.
|
|
189
|
+
*
|
|
190
|
+
* Telemetry from v2.1.83+ showed 50% of failures landing in 'other' — and
|
|
191
|
+
* 99.99% of those had both sha+bytes set, meaning download succeeded but
|
|
192
|
+
* extraction/fs failed. This splits that bucket so we can see whether the
|
|
193
|
+
* failures are fixable (wrong staging dir, cross-device rename) or inherent
|
|
194
|
+
* (disk full, permission denied) before flipping the git-fallback kill switch.
|
|
195
|
+
*/
|
|
196
|
+
export function classifyGcsError(e: unknown): string {
|
|
197
|
+
if (axios.isAxiosError(e)) {
|
|
198
|
+
if (e.code === 'ECONNABORTED') return 'timeout'
|
|
199
|
+
if (e.response) return `http_${e.response.status}`
|
|
200
|
+
return 'network'
|
|
201
|
+
}
|
|
202
|
+
const code = getErrnoCode(e)
|
|
203
|
+
// Node fs errno codes are E<UPPERCASE> (ENOSPC, EACCES). Axios also sets
|
|
204
|
+
// .code (ERR_NETWORK, ERR_BAD_OPTION, EPROTO) — don't bucket those as fs.
|
|
205
|
+
if (code && /^E[A-Z]+$/.test(code) && !code.startsWith('ERR_')) {
|
|
206
|
+
return KNOWN_FS_CODES.has(code) ? `fs_${code}` : 'fs_other'
|
|
207
|
+
}
|
|
208
|
+
// fflate sets numeric .code (0-14) on inflate/unzip errors — catches
|
|
209
|
+
// deflate-level corruption ("unexpected EOF", "invalid block type") that
|
|
210
|
+
// the message regex misses.
|
|
211
|
+
if (typeof (e as { code?: unknown })?.code === 'number') return 'zip_parse'
|
|
212
|
+
const msg = errorMessage(e)
|
|
213
|
+
if (/unzip|invalid zip|central directory/i.test(msg)) return 'zip_parse'
|
|
214
|
+
if (/empty body/.test(msg)) return 'empty_latest'
|
|
215
|
+
return 'other'
|
|
216
|
+
}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-install logic for the official Anthropic marketplace.
|
|
3
|
+
*
|
|
4
|
+
* This module handles automatically installing the official marketplace
|
|
5
|
+
* on startup for new users, with appropriate checks for:
|
|
6
|
+
* - Enterprise policy restrictions
|
|
7
|
+
* - Git availability
|
|
8
|
+
* - Previous installation attempts
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { join } from 'path'
|
|
12
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
|
|
13
|
+
import { logEvent } from '../../services/analytics/index.js'
|
|
14
|
+
import { getGlobalConfig, saveGlobalConfig } from '../config.js'
|
|
15
|
+
import { logForDebugging } from '../debug.js'
|
|
16
|
+
import { isEnvTruthy } from '../envUtils.js'
|
|
17
|
+
import { toError } from '../errors.js'
|
|
18
|
+
import { logError } from '../log.js'
|
|
19
|
+
import { checkGitAvailable, markGitUnavailable } from './gitAvailability.js'
|
|
20
|
+
import { isSourceAllowedByPolicy } from './marketplaceHelpers.js'
|
|
21
|
+
import {
|
|
22
|
+
addMarketplaceSource,
|
|
23
|
+
getMarketplacesCacheDir,
|
|
24
|
+
loadKnownMarketplacesConfig,
|
|
25
|
+
saveKnownMarketplacesConfig,
|
|
26
|
+
} from './marketplaceManager.js'
|
|
27
|
+
import {
|
|
28
|
+
OFFICIAL_MARKETPLACE_NAME,
|
|
29
|
+
OFFICIAL_MARKETPLACE_SOURCE,
|
|
30
|
+
} from './officialMarketplace.js'
|
|
31
|
+
import { fetchOfficialMarketplaceFromGcs } from './officialMarketplaceGcs.js'
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Reason why the official marketplace was not installed
|
|
35
|
+
*/
|
|
36
|
+
export type OfficialMarketplaceSkipReason =
|
|
37
|
+
| 'already_attempted'
|
|
38
|
+
| 'already_installed'
|
|
39
|
+
| 'policy_blocked'
|
|
40
|
+
| 'git_unavailable'
|
|
41
|
+
| 'gcs_unavailable'
|
|
42
|
+
| 'unknown'
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Check if official marketplace auto-install is disabled via environment variable.
|
|
46
|
+
*/
|
|
47
|
+
export function isOfficialMarketplaceAutoInstallDisabled(): boolean {
|
|
48
|
+
return isEnvTruthy(
|
|
49
|
+
process.env.CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL,
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Configuration for retry logic
|
|
55
|
+
*/
|
|
56
|
+
export const RETRY_CONFIG = {
|
|
57
|
+
MAX_ATTEMPTS: 10,
|
|
58
|
+
INITIAL_DELAY_MS: 60 * 60 * 1000, // 1 hour
|
|
59
|
+
BACKOFF_MULTIPLIER: 2,
|
|
60
|
+
MAX_DELAY_MS: 7 * 24 * 60 * 60 * 1000, // 1 week
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Calculate next retry delay using exponential backoff
|
|
65
|
+
*/
|
|
66
|
+
function calculateNextRetryDelay(retryCount: number): number {
|
|
67
|
+
const delay =
|
|
68
|
+
RETRY_CONFIG.INITIAL_DELAY_MS *
|
|
69
|
+
Math.pow(RETRY_CONFIG.BACKOFF_MULTIPLIER, retryCount)
|
|
70
|
+
return Math.min(delay, RETRY_CONFIG.MAX_DELAY_MS)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Determine if installation should be retried based on failure reason and retry state
|
|
75
|
+
*/
|
|
76
|
+
function shouldRetryInstallation(
|
|
77
|
+
config: ReturnType<typeof getGlobalConfig>,
|
|
78
|
+
): boolean {
|
|
79
|
+
// If never attempted, should try
|
|
80
|
+
if (!config.officialMarketplaceAutoInstallAttempted) {
|
|
81
|
+
return true
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// If already installed successfully, don't retry
|
|
85
|
+
if (config.officialMarketplaceAutoInstalled) {
|
|
86
|
+
return false
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const failReason = config.officialMarketplaceAutoInstallFailReason
|
|
90
|
+
const retryCount = config.officialMarketplaceAutoInstallRetryCount || 0
|
|
91
|
+
const nextRetryTime = config.officialMarketplaceAutoInstallNextRetryTime
|
|
92
|
+
const now = Date.now()
|
|
93
|
+
|
|
94
|
+
// Check if we've exceeded max attempts
|
|
95
|
+
if (retryCount >= RETRY_CONFIG.MAX_ATTEMPTS) {
|
|
96
|
+
return false
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Permanent failures - don't retry
|
|
100
|
+
if (failReason === 'policy_blocked') {
|
|
101
|
+
return false
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Check if enough time has passed for next retry
|
|
105
|
+
if (nextRetryTime && now < nextRetryTime) {
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Retry for temporary failures (unknown), semi-permanent (git_unavailable),
|
|
110
|
+
// and legacy state (undefined failReason from before retry logic existed)
|
|
111
|
+
return (
|
|
112
|
+
failReason === 'unknown' ||
|
|
113
|
+
failReason === 'git_unavailable' ||
|
|
114
|
+
failReason === 'gcs_unavailable' ||
|
|
115
|
+
failReason === undefined
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Result of the auto-install check
|
|
121
|
+
*/
|
|
122
|
+
export type OfficialMarketplaceCheckResult = {
|
|
123
|
+
/** Whether the marketplace was successfully installed */
|
|
124
|
+
installed: boolean
|
|
125
|
+
/** Whether the installation was skipped (and why) */
|
|
126
|
+
skipped: boolean
|
|
127
|
+
/** Reason for skipping, if applicable */
|
|
128
|
+
reason?: OfficialMarketplaceSkipReason
|
|
129
|
+
/** Whether saving retry metadata to config failed */
|
|
130
|
+
configSaveFailed?: boolean
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Check and install the official marketplace on startup.
|
|
135
|
+
*
|
|
136
|
+
* This function is designed to be called as a fire-and-forget operation
|
|
137
|
+
* during startup. It will:
|
|
138
|
+
* 1. Check if installation was already attempted
|
|
139
|
+
* 2. Check if marketplace is already installed
|
|
140
|
+
* 3. Check enterprise policy restrictions
|
|
141
|
+
* 4. Check git availability
|
|
142
|
+
* 5. Attempt installation
|
|
143
|
+
* 6. Record the result in GlobalConfig
|
|
144
|
+
*
|
|
145
|
+
* @returns Result indicating whether installation succeeded or was skipped
|
|
146
|
+
*/
|
|
147
|
+
export async function checkAndInstallOfficialMarketplace(): Promise<OfficialMarketplaceCheckResult> {
|
|
148
|
+
const config = getGlobalConfig()
|
|
149
|
+
|
|
150
|
+
// Check if we should retry installation
|
|
151
|
+
if (!shouldRetryInstallation(config)) {
|
|
152
|
+
const reason: OfficialMarketplaceSkipReason =
|
|
153
|
+
config.officialMarketplaceAutoInstallFailReason ?? 'already_attempted'
|
|
154
|
+
logForDebugging(`Official marketplace auto-install skipped: ${reason}`)
|
|
155
|
+
return {
|
|
156
|
+
installed: false,
|
|
157
|
+
skipped: true,
|
|
158
|
+
reason,
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
try {
|
|
163
|
+
// Check if auto-install is disabled via env var
|
|
164
|
+
if (isOfficialMarketplaceAutoInstallDisabled()) {
|
|
165
|
+
logForDebugging(
|
|
166
|
+
'Official marketplace auto-install disabled via env var, skipping',
|
|
167
|
+
)
|
|
168
|
+
saveGlobalConfig(current => ({
|
|
169
|
+
...current,
|
|
170
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
171
|
+
officialMarketplaceAutoInstalled: false,
|
|
172
|
+
officialMarketplaceAutoInstallFailReason: 'policy_blocked',
|
|
173
|
+
}))
|
|
174
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
175
|
+
installed: false,
|
|
176
|
+
skipped: true,
|
|
177
|
+
policy_blocked: true,
|
|
178
|
+
})
|
|
179
|
+
return { installed: false, skipped: true, reason: 'policy_blocked' }
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Check if marketplace is already installed
|
|
183
|
+
const knownMarketplaces = await loadKnownMarketplacesConfig()
|
|
184
|
+
if (knownMarketplaces[OFFICIAL_MARKETPLACE_NAME]) {
|
|
185
|
+
logForDebugging(
|
|
186
|
+
`Official marketplace '${OFFICIAL_MARKETPLACE_NAME}' already installed, skipping`,
|
|
187
|
+
)
|
|
188
|
+
// Mark as attempted so we don't check again
|
|
189
|
+
saveGlobalConfig(current => ({
|
|
190
|
+
...current,
|
|
191
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
192
|
+
officialMarketplaceAutoInstalled: true,
|
|
193
|
+
}))
|
|
194
|
+
return { installed: false, skipped: true, reason: 'already_installed' }
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Check enterprise policy restrictions
|
|
198
|
+
if (!isSourceAllowedByPolicy(OFFICIAL_MARKETPLACE_SOURCE)) {
|
|
199
|
+
logForDebugging(
|
|
200
|
+
'Official marketplace blocked by enterprise policy, skipping',
|
|
201
|
+
)
|
|
202
|
+
saveGlobalConfig(current => ({
|
|
203
|
+
...current,
|
|
204
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
205
|
+
officialMarketplaceAutoInstalled: false,
|
|
206
|
+
officialMarketplaceAutoInstallFailReason: 'policy_blocked',
|
|
207
|
+
}))
|
|
208
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
209
|
+
installed: false,
|
|
210
|
+
skipped: true,
|
|
211
|
+
policy_blocked: true,
|
|
212
|
+
})
|
|
213
|
+
return { installed: false, skipped: true, reason: 'policy_blocked' }
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// inc-5046: try GCS mirror first — doesn't need git, doesn't hit GitHub.
|
|
217
|
+
// Backend (anthropic#317037) publishes a marketplace zip to the same
|
|
218
|
+
// bucket as the native binary. If GCS succeeds, register the marketplace
|
|
219
|
+
// with source:'github' (still true — GCS is a mirror) and skip git
|
|
220
|
+
// entirely.
|
|
221
|
+
const cacheDir = getMarketplacesCacheDir()
|
|
222
|
+
const installLocation = join(cacheDir, OFFICIAL_MARKETPLACE_NAME)
|
|
223
|
+
const gcsSha = await fetchOfficialMarketplaceFromGcs(
|
|
224
|
+
installLocation,
|
|
225
|
+
cacheDir,
|
|
226
|
+
)
|
|
227
|
+
if (gcsSha !== null) {
|
|
228
|
+
const known = await loadKnownMarketplacesConfig()
|
|
229
|
+
known[OFFICIAL_MARKETPLACE_NAME] = {
|
|
230
|
+
source: OFFICIAL_MARKETPLACE_SOURCE,
|
|
231
|
+
installLocation,
|
|
232
|
+
lastUpdated: new Date().toISOString(),
|
|
233
|
+
}
|
|
234
|
+
await saveKnownMarketplacesConfig(known)
|
|
235
|
+
|
|
236
|
+
saveGlobalConfig(current => ({
|
|
237
|
+
...current,
|
|
238
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
239
|
+
officialMarketplaceAutoInstalled: true,
|
|
240
|
+
officialMarketplaceAutoInstallFailReason: undefined,
|
|
241
|
+
officialMarketplaceAutoInstallRetryCount: undefined,
|
|
242
|
+
officialMarketplaceAutoInstallLastAttemptTime: undefined,
|
|
243
|
+
officialMarketplaceAutoInstallNextRetryTime: undefined,
|
|
244
|
+
}))
|
|
245
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
246
|
+
installed: true,
|
|
247
|
+
skipped: false,
|
|
248
|
+
via_gcs: true,
|
|
249
|
+
})
|
|
250
|
+
return { installed: true, skipped: false }
|
|
251
|
+
}
|
|
252
|
+
// GCS failed (404 until backend writes, or network). Fall through to git
|
|
253
|
+
// ONLY if the kill-switch allows — same gate as refreshMarketplace().
|
|
254
|
+
if (
|
|
255
|
+
!getFeatureValue_CACHED_MAY_BE_STALE(
|
|
256
|
+
'tengu_plugin_official_mkt_git_fallback',
|
|
257
|
+
true,
|
|
258
|
+
)
|
|
259
|
+
) {
|
|
260
|
+
logForDebugging(
|
|
261
|
+
'Official marketplace GCS failed; git fallback disabled by flag — skipping install',
|
|
262
|
+
)
|
|
263
|
+
// Same retry-with-backoff metadata as git_unavailable below — transient
|
|
264
|
+
// GCS failures should retry with exponential backoff, not give up.
|
|
265
|
+
const retryCount =
|
|
266
|
+
(config.officialMarketplaceAutoInstallRetryCount || 0) + 1
|
|
267
|
+
const now = Date.now()
|
|
268
|
+
const nextRetryTime = now + calculateNextRetryDelay(retryCount)
|
|
269
|
+
saveGlobalConfig(current => ({
|
|
270
|
+
...current,
|
|
271
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
272
|
+
officialMarketplaceAutoInstalled: false,
|
|
273
|
+
officialMarketplaceAutoInstallFailReason: 'gcs_unavailable',
|
|
274
|
+
officialMarketplaceAutoInstallRetryCount: retryCount,
|
|
275
|
+
officialMarketplaceAutoInstallLastAttemptTime: now,
|
|
276
|
+
officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
|
|
277
|
+
}))
|
|
278
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
279
|
+
installed: false,
|
|
280
|
+
skipped: true,
|
|
281
|
+
gcs_unavailable: true,
|
|
282
|
+
retry_count: retryCount,
|
|
283
|
+
})
|
|
284
|
+
return { installed: false, skipped: true, reason: 'gcs_unavailable' }
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Check git availability
|
|
288
|
+
const gitAvailable = await checkGitAvailable()
|
|
289
|
+
if (!gitAvailable) {
|
|
290
|
+
logForDebugging(
|
|
291
|
+
'Git not available, skipping official marketplace auto-install',
|
|
292
|
+
)
|
|
293
|
+
const retryCount =
|
|
294
|
+
(config.officialMarketplaceAutoInstallRetryCount || 0) + 1
|
|
295
|
+
const now = Date.now()
|
|
296
|
+
const nextRetryDelay = calculateNextRetryDelay(retryCount)
|
|
297
|
+
const nextRetryTime = now + nextRetryDelay
|
|
298
|
+
|
|
299
|
+
let configSaveFailed = false
|
|
300
|
+
try {
|
|
301
|
+
saveGlobalConfig(current => ({
|
|
302
|
+
...current,
|
|
303
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
304
|
+
officialMarketplaceAutoInstalled: false,
|
|
305
|
+
officialMarketplaceAutoInstallFailReason: 'git_unavailable',
|
|
306
|
+
officialMarketplaceAutoInstallRetryCount: retryCount,
|
|
307
|
+
officialMarketplaceAutoInstallLastAttemptTime: now,
|
|
308
|
+
officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
|
|
309
|
+
}))
|
|
310
|
+
} catch (saveError) {
|
|
311
|
+
configSaveFailed = true
|
|
312
|
+
// Log the error properly so it gets tracked
|
|
313
|
+
const configError = toError(saveError)
|
|
314
|
+
logError(configError)
|
|
315
|
+
|
|
316
|
+
logForDebugging(
|
|
317
|
+
`Failed to save marketplace auto-install git_unavailable state: ${saveError}`,
|
|
318
|
+
{ level: 'error' },
|
|
319
|
+
)
|
|
320
|
+
}
|
|
321
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
322
|
+
installed: false,
|
|
323
|
+
skipped: true,
|
|
324
|
+
git_unavailable: true,
|
|
325
|
+
retry_count: retryCount,
|
|
326
|
+
})
|
|
327
|
+
return {
|
|
328
|
+
installed: false,
|
|
329
|
+
skipped: true,
|
|
330
|
+
reason: 'git_unavailable',
|
|
331
|
+
configSaveFailed,
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Attempt installation
|
|
336
|
+
logForDebugging('Attempting to auto-install official marketplace')
|
|
337
|
+
await addMarketplaceSource(OFFICIAL_MARKETPLACE_SOURCE)
|
|
338
|
+
|
|
339
|
+
// Success
|
|
340
|
+
logForDebugging('Successfully auto-installed official marketplace')
|
|
341
|
+
const previousRetryCount =
|
|
342
|
+
config.officialMarketplaceAutoInstallRetryCount || 0
|
|
343
|
+
saveGlobalConfig(current => ({
|
|
344
|
+
...current,
|
|
345
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
346
|
+
officialMarketplaceAutoInstalled: true,
|
|
347
|
+
// Clear retry metadata on success
|
|
348
|
+
officialMarketplaceAutoInstallFailReason: undefined,
|
|
349
|
+
officialMarketplaceAutoInstallRetryCount: undefined,
|
|
350
|
+
officialMarketplaceAutoInstallLastAttemptTime: undefined,
|
|
351
|
+
officialMarketplaceAutoInstallNextRetryTime: undefined,
|
|
352
|
+
}))
|
|
353
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
354
|
+
installed: true,
|
|
355
|
+
skipped: false,
|
|
356
|
+
retry_count: previousRetryCount,
|
|
357
|
+
})
|
|
358
|
+
return { installed: true, skipped: false }
|
|
359
|
+
} catch (error) {
|
|
360
|
+
// Handle installation failure
|
|
361
|
+
const errorMessage = error instanceof Error ? error.message : String(error)
|
|
362
|
+
|
|
363
|
+
// On macOS, /usr/bin/git is an xcrun shim that always exists on PATH, so
|
|
364
|
+
// checkGitAvailable() (which only does `which git`) passes even without
|
|
365
|
+
// Xcode CLT installed. The shim then fails at clone time with
|
|
366
|
+
// "xcrun: error: invalid active developer path (...)". Poison the memoized
|
|
367
|
+
// availability check so other git callers in this session skip cleanly,
|
|
368
|
+
// then return silently without recording any attempt state — next startup
|
|
369
|
+
// tries fresh (no backoff machinery for what is effectively "git absent").
|
|
370
|
+
if (errorMessage.includes('xcrun: error:')) {
|
|
371
|
+
markGitUnavailable()
|
|
372
|
+
logForDebugging(
|
|
373
|
+
'Official marketplace auto-install: git is a non-functional macOS xcrun shim, treating as git_unavailable',
|
|
374
|
+
)
|
|
375
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
376
|
+
installed: false,
|
|
377
|
+
skipped: true,
|
|
378
|
+
git_unavailable: true,
|
|
379
|
+
macos_xcrun_shim: true,
|
|
380
|
+
})
|
|
381
|
+
return {
|
|
382
|
+
installed: false,
|
|
383
|
+
skipped: true,
|
|
384
|
+
reason: 'git_unavailable',
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
logForDebugging(
|
|
389
|
+
`Failed to auto-install official marketplace: ${errorMessage}`,
|
|
390
|
+
{ level: 'error' },
|
|
391
|
+
)
|
|
392
|
+
logError(toError(error))
|
|
393
|
+
|
|
394
|
+
const retryCount =
|
|
395
|
+
(config.officialMarketplaceAutoInstallRetryCount || 0) + 1
|
|
396
|
+
const now = Date.now()
|
|
397
|
+
const nextRetryDelay = calculateNextRetryDelay(retryCount)
|
|
398
|
+
const nextRetryTime = now + nextRetryDelay
|
|
399
|
+
|
|
400
|
+
let configSaveFailed = false
|
|
401
|
+
try {
|
|
402
|
+
saveGlobalConfig(current => ({
|
|
403
|
+
...current,
|
|
404
|
+
officialMarketplaceAutoInstallAttempted: true,
|
|
405
|
+
officialMarketplaceAutoInstalled: false,
|
|
406
|
+
officialMarketplaceAutoInstallFailReason: 'unknown',
|
|
407
|
+
officialMarketplaceAutoInstallRetryCount: retryCount,
|
|
408
|
+
officialMarketplaceAutoInstallLastAttemptTime: now,
|
|
409
|
+
officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
|
|
410
|
+
}))
|
|
411
|
+
} catch (saveError) {
|
|
412
|
+
configSaveFailed = true
|
|
413
|
+
// Log the error properly so it gets tracked
|
|
414
|
+
const configError = toError(saveError)
|
|
415
|
+
logError(configError)
|
|
416
|
+
|
|
417
|
+
logForDebugging(
|
|
418
|
+
`Failed to save marketplace auto-install failure state: ${saveError}`,
|
|
419
|
+
{ level: 'error' },
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
// Still return the failure result even if config save failed
|
|
423
|
+
// This ensures we report the installation failure correctly
|
|
424
|
+
}
|
|
425
|
+
logEvent('tengu_official_marketplace_auto_install', {
|
|
426
|
+
installed: false,
|
|
427
|
+
skipped: true,
|
|
428
|
+
failed: true,
|
|
429
|
+
retry_count: retryCount,
|
|
430
|
+
})
|
|
431
|
+
|
|
432
|
+
return {
|
|
433
|
+
installed: false,
|
|
434
|
+
skipped: true,
|
|
435
|
+
reason: 'unknown',
|
|
436
|
+
configSaveFailed,
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|