@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.
Files changed (934) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +171 -0
  3. package/bin/xcode +127 -0
  4. package/bin/xcode-test +84 -0
  5. package/bin/xcode.cmd +31 -0
  6. package/constants/apiLimits.ts +94 -0
  7. package/constants/betas.ts +52 -0
  8. package/constants/common.ts +33 -0
  9. package/constants/cyberRiskInstruction.ts +24 -0
  10. package/constants/errorIds.ts +15 -0
  11. package/constants/figures.ts +45 -0
  12. package/constants/files.ts +156 -0
  13. package/constants/github-app.ts +144 -0
  14. package/constants/keys.ts +11 -0
  15. package/constants/messages.ts +1 -0
  16. package/constants/oauth.ts +234 -0
  17. package/constants/outputStyles.ts +216 -0
  18. package/constants/product.ts +76 -0
  19. package/constants/prompts.ts +939 -0
  20. package/constants/spinnerVerbs.ts +204 -0
  21. package/constants/system.ts +95 -0
  22. package/constants/systemPromptSections.ts +68 -0
  23. package/constants/toolLimits.ts +56 -0
  24. package/constants/tools.ts +112 -0
  25. package/constants/turnCompletionVerbs.ts +12 -0
  26. package/constants/xml.ts +86 -0
  27. package/entrypoints/agentSdkTypes.ts +443 -0
  28. package/entrypoints/cli.tsx +307 -0
  29. package/entrypoints/init.ts +340 -0
  30. package/entrypoints/mcp.ts +196 -0
  31. package/entrypoints/sandboxTypes.ts +156 -0
  32. package/entrypoints/sdk/controlSchemas.ts +663 -0
  33. package/entrypoints/sdk/coreSchemas.ts +1889 -0
  34. package/entrypoints/sdk/coreTypes.generated.ts +2 -0
  35. package/entrypoints/sdk/coreTypes.ts +62 -0
  36. package/entrypoints/sdk/runtimeTypes.ts +140 -0
  37. package/entrypoints/sdk/sdkUtilityTypes.ts +3 -0
  38. package/entrypoints/sdk/toolTypes.ts +90 -0
  39. package/main.tsx +4686 -0
  40. package/package.json +120 -0
  41. package/services/AgentSummary/agentSummary.ts +179 -0
  42. package/services/MagicDocs/magicDocs.ts +254 -0
  43. package/services/MagicDocs/prompts.ts +127 -0
  44. package/services/PromptSuggestion/promptSuggestion.ts +523 -0
  45. package/services/PromptSuggestion/speculation.ts +991 -0
  46. package/services/SessionMemory/prompts.ts +324 -0
  47. package/services/SessionMemory/sessionMemory.ts +495 -0
  48. package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  49. package/services/analytics/config.ts +38 -0
  50. package/services/analytics/datadog.ts +307 -0
  51. package/services/analytics/firstPartyEventLogger.ts +449 -0
  52. package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  53. package/services/analytics/growthbook.ts +1155 -0
  54. package/services/analytics/index.ts +173 -0
  55. package/services/analytics/metadata.ts +973 -0
  56. package/services/analytics/sink.ts +114 -0
  57. package/services/analytics/sinkKillswitch.ts +25 -0
  58. package/services/api/adminRequests.ts +119 -0
  59. package/services/api/bootstrap.ts +141 -0
  60. package/services/api/claude.ts +3422 -0
  61. package/services/api/client.ts +406 -0
  62. package/services/api/dumpPrompts.ts +226 -0
  63. package/services/api/emptyUsage.ts +22 -0
  64. package/services/api/errorUtils.ts +260 -0
  65. package/services/api/errors.ts +1207 -0
  66. package/services/api/filesApi.ts +748 -0
  67. package/services/api/firstTokenDate.ts +60 -0
  68. package/services/api/gemini.ts +359 -0
  69. package/services/api/geminiAdapter.ts +123 -0
  70. package/services/api/geminiClient.ts +291 -0
  71. package/services/api/grove.ts +357 -0
  72. package/services/api/logging.ts +788 -0
  73. package/services/api/metricsOptOut.ts +159 -0
  74. package/services/api/openRouterClient.ts +453 -0
  75. package/services/api/overageCreditGrant.ts +137 -0
  76. package/services/api/promptCacheBreakDetection.ts +727 -0
  77. package/services/api/referral.ts +281 -0
  78. package/services/api/sessionIngress.ts +514 -0
  79. package/services/api/ultrareviewQuota.ts +38 -0
  80. package/services/api/usage.ts +63 -0
  81. package/services/api/withRetry.ts +822 -0
  82. package/services/autoDream/autoDream.ts +324 -0
  83. package/services/autoDream/config.ts +21 -0
  84. package/services/autoDream/consolidationLock.ts +140 -0
  85. package/services/autoDream/consolidationPrompt.ts +65 -0
  86. package/services/awaySummary.ts +74 -0
  87. package/services/claudeAiLimits.ts +515 -0
  88. package/services/claudeAiLimitsHook.ts +23 -0
  89. package/services/compact/apiMicrocompact.ts +153 -0
  90. package/services/compact/autoCompact.ts +351 -0
  91. package/services/compact/compact.ts +1705 -0
  92. package/services/compact/compactWarningHook.ts +16 -0
  93. package/services/compact/compactWarningState.ts +18 -0
  94. package/services/compact/grouping.ts +63 -0
  95. package/services/compact/microCompact.ts +530 -0
  96. package/services/compact/postCompactCleanup.ts +77 -0
  97. package/services/compact/prompt.ts +374 -0
  98. package/services/compact/sessionMemoryCompact.ts +630 -0
  99. package/services/compact/timeBasedMCConfig.ts +43 -0
  100. package/services/diagnosticTracking.ts +397 -0
  101. package/services/extractMemories/extractMemories.ts +517 -0
  102. package/services/extractMemories/prompts.ts +154 -0
  103. package/services/internalLogging.ts +90 -0
  104. package/services/lsp/LSPClient.ts +447 -0
  105. package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  106. package/services/lsp/LSPServerInstance.ts +511 -0
  107. package/services/lsp/LSPServerManager.ts +420 -0
  108. package/services/lsp/config.ts +79 -0
  109. package/services/lsp/manager.ts +289 -0
  110. package/services/lsp/passiveFeedback.ts +328 -0
  111. package/services/mcp/InProcessTransport.ts +63 -0
  112. package/services/mcp/MCPConnectionManager.tsx +73 -0
  113. package/services/mcp/SdkControlTransport.ts +136 -0
  114. package/services/mcp/auth.ts +2465 -0
  115. package/services/mcp/channelAllowlist.ts +76 -0
  116. package/services/mcp/channelNotification.ts +316 -0
  117. package/services/mcp/channelPermissions.ts +240 -0
  118. package/services/mcp/claudeai.ts +164 -0
  119. package/services/mcp/client.ts +3348 -0
  120. package/services/mcp/config.ts +1578 -0
  121. package/services/mcp/elicitationHandler.ts +313 -0
  122. package/services/mcp/envExpansion.ts +38 -0
  123. package/services/mcp/headersHelper.ts +138 -0
  124. package/services/mcp/mcpStringUtils.ts +106 -0
  125. package/services/mcp/normalization.ts +23 -0
  126. package/services/mcp/oauthPort.ts +78 -0
  127. package/services/mcp/officialRegistry.ts +72 -0
  128. package/services/mcp/types.ts +258 -0
  129. package/services/mcp/useManageMCPConnections.ts +1141 -0
  130. package/services/mcp/utils.ts +575 -0
  131. package/services/mcp/vscodeSdkMcp.ts +112 -0
  132. package/services/mcp/xaa.ts +511 -0
  133. package/services/mcp/xaaIdpLogin.ts +487 -0
  134. package/services/mcpServerApproval.tsx +41 -0
  135. package/services/mockRateLimits.ts +882 -0
  136. package/services/notifier.ts +156 -0
  137. package/services/oauth/auth-code-listener.ts +211 -0
  138. package/services/oauth/client.ts +566 -0
  139. package/services/oauth/crypto.ts +23 -0
  140. package/services/oauth/getOauthProfile.ts +53 -0
  141. package/services/oauth/index.ts +198 -0
  142. package/services/plugins/PluginInstallationManager.ts +184 -0
  143. package/services/plugins/pluginCliCommands.ts +344 -0
  144. package/services/plugins/pluginOperations.ts +1088 -0
  145. package/services/policyLimits/index.ts +663 -0
  146. package/services/policyLimits/types.ts +27 -0
  147. package/services/preventSleep.ts +165 -0
  148. package/services/rateLimitMessages.ts +344 -0
  149. package/services/rateLimitMocking.ts +144 -0
  150. package/services/remoteManagedSettings/index.ts +638 -0
  151. package/services/remoteManagedSettings/securityCheck.tsx +74 -0
  152. package/services/remoteManagedSettings/syncCache.ts +112 -0
  153. package/services/remoteManagedSettings/syncCacheState.ts +96 -0
  154. package/services/remoteManagedSettings/types.ts +31 -0
  155. package/services/settingsSync/index.ts +581 -0
  156. package/services/settingsSync/types.ts +67 -0
  157. package/services/teamMemorySync/index.ts +1256 -0
  158. package/services/teamMemorySync/secretScanner.ts +324 -0
  159. package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  160. package/services/teamMemorySync/types.ts +156 -0
  161. package/services/teamMemorySync/watcher.ts +387 -0
  162. package/services/tips/tipHistory.ts +17 -0
  163. package/services/tips/tipRegistry.ts +686 -0
  164. package/services/tips/tipScheduler.ts +58 -0
  165. package/services/tokenEstimation.ts +495 -0
  166. package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  167. package/services/tools/StreamingToolExecutor.ts +530 -0
  168. package/services/tools/toolExecution.ts +1745 -0
  169. package/services/tools/toolHooks.ts +650 -0
  170. package/services/tools/toolOrchestration.ts +188 -0
  171. package/services/vcr.ts +406 -0
  172. package/services/voice.ts +525 -0
  173. package/services/voiceKeyterms.ts +106 -0
  174. package/services/voiceStreamSTT.ts +544 -0
  175. package/tools/AgentTool/AgentTool.tsx +1398 -0
  176. package/tools/AgentTool/UI.tsx +872 -0
  177. package/tools/AgentTool/agentColorManager.ts +66 -0
  178. package/tools/AgentTool/agentDisplay.ts +104 -0
  179. package/tools/AgentTool/agentMemory.ts +177 -0
  180. package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  181. package/tools/AgentTool/agentToolUtils.ts +686 -0
  182. package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  183. package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  184. package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  185. package/tools/AgentTool/built-in/planAgent.ts +92 -0
  186. package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  187. package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  188. package/tools/AgentTool/builtInAgents.ts +72 -0
  189. package/tools/AgentTool/constants.ts +12 -0
  190. package/tools/AgentTool/forkSubagent.ts +210 -0
  191. package/tools/AgentTool/loadAgentsDir.ts +755 -0
  192. package/tools/AgentTool/prompt.ts +287 -0
  193. package/tools/AgentTool/resumeAgent.ts +265 -0
  194. package/tools/AgentTool/runAgent.ts +973 -0
  195. package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  196. package/tools/AskUserQuestionTool/prompt.ts +44 -0
  197. package/tools/BashTool/BashTool.tsx +1144 -0
  198. package/tools/BashTool/BashToolResultMessage.tsx +191 -0
  199. package/tools/BashTool/UI.tsx +185 -0
  200. package/tools/BashTool/bashCommandHelpers.ts +265 -0
  201. package/tools/BashTool/bashPermissions.ts +2621 -0
  202. package/tools/BashTool/bashSecurity.ts +2592 -0
  203. package/tools/BashTool/commandSemantics.ts +140 -0
  204. package/tools/BashTool/commentLabel.ts +13 -0
  205. package/tools/BashTool/destructiveCommandWarning.ts +102 -0
  206. package/tools/BashTool/modeValidation.ts +115 -0
  207. package/tools/BashTool/pathValidation.ts +1303 -0
  208. package/tools/BashTool/prompt.ts +369 -0
  209. package/tools/BashTool/readOnlyValidation.ts +1990 -0
  210. package/tools/BashTool/sedEditParser.ts +322 -0
  211. package/tools/BashTool/sedValidation.ts +684 -0
  212. package/tools/BashTool/shouldUseSandbox.ts +153 -0
  213. package/tools/BashTool/toolName.ts +2 -0
  214. package/tools/BashTool/utils.ts +223 -0
  215. package/tools/BriefTool/BriefTool.ts +204 -0
  216. package/tools/BriefTool/UI.tsx +101 -0
  217. package/tools/BriefTool/attachments.ts +110 -0
  218. package/tools/BriefTool/prompt.ts +22 -0
  219. package/tools/BriefTool/upload.ts +174 -0
  220. package/tools/ConfigTool/ConfigTool.ts +467 -0
  221. package/tools/ConfigTool/UI.tsx +38 -0
  222. package/tools/ConfigTool/constants.ts +1 -0
  223. package/tools/ConfigTool/prompt.ts +93 -0
  224. package/tools/ConfigTool/supportedSettings.ts +211 -0
  225. package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  226. package/tools/EnterPlanModeTool/UI.tsx +33 -0
  227. package/tools/EnterPlanModeTool/constants.ts +1 -0
  228. package/tools/EnterPlanModeTool/prompt.ts +170 -0
  229. package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  230. package/tools/EnterWorktreeTool/UI.tsx +20 -0
  231. package/tools/EnterWorktreeTool/constants.ts +1 -0
  232. package/tools/EnterWorktreeTool/prompt.ts +30 -0
  233. package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  234. package/tools/ExitPlanModeTool/UI.tsx +82 -0
  235. package/tools/ExitPlanModeTool/constants.ts +2 -0
  236. package/tools/ExitPlanModeTool/prompt.ts +29 -0
  237. package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  238. package/tools/ExitWorktreeTool/UI.tsx +25 -0
  239. package/tools/ExitWorktreeTool/constants.ts +1 -0
  240. package/tools/ExitWorktreeTool/prompt.ts +32 -0
  241. package/tools/FileEditTool/FileEditTool.ts +625 -0
  242. package/tools/FileEditTool/UI.tsx +289 -0
  243. package/tools/FileEditTool/constants.ts +11 -0
  244. package/tools/FileEditTool/prompt.ts +28 -0
  245. package/tools/FileEditTool/types.ts +85 -0
  246. package/tools/FileEditTool/utils.ts +775 -0
  247. package/tools/FileReadTool/FileReadTool.ts +1183 -0
  248. package/tools/FileReadTool/UI.tsx +185 -0
  249. package/tools/FileReadTool/imageProcessor.ts +94 -0
  250. package/tools/FileReadTool/limits.ts +92 -0
  251. package/tools/FileReadTool/prompt.ts +49 -0
  252. package/tools/FileWriteTool/FileWriteTool.ts +434 -0
  253. package/tools/FileWriteTool/UI.tsx +405 -0
  254. package/tools/FileWriteTool/prompt.ts +18 -0
  255. package/tools/GlobTool/GlobTool.ts +198 -0
  256. package/tools/GlobTool/UI.tsx +63 -0
  257. package/tools/GlobTool/prompt.ts +7 -0
  258. package/tools/GrepTool/GrepTool.ts +577 -0
  259. package/tools/GrepTool/UI.tsx +201 -0
  260. package/tools/GrepTool/prompt.ts +18 -0
  261. package/tools/LSPTool/LSPTool.ts +860 -0
  262. package/tools/LSPTool/UI.tsx +228 -0
  263. package/tools/LSPTool/formatters.ts +592 -0
  264. package/tools/LSPTool/prompt.ts +21 -0
  265. package/tools/LSPTool/schemas.ts +215 -0
  266. package/tools/LSPTool/symbolContext.ts +90 -0
  267. package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  268. package/tools/ListMcpResourcesTool/UI.tsx +29 -0
  269. package/tools/ListMcpResourcesTool/prompt.ts +20 -0
  270. package/tools/MCPTool/MCPTool.ts +77 -0
  271. package/tools/MCPTool/UI.tsx +403 -0
  272. package/tools/MCPTool/classifyForCollapse.ts +604 -0
  273. package/tools/MCPTool/prompt.ts +3 -0
  274. package/tools/McpAuthTool/McpAuthTool.ts +215 -0
  275. package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  276. package/tools/NotebookEditTool/UI.tsx +93 -0
  277. package/tools/NotebookEditTool/constants.ts +2 -0
  278. package/tools/NotebookEditTool/prompt.ts +3 -0
  279. package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  280. package/tools/PowerShellTool/UI.tsx +131 -0
  281. package/tools/PowerShellTool/clmTypes.ts +211 -0
  282. package/tools/PowerShellTool/commandSemantics.ts +142 -0
  283. package/tools/PowerShellTool/commonParameters.ts +30 -0
  284. package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  285. package/tools/PowerShellTool/gitSafety.ts +176 -0
  286. package/tools/PowerShellTool/modeValidation.ts +404 -0
  287. package/tools/PowerShellTool/pathValidation.ts +2049 -0
  288. package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  289. package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  290. package/tools/PowerShellTool/prompt.ts +145 -0
  291. package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  292. package/tools/PowerShellTool/toolName.ts +2 -0
  293. package/tools/REPLTool/constants.ts +46 -0
  294. package/tools/REPLTool/primitiveTools.ts +39 -0
  295. package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  296. package/tools/ReadMcpResourceTool/UI.tsx +37 -0
  297. package/tools/ReadMcpResourceTool/prompt.ts +16 -0
  298. package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  299. package/tools/RemoteTriggerTool/UI.tsx +17 -0
  300. package/tools/RemoteTriggerTool/prompt.ts +15 -0
  301. package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  302. package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  303. package/tools/ScheduleCronTool/CronListTool.ts +97 -0
  304. package/tools/ScheduleCronTool/UI.tsx +60 -0
  305. package/tools/ScheduleCronTool/prompt.ts +135 -0
  306. package/tools/SendMessageTool/SendMessageTool.ts +917 -0
  307. package/tools/SendMessageTool/UI.tsx +31 -0
  308. package/tools/SendMessageTool/constants.ts +1 -0
  309. package/tools/SendMessageTool/prompt.ts +49 -0
  310. package/tools/SkillTool/SkillTool.ts +1108 -0
  311. package/tools/SkillTool/UI.tsx +128 -0
  312. package/tools/SkillTool/constants.ts +1 -0
  313. package/tools/SkillTool/prompt.ts +241 -0
  314. package/tools/SleepTool/prompt.ts +17 -0
  315. package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  316. package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  317. package/tools/TaskCreateTool/constants.ts +1 -0
  318. package/tools/TaskCreateTool/prompt.ts +56 -0
  319. package/tools/TaskGetTool/TaskGetTool.ts +128 -0
  320. package/tools/TaskGetTool/constants.ts +1 -0
  321. package/tools/TaskGetTool/prompt.ts +24 -0
  322. package/tools/TaskListTool/TaskListTool.ts +116 -0
  323. package/tools/TaskListTool/constants.ts +1 -0
  324. package/tools/TaskListTool/prompt.ts +49 -0
  325. package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  326. package/tools/TaskOutputTool/constants.ts +1 -0
  327. package/tools/TaskStopTool/TaskStopTool.ts +131 -0
  328. package/tools/TaskStopTool/UI.tsx +41 -0
  329. package/tools/TaskStopTool/prompt.ts +8 -0
  330. package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  331. package/tools/TaskUpdateTool/constants.ts +1 -0
  332. package/tools/TaskUpdateTool/prompt.ts +77 -0
  333. package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  334. package/tools/TeamCreateTool/UI.tsx +6 -0
  335. package/tools/TeamCreateTool/constants.ts +1 -0
  336. package/tools/TeamCreateTool/prompt.ts +113 -0
  337. package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  338. package/tools/TeamDeleteTool/UI.tsx +20 -0
  339. package/tools/TeamDeleteTool/constants.ts +1 -0
  340. package/tools/TeamDeleteTool/prompt.ts +16 -0
  341. package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  342. package/tools/TodoWriteTool/constants.ts +1 -0
  343. package/tools/TodoWriteTool/prompt.ts +184 -0
  344. package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  345. package/tools/ToolSearchTool/constants.ts +1 -0
  346. package/tools/ToolSearchTool/prompt.ts +121 -0
  347. package/tools/TungstenTool/TungstenTool.ts +4 -0
  348. package/tools/WebFetchTool/UI.tsx +72 -0
  349. package/tools/WebFetchTool/WebFetchTool.ts +318 -0
  350. package/tools/WebFetchTool/preapproved.ts +166 -0
  351. package/tools/WebFetchTool/prompt.ts +46 -0
  352. package/tools/WebFetchTool/utils.ts +530 -0
  353. package/tools/WebSearchTool/UI.tsx +101 -0
  354. package/tools/WebSearchTool/WebSearchTool.ts +435 -0
  355. package/tools/WebSearchTool/prompt.ts +34 -0
  356. package/tools/WorkflowTool/constants.ts +2 -0
  357. package/tools/XMemIngestTool/XMemIngestTool.ts +140 -0
  358. package/tools/XMemIngestTool/prompt.ts +13 -0
  359. package/tools/XMemRetrieveTool/XMemRetrieveTool.ts +177 -0
  360. package/tools/XMemRetrieveTool/prompt.ts +16 -0
  361. package/tools/XMemSearchTool/XMemSearchTool.ts +172 -0
  362. package/tools/XMemSearchTool/prompt.ts +11 -0
  363. package/tools/shared/gitOperationTracking.ts +277 -0
  364. package/tools/shared/spawnMultiAgent.ts +1093 -0
  365. package/tools/testing/TestingPermissionTool.tsx +74 -0
  366. package/tools/utils.ts +40 -0
  367. package/utils/CircularBuffer.ts +84 -0
  368. package/utils/Cursor.ts +1530 -0
  369. package/utils/QueryGuard.ts +121 -0
  370. package/utils/Shell.ts +474 -0
  371. package/utils/ShellCommand.ts +465 -0
  372. package/utils/abortController.ts +99 -0
  373. package/utils/activityManager.ts +164 -0
  374. package/utils/advisor.ts +145 -0
  375. package/utils/agentContext.ts +178 -0
  376. package/utils/agentId.ts +99 -0
  377. package/utils/agentSwarmsEnabled.ts +44 -0
  378. package/utils/agenticSessionSearch.ts +307 -0
  379. package/utils/analyzeContext.ts +1382 -0
  380. package/utils/ansiToPng.ts +334 -0
  381. package/utils/ansiToSvg.ts +272 -0
  382. package/utils/api.ts +718 -0
  383. package/utils/apiPreconnect.ts +71 -0
  384. package/utils/appleTerminalBackup.ts +124 -0
  385. package/utils/argumentSubstitution.ts +145 -0
  386. package/utils/array.ts +13 -0
  387. package/utils/asciicast.ts +239 -0
  388. package/utils/attachments.ts +4091 -0
  389. package/utils/attribution.ts +393 -0
  390. package/utils/auth.ts +2002 -0
  391. package/utils/authFileDescriptor.ts +196 -0
  392. package/utils/authPortable.ts +19 -0
  393. package/utils/autoModeDenials.ts +26 -0
  394. package/utils/autoRunIssue.tsx +122 -0
  395. package/utils/autoUpdater.ts +561 -0
  396. package/utils/aws.ts +74 -0
  397. package/utils/awsAuthStatusManager.ts +81 -0
  398. package/utils/axios.ts +8 -0
  399. package/utils/background/remote/preconditions.ts +235 -0
  400. package/utils/background/remote/remoteSession.ts +98 -0
  401. package/utils/backgroundHousekeeping.ts +94 -0
  402. package/utils/bash/ParsedCommand.ts +318 -0
  403. package/utils/bash/ShellSnapshot.ts +582 -0
  404. package/utils/bash/ast.ts +2679 -0
  405. package/utils/bash/bashParser.ts +4436 -0
  406. package/utils/bash/bashPipeCommand.ts +294 -0
  407. package/utils/bash/commands.ts +1339 -0
  408. package/utils/bash/heredoc.ts +733 -0
  409. package/utils/bash/parser.ts +230 -0
  410. package/utils/bash/prefix.ts +204 -0
  411. package/utils/bash/registry.ts +53 -0
  412. package/utils/bash/shellCompletion.ts +259 -0
  413. package/utils/bash/shellPrefix.ts +28 -0
  414. package/utils/bash/shellQuote.ts +304 -0
  415. package/utils/bash/shellQuoting.ts +128 -0
  416. package/utils/bash/specs/alias.ts +14 -0
  417. package/utils/bash/specs/index.ts +18 -0
  418. package/utils/bash/specs/nohup.ts +13 -0
  419. package/utils/bash/specs/pyright.ts +91 -0
  420. package/utils/bash/specs/sleep.ts +13 -0
  421. package/utils/bash/specs/srun.ts +31 -0
  422. package/utils/bash/specs/time.ts +13 -0
  423. package/utils/bash/specs/timeout.ts +20 -0
  424. package/utils/bash/treeSitterAnalysis.ts +506 -0
  425. package/utils/betas.ts +434 -0
  426. package/utils/billing.ts +78 -0
  427. package/utils/binaryCheck.ts +53 -0
  428. package/utils/browser.ts +68 -0
  429. package/utils/bufferedWriter.ts +100 -0
  430. package/utils/bundledMode.ts +22 -0
  431. package/utils/caCerts.ts +115 -0
  432. package/utils/caCertsConfig.ts +88 -0
  433. package/utils/cachePaths.ts +38 -0
  434. package/utils/classifierApprovals.ts +88 -0
  435. package/utils/classifierApprovalsHook.ts +17 -0
  436. package/utils/claudeCodeHints.ts +193 -0
  437. package/utils/claudeDesktop.ts +152 -0
  438. package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  439. package/utils/claudeInChrome/common.ts +540 -0
  440. package/utils/claudeInChrome/mcpServer.ts +292 -0
  441. package/utils/claudeInChrome/prompt.ts +83 -0
  442. package/utils/claudeInChrome/setup.ts +400 -0
  443. package/utils/claudeInChrome/setupPortable.ts +233 -0
  444. package/utils/claudeInChrome/toolRendering.tsx +262 -0
  445. package/utils/claudemd.ts +1479 -0
  446. package/utils/cleanup.ts +602 -0
  447. package/utils/cleanupRegistry.ts +25 -0
  448. package/utils/cliArgs.ts +60 -0
  449. package/utils/cliHighlight.ts +54 -0
  450. package/utils/codeIndexing.ts +206 -0
  451. package/utils/collapseBackgroundBashNotifications.ts +84 -0
  452. package/utils/collapseHookSummaries.ts +59 -0
  453. package/utils/collapseReadSearch.ts +1109 -0
  454. package/utils/collapseTeammateShutdowns.ts +55 -0
  455. package/utils/color-diff-mock.ts +27 -0
  456. package/utils/combinedAbortSignal.ts +47 -0
  457. package/utils/commandLifecycle.ts +21 -0
  458. package/utils/commitAttribution.ts +961 -0
  459. package/utils/completionCache.ts +166 -0
  460. package/utils/computerUse/appNames.ts +196 -0
  461. package/utils/computerUse/cleanup.ts +86 -0
  462. package/utils/computerUse/common.ts +61 -0
  463. package/utils/computerUse/computerUseLock.ts +215 -0
  464. package/utils/computerUse/drainRunLoop.ts +79 -0
  465. package/utils/computerUse/escHotkey.ts +54 -0
  466. package/utils/computerUse/executor.ts +658 -0
  467. package/utils/computerUse/gates.ts +72 -0
  468. package/utils/computerUse/hostAdapter.ts +69 -0
  469. package/utils/computerUse/inputLoader.ts +30 -0
  470. package/utils/computerUse/mcpServer.ts +106 -0
  471. package/utils/computerUse/setup.ts +53 -0
  472. package/utils/computerUse/swiftLoader.ts +23 -0
  473. package/utils/computerUse/toolRendering.tsx +125 -0
  474. package/utils/computerUse/wrapper.tsx +336 -0
  475. package/utils/concurrentSessions.ts +204 -0
  476. package/utils/config.ts +1817 -0
  477. package/utils/configConstants.ts +21 -0
  478. package/utils/contentArray.ts +51 -0
  479. package/utils/context.ts +221 -0
  480. package/utils/contextAnalysis.ts +272 -0
  481. package/utils/contextSuggestions.ts +235 -0
  482. package/utils/controlMessageCompat.ts +32 -0
  483. package/utils/conversationRecovery.ts +597 -0
  484. package/utils/cron.ts +308 -0
  485. package/utils/cronJitterConfig.ts +75 -0
  486. package/utils/cronScheduler.ts +565 -0
  487. package/utils/cronTasks.ts +458 -0
  488. package/utils/cronTasksLock.ts +195 -0
  489. package/utils/crossProjectResume.ts +75 -0
  490. package/utils/crypto.ts +13 -0
  491. package/utils/cwd.ts +32 -0
  492. package/utils/debug.ts +268 -0
  493. package/utils/debugFilter.ts +157 -0
  494. package/utils/deepLink/banner.ts +123 -0
  495. package/utils/deepLink/parseDeepLink.ts +170 -0
  496. package/utils/deepLink/protocolHandler.ts +136 -0
  497. package/utils/deepLink/registerProtocol.ts +348 -0
  498. package/utils/deepLink/terminalLauncher.ts +557 -0
  499. package/utils/deepLink/terminalPreference.ts +54 -0
  500. package/utils/desktopDeepLink.ts +236 -0
  501. package/utils/detectRepository.ts +178 -0
  502. package/utils/diagLogs.ts +94 -0
  503. package/utils/diff.ts +177 -0
  504. package/utils/directMemberMessage.ts +69 -0
  505. package/utils/displayTags.ts +51 -0
  506. package/utils/doctorContextWarnings.ts +265 -0
  507. package/utils/doctorDiagnostic.ts +625 -0
  508. package/utils/dxt/helpers.ts +88 -0
  509. package/utils/dxt/zip.ts +226 -0
  510. package/utils/earlyInput.ts +191 -0
  511. package/utils/editor.ts +183 -0
  512. package/utils/effort.ts +329 -0
  513. package/utils/embeddedTools.ts +29 -0
  514. package/utils/env.ts +347 -0
  515. package/utils/envDynamic.ts +151 -0
  516. package/utils/envUtils.ts +183 -0
  517. package/utils/envValidation.ts +38 -0
  518. package/utils/errorLogSink.ts +235 -0
  519. package/utils/errors.ts +238 -0
  520. package/utils/exampleCommands.ts +184 -0
  521. package/utils/execFileNoThrow.ts +150 -0
  522. package/utils/execFileNoThrowPortable.ts +89 -0
  523. package/utils/execSyncWrapper.ts +38 -0
  524. package/utils/exportRenderer.tsx +98 -0
  525. package/utils/extraUsage.ts +23 -0
  526. package/utils/fastMode.ts +532 -0
  527. package/utils/file.ts +584 -0
  528. package/utils/fileHistory.ts +1115 -0
  529. package/utils/fileOperationAnalytics.ts +71 -0
  530. package/utils/filePersistence/filePersistence.ts +287 -0
  531. package/utils/filePersistence/outputsScanner.ts +126 -0
  532. package/utils/fileRead.ts +102 -0
  533. package/utils/fileReadCache.ts +96 -0
  534. package/utils/fileStateCache.ts +142 -0
  535. package/utils/findExecutable.ts +17 -0
  536. package/utils/fingerprint.ts +76 -0
  537. package/utils/forkedAgent.ts +689 -0
  538. package/utils/format.ts +308 -0
  539. package/utils/formatBriefTimestamp.ts +81 -0
  540. package/utils/fpsTracker.ts +47 -0
  541. package/utils/frontmatterParser.ts +370 -0
  542. package/utils/fsOperations.ts +770 -0
  543. package/utils/fullscreen.ts +202 -0
  544. package/utils/generatedFiles.ts +136 -0
  545. package/utils/generators.ts +88 -0
  546. package/utils/genericProcessUtils.ts +184 -0
  547. package/utils/getWorktreePaths.ts +70 -0
  548. package/utils/getWorktreePathsPortable.ts +27 -0
  549. package/utils/ghPrStatus.ts +106 -0
  550. package/utils/git/gitConfigParser.ts +277 -0
  551. package/utils/git/gitFilesystem.ts +699 -0
  552. package/utils/git/gitignore.ts +99 -0
  553. package/utils/git.ts +926 -0
  554. package/utils/gitDiff.ts +532 -0
  555. package/utils/gitSettings.ts +18 -0
  556. package/utils/github/ghAuthStatus.ts +29 -0
  557. package/utils/githubRepoPathMapping.ts +162 -0
  558. package/utils/glob.ts +130 -0
  559. package/utils/gracefulShutdown.ts +529 -0
  560. package/utils/groupToolUses.ts +182 -0
  561. package/utils/handlePromptSubmit.ts +610 -0
  562. package/utils/hash.ts +46 -0
  563. package/utils/headlessProfiler.ts +178 -0
  564. package/utils/heapDumpService.ts +303 -0
  565. package/utils/heatmap.ts +198 -0
  566. package/utils/highlightMatch.tsx +28 -0
  567. package/utils/hooks/AsyncHookRegistry.ts +309 -0
  568. package/utils/hooks/apiQueryHookHelper.ts +141 -0
  569. package/utils/hooks/execAgentHook.ts +339 -0
  570. package/utils/hooks/execHttpHook.ts +242 -0
  571. package/utils/hooks/execPromptHook.ts +211 -0
  572. package/utils/hooks/fileChangedWatcher.ts +191 -0
  573. package/utils/hooks/hookEvents.ts +192 -0
  574. package/utils/hooks/hookHelpers.ts +83 -0
  575. package/utils/hooks/hooksConfigManager.ts +400 -0
  576. package/utils/hooks/hooksConfigSnapshot.ts +133 -0
  577. package/utils/hooks/hooksSettings.ts +271 -0
  578. package/utils/hooks/postSamplingHooks.ts +70 -0
  579. package/utils/hooks/registerFrontmatterHooks.ts +67 -0
  580. package/utils/hooks/registerSkillHooks.ts +64 -0
  581. package/utils/hooks/sessionHooks.ts +447 -0
  582. package/utils/hooks/skillImprovement.ts +267 -0
  583. package/utils/hooks/ssrfGuard.ts +294 -0
  584. package/utils/hooks.ts +5022 -0
  585. package/utils/horizontalScroll.ts +137 -0
  586. package/utils/http.ts +136 -0
  587. package/utils/hyperlink.ts +39 -0
  588. package/utils/iTermBackup.ts +73 -0
  589. package/utils/ide.ts +1494 -0
  590. package/utils/idePathConversion.ts +90 -0
  591. package/utils/idleTimeout.ts +53 -0
  592. package/utils/imagePaste.ts +416 -0
  593. package/utils/imageResizer.ts +880 -0
  594. package/utils/imageStore.ts +167 -0
  595. package/utils/imageValidation.ts +104 -0
  596. package/utils/immediateCommand.ts +15 -0
  597. package/utils/inProcessTeammateHelpers.ts +102 -0
  598. package/utils/ink.ts +26 -0
  599. package/utils/intl.ts +94 -0
  600. package/utils/jetbrains.ts +191 -0
  601. package/utils/json.ts +277 -0
  602. package/utils/jsonRead.ts +16 -0
  603. package/utils/keyboardShortcuts.ts +14 -0
  604. package/utils/lazySchema.ts +8 -0
  605. package/utils/listSessionsImpl.ts +454 -0
  606. package/utils/localInstaller.ts +162 -0
  607. package/utils/lockfile.ts +43 -0
  608. package/utils/log.ts +362 -0
  609. package/utils/logoV2Utils.ts +347 -0
  610. package/utils/mailbox.ts +73 -0
  611. package/utils/managedEnv.ts +199 -0
  612. package/utils/managedEnvConstants.ts +191 -0
  613. package/utils/markdown.ts +381 -0
  614. package/utils/markdownConfigLoader.ts +600 -0
  615. package/utils/mcp/dateTimeParser.ts +121 -0
  616. package/utils/mcp/elicitationValidation.ts +336 -0
  617. package/utils/mcpInstructionsDelta.ts +130 -0
  618. package/utils/mcpOutputStorage.ts +189 -0
  619. package/utils/mcpValidation.ts +208 -0
  620. package/utils/mcpWebSocketTransport.ts +200 -0
  621. package/utils/memoize.ts +269 -0
  622. package/utils/memory/types.ts +12 -0
  623. package/utils/memory/versions.ts +8 -0
  624. package/utils/memoryFileDetection.ts +289 -0
  625. package/utils/messagePredicates.ts +8 -0
  626. package/utils/messageQueueManager.ts +547 -0
  627. package/utils/messages/mappers.ts +290 -0
  628. package/utils/messages/systemInit.ts +96 -0
  629. package/utils/messages.ts +5520 -0
  630. package/utils/model/agent.ts +157 -0
  631. package/utils/model/aliases.ts +35 -0
  632. package/utils/model/antModels.ts +64 -0
  633. package/utils/model/bedrock.ts +265 -0
  634. package/utils/model/check1mAccess.ts +72 -0
  635. package/utils/model/configs.ts +158 -0
  636. package/utils/model/contextWindowUpgradeCheck.ts +47 -0
  637. package/utils/model/deprecation.ts +101 -0
  638. package/utils/model/model.ts +654 -0
  639. package/utils/model/modelAllowlist.ts +170 -0
  640. package/utils/model/modelCapabilities.ts +118 -0
  641. package/utils/model/modelOptions.ts +589 -0
  642. package/utils/model/modelStrings.ts +170 -0
  643. package/utils/model/modelSupportOverrides.ts +50 -0
  644. package/utils/model/providers.ts +42 -0
  645. package/utils/model/validateModel.ts +159 -0
  646. package/utils/modelCost.ts +231 -0
  647. package/utils/modifiers.ts +36 -0
  648. package/utils/mtls.ts +179 -0
  649. package/utils/nativeInstaller/download.ts +523 -0
  650. package/utils/nativeInstaller/index.ts +18 -0
  651. package/utils/nativeInstaller/installer.ts +1708 -0
  652. package/utils/nativeInstaller/packageManagers.ts +336 -0
  653. package/utils/nativeInstaller/pidLock.ts +433 -0
  654. package/utils/notebook.ts +224 -0
  655. package/utils/objectGroupBy.ts +18 -0
  656. package/utils/pasteStore.ts +104 -0
  657. package/utils/path.ts +155 -0
  658. package/utils/pdf.ts +300 -0
  659. package/utils/pdfUtils.ts +70 -0
  660. package/utils/peerAddress.ts +21 -0
  661. package/utils/permissions/PermissionMode.ts +141 -0
  662. package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  663. package/utils/permissions/PermissionResult.ts +35 -0
  664. package/utils/permissions/PermissionRule.ts +40 -0
  665. package/utils/permissions/PermissionUpdate.ts +389 -0
  666. package/utils/permissions/PermissionUpdateSchema.ts +78 -0
  667. package/utils/permissions/autoModeState.ts +39 -0
  668. package/utils/permissions/bashClassifier.ts +61 -0
  669. package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  670. package/utils/permissions/classifierDecision.ts +98 -0
  671. package/utils/permissions/classifierShared.ts +39 -0
  672. package/utils/permissions/dangerousPatterns.ts +80 -0
  673. package/utils/permissions/denialTracking.ts +45 -0
  674. package/utils/permissions/filesystem.ts +1777 -0
  675. package/utils/permissions/getNextPermissionMode.ts +101 -0
  676. package/utils/permissions/pathValidation.ts +485 -0
  677. package/utils/permissions/permissionExplainer.ts +250 -0
  678. package/utils/permissions/permissionRuleParser.ts +198 -0
  679. package/utils/permissions/permissionSetup.ts +1532 -0
  680. package/utils/permissions/permissions.ts +1486 -0
  681. package/utils/permissions/permissionsLoader.ts +296 -0
  682. package/utils/permissions/shadowedRuleDetection.ts +234 -0
  683. package/utils/permissions/shellRuleMatching.ts +228 -0
  684. package/utils/permissions/yoloClassifier.ts +1495 -0
  685. package/utils/planModeV2.ts +95 -0
  686. package/utils/plans.ts +397 -0
  687. package/utils/platform.ts +150 -0
  688. package/utils/plugins/addDirPluginSettings.ts +71 -0
  689. package/utils/plugins/cacheUtils.ts +196 -0
  690. package/utils/plugins/dependencyResolver.ts +305 -0
  691. package/utils/plugins/fetchTelemetry.ts +135 -0
  692. package/utils/plugins/gitAvailability.ts +69 -0
  693. package/utils/plugins/headlessPluginInstall.ts +174 -0
  694. package/utils/plugins/hintRecommendation.ts +164 -0
  695. package/utils/plugins/installCounts.ts +292 -0
  696. package/utils/plugins/installedPluginsManager.ts +1268 -0
  697. package/utils/plugins/loadPluginAgents.ts +348 -0
  698. package/utils/plugins/loadPluginCommands.ts +946 -0
  699. package/utils/plugins/loadPluginHooks.ts +287 -0
  700. package/utils/plugins/loadPluginOutputStyles.ts +178 -0
  701. package/utils/plugins/lspPluginIntegration.ts +387 -0
  702. package/utils/plugins/lspRecommendation.ts +374 -0
  703. package/utils/plugins/managedPlugins.ts +27 -0
  704. package/utils/plugins/marketplaceHelpers.ts +592 -0
  705. package/utils/plugins/marketplaceManager.ts +2643 -0
  706. package/utils/plugins/mcpPluginIntegration.ts +634 -0
  707. package/utils/plugins/mcpbHandler.ts +968 -0
  708. package/utils/plugins/officialMarketplace.ts +25 -0
  709. package/utils/plugins/officialMarketplaceGcs.ts +216 -0
  710. package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  711. package/utils/plugins/orphanedPluginFilter.ts +114 -0
  712. package/utils/plugins/parseMarketplaceInput.ts +162 -0
  713. package/utils/plugins/performStartupChecks.tsx +70 -0
  714. package/utils/plugins/pluginAutoupdate.ts +284 -0
  715. package/utils/plugins/pluginBlocklist.ts +127 -0
  716. package/utils/plugins/pluginDirectories.ts +178 -0
  717. package/utils/plugins/pluginFlagging.ts +208 -0
  718. package/utils/plugins/pluginIdentifier.ts +123 -0
  719. package/utils/plugins/pluginInstallationHelpers.ts +595 -0
  720. package/utils/plugins/pluginLoader.ts +3302 -0
  721. package/utils/plugins/pluginOptionsStorage.ts +400 -0
  722. package/utils/plugins/pluginPolicy.ts +20 -0
  723. package/utils/plugins/pluginStartupCheck.ts +341 -0
  724. package/utils/plugins/pluginVersioning.ts +157 -0
  725. package/utils/plugins/reconciler.ts +265 -0
  726. package/utils/plugins/refresh.ts +215 -0
  727. package/utils/plugins/schemas.ts +1681 -0
  728. package/utils/plugins/validatePlugin.ts +903 -0
  729. package/utils/plugins/walkPluginMarkdown.ts +69 -0
  730. package/utils/plugins/zipCache.ts +406 -0
  731. package/utils/plugins/zipCacheAdapters.ts +164 -0
  732. package/utils/powershell/dangerousCmdlets.ts +185 -0
  733. package/utils/powershell/parser.ts +1804 -0
  734. package/utils/powershell/staticPrefix.ts +316 -0
  735. package/utils/preflightChecks.tsx +151 -0
  736. package/utils/privacyLevel.ts +55 -0
  737. package/utils/process.ts +68 -0
  738. package/utils/processUserInput/processBashCommand.tsx +140 -0
  739. package/utils/processUserInput/processSlashCommand.tsx +922 -0
  740. package/utils/processUserInput/processTextPrompt.ts +100 -0
  741. package/utils/processUserInput/processUserInput.ts +605 -0
  742. package/utils/profilerBase.ts +46 -0
  743. package/utils/promptCategory.ts +49 -0
  744. package/utils/promptEditor.ts +188 -0
  745. package/utils/promptShellExecution.ts +183 -0
  746. package/utils/proxy.ts +426 -0
  747. package/utils/queryContext.ts +179 -0
  748. package/utils/queryHelpers.ts +552 -0
  749. package/utils/queryProfiler.ts +301 -0
  750. package/utils/queueProcessor.ts +95 -0
  751. package/utils/readEditContext.ts +227 -0
  752. package/utils/readFileInRange.ts +383 -0
  753. package/utils/releaseNotes.ts +360 -0
  754. package/utils/renderOptions.ts +113 -0
  755. package/utils/ripgrep.ts +679 -0
  756. package/utils/sandbox/sandbox-adapter.ts +985 -0
  757. package/utils/sandbox/sandbox-ui-utils.ts +12 -0
  758. package/utils/sanitization.ts +91 -0
  759. package/utils/screenshotClipboard.ts +121 -0
  760. package/utils/sdkEventQueue.ts +134 -0
  761. package/utils/secureStorage/fallbackStorage.ts +70 -0
  762. package/utils/secureStorage/index.ts +17 -0
  763. package/utils/secureStorage/keychainPrefetch.ts +116 -0
  764. package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  765. package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  766. package/utils/secureStorage/plainTextStorage.ts +84 -0
  767. package/utils/semanticBoolean.ts +29 -0
  768. package/utils/semanticNumber.ts +36 -0
  769. package/utils/semver.ts +59 -0
  770. package/utils/sequential.ts +56 -0
  771. package/utils/sessionActivity.ts +133 -0
  772. package/utils/sessionEnvVars.ts +22 -0
  773. package/utils/sessionEnvironment.ts +166 -0
  774. package/utils/sessionFileAccessHooks.ts +250 -0
  775. package/utils/sessionIngressAuth.ts +140 -0
  776. package/utils/sessionRestore.ts +551 -0
  777. package/utils/sessionStart.ts +232 -0
  778. package/utils/sessionState.ts +150 -0
  779. package/utils/sessionStorage.ts +5105 -0
  780. package/utils/sessionStoragePortable.ts +793 -0
  781. package/utils/sessionTitle.ts +129 -0
  782. package/utils/sessionUrl.ts +64 -0
  783. package/utils/set.ts +53 -0
  784. package/utils/settings/allErrors.ts +32 -0
  785. package/utils/settings/applySettingsChange.ts +92 -0
  786. package/utils/settings/changeDetector.ts +488 -0
  787. package/utils/settings/constants.ts +202 -0
  788. package/utils/settings/internalWrites.ts +37 -0
  789. package/utils/settings/managedPath.ts +34 -0
  790. package/utils/settings/mdm/constants.ts +81 -0
  791. package/utils/settings/mdm/rawRead.ts +130 -0
  792. package/utils/settings/mdm/settings.ts +316 -0
  793. package/utils/settings/permissionValidation.ts +262 -0
  794. package/utils/settings/pluginOnlyPolicy.ts +60 -0
  795. package/utils/settings/schemaOutput.ts +8 -0
  796. package/utils/settings/settings.ts +1015 -0
  797. package/utils/settings/settingsCache.ts +80 -0
  798. package/utils/settings/toolValidationConfig.ts +103 -0
  799. package/utils/settings/types.ts +1149 -0
  800. package/utils/settings/validateEditTool.ts +45 -0
  801. package/utils/settings/validation.ts +265 -0
  802. package/utils/settings/validationTips.ts +164 -0
  803. package/utils/shell/bashProvider.ts +255 -0
  804. package/utils/shell/outputLimits.ts +14 -0
  805. package/utils/shell/powershellDetection.ts +107 -0
  806. package/utils/shell/powershellProvider.ts +123 -0
  807. package/utils/shell/prefix.ts +367 -0
  808. package/utils/shell/readOnlyCommandValidation.ts +1893 -0
  809. package/utils/shell/resolveDefaultShell.ts +14 -0
  810. package/utils/shell/shellProvider.ts +33 -0
  811. package/utils/shell/shellToolUtils.ts +22 -0
  812. package/utils/shell/specPrefix.ts +241 -0
  813. package/utils/shellConfig.ts +167 -0
  814. package/utils/sideQuery.ts +222 -0
  815. package/utils/sideQuestion.ts +155 -0
  816. package/utils/signal.ts +43 -0
  817. package/utils/sinks.ts +16 -0
  818. package/utils/skills/skillChangeDetector.ts +311 -0
  819. package/utils/slashCommandParsing.ts +60 -0
  820. package/utils/sleep.ts +84 -0
  821. package/utils/sliceAnsi.ts +91 -0
  822. package/utils/slowOperations.ts +286 -0
  823. package/utils/standaloneAgent.ts +23 -0
  824. package/utils/startupProfiler.ts +194 -0
  825. package/utils/staticRender.tsx +116 -0
  826. package/utils/stats.ts +1061 -0
  827. package/utils/statsCache.ts +434 -0
  828. package/utils/status.tsx +362 -0
  829. package/utils/statusNoticeDefinitions.tsx +198 -0
  830. package/utils/statusNoticeHelpers.ts +20 -0
  831. package/utils/stream.ts +76 -0
  832. package/utils/streamJsonStdoutGuard.ts +123 -0
  833. package/utils/streamlinedTransform.ts +201 -0
  834. package/utils/stringUtils.ts +235 -0
  835. package/utils/subprocessEnv.ts +99 -0
  836. package/utils/suggestions/commandSuggestions.ts +567 -0
  837. package/utils/suggestions/directoryCompletion.ts +263 -0
  838. package/utils/suggestions/shellHistoryCompletion.ts +119 -0
  839. package/utils/suggestions/skillUsageTracking.ts +55 -0
  840. package/utils/suggestions/slackChannelSuggestions.ts +209 -0
  841. package/utils/swarm/It2SetupPrompt.tsx +380 -0
  842. package/utils/swarm/backends/ITermBackend.ts +370 -0
  843. package/utils/swarm/backends/InProcessBackend.ts +339 -0
  844. package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  845. package/utils/swarm/backends/TmuxBackend.ts +764 -0
  846. package/utils/swarm/backends/detection.ts +128 -0
  847. package/utils/swarm/backends/it2Setup.ts +245 -0
  848. package/utils/swarm/backends/registry.ts +464 -0
  849. package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  850. package/utils/swarm/backends/types.ts +311 -0
  851. package/utils/swarm/constants.ts +33 -0
  852. package/utils/swarm/inProcessRunner.ts +1552 -0
  853. package/utils/swarm/leaderPermissionBridge.ts +54 -0
  854. package/utils/swarm/permissionSync.ts +928 -0
  855. package/utils/swarm/reconnection.ts +119 -0
  856. package/utils/swarm/spawnInProcess.ts +328 -0
  857. package/utils/swarm/spawnUtils.ts +146 -0
  858. package/utils/swarm/teamHelpers.ts +683 -0
  859. package/utils/swarm/teammateInit.ts +129 -0
  860. package/utils/swarm/teammateLayoutManager.ts +107 -0
  861. package/utils/swarm/teammateModel.ts +10 -0
  862. package/utils/swarm/teammatePromptAddendum.ts +18 -0
  863. package/utils/systemDirectories.ts +74 -0
  864. package/utils/systemPrompt.ts +123 -0
  865. package/utils/systemPromptType.ts +14 -0
  866. package/utils/systemTheme.ts +119 -0
  867. package/utils/taggedId.ts +54 -0
  868. package/utils/task/TaskOutput.ts +390 -0
  869. package/utils/task/diskOutput.ts +451 -0
  870. package/utils/task/framework.ts +308 -0
  871. package/utils/task/outputFormatting.ts +38 -0
  872. package/utils/task/sdkProgress.ts +36 -0
  873. package/utils/tasks.ts +862 -0
  874. package/utils/teamDiscovery.ts +81 -0
  875. package/utils/teamMemoryOps.ts +88 -0
  876. package/utils/teammate.ts +292 -0
  877. package/utils/teammateContext.ts +96 -0
  878. package/utils/teammateMailbox.ts +1183 -0
  879. package/utils/telemetry/betaSessionTracing.ts +491 -0
  880. package/utils/telemetry/bigqueryExporter.ts +252 -0
  881. package/utils/telemetry/events.ts +75 -0
  882. package/utils/telemetry/instrumentation.ts +825 -0
  883. package/utils/telemetry/logger.ts +26 -0
  884. package/utils/telemetry/perfettoTracing.ts +1120 -0
  885. package/utils/telemetry/pluginTelemetry.ts +289 -0
  886. package/utils/telemetry/sessionTracing.ts +927 -0
  887. package/utils/telemetry/skillLoadedEvent.ts +39 -0
  888. package/utils/telemetryAttributes.ts +71 -0
  889. package/utils/teleport/api.ts +466 -0
  890. package/utils/teleport/environmentSelection.ts +77 -0
  891. package/utils/teleport/environments.ts +120 -0
  892. package/utils/teleport/gitBundle.ts +292 -0
  893. package/utils/teleport.tsx +1226 -0
  894. package/utils/tempfile.ts +31 -0
  895. package/utils/terminal.ts +131 -0
  896. package/utils/terminalPanel.ts +191 -0
  897. package/utils/textHighlighting.ts +166 -0
  898. package/utils/theme.ts +639 -0
  899. package/utils/thinking.ts +162 -0
  900. package/utils/timeouts.ts +39 -0
  901. package/utils/tmuxSocket.ts +427 -0
  902. package/utils/todo/types.ts +18 -0
  903. package/utils/tokenBudget.ts +73 -0
  904. package/utils/tokens.ts +261 -0
  905. package/utils/toolErrors.ts +132 -0
  906. package/utils/toolPool.ts +79 -0
  907. package/utils/toolResultStorage.ts +1040 -0
  908. package/utils/toolSchemaCache.ts +26 -0
  909. package/utils/toolSearch.ts +756 -0
  910. package/utils/transcriptSearch.ts +202 -0
  911. package/utils/treeify.ts +170 -0
  912. package/utils/truncate.ts +179 -0
  913. package/utils/ultraplan/ccrSession.ts +349 -0
  914. package/utils/ultraplan/keyword.ts +127 -0
  915. package/utils/ultraplan/prompt.txt +1 -0
  916. package/utils/unaryLogging.ts +39 -0
  917. package/utils/undercover.ts +89 -0
  918. package/utils/user.ts +194 -0
  919. package/utils/userAgent.ts +10 -0
  920. package/utils/userPromptKeywords.ts +27 -0
  921. package/utils/uuid.ts +27 -0
  922. package/utils/warningHandler.ts +121 -0
  923. package/utils/which.ts +82 -0
  924. package/utils/windowsPaths.ts +173 -0
  925. package/utils/withResolvers.ts +13 -0
  926. package/utils/words.ts +800 -0
  927. package/utils/workloadContext.ts +57 -0
  928. package/utils/worktree.ts +1519 -0
  929. package/utils/worktreeModeEnabled.ts +11 -0
  930. package/utils/xdg.ts +65 -0
  931. package/utils/xmem.ts +6 -0
  932. package/utils/xml.ts +16 -0
  933. package/utils/yaml.ts +15 -0
  934. package/utils/zodToJsonSchema.ts +23 -0
@@ -0,0 +1,16 @@
1
+ import { useSyncExternalStore } from 'react'
2
+ import { compactWarningStore } from './compactWarningState.js'
3
+
4
+ /**
5
+ * React hook to subscribe to compact warning suppression state.
6
+ *
7
+ * Lives in its own file so that compactWarningState.ts stays React-free:
8
+ * microCompact.ts imports the pure state functions, and pulling React into
9
+ * that module graph would drag it into the print-mode startup path.
10
+ */
11
+ export function useCompactWarningSuppression(): boolean {
12
+ return useSyncExternalStore(
13
+ compactWarningStore.subscribe,
14
+ compactWarningStore.getState,
15
+ )
16
+ }
@@ -0,0 +1,18 @@
1
+ import { createStore } from '../../state/store.js'
2
+
3
+ /**
4
+ * Tracks whether the "context left until autocompact" warning should be suppressed.
5
+ * We suppress immediately after successful compaction since we don't have accurate
6
+ * token counts until the next API response.
7
+ */
8
+ export const compactWarningStore = createStore<boolean>(false)
9
+
10
+ /** Suppress the compact warning. Call after successful compaction. */
11
+ export function suppressCompactWarning(): void {
12
+ compactWarningStore.setState(() => true)
13
+ }
14
+
15
+ /** Clear the compact warning suppression. Called at start of new compact attempt. */
16
+ export function clearCompactWarningSuppression(): void {
17
+ compactWarningStore.setState(() => false)
18
+ }
@@ -0,0 +1,63 @@
1
+ import type { Message } from '../../types/message.js'
2
+
3
+ /**
4
+ * Groups messages at API-round boundaries: one group per API round-trip.
5
+ * A boundary fires when a NEW assistant response begins (different
6
+ * message.id from the prior assistant). For well-formed conversations
7
+ * this is an API-safe split point — the API contract requires every
8
+ * tool_use to be resolved before the next assistant turn, so pairing
9
+ * validity falls out of the assistant-id boundary. For malformed inputs
10
+ * (dangling tool_use after resume/truncation) the fork's
11
+ * ensureToolResultPairing repairs the split at API time.
12
+ *
13
+ * Replaces the prior human-turn grouping (boundaries only at real user
14
+ * prompts) with finer-grained API-round grouping, allowing reactive
15
+ * compact to operate on single-prompt agentic sessions (SDK/CCR/eval
16
+ * callers) where the entire workload is one human turn.
17
+ *
18
+ * Extracted to its own file to break the compact.ts ↔ compactMessages.ts
19
+ * cycle (CC-1180) — the cycle shifted module-init order enough to surface
20
+ * a latent ws CJS/ESM resolution race in CI shard-2.
21
+ */
22
+ export function groupMessagesByApiRound(messages: Message[]): Message[][] {
23
+ const groups: Message[][] = []
24
+ let current: Message[] = []
25
+ // message.id of the most recently seen assistant. This is the sole
26
+ // boundary gate: streaming chunks from the same API response share an
27
+ // id, so boundaries only fire at the start of a genuinely new round.
28
+ // normalizeMessages yields one AssistantMessage per content block, and
29
+ // StreamingToolExecutor interleaves tool_results between chunks live
30
+ // (yield order, not concat order — see query.ts:613). The id check
31
+ // correctly keeps `[tu_A(id=X), result_A, tu_B(id=X)]` in one group.
32
+ let lastAssistantId: string | undefined
33
+
34
+ // In a well-formed conversation the API contract guarantees every
35
+ // tool_use is resolved before the next assistant turn, so lastAssistantId
36
+ // alone is a sufficient boundary gate. Tracking unresolved tool_use IDs
37
+ // would only do work when the conversation is malformed (dangling tool_use
38
+ // after resume-from-partial-batch or max_tokens truncation) — and in that
39
+ // case it pins the gate shut forever, merging all subsequent rounds into
40
+ // one group. We let those boundaries fire; the summarizer fork's own
41
+ // ensureToolResultPairing at claude.ts:1136 repairs the dangling tu at
42
+ // API time.
43
+ for (const msg of messages) {
44
+ if (
45
+ msg.type === 'assistant' &&
46
+ msg.message.id !== lastAssistantId &&
47
+ current.length > 0
48
+ ) {
49
+ groups.push(current)
50
+ current = [msg]
51
+ } else {
52
+ current.push(msg)
53
+ }
54
+ if (msg.type === 'assistant') {
55
+ lastAssistantId = msg.message.id
56
+ }
57
+ }
58
+
59
+ if (current.length > 0) {
60
+ groups.push(current)
61
+ }
62
+ return groups
63
+ }
@@ -0,0 +1,530 @@
1
+ import { feature } from 'bun:bundle'
2
+ import type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'
3
+ import type { QuerySource } from '../../constants/querySource.js'
4
+ import type { ToolUseContext } from '../../Tool.js'
5
+ import { FILE_EDIT_TOOL_NAME } from '../../tools/FileEditTool/constants.js'
6
+ import { FILE_READ_TOOL_NAME } from '../../tools/FileReadTool/prompt.js'
7
+ import { FILE_WRITE_TOOL_NAME } from '../../tools/FileWriteTool/prompt.js'
8
+ import { GLOB_TOOL_NAME } from '../../tools/GlobTool/prompt.js'
9
+ import { GREP_TOOL_NAME } from '../../tools/GrepTool/prompt.js'
10
+ import { WEB_FETCH_TOOL_NAME } from '../../tools/WebFetchTool/prompt.js'
11
+ import { WEB_SEARCH_TOOL_NAME } from '../../tools/WebSearchTool/prompt.js'
12
+ import type { Message } from '../../types/message.js'
13
+ import { logForDebugging } from '../../utils/debug.js'
14
+ import { getMainLoopModel } from '../../utils/model/model.js'
15
+ import { SHELL_TOOL_NAMES } from '../../utils/shell/shellToolUtils.js'
16
+ import { jsonStringify } from '../../utils/slowOperations.js'
17
+ import {
18
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
19
+ logEvent,
20
+ } from '../analytics/index.js'
21
+ import { notifyCacheDeletion } from '../api/promptCacheBreakDetection.js'
22
+ import { roughTokenCountEstimation } from '../tokenEstimation.js'
23
+ import {
24
+ clearCompactWarningSuppression,
25
+ suppressCompactWarning,
26
+ } from './compactWarningState.js'
27
+ import {
28
+ getTimeBasedMCConfig,
29
+ type TimeBasedMCConfig,
30
+ } from './timeBasedMCConfig.js'
31
+
32
+ // Inline from utils/toolResultStorage.ts — importing that file pulls in
33
+ // sessionStorage → utils/messages → services/api/errors, completing a
34
+ // circular-deps loop back through this file via promptCacheBreakDetection.
35
+ // Drift is caught by a test asserting equality with the source-of-truth.
36
+ export const TIME_BASED_MC_CLEARED_MESSAGE = '[Old tool result content cleared]'
37
+
38
+ const IMAGE_MAX_TOKEN_SIZE = 2000
39
+
40
+ // Only compact these tools
41
+ const COMPACTABLE_TOOLS = new Set<string>([
42
+ FILE_READ_TOOL_NAME,
43
+ ...SHELL_TOOL_NAMES,
44
+ GREP_TOOL_NAME,
45
+ GLOB_TOOL_NAME,
46
+ WEB_SEARCH_TOOL_NAME,
47
+ WEB_FETCH_TOOL_NAME,
48
+ FILE_EDIT_TOOL_NAME,
49
+ FILE_WRITE_TOOL_NAME,
50
+ ])
51
+
52
+ // --- Cached microcompact state (ant-only, gated by feature('CACHED_MICROCOMPACT')) ---
53
+
54
+ // Lazy-initialized cached MC module and state to avoid importing in external builds.
55
+ // The imports and state live inside feature() checks for dead code elimination.
56
+ let cachedMCModule: typeof import('./cachedMicrocompact.js') | null = null
57
+ let cachedMCState: import('./cachedMicrocompact.js').CachedMCState | null = null
58
+ let pendingCacheEdits:
59
+ | import('./cachedMicrocompact.js').CacheEditsBlock
60
+ | null = null
61
+
62
+ async function getCachedMCModule(): Promise<
63
+ typeof import('./cachedMicrocompact.js')
64
+ > {
65
+ if (!cachedMCModule) {
66
+ cachedMCModule = await import('./cachedMicrocompact.js')
67
+ }
68
+ return cachedMCModule
69
+ }
70
+
71
+ function ensureCachedMCState(): import('./cachedMicrocompact.js').CachedMCState {
72
+ if (!cachedMCState && cachedMCModule) {
73
+ cachedMCState = cachedMCModule.createCachedMCState()
74
+ }
75
+ if (!cachedMCState) {
76
+ throw new Error(
77
+ 'cachedMCState not initialized — getCachedMCModule() must be called first',
78
+ )
79
+ }
80
+ return cachedMCState
81
+ }
82
+
83
+ /**
84
+ * Get new pending cache edits to be included in the next API request.
85
+ * Returns null if there are no new pending edits.
86
+ * Clears the pending state (caller must pin them after insertion).
87
+ */
88
+ export function consumePendingCacheEdits():
89
+ | import('./cachedMicrocompact.js').CacheEditsBlock
90
+ | null {
91
+ const edits = pendingCacheEdits
92
+ pendingCacheEdits = null
93
+ return edits
94
+ }
95
+
96
+ /**
97
+ * Get all previously-pinned cache edits that must be re-sent at their
98
+ * original positions for cache hits.
99
+ */
100
+ export function getPinnedCacheEdits(): import('./cachedMicrocompact.js').PinnedCacheEdits[] {
101
+ if (!cachedMCState) {
102
+ return []
103
+ }
104
+ return cachedMCState.pinnedEdits
105
+ }
106
+
107
+ /**
108
+ * Pin a new cache_edits block to a specific user message position.
109
+ * Called after inserting new edits so they are re-sent in subsequent calls.
110
+ */
111
+ export function pinCacheEdits(
112
+ userMessageIndex: number,
113
+ block: import('./cachedMicrocompact.js').CacheEditsBlock,
114
+ ): void {
115
+ if (cachedMCState) {
116
+ cachedMCState.pinnedEdits.push({ userMessageIndex, block })
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Marks all registered tools as sent to the API.
122
+ * Called after a successful API response.
123
+ */
124
+ export function markToolsSentToAPIState(): void {
125
+ if (cachedMCState && cachedMCModule) {
126
+ cachedMCModule.markToolsSentToAPI(cachedMCState)
127
+ }
128
+ }
129
+
130
+ export function resetMicrocompactState(): void {
131
+ if (cachedMCState && cachedMCModule) {
132
+ cachedMCModule.resetCachedMCState(cachedMCState)
133
+ }
134
+ pendingCacheEdits = null
135
+ }
136
+
137
+ // Helper to calculate tool result tokens
138
+ function calculateToolResultTokens(block: ToolResultBlockParam): number {
139
+ if (!block.content) {
140
+ return 0
141
+ }
142
+
143
+ if (typeof block.content === 'string') {
144
+ return roughTokenCountEstimation(block.content)
145
+ }
146
+
147
+ // Array of TextBlockParam | ImageBlockParam | DocumentBlockParam
148
+ return block.content.reduce((sum, item) => {
149
+ if (item.type === 'text') {
150
+ return sum + roughTokenCountEstimation(item.text)
151
+ } else if (item.type === 'image' || item.type === 'document') {
152
+ // Images/documents are approximately 2000 tokens regardless of format
153
+ return sum + IMAGE_MAX_TOKEN_SIZE
154
+ }
155
+ return sum
156
+ }, 0)
157
+ }
158
+
159
+ /**
160
+ * Estimate token count for messages by extracting text content
161
+ * Used for rough token estimation when we don't have accurate API counts
162
+ * Pads estimate by 4/3 to be conservative since we're approximating
163
+ */
164
+ export function estimateMessageTokens(messages: Message[]): number {
165
+ let totalTokens = 0
166
+
167
+ for (const message of messages) {
168
+ if (message.type !== 'user' && message.type !== 'assistant') {
169
+ continue
170
+ }
171
+
172
+ if (!Array.isArray(message.message.content)) {
173
+ continue
174
+ }
175
+
176
+ for (const block of message.message.content) {
177
+ if (block.type === 'text') {
178
+ totalTokens += roughTokenCountEstimation(block.text)
179
+ } else if (block.type === 'tool_result') {
180
+ totalTokens += calculateToolResultTokens(block)
181
+ } else if (block.type === 'image' || block.type === 'document') {
182
+ totalTokens += IMAGE_MAX_TOKEN_SIZE
183
+ } else if (block.type === 'thinking') {
184
+ // Match roughTokenCountEstimationForBlock: count only the thinking
185
+ // text, not the JSON wrapper or signature (signature is metadata,
186
+ // not model-tokenized content).
187
+ totalTokens += roughTokenCountEstimation(block.thinking)
188
+ } else if (block.type === 'redacted_thinking') {
189
+ totalTokens += roughTokenCountEstimation(block.data)
190
+ } else if (block.type === 'tool_use') {
191
+ // Match roughTokenCountEstimationForBlock: count name + input,
192
+ // not the JSON wrapper or id field.
193
+ totalTokens += roughTokenCountEstimation(
194
+ block.name + jsonStringify(block.input ?? {}),
195
+ )
196
+ } else {
197
+ // server_tool_use, web_search_tool_result, etc.
198
+ totalTokens += roughTokenCountEstimation(jsonStringify(block))
199
+ }
200
+ }
201
+ }
202
+
203
+ // Pad estimate by 4/3 to be conservative since we're approximating
204
+ return Math.ceil(totalTokens * (4 / 3))
205
+ }
206
+
207
+ export type PendingCacheEdits = {
208
+ trigger: 'auto'
209
+ deletedToolIds: string[]
210
+ // Baseline cumulative cache_deleted_input_tokens from the previous API response,
211
+ // used to compute the per-operation delta (the API value is sticky/cumulative)
212
+ baselineCacheDeletedTokens: number
213
+ }
214
+
215
+ export type MicrocompactResult = {
216
+ messages: Message[]
217
+ compactionInfo?: {
218
+ pendingCacheEdits?: PendingCacheEdits
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Walk messages and collect tool_use IDs whose tool name is in
224
+ * COMPACTABLE_TOOLS, in encounter order. Shared by both microcompact paths.
225
+ */
226
+ function collectCompactableToolIds(messages: Message[]): string[] {
227
+ const ids: string[] = []
228
+ for (const message of messages) {
229
+ if (
230
+ message.type === 'assistant' &&
231
+ Array.isArray(message.message.content)
232
+ ) {
233
+ for (const block of message.message.content) {
234
+ if (block.type === 'tool_use' && COMPACTABLE_TOOLS.has(block.name)) {
235
+ ids.push(block.id)
236
+ }
237
+ }
238
+ }
239
+ }
240
+ return ids
241
+ }
242
+
243
+ // Prefix-match because promptCategory.ts sets the querySource to
244
+ // 'repl_main_thread:outputStyle:<style>' when a non-default output style
245
+ // is active. The bare 'repl_main_thread' is only used for the default style.
246
+ // query.ts:350/1451 use the same startsWith pattern; the pre-existing
247
+ // cached-MC `=== 'repl_main_thread'` check was a latent bug — users with a
248
+ // non-default output style were silently excluded from cached MC.
249
+ function isMainThreadSource(querySource: QuerySource | undefined): boolean {
250
+ return !querySource || querySource.startsWith('repl_main_thread')
251
+ }
252
+
253
+ export async function microcompactMessages(
254
+ messages: Message[],
255
+ toolUseContext?: ToolUseContext,
256
+ querySource?: QuerySource,
257
+ ): Promise<MicrocompactResult> {
258
+ // Clear suppression flag at start of new microcompact attempt
259
+ clearCompactWarningSuppression()
260
+
261
+ // Time-based trigger runs first and short-circuits. If the gap since the
262
+ // last assistant message exceeds the threshold, the server cache has expired
263
+ // and the full prefix will be rewritten regardless — so content-clear old
264
+ // tool results now, before the request, to shrink what gets rewritten.
265
+ // Cached MC (cache-editing) is skipped when this fires: editing assumes a
266
+ // warm cache, and we just established it's cold.
267
+ const timeBasedResult = maybeTimeBasedMicrocompact(messages, querySource)
268
+ if (timeBasedResult) {
269
+ return timeBasedResult
270
+ }
271
+
272
+ // Only run cached MC for the main thread to prevent forked agents
273
+ // (session_memory, prompt_suggestion, etc.) from registering their
274
+ // tool_results in the global cachedMCState, which would cause the main
275
+ // thread to try deleting tools that don't exist in its own conversation.
276
+ if (feature('CACHED_MICROCOMPACT')) {
277
+ const mod = await getCachedMCModule()
278
+ const model = toolUseContext?.options.mainLoopModel ?? getMainLoopModel()
279
+ if (
280
+ mod.isCachedMicrocompactEnabled() &&
281
+ mod.isModelSupportedForCacheEditing(model) &&
282
+ isMainThreadSource(querySource)
283
+ ) {
284
+ return await cachedMicrocompactPath(messages, querySource)
285
+ }
286
+ }
287
+
288
+ // Legacy microcompact path removed — tengu_cache_plum_violet is always true.
289
+ // For contexts where cached microcompact is not available (external builds,
290
+ // non-ant users, unsupported models, sub-agents), no compaction happens here;
291
+ // autocompact handles context pressure instead.
292
+ return { messages }
293
+ }
294
+
295
+ /**
296
+ * Cached microcompact path - uses cache editing API to remove tool results
297
+ * without invalidating the cached prefix.
298
+ *
299
+ * Key differences from regular microcompact:
300
+ * - Does NOT modify local message content (cache_reference and cache_edits are added at API layer)
301
+ * - Uses count-based trigger/keep thresholds from GrowthBook config
302
+ * - Takes precedence over regular microcompact (no disk persistence)
303
+ * - Tracks tool results and queues cache edits for the API layer
304
+ */
305
+ async function cachedMicrocompactPath(
306
+ messages: Message[],
307
+ querySource: QuerySource | undefined,
308
+ ): Promise<MicrocompactResult> {
309
+ const mod = await getCachedMCModule()
310
+ const state = ensureCachedMCState()
311
+ const config = mod.getCachedMCConfig()
312
+
313
+ const compactableToolIds = new Set(collectCompactableToolIds(messages))
314
+ // Second pass: register tool results grouped by user message
315
+ for (const message of messages) {
316
+ if (message.type === 'user' && Array.isArray(message.message.content)) {
317
+ const groupIds: string[] = []
318
+ for (const block of message.message.content) {
319
+ if (
320
+ block.type === 'tool_result' &&
321
+ compactableToolIds.has(block.tool_use_id) &&
322
+ !state.registeredTools.has(block.tool_use_id)
323
+ ) {
324
+ mod.registerToolResult(state, block.tool_use_id)
325
+ groupIds.push(block.tool_use_id)
326
+ }
327
+ }
328
+ mod.registerToolMessage(state, groupIds)
329
+ }
330
+ }
331
+
332
+ const toolsToDelete = mod.getToolResultsToDelete(state)
333
+
334
+ if (toolsToDelete.length > 0) {
335
+ // Create and queue the cache_edits block for the API layer
336
+ const cacheEdits = mod.createCacheEditsBlock(state, toolsToDelete)
337
+ if (cacheEdits) {
338
+ pendingCacheEdits = cacheEdits
339
+ }
340
+
341
+ logForDebugging(
342
+ `Cached MC deleting ${toolsToDelete.length} tool(s): ${toolsToDelete.join(', ')}`,
343
+ )
344
+
345
+ // Log the event
346
+ logEvent('tengu_cached_microcompact', {
347
+ toolsDeleted: toolsToDelete.length,
348
+ deletedToolIds: toolsToDelete.join(
349
+ ',',
350
+ ) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
351
+ activeToolCount: state.toolOrder.length - state.deletedRefs.size,
352
+ triggerType:
353
+ 'auto' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
354
+ threshold: config.triggerThreshold,
355
+ keepRecent: config.keepRecent,
356
+ })
357
+
358
+ // Suppress warning after successful compaction
359
+ suppressCompactWarning()
360
+
361
+ // Notify cache break detection that cache reads will legitimately drop
362
+ if (feature('PROMPT_CACHE_BREAK_DETECTION')) {
363
+ // Pass the actual querySource — isMainThreadSource now prefix-matches
364
+ // so output-style variants enter here, and getTrackingKey keys on the
365
+ // full source string, not the 'repl_main_thread' prefix.
366
+ notifyCacheDeletion(querySource ?? 'repl_main_thread')
367
+ }
368
+
369
+ // Return messages unchanged - cache_reference and cache_edits are added at API layer
370
+ // Boundary message is deferred until after API response so we can use
371
+ // actual cache_deleted_input_tokens from the API instead of client-side estimates
372
+ // Capture the baseline cumulative cache_deleted_input_tokens from the last
373
+ // assistant message so we can compute a per-operation delta after the API call
374
+ const lastAsst = messages.findLast(m => m.type === 'assistant')
375
+ const baseline =
376
+ lastAsst?.type === 'assistant'
377
+ ? ((
378
+ lastAsst.message.usage as unknown as Record<
379
+ string,
380
+ number | undefined
381
+ >
382
+ )?.cache_deleted_input_tokens ?? 0)
383
+ : 0
384
+
385
+ return {
386
+ messages,
387
+ compactionInfo: {
388
+ pendingCacheEdits: {
389
+ trigger: 'auto',
390
+ deletedToolIds: toolsToDelete,
391
+ baselineCacheDeletedTokens: baseline,
392
+ },
393
+ },
394
+ }
395
+ }
396
+
397
+ // No compaction needed, return messages unchanged
398
+ return { messages }
399
+ }
400
+
401
+ /**
402
+ * Time-based microcompact: when the gap since the last main-loop assistant
403
+ * message exceeds the configured threshold, content-clear all but the most
404
+ * recent N compactable tool results.
405
+ *
406
+ * Returns null when the trigger doesn't fire (disabled, wrong source, gap
407
+ * under threshold, nothing to clear) — caller falls through to other paths.
408
+ *
409
+ * Unlike cached MC, this mutates message content directly. The cache is cold,
410
+ * so there's no cached prefix to preserve via cache_edits.
411
+ */
412
+ /**
413
+ * Check whether the time-based trigger should fire for this request.
414
+ *
415
+ * Returns the measured gap (minutes since last assistant message) when the
416
+ * trigger fires, or null when it doesn't (disabled, wrong source, under
417
+ * threshold, no prior assistant, unparseable timestamp).
418
+ *
419
+ * Extracted so other pre-request paths (e.g. snip force-apply) can consult
420
+ * the same predicate without coupling to the tool-result clearing action.
421
+ */
422
+ export function evaluateTimeBasedTrigger(
423
+ messages: Message[],
424
+ querySource: QuerySource | undefined,
425
+ ): { gapMinutes: number; config: TimeBasedMCConfig } | null {
426
+ const config = getTimeBasedMCConfig()
427
+ // Require an explicit main-thread querySource. isMainThreadSource treats
428
+ // undefined as main-thread (for cached-MC backward-compat), but several
429
+ // callers (/context, /compact, analyzeContext) invoke microcompactMessages
430
+ // without a source for analysis-only purposes — they should not trigger.
431
+ if (!config.enabled || !querySource || !isMainThreadSource(querySource)) {
432
+ return null
433
+ }
434
+ const lastAssistant = messages.findLast(m => m.type === 'assistant')
435
+ if (!lastAssistant) {
436
+ return null
437
+ }
438
+ const gapMinutes =
439
+ (Date.now() - new Date(lastAssistant.timestamp).getTime()) / 60_000
440
+ if (!Number.isFinite(gapMinutes) || gapMinutes < config.gapThresholdMinutes) {
441
+ return null
442
+ }
443
+ return { gapMinutes, config }
444
+ }
445
+
446
+ function maybeTimeBasedMicrocompact(
447
+ messages: Message[],
448
+ querySource: QuerySource | undefined,
449
+ ): MicrocompactResult | null {
450
+ const trigger = evaluateTimeBasedTrigger(messages, querySource)
451
+ if (!trigger) {
452
+ return null
453
+ }
454
+ const { gapMinutes, config } = trigger
455
+
456
+ const compactableIds = collectCompactableToolIds(messages)
457
+
458
+ // Floor at 1: slice(-0) returns the full array (paradoxically keeps
459
+ // everything), and clearing ALL results leaves the model with zero working
460
+ // context. Neither degenerate is sensible — always keep at least the last.
461
+ const keepRecent = Math.max(1, config.keepRecent)
462
+ const keepSet = new Set(compactableIds.slice(-keepRecent))
463
+ const clearSet = new Set(compactableIds.filter(id => !keepSet.has(id)))
464
+
465
+ if (clearSet.size === 0) {
466
+ return null
467
+ }
468
+
469
+ let tokensSaved = 0
470
+ const result: Message[] = messages.map(message => {
471
+ if (message.type !== 'user' || !Array.isArray(message.message.content)) {
472
+ return message
473
+ }
474
+ let touched = false
475
+ const newContent = message.message.content.map(block => {
476
+ if (
477
+ block.type === 'tool_result' &&
478
+ clearSet.has(block.tool_use_id) &&
479
+ block.content !== TIME_BASED_MC_CLEARED_MESSAGE
480
+ ) {
481
+ tokensSaved += calculateToolResultTokens(block)
482
+ touched = true
483
+ return { ...block, content: TIME_BASED_MC_CLEARED_MESSAGE }
484
+ }
485
+ return block
486
+ })
487
+ if (!touched) return message
488
+ return {
489
+ ...message,
490
+ message: { ...message.message, content: newContent },
491
+ }
492
+ })
493
+
494
+ if (tokensSaved === 0) {
495
+ return null
496
+ }
497
+
498
+ logEvent('tengu_time_based_microcompact', {
499
+ gapMinutes: Math.round(gapMinutes),
500
+ gapThresholdMinutes: config.gapThresholdMinutes,
501
+ toolsCleared: clearSet.size,
502
+ toolsKept: keepSet.size,
503
+ keepRecent: config.keepRecent,
504
+ tokensSaved,
505
+ })
506
+
507
+ logForDebugging(
508
+ `[TIME-BASED MC] gap ${Math.round(gapMinutes)}min > ${config.gapThresholdMinutes}min, cleared ${clearSet.size} tool results (~${tokensSaved} tokens), kept last ${keepSet.size}`,
509
+ )
510
+
511
+ suppressCompactWarning()
512
+ // Cached-MC state (module-level) holds tool IDs registered on prior turns.
513
+ // We just content-cleared some of those tools AND invalidated the server
514
+ // cache by changing prompt content. If cached-MC runs next turn with the
515
+ // stale state, it would try to cache_edit tools whose server-side entries
516
+ // no longer exist. Reset it.
517
+ resetMicrocompactState()
518
+ // We just changed the prompt content — the next response's cache read will
519
+ // be low, but that's us, not a break. Tell the detector to expect a drop.
520
+ // notifyCacheDeletion (not notifyCompaction) because it's already imported
521
+ // here and achieves the same false-positive suppression — adding the second
522
+ // symbol to the import was flagged by the circular-deps check.
523
+ // Pass the actual querySource: getTrackingKey returns the full source string
524
+ // (e.g. 'repl_main_thread:outputStyle:custom'), not just the prefix.
525
+ if (feature('PROMPT_CACHE_BREAK_DETECTION') && querySource) {
526
+ notifyCacheDeletion(querySource)
527
+ }
528
+
529
+ return { messages: result }
530
+ }