@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,447 @@
|
|
|
1
|
+
import { HOOK_EVENTS, type HookEvent } from 'src/entrypoints/agentSdkTypes.js'
|
|
2
|
+
import type { AppState } from 'src/state/AppState.js'
|
|
3
|
+
import type { Message } from 'src/types/message.js'
|
|
4
|
+
import { logForDebugging } from '../debug.js'
|
|
5
|
+
import type { AggregatedHookResult } from '../hooks.js'
|
|
6
|
+
import type { HookCommand } from '../settings/types.js'
|
|
7
|
+
import { isHookEqual } from './hooksSettings.js'
|
|
8
|
+
|
|
9
|
+
type OnHookSuccess = (
|
|
10
|
+
hook: HookCommand | FunctionHook,
|
|
11
|
+
result: AggregatedHookResult,
|
|
12
|
+
) => void
|
|
13
|
+
|
|
14
|
+
/** Function hook callback - returns true if check passes, false to block */
|
|
15
|
+
export type FunctionHookCallback = (
|
|
16
|
+
messages: Message[],
|
|
17
|
+
signal?: AbortSignal,
|
|
18
|
+
) => boolean | Promise<boolean>
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Function hook type with callback embedded.
|
|
22
|
+
* Session-scoped only, cannot be persisted to settings.json.
|
|
23
|
+
*/
|
|
24
|
+
export type FunctionHook = {
|
|
25
|
+
type: 'function'
|
|
26
|
+
id?: string // Optional unique ID for removal
|
|
27
|
+
timeout?: number
|
|
28
|
+
callback: FunctionHookCallback
|
|
29
|
+
errorMessage: string
|
|
30
|
+
statusMessage?: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type SessionHookMatcher = {
|
|
34
|
+
matcher: string
|
|
35
|
+
skillRoot?: string
|
|
36
|
+
hooks: Array<{
|
|
37
|
+
hook: HookCommand | FunctionHook
|
|
38
|
+
onHookSuccess?: OnHookSuccess
|
|
39
|
+
}>
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type SessionStore = {
|
|
43
|
+
hooks: {
|
|
44
|
+
[event in HookEvent]?: SessionHookMatcher[]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Map (not Record) so .set/.delete don't change the container's identity.
|
|
50
|
+
* Mutator functions mutate the Map and return prev unchanged, letting
|
|
51
|
+
* store.ts's Object.is(next, prev) check short-circuit and skip listener
|
|
52
|
+
* notification. Session hooks are ephemeral per-agent runtime callbacks,
|
|
53
|
+
* never reactively read (only getAppState() snapshots in the query loop).
|
|
54
|
+
* Same pattern as agentControllers on LocalWorkflowTaskState.
|
|
55
|
+
*
|
|
56
|
+
* This matters under high-concurrency workflows: parallel() with N
|
|
57
|
+
* schema-mode agents fires N addFunctionHook calls in one synchronous
|
|
58
|
+
* tick. With a Record + spread, each call cost O(N) to copy the growing
|
|
59
|
+
* map (O(N²) total) plus fired all ~30 store listeners. With Map: .set()
|
|
60
|
+
* is O(1), return prev means zero listener fires.
|
|
61
|
+
*/
|
|
62
|
+
export type SessionHooksState = Map<string, SessionStore>
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Add a command or prompt hook to the session.
|
|
66
|
+
* Session hooks are temporary, in-memory only, and cleared when session ends.
|
|
67
|
+
*/
|
|
68
|
+
export function addSessionHook(
|
|
69
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
70
|
+
sessionId: string,
|
|
71
|
+
event: HookEvent,
|
|
72
|
+
matcher: string,
|
|
73
|
+
hook: HookCommand,
|
|
74
|
+
onHookSuccess?: OnHookSuccess,
|
|
75
|
+
skillRoot?: string,
|
|
76
|
+
): void {
|
|
77
|
+
addHookToSession(
|
|
78
|
+
setAppState,
|
|
79
|
+
sessionId,
|
|
80
|
+
event,
|
|
81
|
+
matcher,
|
|
82
|
+
hook,
|
|
83
|
+
onHookSuccess,
|
|
84
|
+
skillRoot,
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Add a function hook to the session.
|
|
90
|
+
* Function hooks execute TypeScript callbacks in-memory for validation.
|
|
91
|
+
* @returns The hook ID (for removal)
|
|
92
|
+
*/
|
|
93
|
+
export function addFunctionHook(
|
|
94
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
95
|
+
sessionId: string,
|
|
96
|
+
event: HookEvent,
|
|
97
|
+
matcher: string,
|
|
98
|
+
callback: FunctionHookCallback,
|
|
99
|
+
errorMessage: string,
|
|
100
|
+
options?: {
|
|
101
|
+
timeout?: number
|
|
102
|
+
id?: string
|
|
103
|
+
},
|
|
104
|
+
): string {
|
|
105
|
+
const id = options?.id || `function-hook-${Date.now()}-${Math.random()}`
|
|
106
|
+
const hook: FunctionHook = {
|
|
107
|
+
type: 'function',
|
|
108
|
+
id,
|
|
109
|
+
timeout: options?.timeout || 5000,
|
|
110
|
+
callback,
|
|
111
|
+
errorMessage,
|
|
112
|
+
}
|
|
113
|
+
addHookToSession(setAppState, sessionId, event, matcher, hook)
|
|
114
|
+
return id
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Remove a function hook by ID from the session.
|
|
119
|
+
*/
|
|
120
|
+
export function removeFunctionHook(
|
|
121
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
122
|
+
sessionId: string,
|
|
123
|
+
event: HookEvent,
|
|
124
|
+
hookId: string,
|
|
125
|
+
): void {
|
|
126
|
+
setAppState(prev => {
|
|
127
|
+
const store = prev.sessionHooks.get(sessionId)
|
|
128
|
+
if (!store) {
|
|
129
|
+
return prev
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const eventMatchers = store.hooks[event] || []
|
|
133
|
+
|
|
134
|
+
// Remove the hook with matching ID from all matchers
|
|
135
|
+
const updatedMatchers = eventMatchers
|
|
136
|
+
.map(matcher => {
|
|
137
|
+
const updatedHooks = matcher.hooks.filter(h => {
|
|
138
|
+
if (h.hook.type !== 'function') return true
|
|
139
|
+
return h.hook.id !== hookId
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
return updatedHooks.length > 0
|
|
143
|
+
? { ...matcher, hooks: updatedHooks }
|
|
144
|
+
: null
|
|
145
|
+
})
|
|
146
|
+
.filter((m): m is SessionHookMatcher => m !== null)
|
|
147
|
+
|
|
148
|
+
const newHooks =
|
|
149
|
+
updatedMatchers.length > 0
|
|
150
|
+
? { ...store.hooks, [event]: updatedMatchers }
|
|
151
|
+
: Object.fromEntries(
|
|
152
|
+
Object.entries(store.hooks).filter(([e]) => e !== event),
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
prev.sessionHooks.set(sessionId, { hooks: newHooks })
|
|
156
|
+
return prev
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
logForDebugging(
|
|
160
|
+
`Removed function hook ${hookId} for event ${event} in session ${sessionId}`,
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Internal helper to add a hook to session state
|
|
166
|
+
*/
|
|
167
|
+
function addHookToSession(
|
|
168
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
169
|
+
sessionId: string,
|
|
170
|
+
event: HookEvent,
|
|
171
|
+
matcher: string,
|
|
172
|
+
hook: HookCommand | FunctionHook,
|
|
173
|
+
onHookSuccess?: OnHookSuccess,
|
|
174
|
+
skillRoot?: string,
|
|
175
|
+
): void {
|
|
176
|
+
setAppState(prev => {
|
|
177
|
+
const store = prev.sessionHooks.get(sessionId) ?? { hooks: {} }
|
|
178
|
+
const eventMatchers = store.hooks[event] || []
|
|
179
|
+
|
|
180
|
+
// Find existing matcher or create new one
|
|
181
|
+
const existingMatcherIndex = eventMatchers.findIndex(
|
|
182
|
+
m => m.matcher === matcher && m.skillRoot === skillRoot,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
let updatedMatchers: SessionHookMatcher[]
|
|
186
|
+
if (existingMatcherIndex >= 0) {
|
|
187
|
+
// Add to existing matcher
|
|
188
|
+
updatedMatchers = [...eventMatchers]
|
|
189
|
+
const existingMatcher = updatedMatchers[existingMatcherIndex]!
|
|
190
|
+
updatedMatchers[existingMatcherIndex] = {
|
|
191
|
+
matcher: existingMatcher.matcher,
|
|
192
|
+
skillRoot: existingMatcher.skillRoot,
|
|
193
|
+
hooks: [...existingMatcher.hooks, { hook, onHookSuccess }],
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
// Create new matcher
|
|
197
|
+
updatedMatchers = [
|
|
198
|
+
...eventMatchers,
|
|
199
|
+
{
|
|
200
|
+
matcher,
|
|
201
|
+
skillRoot,
|
|
202
|
+
hooks: [{ hook, onHookSuccess }],
|
|
203
|
+
},
|
|
204
|
+
]
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const newHooks = { ...store.hooks, [event]: updatedMatchers }
|
|
208
|
+
|
|
209
|
+
prev.sessionHooks.set(sessionId, { hooks: newHooks })
|
|
210
|
+
return prev
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
logForDebugging(
|
|
214
|
+
`Added session hook for event ${event} in session ${sessionId}`,
|
|
215
|
+
)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Remove a specific hook from the session
|
|
220
|
+
* @param setAppState The function to update the app state
|
|
221
|
+
* @param sessionId The session ID
|
|
222
|
+
* @param event The hook event
|
|
223
|
+
* @param hook The hook command to remove
|
|
224
|
+
*/
|
|
225
|
+
export function removeSessionHook(
|
|
226
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
227
|
+
sessionId: string,
|
|
228
|
+
event: HookEvent,
|
|
229
|
+
hook: HookCommand,
|
|
230
|
+
): void {
|
|
231
|
+
setAppState(prev => {
|
|
232
|
+
const store = prev.sessionHooks.get(sessionId)
|
|
233
|
+
if (!store) {
|
|
234
|
+
return prev
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const eventMatchers = store.hooks[event] || []
|
|
238
|
+
|
|
239
|
+
// Remove the hook from all matchers
|
|
240
|
+
const updatedMatchers = eventMatchers
|
|
241
|
+
.map(matcher => {
|
|
242
|
+
const updatedHooks = matcher.hooks.filter(
|
|
243
|
+
h => !isHookEqual(h.hook, hook),
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
return updatedHooks.length > 0
|
|
247
|
+
? { ...matcher, hooks: updatedHooks }
|
|
248
|
+
: null
|
|
249
|
+
})
|
|
250
|
+
.filter((m): m is SessionHookMatcher => m !== null)
|
|
251
|
+
|
|
252
|
+
const newHooks =
|
|
253
|
+
updatedMatchers.length > 0
|
|
254
|
+
? { ...store.hooks, [event]: updatedMatchers }
|
|
255
|
+
: { ...store.hooks }
|
|
256
|
+
|
|
257
|
+
if (updatedMatchers.length === 0) {
|
|
258
|
+
delete newHooks[event]
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
prev.sessionHooks.set(sessionId, { ...store, hooks: newHooks })
|
|
262
|
+
return prev
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
logForDebugging(
|
|
266
|
+
`Removed session hook for event ${event} in session ${sessionId}`,
|
|
267
|
+
)
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Extended hook matcher that includes optional skillRoot for skill-scoped hooks
|
|
271
|
+
export type SessionDerivedHookMatcher = {
|
|
272
|
+
matcher: string
|
|
273
|
+
hooks: HookCommand[]
|
|
274
|
+
skillRoot?: string
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Convert session hook matchers to regular hook matchers
|
|
279
|
+
* @param sessionMatchers The session hook matchers to convert
|
|
280
|
+
* @returns Regular hook matchers (with optional skillRoot preserved)
|
|
281
|
+
*/
|
|
282
|
+
function convertToHookMatchers(
|
|
283
|
+
sessionMatchers: SessionHookMatcher[],
|
|
284
|
+
): SessionDerivedHookMatcher[] {
|
|
285
|
+
return sessionMatchers.map(sm => ({
|
|
286
|
+
matcher: sm.matcher,
|
|
287
|
+
skillRoot: sm.skillRoot,
|
|
288
|
+
// Filter out function hooks - they can't be persisted to HookMatcher format
|
|
289
|
+
hooks: sm.hooks
|
|
290
|
+
.map(h => h.hook)
|
|
291
|
+
.filter((h): h is HookCommand => h.type !== 'function'),
|
|
292
|
+
}))
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Get all session hooks for a specific event (excluding function hooks)
|
|
297
|
+
* @param appState The app state
|
|
298
|
+
* @param sessionId The session ID
|
|
299
|
+
* @param event Optional event to filter by
|
|
300
|
+
* @returns Hook matchers for the event, or all hooks if no event specified
|
|
301
|
+
*/
|
|
302
|
+
export function getSessionHooks(
|
|
303
|
+
appState: AppState,
|
|
304
|
+
sessionId: string,
|
|
305
|
+
event?: HookEvent,
|
|
306
|
+
): Map<HookEvent, SessionDerivedHookMatcher[]> {
|
|
307
|
+
const store = appState.sessionHooks.get(sessionId)
|
|
308
|
+
if (!store) {
|
|
309
|
+
return new Map()
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const result = new Map<HookEvent, SessionDerivedHookMatcher[]>()
|
|
313
|
+
|
|
314
|
+
if (event) {
|
|
315
|
+
const sessionMatchers = store.hooks[event]
|
|
316
|
+
if (sessionMatchers) {
|
|
317
|
+
result.set(event, convertToHookMatchers(sessionMatchers))
|
|
318
|
+
}
|
|
319
|
+
return result
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
for (const evt of HOOK_EVENTS) {
|
|
323
|
+
const sessionMatchers = store.hooks[evt]
|
|
324
|
+
if (sessionMatchers) {
|
|
325
|
+
result.set(evt, convertToHookMatchers(sessionMatchers))
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return result
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
type FunctionHookMatcher = {
|
|
333
|
+
matcher: string
|
|
334
|
+
hooks: FunctionHook[]
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Get all session function hooks for a specific event
|
|
339
|
+
* Function hooks are kept separate because they can't be persisted to HookMatcher format.
|
|
340
|
+
* @param appState The app state
|
|
341
|
+
* @param sessionId The session ID
|
|
342
|
+
* @param event Optional event to filter by
|
|
343
|
+
* @returns Function hook matchers for the event
|
|
344
|
+
*/
|
|
345
|
+
export function getSessionFunctionHooks(
|
|
346
|
+
appState: AppState,
|
|
347
|
+
sessionId: string,
|
|
348
|
+
event?: HookEvent,
|
|
349
|
+
): Map<HookEvent, FunctionHookMatcher[]> {
|
|
350
|
+
const store = appState.sessionHooks.get(sessionId)
|
|
351
|
+
if (!store) {
|
|
352
|
+
return new Map()
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
const result = new Map<HookEvent, FunctionHookMatcher[]>()
|
|
356
|
+
|
|
357
|
+
const extractFunctionHooks = (
|
|
358
|
+
sessionMatchers: SessionHookMatcher[],
|
|
359
|
+
): FunctionHookMatcher[] => {
|
|
360
|
+
return sessionMatchers
|
|
361
|
+
.map(sm => ({
|
|
362
|
+
matcher: sm.matcher,
|
|
363
|
+
hooks: sm.hooks
|
|
364
|
+
.map(h => h.hook)
|
|
365
|
+
.filter((h): h is FunctionHook => h.type === 'function'),
|
|
366
|
+
}))
|
|
367
|
+
.filter(m => m.hooks.length > 0)
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (event) {
|
|
371
|
+
const sessionMatchers = store.hooks[event]
|
|
372
|
+
if (sessionMatchers) {
|
|
373
|
+
const functionMatchers = extractFunctionHooks(sessionMatchers)
|
|
374
|
+
if (functionMatchers.length > 0) {
|
|
375
|
+
result.set(event, functionMatchers)
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return result
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
for (const evt of HOOK_EVENTS) {
|
|
382
|
+
const sessionMatchers = store.hooks[evt]
|
|
383
|
+
if (sessionMatchers) {
|
|
384
|
+
const functionMatchers = extractFunctionHooks(sessionMatchers)
|
|
385
|
+
if (functionMatchers.length > 0) {
|
|
386
|
+
result.set(evt, functionMatchers)
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
return result
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Get the full hook entry (including callbacks) for a specific session hook
|
|
396
|
+
*/
|
|
397
|
+
export function getSessionHookCallback(
|
|
398
|
+
appState: AppState,
|
|
399
|
+
sessionId: string,
|
|
400
|
+
event: HookEvent,
|
|
401
|
+
matcher: string,
|
|
402
|
+
hook: HookCommand | FunctionHook,
|
|
403
|
+
):
|
|
404
|
+
| {
|
|
405
|
+
hook: HookCommand | FunctionHook
|
|
406
|
+
onHookSuccess?: OnHookSuccess
|
|
407
|
+
}
|
|
408
|
+
| undefined {
|
|
409
|
+
const store = appState.sessionHooks.get(sessionId)
|
|
410
|
+
if (!store) {
|
|
411
|
+
return undefined
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
const eventMatchers = store.hooks[event]
|
|
415
|
+
if (!eventMatchers) {
|
|
416
|
+
return undefined
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// Find the hook in the matchers
|
|
420
|
+
for (const matcherEntry of eventMatchers) {
|
|
421
|
+
if (matcherEntry.matcher === matcher || matcher === '') {
|
|
422
|
+
const hookEntry = matcherEntry.hooks.find(h => isHookEqual(h.hook, hook))
|
|
423
|
+
if (hookEntry) {
|
|
424
|
+
return hookEntry
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
return undefined
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Clear all session hooks for a specific session
|
|
434
|
+
* @param setAppState The function to update the app state
|
|
435
|
+
* @param sessionId The session ID
|
|
436
|
+
*/
|
|
437
|
+
export function clearSessionHooks(
|
|
438
|
+
setAppState: (updater: (prev: AppState) => AppState) => void,
|
|
439
|
+
sessionId: string,
|
|
440
|
+
): void {
|
|
441
|
+
setAppState(prev => {
|
|
442
|
+
prev.sessionHooks.delete(sessionId)
|
|
443
|
+
return prev
|
|
444
|
+
})
|
|
445
|
+
|
|
446
|
+
logForDebugging(`Cleared all session hooks for session ${sessionId}`)
|
|
447
|
+
}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { feature } from 'bun:bundle'
|
|
2
|
+
import { getInvokedSkillsForAgent } from '../../bootstrap/state.js'
|
|
3
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
|
|
4
|
+
import {
|
|
5
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
6
|
+
type AnalyticsMetadata_I_VERIFIED_THIS_IS_PII_TAGGED,
|
|
7
|
+
logEvent,
|
|
8
|
+
} from '../../services/analytics/index.js'
|
|
9
|
+
import { queryModelWithoutStreaming } from '../../services/api/gemini.js'
|
|
10
|
+
import { getEmptyToolPermissionContext } from '../../Tool.js'
|
|
11
|
+
import type { Message } from '../../types/message.js'
|
|
12
|
+
import { createAbortController } from '../abortController.js'
|
|
13
|
+
import { count } from '../array.js'
|
|
14
|
+
import { getCwd } from '../cwd.js'
|
|
15
|
+
import { toError } from '../errors.js'
|
|
16
|
+
import { logError } from '../log.js'
|
|
17
|
+
import {
|
|
18
|
+
createUserMessage,
|
|
19
|
+
extractTag,
|
|
20
|
+
extractTextContent,
|
|
21
|
+
} from '../messages.js'
|
|
22
|
+
import { getSmallFastModel } from '../model/model.js'
|
|
23
|
+
import { jsonParse } from '../slowOperations.js'
|
|
24
|
+
import { asSystemPrompt } from '../systemPromptType.js'
|
|
25
|
+
import {
|
|
26
|
+
type ApiQueryHookConfig,
|
|
27
|
+
createApiQueryHook,
|
|
28
|
+
} from './apiQueryHookHelper.js'
|
|
29
|
+
import { registerPostSamplingHook } from './postSamplingHooks.js'
|
|
30
|
+
|
|
31
|
+
const TURN_BATCH_SIZE = 5
|
|
32
|
+
|
|
33
|
+
export type SkillUpdate = {
|
|
34
|
+
section: string
|
|
35
|
+
change: string
|
|
36
|
+
reason: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function formatRecentMessages(messages: Message[]): string {
|
|
40
|
+
return messages
|
|
41
|
+
.filter(m => m.type === 'user' || m.type === 'assistant')
|
|
42
|
+
.map(m => {
|
|
43
|
+
const role = m.type === 'user' ? 'User' : 'Assistant'
|
|
44
|
+
const content = m.message.content
|
|
45
|
+
if (typeof content === 'string')
|
|
46
|
+
return `${role}: ${content.slice(0, 500)}`
|
|
47
|
+
const text = content
|
|
48
|
+
.filter(
|
|
49
|
+
(b): b is Extract<typeof b, { type: 'text' }> => b.type === 'text',
|
|
50
|
+
)
|
|
51
|
+
.map(b => b.text)
|
|
52
|
+
.join('\n')
|
|
53
|
+
return `${role}: ${text.slice(0, 500)}`
|
|
54
|
+
})
|
|
55
|
+
.join('\n\n')
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function findProjectSkill() {
|
|
59
|
+
const skills = getInvokedSkillsForAgent(null)
|
|
60
|
+
for (const [, info] of skills) {
|
|
61
|
+
if (info.skillPath.startsWith('projectSettings:')) {
|
|
62
|
+
return info
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return undefined
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function createSkillImprovementHook() {
|
|
69
|
+
let lastAnalyzedCount = 0
|
|
70
|
+
let lastAnalyzedIndex = 0
|
|
71
|
+
|
|
72
|
+
const config: ApiQueryHookConfig<SkillUpdate[]> = {
|
|
73
|
+
name: 'skill_improvement',
|
|
74
|
+
|
|
75
|
+
async shouldRun(context) {
|
|
76
|
+
if (context.querySource !== 'repl_main_thread') {
|
|
77
|
+
return false
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (!findProjectSkill()) {
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Only run every TURN_BATCH_SIZE user messages
|
|
85
|
+
const userCount = count(context.messages, m => m.type === 'user')
|
|
86
|
+
if (userCount - lastAnalyzedCount < TURN_BATCH_SIZE) {
|
|
87
|
+
return false
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
lastAnalyzedCount = userCount
|
|
91
|
+
return true
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
buildMessages(context) {
|
|
95
|
+
const projectSkill = findProjectSkill()!
|
|
96
|
+
// Only analyze messages since the last check — the skill definition
|
|
97
|
+
// provides enough context for the classifier to understand corrections
|
|
98
|
+
const newMessages = context.messages.slice(lastAnalyzedIndex)
|
|
99
|
+
lastAnalyzedIndex = context.messages.length
|
|
100
|
+
|
|
101
|
+
return [
|
|
102
|
+
createUserMessage({
|
|
103
|
+
content: `You are analyzing a conversation where a user is executing a skill (a repeatable process).
|
|
104
|
+
Your job: identify if the user's recent messages contain preferences, requests, or corrections that should be permanently added to the skill definition for future runs.
|
|
105
|
+
|
|
106
|
+
<skill_definition>
|
|
107
|
+
${projectSkill.content}
|
|
108
|
+
</skill_definition>
|
|
109
|
+
|
|
110
|
+
<recent_messages>
|
|
111
|
+
${formatRecentMessages(newMessages)}
|
|
112
|
+
</recent_messages>
|
|
113
|
+
|
|
114
|
+
Look for:
|
|
115
|
+
- Requests to add, change, or remove steps: "can you also ask me X", "please do Y too", "don't do Z"
|
|
116
|
+
- Preferences about how steps should work: "ask me about energy levels", "note the time", "use a casual tone"
|
|
117
|
+
- Corrections: "no, do X instead", "always use Y", "make sure to..."
|
|
118
|
+
|
|
119
|
+
Ignore:
|
|
120
|
+
- Routine conversation that doesn't generalize (one-time answers, chitchat)
|
|
121
|
+
- Things the skill already does
|
|
122
|
+
|
|
123
|
+
Output a JSON array inside <updates> tags. Each item: {"section": "which step/section to modify or 'new step'", "change": "what to add/modify", "reason": "which user message prompted this"}.
|
|
124
|
+
Output <updates>[]</updates> if no updates are needed.`,
|
|
125
|
+
}),
|
|
126
|
+
]
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
systemPrompt:
|
|
130
|
+
'You detect user preferences and process improvements during skill execution. Flag anything the user asks for that should be remembered for next time.',
|
|
131
|
+
|
|
132
|
+
useTools: false,
|
|
133
|
+
|
|
134
|
+
parseResponse(content) {
|
|
135
|
+
const updatesStr = extractTag(content, 'updates')
|
|
136
|
+
if (!updatesStr) {
|
|
137
|
+
return []
|
|
138
|
+
}
|
|
139
|
+
try {
|
|
140
|
+
return jsonParse(updatesStr) as SkillUpdate[]
|
|
141
|
+
} catch {
|
|
142
|
+
return []
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
logResult(result, context) {
|
|
147
|
+
if (result.type === 'success' && result.result.length > 0) {
|
|
148
|
+
const projectSkill = findProjectSkill()
|
|
149
|
+
const skillName = projectSkill?.skillName ?? 'unknown'
|
|
150
|
+
|
|
151
|
+
logEvent('tengu_skill_improvement_detected', {
|
|
152
|
+
updateCount: result.result
|
|
153
|
+
.length as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
154
|
+
uuid: result.uuid as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
|
|
155
|
+
// _PROTO_skill_name routes to the privileged skill_name BQ column.
|
|
156
|
+
_PROTO_skill_name:
|
|
157
|
+
skillName as AnalyticsMetadata_I_VERIFIED_THIS_IS_PII_TAGGED,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
context.toolUseContext.setAppState(prev => ({
|
|
161
|
+
...prev,
|
|
162
|
+
skillImprovement: {
|
|
163
|
+
suggestion: { skillName, updates: result.result },
|
|
164
|
+
},
|
|
165
|
+
}))
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
getModel: getSmallFastModel,
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return createApiQueryHook(config)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export function initSkillImprovement(): void {
|
|
176
|
+
if (
|
|
177
|
+
feature('SKILL_IMPROVEMENT') &&
|
|
178
|
+
getFeatureValue_CACHED_MAY_BE_STALE('tengu_copper_panda', false)
|
|
179
|
+
) {
|
|
180
|
+
registerPostSamplingHook(createSkillImprovementHook())
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Apply skill improvements by calling a side-channel LLM to rewrite the skill file.
|
|
186
|
+
* Fire-and-forget — does not block the main conversation.
|
|
187
|
+
*/
|
|
188
|
+
export async function applySkillImprovement(
|
|
189
|
+
skillName: string,
|
|
190
|
+
updates: SkillUpdate[],
|
|
191
|
+
): Promise<void> {
|
|
192
|
+
if (!skillName) return
|
|
193
|
+
|
|
194
|
+
const { join } = await import('path')
|
|
195
|
+
const fs = await import('fs/promises')
|
|
196
|
+
|
|
197
|
+
// Skills live at .claude/skills/<name>/SKILL.md relative to CWD
|
|
198
|
+
const filePath = join(getCwd(), '.claude', 'skills', skillName, 'SKILL.md')
|
|
199
|
+
|
|
200
|
+
let currentContent: string
|
|
201
|
+
try {
|
|
202
|
+
currentContent = await fs.readFile(filePath, 'utf-8')
|
|
203
|
+
} catch {
|
|
204
|
+
logError(
|
|
205
|
+
new Error(`Failed to read skill file for improvement: ${filePath}`),
|
|
206
|
+
)
|
|
207
|
+
return
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const updateList = updates.map(u => `- ${u.section}: ${u.change}`).join('\n')
|
|
211
|
+
|
|
212
|
+
const response = await queryModelWithoutStreaming({
|
|
213
|
+
messages: [
|
|
214
|
+
createUserMessage({
|
|
215
|
+
content: `You are editing a skill definition file. Apply the following improvements to the skill.
|
|
216
|
+
|
|
217
|
+
<current_skill_file>
|
|
218
|
+
${currentContent}
|
|
219
|
+
</current_skill_file>
|
|
220
|
+
|
|
221
|
+
<improvements>
|
|
222
|
+
${updateList}
|
|
223
|
+
</improvements>
|
|
224
|
+
|
|
225
|
+
Rules:
|
|
226
|
+
- Integrate the improvements naturally into the existing structure
|
|
227
|
+
- Preserve frontmatter (--- block) exactly as-is
|
|
228
|
+
- Preserve the overall format and style
|
|
229
|
+
- Do not remove existing content unless an improvement explicitly replaces it
|
|
230
|
+
- Output the complete updated file inside <updated_file> tags`,
|
|
231
|
+
}),
|
|
232
|
+
],
|
|
233
|
+
systemPrompt: asSystemPrompt([
|
|
234
|
+
'You edit skill definition files to incorporate user preferences. Output only the updated file content.',
|
|
235
|
+
]),
|
|
236
|
+
thinkingConfig: { type: 'disabled' as const },
|
|
237
|
+
tools: [],
|
|
238
|
+
signal: createAbortController().signal,
|
|
239
|
+
options: {
|
|
240
|
+
getToolPermissionContext: async () => getEmptyToolPermissionContext(),
|
|
241
|
+
model: getSmallFastModel(),
|
|
242
|
+
toolChoice: undefined,
|
|
243
|
+
isNonInteractiveSession: false,
|
|
244
|
+
hasAppendSystemPrompt: false,
|
|
245
|
+
temperatureOverride: 0,
|
|
246
|
+
agents: [],
|
|
247
|
+
querySource: 'skill_improvement_apply',
|
|
248
|
+
mcpTools: [],
|
|
249
|
+
},
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
const responseText = extractTextContent(response.message.content).trim()
|
|
253
|
+
|
|
254
|
+
const updatedContent = extractTag(responseText, 'updated_file')
|
|
255
|
+
if (!updatedContent) {
|
|
256
|
+
logError(
|
|
257
|
+
new Error('Skill improvement apply: no updated_file tag in response'),
|
|
258
|
+
)
|
|
259
|
+
return
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
await fs.writeFile(filePath, updatedContent, 'utf-8')
|
|
264
|
+
} catch (e) {
|
|
265
|
+
logError(toError(e))
|
|
266
|
+
}
|
|
267
|
+
}
|