@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,153 @@
|
|
|
1
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from 'src/services/analytics/growthbook.js'
|
|
2
|
+
import { splitCommand_DEPRECATED } from '../../utils/bash/commands.js'
|
|
3
|
+
import { SandboxManager } from '../../utils/sandbox/sandbox-adapter.js'
|
|
4
|
+
import { getSettings_DEPRECATED } from '../../utils/settings/settings.js'
|
|
5
|
+
import {
|
|
6
|
+
BINARY_HIJACK_VARS,
|
|
7
|
+
bashPermissionRule,
|
|
8
|
+
matchWildcardPattern,
|
|
9
|
+
stripAllLeadingEnvVars,
|
|
10
|
+
stripSafeWrappers,
|
|
11
|
+
} from './bashPermissions.js'
|
|
12
|
+
|
|
13
|
+
type SandboxInput = {
|
|
14
|
+
command?: string
|
|
15
|
+
dangerouslyDisableSandbox?: boolean
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// NOTE: excludedCommands is a user-facing convenience feature, not a security boundary.
|
|
19
|
+
// It is not a security bug to be able to bypass excludedCommands — the sandbox permission
|
|
20
|
+
// system (which prompts users) is the actual security control.
|
|
21
|
+
function containsExcludedCommand(command: string): boolean {
|
|
22
|
+
// Check dynamic config for disabled commands and substrings (only for ants)
|
|
23
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
24
|
+
const disabledCommands = getFeatureValue_CACHED_MAY_BE_STALE<{
|
|
25
|
+
commands: string[]
|
|
26
|
+
substrings: string[]
|
|
27
|
+
}>('tengu_sandbox_disabled_commands', { commands: [], substrings: [] })
|
|
28
|
+
|
|
29
|
+
// Check if command contains any disabled substrings
|
|
30
|
+
for (const substring of disabledCommands.substrings) {
|
|
31
|
+
if (command.includes(substring)) {
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check if command starts with any disabled commands
|
|
37
|
+
try {
|
|
38
|
+
const commandParts = splitCommand_DEPRECATED(command)
|
|
39
|
+
for (const part of commandParts) {
|
|
40
|
+
const baseCommand = part.trim().split(' ')[0]
|
|
41
|
+
if (baseCommand && disabledCommands.commands.includes(baseCommand)) {
|
|
42
|
+
return true
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
} catch {
|
|
46
|
+
// If we can't parse the command (e.g., malformed bash syntax),
|
|
47
|
+
// treat it as not excluded to allow other validation checks to handle it
|
|
48
|
+
// This prevents crashes when rendering tool use messages
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Check user-configured excluded commands from settings
|
|
53
|
+
const settings = getSettings_DEPRECATED()
|
|
54
|
+
const userExcludedCommands = settings.sandbox?.excludedCommands ?? []
|
|
55
|
+
|
|
56
|
+
if (userExcludedCommands.length === 0) {
|
|
57
|
+
return false
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Split compound commands (e.g. "docker ps && curl evil.com") into individual
|
|
61
|
+
// subcommands and check each one against excluded patterns. This prevents a
|
|
62
|
+
// compound command from escaping the sandbox just because its first subcommand
|
|
63
|
+
// matches an excluded pattern.
|
|
64
|
+
let subcommands: string[]
|
|
65
|
+
try {
|
|
66
|
+
subcommands = splitCommand_DEPRECATED(command)
|
|
67
|
+
} catch {
|
|
68
|
+
subcommands = [command]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
for (const subcommand of subcommands) {
|
|
72
|
+
const trimmed = subcommand.trim()
|
|
73
|
+
// Also try matching with env var prefixes and wrapper commands stripped, so
|
|
74
|
+
// that `FOO=bar bazel ...` and `timeout 30 bazel ...` match `bazel:*`. Not a
|
|
75
|
+
// security boundary (see NOTE at top); the &&-split above already lets
|
|
76
|
+
// `export FOO=bar && bazel ...` match. BINARY_HIJACK_VARS kept as a heuristic.
|
|
77
|
+
//
|
|
78
|
+
// We iteratively apply both stripping operations until no new candidates are
|
|
79
|
+
// produced (fixed-point), matching the approach in filterRulesByContentsMatchingInput.
|
|
80
|
+
// This handles interleaved patterns like `timeout 300 FOO=bar bazel run`
|
|
81
|
+
// where single-pass composition would fail.
|
|
82
|
+
const candidates = [trimmed]
|
|
83
|
+
const seen = new Set(candidates)
|
|
84
|
+
let startIdx = 0
|
|
85
|
+
while (startIdx < candidates.length) {
|
|
86
|
+
const endIdx = candidates.length
|
|
87
|
+
for (let i = startIdx; i < endIdx; i++) {
|
|
88
|
+
const cmd = candidates[i]!
|
|
89
|
+
const envStripped = stripAllLeadingEnvVars(cmd, BINARY_HIJACK_VARS)
|
|
90
|
+
if (!seen.has(envStripped)) {
|
|
91
|
+
candidates.push(envStripped)
|
|
92
|
+
seen.add(envStripped)
|
|
93
|
+
}
|
|
94
|
+
const wrapperStripped = stripSafeWrappers(cmd)
|
|
95
|
+
if (!seen.has(wrapperStripped)) {
|
|
96
|
+
candidates.push(wrapperStripped)
|
|
97
|
+
seen.add(wrapperStripped)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
startIdx = endIdx
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
for (const pattern of userExcludedCommands) {
|
|
104
|
+
const rule = bashPermissionRule(pattern)
|
|
105
|
+
for (const cand of candidates) {
|
|
106
|
+
switch (rule.type) {
|
|
107
|
+
case 'prefix':
|
|
108
|
+
if (cand === rule.prefix || cand.startsWith(rule.prefix + ' ')) {
|
|
109
|
+
return true
|
|
110
|
+
}
|
|
111
|
+
break
|
|
112
|
+
case 'exact':
|
|
113
|
+
if (cand === rule.command) {
|
|
114
|
+
return true
|
|
115
|
+
}
|
|
116
|
+
break
|
|
117
|
+
case 'wildcard':
|
|
118
|
+
if (matchWildcardPattern(rule.pattern, cand)) {
|
|
119
|
+
return true
|
|
120
|
+
}
|
|
121
|
+
break
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return false
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export function shouldUseSandbox(input: Partial<SandboxInput>): boolean {
|
|
131
|
+
if (!SandboxManager.isSandboxingEnabled()) {
|
|
132
|
+
return false
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Don't sandbox if explicitly overridden AND unsandboxed commands are allowed by policy
|
|
136
|
+
if (
|
|
137
|
+
input.dangerouslyDisableSandbox &&
|
|
138
|
+
SandboxManager.areUnsandboxedCommandsAllowed()
|
|
139
|
+
) {
|
|
140
|
+
return false
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (!input.command) {
|
|
144
|
+
return false
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Don't sandbox if the command contains user-configured excluded commands
|
|
148
|
+
if (containsExcludedCommand(input.command)) {
|
|
149
|
+
return false
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return true
|
|
153
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Base64ImageSource,
|
|
3
|
+
ContentBlockParam,
|
|
4
|
+
ToolResultBlockParam,
|
|
5
|
+
} from '@anthropic-ai/sdk/resources/index.mjs'
|
|
6
|
+
import { readFile, stat } from 'fs/promises'
|
|
7
|
+
import { getOriginalCwd } from 'src/bootstrap/state.js'
|
|
8
|
+
import { logEvent } from 'src/services/analytics/index.js'
|
|
9
|
+
import type { ToolPermissionContext } from 'src/Tool.js'
|
|
10
|
+
import { getCwd } from 'src/utils/cwd.js'
|
|
11
|
+
import { pathInAllowedWorkingPath } from 'src/utils/permissions/filesystem.js'
|
|
12
|
+
import { setCwd } from 'src/utils/Shell.js'
|
|
13
|
+
import { shouldMaintainProjectWorkingDir } from '../../utils/envUtils.js'
|
|
14
|
+
import { maybeResizeAndDownsampleImageBuffer } from '../../utils/imageResizer.js'
|
|
15
|
+
import { getMaxOutputLength } from '../../utils/shell/outputLimits.js'
|
|
16
|
+
import { countCharInString, plural } from '../../utils/stringUtils.js'
|
|
17
|
+
/**
|
|
18
|
+
* Strips leading and trailing lines that contain only whitespace/newlines.
|
|
19
|
+
* Unlike trim(), this preserves whitespace within content lines and only removes
|
|
20
|
+
* completely empty lines from the beginning and end.
|
|
21
|
+
*/
|
|
22
|
+
export function stripEmptyLines(content: string): string {
|
|
23
|
+
const lines = content.split('\n')
|
|
24
|
+
|
|
25
|
+
// Find the first non-empty line
|
|
26
|
+
let startIndex = 0
|
|
27
|
+
while (startIndex < lines.length && lines[startIndex]?.trim() === '') {
|
|
28
|
+
startIndex++
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Find the last non-empty line
|
|
32
|
+
let endIndex = lines.length - 1
|
|
33
|
+
while (endIndex >= 0 && lines[endIndex]?.trim() === '') {
|
|
34
|
+
endIndex--
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// If all lines are empty, return empty string
|
|
38
|
+
if (startIndex > endIndex) {
|
|
39
|
+
return ''
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Return the slice with non-empty lines
|
|
43
|
+
return lines.slice(startIndex, endIndex + 1).join('\n')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Check if content is a base64 encoded image data URL
|
|
48
|
+
*/
|
|
49
|
+
export function isImageOutput(content: string): boolean {
|
|
50
|
+
return /^data:image\/[a-z0-9.+_-]+;base64,/i.test(content)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const DATA_URI_RE = /^data:([^;]+);base64,(.+)$/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Parse a data-URI string into its media type and base64 payload.
|
|
57
|
+
* Input is trimmed before matching.
|
|
58
|
+
*/
|
|
59
|
+
export function parseDataUri(
|
|
60
|
+
s: string,
|
|
61
|
+
): { mediaType: string; data: string } | null {
|
|
62
|
+
const match = s.trim().match(DATA_URI_RE)
|
|
63
|
+
if (!match || !match[1] || !match[2]) return null
|
|
64
|
+
return { mediaType: match[1], data: match[2] }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Build an image tool_result block from shell stdout containing a data URI.
|
|
69
|
+
* Returns null if parse fails so callers can fall through to text handling.
|
|
70
|
+
*/
|
|
71
|
+
export function buildImageToolResult(
|
|
72
|
+
stdout: string,
|
|
73
|
+
toolUseID: string,
|
|
74
|
+
): ToolResultBlockParam | null {
|
|
75
|
+
const parsed = parseDataUri(stdout)
|
|
76
|
+
if (!parsed) return null
|
|
77
|
+
return {
|
|
78
|
+
tool_use_id: toolUseID,
|
|
79
|
+
type: 'tool_result',
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: 'image',
|
|
83
|
+
source: {
|
|
84
|
+
type: 'base64',
|
|
85
|
+
media_type: parsed.mediaType as Base64ImageSource['media_type'],
|
|
86
|
+
data: parsed.data,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Cap file reads to 20 MB — any image data URI larger than this is
|
|
94
|
+
// well beyond what the API accepts (5 MB base64) and would OOM if read
|
|
95
|
+
// into memory.
|
|
96
|
+
const MAX_IMAGE_FILE_SIZE = 20 * 1024 * 1024
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resize image output from a shell tool. stdout is capped at
|
|
100
|
+
* getMaxOutputLength() when read back from the shell output file — if the
|
|
101
|
+
* full output spilled to disk, re-read it from there, since truncated base64
|
|
102
|
+
* would decode to a corrupt image that either throws here or gets rejected by
|
|
103
|
+
* the API. Caps dimensions too: compressImageBuffer only checks byte size, so
|
|
104
|
+
* a small-but-high-DPI PNG (e.g. matplotlib at dpi=300) sails through at full
|
|
105
|
+
* resolution and poisons many-image requests (CC-304).
|
|
106
|
+
*
|
|
107
|
+
* Returns the re-encoded data URI on success, or null if the source didn't
|
|
108
|
+
* parse as a data URI (caller decides whether to flip isImage).
|
|
109
|
+
*/
|
|
110
|
+
export async function resizeShellImageOutput(
|
|
111
|
+
stdout: string,
|
|
112
|
+
outputFilePath: string | undefined,
|
|
113
|
+
outputFileSize: number | undefined,
|
|
114
|
+
): Promise<string | null> {
|
|
115
|
+
let source = stdout
|
|
116
|
+
if (outputFilePath) {
|
|
117
|
+
const size = outputFileSize ?? (await stat(outputFilePath)).size
|
|
118
|
+
if (size > MAX_IMAGE_FILE_SIZE) return null
|
|
119
|
+
source = await readFile(outputFilePath, 'utf8')
|
|
120
|
+
}
|
|
121
|
+
const parsed = parseDataUri(source)
|
|
122
|
+
if (!parsed) return null
|
|
123
|
+
const buf = Buffer.from(parsed.data, 'base64')
|
|
124
|
+
const ext = parsed.mediaType.split('/')[1] || 'png'
|
|
125
|
+
const resized = await maybeResizeAndDownsampleImageBuffer(
|
|
126
|
+
buf,
|
|
127
|
+
buf.length,
|
|
128
|
+
ext,
|
|
129
|
+
)
|
|
130
|
+
return `data:image/${resized.mediaType};base64,${resized.buffer.toString('base64')}`
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export function formatOutput(content: string): {
|
|
134
|
+
totalLines: number
|
|
135
|
+
truncatedContent: string
|
|
136
|
+
isImage?: boolean
|
|
137
|
+
} {
|
|
138
|
+
const isImage = isImageOutput(content)
|
|
139
|
+
if (isImage) {
|
|
140
|
+
return {
|
|
141
|
+
totalLines: 1,
|
|
142
|
+
truncatedContent: content,
|
|
143
|
+
isImage,
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const maxOutputLength = getMaxOutputLength()
|
|
148
|
+
if (content.length <= maxOutputLength) {
|
|
149
|
+
return {
|
|
150
|
+
totalLines: countCharInString(content, '\n') + 1,
|
|
151
|
+
truncatedContent: content,
|
|
152
|
+
isImage,
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const truncatedPart = content.slice(0, maxOutputLength)
|
|
157
|
+
const remainingLines = countCharInString(content, '\n', maxOutputLength) + 1
|
|
158
|
+
const truncated = `${truncatedPart}\n\n... [${remainingLines} lines truncated] ...`
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
totalLines: countCharInString(content, '\n') + 1,
|
|
162
|
+
truncatedContent: truncated,
|
|
163
|
+
isImage,
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export const stdErrAppendShellResetMessage = (stderr: string): string =>
|
|
168
|
+
`${stderr.trim()}\nShell cwd was reset to ${getOriginalCwd()}`
|
|
169
|
+
|
|
170
|
+
export function resetCwdIfOutsideProject(
|
|
171
|
+
toolPermissionContext: ToolPermissionContext,
|
|
172
|
+
): boolean {
|
|
173
|
+
const cwd = getCwd()
|
|
174
|
+
const originalCwd = getOriginalCwd()
|
|
175
|
+
const shouldMaintain = shouldMaintainProjectWorkingDir()
|
|
176
|
+
if (
|
|
177
|
+
shouldMaintain ||
|
|
178
|
+
// Fast path: originalCwd is unconditionally in allWorkingDirectories
|
|
179
|
+
// (filesystem.ts), so when cwd hasn't moved, pathInAllowedWorkingPath is
|
|
180
|
+
// trivially true — skip its syscalls for the no-cd common case.
|
|
181
|
+
(cwd !== originalCwd &&
|
|
182
|
+
!pathInAllowedWorkingPath(cwd, toolPermissionContext))
|
|
183
|
+
) {
|
|
184
|
+
// Reset to original directory if maintaining project dir OR outside allowed working directory
|
|
185
|
+
setCwd(originalCwd)
|
|
186
|
+
if (!shouldMaintain) {
|
|
187
|
+
logEvent('tengu_bash_tool_reset_to_original_dir', {})
|
|
188
|
+
return true
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return false
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Creates a human-readable summary of structured content blocks.
|
|
196
|
+
* Used to display MCP results with images and text in the UI.
|
|
197
|
+
*/
|
|
198
|
+
export function createContentSummary(content: ContentBlockParam[]): string {
|
|
199
|
+
const parts: string[] = []
|
|
200
|
+
let textCount = 0
|
|
201
|
+
let imageCount = 0
|
|
202
|
+
|
|
203
|
+
for (const block of content) {
|
|
204
|
+
if (block.type === 'image') {
|
|
205
|
+
imageCount++
|
|
206
|
+
} else if (block.type === 'text' && 'text' in block) {
|
|
207
|
+
textCount++
|
|
208
|
+
// Include first 200 chars of text blocks for context
|
|
209
|
+
const preview = block.text.slice(0, 200)
|
|
210
|
+
parts.push(preview + (block.text.length > 200 ? '...' : ''))
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
const summary: string[] = []
|
|
215
|
+
if (imageCount > 0) {
|
|
216
|
+
summary.push(`[${imageCount} ${plural(imageCount, 'image')}]`)
|
|
217
|
+
}
|
|
218
|
+
if (textCount > 0) {
|
|
219
|
+
summary.push(`[${textCount} text ${plural(textCount, 'block')}]`)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return `MCP Result: ${summary.join(', ')}${parts.length > 0 ? '\n\n' + parts.join('\n\n') : ''}`
|
|
223
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import { z } from 'zod/v4'
|
|
3
|
+
import { getKairosActive, getUserMsgOptIn } from '../../bootstrap/state.js'
|
|
4
|
+
import { getFeatureValue_CACHED_WITH_REFRESH } from '../../services/analytics/growthbook.js'
|
|
5
|
+
import { logEvent } from '../../services/analytics/index.js'
|
|
6
|
+
import type { ValidationResult } from '../../Tool.js'
|
|
7
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
8
|
+
import { isEnvTruthy } from '../../utils/envUtils.js'
|
|
9
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
10
|
+
import { plural } from '../../utils/stringUtils.js'
|
|
11
|
+
import { resolveAttachments, validateAttachmentPaths } from './attachments.js'
|
|
12
|
+
import {
|
|
13
|
+
BRIEF_TOOL_NAME,
|
|
14
|
+
BRIEF_TOOL_PROMPT,
|
|
15
|
+
DESCRIPTION,
|
|
16
|
+
LEGACY_BRIEF_TOOL_NAME,
|
|
17
|
+
} from './prompt.js'
|
|
18
|
+
import { renderToolResultMessage, renderToolUseMessage } from './UI.js'
|
|
19
|
+
|
|
20
|
+
const inputSchema = lazySchema(() =>
|
|
21
|
+
z.strictObject({
|
|
22
|
+
message: z
|
|
23
|
+
.string()
|
|
24
|
+
.describe('The message for the user. Supports markdown formatting.'),
|
|
25
|
+
attachments: z
|
|
26
|
+
.array(z.string())
|
|
27
|
+
.optional()
|
|
28
|
+
.describe(
|
|
29
|
+
'Optional file paths (absolute or relative to cwd) to attach. Use for photos, screenshots, diffs, logs, or any file the user should see alongside your message.',
|
|
30
|
+
),
|
|
31
|
+
status: z
|
|
32
|
+
.enum(['normal', 'proactive'])
|
|
33
|
+
.describe(
|
|
34
|
+
"Use 'proactive' when you're surfacing something the user hasn't asked for and needs to see now — task completion while they're away, a blocker you hit, an unsolicited status update. Use 'normal' when replying to something the user just said.",
|
|
35
|
+
),
|
|
36
|
+
}),
|
|
37
|
+
)
|
|
38
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
39
|
+
|
|
40
|
+
// attachments MUST remain optional — resumed sessions replay pre-attachment
|
|
41
|
+
// outputs verbatim and a required field would crash the UI renderer on resume.
|
|
42
|
+
const outputSchema = lazySchema(() =>
|
|
43
|
+
z.object({
|
|
44
|
+
message: z.string().describe('The message'),
|
|
45
|
+
attachments: z
|
|
46
|
+
.array(
|
|
47
|
+
z.object({
|
|
48
|
+
path: z.string(),
|
|
49
|
+
size: z.number(),
|
|
50
|
+
isImage: z.boolean(),
|
|
51
|
+
file_uuid: z.string().optional(),
|
|
52
|
+
}),
|
|
53
|
+
)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Resolved attachment metadata'),
|
|
56
|
+
sentAt: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe(
|
|
60
|
+
'ISO timestamp captured at tool execution on the emitting process. Optional — resumed sessions replay pre-sentAt outputs verbatim.',
|
|
61
|
+
),
|
|
62
|
+
}),
|
|
63
|
+
)
|
|
64
|
+
type OutputSchema = ReturnType<typeof outputSchema>
|
|
65
|
+
export type Output = z.infer<OutputSchema>
|
|
66
|
+
|
|
67
|
+
const KAIROS_BRIEF_REFRESH_MS = 5 * 60 * 1000
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Entitlement check — is the user ALLOWED to use Brief? Combines build-time
|
|
71
|
+
* flags with runtime GB gate + assistant-mode passthrough. No opt-in check
|
|
72
|
+
* here — this decides whether opt-in should be HONORED, not whether the user
|
|
73
|
+
* has opted in.
|
|
74
|
+
*
|
|
75
|
+
* Build-time OR-gated on KAIROS || KAIROS_BRIEF (same pattern as
|
|
76
|
+
* PROACTIVE || KAIROS): assistant mode depends on Brief, so KAIROS alone
|
|
77
|
+
* must bundle it. KAIROS_BRIEF lets Brief ship independently.
|
|
78
|
+
*
|
|
79
|
+
* Use this to decide whether `--brief` / `defaultView: 'chat'` / `--tools`
|
|
80
|
+
* listing should be honored. Use `isBriefEnabled()` to decide whether the
|
|
81
|
+
* tool is actually active in the current session.
|
|
82
|
+
*
|
|
83
|
+
* CLAUDE_CODE_BRIEF env var force-grants entitlement for dev/testing —
|
|
84
|
+
* bypasses the GB gate so you can test without being enrolled. Still
|
|
85
|
+
* requires an opt-in action to activate (--brief, defaultView, etc.), but
|
|
86
|
+
* the env var alone also sets userMsgOptIn via maybeActivateBrief().
|
|
87
|
+
*/
|
|
88
|
+
export function isBriefEntitled(): boolean {
|
|
89
|
+
// Positive ternary — see docs/feature-gating.md. Negative early-return
|
|
90
|
+
// would not eliminate the GB gate string from external builds.
|
|
91
|
+
return feature('KAIROS') || feature('KAIROS_BRIEF')
|
|
92
|
+
? getKairosActive() ||
|
|
93
|
+
isEnvTruthy(process.env.CLAUDE_CODE_BRIEF) ||
|
|
94
|
+
getFeatureValue_CACHED_WITH_REFRESH(
|
|
95
|
+
'tengu_kairos_brief',
|
|
96
|
+
false,
|
|
97
|
+
KAIROS_BRIEF_REFRESH_MS,
|
|
98
|
+
)
|
|
99
|
+
: false
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Unified activation gate for the Brief tool. Governs model-facing behavior
|
|
104
|
+
* as a unit: tool availability, system prompt section (getBriefSection),
|
|
105
|
+
* tool-deferral bypass (isDeferredTool), and todo-nag suppression.
|
|
106
|
+
*
|
|
107
|
+
* Activation requires explicit opt-in (userMsgOptIn) set by one of:
|
|
108
|
+
* - `--brief` CLI flag (maybeActivateBrief in main.tsx)
|
|
109
|
+
* - `defaultView: 'chat'` in settings (main.tsx init)
|
|
110
|
+
* - `/brief` slash command (brief.ts)
|
|
111
|
+
* - `/config` defaultView picker (Config.tsx)
|
|
112
|
+
* - SendUserMessage in `--tools` / SDK `tools` option (main.tsx)
|
|
113
|
+
* - CLAUDE_CODE_BRIEF env var (maybeActivateBrief — dev/testing bypass)
|
|
114
|
+
* Assistant mode (kairosActive) bypasses opt-in since its system prompt
|
|
115
|
+
* hard-codes "you MUST use SendUserMessage" (systemPrompt.md:14).
|
|
116
|
+
*
|
|
117
|
+
* The GB gate is re-checked here as a kill-switch AND — flipping
|
|
118
|
+
* tengu_kairos_brief off mid-session disables the tool on the next 5-min
|
|
119
|
+
* refresh even for opted-in sessions. No opt-in → always false regardless
|
|
120
|
+
* of GB (this is the fix for "brief defaults on for enrolled ants").
|
|
121
|
+
*
|
|
122
|
+
* Called from Tool.isEnabled() (lazy, post-init), never at module scope.
|
|
123
|
+
* getKairosActive() and getUserMsgOptIn() are set in main.tsx before any
|
|
124
|
+
* caller reaches here.
|
|
125
|
+
*/
|
|
126
|
+
export function isBriefEnabled(): boolean {
|
|
127
|
+
// Top-level feature() guard is load-bearing for DCE: Bun can constant-fold
|
|
128
|
+
// the ternary to `false` in external builds and then dead-code the BriefTool
|
|
129
|
+
// object. Composing isBriefEntitled() alone (which has its own guard) is
|
|
130
|
+
// semantically equivalent but defeats constant-folding across the boundary.
|
|
131
|
+
return feature('KAIROS') || feature('KAIROS_BRIEF')
|
|
132
|
+
? (getKairosActive() || getUserMsgOptIn()) && isBriefEntitled()
|
|
133
|
+
: false
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export const BriefTool = buildTool({
|
|
137
|
+
name: BRIEF_TOOL_NAME,
|
|
138
|
+
aliases: [LEGACY_BRIEF_TOOL_NAME],
|
|
139
|
+
searchHint:
|
|
140
|
+
'send a message to the user — your primary visible output channel',
|
|
141
|
+
maxResultSizeChars: 100_000,
|
|
142
|
+
userFacingName() {
|
|
143
|
+
return ''
|
|
144
|
+
},
|
|
145
|
+
get inputSchema(): InputSchema {
|
|
146
|
+
return inputSchema()
|
|
147
|
+
},
|
|
148
|
+
get outputSchema(): OutputSchema {
|
|
149
|
+
return outputSchema()
|
|
150
|
+
},
|
|
151
|
+
isEnabled() {
|
|
152
|
+
return isBriefEnabled()
|
|
153
|
+
},
|
|
154
|
+
isConcurrencySafe() {
|
|
155
|
+
return true
|
|
156
|
+
},
|
|
157
|
+
isReadOnly() {
|
|
158
|
+
return true
|
|
159
|
+
},
|
|
160
|
+
toAutoClassifierInput(input) {
|
|
161
|
+
return input.message
|
|
162
|
+
},
|
|
163
|
+
async validateInput({ attachments }, _context): Promise<ValidationResult> {
|
|
164
|
+
if (!attachments || attachments.length === 0) {
|
|
165
|
+
return { result: true }
|
|
166
|
+
}
|
|
167
|
+
return validateAttachmentPaths(attachments)
|
|
168
|
+
},
|
|
169
|
+
async description() {
|
|
170
|
+
return DESCRIPTION
|
|
171
|
+
},
|
|
172
|
+
async prompt() {
|
|
173
|
+
return BRIEF_TOOL_PROMPT
|
|
174
|
+
},
|
|
175
|
+
mapToolResultToToolResultBlockParam(output, toolUseID) {
|
|
176
|
+
const n = output.attachments?.length ?? 0
|
|
177
|
+
const suffix = n === 0 ? '' : ` (${n} ${plural(n, 'attachment')} included)`
|
|
178
|
+
return {
|
|
179
|
+
tool_use_id: toolUseID,
|
|
180
|
+
type: 'tool_result',
|
|
181
|
+
content: `Message delivered to user.${suffix}`,
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
renderToolUseMessage,
|
|
185
|
+
renderToolResultMessage,
|
|
186
|
+
async call({ message, attachments, status }, context) {
|
|
187
|
+
const sentAt = new Date().toISOString()
|
|
188
|
+
logEvent('tengu_brief_send', {
|
|
189
|
+
proactive: status === 'proactive',
|
|
190
|
+
attachment_count: attachments?.length ?? 0,
|
|
191
|
+
})
|
|
192
|
+
if (!attachments || attachments.length === 0) {
|
|
193
|
+
return { data: { message, sentAt } }
|
|
194
|
+
}
|
|
195
|
+
const appState = context.getAppState()
|
|
196
|
+
const resolved = await resolveAttachments(attachments, {
|
|
197
|
+
replBridgeEnabled: appState.replBridgeEnabled,
|
|
198
|
+
signal: context.abortController.signal,
|
|
199
|
+
})
|
|
200
|
+
return {
|
|
201
|
+
data: { message, attachments: resolved, sentAt },
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
} satisfies ToolDef<InputSchema, Output>)
|