@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,349 @@
|
|
|
1
|
+
// CCR session polling for /ultraplan. Waits for an approved ExitPlanMode
|
|
2
|
+
// tool_result, then extracts the plan text. Uses pollRemoteSessionEvents
|
|
3
|
+
// (shared with RemoteAgentTask) for pagination + typed SDKMessage[].
|
|
4
|
+
// Plan mode is set via set_permission_mode control_request in
|
|
5
|
+
// teleportToRemote's CreateSession events array.
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
ToolResultBlockParam,
|
|
9
|
+
ToolUseBlock,
|
|
10
|
+
} from '@anthropic-ai/sdk/resources'
|
|
11
|
+
import type { SDKMessage } from '../../entrypoints/agentSdkTypes.js'
|
|
12
|
+
import { EXIT_PLAN_MODE_V2_TOOL_NAME } from '../../tools/ExitPlanModeTool/constants.js'
|
|
13
|
+
import { logForDebugging } from '../debug.js'
|
|
14
|
+
import { sleep } from '../sleep.js'
|
|
15
|
+
import { isTransientNetworkError } from '../teleport/api.js'
|
|
16
|
+
import {
|
|
17
|
+
type PollRemoteSessionResponse,
|
|
18
|
+
pollRemoteSessionEvents,
|
|
19
|
+
} from '../teleport.js'
|
|
20
|
+
|
|
21
|
+
const POLL_INTERVAL_MS = 3000
|
|
22
|
+
// pollRemoteSessionEvents doesn't retry. A 30min poll makes ~600 calls;
|
|
23
|
+
// at any nonzero 5xx rate one blip would kill the run.
|
|
24
|
+
const MAX_CONSECUTIVE_FAILURES = 5
|
|
25
|
+
|
|
26
|
+
export type PollFailReason =
|
|
27
|
+
| 'terminated'
|
|
28
|
+
| 'timeout_pending'
|
|
29
|
+
| 'timeout_no_plan'
|
|
30
|
+
| 'extract_marker_missing'
|
|
31
|
+
| 'network_or_unknown'
|
|
32
|
+
| 'stopped'
|
|
33
|
+
|
|
34
|
+
export class UltraplanPollError extends Error {
|
|
35
|
+
constructor(
|
|
36
|
+
message: string,
|
|
37
|
+
readonly reason: PollFailReason,
|
|
38
|
+
readonly rejectCount: number,
|
|
39
|
+
options?: ErrorOptions,
|
|
40
|
+
) {
|
|
41
|
+
super(message, options)
|
|
42
|
+
this.name = 'UltraplanPollError'
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Sentinel string the browser PlanModal includes in the feedback when the user
|
|
47
|
+
// clicks "teleport back to terminal". Plan text follows on the next line.
|
|
48
|
+
export const ULTRAPLAN_TELEPORT_SENTINEL = '__ULTRAPLAN_TELEPORT_LOCAL__'
|
|
49
|
+
|
|
50
|
+
export type ScanResult =
|
|
51
|
+
| { kind: 'approved'; plan: string }
|
|
52
|
+
| { kind: 'teleport'; plan: string }
|
|
53
|
+
| { kind: 'rejected'; id: string }
|
|
54
|
+
| { kind: 'pending' }
|
|
55
|
+
| { kind: 'terminated'; subtype: string }
|
|
56
|
+
| { kind: 'unchanged' }
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Pill/detail-view state derived from the event stream. Transitions:
|
|
60
|
+
* running → (turn ends, no ExitPlanMode) → needs_input
|
|
61
|
+
* needs_input → (user replies in browser) → running
|
|
62
|
+
* running → (ExitPlanMode emitted, no result yet) → plan_ready
|
|
63
|
+
* plan_ready → (rejected) → running
|
|
64
|
+
* plan_ready → (approved) → poll resolves, pill removed
|
|
65
|
+
*/
|
|
66
|
+
export type UltraplanPhase = 'running' | 'needs_input' | 'plan_ready'
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Pure stateful classifier for the CCR event stream. Ingests SDKMessage[]
|
|
70
|
+
* batches (as delivered by pollRemoteSessionEvents) and returns the current
|
|
71
|
+
* ExitPlanMode verdict. No I/O, no timers — feed it synthetic or recorded
|
|
72
|
+
* events for unit tests and offline replay.
|
|
73
|
+
*
|
|
74
|
+
* Precedence (approved > terminated > rejected > pending > unchanged):
|
|
75
|
+
* pollRemoteSessionEvents paginates up to 50 pages per call, so one ingest
|
|
76
|
+
* can span seconds of session activity. A batch may contain both an approved
|
|
77
|
+
* tool_result AND a subsequent {type:'result'} (user approved, then remote
|
|
78
|
+
* crashed). The approved plan is real and in threadstore — don't drop it.
|
|
79
|
+
*/
|
|
80
|
+
export class ExitPlanModeScanner {
|
|
81
|
+
private exitPlanCalls: string[] = []
|
|
82
|
+
private results = new Map<string, ToolResultBlockParam>()
|
|
83
|
+
private rejectedIds = new Set<string>()
|
|
84
|
+
private terminated: { subtype: string } | null = null
|
|
85
|
+
private rescanAfterRejection = false
|
|
86
|
+
everSeenPending = false
|
|
87
|
+
|
|
88
|
+
get rejectCount(): number {
|
|
89
|
+
return this.rejectedIds.size
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* True when an ExitPlanMode tool_use exists with no tool_result yet —
|
|
94
|
+
* the remote is showing the approval dialog in the browser.
|
|
95
|
+
*/
|
|
96
|
+
get hasPendingPlan(): boolean {
|
|
97
|
+
const id = this.exitPlanCalls.findLast(c => !this.rejectedIds.has(c))
|
|
98
|
+
return id !== undefined && !this.results.has(id)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
ingest(newEvents: SDKMessage[]): ScanResult {
|
|
102
|
+
for (const m of newEvents) {
|
|
103
|
+
if (m.type === 'assistant') {
|
|
104
|
+
for (const block of m.message.content) {
|
|
105
|
+
if (block.type !== 'tool_use') continue
|
|
106
|
+
const tu = block as ToolUseBlock
|
|
107
|
+
if (tu.name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
|
|
108
|
+
this.exitPlanCalls.push(tu.id)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
} else if (m.type === 'user') {
|
|
112
|
+
const content = m.message.content
|
|
113
|
+
if (!Array.isArray(content)) continue
|
|
114
|
+
for (const block of content) {
|
|
115
|
+
if (block.type === 'tool_result') {
|
|
116
|
+
this.results.set(block.tool_use_id, block)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
} else if (m.type === 'result' && m.subtype !== 'success') {
|
|
120
|
+
// result(success) fires after EVERY CCR turn
|
|
121
|
+
// If the remote asks a clarifying question (turn ends without
|
|
122
|
+
// ExitPlanMode), we must keep polling — the user can reply in
|
|
123
|
+
// the browser and reach ExitPlanMode in a later turn.
|
|
124
|
+
// Only error subtypes (error_during_execution, error_max_turns,
|
|
125
|
+
// etc.) mean the session is actually dead.
|
|
126
|
+
this.terminated = { subtype: m.subtype }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Skip-scan when nothing could have moved the target: no new events, no
|
|
131
|
+
// rejection last tick. A rejection moves the newest-non-rejected target.
|
|
132
|
+
const shouldScan = newEvents.length > 0 || this.rescanAfterRejection
|
|
133
|
+
this.rescanAfterRejection = false
|
|
134
|
+
|
|
135
|
+
let found:
|
|
136
|
+
| { kind: 'approved'; plan: string }
|
|
137
|
+
| { kind: 'teleport'; plan: string }
|
|
138
|
+
| { kind: 'rejected'; id: string }
|
|
139
|
+
| { kind: 'pending' }
|
|
140
|
+
| null = null
|
|
141
|
+
if (shouldScan) {
|
|
142
|
+
for (let i = this.exitPlanCalls.length - 1; i >= 0; i--) {
|
|
143
|
+
const id = this.exitPlanCalls[i]!
|
|
144
|
+
if (this.rejectedIds.has(id)) continue
|
|
145
|
+
const tr = this.results.get(id)
|
|
146
|
+
if (!tr) {
|
|
147
|
+
found = { kind: 'pending' }
|
|
148
|
+
} else if (tr.is_error === true) {
|
|
149
|
+
const teleportPlan = extractTeleportPlan(tr.content)
|
|
150
|
+
found =
|
|
151
|
+
teleportPlan !== null
|
|
152
|
+
? { kind: 'teleport', plan: teleportPlan }
|
|
153
|
+
: { kind: 'rejected', id }
|
|
154
|
+
} else {
|
|
155
|
+
found = { kind: 'approved', plan: extractApprovedPlan(tr.content) }
|
|
156
|
+
}
|
|
157
|
+
break
|
|
158
|
+
}
|
|
159
|
+
if (found?.kind === 'approved' || found?.kind === 'teleport') return found
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Bookkeeping before the terminated check — a batch can contain BOTH a
|
|
163
|
+
// rejected tool_result and a {type:'result'}; rejectCount must reflect
|
|
164
|
+
// the rejection even though terminated takes return precedence.
|
|
165
|
+
if (found?.kind === 'rejected') {
|
|
166
|
+
this.rejectedIds.add(found.id)
|
|
167
|
+
this.rescanAfterRejection = true
|
|
168
|
+
}
|
|
169
|
+
if (this.terminated) {
|
|
170
|
+
return { kind: 'terminated', subtype: this.terminated.subtype }
|
|
171
|
+
}
|
|
172
|
+
if (found?.kind === 'rejected') {
|
|
173
|
+
return found
|
|
174
|
+
}
|
|
175
|
+
if (found?.kind === 'pending') {
|
|
176
|
+
this.everSeenPending = true
|
|
177
|
+
return found
|
|
178
|
+
}
|
|
179
|
+
return { kind: 'unchanged' }
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export type PollResult = {
|
|
184
|
+
plan: string
|
|
185
|
+
rejectCount: number
|
|
186
|
+
/** 'local' = user clicked teleport (execute here, archive remote). 'remote' = user approved in-CCR execution (don't archive). */
|
|
187
|
+
executionTarget: 'local' | 'remote'
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Returns the approved plan text and where the user wants it executed.
|
|
191
|
+
// 'approved' scrapes from the "## Approved Plan:" marker (ExitPlanModeV2Tool
|
|
192
|
+
// default branch) — the model writes plan to a file inside CCR and calls
|
|
193
|
+
// ExitPlanMode({allowedPrompts}), so input.plan is never in threadstore.
|
|
194
|
+
// 'teleport' scrapes from the ULTRAPLAN_TELEPORT_SENTINEL in a deny tool_result —
|
|
195
|
+
// browser sends a rejection so the remote stays in plan mode, with the plan
|
|
196
|
+
// text embedded in the feedback. Normal rejections (is_error === true, no
|
|
197
|
+
// sentinel) are tracked and skipped so the user can iterate in the browser.
|
|
198
|
+
export async function pollForApprovedExitPlanMode(
|
|
199
|
+
sessionId: string,
|
|
200
|
+
timeoutMs: number,
|
|
201
|
+
onPhaseChange?: (phase: UltraplanPhase) => void,
|
|
202
|
+
shouldStop?: () => boolean,
|
|
203
|
+
): Promise<PollResult> {
|
|
204
|
+
const deadline = Date.now() + timeoutMs
|
|
205
|
+
const scanner = new ExitPlanModeScanner()
|
|
206
|
+
let cursor: string | null = null
|
|
207
|
+
let failures = 0
|
|
208
|
+
let lastPhase: UltraplanPhase = 'running'
|
|
209
|
+
|
|
210
|
+
while (Date.now() < deadline) {
|
|
211
|
+
if (shouldStop?.()) {
|
|
212
|
+
throw new UltraplanPollError(
|
|
213
|
+
'poll stopped by caller',
|
|
214
|
+
'stopped',
|
|
215
|
+
scanner.rejectCount,
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
let newEvents: SDKMessage[]
|
|
219
|
+
let sessionStatus: PollRemoteSessionResponse['sessionStatus']
|
|
220
|
+
try {
|
|
221
|
+
// Metadata fetch (session_status) is the needs_input signal —
|
|
222
|
+
// threadstore doesn't persist result(success) turn-end events, so
|
|
223
|
+
// idle status is the only authoritative "remote is waiting" marker.
|
|
224
|
+
const resp = await pollRemoteSessionEvents(sessionId, cursor)
|
|
225
|
+
newEvents = resp.newEvents
|
|
226
|
+
cursor = resp.lastEventId
|
|
227
|
+
sessionStatus = resp.sessionStatus
|
|
228
|
+
failures = 0
|
|
229
|
+
} catch (e) {
|
|
230
|
+
const transient = isTransientNetworkError(e)
|
|
231
|
+
if (!transient || ++failures >= MAX_CONSECUTIVE_FAILURES) {
|
|
232
|
+
throw new UltraplanPollError(
|
|
233
|
+
e instanceof Error ? e.message : String(e),
|
|
234
|
+
'network_or_unknown',
|
|
235
|
+
scanner.rejectCount,
|
|
236
|
+
{ cause: e },
|
|
237
|
+
)
|
|
238
|
+
}
|
|
239
|
+
await sleep(POLL_INTERVAL_MS)
|
|
240
|
+
continue
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
let result: ScanResult
|
|
244
|
+
try {
|
|
245
|
+
result = scanner.ingest(newEvents)
|
|
246
|
+
} catch (e) {
|
|
247
|
+
throw new UltraplanPollError(
|
|
248
|
+
e instanceof Error ? e.message : String(e),
|
|
249
|
+
'extract_marker_missing',
|
|
250
|
+
scanner.rejectCount,
|
|
251
|
+
)
|
|
252
|
+
}
|
|
253
|
+
if (result.kind === 'approved') {
|
|
254
|
+
return {
|
|
255
|
+
plan: result.plan,
|
|
256
|
+
rejectCount: scanner.rejectCount,
|
|
257
|
+
executionTarget: 'remote',
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (result.kind === 'teleport') {
|
|
261
|
+
return {
|
|
262
|
+
plan: result.plan,
|
|
263
|
+
rejectCount: scanner.rejectCount,
|
|
264
|
+
executionTarget: 'local',
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (result.kind === 'terminated') {
|
|
268
|
+
throw new UltraplanPollError(
|
|
269
|
+
`remote session ended (${result.subtype}) before plan approval`,
|
|
270
|
+
'terminated',
|
|
271
|
+
scanner.rejectCount,
|
|
272
|
+
)
|
|
273
|
+
}
|
|
274
|
+
// plan_ready from the event stream wins; otherwise idle session status
|
|
275
|
+
// means the remote asked a question and is waiting for a browser reply.
|
|
276
|
+
// requires_action with no pending plan is also needs_input — the remote
|
|
277
|
+
// may be blocked on a non-ExitPlanMode permission prompt.
|
|
278
|
+
// CCR briefly flips to 'idle' between tool turns (see STABLE_IDLE_POLLS
|
|
279
|
+
// in RemoteAgentTask). Only trust idle when no new events arrived —
|
|
280
|
+
// events flowing means the session is working regardless of the status
|
|
281
|
+
// snapshot. This also makes needs_input → running snap back on the first
|
|
282
|
+
// poll that sees the user's reply event, even if session_status lags.
|
|
283
|
+
const quietIdle =
|
|
284
|
+
(sessionStatus === 'idle' || sessionStatus === 'requires_action') &&
|
|
285
|
+
newEvents.length === 0
|
|
286
|
+
const phase: UltraplanPhase = scanner.hasPendingPlan
|
|
287
|
+
? 'plan_ready'
|
|
288
|
+
: quietIdle
|
|
289
|
+
? 'needs_input'
|
|
290
|
+
: 'running'
|
|
291
|
+
if (phase !== lastPhase) {
|
|
292
|
+
logForDebugging(`[ultraplan] phase ${lastPhase} → ${phase}`)
|
|
293
|
+
lastPhase = phase
|
|
294
|
+
onPhaseChange?.(phase)
|
|
295
|
+
}
|
|
296
|
+
await sleep(POLL_INTERVAL_MS)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
throw new UltraplanPollError(
|
|
300
|
+
scanner.everSeenPending
|
|
301
|
+
? `no approval after ${timeoutMs / 1000}s`
|
|
302
|
+
: `ExitPlanMode never reached after ${timeoutMs / 1000}s (the remote container failed to start, or session ID mismatch?)`,
|
|
303
|
+
scanner.everSeenPending ? 'timeout_pending' : 'timeout_no_plan',
|
|
304
|
+
scanner.rejectCount,
|
|
305
|
+
)
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// tool_result content may be string or [{type:'text',text}] depending on
|
|
309
|
+
// threadstore encoding.
|
|
310
|
+
function contentToText(content: ToolResultBlockParam['content']): string {
|
|
311
|
+
return typeof content === 'string'
|
|
312
|
+
? content
|
|
313
|
+
: Array.isArray(content)
|
|
314
|
+
? content.map(b => ('text' in b ? b.text : '')).join('')
|
|
315
|
+
: ''
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Extracts the plan text after the ULTRAPLAN_TELEPORT_SENTINEL marker.
|
|
319
|
+
// Returns null when the sentinel is absent — callers treat null as a normal
|
|
320
|
+
// user rejection (scanner falls through to { kind: 'rejected' }).
|
|
321
|
+
function extractTeleportPlan(
|
|
322
|
+
content: ToolResultBlockParam['content'],
|
|
323
|
+
): string | null {
|
|
324
|
+
const text = contentToText(content)
|
|
325
|
+
const marker = `${ULTRAPLAN_TELEPORT_SENTINEL}\n`
|
|
326
|
+
const idx = text.indexOf(marker)
|
|
327
|
+
if (idx === -1) return null
|
|
328
|
+
return text.slice(idx + marker.length).trimEnd()
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Plan is echoed in tool_result content as "## Approved Plan:\n<text>" or
|
|
332
|
+
// "## Approved Plan (edited by user):\n<text>" (ExitPlanModeV2Tool).
|
|
333
|
+
function extractApprovedPlan(content: ToolResultBlockParam['content']): string {
|
|
334
|
+
const text = contentToText(content)
|
|
335
|
+
// Try both markers — edited plans use a different label.
|
|
336
|
+
const markers = [
|
|
337
|
+
'## Approved Plan (edited by user):\n',
|
|
338
|
+
'## Approved Plan:\n',
|
|
339
|
+
]
|
|
340
|
+
for (const marker of markers) {
|
|
341
|
+
const idx = text.indexOf(marker)
|
|
342
|
+
if (idx !== -1) {
|
|
343
|
+
return text.slice(idx + marker.length).trimEnd()
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
throw new Error(
|
|
347
|
+
`ExitPlanMode approved but tool_result has no "## Approved Plan:" marker — remote may have hit the empty-plan or isAgent branch. Content preview: ${text.slice(0, 200)}`,
|
|
348
|
+
)
|
|
349
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
type TriggerPosition = { word: string; start: number; end: number }
|
|
2
|
+
|
|
3
|
+
const OPEN_TO_CLOSE: Record<string, string> = {
|
|
4
|
+
'`': '`',
|
|
5
|
+
'"': '"',
|
|
6
|
+
'<': '>',
|
|
7
|
+
'{': '}',
|
|
8
|
+
'[': ']',
|
|
9
|
+
'(': ')',
|
|
10
|
+
"'": "'",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Find keyword positions, skipping occurrences that are clearly not a
|
|
15
|
+
* launch directive:
|
|
16
|
+
*
|
|
17
|
+
* - Inside paired delimiters: backticks, double quotes, angle brackets
|
|
18
|
+
* (tag-like only, so `n < 5 ultraplan n > 10` is not a phantom range),
|
|
19
|
+
* curly braces, square brackets (innermost — preExpansionInput has
|
|
20
|
+
* `[Pasted text #N]` placeholders), parentheses. Single quotes are
|
|
21
|
+
* delimiters only when not an apostrophe — the opening quote must be
|
|
22
|
+
* preceded by a non-word char (or start) and the closing quote must be
|
|
23
|
+
* followed by a non-word char (or end), so "let's ultraplan it's"
|
|
24
|
+
* still triggers.
|
|
25
|
+
*
|
|
26
|
+
* - Path/identifier-like context: immediately preceded or followed by
|
|
27
|
+
* `/`, `\`, or `-`, or followed by `.` + word char (file extension).
|
|
28
|
+
* `\b` sees a boundary at `-`, so `ultraplan-s` would otherwise
|
|
29
|
+
* match. This keeps `src/ultraplan/foo.ts`, `ultraplan.tsx`, and
|
|
30
|
+
* `--ultraplan-mode` from triggering while `ultraplan.` at a sentence
|
|
31
|
+
* end still does.
|
|
32
|
+
*
|
|
33
|
+
* - Followed by `?`: a question about the feature shouldn't invoke it.
|
|
34
|
+
* Other sentence punctuation (`.`, `,`, `!`) still triggers.
|
|
35
|
+
*
|
|
36
|
+
* - Slash command input: text starting with `/` is a slash command
|
|
37
|
+
* invocation (processUserInput.ts routes it to processSlashCommand,
|
|
38
|
+
* not keyword detection), so `/rename ultraplan foo` never triggers.
|
|
39
|
+
* Without this, PromptInput would rainbow-highlight the word and show
|
|
40
|
+
* the "will launch ultraplan" notification even though submitting the
|
|
41
|
+
* input runs /rename, not /ultraplan.
|
|
42
|
+
*
|
|
43
|
+
* Shape matches findThinkingTriggerPositions (thinking.ts) so
|
|
44
|
+
* PromptInput treats both trigger types uniformly.
|
|
45
|
+
*/
|
|
46
|
+
function findKeywordTriggerPositions(
|
|
47
|
+
text: string,
|
|
48
|
+
keyword: string,
|
|
49
|
+
): TriggerPosition[] {
|
|
50
|
+
const re = new RegExp(keyword, 'i')
|
|
51
|
+
if (!re.test(text)) return []
|
|
52
|
+
if (text.startsWith('/')) return []
|
|
53
|
+
const quotedRanges: Array<{ start: number; end: number }> = []
|
|
54
|
+
let openQuote: string | null = null
|
|
55
|
+
let openAt = 0
|
|
56
|
+
const isWord = (ch: string | undefined) => !!ch && /[\p{L}\p{N}_]/u.test(ch)
|
|
57
|
+
for (let i = 0; i < text.length; i++) {
|
|
58
|
+
const ch = text[i]!
|
|
59
|
+
if (openQuote) {
|
|
60
|
+
if (openQuote === '[' && ch === '[') {
|
|
61
|
+
openAt = i
|
|
62
|
+
continue
|
|
63
|
+
}
|
|
64
|
+
if (ch !== OPEN_TO_CLOSE[openQuote]) continue
|
|
65
|
+
if (openQuote === "'" && isWord(text[i + 1])) continue
|
|
66
|
+
quotedRanges.push({ start: openAt, end: i + 1 })
|
|
67
|
+
openQuote = null
|
|
68
|
+
} else if (
|
|
69
|
+
(ch === '<' && i + 1 < text.length && /[a-zA-Z/]/.test(text[i + 1]!)) ||
|
|
70
|
+
(ch === "'" && !isWord(text[i - 1])) ||
|
|
71
|
+
(ch !== '<' && ch !== "'" && ch in OPEN_TO_CLOSE)
|
|
72
|
+
) {
|
|
73
|
+
openQuote = ch
|
|
74
|
+
openAt = i
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const positions: TriggerPosition[] = []
|
|
79
|
+
const wordRe = new RegExp(`\\b${keyword}\\b`, 'gi')
|
|
80
|
+
const matches = text.matchAll(wordRe)
|
|
81
|
+
for (const match of matches) {
|
|
82
|
+
if (match.index === undefined) continue
|
|
83
|
+
const start = match.index
|
|
84
|
+
const end = start + match[0].length
|
|
85
|
+
if (quotedRanges.some(r => start >= r.start && start < r.end)) continue
|
|
86
|
+
const before = text[start - 1]
|
|
87
|
+
const after = text[end]
|
|
88
|
+
if (before === '/' || before === '\\' || before === '-') continue
|
|
89
|
+
if (after === '/' || after === '\\' || after === '-' || after === '?')
|
|
90
|
+
continue
|
|
91
|
+
if (after === '.' && isWord(text[end + 1])) continue
|
|
92
|
+
positions.push({ word: match[0], start, end })
|
|
93
|
+
}
|
|
94
|
+
return positions
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function findUltraplanTriggerPositions(text: string): TriggerPosition[] {
|
|
98
|
+
return findKeywordTriggerPositions(text, 'ultraplan')
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function findUltrareviewTriggerPositions(
|
|
102
|
+
text: string,
|
|
103
|
+
): TriggerPosition[] {
|
|
104
|
+
return findKeywordTriggerPositions(text, 'ultrareview')
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function hasUltraplanKeyword(text: string): boolean {
|
|
108
|
+
return findUltraplanTriggerPositions(text).length > 0
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function hasUltrareviewKeyword(text: string): boolean {
|
|
112
|
+
return findUltrareviewTriggerPositions(text).length > 0
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Replace the first triggerable "ultraplan" with "plan" so the forwarded
|
|
117
|
+
* prompt stays grammatical ("please ultraplan this" → "please plan this").
|
|
118
|
+
* Preserves the user's casing of the "plan" suffix.
|
|
119
|
+
*/
|
|
120
|
+
export function replaceUltraplanKeyword(text: string): string {
|
|
121
|
+
const [trigger] = findUltraplanTriggerPositions(text)
|
|
122
|
+
if (!trigger) return text
|
|
123
|
+
const before = text.slice(0, trigger.start)
|
|
124
|
+
const after = text.slice(trigger.end)
|
|
125
|
+
if (!(before + after).trim()) return ''
|
|
126
|
+
return before + trigger.word.slice('ultra'.length) + after
|
|
127
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
placeholder
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
3
|
+
logEvent,
|
|
4
|
+
} from 'src/services/analytics/index.js'
|
|
5
|
+
|
|
6
|
+
export type CompletionType =
|
|
7
|
+
| 'str_replace_single'
|
|
8
|
+
| 'str_replace_multi'
|
|
9
|
+
| 'write_file_single'
|
|
10
|
+
| 'tool_use_single'
|
|
11
|
+
|
|
12
|
+
type LogEvent = {
|
|
13
|
+
completion_type: CompletionType
|
|
14
|
+
event: 'accept' | 'reject' | 'response'
|
|
15
|
+
metadata: {
|
|
16
|
+
language_name: string | Promise<string>
|
|
17
|
+
message_id: string
|
|
18
|
+
platform: string
|
|
19
|
+
hasFeedback?: boolean
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function logUnaryEvent(event: LogEvent): Promise<void> {
|
|
24
|
+
logEvent('tengu_unary_event', {
|
|
25
|
+
event:
|
|
26
|
+
event.event as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
27
|
+
completion_type:
|
|
28
|
+
event.completion_type as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
29
|
+
language_name: (await event.metadata
|
|
30
|
+
.language_name) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
31
|
+
message_id: event.metadata
|
|
32
|
+
.message_id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
33
|
+
platform: event.metadata
|
|
34
|
+
.platform as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
35
|
+
...(event.metadata.hasFeedback !== undefined && {
|
|
36
|
+
hasFeedback: event.metadata.hasFeedback,
|
|
37
|
+
}),
|
|
38
|
+
})
|
|
39
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Undercover mode — safety utilities for contributing to public/open-source repos.
|
|
3
|
+
*
|
|
4
|
+
* When active, Claude Code adds safety instructions to commit/PR prompts and
|
|
5
|
+
* strips all attribution to avoid leaking internal model codenames, project
|
|
6
|
+
* names, or other Anthropic-internal information. The model is not told what
|
|
7
|
+
* model it is.
|
|
8
|
+
*
|
|
9
|
+
* Activation:
|
|
10
|
+
* - CLAUDE_CODE_UNDERCOVER=1 — force ON (even in internal repos)
|
|
11
|
+
* - Otherwise AUTO: active UNLESS the repo remote matches the internal
|
|
12
|
+
* allowlist (INTERNAL_MODEL_REPOS in commitAttribution.ts). Safe default
|
|
13
|
+
* is ON — Claude may push to public remotes from a CWD that isn't itself
|
|
14
|
+
* a git checkout (e.g. /tmp crash repro).
|
|
15
|
+
* - There is NO force-OFF. This guards against model codename leaks — if
|
|
16
|
+
* we're not confident we're in an internal repo, we stay undercover.
|
|
17
|
+
*
|
|
18
|
+
* All code paths are gated on process.env.USER_TYPE === 'ant'. Since USER_TYPE is
|
|
19
|
+
* a build-time --define, the bundler constant-folds these checks and dead-code-
|
|
20
|
+
* eliminates the ant-only branches from external builds. In external builds every
|
|
21
|
+
* function in this file reduces to a trivial return.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { getRepoClassCached } from './commitAttribution.js'
|
|
25
|
+
import { getGlobalConfig } from './config.js'
|
|
26
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
27
|
+
|
|
28
|
+
export function isUndercover(): boolean {
|
|
29
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
30
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true
|
|
31
|
+
// Auto: active unless we've positively confirmed we're in an allowlisted
|
|
32
|
+
// internal repo. 'external', 'none', and null (check not yet run) all
|
|
33
|
+
// resolve to ON. The check is primed in setup.ts; only 'internal' → OFF.
|
|
34
|
+
return getRepoClassCached() !== 'internal'
|
|
35
|
+
}
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function getUndercoverInstructions(): string {
|
|
40
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
41
|
+
return `## UNDERCOVER MODE — CRITICAL
|
|
42
|
+
|
|
43
|
+
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit
|
|
44
|
+
messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal
|
|
45
|
+
information. Do not blow your cover.
|
|
46
|
+
|
|
47
|
+
NEVER include in commit messages or PR descriptions:
|
|
48
|
+
- Internal model codenames (animal names like Capybara, Tengu, etc.)
|
|
49
|
+
- Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
|
|
50
|
+
- Internal repo or project names (e.g., claude-cli-internal, anthropics/…)
|
|
51
|
+
- Internal tooling, Slack channels, or short links (e.g., go/cc, #claude-code-…)
|
|
52
|
+
- The phrase "Claude Code" or any mention that you are an AI
|
|
53
|
+
- Any hint of what model or version you are
|
|
54
|
+
- Co-Authored-By lines or any other attribution
|
|
55
|
+
|
|
56
|
+
Write commit messages as a human developer would — describe only what the code
|
|
57
|
+
change does.
|
|
58
|
+
|
|
59
|
+
GOOD:
|
|
60
|
+
- "Fix race condition in file watcher initialization"
|
|
61
|
+
- "Add support for custom key bindings"
|
|
62
|
+
- "Refactor parser for better error messages"
|
|
63
|
+
|
|
64
|
+
BAD (never write these):
|
|
65
|
+
- "Fix bug found while testing with Claude Capybara"
|
|
66
|
+
- "1-shotted by claude-opus-4-6"
|
|
67
|
+
- "Generated with Claude Code"
|
|
68
|
+
- "Co-Authored-By: Claude Opus 4.6 <…>"
|
|
69
|
+
`
|
|
70
|
+
}
|
|
71
|
+
return ''
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Check whether to show the one-time explainer dialog for auto-undercover.
|
|
76
|
+
* True when: undercover is active via auto-detection (not forced via env),
|
|
77
|
+
* and the user hasn't seen the notice before. Pure — the component marks the
|
|
78
|
+
* flag on mount.
|
|
79
|
+
*/
|
|
80
|
+
export function shouldShowUndercoverAutoNotice(): boolean {
|
|
81
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
82
|
+
// If forced via env, user already knows; don't nag.
|
|
83
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return false
|
|
84
|
+
if (!isUndercover()) return false
|
|
85
|
+
if (getGlobalConfig().hasSeenUndercoverAutoNotice) return false
|
|
86
|
+
return true
|
|
87
|
+
}
|
|
88
|
+
return false
|
|
89
|
+
}
|