@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,100 @@
1
+ import type { ContentBlockParam } from '@anthropic-ai/sdk/resources'
2
+ import { randomUUID } from 'crypto'
3
+ import { setPromptId } from 'src/bootstrap/state.js'
4
+ import type {
5
+ AttachmentMessage,
6
+ SystemMessage,
7
+ UserMessage,
8
+ } from 'src/types/message.js'
9
+ import { logEvent } from '../../services/analytics/index.js'
10
+ import type { PermissionMode } from '../../types/permissions.js'
11
+ import { createUserMessage } from '../messages.js'
12
+ import { logOTelEvent, redactIfDisabled } from '../telemetry/events.js'
13
+ import { startInteractionSpan } from '../telemetry/sessionTracing.js'
14
+ import {
15
+ matchesKeepGoingKeyword,
16
+ matchesNegativeKeyword,
17
+ } from '../userPromptKeywords.js'
18
+
19
+ export function processTextPrompt(
20
+ input: string | Array<ContentBlockParam>,
21
+ imageContentBlocks: ContentBlockParam[],
22
+ imagePasteIds: number[],
23
+ attachmentMessages: AttachmentMessage[],
24
+ uuid?: string,
25
+ permissionMode?: PermissionMode,
26
+ isMeta?: boolean,
27
+ ): {
28
+ messages: (UserMessage | AttachmentMessage | SystemMessage)[]
29
+ shouldQuery: boolean
30
+ } {
31
+ const promptId = randomUUID()
32
+ setPromptId(promptId)
33
+
34
+ const userPromptText =
35
+ typeof input === 'string'
36
+ ? input
37
+ : input.find(block => block.type === 'text')?.text || ''
38
+ startInteractionSpan(userPromptText)
39
+
40
+ // Emit user_prompt OTEL event for both string (CLI) and array (SDK/VS Code)
41
+ // input shapes. Previously gated on `typeof input === 'string'`, so VS Code
42
+ // sessions never emitted user_prompt (anthropics/claude-code#33301).
43
+ // For array input, use the LAST text block: createUserContent pushes the
44
+ // user's message last (after any <ide_selection>/attachment context blocks),
45
+ // so .findLast gets the actual prompt. userPromptText (first block) is kept
46
+ // unchanged for startInteractionSpan to preserve existing span attributes.
47
+ const otelPromptText =
48
+ typeof input === 'string'
49
+ ? input
50
+ : input.findLast(block => block.type === 'text')?.text || ''
51
+ if (otelPromptText) {
52
+ void logOTelEvent('user_prompt', {
53
+ prompt_length: String(otelPromptText.length),
54
+ prompt: redactIfDisabled(otelPromptText),
55
+ 'prompt.id': promptId,
56
+ })
57
+ }
58
+
59
+ const isNegative = matchesNegativeKeyword(userPromptText)
60
+ const isKeepGoing = matchesKeepGoingKeyword(userPromptText)
61
+ logEvent('tengu_input_prompt', {
62
+ is_negative: isNegative,
63
+ is_keep_going: isKeepGoing,
64
+ })
65
+
66
+ // If we have pasted images, create a message with image content
67
+ if (imageContentBlocks.length > 0) {
68
+ // Build content: text first, then images below
69
+ const textContent =
70
+ typeof input === 'string'
71
+ ? input.trim()
72
+ ? [{ type: 'text' as const, text: input }]
73
+ : []
74
+ : input
75
+ const userMessage = createUserMessage({
76
+ content: [...textContent, ...imageContentBlocks],
77
+ uuid: uuid,
78
+ imagePasteIds: imagePasteIds.length > 0 ? imagePasteIds : undefined,
79
+ permissionMode,
80
+ isMeta: isMeta || undefined,
81
+ })
82
+
83
+ return {
84
+ messages: [userMessage, ...attachmentMessages],
85
+ shouldQuery: true,
86
+ }
87
+ }
88
+
89
+ const userMessage = createUserMessage({
90
+ content: input,
91
+ uuid,
92
+ permissionMode,
93
+ isMeta: isMeta || undefined,
94
+ })
95
+
96
+ return {
97
+ messages: [userMessage, ...attachmentMessages],
98
+ shouldQuery: true,
99
+ }
100
+ }
@@ -0,0 +1,605 @@
1
+ import { feature } from 'bun:bundle'
2
+ import type {
3
+ Base64ImageSource,
4
+ ContentBlockParam,
5
+ ImageBlockParam,
6
+ } from '@anthropic-ai/sdk/resources/messages.mjs'
7
+ import { randomUUID } from 'crypto'
8
+ import type { QuerySource } from 'src/constants/querySource.js'
9
+ import { logEvent } from 'src/services/analytics/index.js'
10
+ import { getContentText } from 'src/utils/messages.js'
11
+ import {
12
+ findCommand,
13
+ getCommandName,
14
+ isBridgeSafeCommand,
15
+ type LocalJSXCommandContext,
16
+ } from '../../commands.js'
17
+ import type { CanUseToolFn } from '../../hooks/useCanUseTool.js'
18
+ import type { IDESelection } from '../../hooks/useIdeSelection.js'
19
+ import type { SetToolJSXFn, ToolUseContext } from '../../Tool.js'
20
+ import type {
21
+ AssistantMessage,
22
+ AttachmentMessage,
23
+ Message,
24
+ ProgressMessage,
25
+ SystemMessage,
26
+ UserMessage,
27
+ } from '../../types/message.js'
28
+ import type { PermissionMode } from '../../types/permissions.js'
29
+ import {
30
+ isValidImagePaste,
31
+ type PromptInputMode,
32
+ } from '../../types/textInputTypes.js'
33
+ import {
34
+ type AgentMentionAttachment,
35
+ createAttachmentMessage,
36
+ getAttachmentMessages,
37
+ } from '../attachments.js'
38
+ import type { PastedContent } from '../config.js'
39
+ import type { EffortValue } from '../effort.js'
40
+ import { toArray } from '../generators.js'
41
+ import {
42
+ executeUserPromptSubmitHooks,
43
+ getUserPromptSubmitHookBlockingMessage,
44
+ } from '../hooks.js'
45
+ import {
46
+ createImageMetadataText,
47
+ maybeResizeAndDownsampleImageBlock,
48
+ } from '../imageResizer.js'
49
+ import { storeImages } from '../imageStore.js'
50
+ import {
51
+ createCommandInputMessage,
52
+ createSystemMessage,
53
+ createUserMessage,
54
+ } from '../messages.js'
55
+ import { queryCheckpoint } from '../queryProfiler.js'
56
+ import { parseSlashCommand } from '../slashCommandParsing.js'
57
+ import {
58
+ hasUltraplanKeyword,
59
+ replaceUltraplanKeyword,
60
+ } from '../ultraplan/keyword.js'
61
+ import { processTextPrompt } from './processTextPrompt.js'
62
+ export type ProcessUserInputContext = ToolUseContext & LocalJSXCommandContext
63
+
64
+ export type ProcessUserInputBaseResult = {
65
+ messages: (
66
+ | UserMessage
67
+ | AssistantMessage
68
+ | AttachmentMessage
69
+ | SystemMessage
70
+ | ProgressMessage
71
+ )[]
72
+ shouldQuery: boolean
73
+ allowedTools?: string[]
74
+ model?: string
75
+ effort?: EffortValue
76
+ // Output text for non-interactive mode (e.g., forked commands)
77
+ // When set, this is used as the result in -p mode instead of empty string
78
+ resultText?: string
79
+ // When set, prefills or submits the next input after command completes
80
+ // Used by /discover to chain into the selected feature's command
81
+ nextInput?: string
82
+ submitNextInput?: boolean
83
+ }
84
+
85
+ export async function processUserInput({
86
+ input,
87
+ preExpansionInput,
88
+ mode,
89
+ setToolJSX,
90
+ context,
91
+ pastedContents,
92
+ ideSelection,
93
+ messages,
94
+ setUserInputOnProcessing,
95
+ uuid,
96
+ isAlreadyProcessing,
97
+ querySource,
98
+ canUseTool,
99
+ skipSlashCommands,
100
+ bridgeOrigin,
101
+ isMeta,
102
+ skipAttachments,
103
+ }: {
104
+ input: string | Array<ContentBlockParam>
105
+ /**
106
+ * Input before [Pasted text #N] expansion. Used for ultraplan keyword
107
+ * detection so pasted content containing the word cannot trigger. Falls
108
+ * back to the string `input` when unset.
109
+ */
110
+ preExpansionInput?: string
111
+ mode: PromptInputMode
112
+ setToolJSX: SetToolJSXFn
113
+ context: ProcessUserInputContext
114
+ pastedContents?: Record<number, PastedContent>
115
+ ideSelection?: IDESelection
116
+ messages?: Message[]
117
+ setUserInputOnProcessing?: (prompt?: string) => void
118
+ uuid?: string
119
+ isAlreadyProcessing?: boolean
120
+ querySource?: QuerySource
121
+ canUseTool?: CanUseToolFn
122
+ /**
123
+ * When true, input starting with `/` is treated as plain text.
124
+ * Used for remotely-received messages (bridge/CCR) that should not
125
+ * trigger local slash commands or skills.
126
+ */
127
+ skipSlashCommands?: boolean
128
+ /**
129
+ * When true, slash commands matching isBridgeSafeCommand() execute even
130
+ * though skipSlashCommands is set. See QueuedCommand.bridgeOrigin.
131
+ */
132
+ bridgeOrigin?: boolean
133
+ /**
134
+ * When true, the resulting UserMessage gets `isMeta: true` (user-hidden,
135
+ * model-visible). Propagated from `QueuedCommand.isMeta` for queued
136
+ * system-generated prompts.
137
+ */
138
+ isMeta?: boolean
139
+ skipAttachments?: boolean
140
+ }): Promise<ProcessUserInputBaseResult> {
141
+ const inputString = typeof input === 'string' ? input : null
142
+ // Immediately show the user input prompt while we are still processing the input.
143
+ // Skip for isMeta (system-generated prompts like scheduled tasks) — those
144
+ // should run invisibly.
145
+ if (mode === 'prompt' && inputString !== null && !isMeta) {
146
+ setUserInputOnProcessing?.(inputString)
147
+ }
148
+
149
+ queryCheckpoint('query_process_user_input_base_start')
150
+
151
+ const appState = context.getAppState()
152
+
153
+ const result = await processUserInputBase(
154
+ input,
155
+ mode,
156
+ setToolJSX,
157
+ context,
158
+ pastedContents,
159
+ ideSelection,
160
+ messages,
161
+ uuid,
162
+ isAlreadyProcessing,
163
+ querySource,
164
+ canUseTool,
165
+ appState.toolPermissionContext.mode,
166
+ skipSlashCommands,
167
+ bridgeOrigin,
168
+ isMeta,
169
+ skipAttachments,
170
+ preExpansionInput,
171
+ )
172
+ queryCheckpoint('query_process_user_input_base_end')
173
+
174
+ if (!result.shouldQuery) {
175
+ return result
176
+ }
177
+
178
+ // Execute UserPromptSubmit hooks and handle blocking
179
+ queryCheckpoint('query_hooks_start')
180
+ const inputMessage = getContentText(input) || ''
181
+
182
+ for await (const hookResult of executeUserPromptSubmitHooks(
183
+ inputMessage,
184
+ appState.toolPermissionContext.mode,
185
+ context,
186
+ context.requestPrompt,
187
+ )) {
188
+ // We only care about the result
189
+ if (hookResult.message?.type === 'progress') {
190
+ continue
191
+ }
192
+
193
+ // Return only a system-level error message, erasing the original user input
194
+ if (hookResult.blockingError) {
195
+ const blockingMessage = getUserPromptSubmitHookBlockingMessage(
196
+ hookResult.blockingError,
197
+ )
198
+ return {
199
+ messages: [
200
+ // TODO: Make this an attachment message
201
+ createSystemMessage(
202
+ `${blockingMessage}\n\nOriginal prompt: ${input}`,
203
+ 'warning',
204
+ ),
205
+ ],
206
+ shouldQuery: false,
207
+ allowedTools: result.allowedTools,
208
+ }
209
+ }
210
+
211
+ // If preventContinuation is set, stop processing but keep the original
212
+ // prompt in context.
213
+ if (hookResult.preventContinuation) {
214
+ const message = hookResult.stopReason
215
+ ? `Operation stopped by hook: ${hookResult.stopReason}`
216
+ : 'Operation stopped by hook'
217
+ result.messages.push(
218
+ createUserMessage({
219
+ content: message,
220
+ }),
221
+ )
222
+ result.shouldQuery = false
223
+ return result
224
+ }
225
+
226
+ // Collect additional contexts
227
+ if (
228
+ hookResult.additionalContexts &&
229
+ hookResult.additionalContexts.length > 0
230
+ ) {
231
+ result.messages.push(
232
+ createAttachmentMessage({
233
+ type: 'hook_additional_context',
234
+ content: hookResult.additionalContexts.map(applyTruncation),
235
+ hookName: 'UserPromptSubmit',
236
+ toolUseID: `hook-${randomUUID()}`,
237
+ hookEvent: 'UserPromptSubmit',
238
+ }),
239
+ )
240
+ }
241
+
242
+ // TODO: Clean this up
243
+ if (hookResult.message) {
244
+ switch (hookResult.message.attachment.type) {
245
+ case 'hook_success':
246
+ if (!hookResult.message.attachment.content) {
247
+ // Skip if there is no content
248
+ break
249
+ }
250
+ result.messages.push({
251
+ ...hookResult.message,
252
+ attachment: {
253
+ ...hookResult.message.attachment,
254
+ content: applyTruncation(hookResult.message.attachment.content),
255
+ },
256
+ })
257
+ break
258
+ default:
259
+ result.messages.push(hookResult.message)
260
+ break
261
+ }
262
+ }
263
+ }
264
+ queryCheckpoint('query_hooks_end')
265
+
266
+ // Happy path: onQuery will clear userInputOnProcessing via startTransition
267
+ // so it resolves in the same frame as deferredMessages (no flicker gap).
268
+ // Error paths are handled by handlePromptSubmit's finally block.
269
+ return result
270
+ }
271
+
272
+ const MAX_HOOK_OUTPUT_LENGTH = 10000
273
+
274
+ function applyTruncation(content: string): string {
275
+ if (content.length > MAX_HOOK_OUTPUT_LENGTH) {
276
+ return `${content.substring(0, MAX_HOOK_OUTPUT_LENGTH)}… [output truncated - exceeded ${MAX_HOOK_OUTPUT_LENGTH} characters]`
277
+ }
278
+ return content
279
+ }
280
+
281
+ async function processUserInputBase(
282
+ input: string | Array<ContentBlockParam>,
283
+ mode: PromptInputMode,
284
+ setToolJSX: SetToolJSXFn,
285
+ context: ProcessUserInputContext,
286
+ pastedContents?: Record<number, PastedContent>,
287
+ ideSelection?: IDESelection,
288
+ messages?: Message[],
289
+ uuid?: string,
290
+ isAlreadyProcessing?: boolean,
291
+ querySource?: QuerySource,
292
+ canUseTool?: CanUseToolFn,
293
+ permissionMode?: PermissionMode,
294
+ skipSlashCommands?: boolean,
295
+ bridgeOrigin?: boolean,
296
+ isMeta?: boolean,
297
+ skipAttachments?: boolean,
298
+ preExpansionInput?: string,
299
+ ): Promise<ProcessUserInputBaseResult> {
300
+ let inputString: string | null = null
301
+ let precedingInputBlocks: ContentBlockParam[] = []
302
+
303
+ // Collect image metadata texts for isMeta message
304
+ const imageMetadataTexts: string[] = []
305
+
306
+ // Normalized view of `input` with image blocks resized. For string input
307
+ // this is just `input`; for array input it's the processed blocks. We pass
308
+ // this (not raw `input`) to processTextPrompt so resized/normalized image
309
+ // blocks actually reach the API — otherwise the resize work above is
310
+ // discarded for the regular prompt path. Also normalizes bridge inputs
311
+ // where iOS may send `mediaType` instead of `media_type` (mobile-apps#5825).
312
+ let normalizedInput: string | ContentBlockParam[] = input
313
+
314
+ if (typeof input === 'string') {
315
+ inputString = input
316
+ } else if (input.length > 0) {
317
+ queryCheckpoint('query_image_processing_start')
318
+ const processedBlocks: ContentBlockParam[] = []
319
+ for (const block of input) {
320
+ if (block.type === 'image') {
321
+ const resized = await maybeResizeAndDownsampleImageBlock(block)
322
+ // Collect image metadata for isMeta message
323
+ if (resized.dimensions) {
324
+ const metadataText = createImageMetadataText(resized.dimensions)
325
+ if (metadataText) {
326
+ imageMetadataTexts.push(metadataText)
327
+ }
328
+ }
329
+ processedBlocks.push(resized.block)
330
+ } else {
331
+ processedBlocks.push(block)
332
+ }
333
+ }
334
+ normalizedInput = processedBlocks
335
+ queryCheckpoint('query_image_processing_end')
336
+ // Extract the input string from the last content block if it is text,
337
+ // and keep track of the preceding content blocks
338
+ const lastBlock = processedBlocks[processedBlocks.length - 1]
339
+ if (lastBlock?.type === 'text') {
340
+ inputString = lastBlock.text
341
+ precedingInputBlocks = processedBlocks.slice(0, -1)
342
+ } else {
343
+ precedingInputBlocks = processedBlocks
344
+ }
345
+ }
346
+
347
+ if (inputString === null && mode !== 'prompt') {
348
+ throw new Error(`Mode: ${mode} requires a string input.`)
349
+ }
350
+
351
+ // Extract and convert image content to content blocks early
352
+ // Keep track of IDs in order for message storage
353
+ const imageContents = pastedContents
354
+ ? Object.values(pastedContents).filter(isValidImagePaste)
355
+ : []
356
+ const imagePasteIds = imageContents.map(img => img.id)
357
+
358
+ // Store images to disk so Claude can reference the path in context
359
+ // (for manipulation with CLI tools, uploading to PRs, etc.)
360
+ const storedImagePaths = pastedContents
361
+ ? await storeImages(pastedContents)
362
+ : new Map<number, string>()
363
+
364
+ // Resize pasted images to ensure they fit within API limits (parallel processing)
365
+ queryCheckpoint('query_pasted_image_processing_start')
366
+ const imageProcessingResults = await Promise.all(
367
+ imageContents.map(async pastedImage => {
368
+ const imageBlock: ImageBlockParam = {
369
+ type: 'image',
370
+ source: {
371
+ type: 'base64',
372
+ media_type: (pastedImage.mediaType ||
373
+ 'image/png') as Base64ImageSource['media_type'],
374
+ data: pastedImage.content,
375
+ },
376
+ }
377
+ logEvent('tengu_pasted_image_resize_attempt', {
378
+ original_size_bytes: pastedImage.content.length,
379
+ })
380
+ const resized = await maybeResizeAndDownsampleImageBlock(imageBlock)
381
+ return {
382
+ resized,
383
+ originalDimensions: pastedImage.dimensions,
384
+ sourcePath:
385
+ pastedImage.sourcePath ?? storedImagePaths.get(pastedImage.id),
386
+ }
387
+ }),
388
+ )
389
+ // Collect results preserving order
390
+ const imageContentBlocks: ContentBlockParam[] = []
391
+ for (const {
392
+ resized,
393
+ originalDimensions,
394
+ sourcePath,
395
+ } of imageProcessingResults) {
396
+ // Collect image metadata for isMeta message (prefer resized dimensions)
397
+ if (resized.dimensions) {
398
+ const metadataText = createImageMetadataText(
399
+ resized.dimensions,
400
+ sourcePath,
401
+ )
402
+ if (metadataText) {
403
+ imageMetadataTexts.push(metadataText)
404
+ }
405
+ } else if (originalDimensions) {
406
+ // Fall back to original dimensions if resize didn't provide them
407
+ const metadataText = createImageMetadataText(
408
+ originalDimensions,
409
+ sourcePath,
410
+ )
411
+ if (metadataText) {
412
+ imageMetadataTexts.push(metadataText)
413
+ }
414
+ } else if (sourcePath) {
415
+ // If we have a source path but no dimensions, still add source info
416
+ imageMetadataTexts.push(`[Image source: ${sourcePath}]`)
417
+ }
418
+ imageContentBlocks.push(resized.block)
419
+ }
420
+ queryCheckpoint('query_pasted_image_processing_end')
421
+
422
+ // Bridge-safe slash command override: mobile/web clients set bridgeOrigin
423
+ // with skipSlashCommands still true (defense-in-depth against exit words and
424
+ // immediate-command fast paths). Resolve the command here — if it passes
425
+ // isBridgeSafeCommand, clear the skip so the gate below opens. If it's a
426
+ // known-but-unsafe command (local-jsx UI or terminal-only), short-circuit
427
+ // with a helpful message rather than letting the model see raw "/config".
428
+ let effectiveSkipSlash = skipSlashCommands
429
+ if (bridgeOrigin && inputString !== null && inputString.startsWith('/')) {
430
+ const parsed = parseSlashCommand(inputString)
431
+ const cmd = parsed
432
+ ? findCommand(parsed.commandName, context.options.commands)
433
+ : undefined
434
+ if (cmd) {
435
+ if (isBridgeSafeCommand(cmd)) {
436
+ effectiveSkipSlash = false
437
+ } else {
438
+ const msg = `/${getCommandName(cmd)} isn't available over Remote Control.`
439
+ return {
440
+ messages: [
441
+ createUserMessage({ content: inputString, uuid }),
442
+ createCommandInputMessage(
443
+ `<local-command-stdout>${msg}</local-command-stdout>`,
444
+ ),
445
+ ],
446
+ shouldQuery: false,
447
+ resultText: msg,
448
+ }
449
+ }
450
+ }
451
+ // Unknown /foo or unparseable — fall through to plain text, same as
452
+ // pre-#19134. A mobile user typing "/shrug" shouldn't see "Unknown skill".
453
+ }
454
+
455
+ // Ultraplan keyword — route through /ultraplan. Detect on the
456
+ // pre-expansion input so pasted content containing the word cannot
457
+ // trigger a CCR session; replace with "plan" in the expanded input so
458
+ // the CCR prompt receives paste contents and stays grammatical. See
459
+ // keyword.ts for the quote/path exclusions. Interactive prompt mode +
460
+ // non-slash-prefixed only:
461
+ // headless/print mode filters local-jsx commands out of context.options,
462
+ // so routing to /ultraplan there yields "Unknown skill" — and there's no
463
+ // rainbow animation in print mode anyway.
464
+ // Runs before attachment extraction so this path matches the slash-command
465
+ // path below (no await between setUserInputOnProcessing and setAppState —
466
+ // React batches both into one render, no flash).
467
+ if (
468
+ feature('ULTRAPLAN') &&
469
+ mode === 'prompt' &&
470
+ !context.options.isNonInteractiveSession &&
471
+ inputString !== null &&
472
+ !effectiveSkipSlash &&
473
+ !inputString.startsWith('/') &&
474
+ !context.getAppState().ultraplanSessionUrl &&
475
+ !context.getAppState().ultraplanLaunching &&
476
+ hasUltraplanKeyword(preExpansionInput ?? inputString)
477
+ ) {
478
+ logEvent('tengu_ultraplan_keyword', {})
479
+ const rewritten = replaceUltraplanKeyword(inputString).trim()
480
+ const { processSlashCommand } = await import('./processSlashCommand.js')
481
+ const slashResult = await processSlashCommand(
482
+ `/ultraplan ${rewritten}`,
483
+ precedingInputBlocks,
484
+ imageContentBlocks,
485
+ [],
486
+ context,
487
+ setToolJSX,
488
+ uuid,
489
+ isAlreadyProcessing,
490
+ canUseTool,
491
+ )
492
+ return addImageMetadataMessage(slashResult, imageMetadataTexts)
493
+ }
494
+
495
+ // For slash commands, attachments will be extracted within getMessagesForSlashCommand
496
+ const shouldExtractAttachments =
497
+ !skipAttachments &&
498
+ inputString !== null &&
499
+ (mode !== 'prompt' || effectiveSkipSlash || !inputString.startsWith('/'))
500
+
501
+ queryCheckpoint('query_attachment_loading_start')
502
+ const attachmentMessages = shouldExtractAttachments
503
+ ? await toArray(
504
+ getAttachmentMessages(
505
+ inputString,
506
+ context,
507
+ ideSelection ?? null,
508
+ [], // queuedCommands - handled by query.ts for mid-turn attachments
509
+ messages,
510
+ querySource,
511
+ ),
512
+ )
513
+ : []
514
+ queryCheckpoint('query_attachment_loading_end')
515
+
516
+ // Bash commands
517
+ if (inputString !== null && mode === 'bash') {
518
+ const { processBashCommand } = await import('./processBashCommand.js')
519
+ return addImageMetadataMessage(
520
+ await processBashCommand(
521
+ inputString,
522
+ precedingInputBlocks,
523
+ attachmentMessages,
524
+ context,
525
+ setToolJSX,
526
+ ),
527
+ imageMetadataTexts,
528
+ )
529
+ }
530
+
531
+ // Slash commands
532
+ // Skip for remote bridge messages — input from CCR clients is plain text
533
+ if (
534
+ inputString !== null &&
535
+ !effectiveSkipSlash &&
536
+ inputString.startsWith('/')
537
+ ) {
538
+ const { processSlashCommand } = await import('./processSlashCommand.js')
539
+ const slashResult = await processSlashCommand(
540
+ inputString,
541
+ precedingInputBlocks,
542
+ imageContentBlocks,
543
+ attachmentMessages,
544
+ context,
545
+ setToolJSX,
546
+ uuid,
547
+ isAlreadyProcessing,
548
+ canUseTool,
549
+ )
550
+ return addImageMetadataMessage(slashResult, imageMetadataTexts)
551
+ }
552
+
553
+ // Log agent mention queries for analysis
554
+ if (inputString !== null && mode === 'prompt') {
555
+ const trimmedInput = inputString.trim()
556
+
557
+ const agentMention = attachmentMessages.find(
558
+ (m): m is AttachmentMessage<AgentMentionAttachment> =>
559
+ m.attachment.type === 'agent_mention',
560
+ )
561
+
562
+ if (agentMention) {
563
+ const agentMentionString = `@agent-${agentMention.attachment.agentType}`
564
+ const isSubagentOnly = trimmedInput === agentMentionString
565
+ const isPrefix =
566
+ trimmedInput.startsWith(agentMentionString) && !isSubagentOnly
567
+
568
+ // Log whenever users use @agent-<name> syntax
569
+ logEvent('tengu_subagent_at_mention', {
570
+ is_subagent_only: isSubagentOnly,
571
+ is_prefix: isPrefix,
572
+ })
573
+ }
574
+ }
575
+
576
+ // Regular user prompt
577
+ return addImageMetadataMessage(
578
+ processTextPrompt(
579
+ normalizedInput,
580
+ imageContentBlocks,
581
+ imagePasteIds,
582
+ attachmentMessages,
583
+ uuid,
584
+ permissionMode,
585
+ isMeta,
586
+ ),
587
+ imageMetadataTexts,
588
+ )
589
+ }
590
+
591
+ // Adds image metadata texts as isMeta message to result
592
+ function addImageMetadataMessage(
593
+ result: ProcessUserInputBaseResult,
594
+ imageMetadataTexts: string[],
595
+ ): ProcessUserInputBaseResult {
596
+ if (imageMetadataTexts.length > 0) {
597
+ result.messages.push(
598
+ createUserMessage({
599
+ content: imageMetadataTexts.map(text => ({ type: 'text', text })),
600
+ isMeta: true,
601
+ }),
602
+ )
603
+ }
604
+ return result
605
+ }