@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,495 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Memory automatically maintains a markdown file with notes about the current conversation.
|
|
3
|
+
* It runs periodically in the background using a forked subagent to extract key information
|
|
4
|
+
* without interrupting the main conversation flow.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { writeFile } from 'fs/promises'
|
|
8
|
+
import memoize from 'lodash-es/memoize.js'
|
|
9
|
+
import { getIsRemoteMode } from '../../bootstrap/state.js'
|
|
10
|
+
import { getSystemPrompt } from '../../constants/prompts.js'
|
|
11
|
+
import { getSystemContext, getUserContext } from '../../context.js'
|
|
12
|
+
import type { CanUseToolFn } from '../../hooks/useCanUseTool.js'
|
|
13
|
+
import type { Tool, ToolUseContext } from '../../Tool.js'
|
|
14
|
+
import { FILE_EDIT_TOOL_NAME } from '../../tools/FileEditTool/constants.js'
|
|
15
|
+
import {
|
|
16
|
+
FileReadTool,
|
|
17
|
+
type Output as FileReadToolOutput,
|
|
18
|
+
} from '../../tools/FileReadTool/FileReadTool.js'
|
|
19
|
+
import type { Message } from '../../types/message.js'
|
|
20
|
+
import { count } from '../../utils/array.js'
|
|
21
|
+
import {
|
|
22
|
+
createCacheSafeParams,
|
|
23
|
+
createSubagentContext,
|
|
24
|
+
runForkedAgent,
|
|
25
|
+
} from '../../utils/forkedAgent.js'
|
|
26
|
+
import { getFsImplementation } from '../../utils/fsOperations.js'
|
|
27
|
+
import {
|
|
28
|
+
type REPLHookContext,
|
|
29
|
+
registerPostSamplingHook,
|
|
30
|
+
} from '../../utils/hooks/postSamplingHooks.js'
|
|
31
|
+
import {
|
|
32
|
+
createUserMessage,
|
|
33
|
+
hasToolCallsInLastAssistantTurn,
|
|
34
|
+
} from '../../utils/messages.js'
|
|
35
|
+
import {
|
|
36
|
+
getSessionMemoryDir,
|
|
37
|
+
getSessionMemoryPath,
|
|
38
|
+
} from '../../utils/permissions/filesystem.js'
|
|
39
|
+
import { sequential } from '../../utils/sequential.js'
|
|
40
|
+
import { asSystemPrompt } from '../../utils/systemPromptType.js'
|
|
41
|
+
import { getTokenUsage, tokenCountWithEstimation } from '../../utils/tokens.js'
|
|
42
|
+
import { logEvent } from '../analytics/index.js'
|
|
43
|
+
import { isAutoCompactEnabled } from '../compact/autoCompact.js'
|
|
44
|
+
import {
|
|
45
|
+
buildSessionMemoryUpdatePrompt,
|
|
46
|
+
loadSessionMemoryTemplate,
|
|
47
|
+
} from './prompts.js'
|
|
48
|
+
import {
|
|
49
|
+
DEFAULT_SESSION_MEMORY_CONFIG,
|
|
50
|
+
getSessionMemoryConfig,
|
|
51
|
+
getToolCallsBetweenUpdates,
|
|
52
|
+
hasMetInitializationThreshold,
|
|
53
|
+
hasMetUpdateThreshold,
|
|
54
|
+
isSessionMemoryInitialized,
|
|
55
|
+
markExtractionCompleted,
|
|
56
|
+
markExtractionStarted,
|
|
57
|
+
markSessionMemoryInitialized,
|
|
58
|
+
recordExtractionTokenCount,
|
|
59
|
+
type SessionMemoryConfig,
|
|
60
|
+
setLastSummarizedMessageId,
|
|
61
|
+
setSessionMemoryConfig,
|
|
62
|
+
} from './sessionMemoryUtils.js'
|
|
63
|
+
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Feature Gate and Config (Cached - Non-blocking)
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// These functions return cached values from disk immediately without blocking
|
|
68
|
+
// on GrowthBook initialization. Values may be stale but are updated in background.
|
|
69
|
+
|
|
70
|
+
import { errorMessage, getErrnoCode } from '../../utils/errors.js'
|
|
71
|
+
import {
|
|
72
|
+
getDynamicConfig_CACHED_MAY_BE_STALE,
|
|
73
|
+
getFeatureValue_CACHED_MAY_BE_STALE,
|
|
74
|
+
} from '../analytics/growthbook.js'
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Check if session memory feature is enabled.
|
|
78
|
+
* Uses cached gate value - returns immediately without blocking.
|
|
79
|
+
*/
|
|
80
|
+
function isSessionMemoryGateEnabled(): boolean {
|
|
81
|
+
return getFeatureValue_CACHED_MAY_BE_STALE('tengu_session_memory', false)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get session memory config from cache.
|
|
86
|
+
* Returns immediately without blocking - value may be stale.
|
|
87
|
+
*/
|
|
88
|
+
function getSessionMemoryRemoteConfig(): Partial<SessionMemoryConfig> {
|
|
89
|
+
return getDynamicConfig_CACHED_MAY_BE_STALE<Partial<SessionMemoryConfig>>(
|
|
90
|
+
'tengu_sm_config',
|
|
91
|
+
{},
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// Module State
|
|
97
|
+
// ============================================================================
|
|
98
|
+
|
|
99
|
+
let lastMemoryMessageUuid: string | undefined
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Reset the last memory message UUID (for testing)
|
|
103
|
+
*/
|
|
104
|
+
export function resetLastMemoryMessageUuid(): void {
|
|
105
|
+
lastMemoryMessageUuid = undefined
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function countToolCallsSince(
|
|
109
|
+
messages: Message[],
|
|
110
|
+
sinceUuid: string | undefined,
|
|
111
|
+
): number {
|
|
112
|
+
let toolCallCount = 0
|
|
113
|
+
let foundStart = sinceUuid === null || sinceUuid === undefined
|
|
114
|
+
|
|
115
|
+
for (const message of messages) {
|
|
116
|
+
if (!foundStart) {
|
|
117
|
+
if (message.uuid === sinceUuid) {
|
|
118
|
+
foundStart = true
|
|
119
|
+
}
|
|
120
|
+
continue
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (message.type === 'assistant') {
|
|
124
|
+
const content = message.message.content
|
|
125
|
+
if (Array.isArray(content)) {
|
|
126
|
+
toolCallCount += count(content, block => block.type === 'tool_use')
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return toolCallCount
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function shouldExtractMemory(messages: Message[]): boolean {
|
|
135
|
+
// Check if we've met the initialization threshold
|
|
136
|
+
// Uses total context window tokens (same as autocompact) for consistent behavior
|
|
137
|
+
const currentTokenCount = tokenCountWithEstimation(messages)
|
|
138
|
+
if (!isSessionMemoryInitialized()) {
|
|
139
|
+
if (!hasMetInitializationThreshold(currentTokenCount)) {
|
|
140
|
+
return false
|
|
141
|
+
}
|
|
142
|
+
markSessionMemoryInitialized()
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Check if we've met the minimum tokens between updates threshold
|
|
146
|
+
// Uses context window growth since last extraction (same metric as init threshold)
|
|
147
|
+
const hasMetTokenThreshold = hasMetUpdateThreshold(currentTokenCount)
|
|
148
|
+
|
|
149
|
+
// Check if we've met the tool calls threshold
|
|
150
|
+
const toolCallsSinceLastUpdate = countToolCallsSince(
|
|
151
|
+
messages,
|
|
152
|
+
lastMemoryMessageUuid,
|
|
153
|
+
)
|
|
154
|
+
const hasMetToolCallThreshold =
|
|
155
|
+
toolCallsSinceLastUpdate >= getToolCallsBetweenUpdates()
|
|
156
|
+
|
|
157
|
+
// Check if the last assistant turn has no tool calls (safe to extract)
|
|
158
|
+
const hasToolCallsInLastTurn = hasToolCallsInLastAssistantTurn(messages)
|
|
159
|
+
|
|
160
|
+
// Trigger extraction when:
|
|
161
|
+
// 1. Both thresholds are met (tokens AND tool calls), OR
|
|
162
|
+
// 2. No tool calls in last turn AND token threshold is met
|
|
163
|
+
// (to ensure we extract at natural conversation breaks)
|
|
164
|
+
//
|
|
165
|
+
// IMPORTANT: The token threshold (minimumTokensBetweenUpdate) is ALWAYS required.
|
|
166
|
+
// Even if the tool call threshold is met, extraction won't happen until the
|
|
167
|
+
// token threshold is also satisfied. This prevents excessive extractions.
|
|
168
|
+
const shouldExtract =
|
|
169
|
+
(hasMetTokenThreshold && hasMetToolCallThreshold) ||
|
|
170
|
+
(hasMetTokenThreshold && !hasToolCallsInLastTurn)
|
|
171
|
+
|
|
172
|
+
if (shouldExtract) {
|
|
173
|
+
const lastMessage = messages[messages.length - 1]
|
|
174
|
+
if (lastMessage?.uuid) {
|
|
175
|
+
lastMemoryMessageUuid = lastMessage.uuid
|
|
176
|
+
}
|
|
177
|
+
return true
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return false
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function setupSessionMemoryFile(
|
|
184
|
+
toolUseContext: ToolUseContext,
|
|
185
|
+
): Promise<{ memoryPath: string; currentMemory: string }> {
|
|
186
|
+
const fs = getFsImplementation()
|
|
187
|
+
|
|
188
|
+
// Set up directory and file
|
|
189
|
+
const sessionMemoryDir = getSessionMemoryDir()
|
|
190
|
+
await fs.mkdir(sessionMemoryDir, { mode: 0o700 })
|
|
191
|
+
|
|
192
|
+
const memoryPath = getSessionMemoryPath()
|
|
193
|
+
|
|
194
|
+
// Create the memory file if it doesn't exist (wx = O_CREAT|O_EXCL)
|
|
195
|
+
try {
|
|
196
|
+
await writeFile(memoryPath, '', {
|
|
197
|
+
encoding: 'utf-8',
|
|
198
|
+
mode: 0o600,
|
|
199
|
+
flag: 'wx',
|
|
200
|
+
})
|
|
201
|
+
// Only load template if file was just created
|
|
202
|
+
const template = await loadSessionMemoryTemplate()
|
|
203
|
+
await writeFile(memoryPath, template, {
|
|
204
|
+
encoding: 'utf-8',
|
|
205
|
+
mode: 0o600,
|
|
206
|
+
})
|
|
207
|
+
} catch (e: unknown) {
|
|
208
|
+
const code = getErrnoCode(e)
|
|
209
|
+
if (code !== 'EEXIST') {
|
|
210
|
+
throw e
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Drop any cached entry so FileReadTool's dedup doesn't return a
|
|
215
|
+
// file_unchanged stub — we need the actual content. The Read repopulates it.
|
|
216
|
+
toolUseContext.readFileState.delete(memoryPath)
|
|
217
|
+
const result = await FileReadTool.call(
|
|
218
|
+
{ file_path: memoryPath },
|
|
219
|
+
toolUseContext,
|
|
220
|
+
)
|
|
221
|
+
let currentMemory = ''
|
|
222
|
+
|
|
223
|
+
const output = result.data as FileReadToolOutput
|
|
224
|
+
if (output.type === 'text') {
|
|
225
|
+
currentMemory = output.file.content
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
logEvent('tengu_session_memory_file_read', {
|
|
229
|
+
content_length: currentMemory.length,
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
return { memoryPath, currentMemory }
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Initialize session memory config from remote config (lazy initialization).
|
|
237
|
+
* Memoized - only runs once per session, subsequent calls return immediately.
|
|
238
|
+
* Uses cached config values - non-blocking.
|
|
239
|
+
*/
|
|
240
|
+
const initSessionMemoryConfigIfNeeded = memoize((): void => {
|
|
241
|
+
// Load config from cache (non-blocking, may be stale)
|
|
242
|
+
const remoteConfig = getSessionMemoryRemoteConfig()
|
|
243
|
+
|
|
244
|
+
// Only use remote values if they are explicitly set (non-zero positive numbers)
|
|
245
|
+
// This ensures sensible defaults aren't overridden by zero values
|
|
246
|
+
const config: SessionMemoryConfig = {
|
|
247
|
+
minimumMessageTokensToInit:
|
|
248
|
+
remoteConfig.minimumMessageTokensToInit &&
|
|
249
|
+
remoteConfig.minimumMessageTokensToInit > 0
|
|
250
|
+
? remoteConfig.minimumMessageTokensToInit
|
|
251
|
+
: DEFAULT_SESSION_MEMORY_CONFIG.minimumMessageTokensToInit,
|
|
252
|
+
minimumTokensBetweenUpdate:
|
|
253
|
+
remoteConfig.minimumTokensBetweenUpdate &&
|
|
254
|
+
remoteConfig.minimumTokensBetweenUpdate > 0
|
|
255
|
+
? remoteConfig.minimumTokensBetweenUpdate
|
|
256
|
+
: DEFAULT_SESSION_MEMORY_CONFIG.minimumTokensBetweenUpdate,
|
|
257
|
+
toolCallsBetweenUpdates:
|
|
258
|
+
remoteConfig.toolCallsBetweenUpdates &&
|
|
259
|
+
remoteConfig.toolCallsBetweenUpdates > 0
|
|
260
|
+
? remoteConfig.toolCallsBetweenUpdates
|
|
261
|
+
: DEFAULT_SESSION_MEMORY_CONFIG.toolCallsBetweenUpdates,
|
|
262
|
+
}
|
|
263
|
+
setSessionMemoryConfig(config)
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Session memory post-sampling hook that extracts and updates session notes
|
|
268
|
+
*/
|
|
269
|
+
// Track if we've logged the gate check failure this session (to avoid spam)
|
|
270
|
+
let hasLoggedGateFailure = false
|
|
271
|
+
|
|
272
|
+
const extractSessionMemory = sequential(async function (
|
|
273
|
+
context: REPLHookContext,
|
|
274
|
+
): Promise<void> {
|
|
275
|
+
const { messages, toolUseContext, querySource } = context
|
|
276
|
+
|
|
277
|
+
// Only run session memory on main REPL thread
|
|
278
|
+
if (querySource !== 'repl_main_thread') {
|
|
279
|
+
// Don't log this - it's expected for subagents, teammates, etc.
|
|
280
|
+
return
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Check gate lazily when hook runs (cached, non-blocking)
|
|
284
|
+
if (!isSessionMemoryGateEnabled()) {
|
|
285
|
+
// Log gate failure once per session (ant-only)
|
|
286
|
+
if (process.env.USER_TYPE === 'ant' && !hasLoggedGateFailure) {
|
|
287
|
+
hasLoggedGateFailure = true
|
|
288
|
+
logEvent('tengu_session_memory_gate_disabled', {})
|
|
289
|
+
}
|
|
290
|
+
return
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Initialize config from remote (lazy, only once)
|
|
294
|
+
initSessionMemoryConfigIfNeeded()
|
|
295
|
+
|
|
296
|
+
if (!shouldExtractMemory(messages)) {
|
|
297
|
+
return
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
markExtractionStarted()
|
|
301
|
+
|
|
302
|
+
// Create isolated context for setup to avoid polluting parent's cache
|
|
303
|
+
const setupContext = createSubagentContext(toolUseContext)
|
|
304
|
+
|
|
305
|
+
// Set up file system and read current state with isolated context
|
|
306
|
+
const { memoryPath, currentMemory } =
|
|
307
|
+
await setupSessionMemoryFile(setupContext)
|
|
308
|
+
|
|
309
|
+
// Create extraction message
|
|
310
|
+
const userPrompt = await buildSessionMemoryUpdatePrompt(
|
|
311
|
+
currentMemory,
|
|
312
|
+
memoryPath,
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
// Run session memory extraction using runForkedAgent for prompt caching
|
|
316
|
+
// runForkedAgent creates an isolated context to prevent mutation of parent state
|
|
317
|
+
// Pass setupContext.readFileState so the forked agent can edit the memory file
|
|
318
|
+
await runForkedAgent({
|
|
319
|
+
promptMessages: [createUserMessage({ content: userPrompt })],
|
|
320
|
+
cacheSafeParams: createCacheSafeParams(context),
|
|
321
|
+
canUseTool: createMemoryFileCanUseTool(memoryPath),
|
|
322
|
+
querySource: 'session_memory',
|
|
323
|
+
forkLabel: 'session_memory',
|
|
324
|
+
overrides: { readFileState: setupContext.readFileState },
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
// Log extraction event for tracking frequency
|
|
328
|
+
// Use the token usage from the last message in the conversation
|
|
329
|
+
const lastMessage = messages[messages.length - 1]
|
|
330
|
+
const usage = lastMessage ? getTokenUsage(lastMessage) : undefined
|
|
331
|
+
const config = getSessionMemoryConfig()
|
|
332
|
+
logEvent('tengu_session_memory_extraction', {
|
|
333
|
+
input_tokens: usage?.input_tokens,
|
|
334
|
+
output_tokens: usage?.output_tokens,
|
|
335
|
+
cache_read_input_tokens: usage?.cache_read_input_tokens ?? undefined,
|
|
336
|
+
cache_creation_input_tokens:
|
|
337
|
+
usage?.cache_creation_input_tokens ?? undefined,
|
|
338
|
+
config_min_message_tokens_to_init: config.minimumMessageTokensToInit,
|
|
339
|
+
config_min_tokens_between_update: config.minimumTokensBetweenUpdate,
|
|
340
|
+
config_tool_calls_between_updates: config.toolCallsBetweenUpdates,
|
|
341
|
+
})
|
|
342
|
+
|
|
343
|
+
// Record the context size at extraction for tracking minimumTokensBetweenUpdate
|
|
344
|
+
recordExtractionTokenCount(tokenCountWithEstimation(messages))
|
|
345
|
+
|
|
346
|
+
// Update lastSummarizedMessageId after successful completion
|
|
347
|
+
updateLastSummarizedMessageIdIfSafe(messages)
|
|
348
|
+
|
|
349
|
+
markExtractionCompleted()
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Initialize session memory by registering the post-sampling hook.
|
|
354
|
+
* This is synchronous to avoid race conditions during startup.
|
|
355
|
+
* The gate check and config loading happen lazily when the hook runs.
|
|
356
|
+
*/
|
|
357
|
+
export function initSessionMemory(): void {
|
|
358
|
+
if (getIsRemoteMode()) return
|
|
359
|
+
// Session memory is used for compaction, so respect auto-compact settings
|
|
360
|
+
const autoCompactEnabled = isAutoCompactEnabled()
|
|
361
|
+
|
|
362
|
+
// Log initialization state (ant-only to avoid noise in external logs)
|
|
363
|
+
if (process.env.USER_TYPE === 'ant') {
|
|
364
|
+
logEvent('tengu_session_memory_init', {
|
|
365
|
+
auto_compact_enabled: autoCompactEnabled,
|
|
366
|
+
})
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
if (!autoCompactEnabled) {
|
|
370
|
+
return
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Register hook unconditionally - gate check happens lazily when hook runs
|
|
374
|
+
registerPostSamplingHook(extractSessionMemory)
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export type ManualExtractionResult = {
|
|
378
|
+
success: boolean
|
|
379
|
+
memoryPath?: string
|
|
380
|
+
error?: string
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Manually trigger session memory extraction, bypassing threshold checks.
|
|
385
|
+
* Used by the /summary command.
|
|
386
|
+
*/
|
|
387
|
+
export async function manuallyExtractSessionMemory(
|
|
388
|
+
messages: Message[],
|
|
389
|
+
toolUseContext: ToolUseContext,
|
|
390
|
+
): Promise<ManualExtractionResult> {
|
|
391
|
+
if (messages.length === 0) {
|
|
392
|
+
return { success: false, error: 'No messages to summarize' }
|
|
393
|
+
}
|
|
394
|
+
markExtractionStarted()
|
|
395
|
+
|
|
396
|
+
try {
|
|
397
|
+
// Create isolated context for setup to avoid polluting parent's cache
|
|
398
|
+
const setupContext = createSubagentContext(toolUseContext)
|
|
399
|
+
|
|
400
|
+
// Set up file system and read current state with isolated context
|
|
401
|
+
const { memoryPath, currentMemory } =
|
|
402
|
+
await setupSessionMemoryFile(setupContext)
|
|
403
|
+
|
|
404
|
+
// Create extraction message
|
|
405
|
+
const userPrompt = await buildSessionMemoryUpdatePrompt(
|
|
406
|
+
currentMemory,
|
|
407
|
+
memoryPath,
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
// Get system prompt for cache-safe params
|
|
411
|
+
const { tools, mainLoopModel } = toolUseContext.options
|
|
412
|
+
const [rawSystemPrompt, userContext, systemContext] = await Promise.all([
|
|
413
|
+
getSystemPrompt(tools, mainLoopModel),
|
|
414
|
+
getUserContext(),
|
|
415
|
+
getSystemContext(),
|
|
416
|
+
])
|
|
417
|
+
const systemPrompt = asSystemPrompt(rawSystemPrompt)
|
|
418
|
+
|
|
419
|
+
// Run session memory extraction using runForkedAgent
|
|
420
|
+
await runForkedAgent({
|
|
421
|
+
promptMessages: [createUserMessage({ content: userPrompt })],
|
|
422
|
+
cacheSafeParams: {
|
|
423
|
+
systemPrompt,
|
|
424
|
+
userContext,
|
|
425
|
+
systemContext,
|
|
426
|
+
toolUseContext: setupContext,
|
|
427
|
+
forkContextMessages: messages,
|
|
428
|
+
},
|
|
429
|
+
canUseTool: createMemoryFileCanUseTool(memoryPath),
|
|
430
|
+
querySource: 'session_memory',
|
|
431
|
+
forkLabel: 'session_memory_manual',
|
|
432
|
+
overrides: { readFileState: setupContext.readFileState },
|
|
433
|
+
})
|
|
434
|
+
|
|
435
|
+
// Log manual extraction event
|
|
436
|
+
logEvent('tengu_session_memory_manual_extraction', {})
|
|
437
|
+
|
|
438
|
+
// Record the context size at extraction for tracking minimumTokensBetweenUpdate
|
|
439
|
+
recordExtractionTokenCount(tokenCountWithEstimation(messages))
|
|
440
|
+
|
|
441
|
+
// Update lastSummarizedMessageId after successful completion
|
|
442
|
+
updateLastSummarizedMessageIdIfSafe(messages)
|
|
443
|
+
|
|
444
|
+
return { success: true, memoryPath }
|
|
445
|
+
} catch (error) {
|
|
446
|
+
return {
|
|
447
|
+
success: false,
|
|
448
|
+
error: errorMessage(error),
|
|
449
|
+
}
|
|
450
|
+
} finally {
|
|
451
|
+
markExtractionCompleted()
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Helper functions
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Creates a canUseTool function that only allows Edit for the exact memory file.
|
|
459
|
+
*/
|
|
460
|
+
export function createMemoryFileCanUseTool(memoryPath: string): CanUseToolFn {
|
|
461
|
+
return async (tool: Tool, input: unknown) => {
|
|
462
|
+
if (
|
|
463
|
+
tool.name === FILE_EDIT_TOOL_NAME &&
|
|
464
|
+
typeof input === 'object' &&
|
|
465
|
+
input !== null &&
|
|
466
|
+
'file_path' in input
|
|
467
|
+
) {
|
|
468
|
+
const filePath = input.file_path
|
|
469
|
+
if (typeof filePath === 'string' && filePath === memoryPath) {
|
|
470
|
+
return { behavior: 'allow' as const, updatedInput: input }
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
return {
|
|
474
|
+
behavior: 'deny' as const,
|
|
475
|
+
message: `only ${FILE_EDIT_TOOL_NAME} on ${memoryPath} is allowed`,
|
|
476
|
+
decisionReason: {
|
|
477
|
+
type: 'other' as const,
|
|
478
|
+
reason: `only ${FILE_EDIT_TOOL_NAME} on ${memoryPath} is allowed`,
|
|
479
|
+
},
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/**
|
|
485
|
+
* Updates lastSummarizedMessageId after successful extraction.
|
|
486
|
+
* Only sets it if the last message doesn't have tool calls (to avoid orphaned tool_results).
|
|
487
|
+
*/
|
|
488
|
+
function updateLastSummarizedMessageIdIfSafe(messages: Message[]): void {
|
|
489
|
+
if (!hasToolCallsInLastAssistantTurn(messages)) {
|
|
490
|
+
const lastMessage = messages[messages.length - 1]
|
|
491
|
+
if (lastMessage?.uuid) {
|
|
492
|
+
setLastSummarizedMessageId(lastMessage.uuid)
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Memory utility functions that can be imported without circular dependencies.
|
|
3
|
+
* These are separate from the main sessionMemory.ts to avoid importing runAgent.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { isFsInaccessible } from '../../utils/errors.js'
|
|
7
|
+
import { getFsImplementation } from '../../utils/fsOperations.js'
|
|
8
|
+
import { getSessionMemoryPath } from '../../utils/permissions/filesystem.js'
|
|
9
|
+
import { sleep } from '../../utils/sleep.js'
|
|
10
|
+
import { logEvent } from '../analytics/index.js'
|
|
11
|
+
|
|
12
|
+
const EXTRACTION_WAIT_TIMEOUT_MS = 15000
|
|
13
|
+
const EXTRACTION_STALE_THRESHOLD_MS = 60000 // 1 minute
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for session memory extraction thresholds
|
|
17
|
+
*/
|
|
18
|
+
export type SessionMemoryConfig = {
|
|
19
|
+
/** Minimum context window tokens before initializing session memory.
|
|
20
|
+
* Uses the same token counting as autocompact (input + output + cache tokens)
|
|
21
|
+
* to ensure consistent behavior between the two features. */
|
|
22
|
+
minimumMessageTokensToInit: number
|
|
23
|
+
/** Minimum context window growth (in tokens) between session memory updates.
|
|
24
|
+
* Uses the same token counting as autocompact (tokenCountWithEstimation)
|
|
25
|
+
* to measure actual context growth, not cumulative API usage. */
|
|
26
|
+
minimumTokensBetweenUpdate: number
|
|
27
|
+
/** Number of tool calls between session memory updates */
|
|
28
|
+
toolCallsBetweenUpdates: number
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Default configuration values
|
|
32
|
+
export const DEFAULT_SESSION_MEMORY_CONFIG: SessionMemoryConfig = {
|
|
33
|
+
minimumMessageTokensToInit: 10000,
|
|
34
|
+
minimumTokensBetweenUpdate: 5000,
|
|
35
|
+
toolCallsBetweenUpdates: 3,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Current session memory configuration
|
|
39
|
+
let sessionMemoryConfig: SessionMemoryConfig = {
|
|
40
|
+
...DEFAULT_SESSION_MEMORY_CONFIG,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Track the last summarized message ID (shared state)
|
|
44
|
+
let lastSummarizedMessageId: string | undefined
|
|
45
|
+
|
|
46
|
+
// Track extraction state with timestamp (set by sessionMemory.ts)
|
|
47
|
+
let extractionStartedAt: number | undefined
|
|
48
|
+
|
|
49
|
+
// Track context size at last memory extraction (for minimumTokensBetweenUpdate)
|
|
50
|
+
let tokensAtLastExtraction = 0
|
|
51
|
+
|
|
52
|
+
// Track whether session memory has been initialized (met minimumMessageTokensToInit)
|
|
53
|
+
let sessionMemoryInitialized = false
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get the message ID up to which the session memory is current
|
|
57
|
+
*/
|
|
58
|
+
export function getLastSummarizedMessageId(): string | undefined {
|
|
59
|
+
return lastSummarizedMessageId
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Set the last summarized message ID (called from sessionMemory.ts)
|
|
64
|
+
*/
|
|
65
|
+
export function setLastSummarizedMessageId(
|
|
66
|
+
messageId: string | undefined,
|
|
67
|
+
): void {
|
|
68
|
+
lastSummarizedMessageId = messageId
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Mark extraction as started (called from sessionMemory.ts)
|
|
73
|
+
*/
|
|
74
|
+
export function markExtractionStarted(): void {
|
|
75
|
+
extractionStartedAt = Date.now()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Mark extraction as completed (called from sessionMemory.ts)
|
|
80
|
+
*/
|
|
81
|
+
export function markExtractionCompleted(): void {
|
|
82
|
+
extractionStartedAt = undefined
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Wait for any in-progress session memory extraction to complete (with 15s timeout)
|
|
87
|
+
* Returns immediately if no extraction is in progress or if extraction is stale (>1min old).
|
|
88
|
+
*/
|
|
89
|
+
export async function waitForSessionMemoryExtraction(): Promise<void> {
|
|
90
|
+
const startTime = Date.now()
|
|
91
|
+
while (extractionStartedAt) {
|
|
92
|
+
const extractionAge = Date.now() - extractionStartedAt
|
|
93
|
+
if (extractionAge > EXTRACTION_STALE_THRESHOLD_MS) {
|
|
94
|
+
// Extraction is stale, don't wait
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (Date.now() - startTime > EXTRACTION_WAIT_TIMEOUT_MS) {
|
|
99
|
+
// Timeout - continue anyway
|
|
100
|
+
return
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
await sleep(1000)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Get the current session memory content
|
|
109
|
+
*/
|
|
110
|
+
export async function getSessionMemoryContent(): Promise<string | null> {
|
|
111
|
+
const fs = getFsImplementation()
|
|
112
|
+
const memoryPath = getSessionMemoryPath()
|
|
113
|
+
|
|
114
|
+
try {
|
|
115
|
+
const content = await fs.readFile(memoryPath, { encoding: 'utf-8' })
|
|
116
|
+
|
|
117
|
+
logEvent('tengu_session_memory_loaded', {
|
|
118
|
+
content_length: content.length,
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
return content
|
|
122
|
+
} catch (e: unknown) {
|
|
123
|
+
if (isFsInaccessible(e)) return null
|
|
124
|
+
throw e
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Set the session memory configuration
|
|
130
|
+
*/
|
|
131
|
+
export function setSessionMemoryConfig(
|
|
132
|
+
config: Partial<SessionMemoryConfig>,
|
|
133
|
+
): void {
|
|
134
|
+
sessionMemoryConfig = {
|
|
135
|
+
...sessionMemoryConfig,
|
|
136
|
+
...config,
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get the current session memory configuration
|
|
142
|
+
*/
|
|
143
|
+
export function getSessionMemoryConfig(): SessionMemoryConfig {
|
|
144
|
+
return { ...sessionMemoryConfig }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Record the context size at the time of extraction.
|
|
149
|
+
* Used to measure context growth for minimumTokensBetweenUpdate threshold.
|
|
150
|
+
*/
|
|
151
|
+
export function recordExtractionTokenCount(currentTokenCount: number): void {
|
|
152
|
+
tokensAtLastExtraction = currentTokenCount
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Check if session memory has been initialized (met minimumTokensToInit threshold)
|
|
157
|
+
*/
|
|
158
|
+
export function isSessionMemoryInitialized(): boolean {
|
|
159
|
+
return sessionMemoryInitialized
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Mark session memory as initialized
|
|
164
|
+
*/
|
|
165
|
+
export function markSessionMemoryInitialized(): void {
|
|
166
|
+
sessionMemoryInitialized = true
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Check if we've met the threshold to initialize session memory.
|
|
171
|
+
* Uses total context window tokens (same as autocompact) for consistent behavior.
|
|
172
|
+
*/
|
|
173
|
+
export function hasMetInitializationThreshold(
|
|
174
|
+
currentTokenCount: number,
|
|
175
|
+
): boolean {
|
|
176
|
+
return currentTokenCount >= sessionMemoryConfig.minimumMessageTokensToInit
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Check if we've met the threshold for the next update.
|
|
181
|
+
* Measures actual context window growth since last extraction
|
|
182
|
+
* (same metric as autocompact and initialization threshold).
|
|
183
|
+
*/
|
|
184
|
+
export function hasMetUpdateThreshold(currentTokenCount: number): boolean {
|
|
185
|
+
const tokensSinceLastExtraction = currentTokenCount - tokensAtLastExtraction
|
|
186
|
+
return (
|
|
187
|
+
tokensSinceLastExtraction >= sessionMemoryConfig.minimumTokensBetweenUpdate
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Get the configured number of tool calls between updates
|
|
193
|
+
*/
|
|
194
|
+
export function getToolCallsBetweenUpdates(): number {
|
|
195
|
+
return sessionMemoryConfig.toolCallsBetweenUpdates
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Reset session memory state (useful for testing)
|
|
200
|
+
*/
|
|
201
|
+
export function resetSessionMemoryState(): void {
|
|
202
|
+
sessionMemoryConfig = { ...DEFAULT_SESSION_MEMORY_CONFIG }
|
|
203
|
+
tokensAtLastExtraction = 0
|
|
204
|
+
sessionMemoryInitialized = false
|
|
205
|
+
lastSummarizedMessageId = undefined
|
|
206
|
+
extractionStartedAt = undefined
|
|
207
|
+
}
|