@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,231 @@
|
|
|
1
|
+
import { execaSync } from 'execa'
|
|
2
|
+
import { logForDebugging } from '../debug.js'
|
|
3
|
+
import { execFileNoThrow } from '../execFileNoThrow.js'
|
|
4
|
+
import { execSyncWithDefaults_DEPRECATED } from '../execFileNoThrowPortable.js'
|
|
5
|
+
import { jsonParse, jsonStringify } from '../slowOperations.js'
|
|
6
|
+
import {
|
|
7
|
+
CREDENTIALS_SERVICE_SUFFIX,
|
|
8
|
+
clearKeychainCache,
|
|
9
|
+
getMacOsKeychainStorageServiceName,
|
|
10
|
+
getUsername,
|
|
11
|
+
KEYCHAIN_CACHE_TTL_MS,
|
|
12
|
+
keychainCacheState,
|
|
13
|
+
} from './macOsKeychainHelpers.js'
|
|
14
|
+
import type { SecureStorage, SecureStorageData } from './types.js'
|
|
15
|
+
|
|
16
|
+
// `security -i` reads stdin with a 4096-byte fgets() buffer (BUFSIZ on darwin).
|
|
17
|
+
// A command line longer than this is truncated mid-argument: the first 4096
|
|
18
|
+
// bytes are consumed as one command (unterminated quote → fails), the overflow
|
|
19
|
+
// is interpreted as a second unknown command. Net: non-zero exit with NO data
|
|
20
|
+
// written, but the *previous* keychain entry is left intact — which fallback
|
|
21
|
+
// storage then reads as stale. See #30337.
|
|
22
|
+
// Headroom of 64B below the limit guards against edge-case line-terminator
|
|
23
|
+
// accounting differences.
|
|
24
|
+
const SECURITY_STDIN_LINE_LIMIT = 4096 - 64
|
|
25
|
+
|
|
26
|
+
export const macOsKeychainStorage = {
|
|
27
|
+
name: 'keychain',
|
|
28
|
+
read(): SecureStorageData | null {
|
|
29
|
+
const prev = keychainCacheState.cache
|
|
30
|
+
if (Date.now() - prev.cachedAt < KEYCHAIN_CACHE_TTL_MS) {
|
|
31
|
+
return prev.data
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const storageServiceName = getMacOsKeychainStorageServiceName(
|
|
36
|
+
CREDENTIALS_SERVICE_SUFFIX,
|
|
37
|
+
)
|
|
38
|
+
const username = getUsername()
|
|
39
|
+
const result = execSyncWithDefaults_DEPRECATED(
|
|
40
|
+
`security find-generic-password -a "${username}" -w -s "${storageServiceName}"`,
|
|
41
|
+
)
|
|
42
|
+
if (result) {
|
|
43
|
+
const data = jsonParse(result)
|
|
44
|
+
keychainCacheState.cache = { data, cachedAt: Date.now() }
|
|
45
|
+
return data
|
|
46
|
+
}
|
|
47
|
+
} catch (_e) {
|
|
48
|
+
// fall through
|
|
49
|
+
}
|
|
50
|
+
// Stale-while-error: if we had a value before and the refresh failed,
|
|
51
|
+
// keep serving the stale value rather than caching null. Since #23192
|
|
52
|
+
// clears the upstream memoize on every API request (macOS path), a
|
|
53
|
+
// single transient `security` spawn failure would otherwise poison the
|
|
54
|
+
// cache and surface as "Not logged in" across all subsystems until the
|
|
55
|
+
// next user interaction. clearKeychainCache() sets data=null, so
|
|
56
|
+
// explicit invalidation (logout, delete) still reads through.
|
|
57
|
+
if (prev.data !== null) {
|
|
58
|
+
logForDebugging('[keychain] read failed; serving stale cache', {
|
|
59
|
+
level: 'warn',
|
|
60
|
+
})
|
|
61
|
+
keychainCacheState.cache = { data: prev.data, cachedAt: Date.now() }
|
|
62
|
+
return prev.data
|
|
63
|
+
}
|
|
64
|
+
keychainCacheState.cache = { data: null, cachedAt: Date.now() }
|
|
65
|
+
return null
|
|
66
|
+
},
|
|
67
|
+
async readAsync(): Promise<SecureStorageData | null> {
|
|
68
|
+
const prev = keychainCacheState.cache
|
|
69
|
+
if (Date.now() - prev.cachedAt < KEYCHAIN_CACHE_TTL_MS) {
|
|
70
|
+
return prev.data
|
|
71
|
+
}
|
|
72
|
+
if (keychainCacheState.readInFlight) {
|
|
73
|
+
return keychainCacheState.readInFlight
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const gen = keychainCacheState.generation
|
|
77
|
+
const promise = doReadAsync().then(data => {
|
|
78
|
+
// If the cache was invalidated or updated while we were reading,
|
|
79
|
+
// our subprocess result is stale — don't overwrite the newer entry.
|
|
80
|
+
if (gen === keychainCacheState.generation) {
|
|
81
|
+
// Stale-while-error — mirror read() above.
|
|
82
|
+
if (data === null && prev.data !== null) {
|
|
83
|
+
logForDebugging('[keychain] readAsync failed; serving stale cache', {
|
|
84
|
+
level: 'warn',
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
const next = data ?? prev.data
|
|
88
|
+
keychainCacheState.cache = { data: next, cachedAt: Date.now() }
|
|
89
|
+
keychainCacheState.readInFlight = null
|
|
90
|
+
return next
|
|
91
|
+
}
|
|
92
|
+
return data
|
|
93
|
+
})
|
|
94
|
+
keychainCacheState.readInFlight = promise
|
|
95
|
+
return promise
|
|
96
|
+
},
|
|
97
|
+
update(data: SecureStorageData): { success: boolean; warning?: string } {
|
|
98
|
+
// Invalidate cache before update
|
|
99
|
+
clearKeychainCache()
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
const storageServiceName = getMacOsKeychainStorageServiceName(
|
|
103
|
+
CREDENTIALS_SERVICE_SUFFIX,
|
|
104
|
+
)
|
|
105
|
+
const username = getUsername()
|
|
106
|
+
const jsonString = jsonStringify(data)
|
|
107
|
+
|
|
108
|
+
// Convert to hexadecimal to avoid any escaping issues
|
|
109
|
+
const hexValue = Buffer.from(jsonString, 'utf-8').toString('hex')
|
|
110
|
+
|
|
111
|
+
// Prefer stdin (`security -i`) so process monitors (CrowdStrike et al.)
|
|
112
|
+
// see only "security -i", not the payload (INC-3028).
|
|
113
|
+
// When the payload would overflow the stdin line buffer, fall back to
|
|
114
|
+
// argv. Hex in argv is recoverable by a determined observer but defeats
|
|
115
|
+
// naive plaintext-grep rules, and the alternative — silent credential
|
|
116
|
+
// corruption — is strictly worse. ARG_MAX on darwin is 1MB so argv has
|
|
117
|
+
// effectively no size limit for our purposes.
|
|
118
|
+
const command = `add-generic-password -U -a "${username}" -s "${storageServiceName}" -X "${hexValue}"\n`
|
|
119
|
+
|
|
120
|
+
let result
|
|
121
|
+
if (command.length <= SECURITY_STDIN_LINE_LIMIT) {
|
|
122
|
+
result = execaSync('security', ['-i'], {
|
|
123
|
+
input: command,
|
|
124
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
125
|
+
reject: false,
|
|
126
|
+
})
|
|
127
|
+
} else {
|
|
128
|
+
logForDebugging(
|
|
129
|
+
`Keychain payload (${jsonString.length}B JSON) exceeds security -i stdin limit; using argv`,
|
|
130
|
+
{ level: 'warn' },
|
|
131
|
+
)
|
|
132
|
+
result = execaSync(
|
|
133
|
+
'security',
|
|
134
|
+
[
|
|
135
|
+
'add-generic-password',
|
|
136
|
+
'-U',
|
|
137
|
+
'-a',
|
|
138
|
+
username,
|
|
139
|
+
'-s',
|
|
140
|
+
storageServiceName,
|
|
141
|
+
'-X',
|
|
142
|
+
hexValue,
|
|
143
|
+
],
|
|
144
|
+
{ stdio: ['ignore', 'pipe', 'pipe'], reject: false },
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (result.exitCode !== 0) {
|
|
149
|
+
return { success: false }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Update cache with new data on success
|
|
153
|
+
keychainCacheState.cache = { data, cachedAt: Date.now() }
|
|
154
|
+
return { success: true }
|
|
155
|
+
} catch (_e) {
|
|
156
|
+
return { success: false }
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
delete(): boolean {
|
|
160
|
+
// Invalidate cache before delete
|
|
161
|
+
clearKeychainCache()
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
const storageServiceName = getMacOsKeychainStorageServiceName(
|
|
165
|
+
CREDENTIALS_SERVICE_SUFFIX,
|
|
166
|
+
)
|
|
167
|
+
const username = getUsername()
|
|
168
|
+
execSyncWithDefaults_DEPRECATED(
|
|
169
|
+
`security delete-generic-password -a "${username}" -s "${storageServiceName}"`,
|
|
170
|
+
)
|
|
171
|
+
return true
|
|
172
|
+
} catch (_e) {
|
|
173
|
+
return false
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
} satisfies SecureStorage
|
|
177
|
+
|
|
178
|
+
async function doReadAsync(): Promise<SecureStorageData | null> {
|
|
179
|
+
try {
|
|
180
|
+
const storageServiceName = getMacOsKeychainStorageServiceName(
|
|
181
|
+
CREDENTIALS_SERVICE_SUFFIX,
|
|
182
|
+
)
|
|
183
|
+
const username = getUsername()
|
|
184
|
+
const { stdout, code } = await execFileNoThrow(
|
|
185
|
+
'security',
|
|
186
|
+
['find-generic-password', '-a', username, '-w', '-s', storageServiceName],
|
|
187
|
+
{ useCwd: false, preserveOutputOnError: false },
|
|
188
|
+
)
|
|
189
|
+
if (code === 0 && stdout) {
|
|
190
|
+
return jsonParse(stdout.trim())
|
|
191
|
+
}
|
|
192
|
+
} catch (_e) {
|
|
193
|
+
// fall through
|
|
194
|
+
}
|
|
195
|
+
return null
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
let keychainLockedCache: boolean | undefined
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Checks if the macOS keychain is locked.
|
|
202
|
+
* Returns true if on macOS and keychain is locked (exit code 36 from security show-keychain-info).
|
|
203
|
+
* This commonly happens in SSH sessions where the keychain isn't automatically unlocked.
|
|
204
|
+
*
|
|
205
|
+
* Cached for process lifetime — execaSync('security', ...) is a ~27ms sync
|
|
206
|
+
* subprocess spawn, and this is called from render (AssistantTextMessage).
|
|
207
|
+
* During virtual-scroll remounts on sessions with "Not logged in" messages,
|
|
208
|
+
* each remount re-spawned security(1), adding 27ms/message to the commit.
|
|
209
|
+
* Keychain lock state doesn't change during a CLI session.
|
|
210
|
+
*/
|
|
211
|
+
export function isMacOsKeychainLocked(): boolean {
|
|
212
|
+
if (keychainLockedCache !== undefined) return keychainLockedCache
|
|
213
|
+
// Only check on macOS
|
|
214
|
+
if (process.platform !== 'darwin') {
|
|
215
|
+
keychainLockedCache = false
|
|
216
|
+
return false
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
const result = execaSync('security', ['show-keychain-info'], {
|
|
221
|
+
reject: false,
|
|
222
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
223
|
+
})
|
|
224
|
+
// Exit code 36 indicates the keychain is locked
|
|
225
|
+
keychainLockedCache = result.exitCode === 36
|
|
226
|
+
} catch {
|
|
227
|
+
// If the command fails for any reason, assume keychain is not locked
|
|
228
|
+
keychainLockedCache = false
|
|
229
|
+
}
|
|
230
|
+
return keychainLockedCache
|
|
231
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { chmodSync } from 'fs'
|
|
2
|
+
import { join } from 'path'
|
|
3
|
+
import { getClaudeConfigHomeDir } from '../envUtils.js'
|
|
4
|
+
import { getErrnoCode } from '../errors.js'
|
|
5
|
+
import { getFsImplementation } from '../fsOperations.js'
|
|
6
|
+
import {
|
|
7
|
+
jsonParse,
|
|
8
|
+
jsonStringify,
|
|
9
|
+
writeFileSync_DEPRECATED,
|
|
10
|
+
} from '../slowOperations.js'
|
|
11
|
+
import type { SecureStorage, SecureStorageData } from './types.js'
|
|
12
|
+
|
|
13
|
+
function getStoragePath(): { storageDir: string; storagePath: string } {
|
|
14
|
+
const storageDir = getClaudeConfigHomeDir()
|
|
15
|
+
const storageFileName = '.credentials.json'
|
|
16
|
+
return { storageDir, storagePath: join(storageDir, storageFileName) }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const plainTextStorage = {
|
|
20
|
+
name: 'plaintext',
|
|
21
|
+
read(): SecureStorageData | null {
|
|
22
|
+
// sync IO: called from sync context (SecureStorage interface)
|
|
23
|
+
const { storagePath } = getStoragePath()
|
|
24
|
+
try {
|
|
25
|
+
const data = getFsImplementation().readFileSync(storagePath, {
|
|
26
|
+
encoding: 'utf8',
|
|
27
|
+
})
|
|
28
|
+
return jsonParse(data)
|
|
29
|
+
} catch {
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
async readAsync(): Promise<SecureStorageData | null> {
|
|
34
|
+
const { storagePath } = getStoragePath()
|
|
35
|
+
try {
|
|
36
|
+
const data = await getFsImplementation().readFile(storagePath, {
|
|
37
|
+
encoding: 'utf8',
|
|
38
|
+
})
|
|
39
|
+
return jsonParse(data)
|
|
40
|
+
} catch {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
update(data: SecureStorageData): { success: boolean; warning?: string } {
|
|
45
|
+
// sync IO: called from sync context (SecureStorage interface)
|
|
46
|
+
try {
|
|
47
|
+
const { storageDir, storagePath } = getStoragePath()
|
|
48
|
+
try {
|
|
49
|
+
getFsImplementation().mkdirSync(storageDir)
|
|
50
|
+
} catch (e: unknown) {
|
|
51
|
+
const code = getErrnoCode(e)
|
|
52
|
+
if (code !== 'EEXIST') {
|
|
53
|
+
throw e
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
writeFileSync_DEPRECATED(storagePath, jsonStringify(data), {
|
|
58
|
+
encoding: 'utf8',
|
|
59
|
+
flush: false,
|
|
60
|
+
})
|
|
61
|
+
chmodSync(storagePath, 0o600)
|
|
62
|
+
return {
|
|
63
|
+
success: true,
|
|
64
|
+
warning: 'Warning: Storing credentials in plaintext.',
|
|
65
|
+
}
|
|
66
|
+
} catch {
|
|
67
|
+
return { success: false }
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
delete(): boolean {
|
|
71
|
+
// sync IO: called from sync context (SecureStorage interface)
|
|
72
|
+
const { storagePath } = getStoragePath()
|
|
73
|
+
try {
|
|
74
|
+
getFsImplementation().unlinkSync(storagePath)
|
|
75
|
+
return true
|
|
76
|
+
} catch (e: unknown) {
|
|
77
|
+
const code = getErrnoCode(e)
|
|
78
|
+
if (code === 'ENOENT') {
|
|
79
|
+
return true
|
|
80
|
+
}
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
} satisfies SecureStorage
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod/v4'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Boolean that also accepts the string literals "true"/"false".
|
|
5
|
+
*
|
|
6
|
+
* Tool inputs arrive as model-generated JSON. The model occasionally quotes
|
|
7
|
+
* booleans — `"replace_all":"false"` instead of `"replace_all":false` — and
|
|
8
|
+
* z.boolean() rejects that with a type error. z.coerce.boolean() is the wrong
|
|
9
|
+
* fix: it uses JS truthiness, so "false" → true.
|
|
10
|
+
*
|
|
11
|
+
* z.preprocess emits {"type":"boolean"} to the API schema, so the model is
|
|
12
|
+
* still told this is a boolean — the string tolerance is invisible client-side
|
|
13
|
+
* coercion, not an advertised input shape.
|
|
14
|
+
*
|
|
15
|
+
* .optional()/.default() go INSIDE (on the inner schema), not chained after:
|
|
16
|
+
* chaining them onto ZodPipe widens z.output<> to unknown in Zod v4.
|
|
17
|
+
*
|
|
18
|
+
* semanticBoolean() → boolean
|
|
19
|
+
* semanticBoolean(z.boolean().optional()) → boolean | undefined
|
|
20
|
+
* semanticBoolean(z.boolean().default(false)) → boolean
|
|
21
|
+
*/
|
|
22
|
+
export function semanticBoolean<T extends z.ZodType>(
|
|
23
|
+
inner: T = z.boolean() as unknown as T,
|
|
24
|
+
) {
|
|
25
|
+
return z.preprocess(
|
|
26
|
+
(v: unknown) => (v === 'true' ? true : v === 'false' ? false : v),
|
|
27
|
+
inner,
|
|
28
|
+
)
|
|
29
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod/v4'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Number that also accepts numeric string literals like "30", "-5", "3.14".
|
|
5
|
+
*
|
|
6
|
+
* Tool inputs arrive as model-generated JSON. The model occasionally quotes
|
|
7
|
+
* numbers — `"head_limit":"30"` instead of `"head_limit":30` — and z.number()
|
|
8
|
+
* rejects that with a type error. z.coerce.number() is the wrong fix: it
|
|
9
|
+
* accepts values like "" or null by converting them via JS Number(), masking
|
|
10
|
+
* bugs rather than surfacing them.
|
|
11
|
+
*
|
|
12
|
+
* Only strings that are valid decimal number literals (matching /^-?\d+(\.\d+)?$/)
|
|
13
|
+
* are coerced. Anything else passes through and is rejected by the inner schema.
|
|
14
|
+
*
|
|
15
|
+
* z.preprocess emits {"type":"number"} to the API schema, so the model is
|
|
16
|
+
* still told this is a number — the string tolerance is invisible client-side
|
|
17
|
+
* coercion, not an advertised input shape.
|
|
18
|
+
*
|
|
19
|
+
* .optional()/.default() go INSIDE (on the inner schema), not chained after:
|
|
20
|
+
* chaining them onto ZodPipe widens z.output<> to unknown in Zod v4.
|
|
21
|
+
*
|
|
22
|
+
* semanticNumber() → number
|
|
23
|
+
* semanticNumber(z.number().optional()) → number | undefined
|
|
24
|
+
* semanticNumber(z.number().default(0)) → number
|
|
25
|
+
*/
|
|
26
|
+
export function semanticNumber<T extends z.ZodType>(
|
|
27
|
+
inner: T = z.number() as unknown as T,
|
|
28
|
+
) {
|
|
29
|
+
return z.preprocess((v: unknown) => {
|
|
30
|
+
if (typeof v === 'string' && /^-?\d+(\.\d+)?$/.test(v)) {
|
|
31
|
+
const n = Number(v)
|
|
32
|
+
if (Number.isFinite(n)) return n
|
|
33
|
+
}
|
|
34
|
+
return v
|
|
35
|
+
}, inner)
|
|
36
|
+
}
|
package/utils/semver.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Semver comparison utilities that use Bun.semver when available
|
|
3
|
+
* and fall back to the npm `semver` package in Node.js environments.
|
|
4
|
+
*
|
|
5
|
+
* Bun.semver.order() is ~20x faster than npm semver comparisons.
|
|
6
|
+
* The npm semver fallback always uses { loose: true }.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
let _npmSemver: typeof import('semver') | undefined
|
|
10
|
+
|
|
11
|
+
function getNpmSemver(): typeof import('semver') {
|
|
12
|
+
if (!_npmSemver) {
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
|
+
_npmSemver = require('semver') as typeof import('semver')
|
|
15
|
+
}
|
|
16
|
+
return _npmSemver
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function gt(a: string, b: string): boolean {
|
|
20
|
+
if (typeof Bun !== 'undefined') {
|
|
21
|
+
return Bun.semver.order(a, b) === 1
|
|
22
|
+
}
|
|
23
|
+
return getNpmSemver().gt(a, b, { loose: true })
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function gte(a: string, b: string): boolean {
|
|
27
|
+
if (typeof Bun !== 'undefined') {
|
|
28
|
+
return Bun.semver.order(a, b) >= 0
|
|
29
|
+
}
|
|
30
|
+
return getNpmSemver().gte(a, b, { loose: true })
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function lt(a: string, b: string): boolean {
|
|
34
|
+
if (typeof Bun !== 'undefined') {
|
|
35
|
+
return Bun.semver.order(a, b) === -1
|
|
36
|
+
}
|
|
37
|
+
return getNpmSemver().lt(a, b, { loose: true })
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function lte(a: string, b: string): boolean {
|
|
41
|
+
if (typeof Bun !== 'undefined') {
|
|
42
|
+
return Bun.semver.order(a, b) <= 0
|
|
43
|
+
}
|
|
44
|
+
return getNpmSemver().lte(a, b, { loose: true })
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function satisfies(version: string, range: string): boolean {
|
|
48
|
+
if (typeof Bun !== 'undefined') {
|
|
49
|
+
return Bun.semver.satisfies(version, range)
|
|
50
|
+
}
|
|
51
|
+
return getNpmSemver().satisfies(version, range, { loose: true })
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function order(a: string, b: string): -1 | 0 | 1 {
|
|
55
|
+
if (typeof Bun !== 'undefined') {
|
|
56
|
+
return Bun.semver.order(a, b)
|
|
57
|
+
}
|
|
58
|
+
return getNpmSemver().compare(a, b, { loose: true })
|
|
59
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
type QueueItem<T extends unknown[], R> = {
|
|
2
|
+
args: T
|
|
3
|
+
resolve: (value: R) => void
|
|
4
|
+
reject: (reason?: unknown) => void
|
|
5
|
+
context: unknown
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates a sequential execution wrapper for async functions to prevent race conditions.
|
|
10
|
+
* Ensures that concurrent calls to the wrapped function are executed one at a time
|
|
11
|
+
* in the order they were received, while preserving the correct return values.
|
|
12
|
+
*
|
|
13
|
+
* This is useful for operations that must be performed sequentially, such as
|
|
14
|
+
* file writes or database updates that could cause conflicts if executed concurrently.
|
|
15
|
+
*
|
|
16
|
+
* @param fn - The async function to wrap with sequential execution
|
|
17
|
+
* @returns A wrapped version of the function that executes calls sequentially
|
|
18
|
+
*/
|
|
19
|
+
export function sequential<T extends unknown[], R>(
|
|
20
|
+
fn: (...args: T) => Promise<R>,
|
|
21
|
+
): (...args: T) => Promise<R> {
|
|
22
|
+
const queue: QueueItem<T, R>[] = []
|
|
23
|
+
let processing = false
|
|
24
|
+
|
|
25
|
+
async function processQueue(): Promise<void> {
|
|
26
|
+
if (processing) return
|
|
27
|
+
if (queue.length === 0) return
|
|
28
|
+
|
|
29
|
+
processing = true
|
|
30
|
+
|
|
31
|
+
while (queue.length > 0) {
|
|
32
|
+
const { args, resolve, reject, context } = queue.shift()!
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const result = await fn.apply(context, args)
|
|
36
|
+
resolve(result)
|
|
37
|
+
} catch (error) {
|
|
38
|
+
reject(error)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
processing = false
|
|
43
|
+
|
|
44
|
+
// Check if new items were added while we were processing
|
|
45
|
+
if (queue.length > 0) {
|
|
46
|
+
void processQueue()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return function (this: unknown, ...args: T): Promise<R> {
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
queue.push({ args, resolve, reject, context: this })
|
|
53
|
+
void processQueue()
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session activity tracking with refcount-based heartbeat timer.
|
|
3
|
+
*
|
|
4
|
+
* The transport registers its keep-alive sender via registerSessionActivityCallback().
|
|
5
|
+
* Callers (API streaming, tool execution) bracket their work with
|
|
6
|
+
* startSessionActivity() / stopSessionActivity(). When the refcount is >0 a
|
|
7
|
+
* periodic timer fires the registered callback every 30 seconds to keep the
|
|
8
|
+
* container alive.
|
|
9
|
+
*
|
|
10
|
+
* Sending keep-alives is gated behind CLAUDE_CODE_REMOTE_SEND_KEEPALIVES.
|
|
11
|
+
* Diagnostic logging always fires to help diagnose idle gaps.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { registerCleanup } from './cleanupRegistry.js'
|
|
15
|
+
import { logForDiagnosticsNoPII } from './diagLogs.js'
|
|
16
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
17
|
+
|
|
18
|
+
const SESSION_ACTIVITY_INTERVAL_MS = 30_000
|
|
19
|
+
|
|
20
|
+
export type SessionActivityReason = 'api_call' | 'tool_exec'
|
|
21
|
+
|
|
22
|
+
let activityCallback: (() => void) | null = null
|
|
23
|
+
let refcount = 0
|
|
24
|
+
const activeReasons = new Map<SessionActivityReason, number>()
|
|
25
|
+
let oldestActivityStartedAt: number | null = null
|
|
26
|
+
let heartbeatTimer: ReturnType<typeof setInterval> | null = null
|
|
27
|
+
let idleTimer: ReturnType<typeof setTimeout> | null = null
|
|
28
|
+
let cleanupRegistered = false
|
|
29
|
+
|
|
30
|
+
function startHeartbeatTimer(): void {
|
|
31
|
+
clearIdleTimer()
|
|
32
|
+
heartbeatTimer = setInterval(() => {
|
|
33
|
+
logForDiagnosticsNoPII('debug', 'session_keepalive_heartbeat', {
|
|
34
|
+
refcount,
|
|
35
|
+
})
|
|
36
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES)) {
|
|
37
|
+
activityCallback?.()
|
|
38
|
+
}
|
|
39
|
+
}, SESSION_ACTIVITY_INTERVAL_MS)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function startIdleTimer(): void {
|
|
43
|
+
clearIdleTimer()
|
|
44
|
+
if (activityCallback === null) {
|
|
45
|
+
return
|
|
46
|
+
}
|
|
47
|
+
idleTimer = setTimeout(() => {
|
|
48
|
+
logForDiagnosticsNoPII('info', 'session_idle_30s')
|
|
49
|
+
idleTimer = null
|
|
50
|
+
}, SESSION_ACTIVITY_INTERVAL_MS)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function clearIdleTimer(): void {
|
|
54
|
+
if (idleTimer !== null) {
|
|
55
|
+
clearTimeout(idleTimer)
|
|
56
|
+
idleTimer = null
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function registerSessionActivityCallback(cb: () => void): void {
|
|
61
|
+
activityCallback = cb
|
|
62
|
+
// Restart timer if work is already in progress (e.g. reconnect during streaming)
|
|
63
|
+
if (refcount > 0 && heartbeatTimer === null) {
|
|
64
|
+
startHeartbeatTimer()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export function unregisterSessionActivityCallback(): void {
|
|
69
|
+
activityCallback = null
|
|
70
|
+
// Stop timer if the callback is removed
|
|
71
|
+
if (heartbeatTimer !== null) {
|
|
72
|
+
clearInterval(heartbeatTimer)
|
|
73
|
+
heartbeatTimer = null
|
|
74
|
+
}
|
|
75
|
+
clearIdleTimer()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function sendSessionActivitySignal(): void {
|
|
79
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_REMOTE_SEND_KEEPALIVES)) {
|
|
80
|
+
activityCallback?.()
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function isSessionActivityTrackingActive(): boolean {
|
|
85
|
+
return activityCallback !== null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Increment the activity refcount. When it transitions from 0→1 and a callback
|
|
90
|
+
* is registered, start a periodic heartbeat timer.
|
|
91
|
+
*/
|
|
92
|
+
export function startSessionActivity(reason: SessionActivityReason): void {
|
|
93
|
+
refcount++
|
|
94
|
+
activeReasons.set(reason, (activeReasons.get(reason) ?? 0) + 1)
|
|
95
|
+
if (refcount === 1) {
|
|
96
|
+
oldestActivityStartedAt = Date.now()
|
|
97
|
+
if (activityCallback !== null && heartbeatTimer === null) {
|
|
98
|
+
startHeartbeatTimer()
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!cleanupRegistered) {
|
|
102
|
+
cleanupRegistered = true
|
|
103
|
+
registerCleanup(async () => {
|
|
104
|
+
logForDiagnosticsNoPII('info', 'session_activity_at_shutdown', {
|
|
105
|
+
refcount,
|
|
106
|
+
active: Object.fromEntries(activeReasons),
|
|
107
|
+
// Only meaningful while work is in-flight; stale otherwise.
|
|
108
|
+
oldest_activity_ms:
|
|
109
|
+
refcount > 0 && oldestActivityStartedAt !== null
|
|
110
|
+
? Date.now() - oldestActivityStartedAt
|
|
111
|
+
: null,
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Decrement the activity refcount. When it reaches 0, stop the heartbeat timer
|
|
119
|
+
* and start an idle timer that logs after 30s of inactivity.
|
|
120
|
+
*/
|
|
121
|
+
export function stopSessionActivity(reason: SessionActivityReason): void {
|
|
122
|
+
if (refcount > 0) {
|
|
123
|
+
refcount--
|
|
124
|
+
}
|
|
125
|
+
const n = (activeReasons.get(reason) ?? 0) - 1
|
|
126
|
+
if (n > 0) activeReasons.set(reason, n)
|
|
127
|
+
else activeReasons.delete(reason)
|
|
128
|
+
if (refcount === 0 && heartbeatTimer !== null) {
|
|
129
|
+
clearInterval(heartbeatTimer)
|
|
130
|
+
heartbeatTimer = null
|
|
131
|
+
startIdleTimer()
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-scoped environment variables set via /env.
|
|
3
|
+
* Applied only to spawned child processes (via bash provider env overrides),
|
|
4
|
+
* not to the REPL process itself.
|
|
5
|
+
*/
|
|
6
|
+
const sessionEnvVars = new Map<string, string>()
|
|
7
|
+
|
|
8
|
+
export function getSessionEnvVars(): ReadonlyMap<string, string> {
|
|
9
|
+
return sessionEnvVars
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function setSessionEnvVar(name: string, value: string): void {
|
|
13
|
+
sessionEnvVars.set(name, value)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function deleteSessionEnvVar(name: string): void {
|
|
17
|
+
sessionEnvVars.delete(name)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function clearSessionEnvVars(): void {
|
|
21
|
+
sessionEnvVars.clear()
|
|
22
|
+
}
|