@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,177 @@
1
+ import React from 'react'
2
+ import { Text } from '../../ink.js'
3
+ import { z } from 'zod/v4'
4
+ import type { ValidationResult } from '../../Tool.js'
5
+ import { buildTool, type ToolDef } from '../../Tool.js'
6
+ import { xmemClient } from '../../utils/xmem.js'
7
+ import { getInitialSettings } from '../../utils/settings/settings.js'
8
+ import { lazySchema } from '../../utils/lazySchema.js'
9
+ import { XMEM_RETRIEVE_TOOL_NAME, DESCRIPTION } from './prompt.js'
10
+
11
+ const inputSchema = lazySchema(() =>
12
+ z.strictObject({
13
+ query: z
14
+ .string()
15
+ .describe('The search query describing what information you need from memory'),
16
+ max_results: z
17
+ .number()
18
+ .optional()
19
+ .describe('Maximum number of memory entries to retrieve (default: 3)'),
20
+ }),
21
+ )
22
+ type InputSchema = ReturnType<typeof inputSchema>
23
+
24
+ const outputSchema = lazySchema(() =>
25
+ z.object({
26
+ success: z.boolean().describe('Whether the retrieval was successful'),
27
+ memories: z
28
+ .array(
29
+ z.object({
30
+ content: z.string().describe('The retrieved memory content'),
31
+ relevance: z.number().optional().describe('Relevance score if available'),
32
+ }),
33
+ )
34
+ .describe('Retrieved memories relevant to the query'),
35
+ answer: z
36
+ .string()
37
+ .optional()
38
+ .describe('Consolidated answer from retrieved memories'),
39
+ message: z.string().describe('Status message'),
40
+ }),
41
+ )
42
+ type OutputSchema = ReturnType<typeof outputSchema>
43
+
44
+ export type Output = z.infer<OutputSchema>
45
+
46
+ export const XMemRetrieveTool = buildTool({
47
+ name: XMEM_RETRIEVE_TOOL_NAME,
48
+ searchHint: 'retrieve relevant memories from long-term storage',
49
+ maxResultSizeChars: 50_000,
50
+ async description() {
51
+ return DESCRIPTION
52
+ },
53
+ userFacingName() {
54
+ return 'XMem Retrieve'
55
+ },
56
+ getToolUseSummary(input) {
57
+ return `Retrieving memories: ${input.query.substring(0, 50)}...`
58
+ },
59
+ getActivityDescription(input) {
60
+ return `Retrieving memories: ${input.query.substring(0, 40)}...`
61
+ },
62
+ get inputSchema(): InputSchema {
63
+ return inputSchema()
64
+ },
65
+ get outputSchema(): OutputSchema {
66
+ return outputSchema()
67
+ },
68
+ isConcurrencySafe() {
69
+ return true
70
+ },
71
+ isReadOnly() {
72
+ return true
73
+ },
74
+ toAutoClassifierInput(input) {
75
+ return `Retrieve memory: ${input.query}`
76
+ },
77
+ isSearchOrReadCommand() {
78
+ return { isSearch: true, isRead: true }
79
+ },
80
+ async validateInput(): Promise<ValidationResult> {
81
+ // XMem is always enabled by default now
82
+ return { result: true }
83
+ },
84
+ async prompt() {
85
+ return DESCRIPTION
86
+ },
87
+ renderToolUseMessage(input) {
88
+ return `Retrieving from XMem memory: "${input.query.substring(0, 60)}${input.query.length > 60 ? '...' : ''}"`
89
+ },
90
+ renderToolUseErrorMessage() {
91
+ return React.createElement(Text, null, `Failed to retrieve memories`);
92
+ },
93
+ renderToolResultMessage(output) {
94
+ if (!output.success) {
95
+ return React.createElement(Text, { color: 'error' }, `❌ Failed: ${output.message}`);
96
+ }
97
+ if (output.memories.length === 0) {
98
+ return React.createElement(Text, null, `No relevant memories found`);
99
+ }
100
+ return React.createElement(Text, null, `✅ Found ${output.memories.length} relevant memory${output.memories.length > 1 ? 'ies' : ''}`);
101
+ },
102
+ async call(input) {
103
+ console.error(`[XMem Retrieve] Query: "${input.query.substring(0, 50)}..."`)
104
+
105
+ const start = Date.now()
106
+
107
+ try {
108
+ const result = await xmemClient.retrieve({
109
+ query: input.query,
110
+ user_id: 'default_user',
111
+ })
112
+
113
+ const duration = Date.now() - start
114
+ console.error(`[XMem Retrieve] ✅ Retrieved in ${duration}ms`)
115
+ console.error(`[XMem Retrieve] Answer: ${result.answer.substring(0, 100)}${result.answer.length > 100 ? '...' : ''}`)
116
+
117
+ // Parse the answer into memory entries
118
+ const memories = result.answer
119
+ ? [{ content: result.answer, relevance: 1.0 }]
120
+ : []
121
+
122
+ return {
123
+ data: {
124
+ success: true,
125
+ memories,
126
+ answer: result.answer,
127
+ message: `Retrieved ${memories.length} relevant memories`,
128
+ },
129
+ }
130
+ } catch (error) {
131
+ const errorMsg = error instanceof Error ? error.message : String(error)
132
+ console.error(`[XMem Retrieve] ❌ Failed: ${errorMsg}`)
133
+
134
+ return {
135
+ data: {
136
+ success: false,
137
+ memories: [],
138
+ message: `Failed to retrieve memories: ${errorMsg}`,
139
+ },
140
+ }
141
+ }
142
+ },
143
+ mapToolResultToToolResultBlockParam(output, toolUseID) {
144
+ if (!output.success) {
145
+ return {
146
+ tool_use_id: toolUseID,
147
+ type: 'tool_result',
148
+ content: `Error: ${output.message}`,
149
+ is_error: true,
150
+ }
151
+ }
152
+
153
+ if (output.memories.length === 0) {
154
+ return {
155
+ tool_use_id: toolUseID,
156
+ type: 'tool_result',
157
+ content: 'No relevant memories found for this query.',
158
+ }
159
+ }
160
+
161
+ const content = [
162
+ `Retrieved ${output.memories.length} relevant memory${output.memories.length > 1 ? 'ies' : ''}:`,
163
+ '',
164
+ ...output.memories.map((m, i) =>
165
+ `[${i + 1}] ${m.content}${m.relevance ? ` (relevance: ${m.relevance.toFixed(2)})` : ''}`
166
+ ),
167
+ '',
168
+ output.answer ? `Consolidated answer: ${output.answer}` : '',
169
+ ].filter(Boolean).join('\n')
170
+
171
+ return {
172
+ tool_use_id: toolUseID,
173
+ type: 'tool_result',
174
+ content,
175
+ }
176
+ },
177
+ } satisfies ToolDef<InputSchema, Output>)
@@ -0,0 +1,16 @@
1
+ export const XMEM_RETRIEVE_TOOL_NAME = 'XMemRetrieve'
2
+
3
+ export const DESCRIPTION = `Retrieve relevant memories from long-term XMem storage to help answer the current query.
4
+
5
+ **THINK LIKE A HUMAN**: A human mind recalls past knowledge before starting a task. Before using ANY other tools (like reading files or searching code) to solve a problem or start a new task, ALWAYS call ${XMEM_RETRIEVE_TOOL_NAME} first with the context of the user's request.
6
+
7
+ Use this tool when:
8
+ - Starting a new task to recall context, preferences, or prior related work.
9
+ - The user's question mentions "remember", "before", "last time", "previously", "as we discussed".
10
+ - The question refers to personal details ("my name", "my preference", "my project").
11
+ - You're unsure about context that might have been established in previous conversations.
12
+ - You need to personalize the response based on past interactions.
13
+
14
+ If the memory gives you the answer or context, use it. If no relevant memory is found, ONLY THEN proceed to explore the codebase or solve the issue from scratch. You can also use a hybrid approach: retrieve from memory to get initial context, then use other tools (like file reading or searching) to expand on it. You can call the memory retrieval tool multiple times during a task if new questions arise that might benefit from past context.
15
+
16
+ Call this tool with a search query describing what you need to know, then use the results to inform your response.`
@@ -0,0 +1,172 @@
1
+ import React from 'react'
2
+ import { Text } from '../../ink.js'
3
+ import { z } from 'zod/v4'
4
+ import type { ValidationResult } from '../../Tool.js'
5
+ import { buildTool, type ToolDef } from '../../Tool.js'
6
+ import { xmemClient } from '../../utils/xmem.js'
7
+ import { getInitialSettings } from '../../utils/settings/settings.js'
8
+ import { lazySchema } from '../../utils/lazySchema.js'
9
+ import { XMEM_SEARCH_TOOL_NAME, DESCRIPTION } from './prompt.js'
10
+
11
+ const inputSchema = lazySchema(() =>
12
+ z.strictObject({
13
+ query: z
14
+ .string()
15
+ .describe('The search query to find specific memories'),
16
+ limit: z
17
+ .number()
18
+ .optional()
19
+ .describe('Maximum results to return (default: 10)'),
20
+ }),
21
+ )
22
+ type InputSchema = ReturnType<typeof inputSchema>
23
+
24
+ const outputSchema = lazySchema(() =>
25
+ z.object({
26
+ success: z.boolean().describe('Whether the search was successful'),
27
+ results: z
28
+ .array(
29
+ z.object({
30
+ content: z.string().describe('The memory content'),
31
+ score: z.number().optional().describe('Search relevance score'),
32
+ }),
33
+ )
34
+ .describe('Search results matching the query'),
35
+ count: z.number().describe('Total number of results found'),
36
+ message: z.string().describe('Status message'),
37
+ }),
38
+ )
39
+ type OutputSchema = ReturnType<typeof outputSchema>
40
+
41
+ export type Output = z.infer<OutputSchema>
42
+
43
+ export const XMemSearchTool = buildTool({
44
+ name: XMEM_SEARCH_TOOL_NAME,
45
+ searchHint: 'search through stored memories',
46
+ maxResultSizeChars: 100_000,
47
+ async description() {
48
+ return DESCRIPTION
49
+ },
50
+ userFacingName() {
51
+ return 'XMem Search'
52
+ },
53
+ getToolUseSummary(input) {
54
+ return `Searching memories: ${input.query.substring(0, 50)}...`
55
+ },
56
+ getActivityDescription(input) {
57
+ return `Searching memories: ${input.query.substring(0, 40)}...`
58
+ },
59
+ get inputSchema(): InputSchema {
60
+ return inputSchema()
61
+ },
62
+ get outputSchema(): OutputSchema {
63
+ return outputSchema()
64
+ },
65
+ isConcurrencySafe() {
66
+ return true
67
+ },
68
+ isReadOnly() {
69
+ return true
70
+ },
71
+ toAutoClassifierInput(input) {
72
+ return `Search memory: ${input.query}`
73
+ },
74
+ isSearchOrReadCommand() {
75
+ return { isSearch: true, isRead: true }
76
+ },
77
+ async validateInput(): Promise<ValidationResult> {
78
+ // XMem is always enabled by default now
79
+ return { result: true }
80
+ },
81
+ async prompt() {
82
+ return DESCRIPTION
83
+ },
84
+ renderToolUseMessage(input) {
85
+ return `Searching XMem memory: "${input.query.substring(0, 60)}${input.query.length > 60 ? '...' : ''}"`
86
+ },
87
+ renderToolUseErrorMessage() {
88
+ return React.createElement(Text, null, `Failed to search memories`);
89
+ },
90
+ renderToolResultMessage(output) {
91
+ if (!output.success) {
92
+ return React.createElement(Text, { color: 'error' }, `❌ Failed: ${output.message}`);
93
+ }
94
+ if (output.count === 0) {
95
+ return React.createElement(Text, null, `No memories found matching the query`);
96
+ }
97
+ return React.createElement(Text, null, `✅ Found ${output.count} memory result${output.count > 1 ? 's' : ''}`);
98
+ },
99
+ async call(input) {
100
+ console.error(`[XMem Search] Query: "${input.query.substring(0, 50)}..."`)
101
+
102
+ const start = Date.now()
103
+
104
+ try {
105
+ const result = await xmemClient.search({
106
+ query: input.query,
107
+ user_id: 'default_user',
108
+ })
109
+
110
+ const duration = Date.now() - start
111
+ console.error(`[XMem Search] ✅ Found ${result.results.length} results in ${duration}ms`)
112
+
113
+ return {
114
+ data: {
115
+ success: true,
116
+ results: result.results.map(r => ({
117
+ content: r.content,
118
+ score: r.score,
119
+ })),
120
+ count: result.results.length,
121
+ message: `Found ${result.results.length} memories`,
122
+ },
123
+ }
124
+ } catch (error) {
125
+ const errorMsg = error instanceof Error ? error.message : String(error)
126
+ console.error(`[XMem Search] ❌ Failed: ${errorMsg}`)
127
+
128
+ return {
129
+ data: {
130
+ success: false,
131
+ results: [],
132
+ count: 0,
133
+ message: `Failed to search memories: ${errorMsg}`,
134
+ },
135
+ }
136
+ }
137
+ },
138
+ mapToolResultToToolResultBlockParam(output, toolUseID) {
139
+ if (!output.success) {
140
+ return {
141
+ tool_use_id: toolUseID,
142
+ type: 'tool_result',
143
+ content: `Error: ${output.message}`,
144
+ is_error: true,
145
+ }
146
+ }
147
+
148
+ if (output.count === 0) {
149
+ return {
150
+ tool_use_id: toolUseID,
151
+ type: 'tool_result',
152
+ content: 'No memories found matching this search query.',
153
+ }
154
+ }
155
+
156
+ const content = [
157
+ `Found ${output.count} memory result${output.count > 1 ? 's' : ''}:`,
158
+ '',
159
+ ...output.results.map((r, i) => {
160
+ const prefix = `[${i + 1}]`
161
+ const score = r.score ? ` (score: ${r.score.toFixed(2)})` : ''
162
+ return `${prefix}${score} ${r.content}`
163
+ }),
164
+ ].join('\n')
165
+
166
+ return {
167
+ tool_use_id: toolUseID,
168
+ type: 'tool_result',
169
+ content,
170
+ }
171
+ },
172
+ } satisfies ToolDef<InputSchema, Output>)
@@ -0,0 +1,11 @@
1
+ export const XMEM_SEARCH_TOOL_NAME = 'XMemSearch'
2
+
3
+ export const DESCRIPTION = `Search through all stored memories in XMem to find specific information.
4
+
5
+ Use this tool when:
6
+ - The user asks "what do you remember about..." or "tell me what you know about..."
7
+ - You need to explore memories without immediately using them in a response
8
+ - Debugging what memories are available
9
+ - The user wants to verify what has been saved
10
+
11
+ This searches the full memory index and returns all matching entries, useful for memory exploration and verification.`
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Shell-agnostic git operation tracking for usage metrics.
3
+ *
4
+ * Detects `git commit`, `git push`, `gh pr create`, `glab mr create`, and
5
+ * curl-based PR creation in command strings, then increments OTLP counters
6
+ * and fires analytics events. The regexes operate on raw command text so they
7
+ * work identically for Bash and PowerShell (both invoke git/gh/glab/curl as
8
+ * external binaries with the same argv syntax).
9
+ */
10
+
11
+ import { getCommitCounter, getPrCounter } from '../../bootstrap/state.js'
12
+ import {
13
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
14
+ logEvent,
15
+ } from '../../services/analytics/index.js'
16
+
17
+ /**
18
+ * Build a regex that matches `git <subcmd>` while tolerating git's global
19
+ * options between `git` and the subcommand (e.g. `-c key=val`, `-C path`,
20
+ * `--git-dir=path`). Common when the model retries with
21
+ * `git -c commit.gpgsign=false commit` after a signing failure.
22
+ */
23
+ function gitCmdRe(subcmd: string, suffix = ''): RegExp {
24
+ return new RegExp(
25
+ `\\bgit(?:\\s+-[cC]\\s+\\S+|\\s+--\\S+=\\S+)*\\s+${subcmd}\\b${suffix}`,
26
+ )
27
+ }
28
+
29
+ const GIT_COMMIT_RE = gitCmdRe('commit')
30
+ const GIT_PUSH_RE = gitCmdRe('push')
31
+ const GIT_CHERRY_PICK_RE = gitCmdRe('cherry-pick')
32
+ const GIT_MERGE_RE = gitCmdRe('merge', '(?!-)')
33
+ const GIT_REBASE_RE = gitCmdRe('rebase')
34
+
35
+ export type CommitKind = 'committed' | 'amended' | 'cherry-picked'
36
+ export type BranchAction = 'merged' | 'rebased'
37
+ export type PrAction =
38
+ | 'created'
39
+ | 'edited'
40
+ | 'merged'
41
+ | 'commented'
42
+ | 'closed'
43
+ | 'ready'
44
+
45
+ const GH_PR_ACTIONS: readonly { re: RegExp; action: PrAction; op: string }[] = [
46
+ { re: /\bgh\s+pr\s+create\b/, action: 'created', op: 'pr_create' },
47
+ { re: /\bgh\s+pr\s+edit\b/, action: 'edited', op: 'pr_edit' },
48
+ { re: /\bgh\s+pr\s+merge\b/, action: 'merged', op: 'pr_merge' },
49
+ { re: /\bgh\s+pr\s+comment\b/, action: 'commented', op: 'pr_comment' },
50
+ { re: /\bgh\s+pr\s+close\b/, action: 'closed', op: 'pr_close' },
51
+ { re: /\bgh\s+pr\s+ready\b/, action: 'ready', op: 'pr_ready' },
52
+ ]
53
+
54
+ /**
55
+ * Parse PR info from a GitHub PR URL.
56
+ * Returns { prNumber, prUrl, prRepository } or null if not a valid PR URL.
57
+ */
58
+ function parsePrUrl(
59
+ url: string,
60
+ ): { prNumber: number; prUrl: string; prRepository: string } | null {
61
+ const match = url.match(/https:\/\/github\.com\/([^/]+\/[^/]+)\/pull\/(\d+)/)
62
+ if (match?.[1] && match?.[2]) {
63
+ return {
64
+ prNumber: parseInt(match[2], 10),
65
+ prUrl: url,
66
+ prRepository: match[1],
67
+ }
68
+ }
69
+ return null
70
+ }
71
+
72
+ /** Find a GitHub PR URL embedded anywhere in stdout and parse it. */
73
+ function findPrInStdout(stdout: string): ReturnType<typeof parsePrUrl> {
74
+ const m = stdout.match(/https:\/\/github\.com\/[^/\s]+\/[^/\s]+\/pull\/\d+/)
75
+ return m ? parsePrUrl(m[0]) : null
76
+ }
77
+
78
+ // Exported for testing purposes
79
+ export function parseGitCommitId(stdout: string): string | undefined {
80
+ // git commit output: [branch abc1234] message
81
+ // or for root commit: [branch (root-commit) abc1234] message
82
+ const match = stdout.match(/\[[\w./-]+(?: \(root-commit\))? ([0-9a-f]+)\]/)
83
+ return match?.[1]
84
+ }
85
+
86
+ /**
87
+ * Parse branch name from git push output. Push writes progress to stderr but
88
+ * the ref update line ("abc..def branch -> branch", "* [new branch]
89
+ * branch -> branch", or " + abc...def branch -> branch (forced update)") is
90
+ * the signal. Works on either stdout or stderr. Git prefixes each ref line
91
+ * with a status flag (space, +, -, *, !, =); the char class tolerates any.
92
+ */
93
+ function parseGitPushBranch(output: string): string | undefined {
94
+ const match = output.match(
95
+ /^\s*[+\-*!= ]?\s*(?:\[new branch\]|\S+\.\.+\S+)\s+\S+\s*->\s*(\S+)/m,
96
+ )
97
+ return match?.[1]
98
+ }
99
+
100
+ /**
101
+ * gh pr merge/close/ready print "✓ <Verb> pull request owner/repo#1234" with
102
+ * no URL. Extract the PR number from the text.
103
+ */
104
+ function parsePrNumberFromText(stdout: string): number | undefined {
105
+ const match = stdout.match(/[Pp]ull request (?:\S+#)?#?(\d+)/)
106
+ return match?.[1] ? parseInt(match[1], 10) : undefined
107
+ }
108
+
109
+ /**
110
+ * Extract target ref from `git merge <ref>` / `git rebase <ref>` command.
111
+ * Skips flags and keywords — first non-flag argument is the ref.
112
+ */
113
+ function parseRefFromCommand(
114
+ command: string,
115
+ verb: string,
116
+ ): string | undefined {
117
+ const after = command.split(gitCmdRe(verb))[1]
118
+ if (!after) return undefined
119
+ for (const t of after.trim().split(/\s+/)) {
120
+ if (/^[&|;><]/.test(t)) break
121
+ if (t.startsWith('-')) continue
122
+ return t
123
+ }
124
+ return undefined
125
+ }
126
+
127
+ /**
128
+ * Scan bash command + output for git operations worth surfacing in the
129
+ * collapsed tool-use summary ("committed a1b2c3, created PR #42, ran 3 bash
130
+ * commands"). Checks the command to avoid matching SHAs/URLs that merely
131
+ * appear in unrelated output (e.g. `git log`).
132
+ *
133
+ * Pass stdout+stderr concatenated — git push writes the ref update to stderr.
134
+ */
135
+ export function detectGitOperation(
136
+ command: string,
137
+ output: string,
138
+ ): {
139
+ commit?: { sha: string; kind: CommitKind }
140
+ push?: { branch: string }
141
+ branch?: { ref: string; action: BranchAction }
142
+ pr?: { number: number; url?: string; action: PrAction }
143
+ } {
144
+ const result: ReturnType<typeof detectGitOperation> = {}
145
+ // commit and cherry-pick both produce "[branch sha] msg" output
146
+ const isCherryPick = GIT_CHERRY_PICK_RE.test(command)
147
+ if (GIT_COMMIT_RE.test(command) || isCherryPick) {
148
+ const sha = parseGitCommitId(output)
149
+ if (sha) {
150
+ result.commit = {
151
+ sha: sha.slice(0, 6),
152
+ kind: isCherryPick
153
+ ? 'cherry-picked'
154
+ : /--amend\b/.test(command)
155
+ ? 'amended'
156
+ : 'committed',
157
+ }
158
+ }
159
+ }
160
+ if (GIT_PUSH_RE.test(command)) {
161
+ const branch = parseGitPushBranch(output)
162
+ if (branch) result.push = { branch }
163
+ }
164
+ if (
165
+ GIT_MERGE_RE.test(command) &&
166
+ /(Fast-forward|Merge made by)/.test(output)
167
+ ) {
168
+ const ref = parseRefFromCommand(command, 'merge')
169
+ if (ref) result.branch = { ref, action: 'merged' }
170
+ }
171
+ if (GIT_REBASE_RE.test(command) && /Successfully rebased/.test(output)) {
172
+ const ref = parseRefFromCommand(command, 'rebase')
173
+ if (ref) result.branch = { ref, action: 'rebased' }
174
+ }
175
+ const prAction = GH_PR_ACTIONS.find(a => a.re.test(command))?.action
176
+ if (prAction) {
177
+ const pr = findPrInStdout(output)
178
+ if (pr) {
179
+ result.pr = { number: pr.prNumber, url: pr.prUrl, action: prAction }
180
+ } else {
181
+ const num = parsePrNumberFromText(output)
182
+ if (num) result.pr = { number: num, action: prAction }
183
+ }
184
+ }
185
+ return result
186
+ }
187
+
188
+ // Exported for testing purposes
189
+ export function trackGitOperations(
190
+ command: string,
191
+ exitCode: number,
192
+ stdout?: string,
193
+ ): void {
194
+ const success = exitCode === 0
195
+ if (!success) {
196
+ return
197
+ }
198
+
199
+ if (GIT_COMMIT_RE.test(command)) {
200
+ logEvent('tengu_git_operation', {
201
+ operation:
202
+ 'commit' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
203
+ })
204
+ if (command.match(/--amend\b/)) {
205
+ logEvent('tengu_git_operation', {
206
+ operation:
207
+ 'commit_amend' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
208
+ })
209
+ }
210
+ getCommitCounter()?.add(1)
211
+ }
212
+ if (GIT_PUSH_RE.test(command)) {
213
+ logEvent('tengu_git_operation', {
214
+ operation:
215
+ 'push' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
216
+ })
217
+ }
218
+ const prHit = GH_PR_ACTIONS.find(a => a.re.test(command))
219
+ if (prHit) {
220
+ logEvent('tengu_git_operation', {
221
+ operation:
222
+ prHit.op as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
223
+ })
224
+ }
225
+ if (prHit?.action === 'created') {
226
+ getPrCounter()?.add(1)
227
+ // Auto-link session to PR if we can extract PR URL from stdout
228
+ if (stdout) {
229
+ const prInfo = findPrInStdout(stdout)
230
+ if (prInfo) {
231
+ // Import is done dynamically to avoid circular dependency
232
+ void import('../../utils/sessionStorage.js').then(
233
+ ({ linkSessionToPR }) => {
234
+ void import('../../bootstrap/state.js').then(({ getSessionId }) => {
235
+ const sessionId = getSessionId()
236
+ if (sessionId) {
237
+ void linkSessionToPR(
238
+ sessionId as `${string}-${string}-${string}-${string}-${string}`,
239
+ prInfo.prNumber,
240
+ prInfo.prUrl,
241
+ prInfo.prRepository,
242
+ )
243
+ }
244
+ })
245
+ },
246
+ )
247
+ }
248
+ }
249
+ }
250
+ if (command.match(/\bglab\s+mr\s+create\b/)) {
251
+ logEvent('tengu_git_operation', {
252
+ operation:
253
+ 'pr_create' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
254
+ })
255
+ getPrCounter()?.add(1)
256
+ }
257
+ // Detect PR creation via curl to REST APIs (Bitbucket, GitHub API, GitLab API)
258
+ // Check for POST method and PR endpoint separately to handle any argument order
259
+ // Also detect implicit POST when -d is used (curl defaults to POST with data)
260
+ const isCurlPost =
261
+ command.match(/\bcurl\b/) &&
262
+ (command.match(/-X\s*POST\b/i) ||
263
+ command.match(/--request\s*=?\s*POST\b/i) ||
264
+ command.match(/\s-d\s/))
265
+ // Match PR endpoints in URLs, but not sub-resources like /pulls/123/comments
266
+ // Require https?:// prefix to avoid matching text in POST body or other params
267
+ const isPrEndpoint = command.match(
268
+ /https?:\/\/[^\s'"]*\/(pulls|pull-requests|merge[-_]requests)(?!\/\d)/i,
269
+ )
270
+ if (isCurlPost && isPrEndpoint) {
271
+ logEvent('tengu_git_operation', {
272
+ operation:
273
+ 'pr_create' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
274
+ })
275
+ getPrCounter()?.add(1)
276
+ }
277
+ }