@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,658 @@
1
+ /**
2
+ * CLI `ComputerExecutor` implementation. Wraps two native modules:
3
+ * - `@ant/computer-use-input` (Rust/enigo) — mouse, keyboard, frontmost app
4
+ * - `@ant/computer-use-swift` — SCContentFilter screenshots, NSWorkspace apps, TCC
5
+ *
6
+ * Contract: `packages/desktop/computer-use-mcp/src/executor.ts` in the apps
7
+ * repo. The reference impl is Cowork's `apps/desktop/src/main/nest-only/
8
+ * computer-use/executor.ts` — see notable deviations under "CLI deltas" below.
9
+ *
10
+ * ── CLI deltas from Cowork ─────────────────────────────────────────────────
11
+ *
12
+ * No `withClickThrough`. Cowork wraps every mouse op in
13
+ * `BrowserWindow.setIgnoreMouseEvents(true)` so clicks fall through the
14
+ * overlay. We're a terminal — no window — so the click-through bracket is
15
+ * a no-op. The sentinel `CLI_HOST_BUNDLE_ID` never matches frontmost.
16
+ *
17
+ * Terminal as surrogate host. `getTerminalBundleId()` detects the emulator
18
+ * we're running inside. It's passed as `hostBundleId` to `prepareDisplay`/
19
+ * `resolvePrepareCapture` so the Swift side exempts it from hide AND skips
20
+ * it in the activate z-order walk (so the terminal being frontmost doesn't
21
+ * eat clicks meant for the target app). Also stripped from `allowedBundleIds`
22
+ * via `withoutTerminal()` so screenshots don't capture it (Swift 0.2.1's
23
+ * captureExcluding takes an allow-list despite the name — apps#30355).
24
+ * `capabilities.hostBundleId` stays as the sentinel — the package's
25
+ * frontmost gate uses that, and the terminal being frontmost is fine.
26
+ *
27
+ * Clipboard via `pbcopy`/`pbpaste`. No Electron `clipboard` module.
28
+ */
29
+
30
+ import type {
31
+ ComputerExecutor,
32
+ DisplayGeometry,
33
+ FrontmostApp,
34
+ InstalledApp,
35
+ ResolvePrepareCaptureResult,
36
+ RunningApp,
37
+ ScreenshotResult,
38
+ } from '@ant/computer-use-mcp'
39
+
40
+ import { API_RESIZE_PARAMS, targetImageSize } from '@ant/computer-use-mcp'
41
+ import { logForDebugging } from '../debug.js'
42
+ import { errorMessage } from '../errors.js'
43
+ import { execFileNoThrow } from '../execFileNoThrow.js'
44
+ import { sleep } from '../sleep.js'
45
+ import {
46
+ CLI_CU_CAPABILITIES,
47
+ CLI_HOST_BUNDLE_ID,
48
+ getTerminalBundleId,
49
+ } from './common.js'
50
+ import { drainRunLoop } from './drainRunLoop.js'
51
+ import { notifyExpectedEscape } from './escHotkey.js'
52
+ import { requireComputerUseInput } from './inputLoader.js'
53
+ import { requireComputerUseSwift } from './swiftLoader.js'
54
+
55
+ // ── Helpers ───────────────────────────────────────────────────────────────────
56
+
57
+ const SCREENSHOT_JPEG_QUALITY = 0.75
58
+
59
+ /** Logical → physical → API target dims. See `targetImageSize` + COORDINATES.md. */
60
+ function computeTargetDims(
61
+ logicalW: number,
62
+ logicalH: number,
63
+ scaleFactor: number,
64
+ ): [number, number] {
65
+ const physW = Math.round(logicalW * scaleFactor)
66
+ const physH = Math.round(logicalH * scaleFactor)
67
+ return targetImageSize(physW, physH, API_RESIZE_PARAMS)
68
+ }
69
+
70
+ async function readClipboardViaPbpaste(): Promise<string> {
71
+ const { stdout, code } = await execFileNoThrow('pbpaste', [], {
72
+ useCwd: false,
73
+ })
74
+ if (code !== 0) {
75
+ throw new Error(`pbpaste exited with code ${code}`)
76
+ }
77
+ return stdout
78
+ }
79
+
80
+ async function writeClipboardViaPbcopy(text: string): Promise<void> {
81
+ const { code } = await execFileNoThrow('pbcopy', [], {
82
+ input: text,
83
+ useCwd: false,
84
+ })
85
+ if (code !== 0) {
86
+ throw new Error(`pbcopy exited with code ${code}`)
87
+ }
88
+ }
89
+
90
+ type Input = ReturnType<typeof requireComputerUseInput>
91
+
92
+ /**
93
+ * Single-element key sequence matching "escape" or "esc" (case-insensitive).
94
+ * Used to hole-punch the CGEventTap abort for model-synthesized Escape — enigo
95
+ * accepts both spellings, so the tap must too.
96
+ */
97
+ function isBareEscape(parts: readonly string[]): boolean {
98
+ if (parts.length !== 1) return false
99
+ const lower = parts[0]!.toLowerCase()
100
+ return lower === 'escape' || lower === 'esc'
101
+ }
102
+
103
+ /**
104
+ * Instant move, then 50ms — an input→HID→AppKit→NSEvent round-trip before the
105
+ * caller reads `NSEvent.mouseLocation` or dispatches a click. Used for click,
106
+ * scroll, and drag-from; `animatedMove` is reserved for drag-to only. The
107
+ * intermediate animation frames were triggering hover states and, on the
108
+ * decomposed mouseDown/moveMouse path, emitting stray `.leftMouseDragged`
109
+ * events (toolCalls.ts handleScroll's mouse_full workaround).
110
+ */
111
+ const MOVE_SETTLE_MS = 50
112
+
113
+ async function moveAndSettle(
114
+ input: Input,
115
+ x: number,
116
+ y: number,
117
+ ): Promise<void> {
118
+ await input.moveMouse(x, y, false)
119
+ await sleep(MOVE_SETTLE_MS)
120
+ }
121
+
122
+ /**
123
+ * Release `pressed` in reverse (last pressed = first released). Errors are
124
+ * swallowed so a release failure never masks the real error.
125
+ *
126
+ * Drains via pop() rather than snapshotting length: if a drainRunLoop-
127
+ * orphaned press lambda resolves an in-flight input.key() AFTER finally
128
+ * calls us, that late push is still released on the next iteration. The
129
+ * orphaned flag stops the lambda at its NEXT check, not the current await.
130
+ */
131
+ async function releasePressed(input: Input, pressed: string[]): Promise<void> {
132
+ let k: string | undefined
133
+ while ((k = pressed.pop()) !== undefined) {
134
+ try {
135
+ await input.key(k, 'release')
136
+ } catch {
137
+ // Swallow — best-effort release.
138
+ }
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Bracket `fn()` with modifier press/release. `pressed` tracks which presses
144
+ * actually landed, so a mid-press throw only releases what was pressed — no
145
+ * stuck modifiers. The finally covers both press-phase and fn() throws.
146
+ *
147
+ * Caller must already be inside drainRunLoop() — key() dispatches to the
148
+ * main queue and needs the pump to resolve.
149
+ */
150
+ async function withModifiers<T>(
151
+ input: Input,
152
+ mods: string[],
153
+ fn: () => Promise<T>,
154
+ ): Promise<T> {
155
+ const pressed: string[] = []
156
+ try {
157
+ for (const m of mods) {
158
+ await input.key(m, 'press')
159
+ pressed.push(m)
160
+ }
161
+ return await fn()
162
+ } finally {
163
+ await releasePressed(input, pressed)
164
+ }
165
+ }
166
+
167
+ /**
168
+ * Port of Cowork's `typeViaClipboard`. Sequence:
169
+ * 1. Save the user's clipboard.
170
+ * 2. Write our text.
171
+ * 3. READ-BACK VERIFY — clipboard writes can silently fail. If the
172
+ * read-back doesn't match, never press Cmd+V (would paste junk).
173
+ * 4. Cmd+V via keys().
174
+ * 5. Sleep 100ms — battle-tested threshold for the paste-effect vs
175
+ * clipboard-restore race. Restoring too soon means the target app
176
+ * pastes the RESTORED content.
177
+ * 6. Restore — in a `finally`, so a throw between 2-5 never leaves the
178
+ * user's clipboard clobbered. Restore failures are swallowed.
179
+ */
180
+ async function typeViaClipboard(input: Input, text: string): Promise<void> {
181
+ let saved: string | undefined
182
+ try {
183
+ saved = await readClipboardViaPbpaste()
184
+ } catch {
185
+ logForDebugging(
186
+ '[computer-use] pbpaste before paste failed; proceeding without restore',
187
+ )
188
+ }
189
+
190
+ try {
191
+ await writeClipboardViaPbcopy(text)
192
+ if ((await readClipboardViaPbpaste()) !== text) {
193
+ throw new Error('Clipboard write did not round-trip.')
194
+ }
195
+ await input.keys(['command', 'v'])
196
+ await sleep(100)
197
+ } finally {
198
+ if (typeof saved === 'string') {
199
+ try {
200
+ await writeClipboardViaPbcopy(saved)
201
+ } catch {
202
+ logForDebugging('[computer-use] clipboard restore after paste failed')
203
+ }
204
+ }
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Port of Cowork's `animateMouseMovement` + `animatedMove`. Ease-out-cubic at
210
+ * 60fps; distance-proportional duration at 2000 px/sec, capped at 0.5s. When
211
+ * the sub-gate is off (or distance < ~2 frames), falls through to
212
+ * `moveAndSettle`. Called only from `drag` for the press→to motion — target
213
+ * apps may watch for `.leftMouseDragged` specifically (not just "button down +
214
+ * position changed") and the slow motion gives them time to process
215
+ * intermediate positions (scrollbars, window resizes).
216
+ */
217
+ async function animatedMove(
218
+ input: Input,
219
+ targetX: number,
220
+ targetY: number,
221
+ mouseAnimationEnabled: boolean,
222
+ ): Promise<void> {
223
+ if (!mouseAnimationEnabled) {
224
+ await moveAndSettle(input, targetX, targetY)
225
+ return
226
+ }
227
+ const start = await input.mouseLocation()
228
+ const deltaX = targetX - start.x
229
+ const deltaY = targetY - start.y
230
+ const distance = Math.hypot(deltaX, deltaY)
231
+ if (distance < 1) return
232
+ const durationSec = Math.min(distance / 2000, 0.5)
233
+ if (durationSec < 0.03) {
234
+ await moveAndSettle(input, targetX, targetY)
235
+ return
236
+ }
237
+ const frameRate = 60
238
+ const frameIntervalMs = 1000 / frameRate
239
+ const totalFrames = Math.floor(durationSec * frameRate)
240
+ for (let frame = 1; frame <= totalFrames; frame++) {
241
+ const t = frame / totalFrames
242
+ const eased = 1 - Math.pow(1 - t, 3)
243
+ await input.moveMouse(
244
+ Math.round(start.x + deltaX * eased),
245
+ Math.round(start.y + deltaY * eased),
246
+ false,
247
+ )
248
+ if (frame < totalFrames) {
249
+ await sleep(frameIntervalMs)
250
+ }
251
+ }
252
+ // Last frame has no trailing sleep — same HID round-trip before the
253
+ // caller's mouseButton reads NSEvent.mouseLocation.
254
+ await sleep(MOVE_SETTLE_MS)
255
+ }
256
+
257
+ // ── Factory ───────────────────────────────────────────────────────────────
258
+
259
+ export function createCliExecutor(opts: {
260
+ getMouseAnimationEnabled: () => boolean
261
+ getHideBeforeActionEnabled: () => boolean
262
+ }): ComputerExecutor {
263
+ if (process.platform !== 'darwin') {
264
+ throw new Error(
265
+ `createCliExecutor called on ${process.platform}. Computer control is macOS-only.`,
266
+ )
267
+ }
268
+
269
+ // Swift loaded once at factory time — every executor method needs it.
270
+ // Input loaded lazily via requireComputerUseInput() on first mouse/keyboard
271
+ // call — it caches internally, so screenshot-only flows never pull the
272
+ // enigo .node.
273
+ const cu = requireComputerUseSwift()
274
+
275
+ const { getMouseAnimationEnabled, getHideBeforeActionEnabled } = opts
276
+ const terminalBundleId = getTerminalBundleId()
277
+ const surrogateHost = terminalBundleId ?? CLI_HOST_BUNDLE_ID
278
+ // Swift 0.2.1's captureExcluding/captureRegion take an ALLOW list despite the
279
+ // name (apps#30355 — complement computed Swift-side against running apps).
280
+ // The terminal isn't in the user's grants so it's naturally excluded, but if
281
+ // the package ever passes it through we strip it here so the terminal never
282
+ // photobombs a screenshot.
283
+ const withoutTerminal = (allowed: readonly string[]): string[] =>
284
+ terminalBundleId === null
285
+ ? [...allowed]
286
+ : allowed.filter(id => id !== terminalBundleId)
287
+
288
+ logForDebugging(
289
+ terminalBundleId
290
+ ? `[computer-use] terminal ${terminalBundleId} → surrogate host (hide-exempt, activate-skip, screenshot-excluded)`
291
+ : '[computer-use] terminal not detected; falling back to sentinel host',
292
+ )
293
+
294
+ return {
295
+ capabilities: {
296
+ ...CLI_CU_CAPABILITIES,
297
+ hostBundleId: CLI_HOST_BUNDLE_ID,
298
+ },
299
+
300
+ // ── Pre-action sequence (hide + defocus) ────────────────────────────
301
+
302
+ async prepareForAction(
303
+ allowlistBundleIds: string[],
304
+ displayId?: number,
305
+ ): Promise<string[]> {
306
+ if (!getHideBeforeActionEnabled()) {
307
+ return []
308
+ }
309
+ // prepareDisplay isn't @MainActor (plain Task{}), but its .hide() calls
310
+ // trigger window-manager events that queue on CFRunLoop. Without the
311
+ // pump, those pile up during Swift's ~1s of usleeps and flush all at
312
+ // once when the next pumped call runs — visible window flashing.
313
+ // Electron drains CFRunLoop continuously so Cowork doesn't see this.
314
+ // Worst-case 100ms + 5×200ms safety-net ≈ 1.1s, well under the 30s
315
+ // drainRunLoop ceiling.
316
+ //
317
+ // "Continue with action execution even if switching fails" — the
318
+ // frontmost gate in toolCalls.ts catches any actual unsafe state.
319
+ return drainRunLoop(async () => {
320
+ try {
321
+ const result = await cu.apps.prepareDisplay(
322
+ allowlistBundleIds,
323
+ surrogateHost,
324
+ displayId,
325
+ )
326
+ if (result.activated) {
327
+ logForDebugging(
328
+ `[computer-use] prepareForAction: activated ${result.activated}`,
329
+ )
330
+ }
331
+ return result.hidden
332
+ } catch (err) {
333
+ logForDebugging(
334
+ `[computer-use] prepareForAction failed; continuing to action: ${errorMessage(err)}`,
335
+ { level: 'warn' },
336
+ )
337
+ return []
338
+ }
339
+ })
340
+ },
341
+
342
+ async previewHideSet(
343
+ allowlistBundleIds: string[],
344
+ displayId?: number,
345
+ ): Promise<Array<{ bundleId: string; displayName: string }>> {
346
+ return cu.apps.previewHideSet(
347
+ [...allowlistBundleIds, surrogateHost],
348
+ displayId,
349
+ )
350
+ },
351
+
352
+ // ── Display ──────────────────────────────────────────────────────────
353
+
354
+ async getDisplaySize(displayId?: number): Promise<DisplayGeometry> {
355
+ return cu.display.getSize(displayId)
356
+ },
357
+
358
+ async listDisplays(): Promise<DisplayGeometry[]> {
359
+ return cu.display.listAll()
360
+ },
361
+
362
+ async findWindowDisplays(
363
+ bundleIds: string[],
364
+ ): Promise<Array<{ bundleId: string; displayIds: number[] }>> {
365
+ return cu.apps.findWindowDisplays(bundleIds)
366
+ },
367
+
368
+ async resolvePrepareCapture(opts: {
369
+ allowedBundleIds: string[]
370
+ preferredDisplayId?: number
371
+ autoResolve: boolean
372
+ doHide?: boolean
373
+ }): Promise<ResolvePrepareCaptureResult> {
374
+ const d = cu.display.getSize(opts.preferredDisplayId)
375
+ const [targetW, targetH] = computeTargetDims(
376
+ d.width,
377
+ d.height,
378
+ d.scaleFactor,
379
+ )
380
+ return drainRunLoop(() =>
381
+ cu.resolvePrepareCapture(
382
+ withoutTerminal(opts.allowedBundleIds),
383
+ surrogateHost,
384
+ SCREENSHOT_JPEG_QUALITY,
385
+ targetW,
386
+ targetH,
387
+ opts.preferredDisplayId,
388
+ opts.autoResolve,
389
+ opts.doHide,
390
+ ),
391
+ )
392
+ },
393
+
394
+ /**
395
+ * Pre-size to `targetImageSize` output so the API transcoder's early-return
396
+ * fires — no server-side resize, `scaleCoord` stays coherent. See
397
+ * packages/desktop/computer-use-mcp/COORDINATES.md.
398
+ */
399
+ async screenshot(opts: {
400
+ allowedBundleIds: string[]
401
+ displayId?: number
402
+ }): Promise<ScreenshotResult> {
403
+ const d = cu.display.getSize(opts.displayId)
404
+ const [targetW, targetH] = computeTargetDims(
405
+ d.width,
406
+ d.height,
407
+ d.scaleFactor,
408
+ )
409
+ return drainRunLoop(() =>
410
+ cu.screenshot.captureExcluding(
411
+ withoutTerminal(opts.allowedBundleIds),
412
+ SCREENSHOT_JPEG_QUALITY,
413
+ targetW,
414
+ targetH,
415
+ opts.displayId,
416
+ ),
417
+ )
418
+ },
419
+
420
+ async zoom(
421
+ regionLogical: { x: number; y: number; w: number; h: number },
422
+ allowedBundleIds: string[],
423
+ displayId?: number,
424
+ ): Promise<{ base64: string; width: number; height: number }> {
425
+ const d = cu.display.getSize(displayId)
426
+ const [outW, outH] = computeTargetDims(
427
+ regionLogical.w,
428
+ regionLogical.h,
429
+ d.scaleFactor,
430
+ )
431
+ return drainRunLoop(() =>
432
+ cu.screenshot.captureRegion(
433
+ withoutTerminal(allowedBundleIds),
434
+ regionLogical.x,
435
+ regionLogical.y,
436
+ regionLogical.w,
437
+ regionLogical.h,
438
+ outW,
439
+ outH,
440
+ SCREENSHOT_JPEG_QUALITY,
441
+ displayId,
442
+ ),
443
+ )
444
+ },
445
+
446
+ // ── Keyboard ─────────────────────────────────────────────────────────
447
+
448
+ /**
449
+ * xdotool-style sequence e.g. "ctrl+shift+a" → split on '+' and pass to
450
+ * keys(). keys() dispatches to DispatchQueue.main — drainRunLoop pumps
451
+ * CFRunLoop so it resolves. Rust's error-path cleanup (enigo_wrap.rs)
452
+ * releases modifiers on each invocation, so a mid-loop throw leaves
453
+ * nothing stuck. 8ms between iterations — 125Hz USB polling cadence.
454
+ */
455
+ async key(keySequence: string, repeat?: number): Promise<void> {
456
+ const input = requireComputerUseInput()
457
+ const parts = keySequence.split('+').filter(p => p.length > 0)
458
+ // Bare-only: the CGEventTap checks event.flags.isEmpty so ctrl+escape
459
+ // etc. pass through without aborting.
460
+ const isEsc = isBareEscape(parts)
461
+ const n = repeat ?? 1
462
+ await drainRunLoop(async () => {
463
+ for (let i = 0; i < n; i++) {
464
+ if (i > 0) {
465
+ await sleep(8)
466
+ }
467
+ if (isEsc) {
468
+ notifyExpectedEscape()
469
+ }
470
+ await input.keys(parts)
471
+ }
472
+ })
473
+ },
474
+
475
+ async holdKey(keyNames: string[], durationMs: number): Promise<void> {
476
+ const input = requireComputerUseInput()
477
+ // Press/release each wrapped in drainRunLoop; the sleep sits outside so
478
+ // durationMs isn't bounded by drainRunLoop's 30s timeout. `pressed`
479
+ // tracks which presses landed so a mid-press throw still releases
480
+ // everything that was actually pressed.
481
+ //
482
+ // `orphaned` guards against a timeout-orphan race: if the press-phase
483
+ // drainRunLoop times out while the esc-hotkey pump-retain keeps the
484
+ // pump running, the orphaned lambda would continue pushing to `pressed`
485
+ // after finally's releasePressed snapshotted the length — leaving keys
486
+ // stuck. The flag stops the lambda at the next iteration.
487
+ const pressed: string[] = []
488
+ let orphaned = false
489
+ try {
490
+ await drainRunLoop(async () => {
491
+ for (const k of keyNames) {
492
+ if (orphaned) return
493
+ // Bare Escape: notify the CGEventTap so it doesn't fire the
494
+ // abort callback for a model-synthesized press. Same as key().
495
+ if (isBareEscape([k])) {
496
+ notifyExpectedEscape()
497
+ }
498
+ await input.key(k, 'press')
499
+ pressed.push(k)
500
+ }
501
+ })
502
+ await sleep(durationMs)
503
+ } finally {
504
+ orphaned = true
505
+ await drainRunLoop(() => releasePressed(input, pressed))
506
+ }
507
+ },
508
+
509
+ async type(text: string, opts: { viaClipboard: boolean }): Promise<void> {
510
+ const input = requireComputerUseInput()
511
+ if (opts.viaClipboard) {
512
+ // keys(['command','v']) inside needs the pump.
513
+ await drainRunLoop(() => typeViaClipboard(input, text))
514
+ return
515
+ }
516
+ // `toolCalls.ts` handles the grapheme loop + 8ms sleeps and calls this
517
+ // once per grapheme. typeText doesn't dispatch to the main queue.
518
+ await input.typeText(text)
519
+ },
520
+
521
+ readClipboard: readClipboardViaPbpaste,
522
+
523
+ writeClipboard: writeClipboardViaPbcopy,
524
+
525
+ // ── Mouse ────────────────────────────────────────────────────────────
526
+
527
+ async moveMouse(x: number, y: number): Promise<void> {
528
+ await moveAndSettle(requireComputerUseInput(), x, y)
529
+ },
530
+
531
+ /**
532
+ * Move, then click. Modifiers are press/release bracketed via withModifiers
533
+ * — same pattern as Cowork. AppKit computes NSEvent.clickCount from timing
534
+ * + position proximity, so double/triple click work without setting the
535
+ * CGEvent clickState field. key() inside withModifiers needs the pump;
536
+ * the modifier-less path doesn't.
537
+ */
538
+ async click(
539
+ x: number,
540
+ y: number,
541
+ button: 'left' | 'right' | 'middle',
542
+ count: 1 | 2 | 3,
543
+ modifiers?: string[],
544
+ ): Promise<void> {
545
+ const input = requireComputerUseInput()
546
+ await moveAndSettle(input, x, y)
547
+ if (modifiers && modifiers.length > 0) {
548
+ await drainRunLoop(() =>
549
+ withModifiers(input, modifiers, () =>
550
+ input.mouseButton(button, 'click', count),
551
+ ),
552
+ )
553
+ } else {
554
+ await input.mouseButton(button, 'click', count)
555
+ }
556
+ },
557
+
558
+ async mouseDown(): Promise<void> {
559
+ await requireComputerUseInput().mouseButton('left', 'press')
560
+ },
561
+
562
+ async mouseUp(): Promise<void> {
563
+ await requireComputerUseInput().mouseButton('left', 'release')
564
+ },
565
+
566
+ async getCursorPosition(): Promise<{ x: number; y: number }> {
567
+ return requireComputerUseInput().mouseLocation()
568
+ },
569
+
570
+ /**
571
+ * `from === undefined` → drag from current cursor (training's
572
+ * left_click_drag with start_coordinate omitted). Inner `finally`: the
573
+ * button is ALWAYS released even if the move throws — otherwise the
574
+ * user's left button is stuck-pressed until they physically click.
575
+ * 50ms sleep after press: enigo's move_mouse reads NSEvent.pressedMouseButtons
576
+ * to decide .leftMouseDragged vs .mouseMoved; the synthetic leftMouseDown
577
+ * needs a HID-tap round-trip to show up there.
578
+ */
579
+ async drag(
580
+ from: { x: number; y: number } | undefined,
581
+ to: { x: number; y: number },
582
+ ): Promise<void> {
583
+ const input = requireComputerUseInput()
584
+ if (from !== undefined) {
585
+ await moveAndSettle(input, from.x, from.y)
586
+ }
587
+ await input.mouseButton('left', 'press')
588
+ await sleep(MOVE_SETTLE_MS)
589
+ try {
590
+ await animatedMove(input, to.x, to.y, getMouseAnimationEnabled())
591
+ } finally {
592
+ await input.mouseButton('left', 'release')
593
+ }
594
+ },
595
+
596
+ /**
597
+ * Move first, then scroll each axis. Vertical-first — it's the common
598
+ * axis; a horizontal failure shouldn't lose the vertical.
599
+ */
600
+ async scroll(x: number, y: number, dx: number, dy: number): Promise<void> {
601
+ const input = requireComputerUseInput()
602
+ await moveAndSettle(input, x, y)
603
+ if (dy !== 0) {
604
+ await input.mouseScroll(dy, 'vertical')
605
+ }
606
+ if (dx !== 0) {
607
+ await input.mouseScroll(dx, 'horizontal')
608
+ }
609
+ },
610
+
611
+ // ── App management ───────────────────────────────────────────────────
612
+
613
+ async getFrontmostApp(): Promise<FrontmostApp | null> {
614
+ const info = requireComputerUseInput().getFrontmostAppInfo()
615
+ if (!info || !info.bundleId) return null
616
+ return { bundleId: info.bundleId, displayName: info.appName }
617
+ },
618
+
619
+ async appUnderPoint(
620
+ x: number,
621
+ y: number,
622
+ ): Promise<{ bundleId: string; displayName: string } | null> {
623
+ return cu.apps.appUnderPoint(x, y)
624
+ },
625
+
626
+ async listInstalledApps(): Promise<InstalledApp[]> {
627
+ // `ComputerUseInstalledApp` is `{bundleId, displayName, path}`.
628
+ // `InstalledApp` adds optional `iconDataUrl` — left unpopulated;
629
+ // the approval dialog fetches lazily via getAppIcon() below.
630
+ return drainRunLoop(() => cu.apps.listInstalled())
631
+ },
632
+
633
+ async getAppIcon(path: string): Promise<string | undefined> {
634
+ return cu.apps.iconDataUrl(path) ?? undefined
635
+ },
636
+
637
+ async listRunningApps(): Promise<RunningApp[]> {
638
+ return cu.apps.listRunning()
639
+ },
640
+
641
+ async openApp(bundleId: string): Promise<void> {
642
+ await cu.apps.open(bundleId)
643
+ },
644
+ }
645
+ }
646
+
647
+ /**
648
+ * Module-level export (not on the executor object) — called at turn-end from
649
+ * `stopHooks.ts` / `query.ts`, outside the executor lifecycle. Fire-and-forget
650
+ * at the call site; the caller `.catch()`es.
651
+ */
652
+ export async function unhideComputerUseApps(
653
+ bundleIds: readonly string[],
654
+ ): Promise<void> {
655
+ if (bundleIds.length === 0) return
656
+ const cu = requireComputerUseSwift()
657
+ await cu.apps.unhide([...bundleIds])
658
+ }