@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,91 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type AnsiCode,
|
|
3
|
+
ansiCodesToString,
|
|
4
|
+
reduceAnsiCodes,
|
|
5
|
+
tokenize,
|
|
6
|
+
undoAnsiCodes,
|
|
7
|
+
} from '@alcalzone/ansi-tokenize'
|
|
8
|
+
import { stringWidth } from '../ink/stringWidth.js'
|
|
9
|
+
|
|
10
|
+
// A code is an "end code" if its code equals its endCode (e.g., hyperlink close)
|
|
11
|
+
function isEndCode(code: AnsiCode): boolean {
|
|
12
|
+
return code.code === code.endCode
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Filter to only include "start codes" (not end codes)
|
|
16
|
+
function filterStartCodes(codes: AnsiCode[]): AnsiCode[] {
|
|
17
|
+
return codes.filter(c => !isEndCode(c))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Slice a string containing ANSI escape codes.
|
|
22
|
+
*
|
|
23
|
+
* Unlike the slice-ansi package, this properly handles OSC 8 hyperlink
|
|
24
|
+
* sequences because @alcalzone/ansi-tokenize tokenizes them correctly.
|
|
25
|
+
*/
|
|
26
|
+
export default function sliceAnsi(
|
|
27
|
+
str: string,
|
|
28
|
+
start: number,
|
|
29
|
+
end?: number,
|
|
30
|
+
): string {
|
|
31
|
+
// Don't pass `end` to tokenize — it counts code units, not display cells,
|
|
32
|
+
// so it drops tokens early for text with zero-width combining marks.
|
|
33
|
+
const tokens = tokenize(str)
|
|
34
|
+
let activeCodes: AnsiCode[] = []
|
|
35
|
+
let position = 0
|
|
36
|
+
let result = ''
|
|
37
|
+
let include = false
|
|
38
|
+
|
|
39
|
+
for (const token of tokens) {
|
|
40
|
+
// Advance by display width, not code units. Combining marks (Devanagari
|
|
41
|
+
// matras, virama, diacritics) are width 0 — counting them via .length
|
|
42
|
+
// advanced position past `end` early and truncated the slice. Callers
|
|
43
|
+
// pass start/end in display cells (via stringWidth), so position must
|
|
44
|
+
// track the same units.
|
|
45
|
+
const width =
|
|
46
|
+
token.type === 'ansi' ? 0 : token.fullWidth ? 2 : stringWidth(token.value)
|
|
47
|
+
|
|
48
|
+
// Break AFTER trailing zero-width marks — a combining mark attaches to
|
|
49
|
+
// the preceding base char, so "भा" (भ + ा, 1 display cell) sliced at
|
|
50
|
+
// end=1 must include the ा. Breaking on position >= end BEFORE the
|
|
51
|
+
// zero-width check would drop it and render भ bare. ANSI codes are
|
|
52
|
+
// width 0 but must NOT be included past end (they open new style runs
|
|
53
|
+
// that leak into the undo sequence), so gate on char type too. The
|
|
54
|
+
// !include guard ensures empty slices (start===end) stay empty even
|
|
55
|
+
// when the string starts with a zero-width char (BOM, ZWJ).
|
|
56
|
+
if (end !== undefined && position >= end) {
|
|
57
|
+
if (token.type === 'ansi' || width > 0 || !include) break
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (token.type === 'ansi') {
|
|
61
|
+
activeCodes.push(token)
|
|
62
|
+
if (include) {
|
|
63
|
+
// Emit all ANSI codes during the slice
|
|
64
|
+
result += token.code
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
if (!include && position >= start) {
|
|
68
|
+
// Skip leading zero-width marks at the start boundary — they belong
|
|
69
|
+
// to the preceding base char in the left half. Without this, the
|
|
70
|
+
// mark appears in BOTH halves: left+right ≠ original. Only applies
|
|
71
|
+
// when start > 0 (otherwise there's no preceding char to own it).
|
|
72
|
+
if (start > 0 && width === 0) continue
|
|
73
|
+
include = true
|
|
74
|
+
// Reduce and filter to only active start codes
|
|
75
|
+
activeCodes = filterStartCodes(reduceAnsiCodes(activeCodes))
|
|
76
|
+
result = ansiCodesToString(activeCodes)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (include) {
|
|
80
|
+
result += token.value
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
position += width
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Only undo start codes that are still active
|
|
88
|
+
const activeStartCodes = filterStartCodes(reduceAnsiCodes(activeCodes))
|
|
89
|
+
result += ansiCodesToString(undoAnsiCodes(activeStartCodes))
|
|
90
|
+
return result
|
|
91
|
+
}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import type { WriteFileOptions } from 'fs'
|
|
3
|
+
import {
|
|
4
|
+
closeSync,
|
|
5
|
+
writeFileSync as fsWriteFileSync,
|
|
6
|
+
fsyncSync,
|
|
7
|
+
openSync,
|
|
8
|
+
} from 'fs'
|
|
9
|
+
// biome-ignore lint: This file IS the cloneDeep wrapper - it must import the original
|
|
10
|
+
import lodashCloneDeep from 'lodash-es/cloneDeep.js'
|
|
11
|
+
import { addSlowOperation } from '../bootstrap/state.js'
|
|
12
|
+
import { logForDebugging } from './debug.js'
|
|
13
|
+
|
|
14
|
+
// Extended WriteFileOptions to include 'flush' which is available in Node.js 20.1.0+
|
|
15
|
+
// but not yet in @types/node
|
|
16
|
+
type WriteFileOptionsWithFlush =
|
|
17
|
+
| WriteFileOptions
|
|
18
|
+
| (WriteFileOptions & { flush?: boolean })
|
|
19
|
+
|
|
20
|
+
// --- Slow operation logging infrastructure ---
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Threshold in milliseconds for logging slow JSON/clone operations.
|
|
24
|
+
* Operations taking longer than this will be logged for debugging.
|
|
25
|
+
* - Override: set CLAUDE_CODE_SLOW_OPERATION_THRESHOLD_MS to a number
|
|
26
|
+
* - Dev builds: 20ms (lower threshold for development)
|
|
27
|
+
* - Ants: 300ms (enabled for all internal users)
|
|
28
|
+
*/
|
|
29
|
+
const SLOW_OPERATION_THRESHOLD_MS = (() => {
|
|
30
|
+
const envValue = process.env.CLAUDE_CODE_SLOW_OPERATION_THRESHOLD_MS
|
|
31
|
+
if (envValue !== undefined) {
|
|
32
|
+
const parsed = Number(envValue)
|
|
33
|
+
if (!Number.isNaN(parsed) && parsed >= 0) {
|
|
34
|
+
return parsed
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (process.env.NODE_ENV === 'development') {
|
|
38
|
+
return 20
|
|
39
|
+
}
|
|
40
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
41
|
+
return 300
|
|
42
|
+
}
|
|
43
|
+
return Infinity
|
|
44
|
+
})()
|
|
45
|
+
|
|
46
|
+
// Re-export for callers that still need the threshold value directly
|
|
47
|
+
export { SLOW_OPERATION_THRESHOLD_MS }
|
|
48
|
+
|
|
49
|
+
// Module-level re-entrancy guard. logForDebugging writes to a debug file via
|
|
50
|
+
// appendFileSync, which goes through slowLogging again. Without this guard,
|
|
51
|
+
// a slow appendFileSync → dispose → logForDebugging → appendFileSync → dispose → ...
|
|
52
|
+
let isLogging = false
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Extract the first stack frame outside this file, so the DevBar warning
|
|
56
|
+
* points at the actual caller instead of a useless `Object{N keys}`.
|
|
57
|
+
* Only called when an operation was actually slow — never on the fast path.
|
|
58
|
+
*/
|
|
59
|
+
export function callerFrame(stack: string | undefined): string {
|
|
60
|
+
if (!stack) return ''
|
|
61
|
+
for (const line of stack.split('\n')) {
|
|
62
|
+
if (line.includes('slowOperations')) continue
|
|
63
|
+
const m = line.match(/([^/\\]+?):(\d+):\d+\)?$/)
|
|
64
|
+
if (m) return ` @ ${m[1]}:${m[2]}`
|
|
65
|
+
}
|
|
66
|
+
return ''
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Builds a human-readable description from tagged template arguments.
|
|
71
|
+
* Only called when an operation was actually slow — never on the fast path.
|
|
72
|
+
*
|
|
73
|
+
* args[0] = TemplateStringsArray, args[1..n] = interpolated values
|
|
74
|
+
*/
|
|
75
|
+
function buildDescription(args: IArguments): string {
|
|
76
|
+
const strings = args[0] as TemplateStringsArray
|
|
77
|
+
let result = ''
|
|
78
|
+
for (let i = 0; i < strings.length; i++) {
|
|
79
|
+
result += strings[i]
|
|
80
|
+
if (i + 1 < args.length) {
|
|
81
|
+
const v = args[i + 1]
|
|
82
|
+
if (Array.isArray(v)) {
|
|
83
|
+
result += `Array[${(v as unknown[]).length}]`
|
|
84
|
+
} else if (v !== null && typeof v === 'object') {
|
|
85
|
+
result += `Object{${Object.keys(v as Record<string, unknown>).length} keys}`
|
|
86
|
+
} else if (typeof v === 'string') {
|
|
87
|
+
result += v.length > 80 ? `${v.slice(0, 80)}…` : v
|
|
88
|
+
} else {
|
|
89
|
+
result += String(v)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return result
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
class AntSlowLogger {
|
|
97
|
+
startTime: number
|
|
98
|
+
args: IArguments
|
|
99
|
+
err: Error
|
|
100
|
+
|
|
101
|
+
constructor(args: IArguments) {
|
|
102
|
+
this.startTime = performance.now()
|
|
103
|
+
this.args = args
|
|
104
|
+
// V8/JSC capture the stack at construction but defer the expensive string
|
|
105
|
+
// formatting until .stack is read — so this stays off the fast path.
|
|
106
|
+
this.err = new Error()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
[Symbol.dispose](): void {
|
|
110
|
+
const duration = performance.now() - this.startTime
|
|
111
|
+
if (duration > SLOW_OPERATION_THRESHOLD_MS && !isLogging) {
|
|
112
|
+
isLogging = true
|
|
113
|
+
try {
|
|
114
|
+
const description =
|
|
115
|
+
buildDescription(this.args) + callerFrame(this.err.stack)
|
|
116
|
+
logForDebugging(
|
|
117
|
+
`[SLOW OPERATION DETECTED] ${description} (${duration.toFixed(1)}ms)`,
|
|
118
|
+
)
|
|
119
|
+
addSlowOperation(description, duration)
|
|
120
|
+
} finally {
|
|
121
|
+
isLogging = false
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const NOOP_LOGGER: Disposable = { [Symbol.dispose]() {} }
|
|
128
|
+
|
|
129
|
+
// Must be regular functions (not arrows) to access `arguments`
|
|
130
|
+
function slowLoggingAnt(
|
|
131
|
+
_strings: TemplateStringsArray,
|
|
132
|
+
..._values: unknown[]
|
|
133
|
+
): AntSlowLogger {
|
|
134
|
+
// eslint-disable-next-line prefer-rest-params
|
|
135
|
+
return new AntSlowLogger(arguments)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function slowLoggingExternal(): Disposable {
|
|
139
|
+
return NOOP_LOGGER
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Tagged template for slow operation logging.
|
|
144
|
+
*
|
|
145
|
+
* In ANT builds: creates an AntSlowLogger that times the operation and logs
|
|
146
|
+
* if it exceeds the threshold. Description is built lazily only when slow.
|
|
147
|
+
*
|
|
148
|
+
* In external builds: returns a singleton no-op disposable. Zero allocations,
|
|
149
|
+
* zero timing. AntSlowLogger and buildDescription are dead-code-eliminated.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* using _ = slowLogging`structuredClone(${value})`
|
|
153
|
+
* const result = structuredClone(value)
|
|
154
|
+
*/
|
|
155
|
+
export const slowLogging: {
|
|
156
|
+
(strings: TemplateStringsArray, ...values: unknown[]): Disposable
|
|
157
|
+
} = feature('SLOW_OPERATION_LOGGING') ? slowLoggingAnt : slowLoggingExternal
|
|
158
|
+
|
|
159
|
+
// --- Wrapped operations ---
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Wrapped JSON.stringify with slow operation logging.
|
|
163
|
+
* Use this instead of JSON.stringify directly to detect performance issues.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* import { jsonStringify } from './slowOperations.js'
|
|
167
|
+
* const json = jsonStringify(data)
|
|
168
|
+
* const prettyJson = jsonStringify(data, null, 2)
|
|
169
|
+
*/
|
|
170
|
+
export function jsonStringify(
|
|
171
|
+
value: unknown,
|
|
172
|
+
replacer?: (this: unknown, key: string, value: unknown) => unknown,
|
|
173
|
+
space?: string | number,
|
|
174
|
+
): string
|
|
175
|
+
export function jsonStringify(
|
|
176
|
+
value: unknown,
|
|
177
|
+
replacer?: (number | string)[] | null,
|
|
178
|
+
space?: string | number,
|
|
179
|
+
): string
|
|
180
|
+
export function jsonStringify(
|
|
181
|
+
value: unknown,
|
|
182
|
+
replacer?:
|
|
183
|
+
| ((this: unknown, key: string, value: unknown) => unknown)
|
|
184
|
+
| (number | string)[]
|
|
185
|
+
| null,
|
|
186
|
+
space?: string | number,
|
|
187
|
+
): string {
|
|
188
|
+
using _ = slowLogging`JSON.stringify(${value})`
|
|
189
|
+
return JSON.stringify(
|
|
190
|
+
value,
|
|
191
|
+
replacer as Parameters<typeof JSON.stringify>[1],
|
|
192
|
+
space,
|
|
193
|
+
)
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Wrapped JSON.parse with slow operation logging.
|
|
198
|
+
* Use this instead of JSON.parse directly to detect performance issues.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* import { jsonParse } from './slowOperations.js'
|
|
202
|
+
* const data = jsonParse(jsonString)
|
|
203
|
+
*/
|
|
204
|
+
export const jsonParse: typeof JSON.parse = (text, reviver) => {
|
|
205
|
+
using _ = slowLogging`JSON.parse(${text})`
|
|
206
|
+
// V8 de-opts JSON.parse when a second argument is passed, even if undefined.
|
|
207
|
+
// Branch explicitly so the common (no-reviver) path stays on the fast path.
|
|
208
|
+
return typeof reviver === 'undefined'
|
|
209
|
+
? JSON.parse(text)
|
|
210
|
+
: JSON.parse(text, reviver)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Wrapped structuredClone with slow operation logging.
|
|
215
|
+
* Use this instead of structuredClone directly to detect performance issues.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* import { clone } from './slowOperations.js'
|
|
219
|
+
* const copy = clone(originalObject)
|
|
220
|
+
*/
|
|
221
|
+
export function clone<T>(value: T, options?: StructuredSerializeOptions): T {
|
|
222
|
+
using _ = slowLogging`structuredClone(${value})`
|
|
223
|
+
return structuredClone(value, options)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Wrapped cloneDeep with slow operation logging.
|
|
228
|
+
* Use this instead of lodash cloneDeep directly to detect performance issues.
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* import { cloneDeep } from './slowOperations.js'
|
|
232
|
+
* const copy = cloneDeep(originalObject)
|
|
233
|
+
*/
|
|
234
|
+
export function cloneDeep<T>(value: T): T {
|
|
235
|
+
using _ = slowLogging`cloneDeep(${value})`
|
|
236
|
+
return lodashCloneDeep(value)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Wrapper around fs.writeFileSync with slow operation logging.
|
|
241
|
+
* Supports flush option to ensure data is written to disk before returning.
|
|
242
|
+
* @param filePath The path to the file to write to
|
|
243
|
+
* @param data The data to write (string or Buffer)
|
|
244
|
+
* @param options Optional write options (encoding, mode, flag, flush)
|
|
245
|
+
* @deprecated Use `fs.promises.writeFile` instead for non-blocking writes.
|
|
246
|
+
* Sync file writes block the event loop and cause performance issues.
|
|
247
|
+
*/
|
|
248
|
+
export function writeFileSync_DEPRECATED(
|
|
249
|
+
filePath: string,
|
|
250
|
+
data: string | NodeJS.ArrayBufferView,
|
|
251
|
+
options?: WriteFileOptionsWithFlush,
|
|
252
|
+
): void {
|
|
253
|
+
using _ = slowLogging`fs.writeFileSync(${filePath}, ${data})`
|
|
254
|
+
|
|
255
|
+
// Check if flush is requested (for object-style options)
|
|
256
|
+
const needsFlush =
|
|
257
|
+
options !== null &&
|
|
258
|
+
typeof options === 'object' &&
|
|
259
|
+
'flush' in options &&
|
|
260
|
+
options.flush === true
|
|
261
|
+
|
|
262
|
+
if (needsFlush) {
|
|
263
|
+
// Manual flush: open file, write, fsync, close
|
|
264
|
+
const encoding =
|
|
265
|
+
typeof options === 'object' && 'encoding' in options
|
|
266
|
+
? options.encoding
|
|
267
|
+
: undefined
|
|
268
|
+
const mode =
|
|
269
|
+
typeof options === 'object' && 'mode' in options
|
|
270
|
+
? options.mode
|
|
271
|
+
: undefined
|
|
272
|
+
let fd: number | undefined
|
|
273
|
+
try {
|
|
274
|
+
fd = openSync(filePath, 'w', mode)
|
|
275
|
+
fsWriteFileSync(fd, data, { encoding: encoding ?? undefined })
|
|
276
|
+
fsyncSync(fd)
|
|
277
|
+
} finally {
|
|
278
|
+
if (fd !== undefined) {
|
|
279
|
+
closeSync(fd)
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
// No flush needed, use standard writeFileSync
|
|
284
|
+
fsWriteFileSync(filePath, data, options as WriteFileOptions)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone agent utilities for sessions with custom names/colors
|
|
3
|
+
*
|
|
4
|
+
* These helpers provide access to standalone agent context (name and color)
|
|
5
|
+
* for sessions that are NOT part of a swarm team. When a session is part
|
|
6
|
+
* of a swarm, these functions return undefined to let swarm context take
|
|
7
|
+
* precedence.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { AppState } from '../state/AppState.js'
|
|
11
|
+
import { getTeamName } from './teammate.js'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Returns the standalone agent name if set and not a swarm teammate.
|
|
15
|
+
* Uses getTeamName() for consistency with isTeammate() swarm detection.
|
|
16
|
+
*/
|
|
17
|
+
export function getStandaloneAgentName(appState: AppState): string | undefined {
|
|
18
|
+
// If in a team (swarm), don't return standalone name
|
|
19
|
+
if (getTeamName()) {
|
|
20
|
+
return undefined
|
|
21
|
+
}
|
|
22
|
+
return appState.standaloneAgentContext?.name
|
|
23
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Startup profiling utility for measuring and reporting time spent in various
|
|
3
|
+
* initialization phases.
|
|
4
|
+
*
|
|
5
|
+
* Two modes:
|
|
6
|
+
* 1. Sampled logging: 100% of ant users, 0.1% of external users - logs phases to Statsig
|
|
7
|
+
* 2. Detailed profiling: CLAUDE_CODE_PROFILE_STARTUP=1 - full report with memory snapshots
|
|
8
|
+
*
|
|
9
|
+
* Uses Node.js built-in performance hooks API for standard timing measurement.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { dirname, join } from 'path'
|
|
13
|
+
import { getSessionId } from 'src/bootstrap/state.js'
|
|
14
|
+
import {
|
|
15
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
16
|
+
logEvent,
|
|
17
|
+
} from '../services/analytics/index.js'
|
|
18
|
+
import { logForDebugging } from './debug.js'
|
|
19
|
+
import { getClaudeConfigHomeDir, isEnvTruthy } from './envUtils.js'
|
|
20
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
21
|
+
import { formatMs, formatTimelineLine, getPerformance } from './profilerBase.js'
|
|
22
|
+
import { writeFileSync_DEPRECATED } from './slowOperations.js'
|
|
23
|
+
|
|
24
|
+
// Module-level state - decided once at module load
|
|
25
|
+
// eslint-disable-next-line custom-rules/no-process-env-top-level
|
|
26
|
+
const DETAILED_PROFILING = isEnvTruthy(process.env.CLAUDE_CODE_PROFILE_STARTUP)
|
|
27
|
+
|
|
28
|
+
// Sampling for Statsig logging: 100% ant, 0.5% external
|
|
29
|
+
// Decision made once at startup - non-sampled users pay no profiling cost
|
|
30
|
+
const STATSIG_SAMPLE_RATE = 0.005
|
|
31
|
+
// eslint-disable-next-line custom-rules/no-process-env-top-level
|
|
32
|
+
const STATSIG_LOGGING_SAMPLED =
|
|
33
|
+
process.env.USER_TYPE === 'ant' || Math.random() < STATSIG_SAMPLE_RATE
|
|
34
|
+
|
|
35
|
+
// Enable profiling if either detailed mode OR sampled for Statsig
|
|
36
|
+
const SHOULD_PROFILE = DETAILED_PROFILING || STATSIG_LOGGING_SAMPLED
|
|
37
|
+
|
|
38
|
+
// Track memory snapshots separately (perf_hooks doesn't track memory).
|
|
39
|
+
// Only used when DETAILED_PROFILING is enabled.
|
|
40
|
+
// Stored as an array that appends in the same order as perf.mark() calls, so
|
|
41
|
+
// memorySnapshots[i] corresponds to getEntriesByType('mark')[i]. Using a Map
|
|
42
|
+
// keyed by checkpoint name is wrong because some checkpoints fire more than
|
|
43
|
+
// once (e.g. loadSettingsFromDisk_start fires during init and again after
|
|
44
|
+
// plugins reset the settings cache), and the second call would overwrite the
|
|
45
|
+
// first's memory snapshot.
|
|
46
|
+
const memorySnapshots: NodeJS.MemoryUsage[] = []
|
|
47
|
+
|
|
48
|
+
// Phase definitions for Statsig logging: [startCheckpoint, endCheckpoint]
|
|
49
|
+
const PHASE_DEFINITIONS = {
|
|
50
|
+
import_time: ['cli_entry', 'main_tsx_imports_loaded'],
|
|
51
|
+
init_time: ['init_function_start', 'init_function_end'],
|
|
52
|
+
settings_time: ['eagerLoadSettings_start', 'eagerLoadSettings_end'],
|
|
53
|
+
total_time: ['cli_entry', 'main_after_run'],
|
|
54
|
+
} as const
|
|
55
|
+
|
|
56
|
+
// Record initial checkpoint if profiling is enabled
|
|
57
|
+
if (SHOULD_PROFILE) {
|
|
58
|
+
// eslint-disable-next-line custom-rules/no-top-level-side-effects
|
|
59
|
+
profileCheckpoint('profiler_initialized')
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Record a checkpoint with the given name
|
|
64
|
+
*/
|
|
65
|
+
export function profileCheckpoint(name: string): void {
|
|
66
|
+
if (!SHOULD_PROFILE) return
|
|
67
|
+
|
|
68
|
+
const perf = getPerformance()
|
|
69
|
+
perf.mark(name)
|
|
70
|
+
|
|
71
|
+
// Only capture memory when detailed profiling enabled (env var)
|
|
72
|
+
if (DETAILED_PROFILING) {
|
|
73
|
+
memorySnapshots.push(process.memoryUsage())
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Get a formatted report of all checkpoints
|
|
79
|
+
* Only available when DETAILED_PROFILING is enabled
|
|
80
|
+
*/
|
|
81
|
+
function getReport(): string {
|
|
82
|
+
if (!DETAILED_PROFILING) {
|
|
83
|
+
return 'Startup profiling not enabled'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const perf = getPerformance()
|
|
87
|
+
const marks = perf.getEntriesByType('mark')
|
|
88
|
+
if (marks.length === 0) {
|
|
89
|
+
return 'No profiling checkpoints recorded'
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const lines: string[] = []
|
|
93
|
+
lines.push('='.repeat(80))
|
|
94
|
+
lines.push('STARTUP PROFILING REPORT')
|
|
95
|
+
lines.push('='.repeat(80))
|
|
96
|
+
lines.push('')
|
|
97
|
+
|
|
98
|
+
let prevTime = 0
|
|
99
|
+
for (const [i, mark] of marks.entries()) {
|
|
100
|
+
lines.push(
|
|
101
|
+
formatTimelineLine(
|
|
102
|
+
mark.startTime,
|
|
103
|
+
mark.startTime - prevTime,
|
|
104
|
+
mark.name,
|
|
105
|
+
memorySnapshots[i],
|
|
106
|
+
8,
|
|
107
|
+
7,
|
|
108
|
+
),
|
|
109
|
+
)
|
|
110
|
+
prevTime = mark.startTime
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const lastMark = marks[marks.length - 1]
|
|
114
|
+
lines.push('')
|
|
115
|
+
lines.push(`Total startup time: ${formatMs(lastMark?.startTime ?? 0)}ms`)
|
|
116
|
+
lines.push('='.repeat(80))
|
|
117
|
+
|
|
118
|
+
return lines.join('\n')
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
let reported = false
|
|
122
|
+
|
|
123
|
+
export function profileReport(): void {
|
|
124
|
+
if (reported) return
|
|
125
|
+
reported = true
|
|
126
|
+
|
|
127
|
+
// Log to Statsig (sampled: 100% ant, 0.1% external)
|
|
128
|
+
logStartupPerf()
|
|
129
|
+
|
|
130
|
+
// Output detailed report if CLAUDE_CODE_PROFILE_STARTUP=1
|
|
131
|
+
if (DETAILED_PROFILING) {
|
|
132
|
+
// Write to file
|
|
133
|
+
const path = getStartupPerfLogPath()
|
|
134
|
+
const dir = dirname(path)
|
|
135
|
+
const fs = getFsImplementation()
|
|
136
|
+
fs.mkdirSync(dir)
|
|
137
|
+
writeFileSync_DEPRECATED(path, getReport(), {
|
|
138
|
+
encoding: 'utf8',
|
|
139
|
+
flush: true,
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
logForDebugging('Startup profiling report:')
|
|
143
|
+
logForDebugging(getReport())
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function isDetailedProfilingEnabled(): boolean {
|
|
148
|
+
return DETAILED_PROFILING
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export function getStartupPerfLogPath(): string {
|
|
152
|
+
return join(getClaudeConfigHomeDir(), 'startup-perf', `${getSessionId()}.txt`)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Log startup performance phases to Statsig.
|
|
157
|
+
* Only logs if this session was sampled at startup.
|
|
158
|
+
*/
|
|
159
|
+
export function logStartupPerf(): void {
|
|
160
|
+
// Only log if we were sampled (decision made at module load)
|
|
161
|
+
if (!STATSIG_LOGGING_SAMPLED) return
|
|
162
|
+
|
|
163
|
+
const perf = getPerformance()
|
|
164
|
+
const marks = perf.getEntriesByType('mark')
|
|
165
|
+
if (marks.length === 0) return
|
|
166
|
+
|
|
167
|
+
// Build checkpoint lookup
|
|
168
|
+
const checkpointTimes = new Map<string, number>()
|
|
169
|
+
for (const mark of marks) {
|
|
170
|
+
checkpointTimes.set(mark.name, mark.startTime)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Compute phase durations
|
|
174
|
+
const metadata: Record<string, number | undefined> = {}
|
|
175
|
+
|
|
176
|
+
for (const [phaseName, [startCheckpoint, endCheckpoint]] of Object.entries(
|
|
177
|
+
PHASE_DEFINITIONS,
|
|
178
|
+
)) {
|
|
179
|
+
const startTime = checkpointTimes.get(startCheckpoint)
|
|
180
|
+
const endTime = checkpointTimes.get(endCheckpoint)
|
|
181
|
+
|
|
182
|
+
if (startTime !== undefined && endTime !== undefined) {
|
|
183
|
+
metadata[`${phaseName}_ms`] = Math.round(endTime - startTime)
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Add checkpoint count for debugging
|
|
188
|
+
metadata.checkpoint_count = marks.length
|
|
189
|
+
|
|
190
|
+
logEvent(
|
|
191
|
+
'tengu_startup_perf',
|
|
192
|
+
metadata as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
193
|
+
)
|
|
194
|
+
}
|