@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,177 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Text } from '../../ink.js'
|
|
3
|
+
import { z } from 'zod/v4'
|
|
4
|
+
import type { ValidationResult } from '../../Tool.js'
|
|
5
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
6
|
+
import { xmemClient } from '../../utils/xmem.js'
|
|
7
|
+
import { getInitialSettings } from '../../utils/settings/settings.js'
|
|
8
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
9
|
+
import { XMEM_RETRIEVE_TOOL_NAME, DESCRIPTION } from './prompt.js'
|
|
10
|
+
|
|
11
|
+
const inputSchema = lazySchema(() =>
|
|
12
|
+
z.strictObject({
|
|
13
|
+
query: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe('The search query describing what information you need from memory'),
|
|
16
|
+
max_results: z
|
|
17
|
+
.number()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Maximum number of memory entries to retrieve (default: 3)'),
|
|
20
|
+
}),
|
|
21
|
+
)
|
|
22
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
23
|
+
|
|
24
|
+
const outputSchema = lazySchema(() =>
|
|
25
|
+
z.object({
|
|
26
|
+
success: z.boolean().describe('Whether the retrieval was successful'),
|
|
27
|
+
memories: z
|
|
28
|
+
.array(
|
|
29
|
+
z.object({
|
|
30
|
+
content: z.string().describe('The retrieved memory content'),
|
|
31
|
+
relevance: z.number().optional().describe('Relevance score if available'),
|
|
32
|
+
}),
|
|
33
|
+
)
|
|
34
|
+
.describe('Retrieved memories relevant to the query'),
|
|
35
|
+
answer: z
|
|
36
|
+
.string()
|
|
37
|
+
.optional()
|
|
38
|
+
.describe('Consolidated answer from retrieved memories'),
|
|
39
|
+
message: z.string().describe('Status message'),
|
|
40
|
+
}),
|
|
41
|
+
)
|
|
42
|
+
type OutputSchema = ReturnType<typeof outputSchema>
|
|
43
|
+
|
|
44
|
+
export type Output = z.infer<OutputSchema>
|
|
45
|
+
|
|
46
|
+
export const XMemRetrieveTool = buildTool({
|
|
47
|
+
name: XMEM_RETRIEVE_TOOL_NAME,
|
|
48
|
+
searchHint: 'retrieve relevant memories from long-term storage',
|
|
49
|
+
maxResultSizeChars: 50_000,
|
|
50
|
+
async description() {
|
|
51
|
+
return DESCRIPTION
|
|
52
|
+
},
|
|
53
|
+
userFacingName() {
|
|
54
|
+
return 'XMem Retrieve'
|
|
55
|
+
},
|
|
56
|
+
getToolUseSummary(input) {
|
|
57
|
+
return `Retrieving memories: ${input.query.substring(0, 50)}...`
|
|
58
|
+
},
|
|
59
|
+
getActivityDescription(input) {
|
|
60
|
+
return `Retrieving memories: ${input.query.substring(0, 40)}...`
|
|
61
|
+
},
|
|
62
|
+
get inputSchema(): InputSchema {
|
|
63
|
+
return inputSchema()
|
|
64
|
+
},
|
|
65
|
+
get outputSchema(): OutputSchema {
|
|
66
|
+
return outputSchema()
|
|
67
|
+
},
|
|
68
|
+
isConcurrencySafe() {
|
|
69
|
+
return true
|
|
70
|
+
},
|
|
71
|
+
isReadOnly() {
|
|
72
|
+
return true
|
|
73
|
+
},
|
|
74
|
+
toAutoClassifierInput(input) {
|
|
75
|
+
return `Retrieve memory: ${input.query}`
|
|
76
|
+
},
|
|
77
|
+
isSearchOrReadCommand() {
|
|
78
|
+
return { isSearch: true, isRead: true }
|
|
79
|
+
},
|
|
80
|
+
async validateInput(): Promise<ValidationResult> {
|
|
81
|
+
// XMem is always enabled by default now
|
|
82
|
+
return { result: true }
|
|
83
|
+
},
|
|
84
|
+
async prompt() {
|
|
85
|
+
return DESCRIPTION
|
|
86
|
+
},
|
|
87
|
+
renderToolUseMessage(input) {
|
|
88
|
+
return `Retrieving from XMem memory: "${input.query.substring(0, 60)}${input.query.length > 60 ? '...' : ''}"`
|
|
89
|
+
},
|
|
90
|
+
renderToolUseErrorMessage() {
|
|
91
|
+
return React.createElement(Text, null, `Failed to retrieve memories`);
|
|
92
|
+
},
|
|
93
|
+
renderToolResultMessage(output) {
|
|
94
|
+
if (!output.success) {
|
|
95
|
+
return React.createElement(Text, { color: 'error' }, `❌ Failed: ${output.message}`);
|
|
96
|
+
}
|
|
97
|
+
if (output.memories.length === 0) {
|
|
98
|
+
return React.createElement(Text, null, `No relevant memories found`);
|
|
99
|
+
}
|
|
100
|
+
return React.createElement(Text, null, `✅ Found ${output.memories.length} relevant memory${output.memories.length > 1 ? 'ies' : ''}`);
|
|
101
|
+
},
|
|
102
|
+
async call(input) {
|
|
103
|
+
console.error(`[XMem Retrieve] Query: "${input.query.substring(0, 50)}..."`)
|
|
104
|
+
|
|
105
|
+
const start = Date.now()
|
|
106
|
+
|
|
107
|
+
try {
|
|
108
|
+
const result = await xmemClient.retrieve({
|
|
109
|
+
query: input.query,
|
|
110
|
+
user_id: 'default_user',
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
const duration = Date.now() - start
|
|
114
|
+
console.error(`[XMem Retrieve] ✅ Retrieved in ${duration}ms`)
|
|
115
|
+
console.error(`[XMem Retrieve] Answer: ${result.answer.substring(0, 100)}${result.answer.length > 100 ? '...' : ''}`)
|
|
116
|
+
|
|
117
|
+
// Parse the answer into memory entries
|
|
118
|
+
const memories = result.answer
|
|
119
|
+
? [{ content: result.answer, relevance: 1.0 }]
|
|
120
|
+
: []
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
data: {
|
|
124
|
+
success: true,
|
|
125
|
+
memories,
|
|
126
|
+
answer: result.answer,
|
|
127
|
+
message: `Retrieved ${memories.length} relevant memories`,
|
|
128
|
+
},
|
|
129
|
+
}
|
|
130
|
+
} catch (error) {
|
|
131
|
+
const errorMsg = error instanceof Error ? error.message : String(error)
|
|
132
|
+
console.error(`[XMem Retrieve] ❌ Failed: ${errorMsg}`)
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
data: {
|
|
136
|
+
success: false,
|
|
137
|
+
memories: [],
|
|
138
|
+
message: `Failed to retrieve memories: ${errorMsg}`,
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
mapToolResultToToolResultBlockParam(output, toolUseID) {
|
|
144
|
+
if (!output.success) {
|
|
145
|
+
return {
|
|
146
|
+
tool_use_id: toolUseID,
|
|
147
|
+
type: 'tool_result',
|
|
148
|
+
content: `Error: ${output.message}`,
|
|
149
|
+
is_error: true,
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (output.memories.length === 0) {
|
|
154
|
+
return {
|
|
155
|
+
tool_use_id: toolUseID,
|
|
156
|
+
type: 'tool_result',
|
|
157
|
+
content: 'No relevant memories found for this query.',
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const content = [
|
|
162
|
+
`Retrieved ${output.memories.length} relevant memory${output.memories.length > 1 ? 'ies' : ''}:`,
|
|
163
|
+
'',
|
|
164
|
+
...output.memories.map((m, i) =>
|
|
165
|
+
`[${i + 1}] ${m.content}${m.relevance ? ` (relevance: ${m.relevance.toFixed(2)})` : ''}`
|
|
166
|
+
),
|
|
167
|
+
'',
|
|
168
|
+
output.answer ? `Consolidated answer: ${output.answer}` : '',
|
|
169
|
+
].filter(Boolean).join('\n')
|
|
170
|
+
|
|
171
|
+
return {
|
|
172
|
+
tool_use_id: toolUseID,
|
|
173
|
+
type: 'tool_result',
|
|
174
|
+
content,
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
} satisfies ToolDef<InputSchema, Output>)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const XMEM_RETRIEVE_TOOL_NAME = 'XMemRetrieve'
|
|
2
|
+
|
|
3
|
+
export const DESCRIPTION = `Retrieve relevant memories from long-term XMem storage to help answer the current query.
|
|
4
|
+
|
|
5
|
+
**THINK LIKE A HUMAN**: A human mind recalls past knowledge before starting a task. Before using ANY other tools (like reading files or searching code) to solve a problem or start a new task, ALWAYS call ${XMEM_RETRIEVE_TOOL_NAME} first with the context of the user's request.
|
|
6
|
+
|
|
7
|
+
Use this tool when:
|
|
8
|
+
- Starting a new task to recall context, preferences, or prior related work.
|
|
9
|
+
- The user's question mentions "remember", "before", "last time", "previously", "as we discussed".
|
|
10
|
+
- The question refers to personal details ("my name", "my preference", "my project").
|
|
11
|
+
- You're unsure about context that might have been established in previous conversations.
|
|
12
|
+
- You need to personalize the response based on past interactions.
|
|
13
|
+
|
|
14
|
+
If the memory gives you the answer or context, use it. If no relevant memory is found, ONLY THEN proceed to explore the codebase or solve the issue from scratch. You can also use a hybrid approach: retrieve from memory to get initial context, then use other tools (like file reading or searching) to expand on it. You can call the memory retrieval tool multiple times during a task if new questions arise that might benefit from past context.
|
|
15
|
+
|
|
16
|
+
Call this tool with a search query describing what you need to know, then use the results to inform your response.`
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Text } from '../../ink.js'
|
|
3
|
+
import { z } from 'zod/v4'
|
|
4
|
+
import type { ValidationResult } from '../../Tool.js'
|
|
5
|
+
import { buildTool, type ToolDef } from '../../Tool.js'
|
|
6
|
+
import { xmemClient } from '../../utils/xmem.js'
|
|
7
|
+
import { getInitialSettings } from '../../utils/settings/settings.js'
|
|
8
|
+
import { lazySchema } from '../../utils/lazySchema.js'
|
|
9
|
+
import { XMEM_SEARCH_TOOL_NAME, DESCRIPTION } from './prompt.js'
|
|
10
|
+
|
|
11
|
+
const inputSchema = lazySchema(() =>
|
|
12
|
+
z.strictObject({
|
|
13
|
+
query: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe('The search query to find specific memories'),
|
|
16
|
+
limit: z
|
|
17
|
+
.number()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Maximum results to return (default: 10)'),
|
|
20
|
+
}),
|
|
21
|
+
)
|
|
22
|
+
type InputSchema = ReturnType<typeof inputSchema>
|
|
23
|
+
|
|
24
|
+
const outputSchema = lazySchema(() =>
|
|
25
|
+
z.object({
|
|
26
|
+
success: z.boolean().describe('Whether the search was successful'),
|
|
27
|
+
results: z
|
|
28
|
+
.array(
|
|
29
|
+
z.object({
|
|
30
|
+
content: z.string().describe('The memory content'),
|
|
31
|
+
score: z.number().optional().describe('Search relevance score'),
|
|
32
|
+
}),
|
|
33
|
+
)
|
|
34
|
+
.describe('Search results matching the query'),
|
|
35
|
+
count: z.number().describe('Total number of results found'),
|
|
36
|
+
message: z.string().describe('Status message'),
|
|
37
|
+
}),
|
|
38
|
+
)
|
|
39
|
+
type OutputSchema = ReturnType<typeof outputSchema>
|
|
40
|
+
|
|
41
|
+
export type Output = z.infer<OutputSchema>
|
|
42
|
+
|
|
43
|
+
export const XMemSearchTool = buildTool({
|
|
44
|
+
name: XMEM_SEARCH_TOOL_NAME,
|
|
45
|
+
searchHint: 'search through stored memories',
|
|
46
|
+
maxResultSizeChars: 100_000,
|
|
47
|
+
async description() {
|
|
48
|
+
return DESCRIPTION
|
|
49
|
+
},
|
|
50
|
+
userFacingName() {
|
|
51
|
+
return 'XMem Search'
|
|
52
|
+
},
|
|
53
|
+
getToolUseSummary(input) {
|
|
54
|
+
return `Searching memories: ${input.query.substring(0, 50)}...`
|
|
55
|
+
},
|
|
56
|
+
getActivityDescription(input) {
|
|
57
|
+
return `Searching memories: ${input.query.substring(0, 40)}...`
|
|
58
|
+
},
|
|
59
|
+
get inputSchema(): InputSchema {
|
|
60
|
+
return inputSchema()
|
|
61
|
+
},
|
|
62
|
+
get outputSchema(): OutputSchema {
|
|
63
|
+
return outputSchema()
|
|
64
|
+
},
|
|
65
|
+
isConcurrencySafe() {
|
|
66
|
+
return true
|
|
67
|
+
},
|
|
68
|
+
isReadOnly() {
|
|
69
|
+
return true
|
|
70
|
+
},
|
|
71
|
+
toAutoClassifierInput(input) {
|
|
72
|
+
return `Search memory: ${input.query}`
|
|
73
|
+
},
|
|
74
|
+
isSearchOrReadCommand() {
|
|
75
|
+
return { isSearch: true, isRead: true }
|
|
76
|
+
},
|
|
77
|
+
async validateInput(): Promise<ValidationResult> {
|
|
78
|
+
// XMem is always enabled by default now
|
|
79
|
+
return { result: true }
|
|
80
|
+
},
|
|
81
|
+
async prompt() {
|
|
82
|
+
return DESCRIPTION
|
|
83
|
+
},
|
|
84
|
+
renderToolUseMessage(input) {
|
|
85
|
+
return `Searching XMem memory: "${input.query.substring(0, 60)}${input.query.length > 60 ? '...' : ''}"`
|
|
86
|
+
},
|
|
87
|
+
renderToolUseErrorMessage() {
|
|
88
|
+
return React.createElement(Text, null, `Failed to search memories`);
|
|
89
|
+
},
|
|
90
|
+
renderToolResultMessage(output) {
|
|
91
|
+
if (!output.success) {
|
|
92
|
+
return React.createElement(Text, { color: 'error' }, `❌ Failed: ${output.message}`);
|
|
93
|
+
}
|
|
94
|
+
if (output.count === 0) {
|
|
95
|
+
return React.createElement(Text, null, `No memories found matching the query`);
|
|
96
|
+
}
|
|
97
|
+
return React.createElement(Text, null, `✅ Found ${output.count} memory result${output.count > 1 ? 's' : ''}`);
|
|
98
|
+
},
|
|
99
|
+
async call(input) {
|
|
100
|
+
console.error(`[XMem Search] Query: "${input.query.substring(0, 50)}..."`)
|
|
101
|
+
|
|
102
|
+
const start = Date.now()
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
const result = await xmemClient.search({
|
|
106
|
+
query: input.query,
|
|
107
|
+
user_id: 'default_user',
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
const duration = Date.now() - start
|
|
111
|
+
console.error(`[XMem Search] ✅ Found ${result.results.length} results in ${duration}ms`)
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
data: {
|
|
115
|
+
success: true,
|
|
116
|
+
results: result.results.map(r => ({
|
|
117
|
+
content: r.content,
|
|
118
|
+
score: r.score,
|
|
119
|
+
})),
|
|
120
|
+
count: result.results.length,
|
|
121
|
+
message: `Found ${result.results.length} memories`,
|
|
122
|
+
},
|
|
123
|
+
}
|
|
124
|
+
} catch (error) {
|
|
125
|
+
const errorMsg = error instanceof Error ? error.message : String(error)
|
|
126
|
+
console.error(`[XMem Search] ❌ Failed: ${errorMsg}`)
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
data: {
|
|
130
|
+
success: false,
|
|
131
|
+
results: [],
|
|
132
|
+
count: 0,
|
|
133
|
+
message: `Failed to search memories: ${errorMsg}`,
|
|
134
|
+
},
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
mapToolResultToToolResultBlockParam(output, toolUseID) {
|
|
139
|
+
if (!output.success) {
|
|
140
|
+
return {
|
|
141
|
+
tool_use_id: toolUseID,
|
|
142
|
+
type: 'tool_result',
|
|
143
|
+
content: `Error: ${output.message}`,
|
|
144
|
+
is_error: true,
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (output.count === 0) {
|
|
149
|
+
return {
|
|
150
|
+
tool_use_id: toolUseID,
|
|
151
|
+
type: 'tool_result',
|
|
152
|
+
content: 'No memories found matching this search query.',
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const content = [
|
|
157
|
+
`Found ${output.count} memory result${output.count > 1 ? 's' : ''}:`,
|
|
158
|
+
'',
|
|
159
|
+
...output.results.map((r, i) => {
|
|
160
|
+
const prefix = `[${i + 1}]`
|
|
161
|
+
const score = r.score ? ` (score: ${r.score.toFixed(2)})` : ''
|
|
162
|
+
return `${prefix}${score} ${r.content}`
|
|
163
|
+
}),
|
|
164
|
+
].join('\n')
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
tool_use_id: toolUseID,
|
|
168
|
+
type: 'tool_result',
|
|
169
|
+
content,
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
} satisfies ToolDef<InputSchema, Output>)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const XMEM_SEARCH_TOOL_NAME = 'XMemSearch'
|
|
2
|
+
|
|
3
|
+
export const DESCRIPTION = `Search through all stored memories in XMem to find specific information.
|
|
4
|
+
|
|
5
|
+
Use this tool when:
|
|
6
|
+
- The user asks "what do you remember about..." or "tell me what you know about..."
|
|
7
|
+
- You need to explore memories without immediately using them in a response
|
|
8
|
+
- Debugging what memories are available
|
|
9
|
+
- The user wants to verify what has been saved
|
|
10
|
+
|
|
11
|
+
This searches the full memory index and returns all matching entries, useful for memory exploration and verification.`
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell-agnostic git operation tracking for usage metrics.
|
|
3
|
+
*
|
|
4
|
+
* Detects `git commit`, `git push`, `gh pr create`, `glab mr create`, and
|
|
5
|
+
* curl-based PR creation in command strings, then increments OTLP counters
|
|
6
|
+
* and fires analytics events. The regexes operate on raw command text so they
|
|
7
|
+
* work identically for Bash and PowerShell (both invoke git/gh/glab/curl as
|
|
8
|
+
* external binaries with the same argv syntax).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { getCommitCounter, getPrCounter } from '../../bootstrap/state.js'
|
|
12
|
+
import {
|
|
13
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
14
|
+
logEvent,
|
|
15
|
+
} from '../../services/analytics/index.js'
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Build a regex that matches `git <subcmd>` while tolerating git's global
|
|
19
|
+
* options between `git` and the subcommand (e.g. `-c key=val`, `-C path`,
|
|
20
|
+
* `--git-dir=path`). Common when the model retries with
|
|
21
|
+
* `git -c commit.gpgsign=false commit` after a signing failure.
|
|
22
|
+
*/
|
|
23
|
+
function gitCmdRe(subcmd: string, suffix = ''): RegExp {
|
|
24
|
+
return new RegExp(
|
|
25
|
+
`\\bgit(?:\\s+-[cC]\\s+\\S+|\\s+--\\S+=\\S+)*\\s+${subcmd}\\b${suffix}`,
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const GIT_COMMIT_RE = gitCmdRe('commit')
|
|
30
|
+
const GIT_PUSH_RE = gitCmdRe('push')
|
|
31
|
+
const GIT_CHERRY_PICK_RE = gitCmdRe('cherry-pick')
|
|
32
|
+
const GIT_MERGE_RE = gitCmdRe('merge', '(?!-)')
|
|
33
|
+
const GIT_REBASE_RE = gitCmdRe('rebase')
|
|
34
|
+
|
|
35
|
+
export type CommitKind = 'committed' | 'amended' | 'cherry-picked'
|
|
36
|
+
export type BranchAction = 'merged' | 'rebased'
|
|
37
|
+
export type PrAction =
|
|
38
|
+
| 'created'
|
|
39
|
+
| 'edited'
|
|
40
|
+
| 'merged'
|
|
41
|
+
| 'commented'
|
|
42
|
+
| 'closed'
|
|
43
|
+
| 'ready'
|
|
44
|
+
|
|
45
|
+
const GH_PR_ACTIONS: readonly { re: RegExp; action: PrAction; op: string }[] = [
|
|
46
|
+
{ re: /\bgh\s+pr\s+create\b/, action: 'created', op: 'pr_create' },
|
|
47
|
+
{ re: /\bgh\s+pr\s+edit\b/, action: 'edited', op: 'pr_edit' },
|
|
48
|
+
{ re: /\bgh\s+pr\s+merge\b/, action: 'merged', op: 'pr_merge' },
|
|
49
|
+
{ re: /\bgh\s+pr\s+comment\b/, action: 'commented', op: 'pr_comment' },
|
|
50
|
+
{ re: /\bgh\s+pr\s+close\b/, action: 'closed', op: 'pr_close' },
|
|
51
|
+
{ re: /\bgh\s+pr\s+ready\b/, action: 'ready', op: 'pr_ready' },
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Parse PR info from a GitHub PR URL.
|
|
56
|
+
* Returns { prNumber, prUrl, prRepository } or null if not a valid PR URL.
|
|
57
|
+
*/
|
|
58
|
+
function parsePrUrl(
|
|
59
|
+
url: string,
|
|
60
|
+
): { prNumber: number; prUrl: string; prRepository: string } | null {
|
|
61
|
+
const match = url.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/pull\/(\d+)/)
|
|
62
|
+
if (match?.[1] && match?.[2]) {
|
|
63
|
+
return {
|
|
64
|
+
prNumber: parseInt(match[2], 10),
|
|
65
|
+
prUrl: url,
|
|
66
|
+
prRepository: match[1],
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Find a GitHub PR URL embedded anywhere in stdout and parse it. */
|
|
73
|
+
function findPrInStdout(stdout: string): ReturnType<typeof parsePrUrl> {
|
|
74
|
+
const m = stdout.match(/https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/pull\/\d+/)
|
|
75
|
+
return m ? parsePrUrl(m[0]) : null
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Exported for testing purposes
|
|
79
|
+
export function parseGitCommitId(stdout: string): string | undefined {
|
|
80
|
+
// git commit output: [branch abc1234] message
|
|
81
|
+
// or for root commit: [branch (root-commit) abc1234] message
|
|
82
|
+
const match = stdout.match(/\[[\w./-]+(?: \(root-commit\))? ([0-9a-f]+)\]/)
|
|
83
|
+
return match?.[1]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Parse branch name from git push output. Push writes progress to stderr but
|
|
88
|
+
* the ref update line ("abc..def branch -> branch", "* [new branch]
|
|
89
|
+
* branch -> branch", or " + abc...def branch -> branch (forced update)") is
|
|
90
|
+
* the signal. Works on either stdout or stderr. Git prefixes each ref line
|
|
91
|
+
* with a status flag (space, +, -, *, !, =); the char class tolerates any.
|
|
92
|
+
*/
|
|
93
|
+
function parseGitPushBranch(output: string): string | undefined {
|
|
94
|
+
const match = output.match(
|
|
95
|
+
/^\s*[+\-*!= ]?\s*(?:\[new branch\]|\S+\.\.+\S+)\s+\S+\s*->\s*(\S+)/m,
|
|
96
|
+
)
|
|
97
|
+
return match?.[1]
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* gh pr merge/close/ready print "✓ <Verb> pull request owner/repo#1234" with
|
|
102
|
+
* no URL. Extract the PR number from the text.
|
|
103
|
+
*/
|
|
104
|
+
function parsePrNumberFromText(stdout: string): number | undefined {
|
|
105
|
+
const match = stdout.match(/[Pp]ull request (?:\S+#)?#?(\d+)/)
|
|
106
|
+
return match?.[1] ? parseInt(match[1], 10) : undefined
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Extract target ref from `git merge <ref>` / `git rebase <ref>` command.
|
|
111
|
+
* Skips flags and keywords — first non-flag argument is the ref.
|
|
112
|
+
*/
|
|
113
|
+
function parseRefFromCommand(
|
|
114
|
+
command: string,
|
|
115
|
+
verb: string,
|
|
116
|
+
): string | undefined {
|
|
117
|
+
const after = command.split(gitCmdRe(verb))[1]
|
|
118
|
+
if (!after) return undefined
|
|
119
|
+
for (const t of after.trim().split(/\s+/)) {
|
|
120
|
+
if (/^[&|;><]/.test(t)) break
|
|
121
|
+
if (t.startsWith('-')) continue
|
|
122
|
+
return t
|
|
123
|
+
}
|
|
124
|
+
return undefined
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Scan bash command + output for git operations worth surfacing in the
|
|
129
|
+
* collapsed tool-use summary ("committed a1b2c3, created PR #42, ran 3 bash
|
|
130
|
+
* commands"). Checks the command to avoid matching SHAs/URLs that merely
|
|
131
|
+
* appear in unrelated output (e.g. `git log`).
|
|
132
|
+
*
|
|
133
|
+
* Pass stdout+stderr concatenated — git push writes the ref update to stderr.
|
|
134
|
+
*/
|
|
135
|
+
export function detectGitOperation(
|
|
136
|
+
command: string,
|
|
137
|
+
output: string,
|
|
138
|
+
): {
|
|
139
|
+
commit?: { sha: string; kind: CommitKind }
|
|
140
|
+
push?: { branch: string }
|
|
141
|
+
branch?: { ref: string; action: BranchAction }
|
|
142
|
+
pr?: { number: number; url?: string; action: PrAction }
|
|
143
|
+
} {
|
|
144
|
+
const result: ReturnType<typeof detectGitOperation> = {}
|
|
145
|
+
// commit and cherry-pick both produce "[branch sha] msg" output
|
|
146
|
+
const isCherryPick = GIT_CHERRY_PICK_RE.test(command)
|
|
147
|
+
if (GIT_COMMIT_RE.test(command) || isCherryPick) {
|
|
148
|
+
const sha = parseGitCommitId(output)
|
|
149
|
+
if (sha) {
|
|
150
|
+
result.commit = {
|
|
151
|
+
sha: sha.slice(0, 6),
|
|
152
|
+
kind: isCherryPick
|
|
153
|
+
? 'cherry-picked'
|
|
154
|
+
: /--amend\b/.test(command)
|
|
155
|
+
? 'amended'
|
|
156
|
+
: 'committed',
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (GIT_PUSH_RE.test(command)) {
|
|
161
|
+
const branch = parseGitPushBranch(output)
|
|
162
|
+
if (branch) result.push = { branch }
|
|
163
|
+
}
|
|
164
|
+
if (
|
|
165
|
+
GIT_MERGE_RE.test(command) &&
|
|
166
|
+
/(Fast-forward|Merge made by)/.test(output)
|
|
167
|
+
) {
|
|
168
|
+
const ref = parseRefFromCommand(command, 'merge')
|
|
169
|
+
if (ref) result.branch = { ref, action: 'merged' }
|
|
170
|
+
}
|
|
171
|
+
if (GIT_REBASE_RE.test(command) && /Successfully rebased/.test(output)) {
|
|
172
|
+
const ref = parseRefFromCommand(command, 'rebase')
|
|
173
|
+
if (ref) result.branch = { ref, action: 'rebased' }
|
|
174
|
+
}
|
|
175
|
+
const prAction = GH_PR_ACTIONS.find(a => a.re.test(command))?.action
|
|
176
|
+
if (prAction) {
|
|
177
|
+
const pr = findPrInStdout(output)
|
|
178
|
+
if (pr) {
|
|
179
|
+
result.pr = { number: pr.prNumber, url: pr.prUrl, action: prAction }
|
|
180
|
+
} else {
|
|
181
|
+
const num = parsePrNumberFromText(output)
|
|
182
|
+
if (num) result.pr = { number: num, action: prAction }
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return result
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Exported for testing purposes
|
|
189
|
+
export function trackGitOperations(
|
|
190
|
+
command: string,
|
|
191
|
+
exitCode: number,
|
|
192
|
+
stdout?: string,
|
|
193
|
+
): void {
|
|
194
|
+
const success = exitCode === 0
|
|
195
|
+
if (!success) {
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (GIT_COMMIT_RE.test(command)) {
|
|
200
|
+
logEvent('tengu_git_operation', {
|
|
201
|
+
operation:
|
|
202
|
+
'commit' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
203
|
+
})
|
|
204
|
+
if (command.match(/--amend\b/)) {
|
|
205
|
+
logEvent('tengu_git_operation', {
|
|
206
|
+
operation:
|
|
207
|
+
'commit_amend' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
208
|
+
})
|
|
209
|
+
}
|
|
210
|
+
getCommitCounter()?.add(1)
|
|
211
|
+
}
|
|
212
|
+
if (GIT_PUSH_RE.test(command)) {
|
|
213
|
+
logEvent('tengu_git_operation', {
|
|
214
|
+
operation:
|
|
215
|
+
'push' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
const prHit = GH_PR_ACTIONS.find(a => a.re.test(command))
|
|
219
|
+
if (prHit) {
|
|
220
|
+
logEvent('tengu_git_operation', {
|
|
221
|
+
operation:
|
|
222
|
+
prHit.op as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
223
|
+
})
|
|
224
|
+
}
|
|
225
|
+
if (prHit?.action === 'created') {
|
|
226
|
+
getPrCounter()?.add(1)
|
|
227
|
+
// Auto-link session to PR if we can extract PR URL from stdout
|
|
228
|
+
if (stdout) {
|
|
229
|
+
const prInfo = findPrInStdout(stdout)
|
|
230
|
+
if (prInfo) {
|
|
231
|
+
// Import is done dynamically to avoid circular dependency
|
|
232
|
+
void import('../../utils/sessionStorage.js').then(
|
|
233
|
+
({ linkSessionToPR }) => {
|
|
234
|
+
void import('../../bootstrap/state.js').then(({ getSessionId }) => {
|
|
235
|
+
const sessionId = getSessionId()
|
|
236
|
+
if (sessionId) {
|
|
237
|
+
void linkSessionToPR(
|
|
238
|
+
sessionId as `${string}-${string}-${string}-${string}-${string}`,
|
|
239
|
+
prInfo.prNumber,
|
|
240
|
+
prInfo.prUrl,
|
|
241
|
+
prInfo.prRepository,
|
|
242
|
+
)
|
|
243
|
+
}
|
|
244
|
+
})
|
|
245
|
+
},
|
|
246
|
+
)
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (command.match(/\bglab\s+mr\s+create\b/)) {
|
|
251
|
+
logEvent('tengu_git_operation', {
|
|
252
|
+
operation:
|
|
253
|
+
'pr_create' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
254
|
+
})
|
|
255
|
+
getPrCounter()?.add(1)
|
|
256
|
+
}
|
|
257
|
+
// Detect PR creation via curl to REST APIs (Bitbucket, GitHub API, GitLab API)
|
|
258
|
+
// Check for POST method and PR endpoint separately to handle any argument order
|
|
259
|
+
// Also detect implicit POST when -d is used (curl defaults to POST with data)
|
|
260
|
+
const isCurlPost =
|
|
261
|
+
command.match(/\bcurl\b/) &&
|
|
262
|
+
(command.match(/-X\s*POST\b/i) ||
|
|
263
|
+
command.match(/--request\s*=?\s*POST\b/i) ||
|
|
264
|
+
command.match(/\s-d\s/))
|
|
265
|
+
// Match PR endpoints in URLs, but not sub-resources like /pulls/123/comments
|
|
266
|
+
// Require https?:// prefix to avoid matching text in POST body or other params
|
|
267
|
+
const isPrEndpoint = command.match(
|
|
268
|
+
/https?:\/\/[^\s'"]*\/(pulls|pull-requests|merge[-_]requests)(?!\/\d)/i,
|
|
269
|
+
)
|
|
270
|
+
if (isCurlPost && isPrEndpoint) {
|
|
271
|
+
logEvent('tengu_git_operation', {
|
|
272
|
+
operation:
|
|
273
|
+
'pr_create' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
274
|
+
})
|
|
275
|
+
getPrCounter()?.add(1)
|
|
276
|
+
}
|
|
277
|
+
}
|