@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,202 @@
1
+ import { spawnSync } from 'child_process'
2
+ import { getIsInteractive } from '../bootstrap/state.js'
3
+ import { logForDebugging } from './debug.js'
4
+ import { isEnvDefinedFalsy, isEnvTruthy } from './envUtils.js'
5
+ import { execFileNoThrow } from './execFileNoThrow.js'
6
+
7
+ let loggedTmuxCcDisable = false
8
+ let checkedTmuxMouseHint = false
9
+
10
+ /**
11
+ * Cached result from `tmux display-message -p '#{client_control_mode}'`.
12
+ * undefined = not yet queried (or probe failed) — env heuristic stays authoritative.
13
+ */
14
+ let tmuxControlModeProbed: boolean | undefined
15
+
16
+ /**
17
+ * Env-var heuristic for iTerm2's tmux integration mode (`tmux -CC` / `tmux -2CC`).
18
+ *
19
+ * In `-CC` mode, iTerm2 renders tmux panes as native splits — tmux runs
20
+ * as a server (TMUX is set) but iTerm2 is the actual terminal emulator
21
+ * for each pane, so TERM_PROGRAM stays `iTerm.app` and TERM is iTerm2's
22
+ * default (xterm-*). Contrast with regular tmux-inside-iTerm2, where tmux
23
+ * overwrites TERM_PROGRAM to `tmux` and sets TERM to screen-* or tmux-*.
24
+ *
25
+ * This heuristic has known holes (SSH often doesn't propagate TERM_PROGRAM;
26
+ * .tmux.conf can override TERM) — probeTmuxControlModeSync() is the
27
+ * authoritative backstop. Kept as a zero-subprocess fast path.
28
+ */
29
+ function isTmuxControlModeEnvHeuristic(): boolean {
30
+ if (!process.env.TMUX) return false
31
+ if (process.env.TERM_PROGRAM !== 'iTerm.app') return false
32
+ // Belt-and-suspenders: in regular tmux TERM is screen-* or tmux-*;
33
+ // in -CC mode iTerm2 sets its own TERM (xterm-*).
34
+ const term = process.env.TERM ?? ''
35
+ return !term.startsWith('screen') && !term.startsWith('tmux')
36
+ }
37
+
38
+ /**
39
+ * Sync one-shot probe: asks tmux directly whether this client is in control
40
+ * mode via `#{client_control_mode}`. Runs on first isTmuxControlMode() call
41
+ * when the env heuristic can't decide; result is cached.
42
+ *
43
+ * Sync (spawnSync) because the answer gates whether we enter fullscreen — an
44
+ * async probe raced against React render and lost: coder-tmux (ssh → tmux -CC
45
+ * on a remote box) doesn't propagate TERM_PROGRAM, so the env heuristic missed,
46
+ * and by the time the async probe resolved we'd already entered alt-screen with
47
+ * mouse tracking enabled. Mouse wheel is dead in iTerm2's -CC integration, so
48
+ * users couldn't scroll at all.
49
+ *
50
+ * Cost: one ~5ms subprocess, only when $TMUX is set AND $TERM_PROGRAM is unset
51
+ * (the SSH-into-tmux case). Local iTerm2 -CC and non-tmux paths skip the spawn.
52
+ *
53
+ * The TMUX env check MUST come first — without it, display-message would
54
+ * query whatever tmux server happens to be running rather than our client.
55
+ */
56
+ function probeTmuxControlModeSync(): void {
57
+ // Seed cache with heuristic result so early returns below don't leave it
58
+ // undefined — isTmuxControlMode() is called 15+ times per render, and an
59
+ // undefined cache would re-enter this function (re-spawning tmux in the
60
+ // failure case) on every call.
61
+ tmuxControlModeProbed = isTmuxControlModeEnvHeuristic()
62
+ if (tmuxControlModeProbed) return
63
+ if (!process.env.TMUX) return
64
+ // Only probe when iTerm might be involved: TERM_PROGRAM is iTerm.app
65
+ // (covered above) or not set (SSH often doesn't propagate it). When
66
+ // TERM_PROGRAM is explicitly a non-iTerm terminal, skip — tmux -CC is
67
+ // an iTerm-only feature, so the subprocess would be wasted.
68
+ if (process.env.TERM_PROGRAM) return
69
+ let result
70
+ try {
71
+ result = spawnSync(
72
+ 'tmux',
73
+ ['display-message', '-p', '#{client_control_mode}'],
74
+ { encoding: 'utf8', timeout: 2000 },
75
+ )
76
+ } catch {
77
+ // spawnSync can throw on some platforms (e.g. ENOENT on Windows if tmux
78
+ // is absent and the runtime surfaces it as an exception rather than in
79
+ // result.error). Treat the same as a non-zero exit.
80
+ return
81
+ }
82
+ // Non-zero exit / spawn error: tmux too old (format var added in 2.4) or
83
+ // unavailable. Keep the heuristic result cached.
84
+ if (result.status !== 0) return
85
+ tmuxControlModeProbed = result.stdout.trim() === '1'
86
+ }
87
+
88
+ /**
89
+ * True when running under `tmux -CC` (iTerm2 integration mode).
90
+ *
91
+ * The alt-screen / mouse-tracking path in fullscreen mode is unrecoverable
92
+ * in -CC mode (double-click corrupts terminal state; mouse wheel is dead),
93
+ * so callers auto-disable fullscreen.
94
+ *
95
+ * Lazily probes tmux on first call when the env heuristic can't decide.
96
+ */
97
+ export function isTmuxControlMode(): boolean {
98
+ if (tmuxControlModeProbed === undefined) probeTmuxControlModeSync()
99
+ return tmuxControlModeProbed ?? false
100
+ }
101
+
102
+ export function _resetTmuxControlModeProbeForTesting(): void {
103
+ tmuxControlModeProbed = undefined
104
+ loggedTmuxCcDisable = false
105
+ }
106
+
107
+ /**
108
+ * Runtime env-var check only. Ants default to on (CLAUDE_CODE_NO_FLICKER=0
109
+ * to opt out); external users default to off (CLAUDE_CODE_NO_FLICKER=1 to
110
+ * opt in).
111
+ */
112
+ export function isFullscreenEnvEnabled(): boolean {
113
+ // Explicit user opt-out always wins.
114
+ if (isEnvDefinedFalsy(process.env.CLAUDE_CODE_NO_FLICKER)) return false
115
+ // Explicit opt-in overrides auto-detection (escape hatch).
116
+ if (isEnvTruthy(process.env.CLAUDE_CODE_NO_FLICKER)) return true
117
+ // Auto-disable under tmux -CC: alt-screen + mouse tracking corrupts
118
+ // terminal state on double-click and mouse wheel is dead.
119
+ if (isTmuxControlMode()) {
120
+ if (!loggedTmuxCcDisable) {
121
+ loggedTmuxCcDisable = true
122
+ logForDebugging(
123
+ 'fullscreen disabled: tmux -CC (iTerm2 integration mode) detected · set CLAUDE_CODE_NO_FLICKER=1 to override',
124
+ )
125
+ }
126
+ return false
127
+ }
128
+ return true
129
+ }
130
+
131
+ /**
132
+ * Whether fullscreen mode should enable SGR mouse tracking (DEC 1000/1002/1006).
133
+ * Set CLAUDE_CODE_DISABLE_MOUSE=1 to keep alt-screen + virtualized scroll
134
+ * (keyboard PgUp/PgDn/Ctrl+Home/End still work) but skip mouse capture,
135
+ * so tmux/kitty/terminal-native copy-on-select keeps working.
136
+ *
137
+ * Compare with CLAUDE_CODE_NO_FLICKER=0 which is all-or-nothing — it also
138
+ * disables alt-screen and virtualized scrollback.
139
+ */
140
+ export function isMouseTrackingEnabled(): boolean {
141
+ return !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_MOUSE)
142
+ }
143
+
144
+ /**
145
+ * Whether mouse click handling is disabled (clicks/drags ignored, wheel still
146
+ * works). Set CLAUDE_CODE_DISABLE_MOUSE_CLICKS=1 to prevent accidental clicks
147
+ * from triggering cursor positioning, text selection, or message expansion.
148
+ *
149
+ * Fullscreen-specific — only reachable when CLAUDE_CODE_NO_FLICKER is active.
150
+ */
151
+ export function isMouseClicksDisabled(): boolean {
152
+ return isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_MOUSE_CLICKS)
153
+ }
154
+
155
+ /**
156
+ * True when the fullscreen alt-screen layout is actually rendering —
157
+ * requires an interactive REPL session AND the env var not explicitly
158
+ * set falsy. Headless paths (--print, SDK, in-process teammates) never
159
+ * enter fullscreen, so features that depend on alt-screen re-rendering
160
+ * should gate on this.
161
+ */
162
+ export function isFullscreenActive(): boolean {
163
+ return getIsInteractive() && isFullscreenEnvEnabled()
164
+ }
165
+
166
+ /**
167
+ * One-time hint for tmux users in fullscreen with `mouse off`.
168
+ *
169
+ * tmux's `mouse` option is session-scoped by design — there is no
170
+ * pane-level equivalent. We used to `tmux set mouse on` when entering
171
+ * alt-screen so wheel scrolling worked, but that changed mouse behavior
172
+ * for every sibling pane (vim, less, shell) and leaked on kill-pane or
173
+ * when multiple CC instances raced on restore. Now we leave tmux state
174
+ * alone — same as vim/less/htop — and just tell the user their options.
175
+ *
176
+ * Fire-and-forget from REPL startup. Returns the hint text once per
177
+ * session if TMUX is set, fullscreen is active, and tmux's current
178
+ * `mouse` option is off; null otherwise.
179
+ */
180
+ export async function maybeGetTmuxMouseHint(): Promise<string | null> {
181
+ if (!process.env.TMUX) return null
182
+ // tmux -CC auto-disables fullscreen above, but belt-and-suspenders.
183
+ if (!isFullscreenActive() || isTmuxControlMode()) return null
184
+ if (checkedTmuxMouseHint) return null
185
+ checkedTmuxMouseHint = true
186
+ // -A includes inherited values: `show -v mouse` returns empty when the
187
+ // option is set globally (`set -g mouse on` in .tmux.conf) but not at
188
+ // session level — which is the common case. -A gives the effective value.
189
+ const { stdout, code } = await execFileNoThrow(
190
+ 'tmux',
191
+ ['show', '-Av', 'mouse'],
192
+ { useCwd: false, timeout: 2000 },
193
+ )
194
+ if (code !== 0 || stdout.trim() === 'on') return null
195
+ return "tmux detected · scroll with PgUp/PgDn · or add 'set -g mouse on' to ~/.tmux.conf for wheel scroll"
196
+ }
197
+
198
+ /** Test-only: reset module-level once-per-session flags. */
199
+ export function _resetForTesting(): void {
200
+ loggedTmuxCcDisable = false
201
+ checkedTmuxMouseHint = false
202
+ }
@@ -0,0 +1,136 @@
1
+ import { basename, extname, posix, sep } from 'path'
2
+
3
+ /**
4
+ * File patterns that should be excluded from attribution.
5
+ * Based on GitHub Linguist vendored patterns and common generated file patterns.
6
+ */
7
+
8
+ // Exact file name matches (case-insensitive)
9
+ const EXCLUDED_FILENAMES = new Set([
10
+ 'package-lock.json',
11
+ 'yarn.lock',
12
+ 'pnpm-lock.yaml',
13
+ 'bun.lockb',
14
+ 'bun.lock',
15
+ 'composer.lock',
16
+ 'gemfile.lock',
17
+ 'cargo.lock',
18
+ 'poetry.lock',
19
+ 'pipfile.lock',
20
+ 'shrinkwrap.json',
21
+ 'npm-shrinkwrap.json',
22
+ ])
23
+
24
+ // File extension patterns (case-insensitive)
25
+ const EXCLUDED_EXTENSIONS = new Set([
26
+ '.lock',
27
+ '.min.js',
28
+ '.min.css',
29
+ '.min.html',
30
+ '.bundle.js',
31
+ '.bundle.css',
32
+ '.generated.ts',
33
+ '.generated.js',
34
+ '.d.ts', // TypeScript declaration files
35
+ ])
36
+
37
+ // Directory patterns that indicate generated/vendored content
38
+ const EXCLUDED_DIRECTORIES = [
39
+ '/dist/',
40
+ '/build/',
41
+ '/out/',
42
+ '/output/',
43
+ '/node_modules/',
44
+ '/vendor/',
45
+ '/vendored/',
46
+ '/third_party/',
47
+ '/third-party/',
48
+ '/external/',
49
+ '/.next/',
50
+ '/.nuxt/',
51
+ '/.svelte-kit/',
52
+ '/coverage/',
53
+ '/__pycache__/',
54
+ '/.tox/',
55
+ '/venv/',
56
+ '/.venv/',
57
+ '/target/release/',
58
+ '/target/debug/',
59
+ ]
60
+
61
+ // Filename patterns using regex for more complex matching
62
+ const EXCLUDED_FILENAME_PATTERNS = [
63
+ /^.*\.min\.[a-z]+$/i, // *.min.*
64
+ /^.*-min\.[a-z]+$/i, // *-min.*
65
+ /^.*\.bundle\.[a-z]+$/i, // *.bundle.*
66
+ /^.*\.generated\.[a-z]+$/i, // *.generated.*
67
+ /^.*\.gen\.[a-z]+$/i, // *.gen.*
68
+ /^.*\.auto\.[a-z]+$/i, // *.auto.*
69
+ /^.*_generated\.[a-z]+$/i, // *_generated.*
70
+ /^.*_gen\.[a-z]+$/i, // *_gen.*
71
+ /^.*\.pb\.(go|js|ts|py|rb)$/i, // Protocol buffer generated files
72
+ /^.*_pb2?\.py$/i, // Python protobuf files
73
+ /^.*\.pb\.h$/i, // C++ protobuf headers
74
+ /^.*\.grpc\.[a-z]+$/i, // gRPC generated files
75
+ /^.*\.swagger\.[a-z]+$/i, // Swagger generated files
76
+ /^.*\.openapi\.[a-z]+$/i, // OpenAPI generated files
77
+ ]
78
+
79
+ /**
80
+ * Check if a file should be excluded from attribution based on Linguist-style rules.
81
+ *
82
+ * @param filePath - Relative file path from repository root
83
+ * @returns true if the file should be excluded from attribution
84
+ */
85
+ export function isGeneratedFile(filePath: string): boolean {
86
+ // Normalize path separators for consistent pattern matching (patterns use posix-style /)
87
+ const normalizedPath =
88
+ posix.sep + filePath.split(sep).join(posix.sep).replace(/^\/+/, '')
89
+ const fileName = basename(filePath).toLowerCase()
90
+ const ext = extname(filePath).toLowerCase()
91
+
92
+ // Check exact filename matches
93
+ if (EXCLUDED_FILENAMES.has(fileName)) {
94
+ return true
95
+ }
96
+
97
+ // Check extension matches
98
+ if (EXCLUDED_EXTENSIONS.has(ext)) {
99
+ return true
100
+ }
101
+
102
+ // Check for compound extensions like .min.js
103
+ const parts = fileName.split('.')
104
+ if (parts.length > 2) {
105
+ const compoundExt = '.' + parts.slice(-2).join('.')
106
+ if (EXCLUDED_EXTENSIONS.has(compoundExt)) {
107
+ return true
108
+ }
109
+ }
110
+
111
+ // Check directory patterns
112
+ for (const dir of EXCLUDED_DIRECTORIES) {
113
+ if (normalizedPath.includes(dir)) {
114
+ return true
115
+ }
116
+ }
117
+
118
+ // Check filename patterns
119
+ for (const pattern of EXCLUDED_FILENAME_PATTERNS) {
120
+ if (pattern.test(fileName)) {
121
+ return true
122
+ }
123
+ }
124
+
125
+ return false
126
+ }
127
+
128
+ /**
129
+ * Filter a list of files to exclude generated files.
130
+ *
131
+ * @param files - Array of file paths
132
+ * @returns Array of files that are not generated
133
+ */
134
+ export function filterGeneratedFiles(files: string[]): string[] {
135
+ return files.filter(file => !isGeneratedFile(file))
136
+ }
@@ -0,0 +1,88 @@
1
+ const NO_VALUE = Symbol('NO_VALUE')
2
+
3
+ export async function lastX<A>(as: AsyncGenerator<A>): Promise<A> {
4
+ let lastValue: A | typeof NO_VALUE = NO_VALUE
5
+ for await (const a of as) {
6
+ lastValue = a
7
+ }
8
+ if (lastValue === NO_VALUE) {
9
+ throw new Error('No items in generator')
10
+ }
11
+ return lastValue
12
+ }
13
+
14
+ export async function returnValue<A>(
15
+ as: AsyncGenerator<unknown, A>,
16
+ ): Promise<A> {
17
+ let e
18
+ do {
19
+ e = await as.next()
20
+ } while (!e.done)
21
+ return e.value
22
+ }
23
+
24
+ type QueuedGenerator<A> = {
25
+ done: boolean | void
26
+ value: A | void
27
+ generator: AsyncGenerator<A, void>
28
+ promise: Promise<QueuedGenerator<A>>
29
+ }
30
+
31
+ // Run all generators concurrently up to a concurrency cap, yielding values as they come in
32
+ export async function* all<A>(
33
+ generators: AsyncGenerator<A, void>[],
34
+ concurrencyCap = Infinity,
35
+ ): AsyncGenerator<A, void> {
36
+ const next = (generator: AsyncGenerator<A, void>) => {
37
+ const promise: Promise<QueuedGenerator<A>> = generator
38
+ .next()
39
+ .then(({ done, value }) => ({
40
+ done,
41
+ value,
42
+ generator,
43
+ promise,
44
+ }))
45
+ return promise
46
+ }
47
+ const waiting = [...generators]
48
+ const promises = new Set<Promise<QueuedGenerator<A>>>()
49
+
50
+ // Start initial batch up to concurrency cap
51
+ while (promises.size < concurrencyCap && waiting.length > 0) {
52
+ const gen = waiting.shift()!
53
+ promises.add(next(gen))
54
+ }
55
+
56
+ while (promises.size > 0) {
57
+ const { done, value, generator, promise } = await Promise.race(promises)
58
+ promises.delete(promise)
59
+
60
+ if (!done) {
61
+ promises.add(next(generator))
62
+ // TODO: Clean this up
63
+ if (value !== undefined) {
64
+ yield value
65
+ }
66
+ } else if (waiting.length > 0) {
67
+ // Start a new generator when one finishes
68
+ const nextGen = waiting.shift()!
69
+ promises.add(next(nextGen))
70
+ }
71
+ }
72
+ }
73
+
74
+ export async function toArray<A>(
75
+ generator: AsyncGenerator<A, void>,
76
+ ): Promise<A[]> {
77
+ const result: A[] = []
78
+ for await (const a of generator) {
79
+ result.push(a)
80
+ }
81
+ return result
82
+ }
83
+
84
+ export async function* fromArray<T>(values: T[]): AsyncGenerator<T, void> {
85
+ for (const value of values) {
86
+ yield value
87
+ }
88
+ }
@@ -0,0 +1,184 @@
1
+ import {
2
+ execFileNoThrowWithCwd,
3
+ execSyncWithDefaults_DEPRECATED,
4
+ } from './execFileNoThrow.js'
5
+
6
+ // This file contains platform-agnostic implementations of common `ps` type commands.
7
+ // When adding new code to this file, make sure to handle:
8
+ // - Win32, as `ps` within cygwin and WSL may not behave as expected, particularly when attempting to access processes on the host.
9
+ // - Unix vs BSD-style `ps` have different options.
10
+
11
+ /**
12
+ * Check if a process with the given PID is running (signal 0 probe).
13
+ *
14
+ * PID ≤ 1 returns false (0 is current process group, 1 is init).
15
+ *
16
+ * Note: `process.kill(pid, 0)` throws EPERM when the process exists but is
17
+ * owned by another user. This reports such processes as NOT running, which
18
+ * is conservative for lock recovery (we won't steal a live lock).
19
+ */
20
+ export function isProcessRunning(pid: number): boolean {
21
+ if (pid <= 1) return false
22
+ try {
23
+ process.kill(pid, 0)
24
+ return true
25
+ } catch {
26
+ return false
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Gets the ancestor process chain for a given process (up to maxDepth levels)
32
+ * @param pid - The starting process ID
33
+ * @param maxDepth - Maximum number of ancestors to fetch (default: 10)
34
+ * @returns Array of ancestor PIDs from immediate parent to furthest ancestor
35
+ */
36
+ export async function getAncestorPidsAsync(
37
+ pid: string | number,
38
+ maxDepth = 10,
39
+ ): Promise<number[]> {
40
+ if (process.platform === 'win32') {
41
+ // For Windows, use a PowerShell script that walks the process tree
42
+ const script = `
43
+ $pid = ${String(pid)}
44
+ $ancestors = @()
45
+ for ($i = 0; $i -lt ${maxDepth}; $i++) {
46
+ $proc = Get-CimInstance Win32_Process -Filter "ProcessId=$pid" -ErrorAction SilentlyContinue
47
+ if (-not $proc -or -not $proc.ParentProcessId -or $proc.ParentProcessId -eq 0) { break }
48
+ $pid = $proc.ParentProcessId
49
+ $ancestors += $pid
50
+ }
51
+ $ancestors -join ','
52
+ `.trim()
53
+
54
+ const result = await execFileNoThrowWithCwd(
55
+ 'powershell.exe',
56
+ ['-NoProfile', '-Command', script],
57
+ { timeout: 3000 },
58
+ )
59
+ if (result.code !== 0 || !result.stdout?.trim()) {
60
+ return []
61
+ }
62
+ return result.stdout
63
+ .trim()
64
+ .split(',')
65
+ .filter(Boolean)
66
+ .map(p => parseInt(p, 10))
67
+ .filter(p => !isNaN(p))
68
+ }
69
+
70
+ // For Unix, use a shell command that walks up the process tree
71
+ // This uses a single process invocation instead of multiple sequential calls
72
+ const script = `pid=${String(pid)}; for i in $(seq 1 ${maxDepth}); do ppid=$(ps -o ppid= -p $pid 2>/dev/null | tr -d ' '); if [ -z "$ppid" ] || [ "$ppid" = "0" ] || [ "$ppid" = "1" ]; then break; fi; echo $ppid; pid=$ppid; done`
73
+
74
+ const result = await execFileNoThrowWithCwd('sh', ['-c', script], {
75
+ timeout: 3000,
76
+ })
77
+ if (result.code !== 0 || !result.stdout?.trim()) {
78
+ return []
79
+ }
80
+ return result.stdout
81
+ .trim()
82
+ .split('\n')
83
+ .filter(Boolean)
84
+ .map(p => parseInt(p, 10))
85
+ .filter(p => !isNaN(p))
86
+ }
87
+
88
+ /**
89
+ * Gets the command line for a given process
90
+ * @param pid - The process ID to get the command for
91
+ * @returns The command line string, or null if not found
92
+ * @deprecated Use getAncestorCommandsAsync instead
93
+ */
94
+ export function getProcessCommand(pid: string | number): string | null {
95
+ try {
96
+ const pidStr = String(pid)
97
+ const command =
98
+ process.platform === 'win32'
99
+ ? `powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ProcessId=${pidStr}\\").CommandLine"`
100
+ : `ps -o command= -p ${pidStr}`
101
+
102
+ const result = execSyncWithDefaults_DEPRECATED(command, { timeout: 1000 })
103
+ return result ? result.trim() : null
104
+ } catch {
105
+ return null
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Gets the command lines for a process and its ancestors in a single call
111
+ * @param pid - The starting process ID
112
+ * @param maxDepth - Maximum depth to traverse (default: 10)
113
+ * @returns Array of command strings for the process chain
114
+ */
115
+ export async function getAncestorCommandsAsync(
116
+ pid: string | number,
117
+ maxDepth = 10,
118
+ ): Promise<string[]> {
119
+ if (process.platform === 'win32') {
120
+ // For Windows, use a PowerShell script that walks the process tree and collects commands
121
+ const script = `
122
+ $currentPid = ${String(pid)}
123
+ $commands = @()
124
+ for ($i = 0; $i -lt ${maxDepth}; $i++) {
125
+ $proc = Get-CimInstance Win32_Process -Filter "ProcessId=$currentPid" -ErrorAction SilentlyContinue
126
+ if (-not $proc) { break }
127
+ if ($proc.CommandLine) { $commands += $proc.CommandLine }
128
+ if (-not $proc.ParentProcessId -or $proc.ParentProcessId -eq 0) { break }
129
+ $currentPid = $proc.ParentProcessId
130
+ }
131
+ $commands -join [char]0
132
+ `.trim()
133
+
134
+ const result = await execFileNoThrowWithCwd(
135
+ 'powershell.exe',
136
+ ['-NoProfile', '-Command', script],
137
+ { timeout: 3000 },
138
+ )
139
+ if (result.code !== 0 || !result.stdout?.trim()) {
140
+ return []
141
+ }
142
+ return result.stdout.split('\0').filter(Boolean)
143
+ }
144
+
145
+ // For Unix, use a shell command that walks up the process tree and collects commands
146
+ // Using null byte as separator to handle commands with newlines
147
+ const script = `currentpid=${String(pid)}; for i in $(seq 1 ${maxDepth}); do cmd=$(ps -o command= -p $currentpid 2>/dev/null); if [ -n "$cmd" ]; then printf '%s\\0' "$cmd"; fi; ppid=$(ps -o ppid= -p $currentpid 2>/dev/null | tr -d ' '); if [ -z "$ppid" ] || [ "$ppid" = "0" ] || [ "$ppid" = "1" ]; then break; fi; currentpid=$ppid; done`
148
+
149
+ const result = await execFileNoThrowWithCwd('sh', ['-c', script], {
150
+ timeout: 3000,
151
+ })
152
+ if (result.code !== 0 || !result.stdout?.trim()) {
153
+ return []
154
+ }
155
+ return result.stdout.split('\0').filter(Boolean)
156
+ }
157
+
158
+ /**
159
+ * Gets the child process IDs for a given process
160
+ * @param pid - The parent process ID
161
+ * @returns Array of child process IDs as numbers
162
+ */
163
+ export function getChildPids(pid: string | number): number[] {
164
+ try {
165
+ const pidStr = String(pid)
166
+ const command =
167
+ process.platform === 'win32'
168
+ ? `powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ParentProcessId=${pidStr}\\").ProcessId"`
169
+ : `pgrep -P ${pidStr}`
170
+
171
+ const result = execSyncWithDefaults_DEPRECATED(command, { timeout: 1000 })
172
+ if (!result) {
173
+ return []
174
+ }
175
+ return result
176
+ .trim()
177
+ .split('\n')
178
+ .filter(Boolean)
179
+ .map(p => parseInt(p, 10))
180
+ .filter(p => !isNaN(p))
181
+ } catch {
182
+ return []
183
+ }
184
+ }
@@ -0,0 +1,70 @@
1
+ import { sep } from 'path'
2
+ import { logEvent } from '../services/analytics/index.js'
3
+ import { execFileNoThrowWithCwd } from './execFileNoThrow.js'
4
+ import { gitExe } from './git.js'
5
+
6
+ /**
7
+ * Returns the paths of all worktrees for the current git repository.
8
+ * If git is not available, not in a git repo, or only has one worktree,
9
+ * returns an empty array.
10
+ *
11
+ * This version includes analytics tracking and uses the CLI's gitExe()
12
+ * resolver. For a portable version without CLI deps, use
13
+ * getWorktreePathsPortable().
14
+ *
15
+ * @param cwd Directory to run the command from
16
+ * @returns Array of absolute worktree paths
17
+ */
18
+ export async function getWorktreePaths(cwd: string): Promise<string[]> {
19
+ const startTime = Date.now()
20
+
21
+ const { stdout, code } = await execFileNoThrowWithCwd(
22
+ gitExe(),
23
+ ['worktree', 'list', '--porcelain'],
24
+ {
25
+ cwd,
26
+ preserveOutputOnError: false,
27
+ },
28
+ )
29
+
30
+ const durationMs = Date.now() - startTime
31
+
32
+ if (code !== 0) {
33
+ logEvent('tengu_worktree_detection', {
34
+ duration_ms: durationMs,
35
+ worktree_count: 0,
36
+ success: false,
37
+ })
38
+ return []
39
+ }
40
+
41
+ // Parse porcelain output - lines starting with "worktree " contain paths
42
+ // Example:
43
+ // worktree /Users/foo/repo
44
+ // HEAD abc123
45
+ // branch refs/heads/main
46
+ //
47
+ // worktree /Users/foo/repo-wt1
48
+ // HEAD def456
49
+ // branch refs/heads/feature
50
+ const worktreePaths = stdout
51
+ .split('\n')
52
+ .filter(line => line.startsWith('worktree '))
53
+ .map(line => line.slice('worktree '.length).normalize('NFC'))
54
+
55
+ logEvent('tengu_worktree_detection', {
56
+ duration_ms: durationMs,
57
+ worktree_count: worktreePaths.length,
58
+ success: true,
59
+ })
60
+
61
+ // Sort worktrees: current worktree first, then alphabetically
62
+ const currentWorktree = worktreePaths.find(
63
+ path => cwd === path || cwd.startsWith(path + sep),
64
+ )
65
+ const otherWorktrees = worktreePaths
66
+ .filter(path => path !== currentWorktree)
67
+ .sort((a, b) => a.localeCompare(b))
68
+
69
+ return currentWorktree ? [currentWorktree, ...otherWorktrees] : otherWorktrees
70
+ }