@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,71 @@
|
|
|
1
|
+
import { createHash } from 'crypto'
|
|
2
|
+
import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from 'src/services/analytics/index.js'
|
|
3
|
+
import { logEvent } from 'src/services/analytics/index.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Creates a truncated SHA256 hash (16 chars) for file paths
|
|
7
|
+
* Used for privacy-preserving analytics on file operations
|
|
8
|
+
*/
|
|
9
|
+
function hashFilePath(
|
|
10
|
+
filePath: string,
|
|
11
|
+
): AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS {
|
|
12
|
+
return createHash('sha256')
|
|
13
|
+
.update(filePath)
|
|
14
|
+
.digest('hex')
|
|
15
|
+
.slice(0, 16) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates a full SHA256 hash (64 chars) for file contents
|
|
20
|
+
* Used for deduplication and change detection analytics
|
|
21
|
+
*/
|
|
22
|
+
function hashFileContent(
|
|
23
|
+
content: string,
|
|
24
|
+
): AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS {
|
|
25
|
+
return createHash('sha256')
|
|
26
|
+
.update(content)
|
|
27
|
+
.digest('hex') as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Maximum content size to hash (100KB)
|
|
31
|
+
// Prevents memory exhaustion when hashing large files (e.g., base64-encoded images)
|
|
32
|
+
const MAX_CONTENT_HASH_SIZE = 100 * 1024
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Logs file operation analytics to Statsig
|
|
36
|
+
*/
|
|
37
|
+
export function logFileOperation(params: {
|
|
38
|
+
operation: 'read' | 'write' | 'edit'
|
|
39
|
+
tool: 'FileReadTool' | 'FileWriteTool' | 'FileEditTool'
|
|
40
|
+
filePath: string
|
|
41
|
+
content?: string
|
|
42
|
+
type?: 'create' | 'update'
|
|
43
|
+
}): void {
|
|
44
|
+
const metadata: Record<
|
|
45
|
+
string,
|
|
46
|
+
| AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
47
|
+
| number
|
|
48
|
+
| boolean
|
|
49
|
+
> = {
|
|
50
|
+
operation:
|
|
51
|
+
params.operation as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
52
|
+
tool: params.tool as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
53
|
+
filePathHash: hashFilePath(params.filePath),
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Only hash content if it's provided and below size limit
|
|
57
|
+
// This prevents memory exhaustion from hashing large files (e.g., base64-encoded images)
|
|
58
|
+
if (
|
|
59
|
+
params.content !== undefined &&
|
|
60
|
+
params.content.length <= MAX_CONTENT_HASH_SIZE
|
|
61
|
+
) {
|
|
62
|
+
metadata.contentHash = hashFileContent(params.content)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (params.type !== undefined) {
|
|
66
|
+
metadata.type =
|
|
67
|
+
params.type as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
logEvent('tengu_file_operation', metadata)
|
|
71
|
+
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File persistence orchestrator
|
|
3
|
+
*
|
|
4
|
+
* This module provides the main orchestration logic for persisting files
|
|
5
|
+
* at the end of each turn:
|
|
6
|
+
* - BYOC mode: Upload files to Files API and collect file IDs
|
|
7
|
+
* - 1P/Cloud mode: Query Files API listDirectory for file IDs (rclone handles sync)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { feature } from 'bun:bundle'
|
|
11
|
+
import { join, relative } from 'path'
|
|
12
|
+
import {
|
|
13
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
14
|
+
logEvent,
|
|
15
|
+
} from '../../services/analytics/index.js'
|
|
16
|
+
import {
|
|
17
|
+
type FilesApiConfig,
|
|
18
|
+
uploadSessionFiles,
|
|
19
|
+
} from '../../services/api/filesApi.js'
|
|
20
|
+
import { getCwd } from '../cwd.js'
|
|
21
|
+
import { errorMessage } from '../errors.js'
|
|
22
|
+
import { logError } from '../log.js'
|
|
23
|
+
import { getSessionIngressAuthToken } from '../sessionIngressAuth.js'
|
|
24
|
+
import {
|
|
25
|
+
findModifiedFiles,
|
|
26
|
+
getEnvironmentKind,
|
|
27
|
+
logDebug,
|
|
28
|
+
} from './outputsScanner.js'
|
|
29
|
+
import {
|
|
30
|
+
DEFAULT_UPLOAD_CONCURRENCY,
|
|
31
|
+
type FailedPersistence,
|
|
32
|
+
FILE_COUNT_LIMIT,
|
|
33
|
+
type FilesPersistedEventData,
|
|
34
|
+
OUTPUTS_SUBDIR,
|
|
35
|
+
type PersistedFile,
|
|
36
|
+
type TurnStartTime,
|
|
37
|
+
} from './types.js'
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Execute file persistence for modified files in the outputs directory.
|
|
41
|
+
*
|
|
42
|
+
* Assembles all config internally:
|
|
43
|
+
* - Checks environment kind (CLAUDE_CODE_ENVIRONMENT_KIND)
|
|
44
|
+
* - Retrieves session access token
|
|
45
|
+
* - Requires CLAUDE_CODE_REMOTE_SESSION_ID for session ID
|
|
46
|
+
*
|
|
47
|
+
* @param turnStartTime - The timestamp when the turn started
|
|
48
|
+
* @param signal - Optional abort signal for cancellation
|
|
49
|
+
* @returns Event data, or null if not enabled or no files to persist
|
|
50
|
+
*/
|
|
51
|
+
export async function runFilePersistence(
|
|
52
|
+
turnStartTime: TurnStartTime,
|
|
53
|
+
signal?: AbortSignal,
|
|
54
|
+
): Promise<FilesPersistedEventData | null> {
|
|
55
|
+
const environmentKind = getEnvironmentKind()
|
|
56
|
+
if (environmentKind !== 'byoc') {
|
|
57
|
+
return null
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const sessionAccessToken = getSessionIngressAuthToken()
|
|
61
|
+
if (!sessionAccessToken) {
|
|
62
|
+
return null
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const sessionId = process.env.CLAUDE_CODE_REMOTE_SESSION_ID
|
|
66
|
+
if (!sessionId) {
|
|
67
|
+
logError(
|
|
68
|
+
new Error(
|
|
69
|
+
'File persistence enabled but CLAUDE_CODE_REMOTE_SESSION_ID is not set',
|
|
70
|
+
),
|
|
71
|
+
)
|
|
72
|
+
return null
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const config: FilesApiConfig = {
|
|
76
|
+
oauthToken: sessionAccessToken,
|
|
77
|
+
sessionId,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const outputsDir = join(getCwd(), sessionId, OUTPUTS_SUBDIR)
|
|
81
|
+
|
|
82
|
+
// Check if aborted
|
|
83
|
+
if (signal?.aborted) {
|
|
84
|
+
logDebug('Persistence aborted before processing')
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const startTime = Date.now()
|
|
89
|
+
logEvent('tengu_file_persistence_started', {
|
|
90
|
+
mode: environmentKind as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
let result: FilesPersistedEventData
|
|
95
|
+
if (environmentKind === 'byoc') {
|
|
96
|
+
result = await executeBYOCPersistence(
|
|
97
|
+
turnStartTime,
|
|
98
|
+
config,
|
|
99
|
+
outputsDir,
|
|
100
|
+
signal,
|
|
101
|
+
)
|
|
102
|
+
} else {
|
|
103
|
+
result = await executeCloudPersistence()
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Nothing to report
|
|
107
|
+
if (result.files.length === 0 && result.failed.length === 0) {
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const durationMs = Date.now() - startTime
|
|
112
|
+
logEvent('tengu_file_persistence_completed', {
|
|
113
|
+
success_count: result.files.length,
|
|
114
|
+
failure_count: result.failed.length,
|
|
115
|
+
duration_ms: durationMs,
|
|
116
|
+
mode: environmentKind as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
return result
|
|
120
|
+
} catch (error) {
|
|
121
|
+
logError(error)
|
|
122
|
+
logDebug(`File persistence failed: ${error}`)
|
|
123
|
+
|
|
124
|
+
const durationMs = Date.now() - startTime
|
|
125
|
+
logEvent('tengu_file_persistence_completed', {
|
|
126
|
+
success_count: 0,
|
|
127
|
+
failure_count: 0,
|
|
128
|
+
duration_ms: durationMs,
|
|
129
|
+
mode: environmentKind as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
130
|
+
error:
|
|
131
|
+
'exception' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
files: [],
|
|
136
|
+
failed: [
|
|
137
|
+
{
|
|
138
|
+
filename: outputsDir,
|
|
139
|
+
error: errorMessage(error),
|
|
140
|
+
},
|
|
141
|
+
],
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Execute BYOC mode persistence: scan local filesystem for modified files,
|
|
148
|
+
* then upload to Files API.
|
|
149
|
+
*/
|
|
150
|
+
async function executeBYOCPersistence(
|
|
151
|
+
turnStartTime: TurnStartTime,
|
|
152
|
+
config: FilesApiConfig,
|
|
153
|
+
outputsDir: string,
|
|
154
|
+
signal?: AbortSignal,
|
|
155
|
+
): Promise<FilesPersistedEventData> {
|
|
156
|
+
// Find modified files via local filesystem scan
|
|
157
|
+
// Uses same directory structure as downloads: {cwd}/{sessionId}/outputs
|
|
158
|
+
const modifiedFiles = await findModifiedFiles(turnStartTime, outputsDir)
|
|
159
|
+
|
|
160
|
+
if (modifiedFiles.length === 0) {
|
|
161
|
+
logDebug('No modified files to persist')
|
|
162
|
+
return { files: [], failed: [] }
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
logDebug(`Found ${modifiedFiles.length} modified files`)
|
|
166
|
+
|
|
167
|
+
if (signal?.aborted) {
|
|
168
|
+
return { files: [], failed: [] }
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Enforce file count limit
|
|
172
|
+
if (modifiedFiles.length > FILE_COUNT_LIMIT) {
|
|
173
|
+
logDebug(
|
|
174
|
+
`File count limit exceeded: ${modifiedFiles.length} > ${FILE_COUNT_LIMIT}`,
|
|
175
|
+
)
|
|
176
|
+
logEvent('tengu_file_persistence_limit_exceeded', {
|
|
177
|
+
file_count: modifiedFiles.length,
|
|
178
|
+
limit: FILE_COUNT_LIMIT,
|
|
179
|
+
})
|
|
180
|
+
return {
|
|
181
|
+
files: [],
|
|
182
|
+
failed: [
|
|
183
|
+
{
|
|
184
|
+
filename: outputsDir,
|
|
185
|
+
error: `Too many files modified (${modifiedFiles.length}). Maximum: ${FILE_COUNT_LIMIT}.`,
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const filesToProcess = modifiedFiles
|
|
192
|
+
.map(filePath => ({
|
|
193
|
+
path: filePath,
|
|
194
|
+
relativePath: relative(outputsDir, filePath),
|
|
195
|
+
}))
|
|
196
|
+
.filter(({ relativePath }) => {
|
|
197
|
+
// Security: skip files that resolve outside the outputs directory
|
|
198
|
+
if (relativePath.startsWith('..')) {
|
|
199
|
+
logDebug(`Skipping file outside outputs directory: ${relativePath}`)
|
|
200
|
+
return false
|
|
201
|
+
}
|
|
202
|
+
return true
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
logDebug(`BYOC mode: uploading ${filesToProcess.length} files`)
|
|
206
|
+
|
|
207
|
+
// Upload files in parallel
|
|
208
|
+
const results = await uploadSessionFiles(
|
|
209
|
+
filesToProcess,
|
|
210
|
+
config,
|
|
211
|
+
DEFAULT_UPLOAD_CONCURRENCY,
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
// Separate successful and failed uploads
|
|
215
|
+
const persistedFiles: PersistedFile[] = []
|
|
216
|
+
const failedFiles: FailedPersistence[] = []
|
|
217
|
+
|
|
218
|
+
for (const result of results) {
|
|
219
|
+
if (result.success) {
|
|
220
|
+
persistedFiles.push({
|
|
221
|
+
filename: result.path,
|
|
222
|
+
file_id: result.fileId,
|
|
223
|
+
})
|
|
224
|
+
} else {
|
|
225
|
+
failedFiles.push({
|
|
226
|
+
filename: result.path,
|
|
227
|
+
error: result.error,
|
|
228
|
+
})
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
logDebug(
|
|
233
|
+
`BYOC persistence complete: ${persistedFiles.length} uploaded, ${failedFiles.length} failed`,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
return {
|
|
237
|
+
files: persistedFiles,
|
|
238
|
+
failed: failedFiles,
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Execute Cloud (1P) mode persistence.
|
|
244
|
+
* TODO: Read file_id from xattr on output files. xattr-based file IDs are
|
|
245
|
+
* currently being added for 1P environments.
|
|
246
|
+
*/
|
|
247
|
+
function executeCloudPersistence(): FilesPersistedEventData {
|
|
248
|
+
logDebug('Cloud mode: xattr-based file ID reading not yet implemented')
|
|
249
|
+
return { files: [], failed: [] }
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Execute file persistence and emit result via callback.
|
|
254
|
+
* Handles errors internally.
|
|
255
|
+
*/
|
|
256
|
+
export async function executeFilePersistence(
|
|
257
|
+
turnStartTime: TurnStartTime,
|
|
258
|
+
signal: AbortSignal,
|
|
259
|
+
onResult: (result: FilesPersistedEventData) => void,
|
|
260
|
+
): Promise<void> {
|
|
261
|
+
try {
|
|
262
|
+
const result = await runFilePersistence(turnStartTime, signal)
|
|
263
|
+
if (result) {
|
|
264
|
+
onResult(result)
|
|
265
|
+
}
|
|
266
|
+
} catch (error) {
|
|
267
|
+
logError(error)
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Check if file persistence is enabled.
|
|
273
|
+
* Requires: feature flag ON, valid environment kind, session access token,
|
|
274
|
+
* and CLAUDE_CODE_REMOTE_SESSION_ID.
|
|
275
|
+
* This ensures only public-api/sessions users trigger file persistence,
|
|
276
|
+
* not normal Claude Code CLI users.
|
|
277
|
+
*/
|
|
278
|
+
export function isFilePersistenceEnabled(): boolean {
|
|
279
|
+
if (feature('FILE_PERSISTENCE')) {
|
|
280
|
+
return (
|
|
281
|
+
getEnvironmentKind() === 'byoc' &&
|
|
282
|
+
!!getSessionIngressAuthToken() &&
|
|
283
|
+
!!process.env.CLAUDE_CODE_REMOTE_SESSION_ID
|
|
284
|
+
)
|
|
285
|
+
}
|
|
286
|
+
return false
|
|
287
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outputs directory scanner for file persistence
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities to:
|
|
5
|
+
* - Detect the session type from environment variables
|
|
6
|
+
* - Capture turn start timestamp
|
|
7
|
+
* - Find modified files by comparing file mtimes against turn start time
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as fs from 'fs/promises'
|
|
11
|
+
import * as path from 'path'
|
|
12
|
+
import { logForDebugging } from '../debug.js'
|
|
13
|
+
import type { EnvironmentKind } from '../teleport/environments.js'
|
|
14
|
+
import type { TurnStartTime } from './types.js'
|
|
15
|
+
|
|
16
|
+
/** Shared debug logger for file persistence modules */
|
|
17
|
+
export function logDebug(message: string): void {
|
|
18
|
+
logForDebugging(`[file-persistence] ${message}`)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Get the environment kind from CLAUDE_CODE_ENVIRONMENT_KIND.
|
|
23
|
+
* Returns null if not set or not a recognized value.
|
|
24
|
+
*/
|
|
25
|
+
export function getEnvironmentKind(): EnvironmentKind | null {
|
|
26
|
+
const kind = process.env.CLAUDE_CODE_ENVIRONMENT_KIND
|
|
27
|
+
if (kind === 'byoc' || kind === 'anthropic_cloud') {
|
|
28
|
+
return kind
|
|
29
|
+
}
|
|
30
|
+
return null
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function hasParentPath(
|
|
34
|
+
entry: object,
|
|
35
|
+
): entry is { parentPath: string; name: string } {
|
|
36
|
+
return 'parentPath' in entry && typeof entry.parentPath === 'string'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function hasPath(entry: object): entry is { path: string; name: string } {
|
|
40
|
+
return 'path' in entry && typeof entry.path === 'string'
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getEntryParentPath(entry: object, fallback: string): string {
|
|
44
|
+
if (hasParentPath(entry)) {
|
|
45
|
+
return entry.parentPath
|
|
46
|
+
}
|
|
47
|
+
if (hasPath(entry)) {
|
|
48
|
+
return entry.path
|
|
49
|
+
}
|
|
50
|
+
return fallback
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Find files that have been modified since the turn started.
|
|
55
|
+
* Returns paths of files with mtime >= turnStartTime.
|
|
56
|
+
*
|
|
57
|
+
* Uses recursive directory listing and parallelized stat calls for efficiency.
|
|
58
|
+
*
|
|
59
|
+
* @param turnStartTime - The timestamp when the turn started
|
|
60
|
+
* @param outputsDir - The directory to scan for modified files
|
|
61
|
+
*/
|
|
62
|
+
export async function findModifiedFiles(
|
|
63
|
+
turnStartTime: TurnStartTime,
|
|
64
|
+
outputsDir: string,
|
|
65
|
+
): Promise<string[]> {
|
|
66
|
+
// Use recursive flag to get all entries in one call
|
|
67
|
+
let entries: Awaited<ReturnType<typeof fs.readdir>>
|
|
68
|
+
try {
|
|
69
|
+
entries = await fs.readdir(outputsDir, {
|
|
70
|
+
withFileTypes: true,
|
|
71
|
+
recursive: true,
|
|
72
|
+
})
|
|
73
|
+
} catch {
|
|
74
|
+
// Directory doesn't exist or is not accessible
|
|
75
|
+
return []
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Filter to regular files only (skip symlinks for security) and build full paths
|
|
79
|
+
const filePaths: string[] = []
|
|
80
|
+
for (const entry of entries) {
|
|
81
|
+
if (entry.isSymbolicLink()) {
|
|
82
|
+
continue
|
|
83
|
+
}
|
|
84
|
+
if (entry.isFile()) {
|
|
85
|
+
// entry.parentPath is available in Node 20+, fallback to entry.path for older versions
|
|
86
|
+
const parentPath = getEntryParentPath(entry, outputsDir)
|
|
87
|
+
filePaths.push(path.join(parentPath, entry.name))
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (filePaths.length === 0) {
|
|
92
|
+
logDebug('No files found in outputs directory')
|
|
93
|
+
return []
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Parallelize stat calls for all files
|
|
97
|
+
const statResults = await Promise.all(
|
|
98
|
+
filePaths.map(async filePath => {
|
|
99
|
+
try {
|
|
100
|
+
const stat = await fs.lstat(filePath)
|
|
101
|
+
// Skip if it became a symlink between readdir and stat (race condition)
|
|
102
|
+
if (stat.isSymbolicLink()) {
|
|
103
|
+
return null
|
|
104
|
+
}
|
|
105
|
+
return { filePath, mtimeMs: stat.mtimeMs }
|
|
106
|
+
} catch {
|
|
107
|
+
// File may have been deleted between readdir and stat
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
}),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
// Filter to files modified since turn start
|
|
114
|
+
const modifiedFiles: string[] = []
|
|
115
|
+
for (const result of statResults) {
|
|
116
|
+
if (result && result.mtimeMs >= turnStartTime) {
|
|
117
|
+
modifiedFiles.push(result.filePath)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
logDebug(
|
|
122
|
+
`Found ${modifiedFiles.length} modified files since turn start (scanned ${filePaths.length} total)`,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
return modifiedFiles
|
|
126
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync file-read path, extracted from file.ts.
|
|
3
|
+
*
|
|
4
|
+
* file.ts sits in the settings SCC via log.ts → types/logs.ts → types/message.ts →
|
|
5
|
+
* Tool.ts → commands.ts → … Anything that needs readFileSync from file.ts
|
|
6
|
+
* pulls in the whole chain. This leaf imports only fsOperations and debug,
|
|
7
|
+
* both of which terminate in Node builtins.
|
|
8
|
+
*
|
|
9
|
+
* detectFileEncoding/detectLineEndings stay in file.ts — they call logError
|
|
10
|
+
* (log.ts → SCC) on unexpected failures. The -ForResolvedPath/-ForString
|
|
11
|
+
* helpers here are the pure parts; callers who need the logging wrappers
|
|
12
|
+
* import from file.ts.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { logForDebugging } from './debug.js'
|
|
16
|
+
import { getFsImplementation, safeResolvePath } from './fsOperations.js'
|
|
17
|
+
|
|
18
|
+
export type LineEndingType = 'CRLF' | 'LF'
|
|
19
|
+
|
|
20
|
+
export function detectEncodingForResolvedPath(
|
|
21
|
+
resolvedPath: string,
|
|
22
|
+
): BufferEncoding {
|
|
23
|
+
const { buffer, bytesRead } = getFsImplementation().readSync(resolvedPath, {
|
|
24
|
+
length: 4096,
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
// Empty files should default to utf8, not ascii
|
|
28
|
+
// This fixes a bug where writing emojis/CJK to empty files caused corruption
|
|
29
|
+
if (bytesRead === 0) {
|
|
30
|
+
return 'utf8'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (bytesRead >= 2) {
|
|
34
|
+
if (buffer[0] === 0xff && buffer[1] === 0xfe) return 'utf16le'
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (
|
|
38
|
+
bytesRead >= 3 &&
|
|
39
|
+
buffer[0] === 0xef &&
|
|
40
|
+
buffer[1] === 0xbb &&
|
|
41
|
+
buffer[2] === 0xbf
|
|
42
|
+
) {
|
|
43
|
+
return 'utf8'
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// For non-empty files, default to utf8 since it's a superset of ascii
|
|
47
|
+
// and handles all Unicode characters properly
|
|
48
|
+
return 'utf8'
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function detectLineEndingsForString(content: string): LineEndingType {
|
|
52
|
+
let crlfCount = 0
|
|
53
|
+
let lfCount = 0
|
|
54
|
+
|
|
55
|
+
for (let i = 0; i < content.length; i++) {
|
|
56
|
+
if (content[i] === '\n') {
|
|
57
|
+
if (i > 0 && content[i - 1] === '\r') {
|
|
58
|
+
crlfCount++
|
|
59
|
+
} else {
|
|
60
|
+
lfCount++
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return crlfCount > lfCount ? 'CRLF' : 'LF'
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Like readFileSync but also returns the detected encoding and original line
|
|
70
|
+
* ending style in one filesystem pass. Callers writing the file back (e.g.
|
|
71
|
+
* FileEditTool) can reuse these instead of calling detectFileEncoding /
|
|
72
|
+
* detectLineEndings separately, which would each redo safeResolvePath +
|
|
73
|
+
* readSync(4KB).
|
|
74
|
+
*/
|
|
75
|
+
export function readFileSyncWithMetadata(filePath: string): {
|
|
76
|
+
content: string
|
|
77
|
+
encoding: BufferEncoding
|
|
78
|
+
lineEndings: LineEndingType
|
|
79
|
+
} {
|
|
80
|
+
const fs = getFsImplementation()
|
|
81
|
+
const { resolvedPath, isSymlink } = safeResolvePath(fs, filePath)
|
|
82
|
+
|
|
83
|
+
if (isSymlink) {
|
|
84
|
+
logForDebugging(`Reading through symlink: ${filePath} -> ${resolvedPath}`)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const encoding = detectEncodingForResolvedPath(resolvedPath)
|
|
88
|
+
const raw = fs.readFileSync(resolvedPath, { encoding })
|
|
89
|
+
// Detect line endings from the raw head before CRLF normalization erases
|
|
90
|
+
// the distinction. 4096 code units is ≥ detectLineEndings's 4096-byte
|
|
91
|
+
// readSync sample (line endings are ASCII, so the unit mismatch is moot).
|
|
92
|
+
const lineEndings = detectLineEndingsForString(raw.slice(0, 4096))
|
|
93
|
+
return {
|
|
94
|
+
content: raw.replaceAll('\r\n', '\n'),
|
|
95
|
+
encoding,
|
|
96
|
+
lineEndings,
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function readFileSync(filePath: string): string {
|
|
101
|
+
return readFileSyncWithMetadata(filePath).content
|
|
102
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { detectFileEncoding } from './file.js'
|
|
2
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
3
|
+
|
|
4
|
+
type CachedFileData = {
|
|
5
|
+
content: string
|
|
6
|
+
encoding: BufferEncoding
|
|
7
|
+
mtime: number
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A simple in-memory cache for file contents with automatic invalidation based on modification time.
|
|
12
|
+
* This eliminates redundant file reads in FileEditTool operations.
|
|
13
|
+
*/
|
|
14
|
+
class FileReadCache {
|
|
15
|
+
private cache = new Map<string, CachedFileData>()
|
|
16
|
+
private readonly maxCacheSize = 1000
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Reads a file with caching. Returns both content and encoding.
|
|
20
|
+
* Cache key includes file path and modification time for automatic invalidation.
|
|
21
|
+
*/
|
|
22
|
+
readFile(filePath: string): { content: string; encoding: BufferEncoding } {
|
|
23
|
+
const fs = getFsImplementation()
|
|
24
|
+
|
|
25
|
+
// Get file stats for cache invalidation
|
|
26
|
+
let stats
|
|
27
|
+
try {
|
|
28
|
+
stats = fs.statSync(filePath)
|
|
29
|
+
} catch (error) {
|
|
30
|
+
// File was deleted, remove from cache and re-throw
|
|
31
|
+
this.cache.delete(filePath)
|
|
32
|
+
throw error
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const cacheKey = filePath
|
|
36
|
+
const cachedData = this.cache.get(cacheKey)
|
|
37
|
+
|
|
38
|
+
// Check if we have valid cached data
|
|
39
|
+
if (cachedData && cachedData.mtime === stats.mtimeMs) {
|
|
40
|
+
return {
|
|
41
|
+
content: cachedData.content,
|
|
42
|
+
encoding: cachedData.encoding,
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Cache miss or stale data - read the file
|
|
47
|
+
const encoding = detectFileEncoding(filePath)
|
|
48
|
+
const content = fs
|
|
49
|
+
.readFileSync(filePath, { encoding })
|
|
50
|
+
.replaceAll('\r\n', '\n')
|
|
51
|
+
|
|
52
|
+
// Update cache
|
|
53
|
+
this.cache.set(cacheKey, {
|
|
54
|
+
content,
|
|
55
|
+
encoding,
|
|
56
|
+
mtime: stats.mtimeMs,
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
// Evict oldest entries if cache is too large
|
|
60
|
+
if (this.cache.size > this.maxCacheSize) {
|
|
61
|
+
const firstKey = this.cache.keys().next().value
|
|
62
|
+
if (firstKey) {
|
|
63
|
+
this.cache.delete(firstKey)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return { content, encoding }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Clears the entire cache. Useful for testing or memory management.
|
|
72
|
+
*/
|
|
73
|
+
clear(): void {
|
|
74
|
+
this.cache.clear()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Removes a specific file from the cache.
|
|
79
|
+
*/
|
|
80
|
+
invalidate(filePath: string): void {
|
|
81
|
+
this.cache.delete(filePath)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Gets cache statistics for debugging/monitoring.
|
|
86
|
+
*/
|
|
87
|
+
getStats(): { size: number; entries: string[] } {
|
|
88
|
+
return {
|
|
89
|
+
size: this.cache.size,
|
|
90
|
+
entries: Array.from(this.cache.keys()),
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Export a singleton instance
|
|
96
|
+
export const fileReadCache = new FileReadCache()
|