@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,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Headless mode profiling utility for measuring per-turn latency in -p (print) mode.
|
|
3
|
+
*
|
|
4
|
+
* Tracks key timing phases per turn:
|
|
5
|
+
* - Time to system message output (turn 0 only)
|
|
6
|
+
* - Time to first query started
|
|
7
|
+
* - Time to first API response (TTFT)
|
|
8
|
+
*
|
|
9
|
+
* Uses Node.js built-in performance hooks API for standard timing measurement.
|
|
10
|
+
* Sampled logging: 100% of ant users, 5% of external users.
|
|
11
|
+
*
|
|
12
|
+
* Set CLAUDE_CODE_PROFILE_STARTUP=1 for detailed logging output.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { getIsNonInteractiveSession } from '../bootstrap/state.js'
|
|
16
|
+
import {
|
|
17
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
18
|
+
logEvent,
|
|
19
|
+
} from '../services/analytics/index.js'
|
|
20
|
+
import { logForDebugging } from './debug.js'
|
|
21
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
22
|
+
import { getPerformance } from './profilerBase.js'
|
|
23
|
+
import { jsonStringify } from './slowOperations.js'
|
|
24
|
+
|
|
25
|
+
// Detailed profiling mode - same env var as startupProfiler
|
|
26
|
+
// eslint-disable-next-line custom-rules/no-process-env-top-level
|
|
27
|
+
const DETAILED_PROFILING = isEnvTruthy(process.env.CLAUDE_CODE_PROFILE_STARTUP)
|
|
28
|
+
|
|
29
|
+
// Sampling for Statsig logging: 100% ant, 5% external
|
|
30
|
+
// Decision made once at module load - non-sampled users pay no profiling cost
|
|
31
|
+
const STATSIG_SAMPLE_RATE = 0.05
|
|
32
|
+
// eslint-disable-next-line custom-rules/no-process-env-top-level
|
|
33
|
+
const STATSIG_LOGGING_SAMPLED =
|
|
34
|
+
process.env.USER_TYPE === 'ant' || Math.random() < STATSIG_SAMPLE_RATE
|
|
35
|
+
|
|
36
|
+
// Enable profiling if either detailed mode OR sampled for Statsig
|
|
37
|
+
const SHOULD_PROFILE = DETAILED_PROFILING || STATSIG_LOGGING_SAMPLED
|
|
38
|
+
|
|
39
|
+
// Use a unique prefix to avoid conflicts with other profiler marks
|
|
40
|
+
const MARK_PREFIX = 'headless_'
|
|
41
|
+
|
|
42
|
+
// Track current turn number (auto-incremented by headlessProfilerStartTurn)
|
|
43
|
+
let currentTurnNumber = -1
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Clear all headless profiler marks from performance timeline
|
|
47
|
+
*/
|
|
48
|
+
function clearHeadlessMarks(): void {
|
|
49
|
+
const perf = getPerformance()
|
|
50
|
+
const allMarks = perf.getEntriesByType('mark')
|
|
51
|
+
for (const mark of allMarks) {
|
|
52
|
+
if (mark.name.startsWith(MARK_PREFIX)) {
|
|
53
|
+
perf.clearMarks(mark.name)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Start a new turn for profiling. Clears previous marks, increments turn number,
|
|
60
|
+
* and records turn_start. Call this at the beginning of each user message processing.
|
|
61
|
+
*/
|
|
62
|
+
export function headlessProfilerStartTurn(): void {
|
|
63
|
+
// Only profile in headless/non-interactive mode
|
|
64
|
+
if (!getIsNonInteractiveSession()) return
|
|
65
|
+
// Only profile if enabled
|
|
66
|
+
if (!SHOULD_PROFILE) return
|
|
67
|
+
|
|
68
|
+
currentTurnNumber++
|
|
69
|
+
clearHeadlessMarks()
|
|
70
|
+
|
|
71
|
+
const perf = getPerformance()
|
|
72
|
+
perf.mark(`${MARK_PREFIX}turn_start`)
|
|
73
|
+
|
|
74
|
+
if (DETAILED_PROFILING) {
|
|
75
|
+
logForDebugging(`[headlessProfiler] Started turn ${currentTurnNumber}`)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Record a checkpoint with the given name.
|
|
81
|
+
* Only records if in headless mode and profiling is enabled.
|
|
82
|
+
*/
|
|
83
|
+
export function headlessProfilerCheckpoint(name: string): void {
|
|
84
|
+
// Only profile in headless/non-interactive mode
|
|
85
|
+
if (!getIsNonInteractiveSession()) return
|
|
86
|
+
// Only profile if enabled
|
|
87
|
+
if (!SHOULD_PROFILE) return
|
|
88
|
+
|
|
89
|
+
const perf = getPerformance()
|
|
90
|
+
perf.mark(`${MARK_PREFIX}${name}`)
|
|
91
|
+
|
|
92
|
+
if (DETAILED_PROFILING) {
|
|
93
|
+
logForDebugging(
|
|
94
|
+
`[headlessProfiler] Checkpoint: ${name} at ${perf.now().toFixed(1)}ms`,
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Log headless latency metrics for the current turn to Statsig.
|
|
101
|
+
* Call this at the end of each turn (before processing next user message).
|
|
102
|
+
*/
|
|
103
|
+
export function logHeadlessProfilerTurn(): void {
|
|
104
|
+
// Only log in headless mode
|
|
105
|
+
if (!getIsNonInteractiveSession()) return
|
|
106
|
+
// Only log if enabled
|
|
107
|
+
if (!SHOULD_PROFILE) return
|
|
108
|
+
|
|
109
|
+
const perf = getPerformance()
|
|
110
|
+
const allMarks = perf.getEntriesByType('mark')
|
|
111
|
+
|
|
112
|
+
// Filter to only our headless marks
|
|
113
|
+
const marks = allMarks.filter(mark => mark.name.startsWith(MARK_PREFIX))
|
|
114
|
+
if (marks.length === 0) return
|
|
115
|
+
|
|
116
|
+
// Build checkpoint lookup (strip prefix for easier access)
|
|
117
|
+
const checkpointTimes = new Map<string, number>()
|
|
118
|
+
for (const mark of marks) {
|
|
119
|
+
const name = mark.name.slice(MARK_PREFIX.length)
|
|
120
|
+
checkpointTimes.set(name, mark.startTime)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const turnStart = checkpointTimes.get('turn_start')
|
|
124
|
+
if (turnStart === undefined) return
|
|
125
|
+
|
|
126
|
+
// Compute phase durations relative to turn_start
|
|
127
|
+
const metadata: Record<string, number | string | undefined> = {
|
|
128
|
+
turn_number: currentTurnNumber,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Time to system message from process start (only meaningful for turn 0)
|
|
132
|
+
// Use absolute time since perf_hooks startTime is relative to process start
|
|
133
|
+
const systemMessageTime = checkpointTimes.get('system_message_yielded')
|
|
134
|
+
if (systemMessageTime !== undefined && currentTurnNumber === 0) {
|
|
135
|
+
metadata.time_to_system_message_ms = Math.round(systemMessageTime)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Time to query start
|
|
139
|
+
const queryStartTime = checkpointTimes.get('query_started')
|
|
140
|
+
if (queryStartTime !== undefined) {
|
|
141
|
+
metadata.time_to_query_start_ms = Math.round(queryStartTime - turnStart)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Time to first response (first chunk from API)
|
|
145
|
+
const firstChunkTime = checkpointTimes.get('first_chunk')
|
|
146
|
+
if (firstChunkTime !== undefined) {
|
|
147
|
+
metadata.time_to_first_response_ms = Math.round(firstChunkTime - turnStart)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Query overhead (time between query start and API request sent)
|
|
151
|
+
const apiRequestTime = checkpointTimes.get('api_request_sent')
|
|
152
|
+
if (queryStartTime !== undefined && apiRequestTime !== undefined) {
|
|
153
|
+
metadata.query_overhead_ms = Math.round(apiRequestTime - queryStartTime)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Add checkpoint count for debugging
|
|
157
|
+
metadata.checkpoint_count = marks.length
|
|
158
|
+
|
|
159
|
+
// Add entrypoint for segmentation (sdk-ts, sdk-py, sdk-cli, or undefined)
|
|
160
|
+
if (process.env.CLAUDE_CODE_ENTRYPOINT) {
|
|
161
|
+
metadata.entrypoint = process.env.CLAUDE_CODE_ENTRYPOINT
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Log to Statsig if sampled
|
|
165
|
+
if (STATSIG_LOGGING_SAMPLED) {
|
|
166
|
+
logEvent(
|
|
167
|
+
'tengu_headless_latency',
|
|
168
|
+
metadata as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Log detailed output if CLAUDE_CODE_PROFILE_STARTUP=1
|
|
173
|
+
if (DETAILED_PROFILING) {
|
|
174
|
+
logForDebugging(
|
|
175
|
+
`[headlessProfiler] Turn ${currentTurnNumber} metrics: ${jsonStringify(metadata)}`,
|
|
176
|
+
)
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service for heap dump capture.
|
|
3
|
+
* Used by the /heapdump command.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { createWriteStream, writeFileSync } from 'fs'
|
|
7
|
+
import { readdir, readFile, writeFile } from 'fs/promises'
|
|
8
|
+
import { join } from 'path'
|
|
9
|
+
import { pipeline } from 'stream/promises'
|
|
10
|
+
import {
|
|
11
|
+
getHeapSnapshot,
|
|
12
|
+
getHeapSpaceStatistics,
|
|
13
|
+
getHeapStatistics,
|
|
14
|
+
type HeapSpaceInfo,
|
|
15
|
+
} from 'v8'
|
|
16
|
+
import { getSessionId } from '../bootstrap/state.js'
|
|
17
|
+
import { logEvent } from '../services/analytics/index.js'
|
|
18
|
+
import { logForDebugging } from './debug.js'
|
|
19
|
+
import { toError } from './errors.js'
|
|
20
|
+
import { getDesktopPath } from './file.js'
|
|
21
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
22
|
+
import { logError } from './log.js'
|
|
23
|
+
import { jsonStringify } from './slowOperations.js'
|
|
24
|
+
|
|
25
|
+
export type HeapDumpResult = {
|
|
26
|
+
success: boolean
|
|
27
|
+
heapPath?: string
|
|
28
|
+
diagPath?: string
|
|
29
|
+
error?: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Memory diagnostics captured alongside heap dump.
|
|
34
|
+
* Helps identify if leak is in V8 heap (captured in snapshot) or native memory (not captured).
|
|
35
|
+
*/
|
|
36
|
+
export type MemoryDiagnostics = {
|
|
37
|
+
timestamp: string
|
|
38
|
+
sessionId: string
|
|
39
|
+
trigger: 'manual' | 'auto-1.5GB'
|
|
40
|
+
dumpNumber: number // 1st, 2nd, etc. auto dump in this session (0 for manual)
|
|
41
|
+
uptimeSeconds: number
|
|
42
|
+
memoryUsage: {
|
|
43
|
+
heapUsed: number
|
|
44
|
+
heapTotal: number
|
|
45
|
+
external: number
|
|
46
|
+
arrayBuffers: number
|
|
47
|
+
rss: number
|
|
48
|
+
}
|
|
49
|
+
memoryGrowthRate: {
|
|
50
|
+
bytesPerSecond: number
|
|
51
|
+
mbPerHour: number
|
|
52
|
+
}
|
|
53
|
+
v8HeapStats: {
|
|
54
|
+
heapSizeLimit: number // Max heap size allowed
|
|
55
|
+
mallocedMemory: number // Memory allocated outside V8 heap
|
|
56
|
+
peakMallocedMemory: number // Peak native memory
|
|
57
|
+
detachedContexts: number // Leaked contexts - key leak indicator!
|
|
58
|
+
nativeContexts: number // Active contexts
|
|
59
|
+
}
|
|
60
|
+
v8HeapSpaces?: Array<{
|
|
61
|
+
name: string
|
|
62
|
+
size: number
|
|
63
|
+
used: number
|
|
64
|
+
available: number
|
|
65
|
+
}>
|
|
66
|
+
resourceUsage: {
|
|
67
|
+
maxRSS: number // Peak RSS in bytes
|
|
68
|
+
userCPUTime: number
|
|
69
|
+
systemCPUTime: number
|
|
70
|
+
}
|
|
71
|
+
activeHandles: number // Leaked timers, sockets, file handles
|
|
72
|
+
activeRequests: number // Pending async operations
|
|
73
|
+
openFileDescriptors?: number // Linux/macOS - indicates resource leaks
|
|
74
|
+
analysis: {
|
|
75
|
+
potentialLeaks: string[]
|
|
76
|
+
recommendation: string
|
|
77
|
+
}
|
|
78
|
+
smapsRollup?: string // Linux only - detailed memory breakdown
|
|
79
|
+
platform: string
|
|
80
|
+
nodeVersion: string
|
|
81
|
+
ccVersion: string
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Capture memory diagnostics.
|
|
86
|
+
* This helps identify if the leak is in V8 heap (captured) or native memory (not captured).
|
|
87
|
+
*/
|
|
88
|
+
export async function captureMemoryDiagnostics(
|
|
89
|
+
trigger: 'manual' | 'auto-1.5GB',
|
|
90
|
+
dumpNumber = 0,
|
|
91
|
+
): Promise<MemoryDiagnostics> {
|
|
92
|
+
const usage = process.memoryUsage()
|
|
93
|
+
const heapStats = getHeapStatistics()
|
|
94
|
+
const resourceUsage = process.resourceUsage()
|
|
95
|
+
const uptimeSeconds = process.uptime()
|
|
96
|
+
|
|
97
|
+
// getHeapSpaceStatistics() is not available in Bun
|
|
98
|
+
let heapSpaceStats: HeapSpaceInfo[] | undefined
|
|
99
|
+
try {
|
|
100
|
+
heapSpaceStats = getHeapSpaceStatistics()
|
|
101
|
+
} catch {
|
|
102
|
+
// Not available in Bun runtime
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Get active handles/requests count (these are internal APIs but stable)
|
|
106
|
+
const activeHandles = (
|
|
107
|
+
process as unknown as { _getActiveHandles: () => unknown[] }
|
|
108
|
+
)._getActiveHandles().length
|
|
109
|
+
const activeRequests = (
|
|
110
|
+
process as unknown as { _getActiveRequests: () => unknown[] }
|
|
111
|
+
)._getActiveRequests().length
|
|
112
|
+
|
|
113
|
+
// Try to count open file descriptors (Linux/macOS)
|
|
114
|
+
let openFileDescriptors: number | undefined
|
|
115
|
+
try {
|
|
116
|
+
openFileDescriptors = (await readdir('/proc/self/fd')).length
|
|
117
|
+
} catch {
|
|
118
|
+
// Not on Linux - try macOS approach would require lsof, skip for now
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Try to read Linux smaps_rollup for detailed memory breakdown
|
|
122
|
+
let smapsRollup: string | undefined
|
|
123
|
+
try {
|
|
124
|
+
smapsRollup = await readFile('/proc/self/smaps_rollup', 'utf8')
|
|
125
|
+
} catch {
|
|
126
|
+
// Not on Linux or no access - this is fine
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Calculate native memory (RSS - heap) and growth rate
|
|
130
|
+
const nativeMemory = usage.rss - usage.heapUsed
|
|
131
|
+
const bytesPerSecond = uptimeSeconds > 0 ? usage.rss / uptimeSeconds : 0
|
|
132
|
+
const mbPerHour = (bytesPerSecond * 3600) / (1024 * 1024)
|
|
133
|
+
|
|
134
|
+
// Identify potential leaks
|
|
135
|
+
const potentialLeaks: string[] = []
|
|
136
|
+
if (heapStats.number_of_detached_contexts > 0) {
|
|
137
|
+
potentialLeaks.push(
|
|
138
|
+
`${heapStats.number_of_detached_contexts} detached context(s) - possible iframe/context leak`,
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
if (activeHandles > 100) {
|
|
142
|
+
potentialLeaks.push(
|
|
143
|
+
`${activeHandles} active handles - possible timer/socket leak`,
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
if (nativeMemory > usage.heapUsed) {
|
|
147
|
+
potentialLeaks.push(
|
|
148
|
+
'Native memory > heap - leak may be in native addons (node-pty, sharp, etc.)',
|
|
149
|
+
)
|
|
150
|
+
}
|
|
151
|
+
if (mbPerHour > 100) {
|
|
152
|
+
potentialLeaks.push(
|
|
153
|
+
`High memory growth rate: ${mbPerHour.toFixed(1)} MB/hour`,
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
if (openFileDescriptors && openFileDescriptors > 500) {
|
|
157
|
+
potentialLeaks.push(
|
|
158
|
+
`${openFileDescriptors} open file descriptors - possible file/socket leak`,
|
|
159
|
+
)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return {
|
|
163
|
+
timestamp: new Date().toISOString(),
|
|
164
|
+
sessionId: getSessionId(),
|
|
165
|
+
trigger,
|
|
166
|
+
dumpNumber,
|
|
167
|
+
uptimeSeconds,
|
|
168
|
+
memoryUsage: {
|
|
169
|
+
heapUsed: usage.heapUsed,
|
|
170
|
+
heapTotal: usage.heapTotal,
|
|
171
|
+
external: usage.external,
|
|
172
|
+
arrayBuffers: usage.arrayBuffers,
|
|
173
|
+
rss: usage.rss,
|
|
174
|
+
},
|
|
175
|
+
memoryGrowthRate: {
|
|
176
|
+
bytesPerSecond,
|
|
177
|
+
mbPerHour,
|
|
178
|
+
},
|
|
179
|
+
v8HeapStats: {
|
|
180
|
+
heapSizeLimit: heapStats.heap_size_limit,
|
|
181
|
+
mallocedMemory: heapStats.malloced_memory,
|
|
182
|
+
peakMallocedMemory: heapStats.peak_malloced_memory,
|
|
183
|
+
detachedContexts: heapStats.number_of_detached_contexts,
|
|
184
|
+
nativeContexts: heapStats.number_of_native_contexts,
|
|
185
|
+
},
|
|
186
|
+
v8HeapSpaces: heapSpaceStats?.map(space => ({
|
|
187
|
+
name: space.space_name,
|
|
188
|
+
size: space.space_size,
|
|
189
|
+
used: space.space_used_size,
|
|
190
|
+
available: space.space_available_size,
|
|
191
|
+
})),
|
|
192
|
+
resourceUsage: {
|
|
193
|
+
maxRSS: resourceUsage.maxRSS * 1024, // Convert KB to bytes
|
|
194
|
+
userCPUTime: resourceUsage.userCPUTime,
|
|
195
|
+
systemCPUTime: resourceUsage.systemCPUTime,
|
|
196
|
+
},
|
|
197
|
+
activeHandles,
|
|
198
|
+
activeRequests,
|
|
199
|
+
openFileDescriptors,
|
|
200
|
+
analysis: {
|
|
201
|
+
potentialLeaks,
|
|
202
|
+
recommendation:
|
|
203
|
+
potentialLeaks.length > 0
|
|
204
|
+
? `WARNING: ${potentialLeaks.length} potential leak indicator(s) found. See potentialLeaks array.`
|
|
205
|
+
: 'No obvious leak indicators. Check heap snapshot for retained objects.',
|
|
206
|
+
},
|
|
207
|
+
smapsRollup,
|
|
208
|
+
platform: process.platform,
|
|
209
|
+
nodeVersion: process.version,
|
|
210
|
+
ccVersion: MACRO.VERSION,
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Core heap dump function — captures heap snapshot + diagnostics to ~/Desktop.
|
|
216
|
+
*
|
|
217
|
+
* Diagnostics are written BEFORE the heap snapshot is captured, because the
|
|
218
|
+
* V8 heap snapshot serialization can crash for very large heaps. By writing
|
|
219
|
+
* diagnostics first, we still get useful memory info even if the snapshot fails.
|
|
220
|
+
*/
|
|
221
|
+
export async function performHeapDump(
|
|
222
|
+
trigger: 'manual' | 'auto-1.5GB' = 'manual',
|
|
223
|
+
dumpNumber = 0,
|
|
224
|
+
): Promise<HeapDumpResult> {
|
|
225
|
+
try {
|
|
226
|
+
const sessionId = getSessionId()
|
|
227
|
+
|
|
228
|
+
// Capture diagnostics before any other async I/O —
|
|
229
|
+
// the heap dump itself allocates memory and would skew the numbers.
|
|
230
|
+
const diagnostics = await captureMemoryDiagnostics(trigger, dumpNumber)
|
|
231
|
+
|
|
232
|
+
const toGB = (bytes: number): string =>
|
|
233
|
+
(bytes / 1024 / 1024 / 1024).toFixed(3)
|
|
234
|
+
logForDebugging(`[HeapDump] Memory state:
|
|
235
|
+
heapUsed: ${toGB(diagnostics.memoryUsage.heapUsed)} GB (in snapshot)
|
|
236
|
+
external: ${toGB(diagnostics.memoryUsage.external)} GB (NOT in snapshot)
|
|
237
|
+
rss: ${toGB(diagnostics.memoryUsage.rss)} GB (total process)
|
|
238
|
+
${diagnostics.analysis.recommendation}`)
|
|
239
|
+
|
|
240
|
+
const dumpDir = getDesktopPath()
|
|
241
|
+
await getFsImplementation().mkdir(dumpDir)
|
|
242
|
+
|
|
243
|
+
const suffix = dumpNumber > 0 ? `-dump${dumpNumber}` : ''
|
|
244
|
+
const heapFilename = `${sessionId}${suffix}.heapsnapshot`
|
|
245
|
+
const diagFilename = `${sessionId}${suffix}-diagnostics.json`
|
|
246
|
+
const heapPath = join(dumpDir, heapFilename)
|
|
247
|
+
const diagPath = join(dumpDir, diagFilename)
|
|
248
|
+
|
|
249
|
+
// Write diagnostics first (cheap, unlikely to fail)
|
|
250
|
+
await writeFile(diagPath, jsonStringify(diagnostics, null, 2), {
|
|
251
|
+
mode: 0o600,
|
|
252
|
+
})
|
|
253
|
+
logForDebugging(`[HeapDump] Diagnostics written to ${diagPath}`)
|
|
254
|
+
|
|
255
|
+
// Write heap snapshot (this can crash for very large heaps)
|
|
256
|
+
await writeHeapSnapshot(heapPath)
|
|
257
|
+
logForDebugging(`[HeapDump] Heap dump written to ${heapPath}`)
|
|
258
|
+
|
|
259
|
+
logEvent('tengu_heap_dump', {
|
|
260
|
+
triggerManual: trigger === 'manual',
|
|
261
|
+
triggerAuto15GB: trigger === 'auto-1.5GB',
|
|
262
|
+
dumpNumber,
|
|
263
|
+
success: true,
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
return { success: true, heapPath, diagPath }
|
|
267
|
+
} catch (err) {
|
|
268
|
+
const error = toError(err)
|
|
269
|
+
logError(error)
|
|
270
|
+
logEvent('tengu_heap_dump', {
|
|
271
|
+
triggerManual: trigger === 'manual',
|
|
272
|
+
triggerAuto15GB: trigger === 'auto-1.5GB',
|
|
273
|
+
dumpNumber,
|
|
274
|
+
success: false,
|
|
275
|
+
})
|
|
276
|
+
return { success: false, error: error.message }
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Write heap snapshot to a file.
|
|
282
|
+
* Uses pipeline() which handles stream cleanup automatically on errors.
|
|
283
|
+
*/
|
|
284
|
+
async function writeHeapSnapshot(filepath: string): Promise<void> {
|
|
285
|
+
if (typeof Bun !== 'undefined') {
|
|
286
|
+
// In Bun, heapsnapshots are currently not streaming.
|
|
287
|
+
// Use synchronous I/O despite potentially large filesize so that we avoid cloning the string for cross-thread usage.
|
|
288
|
+
//
|
|
289
|
+
/* eslint-disable custom-rules/no-sync-fs -- intentionally sync to avoid cloning large heap snapshot string for cross-thread usage */
|
|
290
|
+
// @ts-expect-error 2nd argument is in the next version of Bun
|
|
291
|
+
writeFileSync(filepath, Bun.generateHeapSnapshot('v8', 'arraybuffer'), {
|
|
292
|
+
mode: 0o600,
|
|
293
|
+
})
|
|
294
|
+
/* eslint-enable custom-rules/no-sync-fs */
|
|
295
|
+
|
|
296
|
+
// Force GC to try to free that heap snapshot sooner.
|
|
297
|
+
Bun.gc(true)
|
|
298
|
+
return
|
|
299
|
+
}
|
|
300
|
+
const writeStream = createWriteStream(filepath, { mode: 0o600 })
|
|
301
|
+
const heapSnapshotStream = getHeapSnapshot()
|
|
302
|
+
await pipeline(heapSnapshotStream, writeStream)
|
|
303
|
+
}
|
package/utils/heatmap.ts
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import chalk from 'chalk'
|
|
2
|
+
import type { DailyActivity } from './stats.js'
|
|
3
|
+
import { toDateString } from './statsCache.js'
|
|
4
|
+
|
|
5
|
+
export type HeatmapOptions = {
|
|
6
|
+
terminalWidth?: number // Terminal width in characters
|
|
7
|
+
showMonthLabels?: boolean
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type Percentiles = {
|
|
11
|
+
p25: number
|
|
12
|
+
p50: number
|
|
13
|
+
p75: number
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Pre-calculates percentiles from activity data for use in intensity calculations
|
|
18
|
+
*/
|
|
19
|
+
function calculatePercentiles(
|
|
20
|
+
dailyActivity: DailyActivity[],
|
|
21
|
+
): Percentiles | null {
|
|
22
|
+
const counts = dailyActivity
|
|
23
|
+
.map(a => a.messageCount)
|
|
24
|
+
.filter(c => c > 0)
|
|
25
|
+
.sort((a, b) => a - b)
|
|
26
|
+
|
|
27
|
+
if (counts.length === 0) return null
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
p25: counts[Math.floor(counts.length * 0.25)]!,
|
|
31
|
+
p50: counts[Math.floor(counts.length * 0.5)]!,
|
|
32
|
+
p75: counts[Math.floor(counts.length * 0.75)]!,
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Generates a GitHub-style activity heatmap for the terminal
|
|
38
|
+
*/
|
|
39
|
+
export function generateHeatmap(
|
|
40
|
+
dailyActivity: DailyActivity[],
|
|
41
|
+
options: HeatmapOptions = {},
|
|
42
|
+
): string {
|
|
43
|
+
const { terminalWidth = 80, showMonthLabels = true } = options
|
|
44
|
+
|
|
45
|
+
// Day labels take 4 characters ("Mon "), calculate weeks that fit
|
|
46
|
+
// Cap at 52 weeks (1 year) to match GitHub style
|
|
47
|
+
const dayLabelWidth = 4
|
|
48
|
+
const availableWidth = terminalWidth - dayLabelWidth
|
|
49
|
+
const width = Math.min(52, Math.max(10, availableWidth))
|
|
50
|
+
|
|
51
|
+
// Build activity map by date
|
|
52
|
+
const activityMap = new Map<string, DailyActivity>()
|
|
53
|
+
for (const activity of dailyActivity) {
|
|
54
|
+
activityMap.set(activity.date, activity)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Pre-calculate percentiles once for all intensity lookups
|
|
58
|
+
const percentiles = calculatePercentiles(dailyActivity)
|
|
59
|
+
|
|
60
|
+
// Calculate date range - end at today, go back N weeks
|
|
61
|
+
const today = new Date()
|
|
62
|
+
today.setHours(0, 0, 0, 0)
|
|
63
|
+
|
|
64
|
+
// Find the Sunday of the current week (start of the week containing today)
|
|
65
|
+
const currentWeekStart = new Date(today)
|
|
66
|
+
currentWeekStart.setDate(today.getDate() - today.getDay())
|
|
67
|
+
|
|
68
|
+
// Go back (width - 1) weeks from the current week start
|
|
69
|
+
const startDate = new Date(currentWeekStart)
|
|
70
|
+
startDate.setDate(startDate.getDate() - (width - 1) * 7)
|
|
71
|
+
|
|
72
|
+
// Generate grid (7 rows for days of week, width columns for weeks)
|
|
73
|
+
// Also track which week each month starts for labels
|
|
74
|
+
const grid: string[][] = Array.from({ length: 7 }, () =>
|
|
75
|
+
Array(width).fill(''),
|
|
76
|
+
)
|
|
77
|
+
const monthStarts: { month: number; week: number }[] = []
|
|
78
|
+
let lastMonth = -1
|
|
79
|
+
|
|
80
|
+
const currentDate = new Date(startDate)
|
|
81
|
+
for (let week = 0; week < width; week++) {
|
|
82
|
+
for (let day = 0; day < 7; day++) {
|
|
83
|
+
// Don't show future dates
|
|
84
|
+
if (currentDate > today) {
|
|
85
|
+
grid[day]![week] = ' '
|
|
86
|
+
currentDate.setDate(currentDate.getDate() + 1)
|
|
87
|
+
continue
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const dateStr = toDateString(currentDate)
|
|
91
|
+
const activity = activityMap.get(dateStr)
|
|
92
|
+
|
|
93
|
+
// Track month changes (on day 0 = Sunday of each week)
|
|
94
|
+
if (day === 0) {
|
|
95
|
+
const month = currentDate.getMonth()
|
|
96
|
+
if (month !== lastMonth) {
|
|
97
|
+
monthStarts.push({ month, week })
|
|
98
|
+
lastMonth = month
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Determine intensity level based on message count
|
|
103
|
+
const intensity = getIntensity(activity?.messageCount || 0, percentiles)
|
|
104
|
+
grid[day]![week] = getHeatmapChar(intensity)
|
|
105
|
+
|
|
106
|
+
currentDate.setDate(currentDate.getDate() + 1)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Build output
|
|
111
|
+
const lines: string[] = []
|
|
112
|
+
|
|
113
|
+
// Month labels - evenly spaced across the grid
|
|
114
|
+
if (showMonthLabels) {
|
|
115
|
+
const monthNames = [
|
|
116
|
+
'Jan',
|
|
117
|
+
'Feb',
|
|
118
|
+
'Mar',
|
|
119
|
+
'Apr',
|
|
120
|
+
'May',
|
|
121
|
+
'Jun',
|
|
122
|
+
'Jul',
|
|
123
|
+
'Aug',
|
|
124
|
+
'Sep',
|
|
125
|
+
'Oct',
|
|
126
|
+
'Nov',
|
|
127
|
+
'Dec',
|
|
128
|
+
]
|
|
129
|
+
|
|
130
|
+
// Build label line with fixed-width month labels
|
|
131
|
+
const uniqueMonths = monthStarts.map(m => m.month)
|
|
132
|
+
const labelWidth = Math.floor(width / Math.max(uniqueMonths.length, 1))
|
|
133
|
+
const monthLabels = uniqueMonths
|
|
134
|
+
.map(month => monthNames[month]!.padEnd(labelWidth))
|
|
135
|
+
.join('')
|
|
136
|
+
|
|
137
|
+
// 4 spaces for day label column prefix
|
|
138
|
+
lines.push(' ' + monthLabels)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Day labels
|
|
142
|
+
const dayLabels = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
|
|
143
|
+
|
|
144
|
+
// Grid
|
|
145
|
+
for (let day = 0; day < 7; day++) {
|
|
146
|
+
// Only show labels for Mon, Wed, Fri
|
|
147
|
+
const label = [1, 3, 5].includes(day) ? dayLabels[day]!.padEnd(3) : ' '
|
|
148
|
+
const row = label + ' ' + grid[day]!.join('')
|
|
149
|
+
lines.push(row)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Legend
|
|
153
|
+
lines.push('')
|
|
154
|
+
lines.push(
|
|
155
|
+
' Less ' +
|
|
156
|
+
[
|
|
157
|
+
claudeOrange('░'),
|
|
158
|
+
claudeOrange('▒'),
|
|
159
|
+
claudeOrange('▓'),
|
|
160
|
+
claudeOrange('█'),
|
|
161
|
+
].join(' ') +
|
|
162
|
+
' More',
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
return lines.join('\n')
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function getIntensity(
|
|
169
|
+
messageCount: number,
|
|
170
|
+
percentiles: Percentiles | null,
|
|
171
|
+
): number {
|
|
172
|
+
if (messageCount === 0 || !percentiles) return 0
|
|
173
|
+
|
|
174
|
+
if (messageCount >= percentiles.p75) return 4
|
|
175
|
+
if (messageCount >= percentiles.p50) return 3
|
|
176
|
+
if (messageCount >= percentiles.p25) return 2
|
|
177
|
+
return 1
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Claude orange color (hex #da7756)
|
|
181
|
+
const claudeOrange = chalk.hex('#da7756')
|
|
182
|
+
|
|
183
|
+
function getHeatmapChar(intensity: number): string {
|
|
184
|
+
switch (intensity) {
|
|
185
|
+
case 0:
|
|
186
|
+
return chalk.gray('·')
|
|
187
|
+
case 1:
|
|
188
|
+
return claudeOrange('░')
|
|
189
|
+
case 2:
|
|
190
|
+
return claudeOrange('▒')
|
|
191
|
+
case 3:
|
|
192
|
+
return claudeOrange('▓')
|
|
193
|
+
case 4:
|
|
194
|
+
return claudeOrange('█')
|
|
195
|
+
default:
|
|
196
|
+
return chalk.gray('·')
|
|
197
|
+
}
|
|
198
|
+
}
|