@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,454 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standalone implementation of listSessions for the Agent SDK.
|
|
3
|
+
*
|
|
4
|
+
* Dependencies are kept minimal and portable — no bootstrap/state.ts,
|
|
5
|
+
* no analytics, no bun:bundle, no module-scope mutable state. This module
|
|
6
|
+
* can be imported safely from the SDK entrypoint without triggering CLI
|
|
7
|
+
* initialization or pulling in expensive dependency chains.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Dirent } from 'fs'
|
|
11
|
+
import { readdir, stat } from 'fs/promises'
|
|
12
|
+
import { basename, join } from 'path'
|
|
13
|
+
import { getWorktreePathsPortable } from './getWorktreePathsPortable.js'
|
|
14
|
+
import type { LiteSessionFile } from './sessionStoragePortable.js'
|
|
15
|
+
import {
|
|
16
|
+
canonicalizePath,
|
|
17
|
+
extractFirstPromptFromHead,
|
|
18
|
+
extractJsonStringField,
|
|
19
|
+
extractLastJsonStringField,
|
|
20
|
+
findProjectDir,
|
|
21
|
+
getProjectsDir,
|
|
22
|
+
MAX_SANITIZED_LENGTH,
|
|
23
|
+
readSessionLite,
|
|
24
|
+
sanitizePath,
|
|
25
|
+
validateUuid,
|
|
26
|
+
} from './sessionStoragePortable.js'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Session metadata returned by listSessions.
|
|
30
|
+
* Contains only data extractable from stat + head/tail reads — no full
|
|
31
|
+
* JSONL parsing required.
|
|
32
|
+
*/
|
|
33
|
+
export type SessionInfo = {
|
|
34
|
+
sessionId: string
|
|
35
|
+
summary: string
|
|
36
|
+
lastModified: number
|
|
37
|
+
fileSize?: number
|
|
38
|
+
customTitle?: string
|
|
39
|
+
firstPrompt?: string
|
|
40
|
+
gitBranch?: string
|
|
41
|
+
cwd?: string
|
|
42
|
+
tag?: string
|
|
43
|
+
/** Epoch ms — from first entry's ISO timestamp. Undefined if unparseable. */
|
|
44
|
+
createdAt?: number
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type ListSessionsOptions = {
|
|
48
|
+
/**
|
|
49
|
+
* Directory to list sessions for. When provided, returns sessions for
|
|
50
|
+
* this project directory (and optionally its git worktrees). When omitted,
|
|
51
|
+
* returns sessions across all projects.
|
|
52
|
+
*/
|
|
53
|
+
dir?: string
|
|
54
|
+
/** Maximum number of sessions to return. */
|
|
55
|
+
limit?: number
|
|
56
|
+
/**
|
|
57
|
+
* Number of sessions to skip from the start of the sorted result set.
|
|
58
|
+
* Use with `limit` for pagination. Defaults to 0.
|
|
59
|
+
*/
|
|
60
|
+
offset?: number
|
|
61
|
+
/**
|
|
62
|
+
* When `dir` is provided and the directory is inside a git repository,
|
|
63
|
+
* include sessions from all git worktree paths. Defaults to `true`.
|
|
64
|
+
*/
|
|
65
|
+
includeWorktrees?: boolean
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Field extraction — shared by listSessionsImpl and getSessionInfoImpl
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Parses SessionInfo fields from a lite session read (head/tail/stat).
|
|
74
|
+
* Returns null for sidechain sessions or metadata-only sessions with no
|
|
75
|
+
* extractable summary.
|
|
76
|
+
*
|
|
77
|
+
* Exported for reuse by getSessionInfoImpl.
|
|
78
|
+
*/
|
|
79
|
+
export function parseSessionInfoFromLite(
|
|
80
|
+
sessionId: string,
|
|
81
|
+
lite: LiteSessionFile,
|
|
82
|
+
projectPath?: string,
|
|
83
|
+
): SessionInfo | null {
|
|
84
|
+
const { head, tail, mtime, size } = lite
|
|
85
|
+
|
|
86
|
+
// Check first line for sidechain sessions
|
|
87
|
+
const firstNewline = head.indexOf('\n')
|
|
88
|
+
const firstLine = firstNewline >= 0 ? head.slice(0, firstNewline) : head
|
|
89
|
+
if (
|
|
90
|
+
firstLine.includes('"isSidechain":true') ||
|
|
91
|
+
firstLine.includes('"isSidechain": true')
|
|
92
|
+
) {
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
// User title (customTitle) wins over AI title (aiTitle); distinct
|
|
96
|
+
// field names mean extractLastJsonStringField naturally disambiguates.
|
|
97
|
+
const customTitle =
|
|
98
|
+
extractLastJsonStringField(tail, 'customTitle') ||
|
|
99
|
+
extractLastJsonStringField(head, 'customTitle') ||
|
|
100
|
+
extractLastJsonStringField(tail, 'aiTitle') ||
|
|
101
|
+
extractLastJsonStringField(head, 'aiTitle') ||
|
|
102
|
+
undefined
|
|
103
|
+
const firstPrompt = extractFirstPromptFromHead(head) || undefined
|
|
104
|
+
// First entry's ISO timestamp → epoch ms. More reliable than
|
|
105
|
+
// stat().birthtime which is unsupported on some filesystems.
|
|
106
|
+
const firstTimestamp = extractJsonStringField(head, 'timestamp')
|
|
107
|
+
let createdAt: number | undefined
|
|
108
|
+
if (firstTimestamp) {
|
|
109
|
+
const parsed = Date.parse(firstTimestamp)
|
|
110
|
+
if (!Number.isNaN(parsed)) createdAt = parsed
|
|
111
|
+
}
|
|
112
|
+
// last-prompt tail entry (captured by extractFirstPrompt at write
|
|
113
|
+
// time, filtered) shows what the user was most recently doing.
|
|
114
|
+
// Head scan is fallback for sessions without a last-prompt entry.
|
|
115
|
+
const summary =
|
|
116
|
+
customTitle ||
|
|
117
|
+
extractLastJsonStringField(tail, 'lastPrompt') ||
|
|
118
|
+
extractLastJsonStringField(tail, 'summary') ||
|
|
119
|
+
firstPrompt
|
|
120
|
+
|
|
121
|
+
// Skip metadata-only sessions (no title, no summary, no prompt)
|
|
122
|
+
if (!summary) return null
|
|
123
|
+
const gitBranch =
|
|
124
|
+
extractLastJsonStringField(tail, 'gitBranch') ||
|
|
125
|
+
extractJsonStringField(head, 'gitBranch') ||
|
|
126
|
+
undefined
|
|
127
|
+
const sessionCwd =
|
|
128
|
+
extractJsonStringField(head, 'cwd') || projectPath || undefined
|
|
129
|
+
// Type-scope tag extraction to the {"type":"tag"} JSONL line to avoid
|
|
130
|
+
// collision with tool_use inputs containing a `tag` parameter (git tag,
|
|
131
|
+
// Docker tags, cloud resource tags). Mirrors sessionStorage.ts:608.
|
|
132
|
+
const tagLine = tail.split('\n').findLast(l => l.startsWith('{"type":"tag"'))
|
|
133
|
+
const tag = tagLine
|
|
134
|
+
? extractLastJsonStringField(tagLine, 'tag') || undefined
|
|
135
|
+
: undefined
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
sessionId,
|
|
139
|
+
summary,
|
|
140
|
+
lastModified: mtime,
|
|
141
|
+
fileSize: size,
|
|
142
|
+
customTitle,
|
|
143
|
+
firstPrompt,
|
|
144
|
+
gitBranch,
|
|
145
|
+
cwd: sessionCwd,
|
|
146
|
+
tag,
|
|
147
|
+
createdAt,
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
// Candidate discovery — stat-only pass. Cheap: 1 syscall per file, no
|
|
153
|
+
// data reads. Lets us sort/filter before doing expensive head/tail reads.
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
type Candidate = {
|
|
157
|
+
sessionId: string
|
|
158
|
+
filePath: string
|
|
159
|
+
mtime: number
|
|
160
|
+
/** Project path for cwd fallback when file lacks a cwd field. */
|
|
161
|
+
projectPath?: string
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Lists candidate session files in a directory via readdir, optionally
|
|
166
|
+
* stat'ing each for mtime. When `doStat` is false, mtime is set to 0
|
|
167
|
+
* (caller must sort/dedup after reading file contents instead).
|
|
168
|
+
*/
|
|
169
|
+
export async function listCandidates(
|
|
170
|
+
projectDir: string,
|
|
171
|
+
doStat: boolean,
|
|
172
|
+
projectPath?: string,
|
|
173
|
+
): Promise<Candidate[]> {
|
|
174
|
+
let names: string[]
|
|
175
|
+
try {
|
|
176
|
+
names = await readdir(projectDir)
|
|
177
|
+
} catch {
|
|
178
|
+
return []
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const results = await Promise.all(
|
|
182
|
+
names.map(async (name): Promise<Candidate | null> => {
|
|
183
|
+
if (!name.endsWith('.jsonl')) return null
|
|
184
|
+
const sessionId = validateUuid(name.slice(0, -6))
|
|
185
|
+
if (!sessionId) return null
|
|
186
|
+
const filePath = join(projectDir, name)
|
|
187
|
+
if (!doStat) return { sessionId, filePath, mtime: 0, projectPath }
|
|
188
|
+
try {
|
|
189
|
+
const s = await stat(filePath)
|
|
190
|
+
return { sessionId, filePath, mtime: s.mtime.getTime(), projectPath }
|
|
191
|
+
} catch {
|
|
192
|
+
return null
|
|
193
|
+
}
|
|
194
|
+
}),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
return results.filter((c): c is Candidate => c !== null)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Reads a candidate's file contents and extracts full SessionInfo.
|
|
202
|
+
* Returns null if the session should be filtered out (sidechain, no summary).
|
|
203
|
+
*/
|
|
204
|
+
async function readCandidate(c: Candidate): Promise<SessionInfo | null> {
|
|
205
|
+
const lite = await readSessionLite(c.filePath)
|
|
206
|
+
if (!lite) return null
|
|
207
|
+
|
|
208
|
+
const info = parseSessionInfoFromLite(c.sessionId, lite, c.projectPath)
|
|
209
|
+
if (!info) return null
|
|
210
|
+
|
|
211
|
+
// Prefer stat-pass mtime for sort-key consistency; fall back to
|
|
212
|
+
// lite.mtime when doStat=false (c.mtime is 0 placeholder).
|
|
213
|
+
if (c.mtime) info.lastModified = c.mtime
|
|
214
|
+
|
|
215
|
+
return info
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
// Sort + limit — batch-read candidates in sorted order until `limit`
|
|
220
|
+
// survivors are collected (some candidates filter out on full read).
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
|
|
223
|
+
/** Batch size for concurrent reads when walking the sorted candidate list. */
|
|
224
|
+
const READ_BATCH_SIZE = 32
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Sort comparator: lastModified desc, then sessionId desc for stable
|
|
228
|
+
* ordering across mtime ties.
|
|
229
|
+
*/
|
|
230
|
+
function compareDesc(a: Candidate, b: Candidate): number {
|
|
231
|
+
if (b.mtime !== a.mtime) return b.mtime - a.mtime
|
|
232
|
+
return b.sessionId < a.sessionId ? -1 : b.sessionId > a.sessionId ? 1 : 0
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
async function applySortAndLimit(
|
|
236
|
+
candidates: Candidate[],
|
|
237
|
+
limit: number | undefined,
|
|
238
|
+
offset: number,
|
|
239
|
+
): Promise<SessionInfo[]> {
|
|
240
|
+
candidates.sort(compareDesc)
|
|
241
|
+
|
|
242
|
+
const sessions: SessionInfo[] = []
|
|
243
|
+
// limit: 0 means "no limit" (matches getSessionMessages semantics)
|
|
244
|
+
const want = limit && limit > 0 ? limit : Infinity
|
|
245
|
+
let skipped = 0
|
|
246
|
+
// Dedup post-filter: since candidates are sorted mtime-desc, the first
|
|
247
|
+
// non-null read per sessionId is naturally the newest valid copy.
|
|
248
|
+
// Pre-filter dedup would drop a session entirely if its newest-mtime
|
|
249
|
+
// copy is unreadable/empty, diverging from the no-stat readAllAndSort path.
|
|
250
|
+
const seen = new Set<string>()
|
|
251
|
+
|
|
252
|
+
for (let i = 0; i < candidates.length && sessions.length < want; ) {
|
|
253
|
+
const batchEnd = Math.min(i + READ_BATCH_SIZE, candidates.length)
|
|
254
|
+
const batch = candidates.slice(i, batchEnd)
|
|
255
|
+
const results = await Promise.all(batch.map(readCandidate))
|
|
256
|
+
for (let j = 0; j < results.length && sessions.length < want; j++) {
|
|
257
|
+
i++
|
|
258
|
+
const r = results[j]
|
|
259
|
+
if (!r) continue
|
|
260
|
+
if (seen.has(r.sessionId)) continue
|
|
261
|
+
seen.add(r.sessionId)
|
|
262
|
+
if (skipped < offset) {
|
|
263
|
+
skipped++
|
|
264
|
+
continue
|
|
265
|
+
}
|
|
266
|
+
sessions.push(r)
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return sessions
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Read-all path for when no limit/offset is set. Skips the stat pass
|
|
275
|
+
* entirely — reads every candidate, then sorts/dedups on real mtimes
|
|
276
|
+
* from readSessionLite. Matches pre-refactor I/O cost (no extra stats).
|
|
277
|
+
*/
|
|
278
|
+
async function readAllAndSort(candidates: Candidate[]): Promise<SessionInfo[]> {
|
|
279
|
+
const all = await Promise.all(candidates.map(readCandidate))
|
|
280
|
+
const byId = new Map<string, SessionInfo>()
|
|
281
|
+
for (const s of all) {
|
|
282
|
+
if (!s) continue
|
|
283
|
+
const existing = byId.get(s.sessionId)
|
|
284
|
+
if (!existing || s.lastModified > existing.lastModified) {
|
|
285
|
+
byId.set(s.sessionId, s)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const sessions = [...byId.values()]
|
|
289
|
+
sessions.sort((a, b) =>
|
|
290
|
+
b.lastModified !== a.lastModified
|
|
291
|
+
? b.lastModified - a.lastModified
|
|
292
|
+
: b.sessionId < a.sessionId
|
|
293
|
+
? -1
|
|
294
|
+
: b.sessionId > a.sessionId
|
|
295
|
+
? 1
|
|
296
|
+
: 0,
|
|
297
|
+
)
|
|
298
|
+
return sessions
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// ---------------------------------------------------------------------------
|
|
302
|
+
// Project directory enumeration (single-project vs all-projects)
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Gathers candidate session files for a specific project directory
|
|
307
|
+
* (and optionally its git worktrees).
|
|
308
|
+
*/
|
|
309
|
+
async function gatherProjectCandidates(
|
|
310
|
+
dir: string,
|
|
311
|
+
includeWorktrees: boolean,
|
|
312
|
+
doStat: boolean,
|
|
313
|
+
): Promise<Candidate[]> {
|
|
314
|
+
const canonicalDir = await canonicalizePath(dir)
|
|
315
|
+
|
|
316
|
+
let worktreePaths: string[]
|
|
317
|
+
if (includeWorktrees) {
|
|
318
|
+
try {
|
|
319
|
+
worktreePaths = await getWorktreePathsPortable(canonicalDir)
|
|
320
|
+
} catch {
|
|
321
|
+
worktreePaths = []
|
|
322
|
+
}
|
|
323
|
+
} else {
|
|
324
|
+
worktreePaths = []
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// No worktrees (or git not available / scanning disabled) — just scan the single project dir
|
|
328
|
+
if (worktreePaths.length <= 1) {
|
|
329
|
+
const projectDir = await findProjectDir(canonicalDir)
|
|
330
|
+
if (!projectDir) return []
|
|
331
|
+
return listCandidates(projectDir, doStat, canonicalDir)
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Worktree-aware scanning: find all project dirs matching any worktree
|
|
335
|
+
const projectsDir = getProjectsDir()
|
|
336
|
+
const caseInsensitive = process.platform === 'win32'
|
|
337
|
+
|
|
338
|
+
// Sort worktree paths by sanitized prefix length (longest first) so
|
|
339
|
+
// more specific matches take priority over shorter ones
|
|
340
|
+
const indexed = worktreePaths.map(wt => {
|
|
341
|
+
const sanitized = sanitizePath(wt)
|
|
342
|
+
return {
|
|
343
|
+
path: wt,
|
|
344
|
+
prefix: caseInsensitive ? sanitized.toLowerCase() : sanitized,
|
|
345
|
+
}
|
|
346
|
+
})
|
|
347
|
+
indexed.sort((a, b) => b.prefix.length - a.prefix.length)
|
|
348
|
+
|
|
349
|
+
let allDirents: Dirent[]
|
|
350
|
+
try {
|
|
351
|
+
allDirents = await readdir(projectsDir, { withFileTypes: true })
|
|
352
|
+
} catch {
|
|
353
|
+
// Fall back to single project dir
|
|
354
|
+
const projectDir = await findProjectDir(canonicalDir)
|
|
355
|
+
if (!projectDir) return []
|
|
356
|
+
return listCandidates(projectDir, doStat, canonicalDir)
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
const all: Candidate[] = []
|
|
360
|
+
const seenDirs = new Set<string>()
|
|
361
|
+
|
|
362
|
+
// Always include the user's actual directory (handles subdirectories
|
|
363
|
+
// like /repo/packages/my-app that won't match worktree root prefixes)
|
|
364
|
+
const canonicalProjectDir = await findProjectDir(canonicalDir)
|
|
365
|
+
if (canonicalProjectDir) {
|
|
366
|
+
const dirBase = basename(canonicalProjectDir)
|
|
367
|
+
seenDirs.add(caseInsensitive ? dirBase.toLowerCase() : dirBase)
|
|
368
|
+
all.push(
|
|
369
|
+
...(await listCandidates(canonicalProjectDir, doStat, canonicalDir)),
|
|
370
|
+
)
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
for (const dirent of allDirents) {
|
|
374
|
+
if (!dirent.isDirectory()) continue
|
|
375
|
+
const dirName = caseInsensitive ? dirent.name.toLowerCase() : dirent.name
|
|
376
|
+
if (seenDirs.has(dirName)) continue
|
|
377
|
+
|
|
378
|
+
for (const { path: wtPath, prefix } of indexed) {
|
|
379
|
+
// Only use startsWith for truncated paths (>MAX_SANITIZED_LENGTH) where
|
|
380
|
+
// a hash suffix follows. For short paths, require exact match to avoid
|
|
381
|
+
// /root/project matching /root/project-foo.
|
|
382
|
+
const isMatch =
|
|
383
|
+
dirName === prefix ||
|
|
384
|
+
(prefix.length >= MAX_SANITIZED_LENGTH &&
|
|
385
|
+
dirName.startsWith(prefix + '-'))
|
|
386
|
+
if (isMatch) {
|
|
387
|
+
seenDirs.add(dirName)
|
|
388
|
+
all.push(
|
|
389
|
+
...(await listCandidates(
|
|
390
|
+
join(projectsDir, dirent.name),
|
|
391
|
+
doStat,
|
|
392
|
+
wtPath,
|
|
393
|
+
)),
|
|
394
|
+
)
|
|
395
|
+
break
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return all
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Gathers candidate session files across all project directories.
|
|
405
|
+
*/
|
|
406
|
+
async function gatherAllCandidates(doStat: boolean): Promise<Candidate[]> {
|
|
407
|
+
const projectsDir = getProjectsDir()
|
|
408
|
+
|
|
409
|
+
let dirents: Dirent[]
|
|
410
|
+
try {
|
|
411
|
+
dirents = await readdir(projectsDir, { withFileTypes: true })
|
|
412
|
+
} catch {
|
|
413
|
+
return []
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const perProject = await Promise.all(
|
|
417
|
+
dirents
|
|
418
|
+
.filter(d => d.isDirectory())
|
|
419
|
+
.map(d => listCandidates(join(projectsDir, d.name), doStat)),
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
return perProject.flat()
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Lists sessions with metadata extracted from stat + head/tail reads.
|
|
427
|
+
*
|
|
428
|
+
* When `dir` is provided, returns sessions for that project directory
|
|
429
|
+
* and its git worktrees. When omitted, returns sessions across all
|
|
430
|
+
* projects.
|
|
431
|
+
*
|
|
432
|
+
* Pagination via `limit`/`offset` operates on the filtered, sorted result
|
|
433
|
+
* set. When either is set, a cheap stat-only pass sorts candidates before
|
|
434
|
+
* expensive head/tail reads — so `limit: 20` on a directory with 1000
|
|
435
|
+
* sessions does ~1000 stats + ~20 content reads, not 1000 content reads.
|
|
436
|
+
* When neither is set, stat is skipped (read-all-then-sort, same I/O cost
|
|
437
|
+
* as the original implementation).
|
|
438
|
+
*/
|
|
439
|
+
export async function listSessionsImpl(
|
|
440
|
+
options?: ListSessionsOptions,
|
|
441
|
+
): Promise<SessionInfo[]> {
|
|
442
|
+
const { dir, limit, offset, includeWorktrees } = options ?? {}
|
|
443
|
+
const off = offset ?? 0
|
|
444
|
+
// Only stat when we need to sort before reading (won't read all anyway).
|
|
445
|
+
// limit: 0 means "no limit" (see applySortAndLimit), so treat it as unset.
|
|
446
|
+
const doStat = (limit !== undefined && limit > 0) || off > 0
|
|
447
|
+
|
|
448
|
+
const candidates = dir
|
|
449
|
+
? await gatherProjectCandidates(dir, includeWorktrees ?? true, doStat)
|
|
450
|
+
: await gatherAllCandidates(doStat)
|
|
451
|
+
|
|
452
|
+
if (!doStat) return readAllAndSort(candidates)
|
|
453
|
+
return applySortAndLimit(candidates, limit, off)
|
|
454
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities for handling local installation
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { access, chmod, writeFile } from 'fs/promises'
|
|
6
|
+
import { join } from 'path'
|
|
7
|
+
import { type ReleaseChannel, saveGlobalConfig } from './config.js'
|
|
8
|
+
import { getClaudeConfigHomeDir } from './envUtils.js'
|
|
9
|
+
import { getErrnoCode } from './errors.js'
|
|
10
|
+
import { execFileNoThrowWithCwd } from './execFileNoThrow.js'
|
|
11
|
+
import { getFsImplementation } from './fsOperations.js'
|
|
12
|
+
import { logError } from './log.js'
|
|
13
|
+
import { jsonStringify } from './slowOperations.js'
|
|
14
|
+
|
|
15
|
+
// Lazy getters: getClaudeConfigHomeDir() is memoized and reads process.env.
|
|
16
|
+
// Evaluating at module scope would capture the value before entrypoints like
|
|
17
|
+
// hfi.tsx get a chance to set CLAUDE_CONFIG_DIR in main(), and would also
|
|
18
|
+
// populate the memoize cache with that stale value for all 150+ other callers.
|
|
19
|
+
function getLocalInstallDir(): string {
|
|
20
|
+
return join(getClaudeConfigHomeDir(), 'local')
|
|
21
|
+
}
|
|
22
|
+
export function getLocalClaudePath(): string {
|
|
23
|
+
return join(getLocalInstallDir(), 'claude')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Check if we're running from our managed local installation
|
|
28
|
+
*/
|
|
29
|
+
export function isRunningFromLocalInstallation(): boolean {
|
|
30
|
+
const execPath = process.argv[1] || ''
|
|
31
|
+
return execPath.includes('/.claude/local/node_modules/')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Write `content` to `path` only if the file does not already exist.
|
|
36
|
+
* Uses O_EXCL ('wx') for atomic create-if-missing.
|
|
37
|
+
*/
|
|
38
|
+
async function writeIfMissing(
|
|
39
|
+
path: string,
|
|
40
|
+
content: string,
|
|
41
|
+
mode?: number,
|
|
42
|
+
): Promise<boolean> {
|
|
43
|
+
try {
|
|
44
|
+
await writeFile(path, content, { encoding: 'utf8', flag: 'wx', mode })
|
|
45
|
+
return true
|
|
46
|
+
} catch (e) {
|
|
47
|
+
if (getErrnoCode(e) === 'EEXIST') return false
|
|
48
|
+
throw e
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Ensure the local package environment is set up
|
|
54
|
+
* Creates the directory, package.json, and wrapper script
|
|
55
|
+
*/
|
|
56
|
+
export async function ensureLocalPackageEnvironment(): Promise<boolean> {
|
|
57
|
+
try {
|
|
58
|
+
const localInstallDir = getLocalInstallDir()
|
|
59
|
+
|
|
60
|
+
// Create installation directory (recursive, idempotent)
|
|
61
|
+
await getFsImplementation().mkdir(localInstallDir)
|
|
62
|
+
|
|
63
|
+
// Create package.json if it doesn't exist
|
|
64
|
+
await writeIfMissing(
|
|
65
|
+
join(localInstallDir, 'package.json'),
|
|
66
|
+
jsonStringify(
|
|
67
|
+
{ name: 'claude-local', version: '0.0.1', private: true },
|
|
68
|
+
null,
|
|
69
|
+
2,
|
|
70
|
+
),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
// Create the wrapper script if it doesn't exist
|
|
74
|
+
const wrapperPath = join(localInstallDir, 'claude')
|
|
75
|
+
const created = await writeIfMissing(
|
|
76
|
+
wrapperPath,
|
|
77
|
+
`#!/bin/sh\nexec "${localInstallDir}/node_modules/.bin/claude" "$@"`,
|
|
78
|
+
0o755,
|
|
79
|
+
)
|
|
80
|
+
if (created) {
|
|
81
|
+
// Mode in writeFile is masked by umask; chmod to ensure executable bit.
|
|
82
|
+
await chmod(wrapperPath, 0o755)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return true
|
|
86
|
+
} catch (error) {
|
|
87
|
+
logError(error)
|
|
88
|
+
return false
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Install or update Claude CLI package in the local directory
|
|
94
|
+
* @param channel - Release channel to use (latest or stable)
|
|
95
|
+
* @param specificVersion - Optional specific version to install (overrides channel)
|
|
96
|
+
*/
|
|
97
|
+
export async function installOrUpdateClaudePackage(
|
|
98
|
+
channel: ReleaseChannel,
|
|
99
|
+
specificVersion?: string | null,
|
|
100
|
+
): Promise<'in_progress' | 'success' | 'install_failed'> {
|
|
101
|
+
try {
|
|
102
|
+
// First ensure the environment is set up
|
|
103
|
+
if (!(await ensureLocalPackageEnvironment())) {
|
|
104
|
+
return 'install_failed'
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Use specific version if provided, otherwise use channel tag
|
|
108
|
+
const versionSpec = specificVersion
|
|
109
|
+
? specificVersion
|
|
110
|
+
: channel === 'stable'
|
|
111
|
+
? 'stable'
|
|
112
|
+
: 'latest'
|
|
113
|
+
const result = await execFileNoThrowWithCwd(
|
|
114
|
+
'npm',
|
|
115
|
+
['install', `${MACRO.PACKAGE_URL}@${versionSpec}`],
|
|
116
|
+
{ cwd: getLocalInstallDir(), maxBuffer: 1000000 },
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
if (result.code !== 0) {
|
|
120
|
+
const error = new Error(
|
|
121
|
+
`Failed to install Claude CLI package: ${result.stderr}`,
|
|
122
|
+
)
|
|
123
|
+
logError(error)
|
|
124
|
+
return result.code === 190 ? 'in_progress' : 'install_failed'
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Set installMethod to 'local' to prevent npm permission warnings
|
|
128
|
+
saveGlobalConfig(current => ({
|
|
129
|
+
...current,
|
|
130
|
+
installMethod: 'local',
|
|
131
|
+
}))
|
|
132
|
+
|
|
133
|
+
return 'success'
|
|
134
|
+
} catch (error) {
|
|
135
|
+
logError(error)
|
|
136
|
+
return 'install_failed'
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Check if local installation exists.
|
|
142
|
+
* Pure existence probe — callers use this to choose update path / UI hints.
|
|
143
|
+
*/
|
|
144
|
+
export async function localInstallationExists(): Promise<boolean> {
|
|
145
|
+
try {
|
|
146
|
+
await access(join(getLocalInstallDir(), 'node_modules', '.bin', 'claude'))
|
|
147
|
+
return true
|
|
148
|
+
} catch {
|
|
149
|
+
return false
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get shell type to determine appropriate path setup
|
|
155
|
+
*/
|
|
156
|
+
export function getShellType(): string {
|
|
157
|
+
const shellPath = process.env.SHELL || ''
|
|
158
|
+
if (shellPath.includes('zsh')) return 'zsh'
|
|
159
|
+
if (shellPath.includes('bash')) return 'bash'
|
|
160
|
+
if (shellPath.includes('fish')) return 'fish'
|
|
161
|
+
return 'unknown'
|
|
162
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lazy accessor for proper-lockfile.
|
|
3
|
+
*
|
|
4
|
+
* proper-lockfile depends on graceful-fs, which monkey-patches every fs
|
|
5
|
+
* method on first require (~8ms). Static imports of proper-lockfile pull this
|
|
6
|
+
* cost into the startup path even when no locking happens (e.g. `--help`).
|
|
7
|
+
*
|
|
8
|
+
* Import this module instead of `proper-lockfile` directly. The underlying
|
|
9
|
+
* package is only loaded the first time a lock function is actually called.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { CheckOptions, LockOptions, UnlockOptions } from 'proper-lockfile'
|
|
13
|
+
|
|
14
|
+
type Lockfile = typeof import('proper-lockfile')
|
|
15
|
+
|
|
16
|
+
let _lockfile: Lockfile | undefined
|
|
17
|
+
|
|
18
|
+
function getLockfile(): Lockfile {
|
|
19
|
+
if (!_lockfile) {
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
|
+
_lockfile = require('proper-lockfile') as Lockfile
|
|
22
|
+
}
|
|
23
|
+
return _lockfile
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function lock(
|
|
27
|
+
file: string,
|
|
28
|
+
options?: LockOptions,
|
|
29
|
+
): Promise<() => Promise<void>> {
|
|
30
|
+
return getLockfile().lock(file, options)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function lockSync(file: string, options?: LockOptions): () => void {
|
|
34
|
+
return getLockfile().lockSync(file, options)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function unlock(file: string, options?: UnlockOptions): Promise<void> {
|
|
38
|
+
return getLockfile().unlock(file, options)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function check(file: string, options?: CheckOptions): Promise<boolean> {
|
|
42
|
+
return getLockfile().check(file, options)
|
|
43
|
+
}
|