@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,164 @@
|
|
|
1
|
+
import { getActiveTimeCounter as getActiveTimeCounterImpl } from '../bootstrap/state.js'
|
|
2
|
+
|
|
3
|
+
type ActivityManagerOptions = {
|
|
4
|
+
getNow?: () => number
|
|
5
|
+
getActiveTimeCounter?: typeof getActiveTimeCounterImpl
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* ActivityManager handles generic activity tracking for both user and CLI operations.
|
|
10
|
+
* It automatically deduplicates overlapping activities and provides separate metrics
|
|
11
|
+
* for user vs CLI active time.
|
|
12
|
+
*/
|
|
13
|
+
export class ActivityManager {
|
|
14
|
+
private activeOperations = new Set<string>()
|
|
15
|
+
|
|
16
|
+
private lastUserActivityTime: number = 0 // Start with 0 to indicate no activity yet
|
|
17
|
+
private lastCLIRecordedTime: number
|
|
18
|
+
|
|
19
|
+
private isCLIActive: boolean = false
|
|
20
|
+
|
|
21
|
+
private readonly USER_ACTIVITY_TIMEOUT_MS = 5000 // 5 seconds
|
|
22
|
+
|
|
23
|
+
private readonly getNow: () => number
|
|
24
|
+
private readonly getActiveTimeCounter: typeof getActiveTimeCounterImpl
|
|
25
|
+
|
|
26
|
+
private static instance: ActivityManager | null = null
|
|
27
|
+
|
|
28
|
+
constructor(options?: ActivityManagerOptions) {
|
|
29
|
+
this.getNow = options?.getNow ?? (() => Date.now())
|
|
30
|
+
this.getActiveTimeCounter =
|
|
31
|
+
options?.getActiveTimeCounter ?? getActiveTimeCounterImpl
|
|
32
|
+
this.lastCLIRecordedTime = this.getNow()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static getInstance(): ActivityManager {
|
|
36
|
+
if (!ActivityManager.instance) {
|
|
37
|
+
ActivityManager.instance = new ActivityManager()
|
|
38
|
+
}
|
|
39
|
+
return ActivityManager.instance
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Reset the singleton instance (for testing purposes)
|
|
44
|
+
*/
|
|
45
|
+
static resetInstance(): void {
|
|
46
|
+
ActivityManager.instance = null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create a new instance with custom options (for testing purposes)
|
|
51
|
+
*/
|
|
52
|
+
static createInstance(options?: ActivityManagerOptions): ActivityManager {
|
|
53
|
+
ActivityManager.instance = new ActivityManager(options)
|
|
54
|
+
return ActivityManager.instance
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Called when user interacts with the CLI (typing, commands, etc.)
|
|
59
|
+
*/
|
|
60
|
+
recordUserActivity(): void {
|
|
61
|
+
// Don't record user time if CLI is active (CLI takes precedence)
|
|
62
|
+
if (!this.isCLIActive && this.lastUserActivityTime !== 0) {
|
|
63
|
+
const now = this.getNow()
|
|
64
|
+
const timeSinceLastActivity = (now - this.lastUserActivityTime) / 1000
|
|
65
|
+
|
|
66
|
+
if (timeSinceLastActivity > 0) {
|
|
67
|
+
const activeTimeCounter = this.getActiveTimeCounter()
|
|
68
|
+
if (activeTimeCounter) {
|
|
69
|
+
const timeoutSeconds = this.USER_ACTIVITY_TIMEOUT_MS / 1000
|
|
70
|
+
|
|
71
|
+
// Only record time if within the timeout window
|
|
72
|
+
if (timeSinceLastActivity < timeoutSeconds) {
|
|
73
|
+
activeTimeCounter.add(timeSinceLastActivity, { type: 'user' })
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Update the last user activity timestamp
|
|
80
|
+
this.lastUserActivityTime = this.getNow()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Starts tracking CLI activity (tool execution, AI response, etc.)
|
|
85
|
+
*/
|
|
86
|
+
startCLIActivity(operationId: string): void {
|
|
87
|
+
// If operation already exists, it likely means the previous one didn't clean up
|
|
88
|
+
// properly (e.g., component crashed/unmounted without calling end). Force cleanup
|
|
89
|
+
// to avoid overestimating time - better to underestimate than overestimate.
|
|
90
|
+
if (this.activeOperations.has(operationId)) {
|
|
91
|
+
this.endCLIActivity(operationId)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const wasEmpty = this.activeOperations.size === 0
|
|
95
|
+
this.activeOperations.add(operationId)
|
|
96
|
+
|
|
97
|
+
if (wasEmpty) {
|
|
98
|
+
this.isCLIActive = true
|
|
99
|
+
this.lastCLIRecordedTime = this.getNow()
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Stops tracking CLI activity
|
|
105
|
+
*/
|
|
106
|
+
endCLIActivity(operationId: string): void {
|
|
107
|
+
this.activeOperations.delete(operationId)
|
|
108
|
+
|
|
109
|
+
if (this.activeOperations.size === 0) {
|
|
110
|
+
// Last operation ended - CLI becoming inactive
|
|
111
|
+
// Record the CLI time before switching to inactive
|
|
112
|
+
const now = this.getNow()
|
|
113
|
+
const timeSinceLastRecord = (now - this.lastCLIRecordedTime) / 1000
|
|
114
|
+
|
|
115
|
+
if (timeSinceLastRecord > 0) {
|
|
116
|
+
const activeTimeCounter = this.getActiveTimeCounter()
|
|
117
|
+
if (activeTimeCounter) {
|
|
118
|
+
activeTimeCounter.add(timeSinceLastRecord, { type: 'cli' })
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
this.lastCLIRecordedTime = now
|
|
123
|
+
this.isCLIActive = false
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Convenience method to track an async operation automatically (mainly for testing/debugging)
|
|
129
|
+
*/
|
|
130
|
+
async trackOperation<T>(
|
|
131
|
+
operationId: string,
|
|
132
|
+
fn: () => Promise<T>,
|
|
133
|
+
): Promise<T> {
|
|
134
|
+
this.startCLIActivity(operationId)
|
|
135
|
+
try {
|
|
136
|
+
return await fn()
|
|
137
|
+
} finally {
|
|
138
|
+
this.endCLIActivity(operationId)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Gets current activity states (mainly for testing/debugging)
|
|
144
|
+
*/
|
|
145
|
+
getActivityStates(): {
|
|
146
|
+
isUserActive: boolean
|
|
147
|
+
isCLIActive: boolean
|
|
148
|
+
activeOperationCount: number
|
|
149
|
+
} {
|
|
150
|
+
const now = this.getNow()
|
|
151
|
+
const timeSinceUserActivity = (now - this.lastUserActivityTime) / 1000
|
|
152
|
+
const isUserActive =
|
|
153
|
+
timeSinceUserActivity < this.USER_ACTIVITY_TIMEOUT_MS / 1000
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
isUserActive,
|
|
157
|
+
isCLIActive: this.isCLIActive,
|
|
158
|
+
activeOperationCount: this.activeOperations.size,
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Export singleton instance
|
|
164
|
+
export const activityManager = ActivityManager.getInstance()
|
package/utils/advisor.ts
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import type { BetaUsage } from '@anthropic-ai/sdk/resources/beta/messages/messages.mjs'
|
|
2
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
3
|
+
import { shouldIncludeFirstPartyOnlyBetas } from './betas.js'
|
|
4
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
5
|
+
import { getInitialSettings } from './settings/settings.js'
|
|
6
|
+
|
|
7
|
+
// The SDK does not yet have types for advisor blocks.
|
|
8
|
+
// TODO(hackyon): Migrate to the real anthropic SDK types when this feature ships publicly
|
|
9
|
+
export type AdvisorServerToolUseBlock = {
|
|
10
|
+
type: 'server_tool_use'
|
|
11
|
+
id: string
|
|
12
|
+
name: 'advisor'
|
|
13
|
+
input: { [key: string]: unknown }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type AdvisorToolResultBlock = {
|
|
17
|
+
type: 'advisor_tool_result'
|
|
18
|
+
tool_use_id: string
|
|
19
|
+
content:
|
|
20
|
+
| {
|
|
21
|
+
type: 'advisor_result'
|
|
22
|
+
text: string
|
|
23
|
+
}
|
|
24
|
+
| {
|
|
25
|
+
type: 'advisor_redacted_result'
|
|
26
|
+
encrypted_content: string
|
|
27
|
+
}
|
|
28
|
+
| {
|
|
29
|
+
type: 'advisor_tool_result_error'
|
|
30
|
+
error_code: string
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type AdvisorBlock = AdvisorServerToolUseBlock | AdvisorToolResultBlock
|
|
35
|
+
|
|
36
|
+
export function isAdvisorBlock(param: {
|
|
37
|
+
type: string
|
|
38
|
+
name?: string
|
|
39
|
+
}): param is AdvisorBlock {
|
|
40
|
+
return (
|
|
41
|
+
param.type === 'advisor_tool_result' ||
|
|
42
|
+
(param.type === 'server_tool_use' && param.name === 'advisor')
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
type AdvisorConfig = {
|
|
47
|
+
enabled?: boolean
|
|
48
|
+
canUserConfigure?: boolean
|
|
49
|
+
baseModel?: string
|
|
50
|
+
advisorModel?: string
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function getAdvisorConfig(): AdvisorConfig {
|
|
54
|
+
return getFeatureValue_CACHED_MAY_BE_STALE<AdvisorConfig>(
|
|
55
|
+
'tengu_sage_compass',
|
|
56
|
+
{},
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function isAdvisorEnabled(): boolean {
|
|
61
|
+
if (isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_ADVISOR_TOOL)) {
|
|
62
|
+
return false
|
|
63
|
+
}
|
|
64
|
+
// The advisor beta header is first-party only (Bedrock/Vertex 400 on it).
|
|
65
|
+
if (!shouldIncludeFirstPartyOnlyBetas()) {
|
|
66
|
+
return false
|
|
67
|
+
}
|
|
68
|
+
return getAdvisorConfig().enabled ?? false
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export function canUserConfigureAdvisor(): boolean {
|
|
72
|
+
return isAdvisorEnabled() && (getAdvisorConfig().canUserConfigure ?? false)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getExperimentAdvisorModels():
|
|
76
|
+
| { baseModel: string; advisorModel: string }
|
|
77
|
+
| undefined {
|
|
78
|
+
const config = getAdvisorConfig()
|
|
79
|
+
return isAdvisorEnabled() &&
|
|
80
|
+
!canUserConfigureAdvisor() &&
|
|
81
|
+
config.baseModel &&
|
|
82
|
+
config.advisorModel
|
|
83
|
+
? { baseModel: config.baseModel, advisorModel: config.advisorModel }
|
|
84
|
+
: undefined
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// @[MODEL LAUNCH]: Add the new model if it supports the advisor tool.
|
|
88
|
+
// Checks whether the main loop model supports calling the advisor tool.
|
|
89
|
+
export function modelSupportsAdvisor(model: string): boolean {
|
|
90
|
+
const m = model.toLowerCase()
|
|
91
|
+
return (
|
|
92
|
+
m.includes('opus-4-6') ||
|
|
93
|
+
m.includes('sonnet-4-6') ||
|
|
94
|
+
process.env.USER_TYPE === 'ant'
|
|
95
|
+
)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// @[MODEL LAUNCH]: Add the new model if it can serve as an advisor model.
|
|
99
|
+
export function isValidAdvisorModel(model: string): boolean {
|
|
100
|
+
const m = model.toLowerCase()
|
|
101
|
+
return (
|
|
102
|
+
m.includes('opus-4-6') ||
|
|
103
|
+
m.includes('sonnet-4-6') ||
|
|
104
|
+
process.env.USER_TYPE === 'ant'
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function getInitialAdvisorSetting(): string | undefined {
|
|
109
|
+
if (!isAdvisorEnabled()) {
|
|
110
|
+
return undefined
|
|
111
|
+
}
|
|
112
|
+
return getInitialSettings().advisorModel
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function getAdvisorUsage(
|
|
116
|
+
usage: BetaUsage,
|
|
117
|
+
): Array<BetaUsage & { model: string }> {
|
|
118
|
+
const iterations = usage.iterations as
|
|
119
|
+
| Array<{ type: string }>
|
|
120
|
+
| null
|
|
121
|
+
| undefined
|
|
122
|
+
if (!iterations) {
|
|
123
|
+
return []
|
|
124
|
+
}
|
|
125
|
+
return iterations.filter(
|
|
126
|
+
it => it.type === 'advisor_message',
|
|
127
|
+
) as unknown as Array<BetaUsage & { model: string }>
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export const ADVISOR_TOOL_INSTRUCTIONS = `# Advisor Tool
|
|
131
|
+
|
|
132
|
+
You have access to an \`advisor\` tool backed by a stronger reviewer model. It takes NO parameters -- when you call it, your entire conversation history is automatically forwarded. The advisor sees the task, every tool call you've made, every result you've seen.
|
|
133
|
+
|
|
134
|
+
Call advisor BEFORE substantive work -- before writing code, before committing to an interpretation, before building on an assumption. If the task requires orientation first (finding files, reading code, seeing what's there), do that, then call advisor. Orientation is not substantive work. Writing, editing, and declaring an answer are.
|
|
135
|
+
|
|
136
|
+
Also call advisor:
|
|
137
|
+
- When you believe the task is complete. BEFORE this call, make your deliverable durable: write the file, stage the change, save the result. The advisor call takes time; if the session ends during it, a durable result persists and an unwritten one doesn't.
|
|
138
|
+
- When stuck -- errors recurring, approach not converging, results that don't fit.
|
|
139
|
+
- When considering a change of approach.
|
|
140
|
+
|
|
141
|
+
On tasks longer than a few steps, call advisor at least once before committing to an approach and once before declaring done. On short reactive tasks where the next action is dictated by tool output you just read, you don't need to keep calling -- the advisor adds most of its value on the first call, before the approach crystallizes.
|
|
142
|
+
|
|
143
|
+
Give the advice serious weight. If you follow a step and it fails empirically, or you have primary-source evidence that contradicts a specific claim (the file says X, the code does Y), adapt. A passing self-test is not evidence the advice is wrong -- it's evidence your test doesn't check what the advice is checking.
|
|
144
|
+
|
|
145
|
+
If you've already retrieved data pointing one way and the advisor points another: don't silently switch. Surface the conflict in one more advisor call -- "I found X, you suggest Y, which constraint breaks the tie?" The advisor saw your evidence but may have underweighted it; a reconcile call is cheaper than committing to the wrong branch.`
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent context for analytics attribution using AsyncLocalStorage.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a way to track agent identity across async operations
|
|
5
|
+
* without parameter drilling. Supports two agent types:
|
|
6
|
+
*
|
|
7
|
+
* 1. Subagents (Agent tool): Run in-process for quick, delegated tasks.
|
|
8
|
+
* Context: SubagentContext with agentType: 'subagent'
|
|
9
|
+
*
|
|
10
|
+
* 2. In-process teammates: Part of a swarm with team coordination.
|
|
11
|
+
* Context: TeammateAgentContext with agentType: 'teammate'
|
|
12
|
+
*
|
|
13
|
+
* For swarm teammates in separate processes (tmux/iTerm2), use environment
|
|
14
|
+
* variables instead: CLAUDE_CODE_AGENT_ID, CLAUDE_CODE_PARENT_SESSION_ID
|
|
15
|
+
*
|
|
16
|
+
* WHY AsyncLocalStorage (not AppState):
|
|
17
|
+
* When agents are backgrounded (ctrl+b), multiple agents can run concurrently
|
|
18
|
+
* in the same process. AppState is a single shared state that would be
|
|
19
|
+
* overwritten, causing Agent A's events to incorrectly use Agent B's context.
|
|
20
|
+
* AsyncLocalStorage isolates each async execution chain, so concurrent agents
|
|
21
|
+
* don't interfere with each other.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { AsyncLocalStorage } from 'async_hooks'
|
|
25
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../services/analytics/index.js'
|
|
26
|
+
import { isAgentSwarmsEnabled } from './agentSwarmsEnabled.js'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Context for subagents (Agent tool agents).
|
|
30
|
+
* Subagents run in-process for quick, delegated tasks.
|
|
31
|
+
*/
|
|
32
|
+
export type SubagentContext = {
|
|
33
|
+
/** The subagent's UUID (from createAgentId()) */
|
|
34
|
+
agentId: string
|
|
35
|
+
/** The team lead's session ID (from CLAUDE_CODE_PARENT_SESSION_ID env var), undefined for main REPL subagents */
|
|
36
|
+
parentSessionId?: string
|
|
37
|
+
/** Agent type - 'subagent' for Agent tool agents */
|
|
38
|
+
agentType: 'subagent'
|
|
39
|
+
/** The subagent's type name (e.g., "Explore", "Bash", "code-reviewer") */
|
|
40
|
+
subagentName?: string
|
|
41
|
+
/** Whether this is a built-in agent (vs user-defined custom agent) */
|
|
42
|
+
isBuiltIn?: boolean
|
|
43
|
+
/** The request_id in the invoking agent that spawned or resumed this agent.
|
|
44
|
+
* For nested subagents this is the immediate invoker, not the root —
|
|
45
|
+
* session_id already bundles the whole tree. Updated on each resume. */
|
|
46
|
+
invokingRequestId?: string
|
|
47
|
+
/** Whether this invocation is the initial spawn or a subsequent resume
|
|
48
|
+
* via SendMessage. Undefined when invokingRequestId is absent. */
|
|
49
|
+
invocationKind?: 'spawn' | 'resume'
|
|
50
|
+
/** Mutable flag: has this invocation's edge been emitted to telemetry yet?
|
|
51
|
+
* Reset to false on each spawn/resume; flipped true by
|
|
52
|
+
* consumeInvokingRequestId() on the first terminal API event. */
|
|
53
|
+
invocationEmitted?: boolean
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Context for in-process teammates.
|
|
58
|
+
* Teammates are part of a swarm and have team coordination.
|
|
59
|
+
*/
|
|
60
|
+
export type TeammateAgentContext = {
|
|
61
|
+
/** Full agent ID, e.g., "researcher@my-team" */
|
|
62
|
+
agentId: string
|
|
63
|
+
/** Display name, e.g., "researcher" */
|
|
64
|
+
agentName: string
|
|
65
|
+
/** Team name this teammate belongs to */
|
|
66
|
+
teamName: string
|
|
67
|
+
/** UI color assigned to this teammate */
|
|
68
|
+
agentColor?: string
|
|
69
|
+
/** Whether teammate must enter plan mode before implementing */
|
|
70
|
+
planModeRequired: boolean
|
|
71
|
+
/** The team lead's session ID for transcript correlation */
|
|
72
|
+
parentSessionId: string
|
|
73
|
+
/** Whether this agent is the team lead */
|
|
74
|
+
isTeamLead: boolean
|
|
75
|
+
/** Agent type - 'teammate' for swarm teammates */
|
|
76
|
+
agentType: 'teammate'
|
|
77
|
+
/** The request_id in the invoking agent that spawned or resumed this
|
|
78
|
+
* teammate. Undefined for teammates started outside a tool call
|
|
79
|
+
* (e.g. session start). Updated on each resume. */
|
|
80
|
+
invokingRequestId?: string
|
|
81
|
+
/** See SubagentContext.invocationKind. */
|
|
82
|
+
invocationKind?: 'spawn' | 'resume'
|
|
83
|
+
/** Mutable flag: see SubagentContext.invocationEmitted. */
|
|
84
|
+
invocationEmitted?: boolean
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Discriminated union for agent context.
|
|
89
|
+
* Use agentType to distinguish between subagent and teammate contexts.
|
|
90
|
+
*/
|
|
91
|
+
export type AgentContext = SubagentContext | TeammateAgentContext
|
|
92
|
+
|
|
93
|
+
const agentContextStorage = new AsyncLocalStorage<AgentContext>()
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Get the current agent context, if any.
|
|
97
|
+
* Returns undefined if not running within an agent context (subagent or teammate).
|
|
98
|
+
* Use type guards isSubagentContext() or isTeammateAgentContext() to narrow the type.
|
|
99
|
+
*/
|
|
100
|
+
export function getAgentContext(): AgentContext | undefined {
|
|
101
|
+
return agentContextStorage.getStore()
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Run an async function with the given agent context.
|
|
106
|
+
* All async operations within the function will have access to this context.
|
|
107
|
+
*/
|
|
108
|
+
export function runWithAgentContext<T>(context: AgentContext, fn: () => T): T {
|
|
109
|
+
return agentContextStorage.run(context, fn)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Type guard to check if context is a SubagentContext.
|
|
114
|
+
*/
|
|
115
|
+
export function isSubagentContext(
|
|
116
|
+
context: AgentContext | undefined,
|
|
117
|
+
): context is SubagentContext {
|
|
118
|
+
return context?.agentType === 'subagent'
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Type guard to check if context is a TeammateAgentContext.
|
|
123
|
+
*/
|
|
124
|
+
export function isTeammateAgentContext(
|
|
125
|
+
context: AgentContext | undefined,
|
|
126
|
+
): context is TeammateAgentContext {
|
|
127
|
+
if (isAgentSwarmsEnabled()) {
|
|
128
|
+
return context?.agentType === 'teammate'
|
|
129
|
+
}
|
|
130
|
+
return false
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Get the subagent name suitable for analytics logging.
|
|
135
|
+
* Returns the agent type name for built-in agents, "user-defined" for custom agents,
|
|
136
|
+
* or undefined if not running within a subagent context.
|
|
137
|
+
*
|
|
138
|
+
* Safe for analytics metadata: built-in agent names are code constants,
|
|
139
|
+
* and custom agents are always mapped to the literal "user-defined".
|
|
140
|
+
*/
|
|
141
|
+
export function getSubagentLogName():
|
|
142
|
+
| AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
143
|
+
| undefined {
|
|
144
|
+
const context = getAgentContext()
|
|
145
|
+
if (!isSubagentContext(context) || !context.subagentName) {
|
|
146
|
+
return undefined
|
|
147
|
+
}
|
|
148
|
+
return (
|
|
149
|
+
context.isBuiltIn ? context.subagentName : 'user-defined'
|
|
150
|
+
) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get the invoking request_id for the current agent context — once per
|
|
155
|
+
* invocation. Returns the id on the first call after a spawn/resume, then
|
|
156
|
+
* undefined until the next boundary. Also undefined on the main thread or
|
|
157
|
+
* when the spawn path had no request_id.
|
|
158
|
+
*
|
|
159
|
+
* Sparse edge semantics: invokingRequestId appears on exactly one
|
|
160
|
+
* tengu_api_success/error per invocation, so a non-NULL value downstream
|
|
161
|
+
* marks a spawn/resume boundary.
|
|
162
|
+
*/
|
|
163
|
+
export function consumeInvokingRequestId():
|
|
164
|
+
| {
|
|
165
|
+
invokingRequestId: string
|
|
166
|
+
invocationKind: 'spawn' | 'resume' | undefined
|
|
167
|
+
}
|
|
168
|
+
| undefined {
|
|
169
|
+
const context = getAgentContext()
|
|
170
|
+
if (!context?.invokingRequestId || context.invocationEmitted) {
|
|
171
|
+
return undefined
|
|
172
|
+
}
|
|
173
|
+
context.invocationEmitted = true
|
|
174
|
+
return {
|
|
175
|
+
invokingRequestId: context.invokingRequestId,
|
|
176
|
+
invocationKind: context.invocationKind,
|
|
177
|
+
}
|
|
178
|
+
}
|
package/utils/agentId.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic Agent ID System
|
|
3
|
+
*
|
|
4
|
+
* This module provides helper functions for formatting and parsing deterministic
|
|
5
|
+
* agent IDs used in the swarm/teammate system.
|
|
6
|
+
*
|
|
7
|
+
* ## ID Formats
|
|
8
|
+
*
|
|
9
|
+
* **Agent IDs**: `agentName@teamName`
|
|
10
|
+
* - Example: `team-lead@my-project`, `researcher@my-project`
|
|
11
|
+
* - The @ symbol acts as a separator between agent name and team name
|
|
12
|
+
*
|
|
13
|
+
* **Request IDs**: `{requestType}-{timestamp}@{agentId}`
|
|
14
|
+
* - Example: `shutdown-1702500000000@researcher@my-project`
|
|
15
|
+
* - Used for shutdown requests, plan approvals, etc.
|
|
16
|
+
*
|
|
17
|
+
* ## Why Deterministic IDs?
|
|
18
|
+
*
|
|
19
|
+
* Deterministic IDs provide several benefits:
|
|
20
|
+
*
|
|
21
|
+
* 1. **Reproducibility**: The same agent spawned with the same name in the same team
|
|
22
|
+
* always gets the same ID, enabling reconnection after crashes/restarts.
|
|
23
|
+
*
|
|
24
|
+
* 2. **Human-readable**: IDs are meaningful and debuggable (e.g., `tester@my-project`).
|
|
25
|
+
*
|
|
26
|
+
* 3. **Predictable**: Team leads can compute a teammate's ID without looking it up,
|
|
27
|
+
* simplifying message routing and task assignment.
|
|
28
|
+
*
|
|
29
|
+
* ## Constraints
|
|
30
|
+
*
|
|
31
|
+
* - Agent names must NOT contain `@` (it's used as the separator)
|
|
32
|
+
* - Use `sanitizeAgentName()` from TeammateTool.ts to strip @ from names
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Formats an agent ID in the format `agentName@teamName`.
|
|
37
|
+
*/
|
|
38
|
+
export function formatAgentId(agentName: string, teamName: string): string {
|
|
39
|
+
return `${agentName}@${teamName}`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Parses an agent ID into its components.
|
|
44
|
+
* Returns null if the ID doesn't contain the @ separator.
|
|
45
|
+
*/
|
|
46
|
+
export function parseAgentId(
|
|
47
|
+
agentId: string,
|
|
48
|
+
): { agentName: string; teamName: string } | null {
|
|
49
|
+
const atIndex = agentId.indexOf('@')
|
|
50
|
+
if (atIndex === -1) {
|
|
51
|
+
return null
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
agentName: agentId.slice(0, atIndex),
|
|
55
|
+
teamName: agentId.slice(atIndex + 1),
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Formats a request ID in the format `{requestType}-{timestamp}@{agentId}`.
|
|
61
|
+
*/
|
|
62
|
+
export function generateRequestId(
|
|
63
|
+
requestType: string,
|
|
64
|
+
agentId: string,
|
|
65
|
+
): string {
|
|
66
|
+
const timestamp = Date.now()
|
|
67
|
+
return `${requestType}-${timestamp}@${agentId}`
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Parses a request ID into its components.
|
|
72
|
+
* Returns null if the request ID doesn't match the expected format.
|
|
73
|
+
*/
|
|
74
|
+
export function parseRequestId(
|
|
75
|
+
requestId: string,
|
|
76
|
+
): { requestType: string; timestamp: number; agentId: string } | null {
|
|
77
|
+
const atIndex = requestId.indexOf('@')
|
|
78
|
+
if (atIndex === -1) {
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const prefix = requestId.slice(0, atIndex)
|
|
83
|
+
const agentId = requestId.slice(atIndex + 1)
|
|
84
|
+
|
|
85
|
+
const lastDashIndex = prefix.lastIndexOf('-')
|
|
86
|
+
if (lastDashIndex === -1) {
|
|
87
|
+
return null
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const requestType = prefix.slice(0, lastDashIndex)
|
|
91
|
+
const timestampStr = prefix.slice(lastDashIndex + 1)
|
|
92
|
+
const timestamp = parseInt(timestampStr, 10)
|
|
93
|
+
|
|
94
|
+
if (isNaN(timestamp)) {
|
|
95
|
+
return null
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return { requestType, timestamp, agentId }
|
|
99
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
|
|
2
|
+
import { isEnvTruthy } from './envUtils.js'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Check if --agent-teams flag is provided via CLI.
|
|
6
|
+
* Checks process.argv directly to avoid import cycles with bootstrap/state.
|
|
7
|
+
* Note: The flag is only shown in help for ant users, but if external users
|
|
8
|
+
* pass it anyway, it will work (subject to the killswitch).
|
|
9
|
+
*/
|
|
10
|
+
function isAgentTeamsFlagSet(): boolean {
|
|
11
|
+
return process.argv.includes('--agent-teams')
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Centralized runtime check for agent teams/teammate features.
|
|
16
|
+
* This is the single gate that should be checked everywhere teammates
|
|
17
|
+
* are referenced (prompts, code, tools isEnabled, UI, etc.).
|
|
18
|
+
*
|
|
19
|
+
* Ant builds: always enabled.
|
|
20
|
+
* External builds require both:
|
|
21
|
+
* 1. Opt-in via CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS env var OR --agent-teams flag
|
|
22
|
+
* 2. GrowthBook gate 'tengu_amber_flint' enabled (killswitch)
|
|
23
|
+
*/
|
|
24
|
+
export function isAgentSwarmsEnabled(): boolean {
|
|
25
|
+
// Ant: always on
|
|
26
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
27
|
+
return true
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// External: require opt-in via env var or --agent-teams flag
|
|
31
|
+
if (
|
|
32
|
+
!isEnvTruthy(process.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS) &&
|
|
33
|
+
!isAgentTeamsFlagSet()
|
|
34
|
+
) {
|
|
35
|
+
return false
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Killswitch — always respected for external users
|
|
39
|
+
if (!getFeatureValue_CACHED_MAY_BE_STALE('tengu_amber_flint', true)) {
|
|
40
|
+
return false
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return true
|
|
44
|
+
}
|