@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,240 @@
|
|
|
1
|
+
import { z } from 'zod/v4'
|
|
2
|
+
import { getSessionId } from '../../bootstrap/state.js'
|
|
3
|
+
import { logEvent } from '../../services/analytics/index.js'
|
|
4
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/metadata.js'
|
|
5
|
+
import type { Tool } from '../../Tool.js'
|
|
6
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
7
|
+
import { formatAgentId } from '../../utils/agentId.js'
|
|
8
|
+
import { isAgentSwarmsEnabled } from '../../utils/agentSwarmsEnabled.js'
|
|
9
|
+
import { getCwd } from '../../utils/cwd.js'
|
|
10
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
11
|
+
import {
|
|
12
|
+
getDefaultMainLoopModel,
|
|
13
|
+
parseUserSpecifiedModel,
|
|
14
|
+
} from '../../utils/model/model.js'
|
|
15
|
+
import { jsonStringify } from '../../utils/slowOperations.js'
|
|
16
|
+
import { getResolvedTeammateMode } from '../../utils/swarm/backends/registry.js'
|
|
17
|
+
import { TEAM_LEAD_NAME } from '../../utils/swarm/constants.js'
|
|
18
|
+
import type { TeamFile } from '../../utils/swarm/teamHelpers.js'
|
|
19
|
+
import {
|
|
20
|
+
getTeamFilePath,
|
|
21
|
+
readTeamFile,
|
|
22
|
+
registerTeamForSessionCleanup,
|
|
23
|
+
sanitizeName,
|
|
24
|
+
writeTeamFileAsync,
|
|
25
|
+
} from '../../utils/swarm/teamHelpers.js'
|
|
26
|
+
import { assignTeammateColor } from '../../utils/swarm/teammateLayoutManager.js'
|
|
27
|
+
import {
|
|
28
|
+
ensureTasksDir,
|
|
29
|
+
resetTaskList,
|
|
30
|
+
setLeaderTeamName,
|
|
31
|
+
} from '../../utils/tasks.js'
|
|
32
|
+
import { generateWordSlug } from '../../utils/words.js'
|
|
33
|
+
import { TEAM_CREATE_TOOL_NAME } from './constants.js'
|
|
34
|
+
import { getPrompt } from './prompt.js'
|
|
35
|
+
import { renderToolUseMessage } from './UI.js'
|
|
36
|
+
|
|
37
|
+
const inputSchema = lazySchema(() =>
|
|
38
|
+
z.strictObject({
|
|
39
|
+
team_name: z.string().describe('Name for the new team to create.'),
|
|
40
|
+
description: z.string().optional().describe('Team description/purpose.'),
|
|
41
|
+
agent_type: z
|
|
42
|
+
.string()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe(
|
|
45
|
+
'Type/role of the team lead (e.g., "researcher", "test-runner"). ' +
|
|
46
|
+
'Used for team file and inter-agent coordination.',
|
|
47
|
+
),
|
|
48
|
+
}),
|
|
49
|
+
)
|
|
50
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
51
|
+
|
|
52
|
+
export type Output = {
|
|
53
|
+
team_name: string
|
|
54
|
+
team_file_path: string
|
|
55
|
+
lead_agent_id: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export type Input = z.infer<InputSchema>
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Generates a unique team name by checking if the provided name already exists.
|
|
62
|
+
* If the name already exists, generates a new word slug.
|
|
63
|
+
*/
|
|
64
|
+
function generateUniqueTeamName(providedName: string): string {
|
|
65
|
+
// If the team doesn't exist, use the provided name
|
|
66
|
+
if (!readTeamFile(providedName)) {
|
|
67
|
+
return providedName
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Team exists, generate a new unique name
|
|
71
|
+
return generateWordSlug()
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export const TeamCreateTool: Tool<InputSchema, Output> = buildTool({
|
|
75
|
+
name: TEAM_CREATE_TOOL_NAME,
|
|
76
|
+
searchHint: 'create a multi-agent swarm team',
|
|
77
|
+
maxResultSizeChars: 100_000,
|
|
78
|
+
shouldDefer: true,
|
|
79
|
+
|
|
80
|
+
userFacingName() {
|
|
81
|
+
return ''
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
get inputSchema(): InputSchema {
|
|
85
|
+
return inputSchema()
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
isEnabled() {
|
|
89
|
+
return isAgentSwarmsEnabled()
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
toAutoClassifierInput(input) {
|
|
93
|
+
return input.team_name
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
async validateInput(input, _context) {
|
|
97
|
+
if (!input.team_name || input.team_name.trim().length === 0) {
|
|
98
|
+
return {
|
|
99
|
+
result: false,
|
|
100
|
+
message: 'team_name is required for TeamCreate',
|
|
101
|
+
errorCode: 9,
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return { result: true }
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
async description() {
|
|
108
|
+
return 'Create a new team for coordinating multiple agents'
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
async prompt() {
|
|
112
|
+
return getPrompt()
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
mapToolResultToToolResultBlockParam(data, toolUseID) {
|
|
116
|
+
return {
|
|
117
|
+
tool_use_id: toolUseID,
|
|
118
|
+
type: 'tool_result' as const,
|
|
119
|
+
content: [
|
|
120
|
+
{
|
|
121
|
+
type: 'text' as const,
|
|
122
|
+
text: jsonStringify(data),
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
async call(input, context) {
|
|
129
|
+
const { setAppState, getAppState } = context
|
|
130
|
+
const { team_name, description: _description, agent_type } = input
|
|
131
|
+
|
|
132
|
+
// Check if already in a team - restrict to one team per leader
|
|
133
|
+
const appState = getAppState()
|
|
134
|
+
const existingTeam = appState.teamContext?.teamName
|
|
135
|
+
|
|
136
|
+
if (existingTeam) {
|
|
137
|
+
throw new Error(
|
|
138
|
+
`Already leading team "${existingTeam}". A leader can only manage one team at a time. Use TeamDelete to end the current team before creating a new one.`,
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// If team already exists, generate a unique name instead of failing
|
|
143
|
+
const finalTeamName = generateUniqueTeamName(team_name)
|
|
144
|
+
|
|
145
|
+
// Generate a deterministic agent ID for the team lead
|
|
146
|
+
const leadAgentId = formatAgentId(TEAM_LEAD_NAME, finalTeamName)
|
|
147
|
+
const leadAgentType = agent_type || TEAM_LEAD_NAME
|
|
148
|
+
// Get the team lead's current model from AppState (handles session model, settings, CLI override)
|
|
149
|
+
const leadModel = parseUserSpecifiedModel(
|
|
150
|
+
appState.mainLoopModelForSession ??
|
|
151
|
+
appState.mainLoopModel ??
|
|
152
|
+
getDefaultMainLoopModel(),
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
const teamFilePath = getTeamFilePath(finalTeamName)
|
|
156
|
+
|
|
157
|
+
const teamFile: TeamFile = {
|
|
158
|
+
name: finalTeamName,
|
|
159
|
+
description: _description,
|
|
160
|
+
createdAt: Date.now(),
|
|
161
|
+
leadAgentId,
|
|
162
|
+
leadSessionId: getSessionId(), // Store actual session ID for team discovery
|
|
163
|
+
members: [
|
|
164
|
+
{
|
|
165
|
+
agentId: leadAgentId,
|
|
166
|
+
name: TEAM_LEAD_NAME,
|
|
167
|
+
agentType: leadAgentType,
|
|
168
|
+
model: leadModel,
|
|
169
|
+
joinedAt: Date.now(),
|
|
170
|
+
tmuxPaneId: '',
|
|
171
|
+
cwd: getCwd(),
|
|
172
|
+
subscriptions: [],
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
await writeTeamFileAsync(finalTeamName, teamFile)
|
|
178
|
+
// Track for session-end cleanup — teams were left on disk forever
|
|
179
|
+
// unless explicitly TeamDelete'd (gh-32730).
|
|
180
|
+
registerTeamForSessionCleanup(finalTeamName)
|
|
181
|
+
|
|
182
|
+
// Reset and create the corresponding task list directory (Team = Project = TaskList)
|
|
183
|
+
// This ensures task numbering starts fresh at 1 for each new swarm
|
|
184
|
+
const taskListId = sanitizeName(finalTeamName)
|
|
185
|
+
await resetTaskList(taskListId)
|
|
186
|
+
await ensureTasksDir(taskListId)
|
|
187
|
+
|
|
188
|
+
// Register the team name so getTaskListId() returns it for the leader.
|
|
189
|
+
// Without this, the leader falls through to getSessionId() and writes tasks
|
|
190
|
+
// to a different directory than tmux/iTerm2 teammates expect.
|
|
191
|
+
setLeaderTeamName(sanitizeName(finalTeamName))
|
|
192
|
+
|
|
193
|
+
// Update AppState with team context
|
|
194
|
+
setAppState(prev => ({
|
|
195
|
+
...prev,
|
|
196
|
+
teamContext: {
|
|
197
|
+
teamName: finalTeamName,
|
|
198
|
+
teamFilePath,
|
|
199
|
+
leadAgentId,
|
|
200
|
+
teammates: {
|
|
201
|
+
[leadAgentId]: {
|
|
202
|
+
name: TEAM_LEAD_NAME,
|
|
203
|
+
agentType: leadAgentType,
|
|
204
|
+
color: assignTeammateColor(leadAgentId),
|
|
205
|
+
tmuxSessionName: '',
|
|
206
|
+
tmuxPaneId: '',
|
|
207
|
+
cwd: getCwd(),
|
|
208
|
+
spawnedAt: Date.now(),
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
}))
|
|
213
|
+
|
|
214
|
+
logEvent('tengu_team_created', {
|
|
215
|
+
team_name:
|
|
216
|
+
finalTeamName as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
217
|
+
teammate_count: 1,
|
|
218
|
+
lead_agent_type:
|
|
219
|
+
leadAgentType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
220
|
+
teammate_mode:
|
|
221
|
+
getResolvedTeammateMode() as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
// Note: We intentionally don't set CLAUDE_CODE_AGENT_ID for the team lead because:
|
|
225
|
+
// 1. The lead is not a "teammate" - isTeammate() should return false for them
|
|
226
|
+
// 2. Their ID is deterministic (team-lead@teamName) and can be derived when needed
|
|
227
|
+
// 3. Setting it would cause isTeammate() to return true, breaking inbox polling
|
|
228
|
+
// Team name is stored in AppState.teamContext, not process.env
|
|
229
|
+
|
|
230
|
+
return {
|
|
231
|
+
data: {
|
|
232
|
+
team_name: finalTeamName,
|
|
233
|
+
team_file_path: teamFilePath,
|
|
234
|
+
lead_agent_id: leadAgentId,
|
|
235
|
+
},
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
|
|
239
|
+
renderToolUseMessage,
|
|
240
|
+
} satisfies ToolDef<InputSchema, Output>)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Input } from './TeamCreateTool.js';
|
|
3
|
+
export function renderToolUseMessage(input: Partial<Input>): React.ReactNode {
|
|
4
|
+
return `create team: ${input.team_name}`;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIklucHV0IiwicmVuZGVyVG9vbFVzZU1lc3NhZ2UiLCJpbnB1dCIsIlBhcnRpYWwiLCJSZWFjdE5vZGUiLCJ0ZWFtX25hbWUiXSwic291cmNlcyI6WyJVSS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBJbnB1dCB9IGZyb20gJy4vVGVhbUNyZWF0ZVRvb2wuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlTWVzc2FnZShpbnB1dDogUGFydGlhbDxJbnB1dD4pOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gYGNyZWF0ZSB0ZWFtOiAke2lucHV0LnRlYW1fbmFtZX1gXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEtBQUssTUFBTSxPQUFPO0FBQ3pCLGNBQWNDLEtBQUssUUFBUSxxQkFBcUI7QUFFaEQsT0FBTyxTQUFTQyxvQkFBb0JBLENBQUNDLEtBQUssRUFBRUMsT0FBTyxDQUFDSCxLQUFLLENBQUMsQ0FBQyxFQUFFRCxLQUFLLENBQUNLLFNBQVMsQ0FBQztFQUMzRSxPQUFPLGdCQUFnQkYsS0FBSyxDQUFDRyxTQUFTLEVBQUU7QUFDMUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const TEAM_CREATE_TOOL_NAME = 'TeamCreate'
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
export function getPrompt(): string {
|
|
2
|
+
return `
|
|
3
|
+
# TeamCreate
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Use this tool proactively whenever:
|
|
8
|
+
- The user explicitly asks to use a team, swarm, or group of agents
|
|
9
|
+
- The user mentions wanting agents to work together, coordinate, or collaborate
|
|
10
|
+
- A task is complex enough that it would benefit from parallel work by multiple agents (e.g., building a full-stack feature with frontend and backend work, refactoring a codebase while keeping tests passing, implementing a multi-step project with research, planning, and coding phases)
|
|
11
|
+
|
|
12
|
+
When in doubt about whether a task warrants a team, prefer spawning a team.
|
|
13
|
+
|
|
14
|
+
## Choosing Agent Types for Teammates
|
|
15
|
+
|
|
16
|
+
When spawning teammates via the Agent tool, choose the \`subagent_type\` based on what tools the agent needs for its task. Each agent type has a different set of available tools — match the agent to the work:
|
|
17
|
+
|
|
18
|
+
- **Read-only agents** (e.g., Explore, Plan) cannot edit or write files. Only assign them research, search, or planning tasks. Never assign them implementation work.
|
|
19
|
+
- **Full-capability agents** (e.g., general-purpose) have access to all tools including file editing, writing, and bash. Use these for tasks that require making changes.
|
|
20
|
+
- **Custom agents** defined in \`.claude/agents/\` may have their own tool restrictions. Check their descriptions to understand what they can and cannot do.
|
|
21
|
+
|
|
22
|
+
Always review the agent type descriptions and their available tools listed in the Agent tool prompt before selecting a \`subagent_type\` for a teammate.
|
|
23
|
+
|
|
24
|
+
Create a new team to coordinate multiple agents working on a project. Teams have a 1:1 correspondence with task lists (Team = TaskList).
|
|
25
|
+
|
|
26
|
+
\`\`\`
|
|
27
|
+
{
|
|
28
|
+
"team_name": "my-project",
|
|
29
|
+
"description": "Working on feature X"
|
|
30
|
+
}
|
|
31
|
+
\`\`\`
|
|
32
|
+
|
|
33
|
+
This creates:
|
|
34
|
+
- A team file at \`~/.claude/teams/{team-name}/config.json\`
|
|
35
|
+
- A corresponding task list directory at \`~/.claude/tasks/{team-name}/\`
|
|
36
|
+
|
|
37
|
+
## Team Workflow
|
|
38
|
+
|
|
39
|
+
1. **Create a team** with TeamCreate - this creates both the team and its task list
|
|
40
|
+
2. **Create tasks** using the Task tools (TaskCreate, TaskList, etc.) - they automatically use the team's task list
|
|
41
|
+
3. **Spawn teammates** using the Agent tool with \`team_name\` and \`name\` parameters to create teammates that join the team
|
|
42
|
+
4. **Assign tasks** using TaskUpdate with \`owner\` to give tasks to idle teammates
|
|
43
|
+
5. **Teammates work on assigned tasks** and mark them completed via TaskUpdate
|
|
44
|
+
6. **Teammates go idle between turns** - after each turn, teammates automatically go idle and send a notification. IMPORTANT: Be patient with idle teammates! Don't comment on their idleness until it actually impacts your work.
|
|
45
|
+
7. **Shutdown your team** - when the task is completed, gracefully shut down your teammates via SendMessage with \`message: {type: "shutdown_request"}\`.
|
|
46
|
+
|
|
47
|
+
## Task Ownership
|
|
48
|
+
|
|
49
|
+
Tasks are assigned using TaskUpdate with the \`owner\` parameter. Any agent can set or change task ownership via TaskUpdate.
|
|
50
|
+
|
|
51
|
+
## Automatic Message Delivery
|
|
52
|
+
|
|
53
|
+
**IMPORTANT**: Messages from teammates are automatically delivered to you. You do NOT need to manually check your inbox.
|
|
54
|
+
|
|
55
|
+
When you spawn teammates:
|
|
56
|
+
- They will send you messages when they complete tasks or need help
|
|
57
|
+
- These messages appear automatically as new conversation turns (like user messages)
|
|
58
|
+
- If you're busy (mid-turn), messages are queued and delivered when your turn ends
|
|
59
|
+
- The UI shows a brief notification with the sender's name when messages are waiting
|
|
60
|
+
|
|
61
|
+
Messages will be delivered automatically.
|
|
62
|
+
|
|
63
|
+
When reporting on teammate messages, you do NOT need to quote the original message—it's already rendered to the user.
|
|
64
|
+
|
|
65
|
+
## Teammate Idle State
|
|
66
|
+
|
|
67
|
+
Teammates go idle after every turn—this is completely normal and expected. A teammate going idle immediately after sending you a message does NOT mean they are done or unavailable. Idle simply means they are waiting for input.
|
|
68
|
+
|
|
69
|
+
- **Idle teammates can receive messages.** Sending a message to an idle teammate wakes them up and they will process it normally.
|
|
70
|
+
- **Idle notifications are automatic.** The system sends an idle notification whenever a teammate's turn ends. You do not need to react to idle notifications unless you want to assign new work or send a follow-up message.
|
|
71
|
+
- **Do not treat idle as an error.** A teammate sending a message and then going idle is the normal flow—they sent their message and are now waiting for a response.
|
|
72
|
+
- **Peer DM visibility.** When a teammate sends a DM to another teammate, a brief summary is included in their idle notification. This gives you visibility into peer collaboration without the full message content. You do not need to respond to these summaries — they are informational.
|
|
73
|
+
|
|
74
|
+
## Discovering Team Members
|
|
75
|
+
|
|
76
|
+
Teammates can read the team config file to discover other team members:
|
|
77
|
+
- **Team config location**: \`~/.claude/teams/{team-name}/config.json\`
|
|
78
|
+
|
|
79
|
+
The config file contains a \`members\` array with each teammate's:
|
|
80
|
+
- \`name\`: Human-readable name (**always use this** for messaging and task assignment)
|
|
81
|
+
- \`agentId\`: Unique identifier (for reference only - do not use for communication)
|
|
82
|
+
- \`agentType\`: Role/type of the agent
|
|
83
|
+
|
|
84
|
+
**IMPORTANT**: Always refer to teammates by their NAME (e.g., "team-lead", "researcher", "tester"). Names are used for:
|
|
85
|
+
- \`to\` when sending messages
|
|
86
|
+
- Identifying task owners
|
|
87
|
+
|
|
88
|
+
Example of reading team config:
|
|
89
|
+
\`\`\`
|
|
90
|
+
Use the Read tool to read ~/.claude/teams/{team-name}/config.json
|
|
91
|
+
\`\`\`
|
|
92
|
+
|
|
93
|
+
## Task List Coordination
|
|
94
|
+
|
|
95
|
+
Teams share a task list that all teammates can access at \`~/.claude/tasks/{team-name}/\`.
|
|
96
|
+
|
|
97
|
+
Teammates should:
|
|
98
|
+
1. Check TaskList periodically, **especially after completing each task**, to find available work or see newly unblocked tasks
|
|
99
|
+
2. Claim unassigned, unblocked tasks with TaskUpdate (set \`owner\` to your name). **Prefer tasks in ID order** (lowest ID first) when multiple tasks are available, as earlier tasks often set up context for later ones
|
|
100
|
+
3. Create new tasks with \`TaskCreate\` when identifying additional work
|
|
101
|
+
4. Mark tasks as completed with \`TaskUpdate\` when done, then check TaskList for next work
|
|
102
|
+
5. Coordinate with other teammates by reading the task list status
|
|
103
|
+
6. If all available tasks are blocked, notify the team lead or help resolve blocking tasks
|
|
104
|
+
|
|
105
|
+
**IMPORTANT notes for communication with your team**:
|
|
106
|
+
- Do not use terminal tools to view your team's activity; always send a message to your teammates (and remember, refer to them by name).
|
|
107
|
+
- Your team cannot hear you if you do not use the SendMessage tool. Always send a message to your teammates if you are responding to them.
|
|
108
|
+
- Do NOT send structured JSON status messages like \`{"type":"idle",...}\` or \`{"type":"task_completed",...}\`. Just communicate in plain text when you need to message teammates.
|
|
109
|
+
- Use TaskUpdate to mark tasks completed.
|
|
110
|
+
- If you are an agent in the team, the system will automatically send idle notifications to the team lead when you stop.
|
|
111
|
+
|
|
112
|
+
`.trim()
|
|
113
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { z } from 'zod/v4'
|
|
2
|
+
import { logEvent } from '../../services/analytics/index.js'
|
|
3
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/metadata.js'
|
|
4
|
+
import type { Tool } from '../../Tool.js'
|
|
5
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
6
|
+
import { isAgentSwarmsEnabled } from '../../utils/agentSwarmsEnabled.js'
|
|
7
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
8
|
+
import { jsonStringify } from '../../utils/slowOperations.js'
|
|
9
|
+
import { TEAM_LEAD_NAME } from '../../utils/swarm/constants.js'
|
|
10
|
+
import {
|
|
11
|
+
cleanupTeamDirectories,
|
|
12
|
+
readTeamFile,
|
|
13
|
+
unregisterTeamForSessionCleanup,
|
|
14
|
+
} from '../../utils/swarm/teamHelpers.js'
|
|
15
|
+
import { clearTeammateColors } from '../../utils/swarm/teammateLayoutManager.js'
|
|
16
|
+
import { clearLeaderTeamName } from '../../utils/tasks.js'
|
|
17
|
+
import { TEAM_DELETE_TOOL_NAME } from './constants.js'
|
|
18
|
+
import { getPrompt } from './prompt.js'
|
|
19
|
+
import { renderToolResultMessage, renderToolUseMessage } from './UI.js'
|
|
20
|
+
|
|
21
|
+
const inputSchema = lazySchema(() => z.strictObject({}))
|
|
22
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
23
|
+
|
|
24
|
+
export type Output = {
|
|
25
|
+
success: boolean
|
|
26
|
+
message: string
|
|
27
|
+
team_name?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type Input = z.infer<InputSchema>
|
|
31
|
+
|
|
32
|
+
export const TeamDeleteTool: Tool<InputSchema, Output> = buildTool({
|
|
33
|
+
name: TEAM_DELETE_TOOL_NAME,
|
|
34
|
+
searchHint: 'disband a swarm team and clean up',
|
|
35
|
+
maxResultSizeChars: 100_000,
|
|
36
|
+
shouldDefer: true,
|
|
37
|
+
|
|
38
|
+
userFacingName() {
|
|
39
|
+
return ''
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
get inputSchema(): InputSchema {
|
|
43
|
+
return inputSchema()
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
isEnabled() {
|
|
47
|
+
return isAgentSwarmsEnabled()
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
async description() {
|
|
51
|
+
return 'Clean up team and task directories when the swarm is complete'
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
async prompt() {
|
|
55
|
+
return getPrompt()
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
mapToolResultToToolResultBlockParam(data, toolUseID) {
|
|
59
|
+
return {
|
|
60
|
+
tool_use_id: toolUseID,
|
|
61
|
+
type: 'tool_result' as const,
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: 'text' as const,
|
|
65
|
+
text: jsonStringify(data),
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
async call(_input, context) {
|
|
72
|
+
const { setAppState, getAppState } = context
|
|
73
|
+
const appState = getAppState()
|
|
74
|
+
const teamName = appState.teamContext?.teamName
|
|
75
|
+
|
|
76
|
+
if (teamName) {
|
|
77
|
+
// Read team config to check for active members
|
|
78
|
+
const teamFile = readTeamFile(teamName)
|
|
79
|
+
if (teamFile) {
|
|
80
|
+
// Filter out the team lead - only count non-lead members
|
|
81
|
+
const nonLeadMembers = teamFile.members.filter(
|
|
82
|
+
m => m.name !== TEAM_LEAD_NAME,
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
// Separate truly active members from idle/dead ones
|
|
86
|
+
// Members with isActive === false are idle (finished their turn or crashed)
|
|
87
|
+
const activeMembers = nonLeadMembers.filter(m => m.isActive !== false)
|
|
88
|
+
|
|
89
|
+
if (activeMembers.length > 0) {
|
|
90
|
+
const memberNames = activeMembers.map(m => m.name).join(', ')
|
|
91
|
+
return {
|
|
92
|
+
data: {
|
|
93
|
+
success: false,
|
|
94
|
+
message: `Cannot cleanup team with ${activeMembers.length} active member(s): ${memberNames}. Use requestShutdown to gracefully terminate teammates first.`,
|
|
95
|
+
team_name: teamName,
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
await cleanupTeamDirectories(teamName)
|
|
102
|
+
// Already cleaned — don't try again on gracefulShutdown.
|
|
103
|
+
unregisterTeamForSessionCleanup(teamName)
|
|
104
|
+
|
|
105
|
+
// Clear color assignments so new teams start fresh
|
|
106
|
+
clearTeammateColors()
|
|
107
|
+
|
|
108
|
+
// Clear leader team name so getTaskListId() falls back to session ID
|
|
109
|
+
clearLeaderTeamName()
|
|
110
|
+
|
|
111
|
+
logEvent('tengu_team_deleted', {
|
|
112
|
+
team_name:
|
|
113
|
+
teamName as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
114
|
+
})
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Clear team context and inbox from app state
|
|
118
|
+
setAppState(prev => ({
|
|
119
|
+
...prev,
|
|
120
|
+
teamContext: undefined,
|
|
121
|
+
inbox: {
|
|
122
|
+
messages: [], // Clear any queued messages
|
|
123
|
+
},
|
|
124
|
+
}))
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
data: {
|
|
128
|
+
success: true,
|
|
129
|
+
message: teamName
|
|
130
|
+
? `Cleaned up directories and worktrees for team "${teamName}"`
|
|
131
|
+
: 'No team name found, nothing to clean up',
|
|
132
|
+
team_name: teamName,
|
|
133
|
+
},
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
|
|
137
|
+
renderToolUseMessage,
|
|
138
|
+
renderToolResultMessage,
|
|
139
|
+
} satisfies ToolDef<InputSchema, Output>)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { jsonParse } from '../../utils/slowOperations.js';
|
|
3
|
+
import type { Output } from './TeamDeleteTool.js';
|
|
4
|
+
export function renderToolUseMessage(_input: Record<string, unknown>): React.ReactNode {
|
|
5
|
+
return 'cleanup team: current';
|
|
6
|
+
}
|
|
7
|
+
export function renderToolResultMessage(content: Output | string, _progressMessages: unknown, {
|
|
8
|
+
verbose: _verbose
|
|
9
|
+
}: {
|
|
10
|
+
verbose: boolean;
|
|
11
|
+
}): React.ReactNode {
|
|
12
|
+
const result: Output = typeof content === 'string' ? jsonParse(content) : content;
|
|
13
|
+
|
|
14
|
+
// Suppress cleanup result - the batched shutdown message covers this
|
|
15
|
+
if ('success' in result && 'team_name' in result && 'message' in result) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImpzb25QYXJzZSIsIk91dHB1dCIsInJlbmRlclRvb2xVc2VNZXNzYWdlIiwiX2lucHV0IiwiUmVjb3JkIiwiUmVhY3ROb2RlIiwicmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2UiLCJjb250ZW50IiwiX3Byb2dyZXNzTWVzc2FnZXMiLCJ2ZXJib3NlIiwiX3ZlcmJvc2UiLCJyZXN1bHQiXSwic291cmNlcyI6WyJVSS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsganNvblBhcnNlIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2xvd09wZXJhdGlvbnMuanMnXG5pbXBvcnQgdHlwZSB7IE91dHB1dCB9IGZyb20gJy4vVGVhbURlbGV0ZVRvb2wuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlTWVzc2FnZShcbiAgX2lucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIHJldHVybiAnY2xlYW51cCB0ZWFtOiBjdXJyZW50J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVG9vbFJlc3VsdE1lc3NhZ2UoXG4gIGNvbnRlbnQ6IE91dHB1dCB8IHN0cmluZyxcbiAgX3Byb2dyZXNzTWVzc2FnZXM6IHVua25vd24sXG4gIHsgdmVyYm9zZTogX3ZlcmJvc2UgfTogeyB2ZXJib3NlOiBib29sZWFuIH0sXG4pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCByZXN1bHQ6IE91dHB1dCA9XG4gICAgdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnID8ganNvblBhcnNlKGNvbnRlbnQpIDogY29udGVudFxuXG4gIC8vIFN1cHByZXNzIGNsZWFudXAgcmVzdWx0IC0gdGhlIGJhdGNoZWQgc2h1dGRvd24gbWVzc2FnZSBjb3ZlcnMgdGhpc1xuICBpZiAoJ3N1Y2Nlc3MnIGluIHJlc3VsdCAmJiAndGVhbV9uYW1lJyBpbiByZXN1bHQgJiYgJ21lc3NhZ2UnIGluIHJlc3VsdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxLQUFLLE1BQU0sT0FBTztBQUN6QixTQUFTQyxTQUFTLFFBQVEsK0JBQStCO0FBQ3pELGNBQWNDLE1BQU0sUUFBUSxxQkFBcUI7QUFFakQsT0FBTyxTQUFTQyxvQkFBb0JBLENBQ2xDQyxNQUFNLEVBQUVDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQ2hDLEVBQUVMLEtBQUssQ0FBQ00sU0FBUyxDQUFDO0VBQ2pCLE9BQU8sdUJBQXVCO0FBQ2hDO0FBRUEsT0FBTyxTQUFTQyx1QkFBdUJBLENBQ3JDQyxPQUFPLEVBQUVOLE1BQU0sR0FBRyxNQUFNLEVBQ3hCTyxpQkFBaUIsRUFBRSxPQUFPLEVBQzFCO0VBQUVDLE9BQU8sRUFBRUM7QUFBK0IsQ0FBckIsRUFBRTtFQUFFRCxPQUFPLEVBQUUsT0FBTztBQUFDLENBQUMsQ0FDNUMsRUFBRVYsS0FBSyxDQUFDTSxTQUFTLENBQUM7RUFDakIsTUFBTU0sTUFBTSxFQUFFVixNQUFNLEdBQ2xCLE9BQU9NLE9BQU8sS0FBSyxRQUFRLEdBQUdQLFNBQVMsQ0FBQ08sT0FBTyxDQUFDLEdBQUdBLE9BQU87O0VBRTVEO0VBQ0EsSUFBSSxTQUFTLElBQUlJLE1BQU0sSUFBSSxXQUFXLElBQUlBLE1BQU0sSUFBSSxTQUFTLElBQUlBLE1BQU0sRUFBRTtJQUN2RSxPQUFPLElBQUk7RUFDYjtFQUVBLE9BQU8sSUFBSTtBQUNiIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const TEAM_DELETE_TOOL_NAME = 'TeamDelete'
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function getPrompt(): string {
|
|
2
|
+
return `
|
|
3
|
+
# TeamDelete
|
|
4
|
+
|
|
5
|
+
Remove team and task directories when the swarm work is complete.
|
|
6
|
+
|
|
7
|
+
This operation:
|
|
8
|
+
- Removes the team directory (\`~/.claude/teams/{team-name}/\`)
|
|
9
|
+
- Removes the task directory (\`~/.claude/tasks/{team-name}/\`)
|
|
10
|
+
- Clears team context from the current session
|
|
11
|
+
|
|
12
|
+
**IMPORTANT**: TeamDelete will fail if the team still has active members. Gracefully terminate teammates first, then call TeamDelete after all teammates have shut down.
|
|
13
|
+
|
|
14
|
+
Use this when all teammates have finished their work and you want to clean up the team resources. The team name is automatically determined from the current session's team context.
|
|
15
|
+
`.trim()
|
|
16
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import { z } from 'zod/v4'
|
|
3
|
+
import { getSessionId } from '../../bootstrap/state.js'
|
|
4
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
|
|
5
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
6
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
7
|
+
import { isTodoV2Enabled } from '../../utils/tasks.js'
|
|
8
|
+
import { TodoListSchema } from '../../utils/todo/types.js'
|
|
9
|
+
import { VERIFICATION_AGENT_TYPE } from '../AgentTool/constants.js'
|
|
10
|
+
import { TODO_WRITE_TOOL_NAME } from './constants.js'
|
|
11
|
+
import { DESCRIPTION, PROMPT } from './prompt.js'
|
|
12
|
+
|
|
13
|
+
const inputSchema = lazySchema(() =>
|
|
14
|
+
z.strictObject({
|
|
15
|
+
todos: TodoListSchema().describe('The updated todo list'),
|
|
16
|
+
}),
|
|
17
|
+
)
|
|
18
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
19
|
+
|
|
20
|
+
const outputSchema = lazySchema(() =>
|
|
21
|
+
z.object({
|
|
22
|
+
oldTodos: TodoListSchema().describe('The todo list before the update'),
|
|
23
|
+
newTodos: TodoListSchema().describe('The todo list after the update'),
|
|
24
|
+
verificationNudgeNeeded: z.boolean().optional(),
|
|
25
|
+
}),
|
|
26
|
+
)
|
|
27
|
+
type OutputSchema = ReturnType<typeof outputSchema>
|
|
28
|
+
|
|
29
|
+
export type Output = z.infer<OutputSchema>
|
|
30
|
+
|
|
31
|
+
export const TodoWriteTool = buildTool({
|
|
32
|
+
name: TODO_WRITE_TOOL_NAME,
|
|
33
|
+
searchHint: 'manage the session task checklist',
|
|
34
|
+
maxResultSizeChars: 100_000,
|
|
35
|
+
strict: true,
|
|
36
|
+
async description() {
|
|
37
|
+
return DESCRIPTION
|
|
38
|
+
},
|
|
39
|
+
async prompt() {
|
|
40
|
+
return PROMPT
|
|
41
|
+
},
|
|
42
|
+
get inputSchema(): InputSchema {
|
|
43
|
+
return inputSchema()
|
|
44
|
+
},
|
|
45
|
+
get outputSchema(): OutputSchema {
|
|
46
|
+
return outputSchema()
|
|
47
|
+
},
|
|
48
|
+
userFacingName() {
|
|
49
|
+
return ''
|
|
50
|
+
},
|
|
51
|
+
shouldDefer: true,
|
|
52
|
+
isEnabled() {
|
|
53
|
+
return !isTodoV2Enabled()
|
|
54
|
+
},
|
|
55
|
+
toAutoClassifierInput(input) {
|
|
56
|
+
return `${input.todos.length} items`
|
|
57
|
+
},
|
|
58
|
+
async checkPermissions(input) {
|
|
59
|
+
// No permission checks required for todo operations
|
|
60
|
+
return { behavior: 'allow', updatedInput: input }
|
|
61
|
+
},
|
|
62
|
+
renderToolUseMessage() {
|
|
63
|
+
return null
|
|
64
|
+
},
|
|
65
|
+
async call({ todos }, context) {
|
|
66
|
+
const appState = context.getAppState()
|
|
67
|
+
const todoKey = context.agentId ?? getSessionId()
|
|
68
|
+
const oldTodos = appState.todos[todoKey] ?? []
|
|
69
|
+
const allDone = todos.every(_ => _.status === 'completed')
|
|
70
|
+
const newTodos = allDone ? [] : todos
|
|
71
|
+
|
|
72
|
+
// Structural nudge: if the main-thread agent is closing out a 3+ item
|
|
73
|
+
// list and none of those items was a verification step, append a reminder
|
|
74
|
+
// to the tool result. Fires at the exact loop-exit moment where skips
|
|
75
|
+
// happen ("when the last task closed, the loop exited").
|
|
76
|
+
let verificationNudgeNeeded = false
|
|
77
|
+
if (
|
|
78
|
+
feature('VERIFICATION_AGENT') &&
|
|
79
|
+
getFeatureValue_CACHED_MAY_BE_STALE('tengu_hive_evidence', false) &&
|
|
80
|
+
!context.agentId &&
|
|
81
|
+
allDone &&
|
|
82
|
+
todos.length >= 3 &&
|
|
83
|
+
!todos.some(t => /verif/i.test(t.content))
|
|
84
|
+
) {
|
|
85
|
+
verificationNudgeNeeded = true
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
context.setAppState(prev => ({
|
|
89
|
+
...prev,
|
|
90
|
+
todos: {
|
|
91
|
+
...prev.todos,
|
|
92
|
+
[todoKey]: newTodos,
|
|
93
|
+
},
|
|
94
|
+
}))
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
data: {
|
|
98
|
+
oldTodos,
|
|
99
|
+
newTodos: todos,
|
|
100
|
+
verificationNudgeNeeded,
|
|
101
|
+
},
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
mapToolResultToToolResultBlockParam({ verificationNudgeNeeded }, toolUseID) {
|
|
105
|
+
const base = `Todos have been modified successfully. Ensure that you continue to use the todo list to track your progress. Please proceed with the current tasks if applicable`
|
|
106
|
+
const nudge = verificationNudgeNeeded
|
|
107
|
+
? `\n\nNOTE: You just closed out 3+ tasks and none of them was a verification step. Before writing your final summary, spawn the verification agent (subagent_type="${VERIFICATION_AGENT_TYPE}"). You cannot self-assign PARTIAL by listing caveats in your summary \u2014 only the verifier issues a verdict.`
|
|
108
|
+
: ''
|
|
109
|
+
return {
|
|
110
|
+
tool_use_id: toolUseID,
|
|
111
|
+
type: 'tool_result',
|
|
112
|
+
content: base + nudge,
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
} satisfies ToolDef<InputSchema, Output>)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const TODO_WRITE_TOOL_NAME = 'TodoWrite'
|