@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,324 @@
|
|
|
1
|
+
// biome-ignore-all assist/source/organizeImports: ANT-ONLY import markers must not be reordered
|
|
2
|
+
// Background memory consolidation. Fires the /dream prompt as a forked
|
|
3
|
+
// subagent when time-gate passes AND enough sessions have accumulated.
|
|
4
|
+
//
|
|
5
|
+
// Gate order (cheapest first):
|
|
6
|
+
// 1. Time: hours since lastConsolidatedAt >= minHours (one stat)
|
|
7
|
+
// 2. Sessions: transcript count with mtime > lastConsolidatedAt >= minSessions
|
|
8
|
+
// 3. Lock: no other process mid-consolidation
|
|
9
|
+
//
|
|
10
|
+
// State is closure-scoped inside initAutoDream() rather than module-level
|
|
11
|
+
// (tests call initAutoDream() in beforeEach for a fresh closure).
|
|
12
|
+
|
|
13
|
+
import type { REPLHookContext } from '../../utils/hooks/postSamplingHooks.js'
|
|
14
|
+
import {
|
|
15
|
+
createCacheSafeParams,
|
|
16
|
+
runForkedAgent,
|
|
17
|
+
} from '../../utils/forkedAgent.js'
|
|
18
|
+
import {
|
|
19
|
+
createUserMessage,
|
|
20
|
+
createMemorySavedMessage,
|
|
21
|
+
} from '../../utils/messages.js'
|
|
22
|
+
import type { Message } from '../../types/message.js'
|
|
23
|
+
import { logForDebugging } from '../../utils/debug.js'
|
|
24
|
+
import type { ToolUseContext } from '../../Tool.js'
|
|
25
|
+
import { logEvent } from '../analytics/index.js'
|
|
26
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
|
|
27
|
+
import { isAutoMemoryEnabled, getAutoMemPath } from '../../memdir/paths.js'
|
|
28
|
+
import { isAutoDreamEnabled } from './config.js'
|
|
29
|
+
import { getProjectDir } from '../../utils/sessionStorage.js'
|
|
30
|
+
import {
|
|
31
|
+
getOriginalCwd,
|
|
32
|
+
getKairosActive,
|
|
33
|
+
getIsRemoteMode,
|
|
34
|
+
getSessionId,
|
|
35
|
+
} from '../../bootstrap/state.js'
|
|
36
|
+
import { createAutoMemCanUseTool } from '../extractMemories/extractMemories.js'
|
|
37
|
+
import { buildConsolidationPrompt } from './consolidationPrompt.js'
|
|
38
|
+
import {
|
|
39
|
+
readLastConsolidatedAt,
|
|
40
|
+
listSessionsTouchedSince,
|
|
41
|
+
tryAcquireConsolidationLock,
|
|
42
|
+
rollbackConsolidationLock,
|
|
43
|
+
} from './consolidationLock.js'
|
|
44
|
+
import {
|
|
45
|
+
registerDreamTask,
|
|
46
|
+
addDreamTurn,
|
|
47
|
+
completeDreamTask,
|
|
48
|
+
failDreamTask,
|
|
49
|
+
isDreamTask,
|
|
50
|
+
} from '../../tasks/DreamTask/DreamTask.js'
|
|
51
|
+
import { FILE_EDIT_TOOL_NAME } from '../../tools/FileEditTool/constants.js'
|
|
52
|
+
import { FILE_WRITE_TOOL_NAME } from '../../tools/FileWriteTool/prompt.js'
|
|
53
|
+
|
|
54
|
+
// Scan throttle: when time-gate passes but session-gate doesn't, the lock
|
|
55
|
+
// mtime doesn't advance, so the time-gate keeps passing every turn.
|
|
56
|
+
const SESSION_SCAN_INTERVAL_MS = 10 * 60 * 1000
|
|
57
|
+
|
|
58
|
+
type AutoDreamConfig = {
|
|
59
|
+
minHours: number
|
|
60
|
+
minSessions: number
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const DEFAULTS: AutoDreamConfig = {
|
|
64
|
+
minHours: 24,
|
|
65
|
+
minSessions: 5,
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Thresholds from tengu_onyx_plover. The enabled gate lives in config.ts
|
|
70
|
+
* (isAutoDreamEnabled); this returns only the scheduling knobs. Defensive
|
|
71
|
+
* per-field validation since GB cache can return stale wrong-type values.
|
|
72
|
+
*/
|
|
73
|
+
function getConfig(): AutoDreamConfig {
|
|
74
|
+
const raw =
|
|
75
|
+
getFeatureValue_CACHED_MAY_BE_STALE<Partial<AutoDreamConfig> | null>(
|
|
76
|
+
'tengu_onyx_plover',
|
|
77
|
+
null,
|
|
78
|
+
)
|
|
79
|
+
return {
|
|
80
|
+
minHours:
|
|
81
|
+
typeof raw?.minHours === 'number' &&
|
|
82
|
+
Number.isFinite(raw.minHours) &&
|
|
83
|
+
raw.minHours > 0
|
|
84
|
+
? raw.minHours
|
|
85
|
+
: DEFAULTS.minHours,
|
|
86
|
+
minSessions:
|
|
87
|
+
typeof raw?.minSessions === 'number' &&
|
|
88
|
+
Number.isFinite(raw.minSessions) &&
|
|
89
|
+
raw.minSessions > 0
|
|
90
|
+
? raw.minSessions
|
|
91
|
+
: DEFAULTS.minSessions,
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function isGateOpen(): boolean {
|
|
96
|
+
if (getKairosActive()) return false // KAIROS mode uses disk-skill dream
|
|
97
|
+
if (getIsRemoteMode()) return false
|
|
98
|
+
if (!isAutoMemoryEnabled()) return false
|
|
99
|
+
return isAutoDreamEnabled()
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Ant-build-only test override. Bypasses enabled/time/session gates but NOT
|
|
103
|
+
// the lock (so repeated turns don't pile up dreams) or the memory-dir
|
|
104
|
+
// precondition. Still scans sessions so the prompt's session-hint is populated.
|
|
105
|
+
function isForced(): boolean {
|
|
106
|
+
return false
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
type AppendSystemMessageFn = NonNullable<ToolUseContext['appendSystemMessage']>
|
|
110
|
+
|
|
111
|
+
let runner:
|
|
112
|
+
| ((
|
|
113
|
+
context: REPLHookContext,
|
|
114
|
+
appendSystemMessage?: AppendSystemMessageFn,
|
|
115
|
+
) => Promise<void>)
|
|
116
|
+
| null = null
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Call once at startup (from backgroundHousekeeping alongside
|
|
120
|
+
* initExtractMemories), or per-test in beforeEach for a fresh closure.
|
|
121
|
+
*/
|
|
122
|
+
export function initAutoDream(): void {
|
|
123
|
+
let lastSessionScanAt = 0
|
|
124
|
+
|
|
125
|
+
runner = async function runAutoDream(context, appendSystemMessage) {
|
|
126
|
+
const cfg = getConfig()
|
|
127
|
+
const force = isForced()
|
|
128
|
+
if (!force && !isGateOpen()) return
|
|
129
|
+
|
|
130
|
+
// --- Time gate ---
|
|
131
|
+
let lastAt: number
|
|
132
|
+
try {
|
|
133
|
+
lastAt = await readLastConsolidatedAt()
|
|
134
|
+
} catch (e: unknown) {
|
|
135
|
+
logForDebugging(
|
|
136
|
+
`[autoDream] readLastConsolidatedAt failed: ${(e as Error).message}`,
|
|
137
|
+
)
|
|
138
|
+
return
|
|
139
|
+
}
|
|
140
|
+
const hoursSince = (Date.now() - lastAt) / 3_600_000
|
|
141
|
+
if (!force && hoursSince < cfg.minHours) return
|
|
142
|
+
|
|
143
|
+
// --- Scan throttle ---
|
|
144
|
+
const sinceScanMs = Date.now() - lastSessionScanAt
|
|
145
|
+
if (!force && sinceScanMs < SESSION_SCAN_INTERVAL_MS) {
|
|
146
|
+
logForDebugging(
|
|
147
|
+
`[autoDream] scan throttle — time-gate passed but last scan was ${Math.round(sinceScanMs / 1000)}s ago`,
|
|
148
|
+
)
|
|
149
|
+
return
|
|
150
|
+
}
|
|
151
|
+
lastSessionScanAt = Date.now()
|
|
152
|
+
|
|
153
|
+
// --- Session gate ---
|
|
154
|
+
let sessionIds: string[]
|
|
155
|
+
try {
|
|
156
|
+
sessionIds = await listSessionsTouchedSince(lastAt)
|
|
157
|
+
} catch (e: unknown) {
|
|
158
|
+
logForDebugging(
|
|
159
|
+
`[autoDream] listSessionsTouchedSince failed: ${(e as Error).message}`,
|
|
160
|
+
)
|
|
161
|
+
return
|
|
162
|
+
}
|
|
163
|
+
// Exclude the current session (its mtime is always recent).
|
|
164
|
+
const currentSession = getSessionId()
|
|
165
|
+
sessionIds = sessionIds.filter(id => id !== currentSession)
|
|
166
|
+
if (!force && sessionIds.length < cfg.minSessions) {
|
|
167
|
+
logForDebugging(
|
|
168
|
+
`[autoDream] skip — ${sessionIds.length} sessions since last consolidation, need ${cfg.minSessions}`,
|
|
169
|
+
)
|
|
170
|
+
return
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// --- Lock ---
|
|
174
|
+
// Under force, skip acquire entirely — use the existing mtime so
|
|
175
|
+
// kill's rollback is a no-op (rewinds to where it already is).
|
|
176
|
+
// The lock file stays untouched; next non-force turn sees it as-is.
|
|
177
|
+
let priorMtime: number | null
|
|
178
|
+
if (force) {
|
|
179
|
+
priorMtime = lastAt
|
|
180
|
+
} else {
|
|
181
|
+
try {
|
|
182
|
+
priorMtime = await tryAcquireConsolidationLock()
|
|
183
|
+
} catch (e: unknown) {
|
|
184
|
+
logForDebugging(
|
|
185
|
+
`[autoDream] lock acquire failed: ${(e as Error).message}`,
|
|
186
|
+
)
|
|
187
|
+
return
|
|
188
|
+
}
|
|
189
|
+
if (priorMtime === null) return
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
logForDebugging(
|
|
193
|
+
`[autoDream] firing — ${hoursSince.toFixed(1)}h since last, ${sessionIds.length} sessions to review`,
|
|
194
|
+
)
|
|
195
|
+
logEvent('tengu_auto_dream_fired', {
|
|
196
|
+
hours_since: Math.round(hoursSince),
|
|
197
|
+
sessions_since: sessionIds.length,
|
|
198
|
+
})
|
|
199
|
+
|
|
200
|
+
const setAppState =
|
|
201
|
+
context.toolUseContext.setAppStateForTasks ??
|
|
202
|
+
context.toolUseContext.setAppState
|
|
203
|
+
const abortController = new AbortController()
|
|
204
|
+
const taskId = registerDreamTask(setAppState, {
|
|
205
|
+
sessionsReviewing: sessionIds.length,
|
|
206
|
+
priorMtime,
|
|
207
|
+
abortController,
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
try {
|
|
211
|
+
const memoryRoot = getAutoMemPath()
|
|
212
|
+
const transcriptDir = getProjectDir(getOriginalCwd())
|
|
213
|
+
// Tool constraints note goes in `extra`, not the shared prompt body —
|
|
214
|
+
// manual /dream runs in the main loop with normal permissions and this
|
|
215
|
+
// would be misleading there.
|
|
216
|
+
const extra = `
|
|
217
|
+
|
|
218
|
+
**Tool constraints for this run:** Bash is restricted to read-only commands (\`ls\`, \`find\`, \`grep\`, \`cat\`, \`stat\`, \`wc\`, \`head\`, \`tail\`, and similar). Anything that writes, redirects to a file, or modifies state will be denied. Plan your exploration with this in mind — no need to probe.
|
|
219
|
+
|
|
220
|
+
Sessions since last consolidation (${sessionIds.length}):
|
|
221
|
+
${sessionIds.map(id => `- ${id}`).join('\n')}`
|
|
222
|
+
const prompt = buildConsolidationPrompt(memoryRoot, transcriptDir, extra)
|
|
223
|
+
|
|
224
|
+
const result = await runForkedAgent({
|
|
225
|
+
promptMessages: [createUserMessage({ content: prompt })],
|
|
226
|
+
cacheSafeParams: createCacheSafeParams(context),
|
|
227
|
+
canUseTool: createAutoMemCanUseTool(memoryRoot),
|
|
228
|
+
querySource: 'auto_dream',
|
|
229
|
+
forkLabel: 'auto_dream',
|
|
230
|
+
skipTranscript: true,
|
|
231
|
+
overrides: { abortController },
|
|
232
|
+
onMessage: makeDreamProgressWatcher(taskId, setAppState),
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
completeDreamTask(taskId, setAppState)
|
|
236
|
+
// Inline completion summary in the main transcript (same surface as
|
|
237
|
+
// extractMemories's "Saved N memories" message).
|
|
238
|
+
const dreamState = context.toolUseContext.getAppState().tasks?.[taskId]
|
|
239
|
+
if (
|
|
240
|
+
appendSystemMessage &&
|
|
241
|
+
isDreamTask(dreamState) &&
|
|
242
|
+
dreamState.filesTouched.length > 0
|
|
243
|
+
) {
|
|
244
|
+
appendSystemMessage({
|
|
245
|
+
...createMemorySavedMessage(dreamState.filesTouched),
|
|
246
|
+
verb: 'Improved',
|
|
247
|
+
})
|
|
248
|
+
}
|
|
249
|
+
logForDebugging(
|
|
250
|
+
`[autoDream] completed — cache: read=${result.totalUsage.cache_read_input_tokens} created=${result.totalUsage.cache_creation_input_tokens}`,
|
|
251
|
+
)
|
|
252
|
+
logEvent('tengu_auto_dream_completed', {
|
|
253
|
+
cache_read: result.totalUsage.cache_read_input_tokens,
|
|
254
|
+
cache_created: result.totalUsage.cache_creation_input_tokens,
|
|
255
|
+
output: result.totalUsage.output_tokens,
|
|
256
|
+
sessions_reviewed: sessionIds.length,
|
|
257
|
+
})
|
|
258
|
+
} catch (e: unknown) {
|
|
259
|
+
// If the user killed from the bg-tasks dialog, DreamTask.kill already
|
|
260
|
+
// aborted, rolled back the lock, and set status=killed. Don't overwrite
|
|
261
|
+
// or double-rollback.
|
|
262
|
+
if (abortController.signal.aborted) {
|
|
263
|
+
logForDebugging('[autoDream] aborted by user')
|
|
264
|
+
return
|
|
265
|
+
}
|
|
266
|
+
logForDebugging(`[autoDream] fork failed: ${(e as Error).message}`)
|
|
267
|
+
logEvent('tengu_auto_dream_failed', {})
|
|
268
|
+
failDreamTask(taskId, setAppState)
|
|
269
|
+
// Rewind mtime so time-gate passes again. Scan throttle is the backoff.
|
|
270
|
+
await rollbackConsolidationLock(priorMtime)
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Watch the forked agent's messages. For each assistant turn, extracts any
|
|
277
|
+
* text blocks (the agent's reasoning/summary — what the user wants to see)
|
|
278
|
+
* and collapses tool_use blocks to a count. Edit/Write file_paths are
|
|
279
|
+
* collected for phase-flip + the inline completion message.
|
|
280
|
+
*/
|
|
281
|
+
function makeDreamProgressWatcher(
|
|
282
|
+
taskId: string,
|
|
283
|
+
setAppState: import('../../Task.js').SetAppState,
|
|
284
|
+
): (msg: Message) => void {
|
|
285
|
+
return msg => {
|
|
286
|
+
if (msg.type !== 'assistant') return
|
|
287
|
+
let text = ''
|
|
288
|
+
let toolUseCount = 0
|
|
289
|
+
const touchedPaths: string[] = []
|
|
290
|
+
for (const block of msg.message.content) {
|
|
291
|
+
if (block.type === 'text') {
|
|
292
|
+
text += block.text
|
|
293
|
+
} else if (block.type === 'tool_use') {
|
|
294
|
+
toolUseCount++
|
|
295
|
+
if (
|
|
296
|
+
block.name === FILE_EDIT_TOOL_NAME ||
|
|
297
|
+
block.name === FILE_WRITE_TOOL_NAME
|
|
298
|
+
) {
|
|
299
|
+
const input = block.input as { file_path?: unknown }
|
|
300
|
+
if (typeof input.file_path === 'string') {
|
|
301
|
+
touchedPaths.push(input.file_path)
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
addDreamTurn(
|
|
307
|
+
taskId,
|
|
308
|
+
{ text: text.trim(), toolUseCount },
|
|
309
|
+
touchedPaths,
|
|
310
|
+
setAppState,
|
|
311
|
+
)
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Entry point from stopHooks. No-op until initAutoDream() has been called.
|
|
317
|
+
* Per-turn cost when enabled: one GB cache read + one stat.
|
|
318
|
+
*/
|
|
319
|
+
export async function executeAutoDream(
|
|
320
|
+
context: REPLHookContext,
|
|
321
|
+
appendSystemMessage?: AppendSystemMessageFn,
|
|
322
|
+
): Promise<void> {
|
|
323
|
+
await runner?.(context, appendSystemMessage)
|
|
324
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Leaf config module — intentionally minimal imports so UI components
|
|
2
|
+
// can read the auto-dream enabled state without dragging in the forked
|
|
3
|
+
// agent / task registry / message builder chain that autoDream.ts pulls in.
|
|
4
|
+
|
|
5
|
+
import { getInitialSettings } from '../../utils/settings/settings.js'
|
|
6
|
+
import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Whether background memory consolidation should run. User setting
|
|
10
|
+
* (autoDreamEnabled in settings.json) overrides the GrowthBook default
|
|
11
|
+
* when explicitly set; otherwise falls through to tengu_onyx_plover.
|
|
12
|
+
*/
|
|
13
|
+
export function isAutoDreamEnabled(): boolean {
|
|
14
|
+
const setting = getInitialSettings().autoDreamEnabled
|
|
15
|
+
if (setting !== undefined) return setting
|
|
16
|
+
const gb = getFeatureValue_CACHED_MAY_BE_STALE<{ enabled?: unknown } | null>(
|
|
17
|
+
'tengu_onyx_plover',
|
|
18
|
+
null,
|
|
19
|
+
)
|
|
20
|
+
return gb?.enabled === true
|
|
21
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Lock file whose mtime IS lastConsolidatedAt. Body is the holder's PID.
|
|
2
|
+
//
|
|
3
|
+
// Lives inside the memory dir (getAutoMemPath) so it keys on git-root
|
|
4
|
+
// like memory does, and so it's writable even when the memory path comes
|
|
5
|
+
// from an env/settings override whose parent may not be.
|
|
6
|
+
|
|
7
|
+
import { mkdir, readFile, stat, unlink, utimes, writeFile } from 'fs/promises'
|
|
8
|
+
import { join } from 'path'
|
|
9
|
+
import { getOriginalCwd } from '../../bootstrap/state.js'
|
|
10
|
+
import { getAutoMemPath } from '../../memdir/paths.js'
|
|
11
|
+
import { logForDebugging } from '../../utils/debug.js'
|
|
12
|
+
import { isProcessRunning } from '../../utils/genericProcessUtils.js'
|
|
13
|
+
import { listCandidates } from '../../utils/listSessionsImpl.js'
|
|
14
|
+
import { getProjectDir } from '../../utils/sessionStorage.js'
|
|
15
|
+
|
|
16
|
+
const LOCK_FILE = '.consolidate-lock'
|
|
17
|
+
|
|
18
|
+
// Stale past this even if the PID is live (PID reuse guard).
|
|
19
|
+
const HOLDER_STALE_MS = 60 * 60 * 1000
|
|
20
|
+
|
|
21
|
+
function lockPath(): string {
|
|
22
|
+
return join(getAutoMemPath(), LOCK_FILE)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* mtime of the lock file = lastConsolidatedAt. 0 if absent.
|
|
27
|
+
* Per-turn cost: one stat.
|
|
28
|
+
*/
|
|
29
|
+
export async function readLastConsolidatedAt(): Promise<number> {
|
|
30
|
+
try {
|
|
31
|
+
const s = await stat(lockPath())
|
|
32
|
+
return s.mtimeMs
|
|
33
|
+
} catch {
|
|
34
|
+
return 0
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Acquire: write PID → mtime = now. Returns the pre-acquire mtime
|
|
40
|
+
* (for rollback), or null if blocked / lost a race.
|
|
41
|
+
*
|
|
42
|
+
* Success → do nothing. mtime stays at now.
|
|
43
|
+
* Failure → rollbackConsolidationLock(priorMtime) rewinds mtime.
|
|
44
|
+
* Crash → mtime stuck, dead PID → next process reclaims.
|
|
45
|
+
*/
|
|
46
|
+
export async function tryAcquireConsolidationLock(): Promise<number | null> {
|
|
47
|
+
const path = lockPath()
|
|
48
|
+
|
|
49
|
+
let mtimeMs: number | undefined
|
|
50
|
+
let holderPid: number | undefined
|
|
51
|
+
try {
|
|
52
|
+
const [s, raw] = await Promise.all([stat(path), readFile(path, 'utf8')])
|
|
53
|
+
mtimeMs = s.mtimeMs
|
|
54
|
+
const parsed = parseInt(raw.trim(), 10)
|
|
55
|
+
holderPid = Number.isFinite(parsed) ? parsed : undefined
|
|
56
|
+
} catch {
|
|
57
|
+
// ENOENT — no prior lock.
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (mtimeMs !== undefined && Date.now() - mtimeMs < HOLDER_STALE_MS) {
|
|
61
|
+
if (holderPid !== undefined && isProcessRunning(holderPid)) {
|
|
62
|
+
logForDebugging(
|
|
63
|
+
`[autoDream] lock held by live PID ${holderPid} (mtime ${Math.round((Date.now() - mtimeMs) / 1000)}s ago)`,
|
|
64
|
+
)
|
|
65
|
+
return null
|
|
66
|
+
}
|
|
67
|
+
// Dead PID or unparseable body — reclaim.
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Memory dir may not exist yet.
|
|
71
|
+
await mkdir(getAutoMemPath(), { recursive: true })
|
|
72
|
+
await writeFile(path, String(process.pid))
|
|
73
|
+
|
|
74
|
+
// Two reclaimers both write → last wins the PID. Loser bails on re-read.
|
|
75
|
+
let verify: string
|
|
76
|
+
try {
|
|
77
|
+
verify = await readFile(path, 'utf8')
|
|
78
|
+
} catch {
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
81
|
+
if (parseInt(verify.trim(), 10) !== process.pid) return null
|
|
82
|
+
|
|
83
|
+
return mtimeMs ?? 0
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Rewind mtime to pre-acquire after a failed fork. Clears the PID body —
|
|
88
|
+
* otherwise our still-running process would look like it's holding.
|
|
89
|
+
* priorMtime 0 → unlink (restore no-file).
|
|
90
|
+
*/
|
|
91
|
+
export async function rollbackConsolidationLock(
|
|
92
|
+
priorMtime: number,
|
|
93
|
+
): Promise<void> {
|
|
94
|
+
const path = lockPath()
|
|
95
|
+
try {
|
|
96
|
+
if (priorMtime === 0) {
|
|
97
|
+
await unlink(path)
|
|
98
|
+
return
|
|
99
|
+
}
|
|
100
|
+
await writeFile(path, '')
|
|
101
|
+
const t = priorMtime / 1000 // utimes wants seconds
|
|
102
|
+
await utimes(path, t, t)
|
|
103
|
+
} catch (e: unknown) {
|
|
104
|
+
logForDebugging(
|
|
105
|
+
`[autoDream] rollback failed: ${(e as Error).message} — next trigger delayed to minHours`,
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Session IDs with mtime after sinceMs. listCandidates handles UUID
|
|
112
|
+
* validation (excludes agent-*.jsonl) and parallel stat.
|
|
113
|
+
*
|
|
114
|
+
* Uses mtime (sessions TOUCHED since), not birthtime (0 on ext4).
|
|
115
|
+
* Caller excludes the current session. Scans per-cwd transcripts — it's
|
|
116
|
+
* a skip-gate, so undercounting worktree sessions is safe.
|
|
117
|
+
*/
|
|
118
|
+
export async function listSessionsTouchedSince(
|
|
119
|
+
sinceMs: number,
|
|
120
|
+
): Promise<string[]> {
|
|
121
|
+
const dir = getProjectDir(getOriginalCwd())
|
|
122
|
+
const candidates = await listCandidates(dir, true)
|
|
123
|
+
return candidates.filter(c => c.mtime > sinceMs).map(c => c.sessionId)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Stamp from manual /dream. Optimistic — fires at prompt-build time,
|
|
128
|
+
* no post-skill completion hook. Best-effort.
|
|
129
|
+
*/
|
|
130
|
+
export async function recordConsolidation(): Promise<void> {
|
|
131
|
+
try {
|
|
132
|
+
// Memory dir may not exist yet (manual /dream before any auto-trigger).
|
|
133
|
+
await mkdir(getAutoMemPath(), { recursive: true })
|
|
134
|
+
await writeFile(lockPath(), String(process.pid))
|
|
135
|
+
} catch (e: unknown) {
|
|
136
|
+
logForDebugging(
|
|
137
|
+
`[autoDream] recordConsolidation write failed: ${(e as Error).message}`,
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Extracted from dream.ts so auto-dream ships independently of KAIROS
|
|
2
|
+
// feature flags (dream.ts is behind a feature()-gated require).
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
DIR_EXISTS_GUIDANCE,
|
|
6
|
+
ENTRYPOINT_NAME,
|
|
7
|
+
MAX_ENTRYPOINT_LINES,
|
|
8
|
+
} from '../../memdir/memdir.js'
|
|
9
|
+
|
|
10
|
+
export function buildConsolidationPrompt(
|
|
11
|
+
memoryRoot: string,
|
|
12
|
+
transcriptDir: string,
|
|
13
|
+
extra: string,
|
|
14
|
+
): string {
|
|
15
|
+
return `# Dream: Memory Consolidation
|
|
16
|
+
|
|
17
|
+
You are performing a dream — a reflective pass over your memory files. Synthesize what you've learned recently into durable, well-organized memories so that future sessions can orient quickly.
|
|
18
|
+
|
|
19
|
+
Memory directory: \`${memoryRoot}\`
|
|
20
|
+
${DIR_EXISTS_GUIDANCE}
|
|
21
|
+
|
|
22
|
+
Session transcripts: \`${transcriptDir}\` (large JSONL files — grep narrowly, don't read whole files)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Phase 1 — Orient
|
|
27
|
+
|
|
28
|
+
- \`ls\` the memory directory to see what already exists
|
|
29
|
+
- Read \`${ENTRYPOINT_NAME}\` to understand the current index
|
|
30
|
+
- Skim existing topic files so you improve them rather than creating duplicates
|
|
31
|
+
- If \`logs/\` or \`sessions/\` subdirectories exist (assistant-mode layout), review recent entries there
|
|
32
|
+
|
|
33
|
+
## Phase 2 — Gather recent signal
|
|
34
|
+
|
|
35
|
+
Look for new information worth persisting. Sources in rough priority order:
|
|
36
|
+
|
|
37
|
+
1. **Daily logs** (\`logs/YYYY/MM/YYYY-MM-DD.md\`) if present — these are the append-only stream
|
|
38
|
+
2. **Existing memories that drifted** — facts that contradict something you see in the codebase now
|
|
39
|
+
3. **Transcript search** — if you need specific context (e.g., "what was the error message from yesterday's build failure?"), grep the JSONL transcripts for narrow terms:
|
|
40
|
+
\`grep -rn "<narrow term>" ${transcriptDir}/ --include="*.jsonl" | tail -50\`
|
|
41
|
+
|
|
42
|
+
Don't exhaustively read transcripts. Look only for things you already suspect matter.
|
|
43
|
+
|
|
44
|
+
## Phase 3 — Consolidate
|
|
45
|
+
|
|
46
|
+
For each thing worth remembering, write or update a memory file at the top level of the memory directory. Use the memory file format and type conventions from your system prompt's auto-memory section — it's the source of truth for what to save, how to structure it, and what NOT to save.
|
|
47
|
+
|
|
48
|
+
Focus on:
|
|
49
|
+
- Merging new signal into existing topic files rather than creating near-duplicates
|
|
50
|
+
- Converting relative dates ("yesterday", "last week") to absolute dates so they remain interpretable after time passes
|
|
51
|
+
- Deleting contradicted facts — if today's investigation disproves an old memory, fix it at the source
|
|
52
|
+
|
|
53
|
+
## Phase 4 — Prune and index
|
|
54
|
+
|
|
55
|
+
Update \`${ENTRYPOINT_NAME}\` so it stays under ${MAX_ENTRYPOINT_LINES} lines AND under ~25KB. It's an **index**, not a dump — each entry should be one line under ~150 characters: \`- [Title](file.md) — one-line hook\`. Never write memory content directly into it.
|
|
56
|
+
|
|
57
|
+
- Remove pointers to memories that are now stale, wrong, or superseded
|
|
58
|
+
- Demote verbose entries: if an index line is over ~200 chars, it's carrying content that belongs in the topic file — shorten the line, move the detail
|
|
59
|
+
- Add pointers to newly important memories
|
|
60
|
+
- Resolve contradictions — if two files disagree, fix the wrong one
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
Return a brief summary of what you consolidated, updated, or pruned. If nothing changed (memories are already tight), say so.${extra ? `\n\n## Additional context\n\n${extra}` : ''}`
|
|
65
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { APIUserAbortError } from '@anthropic-ai/sdk'
|
|
2
|
+
import { getEmptyToolPermissionContext } from '../Tool.js'
|
|
3
|
+
import type { Message } from '../types/message.js'
|
|
4
|
+
import { logForDebugging } from '../utils/debug.js'
|
|
5
|
+
import {
|
|
6
|
+
createUserMessage,
|
|
7
|
+
getAssistantMessageText,
|
|
8
|
+
} from '../utils/messages.js'
|
|
9
|
+
import { getSmallFastModel } from '../utils/model/model.js'
|
|
10
|
+
import { asSystemPrompt } from '../utils/systemPromptType.js'
|
|
11
|
+
import { queryModelWithoutStreaming } from './api/claude.js'
|
|
12
|
+
import { getSessionMemoryContent } from './SessionMemory/sessionMemoryUtils.js'
|
|
13
|
+
|
|
14
|
+
// Recap only needs recent context — truncate to avoid "prompt too long" on
|
|
15
|
+
// large sessions. 30 messages ≈ ~15 exchanges, plenty for "where we left off."
|
|
16
|
+
const RECENT_MESSAGE_WINDOW = 30
|
|
17
|
+
|
|
18
|
+
function buildAwaySummaryPrompt(memory: string | null): string {
|
|
19
|
+
const memoryBlock = memory
|
|
20
|
+
? `Session memory (broader context):\n${memory}\n\n`
|
|
21
|
+
: ''
|
|
22
|
+
return `${memoryBlock}The user stepped away and is coming back. Write exactly 1-3 short sentences. Start by stating the high-level task — what they are building or debugging, not implementation details. Next: the concrete next step. Skip status reports and commit recaps.`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Generates a short session recap for the "while you were away" card.
|
|
27
|
+
* Returns null on abort, empty transcript, or error.
|
|
28
|
+
*/
|
|
29
|
+
export async function generateAwaySummary(
|
|
30
|
+
messages: readonly Message[],
|
|
31
|
+
signal: AbortSignal,
|
|
32
|
+
): Promise<string | null> {
|
|
33
|
+
if (messages.length === 0) {
|
|
34
|
+
return null
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
const memory = await getSessionMemoryContent()
|
|
39
|
+
const recent = messages.slice(-RECENT_MESSAGE_WINDOW)
|
|
40
|
+
recent.push(createUserMessage({ content: buildAwaySummaryPrompt(memory) }))
|
|
41
|
+
const response = await queryModelWithoutStreaming({
|
|
42
|
+
messages: recent,
|
|
43
|
+
systemPrompt: asSystemPrompt([]),
|
|
44
|
+
thinkingConfig: { type: 'disabled' },
|
|
45
|
+
tools: [],
|
|
46
|
+
signal,
|
|
47
|
+
options: {
|
|
48
|
+
getToolPermissionContext: async () => getEmptyToolPermissionContext(),
|
|
49
|
+
model: getSmallFastModel(),
|
|
50
|
+
toolChoice: undefined,
|
|
51
|
+
isNonInteractiveSession: false,
|
|
52
|
+
hasAppendSystemPrompt: false,
|
|
53
|
+
agents: [],
|
|
54
|
+
querySource: 'away_summary',
|
|
55
|
+
mcpTools: [],
|
|
56
|
+
skipCacheWrite: true,
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
if (response.isApiErrorMessage) {
|
|
61
|
+
logForDebugging(
|
|
62
|
+
`[awaySummary] API error: ${getAssistantMessageText(response)}`,
|
|
63
|
+
)
|
|
64
|
+
return null
|
|
65
|
+
}
|
|
66
|
+
return getAssistantMessageText(response)
|
|
67
|
+
} catch (err) {
|
|
68
|
+
if (err instanceof APIUserAbortError || signal.aborted) {
|
|
69
|
+
return null
|
|
70
|
+
}
|
|
71
|
+
logForDebugging(`[awaySummary] generation failed: ${err}`)
|
|
72
|
+
return null
|
|
73
|
+
}
|
|
74
|
+
}
|