@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,238 @@
1
+ import { APIUserAbortError } from '@anthropic-ai/sdk'
2
+
3
+ export class ClaudeError extends Error {
4
+ constructor(message: string) {
5
+ super(message)
6
+ this.name = this.constructor.name
7
+ }
8
+ }
9
+
10
+ export class MalformedCommandError extends Error {}
11
+
12
+ export class AbortError extends Error {
13
+ constructor(message?: string) {
14
+ super(message)
15
+ this.name = 'AbortError'
16
+ }
17
+ }
18
+
19
+ /**
20
+ * True iff `e` is any of the abort-shaped errors the codebase encounters:
21
+ * our AbortError class, a DOMException from AbortController.abort()
22
+ * (.name === 'AbortError'), or the SDK's APIUserAbortError. The SDK class
23
+ * is checked via instanceof because minified builds mangle class names —
24
+ * constructor.name becomes something like 'nJT' and the SDK never sets
25
+ * this.name, so string matching silently fails in production.
26
+ */
27
+ export function isAbortError(e: unknown): boolean {
28
+ return (
29
+ e instanceof AbortError ||
30
+ e instanceof APIUserAbortError ||
31
+ (e instanceof Error && e.name === 'AbortError')
32
+ )
33
+ }
34
+
35
+ /**
36
+ * Custom error class for configuration file parsing errors
37
+ * Includes the file path and the default configuration that should be used
38
+ */
39
+ export class ConfigParseError extends Error {
40
+ filePath: string
41
+ defaultConfig: unknown
42
+
43
+ constructor(message: string, filePath: string, defaultConfig: unknown) {
44
+ super(message)
45
+ this.name = 'ConfigParseError'
46
+ this.filePath = filePath
47
+ this.defaultConfig = defaultConfig
48
+ }
49
+ }
50
+
51
+ export class ShellError extends Error {
52
+ constructor(
53
+ public readonly stdout: string,
54
+ public readonly stderr: string,
55
+ public readonly code: number,
56
+ public readonly interrupted: boolean,
57
+ ) {
58
+ super('Shell command failed')
59
+ this.name = 'ShellError'
60
+ }
61
+ }
62
+
63
+ export class TeleportOperationError extends Error {
64
+ constructor(
65
+ message: string,
66
+ public readonly formattedMessage: string,
67
+ ) {
68
+ super(message)
69
+ this.name = 'TeleportOperationError'
70
+ }
71
+ }
72
+
73
+ /**
74
+ * Error with a message that is safe to log to telemetry.
75
+ * Use the long name to confirm you've verified the message contains no
76
+ * sensitive data (file paths, URLs, code snippets).
77
+ *
78
+ * Single-arg: same message for user and telemetry
79
+ * Two-arg: different messages (e.g., full message has file path, telemetry doesn't)
80
+ *
81
+ * @example
82
+ * // Same message for both
83
+ * throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(
84
+ * 'MCP server "slack" connection timed out'
85
+ * )
86
+ *
87
+ * // Different messages
88
+ * throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(
89
+ * `MCP tool timed out after ${ms}ms`, // Full message for logs/user
90
+ * 'MCP tool timed out' // Telemetry message
91
+ * )
92
+ */
93
+ export class TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS extends Error {
94
+ readonly telemetryMessage: string
95
+
96
+ constructor(message: string, telemetryMessage?: string) {
97
+ super(message)
98
+ this.name = 'TelemetrySafeError'
99
+ this.telemetryMessage = telemetryMessage ?? message
100
+ }
101
+ }
102
+
103
+ export function hasExactErrorMessage(error: unknown, message: string): boolean {
104
+ return error instanceof Error && error.message === message
105
+ }
106
+
107
+ /**
108
+ * Normalize an unknown value into an Error.
109
+ * Use at catch-site boundaries when you need an Error instance.
110
+ */
111
+ export function toError(e: unknown): Error {
112
+ return e instanceof Error ? e : new Error(String(e))
113
+ }
114
+
115
+ /**
116
+ * Extract a string message from an unknown error-like value.
117
+ * Use when you only need the message (e.g., for logging or display).
118
+ */
119
+ export function errorMessage(e: unknown): string {
120
+ return e instanceof Error ? e.message : String(e)
121
+ }
122
+
123
+ /**
124
+ * Extract the errno code (e.g., 'ENOENT', 'EACCES') from a caught error.
125
+ * Returns undefined if the error has no code or is not an ErrnoException.
126
+ * Replaces the `(e as NodeJS.ErrnoException).code` cast pattern.
127
+ */
128
+ export function getErrnoCode(e: unknown): string | undefined {
129
+ if (e && typeof e === 'object' && 'code' in e && typeof e.code === 'string') {
130
+ return e.code
131
+ }
132
+ return undefined
133
+ }
134
+
135
+ /**
136
+ * True if the error is ENOENT (file or directory does not exist).
137
+ * Replaces `(e as NodeJS.ErrnoException).code === 'ENOENT'`.
138
+ */
139
+ export function isENOENT(e: unknown): boolean {
140
+ return getErrnoCode(e) === 'ENOENT'
141
+ }
142
+
143
+ /**
144
+ * Extract the errno path (the filesystem path that triggered the error)
145
+ * from a caught error. Returns undefined if the error has no path.
146
+ * Replaces the `(e as NodeJS.ErrnoException).path` cast pattern.
147
+ */
148
+ export function getErrnoPath(e: unknown): string | undefined {
149
+ if (e && typeof e === 'object' && 'path' in e && typeof e.path === 'string') {
150
+ return e.path
151
+ }
152
+ return undefined
153
+ }
154
+
155
+ /**
156
+ * Extract error message + top N stack frames from an unknown error.
157
+ * Use when the error flows to the model as a tool_result — full stack
158
+ * traces are ~500-2000 chars of mostly-irrelevant internal frames and
159
+ * waste context tokens. Keep the full stack in debug logs instead.
160
+ */
161
+ export function shortErrorStack(e: unknown, maxFrames = 5): string {
162
+ if (!(e instanceof Error)) return String(e)
163
+ if (!e.stack) return e.message
164
+ // V8/Bun stack format: "Name: message\n at frame1\n at frame2..."
165
+ // First line is the message; subsequent " at " lines are frames.
166
+ const lines = e.stack.split('\n')
167
+ const header = lines[0] ?? e.message
168
+ const frames = lines.slice(1).filter(l => l.trim().startsWith('at '))
169
+ if (frames.length <= maxFrames) return e.stack
170
+ return [header, ...frames.slice(0, maxFrames)].join('\n')
171
+ }
172
+
173
+ /**
174
+ * True if the error means the path is missing, inaccessible, or
175
+ * structurally unreachable — use in catch blocks after fs operations to
176
+ * distinguish expected "nothing there / no access" from unexpected errors.
177
+ *
178
+ * Covers:
179
+ * ENOENT — path does not exist
180
+ * EACCES — permission denied
181
+ * EPERM — operation not permitted
182
+ * ENOTDIR — a path component is not a directory (e.g. a file named
183
+ * `.claude` exists where a directory is expected)
184
+ * ELOOP — too many symlink levels (circular symlinks)
185
+ */
186
+ export function isFsInaccessible(e: unknown): e is NodeJS.ErrnoException {
187
+ const code = getErrnoCode(e)
188
+ return (
189
+ code === 'ENOENT' ||
190
+ code === 'EACCES' ||
191
+ code === 'EPERM' ||
192
+ code === 'ENOTDIR' ||
193
+ code === 'ELOOP'
194
+ )
195
+ }
196
+
197
+ export type AxiosErrorKind =
198
+ | 'auth' // 401/403 — caller typically sets skipRetry
199
+ | 'timeout' // ECONNABORTED
200
+ | 'network' // ECONNREFUSED/ENOTFOUND
201
+ | 'http' // other axios error (may have status)
202
+ | 'other' // not an axios error
203
+
204
+ /**
205
+ * Classify a caught error from an axios request into one of a few buckets.
206
+ * Replaces the ~20-line isAxiosError → 401/403 → ECONNABORTED → ECONNREFUSED
207
+ * chain duplicated across sync-style services (settingsSync, policyLimits,
208
+ * remoteManagedSettings, teamMemorySync).
209
+ *
210
+ * Checks the `.isAxiosError` marker property directly (same as
211
+ * axios.isAxiosError()) to keep this module dependency-free.
212
+ */
213
+ export function classifyAxiosError(e: unknown): {
214
+ kind: AxiosErrorKind
215
+ status?: number
216
+ message: string
217
+ } {
218
+ const message = errorMessage(e)
219
+ if (
220
+ !e ||
221
+ typeof e !== 'object' ||
222
+ !('isAxiosError' in e) ||
223
+ !e.isAxiosError
224
+ ) {
225
+ return { kind: 'other', message }
226
+ }
227
+ const err = e as {
228
+ response?: { status?: number }
229
+ code?: string
230
+ }
231
+ const status = err.response?.status
232
+ if (status === 401 || status === 403) return { kind: 'auth', status, message }
233
+ if (err.code === 'ECONNABORTED') return { kind: 'timeout', status, message }
234
+ if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
235
+ return { kind: 'network', status, message }
236
+ }
237
+ return { kind: 'http', status, message }
238
+ }
@@ -0,0 +1,184 @@
1
+ import memoize from 'lodash-es/memoize.js'
2
+ import sample from 'lodash-es/sample.js'
3
+ import { getCwd } from '../utils/cwd.js'
4
+ import { getCurrentProjectConfig, saveCurrentProjectConfig } from './config.js'
5
+ import { env } from './env.js'
6
+ import { execFileNoThrowWithCwd } from './execFileNoThrow.js'
7
+ import { getIsGit, gitExe } from './git.js'
8
+ import { logError } from './log.js'
9
+ import { getGitEmail } from './user.js'
10
+
11
+ // Patterns that mark a file as non-core (auto-generated, dependency, or config).
12
+ // Used to filter example-command filename suggestions deterministically
13
+ // instead of shelling out to Haiku.
14
+ const NON_CORE_PATTERNS = [
15
+ // lock / dependency manifests
16
+ /(?:^|\/)(?:package-lock\.json|yarn\.lock|bun\.lock|bun\.lockb|pnpm-lock\.yaml|Pipfile\.lock|poetry\.lock|Cargo\.lock|Gemfile\.lock|go\.sum|composer\.lock|uv\.lock)$/,
17
+ // generated / build artifacts
18
+ /\.generated\./,
19
+ /(?:^|\/)(?:dist|build|out|target|node_modules|\.next|__pycache__)\//,
20
+ /\.(?:min\.js|min\.css|map|pyc|pyo)$/,
21
+ // data / docs / config extensions (not "write a test for" material)
22
+ /\.(?:json|ya?ml|toml|xml|ini|cfg|conf|env|lock|txt|md|mdx|rst|csv|log|svg)$/i,
23
+ // configuration / metadata
24
+ /(?:^|\/)\.?(?:eslintrc|prettierrc|babelrc|editorconfig|gitignore|gitattributes|dockerignore|npmrc)/,
25
+ /(?:^|\/)(?:tsconfig|jsconfig|biome|vitest\.config|jest\.config|webpack\.config|vite\.config|rollup\.config)\.[a-z]+$/,
26
+ /(?:^|\/)\.(?:github|vscode|idea|claude)\//,
27
+ // docs / changelogs (not "how does X work" material)
28
+ /(?:^|\/)(?:CHANGELOG|LICENSE|CONTRIBUTING|CODEOWNERS|README)(?:\.[a-z]+)?$/i,
29
+ ]
30
+
31
+ function isCoreFile(path: string): boolean {
32
+ return !NON_CORE_PATTERNS.some(p => p.test(path))
33
+ }
34
+
35
+ /**
36
+ * Counts occurrences of items in an array and returns the top N items
37
+ * sorted by count in descending order, formatted as a string.
38
+ */
39
+ export function countAndSortItems(items: string[], topN: number = 20): string {
40
+ const counts = new Map<string, number>()
41
+ for (const item of items) {
42
+ counts.set(item, (counts.get(item) || 0) + 1)
43
+ }
44
+ return Array.from(counts.entries())
45
+ .sort((a, b) => b[1] - a[1])
46
+ .slice(0, topN)
47
+ .map(([item, count]) => `${count.toString().padStart(6)} ${item}`)
48
+ .join('\n')
49
+ }
50
+
51
+ /**
52
+ * Picks up to `want` basenames from a frequency-sorted list of paths,
53
+ * skipping non-core files and spreading across different directories.
54
+ * Returns empty array if fewer than `want` core files are available.
55
+ */
56
+ export function pickDiverseCoreFiles(
57
+ sortedPaths: string[],
58
+ want: number,
59
+ ): string[] {
60
+ const picked: string[] = []
61
+ const seenBasenames = new Set<string>()
62
+ const dirTally = new Map<string, number>()
63
+
64
+ // Greedy: on each pass allow +1 file per directory. Keeps the
65
+ // top-5 from collapsing into a single hot folder while still
66
+ // letting a dominant folder contribute multiple files if the
67
+ // repo is narrow.
68
+ for (let cap = 1; picked.length < want && cap <= want; cap++) {
69
+ for (const p of sortedPaths) {
70
+ if (picked.length >= want) break
71
+ if (!isCoreFile(p)) continue
72
+ const lastSep = Math.max(p.lastIndexOf('/'), p.lastIndexOf('\\'))
73
+ const base = lastSep >= 0 ? p.slice(lastSep + 1) : p
74
+ if (!base || seenBasenames.has(base)) continue
75
+ const dir = lastSep >= 0 ? p.slice(0, lastSep) : '.'
76
+ if ((dirTally.get(dir) ?? 0) >= cap) continue
77
+ picked.push(base)
78
+ seenBasenames.add(base)
79
+ dirTally.set(dir, (dirTally.get(dir) ?? 0) + 1)
80
+ }
81
+ }
82
+
83
+ return picked.length >= want ? picked : []
84
+ }
85
+
86
+ async function getFrequentlyModifiedFiles(): Promise<string[]> {
87
+ if (process.env.NODE_ENV === 'test') return []
88
+ if (env.platform === 'win32') return []
89
+ if (!(await getIsGit())) return []
90
+
91
+ try {
92
+ // Collect frequently-modified files, preferring the user's own commits.
93
+ const userEmail = await getGitEmail()
94
+
95
+ const logArgs = [
96
+ 'log',
97
+ '-n',
98
+ '1000',
99
+ '--pretty=format:',
100
+ '--name-only',
101
+ '--diff-filter=M',
102
+ ]
103
+
104
+ const counts = new Map<string, number>()
105
+ const tallyInto = (stdout: string) => {
106
+ for (const line of stdout.split('\n')) {
107
+ const f = line.trim()
108
+ if (f) counts.set(f, (counts.get(f) ?? 0) + 1)
109
+ }
110
+ }
111
+
112
+ if (userEmail) {
113
+ const { stdout } = await execFileNoThrowWithCwd(
114
+ 'git',
115
+ [...logArgs, `--author=${userEmail}`],
116
+ { cwd: getCwd() },
117
+ )
118
+ tallyInto(stdout)
119
+ }
120
+
121
+ // Fall back to all authors if the user's own history is thin.
122
+ if (counts.size < 10) {
123
+ const { stdout } = await execFileNoThrowWithCwd(gitExe(), logArgs, {
124
+ cwd: getCwd(),
125
+ })
126
+ tallyInto(stdout)
127
+ }
128
+
129
+ const sorted = Array.from(counts.entries())
130
+ .sort((a, b) => b[1] - a[1])
131
+ .map(([p]) => p)
132
+
133
+ return pickDiverseCoreFiles(sorted, 5)
134
+ } catch (err) {
135
+ logError(err as Error)
136
+ return []
137
+ }
138
+ }
139
+
140
+ const ONE_WEEK_IN_MS = 7 * 24 * 60 * 60 * 1000
141
+
142
+ export const getExampleCommandFromCache = memoize(() => {
143
+ const projectConfig = getCurrentProjectConfig()
144
+ const frequentFile = projectConfig.exampleFiles?.length
145
+ ? sample(projectConfig.exampleFiles)
146
+ : '<filepath>'
147
+
148
+ const commands = [
149
+ 'fix lint errors',
150
+ 'fix typecheck errors',
151
+ `how does ${frequentFile} work?`,
152
+ `refactor ${frequentFile}`,
153
+ 'how do I log an error?',
154
+ `edit ${frequentFile} to...`,
155
+ `write a test for ${frequentFile}`,
156
+ 'create a util logging.py that...',
157
+ ]
158
+
159
+ return `Try "${sample(commands)}"`
160
+ })
161
+
162
+ export const refreshExampleCommands = memoize(async (): Promise<void> => {
163
+ const projectConfig = getCurrentProjectConfig()
164
+ const now = Date.now()
165
+ const lastGenerated = projectConfig.exampleFilesGeneratedAt ?? 0
166
+
167
+ // Regenerate examples if they're over a week old
168
+ if (now - lastGenerated > ONE_WEEK_IN_MS) {
169
+ projectConfig.exampleFiles = []
170
+ }
171
+
172
+ // If no example files cached, kickstart fetch in background
173
+ if (!projectConfig.exampleFiles?.length) {
174
+ void getFrequentlyModifiedFiles().then(files => {
175
+ if (files.length) {
176
+ saveCurrentProjectConfig(current => ({
177
+ ...current,
178
+ exampleFiles: files,
179
+ exampleFilesGeneratedAt: Date.now(),
180
+ }))
181
+ }
182
+ })
183
+ }
184
+ })
@@ -0,0 +1,150 @@
1
+ // This file represents useful wrappers over node:child_process
2
+ // These wrappers ease error handling and cross-platform compatbility
3
+ // By using execa, Windows automatically gets shell escaping + BAT / CMD handling
4
+
5
+ import { type ExecaError, execa } from 'execa'
6
+ import { getCwd } from '../utils/cwd.js'
7
+ import { logError } from './log.js'
8
+
9
+ export { execSyncWithDefaults_DEPRECATED } from './execFileNoThrowPortable.js'
10
+
11
+ const MS_IN_SECOND = 1000
12
+ const SECONDS_IN_MINUTE = 60
13
+
14
+ type ExecFileOptions = {
15
+ abortSignal?: AbortSignal
16
+ timeout?: number
17
+ preserveOutputOnError?: boolean
18
+ // Setting useCwd=false avoids circular dependencies during initialization
19
+ // getCwd() -> PersistentShell -> logEvent() -> execFileNoThrow
20
+ useCwd?: boolean
21
+ env?: NodeJS.ProcessEnv
22
+ stdin?: 'ignore' | 'inherit' | 'pipe'
23
+ input?: string
24
+ }
25
+
26
+ export function execFileNoThrow(
27
+ file: string,
28
+ args: string[],
29
+ options: ExecFileOptions = {
30
+ timeout: 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
31
+ preserveOutputOnError: true,
32
+ useCwd: true,
33
+ },
34
+ ): Promise<{ stdout: string; stderr: string; code: number; error?: string }> {
35
+ return execFileNoThrowWithCwd(file, args, {
36
+ abortSignal: options.abortSignal,
37
+ timeout: options.timeout,
38
+ preserveOutputOnError: options.preserveOutputOnError,
39
+ cwd: options.useCwd ? getCwd() : undefined,
40
+ env: options.env,
41
+ stdin: options.stdin,
42
+ input: options.input,
43
+ })
44
+ }
45
+
46
+ type ExecFileWithCwdOptions = {
47
+ abortSignal?: AbortSignal
48
+ timeout?: number
49
+ preserveOutputOnError?: boolean
50
+ maxBuffer?: number
51
+ cwd?: string
52
+ env?: NodeJS.ProcessEnv
53
+ shell?: boolean | string | undefined
54
+ stdin?: 'ignore' | 'inherit' | 'pipe'
55
+ input?: string
56
+ }
57
+
58
+ type ExecaResultWithError = {
59
+ shortMessage?: string
60
+ signal?: string
61
+ }
62
+
63
+ /**
64
+ * Extracts a human-readable error message from an execa result.
65
+ *
66
+ * Priority order:
67
+ * 1. shortMessage - execa's human-readable error (e.g., "Command failed with exit code 1: ...")
68
+ * This is preferred because it already includes signal info when a process is killed,
69
+ * making it more informative than just the signal name.
70
+ * 2. signal - the signal that killed the process (e.g., "SIGTERM")
71
+ * 3. errorCode - fallback to just the numeric exit code
72
+ */
73
+ function getErrorMessage(
74
+ result: ExecaResultWithError,
75
+ errorCode: number,
76
+ ): string {
77
+ if (result.shortMessage) {
78
+ return result.shortMessage
79
+ }
80
+ if (typeof result.signal === 'string') {
81
+ return result.signal
82
+ }
83
+ return String(errorCode)
84
+ }
85
+
86
+ /**
87
+ * execFile, but always resolves (never throws)
88
+ */
89
+ export function execFileNoThrowWithCwd(
90
+ file: string,
91
+ args: string[],
92
+ {
93
+ abortSignal,
94
+ timeout: finalTimeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
95
+ preserveOutputOnError: finalPreserveOutput = true,
96
+ cwd: finalCwd,
97
+ env: finalEnv,
98
+ maxBuffer,
99
+ shell,
100
+ stdin: finalStdin,
101
+ input: finalInput,
102
+ }: ExecFileWithCwdOptions = {
103
+ timeout: 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
104
+ preserveOutputOnError: true,
105
+ maxBuffer: 1_000_000,
106
+ },
107
+ ): Promise<{ stdout: string; stderr: string; code: number; error?: string }> {
108
+ return new Promise(resolve => {
109
+ // Use execa for cross-platform .bat/.cmd compatibility on Windows
110
+ execa(file, args, {
111
+ maxBuffer,
112
+ signal: abortSignal,
113
+ timeout: finalTimeout,
114
+ cwd: finalCwd,
115
+ env: finalEnv,
116
+ shell,
117
+ stdin: finalStdin,
118
+ input: finalInput,
119
+ reject: false, // Don't throw on non-zero exit codes
120
+ })
121
+ .then(result => {
122
+ if (result.failed) {
123
+ if (finalPreserveOutput) {
124
+ const errorCode = result.exitCode ?? 1
125
+ void resolve({
126
+ stdout: result.stdout || '',
127
+ stderr: result.stderr || '',
128
+ code: errorCode,
129
+ error: getErrorMessage(
130
+ result as unknown as ExecaResultWithError,
131
+ errorCode,
132
+ ),
133
+ })
134
+ } else {
135
+ void resolve({ stdout: '', stderr: '', code: result.exitCode ?? 1 })
136
+ }
137
+ } else {
138
+ void resolve({
139
+ stdout: result.stdout,
140
+ stderr: result.stderr,
141
+ code: 0,
142
+ })
143
+ }
144
+ })
145
+ .catch((error: ExecaError) => {
146
+ logError(error)
147
+ void resolve({ stdout: '', stderr: '', code: 1 })
148
+ })
149
+ })
150
+ }
@@ -0,0 +1,89 @@
1
+ import { type Options as ExecaOptions, execaSync } from 'execa'
2
+ import { getCwd } from '../utils/cwd.js'
3
+ import { slowLogging } from './slowOperations.js'
4
+
5
+ const MS_IN_SECOND = 1000
6
+ const SECONDS_IN_MINUTE = 60
7
+
8
+ type ExecSyncOptions = {
9
+ abortSignal?: AbortSignal
10
+ timeout?: number
11
+ input?: string
12
+ stdio?: ExecaOptions['stdio']
13
+ }
14
+
15
+ /**
16
+ * @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
17
+ * Sync exec calls block the event loop and cause performance issues.
18
+ */
19
+ export function execSyncWithDefaults_DEPRECATED(command: string): string | null
20
+ /**
21
+ * @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
22
+ * Sync exec calls block the event loop and cause performance issues.
23
+ */
24
+ export function execSyncWithDefaults_DEPRECATED(
25
+ command: string,
26
+ options: ExecSyncOptions,
27
+ ): string | null
28
+ /**
29
+ * @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
30
+ * Sync exec calls block the event loop and cause performance issues.
31
+ */
32
+ export function execSyncWithDefaults_DEPRECATED(
33
+ command: string,
34
+ abortSignal: AbortSignal,
35
+ timeout?: number,
36
+ ): string | null
37
+ /**
38
+ * @deprecated Use `execa` directly with `{ shell: true, reject: false }` for non-blocking execution.
39
+ * Sync exec calls block the event loop and cause performance issues.
40
+ */
41
+ export function execSyncWithDefaults_DEPRECATED(
42
+ command: string,
43
+ optionsOrAbortSignal?: ExecSyncOptions | AbortSignal,
44
+ timeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
45
+ ): string | null {
46
+ let options: ExecSyncOptions
47
+
48
+ if (optionsOrAbortSignal === undefined) {
49
+ // No second argument - use defaults
50
+ options = {}
51
+ } else if (optionsOrAbortSignal instanceof AbortSignal) {
52
+ // Old signature - second argument is AbortSignal
53
+ options = {
54
+ abortSignal: optionsOrAbortSignal,
55
+ timeout,
56
+ }
57
+ } else {
58
+ // New signature - second argument is options object
59
+ options = optionsOrAbortSignal
60
+ }
61
+
62
+ const {
63
+ abortSignal,
64
+ timeout: finalTimeout = 10 * SECONDS_IN_MINUTE * MS_IN_SECOND,
65
+ input,
66
+ stdio = ['ignore', 'pipe', 'pipe'],
67
+ } = options
68
+
69
+ abortSignal?.throwIfAborted()
70
+ using _ = slowLogging`exec: ${command.slice(0, 200)}`
71
+ try {
72
+ const result = execaSync(command, {
73
+ env: process.env,
74
+ maxBuffer: 1_000_000,
75
+ timeout: finalTimeout,
76
+ cwd: getCwd(),
77
+ stdio,
78
+ shell: true, // execSync typically runs shell commands
79
+ reject: false, // Don't throw on non-zero exit codes
80
+ input,
81
+ })
82
+ if (!result.stdout) {
83
+ return null
84
+ }
85
+ return result.stdout.trim() || null
86
+ } catch {
87
+ return null
88
+ }
89
+ }
@@ -0,0 +1,38 @@
1
+ import {
2
+ type ExecSyncOptions,
3
+ type ExecSyncOptionsWithBufferEncoding,
4
+ type ExecSyncOptionsWithStringEncoding,
5
+ execSync as nodeExecSync,
6
+ } from 'child_process'
7
+ import { slowLogging } from './slowOperations.js'
8
+
9
+ /**
10
+ * @deprecated Use async alternatives when possible. Sync exec calls block the event loop.
11
+ *
12
+ * Wrapped execSync with slow operation logging.
13
+ * Use this instead of child_process execSync directly to detect performance issues.
14
+ *
15
+ * @example
16
+ * import { execSync_DEPRECATED } from './execSyncWrapper.js'
17
+ * const result = execSync_DEPRECATED('git status', { encoding: 'utf8' })
18
+ */
19
+ export function execSync_DEPRECATED(command: string): Buffer
20
+ export function execSync_DEPRECATED(
21
+ command: string,
22
+ options: ExecSyncOptionsWithStringEncoding,
23
+ ): string
24
+ export function execSync_DEPRECATED(
25
+ command: string,
26
+ options: ExecSyncOptionsWithBufferEncoding,
27
+ ): Buffer
28
+ export function execSync_DEPRECATED(
29
+ command: string,
30
+ options?: ExecSyncOptions,
31
+ ): Buffer | string
32
+ export function execSync_DEPRECATED(
33
+ command: string,
34
+ options?: ExecSyncOptions,
35
+ ): Buffer | string {
36
+ using _ = slowLogging`execSync: ${command.slice(0, 100)}`
37
+ return nodeExecSync(command, options)
38
+ }