@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,167 @@
|
|
|
1
|
+
import { mkdir, open } from 'fs/promises'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { getSessionId } from '../bootstrap/state.js'
|
|
4
|
+
import type { PastedContent } from './config.js'
|
|
5
|
+
import { logForDebugging } from './debug.js'
|
|
6
|
+
import { getClaudeConfigHomeDir } from './envUtils.js'
|
|
7
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
8
|
+
|
|
9
|
+
const IMAGE_STORE_DIR = 'image-cache'
|
|
10
|
+
const MAX_STORED_IMAGE_PATHS = 200
|
|
11
|
+
|
|
12
|
+
// In-memory cache of stored image paths
|
|
13
|
+
const storedImagePaths = new Map<number, string>()
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Get the image store directory for the current session.
|
|
17
|
+
*/
|
|
18
|
+
function getImageStoreDir(): string {
|
|
19
|
+
return join(getClaudeConfigHomeDir(), IMAGE_STORE_DIR, getSessionId())
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Ensure the image store directory exists.
|
|
24
|
+
*/
|
|
25
|
+
async function ensureImageStoreDir(): Promise<void> {
|
|
26
|
+
const dir = getImageStoreDir()
|
|
27
|
+
await mkdir(dir, { recursive: true })
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get the file path for an image by ID.
|
|
32
|
+
*/
|
|
33
|
+
function getImagePath(imageId: number, mediaType: string): string {
|
|
34
|
+
const extension = mediaType.split('/')[1] || 'png'
|
|
35
|
+
return join(getImageStoreDir(), `${imageId}.${extension}`)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Cache the image path immediately (fast, no file I/O).
|
|
40
|
+
*/
|
|
41
|
+
export function cacheImagePath(content: PastedContent): string | null {
|
|
42
|
+
if (content.type !== 'image') {
|
|
43
|
+
return null
|
|
44
|
+
}
|
|
45
|
+
const imagePath = getImagePath(content.id, content.mediaType || 'image/png')
|
|
46
|
+
evictOldestIfAtCap()
|
|
47
|
+
storedImagePaths.set(content.id, imagePath)
|
|
48
|
+
return imagePath
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Store an image from pastedContents to disk.
|
|
53
|
+
*/
|
|
54
|
+
export async function storeImage(
|
|
55
|
+
content: PastedContent,
|
|
56
|
+
): Promise<string | null> {
|
|
57
|
+
if (content.type !== 'image') {
|
|
58
|
+
return null
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
await ensureImageStoreDir()
|
|
63
|
+
const imagePath = getImagePath(content.id, content.mediaType || 'image/png')
|
|
64
|
+
const fh = await open(imagePath, 'w', 0o600)
|
|
65
|
+
try {
|
|
66
|
+
await fh.writeFile(content.content, { encoding: 'base64' })
|
|
67
|
+
await fh.datasync()
|
|
68
|
+
} finally {
|
|
69
|
+
await fh.close()
|
|
70
|
+
}
|
|
71
|
+
evictOldestIfAtCap()
|
|
72
|
+
storedImagePaths.set(content.id, imagePath)
|
|
73
|
+
logForDebugging(`Stored image ${content.id} to ${imagePath}`)
|
|
74
|
+
return imagePath
|
|
75
|
+
} catch (error) {
|
|
76
|
+
logForDebugging(`Failed to store image: ${error}`)
|
|
77
|
+
return null
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Store all images from pastedContents to disk.
|
|
83
|
+
*/
|
|
84
|
+
export async function storeImages(
|
|
85
|
+
pastedContents: Record<number, PastedContent>,
|
|
86
|
+
): Promise<Map<number, string>> {
|
|
87
|
+
const pathMap = new Map<number, string>()
|
|
88
|
+
|
|
89
|
+
for (const [id, content] of Object.entries(pastedContents)) {
|
|
90
|
+
if (content.type === 'image') {
|
|
91
|
+
const path = await storeImage(content)
|
|
92
|
+
if (path) {
|
|
93
|
+
pathMap.set(Number(id), path)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return pathMap
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Get the file path for a stored image by ID.
|
|
103
|
+
*/
|
|
104
|
+
export function getStoredImagePath(imageId: number): string | null {
|
|
105
|
+
return storedImagePaths.get(imageId) ?? null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Clear the in-memory cache of stored image paths.
|
|
110
|
+
*/
|
|
111
|
+
export function clearStoredImagePaths(): void {
|
|
112
|
+
storedImagePaths.clear()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function evictOldestIfAtCap(): void {
|
|
116
|
+
while (storedImagePaths.size >= MAX_STORED_IMAGE_PATHS) {
|
|
117
|
+
const oldest = storedImagePaths.keys().next().value
|
|
118
|
+
if (oldest !== undefined) {
|
|
119
|
+
storedImagePaths.delete(oldest)
|
|
120
|
+
} else {
|
|
121
|
+
break
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Clean up old image cache directories from previous sessions.
|
|
128
|
+
*/
|
|
129
|
+
export async function cleanupOldImageCaches(): Promise<void> {
|
|
130
|
+
const fsImpl = getFsImplementation()
|
|
131
|
+
const baseDir = join(getClaudeConfigHomeDir(), IMAGE_STORE_DIR)
|
|
132
|
+
const currentSessionId = getSessionId()
|
|
133
|
+
|
|
134
|
+
try {
|
|
135
|
+
let sessionDirs
|
|
136
|
+
try {
|
|
137
|
+
sessionDirs = await fsImpl.readdir(baseDir)
|
|
138
|
+
} catch {
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
for (const sessionDir of sessionDirs) {
|
|
143
|
+
if (sessionDir.name === currentSessionId) {
|
|
144
|
+
continue
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const sessionPath = join(baseDir, sessionDir.name)
|
|
148
|
+
try {
|
|
149
|
+
await fsImpl.rm(sessionPath, { recursive: true, force: true })
|
|
150
|
+
logForDebugging(`Cleaned up old image cache: ${sessionPath}`)
|
|
151
|
+
} catch {
|
|
152
|
+
// Ignore errors for individual directories
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
const remaining = await fsImpl.readdir(baseDir)
|
|
158
|
+
if (remaining.length === 0) {
|
|
159
|
+
await fsImpl.rmdir(baseDir)
|
|
160
|
+
}
|
|
161
|
+
} catch {
|
|
162
|
+
// Ignore
|
|
163
|
+
}
|
|
164
|
+
} catch {
|
|
165
|
+
// Ignore errors reading base directory
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { API_IMAGE_MAX_BASE64_SIZE } from '../constants/apiLimits.js'
|
|
2
|
+
import { logEvent } from '../services/analytics/index.js'
|
|
3
|
+
import { formatFileSize } from './format.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Information about an oversized image.
|
|
7
|
+
*/
|
|
8
|
+
export type OversizedImage = {
|
|
9
|
+
index: number
|
|
10
|
+
size: number
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Error thrown when one or more images exceed the API size limit.
|
|
15
|
+
*/
|
|
16
|
+
export class ImageSizeError extends Error {
|
|
17
|
+
constructor(oversizedImages: OversizedImage[], maxSize: number) {
|
|
18
|
+
let message: string
|
|
19
|
+
const firstImage = oversizedImages[0]
|
|
20
|
+
if (oversizedImages.length === 1 && firstImage) {
|
|
21
|
+
message =
|
|
22
|
+
`Image base64 size (${formatFileSize(firstImage.size)}) exceeds API limit (${formatFileSize(maxSize)}). ` +
|
|
23
|
+
`Please resize the image before sending.`
|
|
24
|
+
} else {
|
|
25
|
+
message =
|
|
26
|
+
`${oversizedImages.length} images exceed the API limit (${formatFileSize(maxSize)}): ` +
|
|
27
|
+
oversizedImages
|
|
28
|
+
.map(img => `Image ${img.index}: ${formatFileSize(img.size)}`)
|
|
29
|
+
.join(', ') +
|
|
30
|
+
`. Please resize these images before sending.`
|
|
31
|
+
}
|
|
32
|
+
super(message)
|
|
33
|
+
this.name = 'ImageSizeError'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type guard to check if a block is a base64 image block
|
|
39
|
+
*/
|
|
40
|
+
function isBase64ImageBlock(
|
|
41
|
+
block: unknown,
|
|
42
|
+
): block is { type: 'image'; source: { type: 'base64'; data: string } } {
|
|
43
|
+
if (typeof block !== 'object' || block === null) return false
|
|
44
|
+
const b = block as Record<string, unknown>
|
|
45
|
+
if (b.type !== 'image') return false
|
|
46
|
+
if (typeof b.source !== 'object' || b.source === null) return false
|
|
47
|
+
const source = b.source as Record<string, unknown>
|
|
48
|
+
return source.type === 'base64' && typeof source.data === 'string'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Validates that all images in messages are within the API size limit.
|
|
53
|
+
* This is a safety net at the API boundary to catch any oversized images
|
|
54
|
+
* that may have slipped through upstream processing.
|
|
55
|
+
*
|
|
56
|
+
* Note: The API's 5MB limit applies to the base64-encoded string length,
|
|
57
|
+
* not the decoded raw bytes.
|
|
58
|
+
*
|
|
59
|
+
* Works with both UserMessage/AssistantMessage types (which have { type, message })
|
|
60
|
+
* and raw MessageParam types (which have { role, content }).
|
|
61
|
+
*
|
|
62
|
+
* @param messages - Array of messages to validate
|
|
63
|
+
* @throws ImageSizeError if any image exceeds the API limit
|
|
64
|
+
*/
|
|
65
|
+
export function validateImagesForAPI(messages: unknown[]): void {
|
|
66
|
+
const oversizedImages: OversizedImage[] = []
|
|
67
|
+
let imageIndex = 0
|
|
68
|
+
|
|
69
|
+
for (const msg of messages) {
|
|
70
|
+
if (typeof msg !== 'object' || msg === null) continue
|
|
71
|
+
|
|
72
|
+
const m = msg as Record<string, unknown>
|
|
73
|
+
|
|
74
|
+
// Handle wrapped message format { type: 'user', message: { role, content } }
|
|
75
|
+
// Only check user messages
|
|
76
|
+
if (m.type !== 'user') continue
|
|
77
|
+
|
|
78
|
+
const innerMessage = m.message as Record<string, unknown> | undefined
|
|
79
|
+
if (!innerMessage) continue
|
|
80
|
+
|
|
81
|
+
const content = innerMessage.content
|
|
82
|
+
if (typeof content === 'string' || !Array.isArray(content)) continue
|
|
83
|
+
|
|
84
|
+
for (const block of content) {
|
|
85
|
+
if (isBase64ImageBlock(block)) {
|
|
86
|
+
imageIndex++
|
|
87
|
+
// Check the base64-encoded string length directly (not decoded bytes)
|
|
88
|
+
// The API limit applies to the base64 payload size
|
|
89
|
+
const base64Size = block.source.data.length
|
|
90
|
+
if (base64Size > API_IMAGE_MAX_BASE64_SIZE) {
|
|
91
|
+
logEvent('tengu_image_api_validation_failed', {
|
|
92
|
+
base64_size_bytes: base64Size,
|
|
93
|
+
max_bytes: API_IMAGE_MAX_BASE64_SIZE,
|
|
94
|
+
})
|
|
95
|
+
oversizedImages.push({ index: imageIndex, size: base64Size })
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (oversizedImages.length > 0) {
|
|
102
|
+
throw new ImageSizeError(oversizedImages, API_IMAGE_MAX_BASE64_SIZE)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Whether inference-config commands (/model, /fast, /effort) should execute
|
|
5
|
+
* immediately (during a running query) rather than waiting for the current
|
|
6
|
+
* turn to finish.
|
|
7
|
+
*
|
|
8
|
+
* Always enabled for ants; gated by experiment for external users.
|
|
9
|
+
*/
|
|
10
|
+
export function shouldInferenceConfigCommandBeImmediate(): boolean {
|
|
11
|
+
return (
|
|
12
|
+
process.env.USER_TYPE === 'ant' ||
|
|
13
|
+
getFeatureValue_CACHED_MAY_BE_STALE('tengu_immediate_model_command', false)
|
|
14
|
+
)
|
|
15
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Process Teammate Helpers
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for in-process teammate integration.
|
|
5
|
+
* Provides utilities to:
|
|
6
|
+
* - Find task ID by agent name
|
|
7
|
+
* - Handle plan approval responses
|
|
8
|
+
* - Update awaitingPlanApproval state
|
|
9
|
+
* - Detect permission-related messages
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { AppState } from '../state/AppState.js'
|
|
13
|
+
import {
|
|
14
|
+
type InProcessTeammateTaskState,
|
|
15
|
+
isInProcessTeammateTask,
|
|
16
|
+
} from '../tasks/InProcessTeammateTask/types.js'
|
|
17
|
+
import { updateTaskState } from './task/framework.js'
|
|
18
|
+
import {
|
|
19
|
+
isPermissionResponse,
|
|
20
|
+
isSandboxPermissionResponse,
|
|
21
|
+
type PlanApprovalResponseMessage,
|
|
22
|
+
} from './teammateMailbox.js'
|
|
23
|
+
|
|
24
|
+
type SetAppState = (updater: (prev: AppState) => AppState) => void
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Find the task ID for an in-process teammate by agent name.
|
|
28
|
+
*
|
|
29
|
+
* @param agentName - The agent name (e.g., "researcher")
|
|
30
|
+
* @param appState - Current AppState
|
|
31
|
+
* @returns Task ID if found, undefined otherwise
|
|
32
|
+
*/
|
|
33
|
+
export function findInProcessTeammateTaskId(
|
|
34
|
+
agentName: string,
|
|
35
|
+
appState: AppState,
|
|
36
|
+
): string | undefined {
|
|
37
|
+
for (const task of Object.values(appState.tasks)) {
|
|
38
|
+
if (
|
|
39
|
+
isInProcessTeammateTask(task) &&
|
|
40
|
+
task.identity.agentName === agentName
|
|
41
|
+
) {
|
|
42
|
+
return task.id
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return undefined
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Set awaitingPlanApproval state for an in-process teammate.
|
|
50
|
+
*
|
|
51
|
+
* @param taskId - Task ID of the in-process teammate
|
|
52
|
+
* @param setAppState - AppState setter
|
|
53
|
+
* @param awaiting - Whether teammate is awaiting plan approval
|
|
54
|
+
*/
|
|
55
|
+
export function setAwaitingPlanApproval(
|
|
56
|
+
taskId: string,
|
|
57
|
+
setAppState: SetAppState,
|
|
58
|
+
awaiting: boolean,
|
|
59
|
+
): void {
|
|
60
|
+
updateTaskState<InProcessTeammateTaskState>(taskId, setAppState, task => ({
|
|
61
|
+
...task,
|
|
62
|
+
awaitingPlanApproval: awaiting,
|
|
63
|
+
}))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Handle plan approval response for an in-process teammate.
|
|
68
|
+
* Called by the message callback when a plan_approval_response arrives.
|
|
69
|
+
*
|
|
70
|
+
* This resets awaitingPlanApproval to false. The permissionMode from the
|
|
71
|
+
* response is handled separately by the agent loop (Task #11).
|
|
72
|
+
*
|
|
73
|
+
* @param taskId - Task ID of the in-process teammate
|
|
74
|
+
* @param _response - The plan approval response message (for future use)
|
|
75
|
+
* @param setAppState - AppState setter
|
|
76
|
+
*/
|
|
77
|
+
export function handlePlanApprovalResponse(
|
|
78
|
+
taskId: string,
|
|
79
|
+
_response: PlanApprovalResponseMessage,
|
|
80
|
+
setAppState: SetAppState,
|
|
81
|
+
): void {
|
|
82
|
+
setAwaitingPlanApproval(taskId, setAppState, false)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ============ Permission Delegation Helpers ============
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Check if a message is a permission-related response.
|
|
89
|
+
* Used by in-process teammate message handlers to detect and process
|
|
90
|
+
* permission responses from the team leader.
|
|
91
|
+
*
|
|
92
|
+
* Handles both tool permissions and sandbox (network host) permissions.
|
|
93
|
+
*
|
|
94
|
+
* @param messageText - The raw message text to check
|
|
95
|
+
* @returns true if the message is a permission response
|
|
96
|
+
*/
|
|
97
|
+
export function isPermissionRelatedResponse(messageText: string): boolean {
|
|
98
|
+
return (
|
|
99
|
+
!!isPermissionResponse(messageText) ||
|
|
100
|
+
!!isSandboxPermissionResponse(messageText)
|
|
101
|
+
)
|
|
102
|
+
}
|
package/utils/ink.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TextProps } from '../ink.js'
|
|
2
|
+
import {
|
|
3
|
+
AGENT_COLOR_TO_THEME_COLOR,
|
|
4
|
+
type AgentColorName,
|
|
5
|
+
} from '../tools/AgentTool/agentColorManager.js'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_AGENT_THEME_COLOR = 'cyan_FOR_SUBAGENTS_ONLY'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Convert a color string to Ink's TextProps['color'] format.
|
|
11
|
+
* Colors are typically AgentColorName values like 'blue', 'green', etc.
|
|
12
|
+
* This converts them to theme keys so they respect the current theme.
|
|
13
|
+
* Falls back to the raw ANSI color if the color is not a known agent color.
|
|
14
|
+
*/
|
|
15
|
+
export function toInkColor(color: string | undefined): TextProps['color'] {
|
|
16
|
+
if (!color) {
|
|
17
|
+
return DEFAULT_AGENT_THEME_COLOR
|
|
18
|
+
}
|
|
19
|
+
// Try to map to a theme color if it's a known agent color
|
|
20
|
+
const themeColor = AGENT_COLOR_TO_THEME_COLOR[color as AgentColorName]
|
|
21
|
+
if (themeColor) {
|
|
22
|
+
return themeColor
|
|
23
|
+
}
|
|
24
|
+
// Fall back to raw ANSI color for unknown colors
|
|
25
|
+
return `ansi:${color}` as TextProps['color']
|
|
26
|
+
}
|
package/utils/intl.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Intl object instances with lazy initialization.
|
|
3
|
+
*
|
|
4
|
+
* Intl constructors are expensive (~0.05-0.1ms each), so we cache instances
|
|
5
|
+
* for reuse across the codebase instead of creating new ones each time.
|
|
6
|
+
* Lazy initialization ensures we only pay the cost when actually needed.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
// Segmenters for Unicode text processing (lazily initialized)
|
|
10
|
+
let graphemeSegmenter: Intl.Segmenter | null = null
|
|
11
|
+
let wordSegmenter: Intl.Segmenter | null = null
|
|
12
|
+
|
|
13
|
+
export function getGraphemeSegmenter(): Intl.Segmenter {
|
|
14
|
+
if (!graphemeSegmenter) {
|
|
15
|
+
graphemeSegmenter = new Intl.Segmenter(undefined, {
|
|
16
|
+
granularity: 'grapheme',
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
return graphemeSegmenter
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Extract the first grapheme cluster from a string.
|
|
24
|
+
* Returns '' for empty strings.
|
|
25
|
+
*/
|
|
26
|
+
export function firstGrapheme(text: string): string {
|
|
27
|
+
if (!text) return ''
|
|
28
|
+
const segments = getGraphemeSegmenter().segment(text)
|
|
29
|
+
const first = segments[Symbol.iterator]().next().value
|
|
30
|
+
return first?.segment ?? ''
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Extract the last grapheme cluster from a string.
|
|
35
|
+
* Returns '' for empty strings.
|
|
36
|
+
*/
|
|
37
|
+
export function lastGrapheme(text: string): string {
|
|
38
|
+
if (!text) return ''
|
|
39
|
+
let last = ''
|
|
40
|
+
for (const { segment } of getGraphemeSegmenter().segment(text)) {
|
|
41
|
+
last = segment
|
|
42
|
+
}
|
|
43
|
+
return last
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function getWordSegmenter(): Intl.Segmenter {
|
|
47
|
+
if (!wordSegmenter) {
|
|
48
|
+
wordSegmenter = new Intl.Segmenter(undefined, { granularity: 'word' })
|
|
49
|
+
}
|
|
50
|
+
return wordSegmenter
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// RelativeTimeFormat cache (keyed by style:numeric)
|
|
54
|
+
const rtfCache = new Map<string, Intl.RelativeTimeFormat>()
|
|
55
|
+
|
|
56
|
+
export function getRelativeTimeFormat(
|
|
57
|
+
style: 'long' | 'short' | 'narrow',
|
|
58
|
+
numeric: 'always' | 'auto',
|
|
59
|
+
): Intl.RelativeTimeFormat {
|
|
60
|
+
const key = `${style}:${numeric}`
|
|
61
|
+
let rtf = rtfCache.get(key)
|
|
62
|
+
if (!rtf) {
|
|
63
|
+
rtf = new Intl.RelativeTimeFormat('en', { style, numeric })
|
|
64
|
+
rtfCache.set(key, rtf)
|
|
65
|
+
}
|
|
66
|
+
return rtf
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Timezone is constant for the process lifetime
|
|
70
|
+
let cachedTimeZone: string | null = null
|
|
71
|
+
|
|
72
|
+
export function getTimeZone(): string {
|
|
73
|
+
if (!cachedTimeZone) {
|
|
74
|
+
cachedTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
75
|
+
}
|
|
76
|
+
return cachedTimeZone
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// System locale language subtag (e.g. 'en', 'ja') is constant for the process
|
|
80
|
+
// lifetime. null = not yet computed; undefined = computed but unavailable (so
|
|
81
|
+
// a stripped-ICU environment fails once instead of retrying on every call).
|
|
82
|
+
let cachedSystemLocaleLanguage: string | undefined | null = null
|
|
83
|
+
|
|
84
|
+
export function getSystemLocaleLanguage(): string | undefined {
|
|
85
|
+
if (cachedSystemLocaleLanguage === null) {
|
|
86
|
+
try {
|
|
87
|
+
const locale = Intl.DateTimeFormat().resolvedOptions().locale
|
|
88
|
+
cachedSystemLocaleLanguage = new Intl.Locale(locale).language
|
|
89
|
+
} catch {
|
|
90
|
+
cachedSystemLocaleLanguage = undefined
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return cachedSystemLocaleLanguage
|
|
94
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { homedir, platform } from 'os'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { getFsImplementation } from '../utils/fsOperations.js'
|
|
4
|
+
import type { IdeType } from './ide.js'
|
|
5
|
+
|
|
6
|
+
const PLUGIN_PREFIX = 'claude-code-jetbrains-plugin'
|
|
7
|
+
|
|
8
|
+
// Map of IDE names to their directory patterns
|
|
9
|
+
const ideNameToDirMap: { [key: string]: string[] } = {
|
|
10
|
+
pycharm: ['PyCharm'],
|
|
11
|
+
intellij: ['IntelliJIdea', 'IdeaIC'],
|
|
12
|
+
webstorm: ['WebStorm'],
|
|
13
|
+
phpstorm: ['PhpStorm'],
|
|
14
|
+
rubymine: ['RubyMine'],
|
|
15
|
+
clion: ['CLion'],
|
|
16
|
+
goland: ['GoLand'],
|
|
17
|
+
rider: ['Rider'],
|
|
18
|
+
datagrip: ['DataGrip'],
|
|
19
|
+
appcode: ['AppCode'],
|
|
20
|
+
dataspell: ['DataSpell'],
|
|
21
|
+
aqua: ['Aqua'],
|
|
22
|
+
gateway: ['Gateway'],
|
|
23
|
+
fleet: ['Fleet'],
|
|
24
|
+
androidstudio: ['AndroidStudio'],
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Build plugin directory paths
|
|
28
|
+
// https://www.jetbrains.com/help/pycharm/directories-used-by-the-ide-to-store-settings-caches-plugins-and-logs.html#plugins-directory
|
|
29
|
+
function buildCommonPluginDirectoryPaths(ideName: string): string[] {
|
|
30
|
+
const homeDir = homedir()
|
|
31
|
+
const directories: string[] = []
|
|
32
|
+
const idePatterns = ideNameToDirMap[ideName.toLowerCase()]
|
|
33
|
+
if (!idePatterns) {
|
|
34
|
+
return directories
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const appData = process.env.APPDATA || join(homeDir, 'AppData', 'Roaming')
|
|
38
|
+
const localAppData =
|
|
39
|
+
process.env.LOCALAPPDATA || join(homeDir, 'AppData', 'Local')
|
|
40
|
+
|
|
41
|
+
switch (platform()) {
|
|
42
|
+
case 'darwin':
|
|
43
|
+
directories.push(
|
|
44
|
+
join(homeDir, 'Library', 'Application Support', 'JetBrains'),
|
|
45
|
+
join(homeDir, 'Library', 'Application Support'),
|
|
46
|
+
)
|
|
47
|
+
if (ideName.toLowerCase() === 'androidstudio') {
|
|
48
|
+
directories.push(
|
|
49
|
+
join(homeDir, 'Library', 'Application Support', 'Google'),
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
break
|
|
53
|
+
|
|
54
|
+
case 'win32':
|
|
55
|
+
directories.push(
|
|
56
|
+
join(appData, 'JetBrains'),
|
|
57
|
+
join(localAppData, 'JetBrains'),
|
|
58
|
+
join(appData),
|
|
59
|
+
)
|
|
60
|
+
if (ideName.toLowerCase() === 'androidstudio') {
|
|
61
|
+
directories.push(join(localAppData, 'Google'))
|
|
62
|
+
}
|
|
63
|
+
break
|
|
64
|
+
|
|
65
|
+
case 'linux':
|
|
66
|
+
directories.push(
|
|
67
|
+
join(homeDir, '.config', 'JetBrains'),
|
|
68
|
+
join(homeDir, '.local', 'share', 'JetBrains'),
|
|
69
|
+
)
|
|
70
|
+
for (const pattern of idePatterns) {
|
|
71
|
+
directories.push(join(homeDir, '.' + pattern))
|
|
72
|
+
}
|
|
73
|
+
if (ideName.toLowerCase() === 'androidstudio') {
|
|
74
|
+
directories.push(join(homeDir, '.config', 'Google'))
|
|
75
|
+
}
|
|
76
|
+
break
|
|
77
|
+
default:
|
|
78
|
+
break
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return directories
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Find all actual plugin directories that exist
|
|
85
|
+
async function detectPluginDirectories(ideName: string): Promise<string[]> {
|
|
86
|
+
const foundDirectories: string[] = []
|
|
87
|
+
const fs = getFsImplementation()
|
|
88
|
+
|
|
89
|
+
const pluginDirPaths = buildCommonPluginDirectoryPaths(ideName)
|
|
90
|
+
const idePatterns = ideNameToDirMap[ideName.toLowerCase()]
|
|
91
|
+
if (!idePatterns) {
|
|
92
|
+
return foundDirectories
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Precompile once — idePatterns is invariant across baseDirs
|
|
96
|
+
const regexes = idePatterns.map(p => new RegExp('^' + p))
|
|
97
|
+
|
|
98
|
+
for (const baseDir of pluginDirPaths) {
|
|
99
|
+
try {
|
|
100
|
+
const entries = await fs.readdir(baseDir)
|
|
101
|
+
for (const regex of regexes) {
|
|
102
|
+
for (const entry of entries) {
|
|
103
|
+
if (!regex.test(entry.name)) continue
|
|
104
|
+
// Accept symlinks too — dirent.isDirectory() is false for symlinks,
|
|
105
|
+
// but GNU stow users symlink their JetBrains config dirs. Downstream
|
|
106
|
+
// fs.stat() calls will filter out symlinks that don't point to dirs.
|
|
107
|
+
if (!entry.isDirectory() && !entry.isSymbolicLink()) continue
|
|
108
|
+
const dir = join(baseDir, entry.name)
|
|
109
|
+
// Linux is the only OS to not have a plugins directory
|
|
110
|
+
if (platform() === 'linux') {
|
|
111
|
+
foundDirectories.push(dir)
|
|
112
|
+
continue
|
|
113
|
+
}
|
|
114
|
+
const pluginDir = join(dir, 'plugins')
|
|
115
|
+
try {
|
|
116
|
+
await fs.stat(pluginDir)
|
|
117
|
+
foundDirectories.push(pluginDir)
|
|
118
|
+
} catch {
|
|
119
|
+
// Plugin directory doesn't exist, skip
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
} catch {
|
|
124
|
+
// Ignore errors from stale IDE directories (ENOENT, EACCES, etc.)
|
|
125
|
+
continue
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return foundDirectories.filter(
|
|
130
|
+
(dir, index) => foundDirectories.indexOf(dir) === index,
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export async function isJetBrainsPluginInstalled(
|
|
135
|
+
ideType: IdeType,
|
|
136
|
+
): Promise<boolean> {
|
|
137
|
+
const pluginDirs = await detectPluginDirectories(ideType)
|
|
138
|
+
for (const dir of pluginDirs) {
|
|
139
|
+
const pluginPath = join(dir, PLUGIN_PREFIX)
|
|
140
|
+
try {
|
|
141
|
+
await getFsImplementation().stat(pluginPath)
|
|
142
|
+
return true
|
|
143
|
+
} catch {
|
|
144
|
+
// Plugin not found in this directory, continue
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return false
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const pluginInstalledCache = new Map<IdeType, boolean>()
|
|
151
|
+
const pluginInstalledPromiseCache = new Map<IdeType, Promise<boolean>>()
|
|
152
|
+
|
|
153
|
+
async function isJetBrainsPluginInstalledMemoized(
|
|
154
|
+
ideType: IdeType,
|
|
155
|
+
forceRefresh = false,
|
|
156
|
+
): Promise<boolean> {
|
|
157
|
+
if (!forceRefresh) {
|
|
158
|
+
const existing = pluginInstalledPromiseCache.get(ideType)
|
|
159
|
+
if (existing) {
|
|
160
|
+
return existing
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const promise = isJetBrainsPluginInstalled(ideType).then(result => {
|
|
164
|
+
pluginInstalledCache.set(ideType, result)
|
|
165
|
+
return result
|
|
166
|
+
})
|
|
167
|
+
pluginInstalledPromiseCache.set(ideType, promise)
|
|
168
|
+
return promise
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export async function isJetBrainsPluginInstalledCached(
|
|
172
|
+
ideType: IdeType,
|
|
173
|
+
forceRefresh = false,
|
|
174
|
+
): Promise<boolean> {
|
|
175
|
+
if (forceRefresh) {
|
|
176
|
+
pluginInstalledCache.delete(ideType)
|
|
177
|
+
pluginInstalledPromiseCache.delete(ideType)
|
|
178
|
+
}
|
|
179
|
+
return isJetBrainsPluginInstalledMemoized(ideType, forceRefresh)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Returns the cached result of isJetBrainsPluginInstalled synchronously.
|
|
184
|
+
* Returns false if the result hasn't been resolved yet.
|
|
185
|
+
* Use this only in sync contexts (e.g., status notice isActive checks).
|
|
186
|
+
*/
|
|
187
|
+
export function isJetBrainsPluginInstalledCachedSync(
|
|
188
|
+
ideType: IdeType,
|
|
189
|
+
): boolean {
|
|
190
|
+
return pluginInstalledCache.get(ideType) ?? false
|
|
191
|
+
}
|