@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,14 @@
|
|
|
1
|
+
import { getInitialSettings } from '../settings/settings.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the default shell for input-box `!` commands.
|
|
5
|
+
*
|
|
6
|
+
* Resolution order (docs/design/ps-shell-selection.md §4.2):
|
|
7
|
+
* settings.defaultShell → 'bash'
|
|
8
|
+
*
|
|
9
|
+
* Platform default is 'bash' everywhere — we do NOT auto-flip Windows to
|
|
10
|
+
* PowerShell (would break existing Windows users with bash hooks).
|
|
11
|
+
*/
|
|
12
|
+
export function resolveDefaultShell(): 'bash' | 'powershell' {
|
|
13
|
+
return getInitialSettings().defaultShell ?? 'bash'
|
|
14
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const SHELL_TYPES = ['bash', 'powershell'] as const
|
|
2
|
+
export type ShellType = (typeof SHELL_TYPES)[number]
|
|
3
|
+
export const DEFAULT_HOOK_SHELL: ShellType = 'bash'
|
|
4
|
+
|
|
5
|
+
export type ShellProvider = {
|
|
6
|
+
type: ShellType
|
|
7
|
+
shellPath: string
|
|
8
|
+
detached: boolean
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Build the full command string including all shell-specific setup.
|
|
12
|
+
* For bash: source snapshot, session env, disable extglob, eval-wrap, pwd tracking.
|
|
13
|
+
*/
|
|
14
|
+
buildExecCommand(
|
|
15
|
+
command: string,
|
|
16
|
+
opts: {
|
|
17
|
+
id: number | string
|
|
18
|
+
sandboxTmpDir?: string
|
|
19
|
+
useSandbox: boolean
|
|
20
|
+
},
|
|
21
|
+
): Promise<{ commandString: string; cwdFilePath: string }>
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Shell args for spawn (e.g., ['-c', '-l', cmd] for bash).
|
|
25
|
+
*/
|
|
26
|
+
getSpawnArgs(commandString: string): string[]
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Extra env vars for this shell type.
|
|
30
|
+
* May perform async initialization (e.g., tmux socket setup for bash).
|
|
31
|
+
*/
|
|
32
|
+
getEnvironmentOverrides(command: string): Promise<Record<string, string>>
|
|
33
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BASH_TOOL_NAME } from '../../tools/BashTool/toolName.js'
|
|
2
|
+
import { POWERSHELL_TOOL_NAME } from '../../tools/PowerShellTool/toolName.js'
|
|
3
|
+
import { isEnvDefinedFalsy, isEnvTruthy } from '../envUtils.js'
|
|
4
|
+
import { getPlatform } from '../platform.js'
|
|
5
|
+
|
|
6
|
+
export const SHELL_TOOL_NAMES: string[] = [BASH_TOOL_NAME, POWERSHELL_TOOL_NAME]
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Runtime gate for PowerShellTool. Windows-only (the permission engine uses
|
|
10
|
+
* Win32-specific path normalizations). Ant defaults on (opt-out via env=0);
|
|
11
|
+
* external defaults off (opt-in via env=1).
|
|
12
|
+
*
|
|
13
|
+
* Used by tools.ts (tool-list visibility), processBashCommand (! routing),
|
|
14
|
+
* and promptShellExecution (skill frontmatter routing) so the gate is
|
|
15
|
+
* consistent across all paths that invoke PowerShellTool.call().
|
|
16
|
+
*/
|
|
17
|
+
export function isPowerShellToolEnabled(): boolean {
|
|
18
|
+
if (getPlatform() !== 'windows') return false
|
|
19
|
+
return process.env.USER_TYPE === 'ant'
|
|
20
|
+
? !isEnvDefinedFalsy(process.env.CLAUDE_CODE_USE_POWERSHELL_TOOL)
|
|
21
|
+
: isEnvTruthy(process.env.CLAUDE_CODE_USE_POWERSHELL_TOOL)
|
|
22
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fig-spec-driven command prefix extraction.
|
|
3
|
+
*
|
|
4
|
+
* Given a command name + args array + its @withfig/autocomplete spec, walks
|
|
5
|
+
* the spec to find how deep into the args a meaningful prefix extends.
|
|
6
|
+
* `git -C /repo status --short` → `git status` (spec says -C takes a value,
|
|
7
|
+
* skip it, find `status` as a known subcommand).
|
|
8
|
+
*
|
|
9
|
+
* Pure over (string, string[], CommandSpec) — no parser dependency. Extracted
|
|
10
|
+
* from src/utils/bash/prefix.ts so PowerShell's extractor can reuse it;
|
|
11
|
+
* external CLIs (git, npm, kubectl) are shell-agnostic.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { CommandSpec } from '../bash/registry.js'
|
|
15
|
+
|
|
16
|
+
const URL_PROTOCOLS = ['http://', 'https://', 'ftp://']
|
|
17
|
+
|
|
18
|
+
// Overrides for commands whose fig specs aren't available at runtime
|
|
19
|
+
// (dynamic imports don't work in native/node builds). Without these,
|
|
20
|
+
// calculateDepth falls back to 2, producing overly broad prefixes.
|
|
21
|
+
export const DEPTH_RULES: Record<string, number> = {
|
|
22
|
+
rg: 2, // pattern argument is required despite variadic paths
|
|
23
|
+
'pre-commit': 2,
|
|
24
|
+
// CLI tools with deep subcommand trees (e.g. gcloud scheduler jobs list)
|
|
25
|
+
gcloud: 4,
|
|
26
|
+
'gcloud compute': 6,
|
|
27
|
+
'gcloud beta': 6,
|
|
28
|
+
aws: 4,
|
|
29
|
+
az: 4,
|
|
30
|
+
kubectl: 3,
|
|
31
|
+
docker: 3,
|
|
32
|
+
dotnet: 3,
|
|
33
|
+
'git push': 2,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const toArray = <T>(val: T | T[]): T[] => (Array.isArray(val) ? val : [val])
|
|
37
|
+
|
|
38
|
+
// Check if an argument matches a known subcommand (case-insensitive: PS
|
|
39
|
+
// callers pass original-cased args; fig spec names are lowercase)
|
|
40
|
+
function isKnownSubcommand(arg: string, spec: CommandSpec | null): boolean {
|
|
41
|
+
if (!spec?.subcommands?.length) return false
|
|
42
|
+
const argLower = arg.toLowerCase()
|
|
43
|
+
return spec.subcommands.some(sub =>
|
|
44
|
+
Array.isArray(sub.name)
|
|
45
|
+
? sub.name.some(n => n.toLowerCase() === argLower)
|
|
46
|
+
: sub.name.toLowerCase() === argLower,
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Check if a flag takes an argument based on spec, or use heuristic
|
|
51
|
+
function flagTakesArg(
|
|
52
|
+
flag: string,
|
|
53
|
+
nextArg: string | undefined,
|
|
54
|
+
spec: CommandSpec | null,
|
|
55
|
+
): boolean {
|
|
56
|
+
// Check if flag is in spec.options
|
|
57
|
+
if (spec?.options) {
|
|
58
|
+
const option = spec.options.find(opt =>
|
|
59
|
+
Array.isArray(opt.name) ? opt.name.includes(flag) : opt.name === flag,
|
|
60
|
+
)
|
|
61
|
+
if (option) return !!option.args
|
|
62
|
+
}
|
|
63
|
+
// Heuristic: if next arg isn't a flag and isn't a known subcommand, assume it's a flag value
|
|
64
|
+
if (spec?.subcommands?.length && nextArg && !nextArg.startsWith('-')) {
|
|
65
|
+
return !isKnownSubcommand(nextArg, spec)
|
|
66
|
+
}
|
|
67
|
+
return false
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Find the first subcommand by skipping flags and their values
|
|
71
|
+
function findFirstSubcommand(
|
|
72
|
+
args: string[],
|
|
73
|
+
spec: CommandSpec | null,
|
|
74
|
+
): string | undefined {
|
|
75
|
+
for (let i = 0; i < args.length; i++) {
|
|
76
|
+
const arg = args[i]
|
|
77
|
+
if (!arg) continue
|
|
78
|
+
if (arg.startsWith('-')) {
|
|
79
|
+
if (flagTakesArg(arg, args[i + 1], spec)) i++
|
|
80
|
+
continue
|
|
81
|
+
}
|
|
82
|
+
if (!spec?.subcommands?.length) return arg
|
|
83
|
+
if (isKnownSubcommand(arg, spec)) return arg
|
|
84
|
+
}
|
|
85
|
+
return undefined
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export async function buildPrefix(
|
|
89
|
+
command: string,
|
|
90
|
+
args: string[],
|
|
91
|
+
spec: CommandSpec | null,
|
|
92
|
+
): Promise<string> {
|
|
93
|
+
const maxDepth = await calculateDepth(command, args, spec)
|
|
94
|
+
const parts = [command]
|
|
95
|
+
const hasSubcommands = !!spec?.subcommands?.length
|
|
96
|
+
let foundSubcommand = false
|
|
97
|
+
|
|
98
|
+
for (let i = 0; i < args.length; i++) {
|
|
99
|
+
const arg = args[i]
|
|
100
|
+
if (!arg || parts.length >= maxDepth) break
|
|
101
|
+
|
|
102
|
+
if (arg.startsWith('-')) {
|
|
103
|
+
// Special case: python -c should stop after -c
|
|
104
|
+
if (arg === '-c' && ['python', 'python3'].includes(command.toLowerCase()))
|
|
105
|
+
break
|
|
106
|
+
|
|
107
|
+
// Check for isCommand/isModule flags that should be included in prefix
|
|
108
|
+
if (spec?.options) {
|
|
109
|
+
const option = spec.options.find(opt =>
|
|
110
|
+
Array.isArray(opt.name) ? opt.name.includes(arg) : opt.name === arg,
|
|
111
|
+
)
|
|
112
|
+
if (
|
|
113
|
+
option?.args &&
|
|
114
|
+
toArray(option.args).some(a => a?.isCommand || a?.isModule)
|
|
115
|
+
) {
|
|
116
|
+
parts.push(arg)
|
|
117
|
+
continue
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// For commands with subcommands, skip global flags to find the subcommand
|
|
122
|
+
if (hasSubcommands && !foundSubcommand) {
|
|
123
|
+
if (flagTakesArg(arg, args[i + 1], spec)) i++
|
|
124
|
+
continue
|
|
125
|
+
}
|
|
126
|
+
break // Stop at flags (original behavior)
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (await shouldStopAtArg(arg, args.slice(0, i), spec)) break
|
|
130
|
+
if (hasSubcommands && !foundSubcommand) {
|
|
131
|
+
foundSubcommand = isKnownSubcommand(arg, spec)
|
|
132
|
+
}
|
|
133
|
+
parts.push(arg)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return parts.join(' ')
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async function calculateDepth(
|
|
140
|
+
command: string,
|
|
141
|
+
args: string[],
|
|
142
|
+
spec: CommandSpec | null,
|
|
143
|
+
): Promise<number> {
|
|
144
|
+
// Find first subcommand by skipping flags and their values
|
|
145
|
+
const firstSubcommand = findFirstSubcommand(args, spec)
|
|
146
|
+
const commandLower = command.toLowerCase()
|
|
147
|
+
const key = firstSubcommand
|
|
148
|
+
? `${commandLower} ${firstSubcommand.toLowerCase()}`
|
|
149
|
+
: commandLower
|
|
150
|
+
if (DEPTH_RULES[key]) return DEPTH_RULES[key]
|
|
151
|
+
if (DEPTH_RULES[commandLower]) return DEPTH_RULES[commandLower]
|
|
152
|
+
if (!spec) return 2
|
|
153
|
+
|
|
154
|
+
if (spec.options && args.some(arg => arg?.startsWith('-'))) {
|
|
155
|
+
for (const arg of args) {
|
|
156
|
+
if (!arg?.startsWith('-')) continue
|
|
157
|
+
const option = spec.options.find(opt =>
|
|
158
|
+
Array.isArray(opt.name) ? opt.name.includes(arg) : opt.name === arg,
|
|
159
|
+
)
|
|
160
|
+
if (
|
|
161
|
+
option?.args &&
|
|
162
|
+
toArray(option.args).some(arg => arg?.isCommand || arg?.isModule)
|
|
163
|
+
)
|
|
164
|
+
return 3
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Find subcommand spec using the already-found firstSubcommand
|
|
169
|
+
if (firstSubcommand && spec.subcommands?.length) {
|
|
170
|
+
const firstSubLower = firstSubcommand.toLowerCase()
|
|
171
|
+
const subcommand = spec.subcommands.find(sub =>
|
|
172
|
+
Array.isArray(sub.name)
|
|
173
|
+
? sub.name.some(n => n.toLowerCase() === firstSubLower)
|
|
174
|
+
: sub.name.toLowerCase() === firstSubLower,
|
|
175
|
+
)
|
|
176
|
+
if (subcommand) {
|
|
177
|
+
if (subcommand.args) {
|
|
178
|
+
const subArgs = toArray(subcommand.args)
|
|
179
|
+
if (subArgs.some(arg => arg?.isCommand)) return 3
|
|
180
|
+
if (subArgs.some(arg => arg?.isVariadic)) return 2
|
|
181
|
+
}
|
|
182
|
+
if (subcommand.subcommands?.length) return 4
|
|
183
|
+
// Leaf subcommand with NO args declared (git show, git log, git tag):
|
|
184
|
+
// the 3rd word is transient (SHA, ref, tag name) → dead over-specific
|
|
185
|
+
// rule like PowerShell(git show 81210f8:*). NOT the isOptional case —
|
|
186
|
+
// `git fetch` declares optional remote/branch and `git fetch origin`
|
|
187
|
+
// is tested (bash/prefix.test.ts:912) as intentional remote scoping.
|
|
188
|
+
if (!subcommand.args) return 2
|
|
189
|
+
return 3
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (spec.args) {
|
|
194
|
+
const argsArray = toArray(spec.args)
|
|
195
|
+
|
|
196
|
+
if (argsArray.some(arg => arg?.isCommand)) {
|
|
197
|
+
return !Array.isArray(spec.args) && spec.args.isCommand
|
|
198
|
+
? 2
|
|
199
|
+
: Math.min(2 + argsArray.findIndex(arg => arg?.isCommand), 3)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (!spec.subcommands?.length) {
|
|
203
|
+
if (argsArray.some(arg => arg?.isVariadic)) return 1
|
|
204
|
+
if (argsArray[0] && !argsArray[0].isOptional) return 2
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return spec.args && toArray(spec.args).some(arg => arg?.isDangerous) ? 3 : 2
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
async function shouldStopAtArg(
|
|
212
|
+
arg: string,
|
|
213
|
+
args: string[],
|
|
214
|
+
spec: CommandSpec | null,
|
|
215
|
+
): Promise<boolean> {
|
|
216
|
+
if (arg.startsWith('-')) return true
|
|
217
|
+
|
|
218
|
+
const dotIndex = arg.lastIndexOf('.')
|
|
219
|
+
const hasExtension =
|
|
220
|
+
dotIndex > 0 &&
|
|
221
|
+
dotIndex < arg.length - 1 &&
|
|
222
|
+
!arg.substring(dotIndex + 1).includes(':')
|
|
223
|
+
|
|
224
|
+
const hasFile = arg.includes('/') || hasExtension
|
|
225
|
+
const hasUrl = URL_PROTOCOLS.some(proto => arg.startsWith(proto))
|
|
226
|
+
|
|
227
|
+
if (!hasFile && !hasUrl) return false
|
|
228
|
+
|
|
229
|
+
// Check if we're after a -m flag for python modules
|
|
230
|
+
if (spec?.options && args.length > 0 && args[args.length - 1] === '-m') {
|
|
231
|
+
const option = spec.options.find(opt =>
|
|
232
|
+
Array.isArray(opt.name) ? opt.name.includes('-m') : opt.name === '-m',
|
|
233
|
+
)
|
|
234
|
+
if (option?.args && toArray(option.args).some(arg => arg?.isModule)) {
|
|
235
|
+
return false // Don't stop at module names
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// For actual files/URLs, always stop regardless of context
|
|
240
|
+
return true
|
|
241
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for managing shell configuration files (like .bashrc, .zshrc)
|
|
3
|
+
* Used for managing claude aliases and PATH entries
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { open, readFile, stat } from 'fs/promises'
|
|
7
|
+
import { homedir as osHomedir } from 'os'
|
|
8
|
+
import { join } from 'path'
|
|
9
|
+
import { isFsInaccessible } from './errors.js'
|
|
10
|
+
import { getLocalClaudePath } from './localInstaller.js'
|
|
11
|
+
|
|
12
|
+
export const CLAUDE_ALIAS_REGEX = /^\s*alias\s+claude\s*=/
|
|
13
|
+
|
|
14
|
+
type EnvLike = Record<string, string | undefined>
|
|
15
|
+
|
|
16
|
+
type ShellConfigOptions = {
|
|
17
|
+
env?: EnvLike
|
|
18
|
+
homedir?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get the paths to shell configuration files
|
|
23
|
+
* Respects ZDOTDIR for zsh users
|
|
24
|
+
* @param options Optional overrides for testing (env, homedir)
|
|
25
|
+
*/
|
|
26
|
+
export function getShellConfigPaths(
|
|
27
|
+
options?: ShellConfigOptions,
|
|
28
|
+
): Record<string, string> {
|
|
29
|
+
const home = options?.homedir ?? osHomedir()
|
|
30
|
+
const env = options?.env ?? process.env
|
|
31
|
+
const zshConfigDir = env.ZDOTDIR || home
|
|
32
|
+
return {
|
|
33
|
+
zsh: join(zshConfigDir, '.zshrc'),
|
|
34
|
+
bash: join(home, '.bashrc'),
|
|
35
|
+
fish: join(home, '.config/fish/config.fish'),
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Filter out installer-created claude aliases from an array of lines
|
|
41
|
+
* Only removes aliases pointing to $HOME/.claude/local/claude
|
|
42
|
+
* Preserves custom user aliases that point to other locations
|
|
43
|
+
* Returns the filtered lines and whether our default installer alias was found
|
|
44
|
+
*/
|
|
45
|
+
export function filterClaudeAliases(lines: string[]): {
|
|
46
|
+
filtered: string[]
|
|
47
|
+
hadAlias: boolean
|
|
48
|
+
} {
|
|
49
|
+
let hadAlias = false
|
|
50
|
+
const filtered = lines.filter(line => {
|
|
51
|
+
// Check if this is a claude alias
|
|
52
|
+
if (CLAUDE_ALIAS_REGEX.test(line)) {
|
|
53
|
+
// Extract the alias target - handle spaces, quotes, and various formats
|
|
54
|
+
// First try with quotes
|
|
55
|
+
let match = line.match(/alias\s+claude\s*=\s*["']([^"']+)["']/)
|
|
56
|
+
if (!match) {
|
|
57
|
+
// Try without quotes (capturing until end of line or comment)
|
|
58
|
+
match = line.match(/alias\s+claude\s*=\s*([^#\n]+)/)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (match && match[1]) {
|
|
62
|
+
const target = match[1].trim()
|
|
63
|
+
// Only remove if it points to the installer location
|
|
64
|
+
// The installer always creates aliases with the full expanded path
|
|
65
|
+
if (target === getLocalClaudePath()) {
|
|
66
|
+
hadAlias = true
|
|
67
|
+
return false // Remove this line
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Keep custom aliases that don't point to the installer location
|
|
71
|
+
}
|
|
72
|
+
return true
|
|
73
|
+
})
|
|
74
|
+
return { filtered, hadAlias }
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Read a file and split it into lines
|
|
79
|
+
* Returns null if file doesn't exist or can't be read
|
|
80
|
+
*/
|
|
81
|
+
export async function readFileLines(
|
|
82
|
+
filePath: string,
|
|
83
|
+
): Promise<string[] | null> {
|
|
84
|
+
try {
|
|
85
|
+
const content = await readFile(filePath, { encoding: 'utf8' })
|
|
86
|
+
return content.split('\n')
|
|
87
|
+
} catch (e: unknown) {
|
|
88
|
+
if (isFsInaccessible(e)) return null
|
|
89
|
+
throw e
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Write lines back to a file
|
|
95
|
+
*/
|
|
96
|
+
export async function writeFileLines(
|
|
97
|
+
filePath: string,
|
|
98
|
+
lines: string[],
|
|
99
|
+
): Promise<void> {
|
|
100
|
+
const fh = await open(filePath, 'w')
|
|
101
|
+
try {
|
|
102
|
+
await fh.writeFile(lines.join('\n'), { encoding: 'utf8' })
|
|
103
|
+
await fh.datasync()
|
|
104
|
+
} finally {
|
|
105
|
+
await fh.close()
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Check if a claude alias exists in any shell config file
|
|
111
|
+
* Returns the alias target if found, null otherwise
|
|
112
|
+
* @param options Optional overrides for testing (env, homedir)
|
|
113
|
+
*/
|
|
114
|
+
export async function findClaudeAlias(
|
|
115
|
+
options?: ShellConfigOptions,
|
|
116
|
+
): Promise<string | null> {
|
|
117
|
+
const configs = getShellConfigPaths(options)
|
|
118
|
+
|
|
119
|
+
for (const configPath of Object.values(configs)) {
|
|
120
|
+
const lines = await readFileLines(configPath)
|
|
121
|
+
if (!lines) continue
|
|
122
|
+
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
if (CLAUDE_ALIAS_REGEX.test(line)) {
|
|
125
|
+
// Extract the alias target
|
|
126
|
+
const match = line.match(/alias\s+claude=["']?([^"'\s]+)/)
|
|
127
|
+
if (match && match[1]) {
|
|
128
|
+
return match[1]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Check if a claude alias exists and points to a valid executable
|
|
139
|
+
* Returns the alias target if valid, null otherwise
|
|
140
|
+
* @param options Optional overrides for testing (env, homedir)
|
|
141
|
+
*/
|
|
142
|
+
export async function findValidClaudeAlias(
|
|
143
|
+
options?: ShellConfigOptions,
|
|
144
|
+
): Promise<string | null> {
|
|
145
|
+
const aliasTarget = await findClaudeAlias(options)
|
|
146
|
+
if (!aliasTarget) return null
|
|
147
|
+
|
|
148
|
+
const home = options?.homedir ?? osHomedir()
|
|
149
|
+
|
|
150
|
+
// Expand ~ to home directory
|
|
151
|
+
const expandedPath = aliasTarget.startsWith('~')
|
|
152
|
+
? aliasTarget.replace('~', home)
|
|
153
|
+
: aliasTarget
|
|
154
|
+
|
|
155
|
+
// Check if the target exists and is executable
|
|
156
|
+
try {
|
|
157
|
+
const stats = await stat(expandedPath)
|
|
158
|
+
// Check if it's a file (could be executable or symlink)
|
|
159
|
+
if (stats.isFile() || stats.isSymbolicLink()) {
|
|
160
|
+
return aliasTarget
|
|
161
|
+
}
|
|
162
|
+
} catch {
|
|
163
|
+
// Target doesn't exist or can't be accessed
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return null
|
|
167
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type Anthropic from '@anthropic-ai/sdk'
|
|
2
|
+
import type { BetaToolUnion } from '@anthropic-ai/sdk/resources/beta/messages.js'
|
|
3
|
+
import {
|
|
4
|
+
getLastApiCompletionTimestamp,
|
|
5
|
+
setLastApiCompletionTimestamp,
|
|
6
|
+
} from '../bootstrap/state.js'
|
|
7
|
+
import { STRUCTURED_OUTPUTS_BETA_HEADER } from '../constants/betas.js'
|
|
8
|
+
import type { QuerySource } from '../constants/querySource.js'
|
|
9
|
+
import {
|
|
10
|
+
getAttributionHeader,
|
|
11
|
+
getCLISyspromptPrefix,
|
|
12
|
+
} from '../constants/system.js'
|
|
13
|
+
import { logEvent } from '../services/analytics/index.js'
|
|
14
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../services/analytics/metadata.js'
|
|
15
|
+
import { getAPIMetadata } from '../services/api/gemini.js'
|
|
16
|
+
import { getAnthropicClient } from '../services/api/client.js'
|
|
17
|
+
import { getModelBetas, modelSupportsStructuredOutputs } from './betas.js'
|
|
18
|
+
import { computeFingerprint } from './fingerprint.js'
|
|
19
|
+
import { normalizeModelStringForAPI } from './model/model.js'
|
|
20
|
+
|
|
21
|
+
type MessageParam = Anthropic.MessageParam
|
|
22
|
+
type TextBlockParam = Anthropic.TextBlockParam
|
|
23
|
+
type Tool = Anthropic.Tool
|
|
24
|
+
type ToolChoice = Anthropic.ToolChoice
|
|
25
|
+
type BetaMessage = Anthropic.Beta.Messages.BetaMessage
|
|
26
|
+
type BetaJSONOutputFormat = Anthropic.Beta.Messages.BetaJSONOutputFormat
|
|
27
|
+
type BetaThinkingConfigParam = Anthropic.Beta.Messages.BetaThinkingConfigParam
|
|
28
|
+
|
|
29
|
+
export type SideQueryOptions = {
|
|
30
|
+
/** Model to use for the query */
|
|
31
|
+
model: string
|
|
32
|
+
/**
|
|
33
|
+
* System prompt - string or array of text blocks (will be prefixed with CLI attribution).
|
|
34
|
+
*
|
|
35
|
+
* The attribution header is always placed in its own TextBlockParam block to ensure
|
|
36
|
+
* server-side parsing correctly extracts the cc_entrypoint value without including
|
|
37
|
+
* system prompt content.
|
|
38
|
+
*/
|
|
39
|
+
system?: string | TextBlockParam[]
|
|
40
|
+
/** Messages to send (supports cache_control on content blocks) */
|
|
41
|
+
messages: MessageParam[]
|
|
42
|
+
/** Optional tools (supports both standard Tool[] and BetaToolUnion[] for custom tool types) */
|
|
43
|
+
tools?: Tool[] | BetaToolUnion[]
|
|
44
|
+
/** Optional tool choice (use { type: 'tool', name: 'x' } for forced output) */
|
|
45
|
+
tool_choice?: ToolChoice
|
|
46
|
+
/** Optional JSON output format for structured responses */
|
|
47
|
+
output_format?: BetaJSONOutputFormat
|
|
48
|
+
/** Max tokens (default: 1024) */
|
|
49
|
+
max_tokens?: number
|
|
50
|
+
/** Max retries (default: 2) */
|
|
51
|
+
maxRetries?: number
|
|
52
|
+
/** Abort signal */
|
|
53
|
+
signal?: AbortSignal
|
|
54
|
+
/** Skip CLI system prompt prefix (keeps attribution header for OAuth). For internal classifiers that provide their own prompt. */
|
|
55
|
+
skipSystemPromptPrefix?: boolean
|
|
56
|
+
/** Temperature override */
|
|
57
|
+
temperature?: number
|
|
58
|
+
/** Thinking budget (enables thinking), or `false` to send `{ type: 'disabled' }`. */
|
|
59
|
+
thinking?: number | false
|
|
60
|
+
/** Stop sequences — generation stops when any of these strings is emitted */
|
|
61
|
+
stop_sequences?: string[]
|
|
62
|
+
/** Attributes this call in tengu_api_success for COGS joining against reporting.sampling_calls. */
|
|
63
|
+
querySource: QuerySource
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Extract text from first user message for fingerprint computation.
|
|
68
|
+
*/
|
|
69
|
+
function extractFirstUserMessageText(messages: MessageParam[]): string {
|
|
70
|
+
const firstUserMessage = messages.find(m => m.role === 'user')
|
|
71
|
+
if (!firstUserMessage) return ''
|
|
72
|
+
|
|
73
|
+
const content = firstUserMessage.content
|
|
74
|
+
if (typeof content === 'string') return content
|
|
75
|
+
|
|
76
|
+
// Array of content blocks - find first text block
|
|
77
|
+
const textBlock = content.find(block => block.type === 'text')
|
|
78
|
+
return textBlock?.type === 'text' ? textBlock.text : ''
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Lightweight API wrapper for "side queries" outside the main conversation loop.
|
|
83
|
+
*
|
|
84
|
+
* Use this instead of direct client.beta.messages.create() calls to ensure
|
|
85
|
+
* proper OAuth token validation with fingerprint attribution headers.
|
|
86
|
+
*
|
|
87
|
+
* This handles:
|
|
88
|
+
* - Fingerprint computation for OAuth validation
|
|
89
|
+
* - Attribution header injection
|
|
90
|
+
* - CLI system prompt prefix
|
|
91
|
+
* - Proper betas for the model
|
|
92
|
+
* - API metadata
|
|
93
|
+
* - Model string normalization (strips [1m] suffix for API)
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* // Permission explainer
|
|
97
|
+
* await sideQuery({ querySource: 'permission_explainer', model, system: SYSTEM_PROMPT, messages, tools, tool_choice })
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* // Session search
|
|
101
|
+
* await sideQuery({ querySource: 'session_search', model, system: SEARCH_PROMPT, messages })
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* // Model validation
|
|
105
|
+
* await sideQuery({ querySource: 'model_validation', model, max_tokens: 1, messages: [{ role: 'user', content: 'Hi' }] })
|
|
106
|
+
*/
|
|
107
|
+
export async function sideQuery(opts: SideQueryOptions): Promise<BetaMessage> {
|
|
108
|
+
const {
|
|
109
|
+
model,
|
|
110
|
+
system,
|
|
111
|
+
messages,
|
|
112
|
+
tools,
|
|
113
|
+
tool_choice,
|
|
114
|
+
output_format,
|
|
115
|
+
max_tokens = 1024,
|
|
116
|
+
maxRetries = 2,
|
|
117
|
+
signal,
|
|
118
|
+
skipSystemPromptPrefix,
|
|
119
|
+
temperature,
|
|
120
|
+
thinking,
|
|
121
|
+
stop_sequences,
|
|
122
|
+
} = opts
|
|
123
|
+
|
|
124
|
+
const client = await getAnthropicClient({
|
|
125
|
+
maxRetries,
|
|
126
|
+
model,
|
|
127
|
+
source: 'side_query',
|
|
128
|
+
})
|
|
129
|
+
const betas = [...getModelBetas(model)]
|
|
130
|
+
// Add structured-outputs beta if using output_format and provider supports it
|
|
131
|
+
if (
|
|
132
|
+
output_format &&
|
|
133
|
+
modelSupportsStructuredOutputs(model) &&
|
|
134
|
+
!betas.includes(STRUCTURED_OUTPUTS_BETA_HEADER)
|
|
135
|
+
) {
|
|
136
|
+
betas.push(STRUCTURED_OUTPUTS_BETA_HEADER)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Extract first user message text for fingerprint
|
|
140
|
+
const messageText = extractFirstUserMessageText(messages)
|
|
141
|
+
|
|
142
|
+
// Compute fingerprint for OAuth attribution
|
|
143
|
+
const fingerprint = computeFingerprint(messageText, MACRO.VERSION)
|
|
144
|
+
const attributionHeader = getAttributionHeader(fingerprint)
|
|
145
|
+
|
|
146
|
+
// Build system as array to keep attribution header in its own block
|
|
147
|
+
// (prevents server-side parsing from including system content in cc_entrypoint)
|
|
148
|
+
const systemBlocks: TextBlockParam[] = [
|
|
149
|
+
attributionHeader ? { type: 'text', text: attributionHeader } : null,
|
|
150
|
+
// Skip CLI system prompt prefix for internal classifiers that provide their own prompt
|
|
151
|
+
...(skipSystemPromptPrefix
|
|
152
|
+
? []
|
|
153
|
+
: [
|
|
154
|
+
{
|
|
155
|
+
type: 'text' as const,
|
|
156
|
+
text: getCLISyspromptPrefix({
|
|
157
|
+
isNonInteractive: false,
|
|
158
|
+
hasAppendSystemPrompt: false,
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
]),
|
|
162
|
+
...(Array.isArray(system)
|
|
163
|
+
? system
|
|
164
|
+
: system
|
|
165
|
+
? [{ type: 'text' as const, text: system }]
|
|
166
|
+
: []),
|
|
167
|
+
].filter((block): block is TextBlockParam => block !== null)
|
|
168
|
+
|
|
169
|
+
let thinkingConfig: BetaThinkingConfigParam | undefined
|
|
170
|
+
if (thinking === false) {
|
|
171
|
+
thinkingConfig = { type: 'disabled' }
|
|
172
|
+
} else if (thinking !== undefined) {
|
|
173
|
+
thinkingConfig = {
|
|
174
|
+
type: 'enabled',
|
|
175
|
+
budget_tokens: Math.min(thinking, max_tokens - 1),
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const normalizedModel = normalizeModelStringForAPI(model)
|
|
180
|
+
const start = Date.now()
|
|
181
|
+
// biome-ignore lint/plugin: this IS the wrapper that handles OAuth attribution
|
|
182
|
+
const response = await client.beta.messages.create(
|
|
183
|
+
{
|
|
184
|
+
model: normalizedModel,
|
|
185
|
+
max_tokens,
|
|
186
|
+
system: systemBlocks,
|
|
187
|
+
messages,
|
|
188
|
+
...(tools && { tools }),
|
|
189
|
+
...(tool_choice && { tool_choice }),
|
|
190
|
+
...(output_format && { output_config: { format: output_format } }),
|
|
191
|
+
...(temperature !== undefined && { temperature }),
|
|
192
|
+
...(stop_sequences && { stop_sequences }),
|
|
193
|
+
...(thinkingConfig && { thinking: thinkingConfig }),
|
|
194
|
+
...(betas.length > 0 && { betas }),
|
|
195
|
+
metadata: getAPIMetadata(),
|
|
196
|
+
},
|
|
197
|
+
{ signal },
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
const requestId =
|
|
201
|
+
(response as { _request_id?: string | null })._request_id ?? undefined
|
|
202
|
+
const now = Date.now()
|
|
203
|
+
const lastCompletion = getLastApiCompletionTimestamp()
|
|
204
|
+
logEvent('tengu_api_success', {
|
|
205
|
+
requestId:
|
|
206
|
+
requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
207
|
+
querySource:
|
|
208
|
+
opts.querySource as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
209
|
+
model:
|
|
210
|
+
normalizedModel as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
211
|
+
inputTokens: response.usage.input_tokens,
|
|
212
|
+
outputTokens: response.usage.output_tokens,
|
|
213
|
+
cachedInputTokens: response.usage.cache_read_input_tokens ?? 0,
|
|
214
|
+
uncachedInputTokens: response.usage.cache_creation_input_tokens ?? 0,
|
|
215
|
+
durationMsIncludingRetries: now - start,
|
|
216
|
+
timeSinceLastApiCallMs:
|
|
217
|
+
lastCompletion !== null ? now - lastCompletion : undefined,
|
|
218
|
+
})
|
|
219
|
+
setLastApiCompletionTimestamp(now)
|
|
220
|
+
|
|
221
|
+
return response
|
|
222
|
+
}
|