@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,75 @@
1
+ import { sep } from 'path'
2
+ import { getOriginalCwd } from '../bootstrap/state.js'
3
+ import type { LogOption } from '../types/logs.js'
4
+ import { quote } from './bash/shellQuote.js'
5
+ import { getSessionIdFromLog } from './sessionStorage.js'
6
+
7
+ export type CrossProjectResumeResult =
8
+ | {
9
+ isCrossProject: false
10
+ }
11
+ | {
12
+ isCrossProject: true
13
+ isSameRepoWorktree: true
14
+ projectPath: string
15
+ }
16
+ | {
17
+ isCrossProject: true
18
+ isSameRepoWorktree: false
19
+ command: string
20
+ projectPath: string
21
+ }
22
+
23
+ /**
24
+ * Check if a log is from a different project directory and determine
25
+ * whether it's a related worktree or a completely different project.
26
+ *
27
+ * For same-repo worktrees, we can resume directly without requiring cd.
28
+ * For different projects, we generate the cd command.
29
+ */
30
+ export function checkCrossProjectResume(
31
+ log: LogOption,
32
+ showAllProjects: boolean,
33
+ worktreePaths: string[],
34
+ ): CrossProjectResumeResult {
35
+ const currentCwd = getOriginalCwd()
36
+
37
+ if (!showAllProjects || !log.projectPath || log.projectPath === currentCwd) {
38
+ return { isCrossProject: false }
39
+ }
40
+
41
+ // Gate worktree detection to ants only for staged rollout
42
+ if (process.env.USER_TYPE !== 'ant') {
43
+ const sessionId = getSessionIdFromLog(log)
44
+ const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
45
+ return {
46
+ isCrossProject: true,
47
+ isSameRepoWorktree: false,
48
+ command,
49
+ projectPath: log.projectPath,
50
+ }
51
+ }
52
+
53
+ // Check if log.projectPath is under a worktree of the same repo
54
+ const isSameRepo = worktreePaths.some(
55
+ wt => log.projectPath === wt || log.projectPath!.startsWith(wt + sep),
56
+ )
57
+
58
+ if (isSameRepo) {
59
+ return {
60
+ isCrossProject: true,
61
+ isSameRepoWorktree: true,
62
+ projectPath: log.projectPath,
63
+ }
64
+ }
65
+
66
+ // Different repo - generate cd command
67
+ const sessionId = getSessionIdFromLog(log)
68
+ const command = `cd ${quote([log.projectPath])} && claude --resume ${sessionId}`
69
+ return {
70
+ isCrossProject: true,
71
+ isSameRepoWorktree: false,
72
+ command,
73
+ projectPath: log.projectPath,
74
+ }
75
+ }
@@ -0,0 +1,13 @@
1
+ // Indirection point for the package.json "browser" field. When bun builds
2
+ // browser-sdk.js with --target browser, this file is swapped for
3
+ // crypto.browser.ts — avoiding a ~500KB crypto-browserify polyfill that Bun
4
+ // would otherwise inline for `import ... from 'crypto'`. Node/bun builds use
5
+ // this file unchanged.
6
+ //
7
+ // NOTE: `export { randomUUID } from 'crypto'` (re-export syntax) breaks under
8
+ // bun-internal's bytecode compilation — the generated bytecode shows the
9
+ // import but the binding doesn't link (`ReferenceError: randomUUID is not
10
+ // defined`). The explicit import-then-export below produces a correct live
11
+ // binding. See integration-tests-ant-native failure on PR #20957/#21178.
12
+ import { randomUUID } from 'crypto'
13
+ export { randomUUID }
package/utils/cwd.ts ADDED
@@ -0,0 +1,32 @@
1
+ import { AsyncLocalStorage } from 'async_hooks'
2
+ import { getCwdState, getOriginalCwd } from '../bootstrap/state.js'
3
+
4
+ const cwdOverrideStorage = new AsyncLocalStorage<string>()
5
+
6
+ /**
7
+ * Run a function with an overridden working directory for the current async context.
8
+ * All calls to pwd()/getCwd() within the function (and its async descendants) will
9
+ * return the overridden cwd instead of the global one. This enables concurrent
10
+ * agents to each see their own working directory without affecting each other.
11
+ */
12
+ export function runWithCwdOverride<T>(cwd: string, fn: () => T): T {
13
+ return cwdOverrideStorage.run(cwd, fn)
14
+ }
15
+
16
+ /**
17
+ * Get the current working directory
18
+ */
19
+ export function pwd(): string {
20
+ return cwdOverrideStorage.getStore() ?? getCwdState()
21
+ }
22
+
23
+ /**
24
+ * Get the current working directory or the original working directory if the current one is not available
25
+ */
26
+ export function getCwd(): string {
27
+ try {
28
+ return pwd()
29
+ } catch {
30
+ return getOriginalCwd()
31
+ }
32
+ }
package/utils/debug.ts ADDED
@@ -0,0 +1,268 @@
1
+ import { appendFile, mkdir, symlink, unlink } from 'fs/promises'
2
+ import memoize from 'lodash-es/memoize.js'
3
+ import { dirname, join } from 'path'
4
+ import { getSessionId } from 'src/bootstrap/state.js'
5
+
6
+ import { type BufferedWriter, createBufferedWriter } from './bufferedWriter.js'
7
+ import { registerCleanup } from './cleanupRegistry.js'
8
+ import {
9
+ type DebugFilter,
10
+ parseDebugFilter,
11
+ shouldShowDebugMessage,
12
+ } from './debugFilter.js'
13
+ import { getClaudeConfigHomeDir, isEnvTruthy } from './envUtils.js'
14
+ import { getFsImplementation } from './fsOperations.js'
15
+ import { writeToStderr } from './process.js'
16
+ import { jsonStringify } from './slowOperations.js'
17
+
18
+ export type DebugLogLevel = 'verbose' | 'debug' | 'info' | 'warn' | 'error'
19
+
20
+ const LEVEL_ORDER: Record<DebugLogLevel, number> = {
21
+ verbose: 0,
22
+ debug: 1,
23
+ info: 2,
24
+ warn: 3,
25
+ error: 4,
26
+ }
27
+
28
+ /**
29
+ * Minimum log level to include in debug output. Defaults to 'debug', which
30
+ * filters out 'verbose' messages. Set CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose to
31
+ * include high-volume diagnostics (e.g. full statusLine command, shell, cwd,
32
+ * stdout/stderr) that would otherwise drown out useful debug output.
33
+ */
34
+ export const getMinDebugLogLevel = memoize((): DebugLogLevel => {
35
+ const raw = process.env.CLAUDE_CODE_DEBUG_LOG_LEVEL?.toLowerCase().trim()
36
+ if (raw && Object.hasOwn(LEVEL_ORDER, raw)) {
37
+ return raw as DebugLogLevel
38
+ }
39
+ return 'debug'
40
+ })
41
+
42
+ let runtimeDebugEnabled = false
43
+
44
+ export const isDebugMode = memoize((): boolean => {
45
+ return (
46
+ runtimeDebugEnabled ||
47
+ isEnvTruthy(process.env.DEBUG) ||
48
+ isEnvTruthy(process.env.DEBUG_SDK) ||
49
+ process.argv.includes('--debug') ||
50
+ process.argv.includes('-d') ||
51
+ isDebugToStdErr() ||
52
+ // Also check for --debug=pattern syntax
53
+ process.argv.some(arg => arg.startsWith('--debug=')) ||
54
+ // --debug-file implicitly enables debug mode
55
+ getDebugFilePath() !== null
56
+ )
57
+ })
58
+
59
+ /**
60
+ * Enables debug logging mid-session (e.g. via /debug). Non-ants don't write
61
+ * debug logs by default, so this lets them start capturing without restarting
62
+ * with --debug. Returns true if logging was already active.
63
+ */
64
+ export function enableDebugLogging(): boolean {
65
+ const wasActive = isDebugMode() || process.env.USER_TYPE === 'ant'
66
+ runtimeDebugEnabled = true
67
+ isDebugMode.cache.clear?.()
68
+ return wasActive
69
+ }
70
+
71
+ // Extract and parse debug filter from command line arguments
72
+ // Exported for testing purposes
73
+ export const getDebugFilter = memoize((): DebugFilter | null => {
74
+ // Look for --debug=pattern in argv
75
+ const debugArg = process.argv.find(arg => arg.startsWith('--debug='))
76
+ if (!debugArg) {
77
+ return null
78
+ }
79
+
80
+ // Extract the pattern after the equals sign
81
+ const filterPattern = debugArg.substring('--debug='.length)
82
+ return parseDebugFilter(filterPattern)
83
+ })
84
+
85
+ export const isDebugToStdErr = memoize((): boolean => {
86
+ return (
87
+ process.argv.includes('--debug-to-stderr') || process.argv.includes('-d2e')
88
+ )
89
+ })
90
+
91
+ export const getDebugFilePath = memoize((): string | null => {
92
+ for (let i = 0; i < process.argv.length; i++) {
93
+ const arg = process.argv[i]!
94
+ if (arg.startsWith('--debug-file=')) {
95
+ return arg.substring('--debug-file='.length)
96
+ }
97
+ if (arg === '--debug-file' && i + 1 < process.argv.length) {
98
+ return process.argv[i + 1]!
99
+ }
100
+ }
101
+ return null
102
+ })
103
+
104
+ function shouldLogDebugMessage(message: string): boolean {
105
+ if (process.env.NODE_ENV === 'test' && !isDebugToStdErr()) {
106
+ return false
107
+ }
108
+
109
+ // Non-ants only write debug logs when debug mode is active (via --debug at
110
+ // startup or /debug mid-session). Ants always log for /share, bug reports.
111
+ if (process.env.USER_TYPE !== 'ant' && !isDebugMode()) {
112
+ return false
113
+ }
114
+
115
+ if (
116
+ typeof process === 'undefined' ||
117
+ typeof process.versions === 'undefined' ||
118
+ typeof process.versions.node === 'undefined'
119
+ ) {
120
+ return false
121
+ }
122
+
123
+ const filter = getDebugFilter()
124
+ return shouldShowDebugMessage(message, filter)
125
+ }
126
+
127
+ let hasFormattedOutput = false
128
+ export function setHasFormattedOutput(value: boolean): void {
129
+ hasFormattedOutput = value
130
+ }
131
+ export function getHasFormattedOutput(): boolean {
132
+ return hasFormattedOutput
133
+ }
134
+
135
+ let debugWriter: BufferedWriter | null = null
136
+ let pendingWrite: Promise<void> = Promise.resolve()
137
+
138
+ // Module-level so .bind captures only its explicit args, not the
139
+ // writeFn closure's parent scope (Jarred, #22257).
140
+ async function appendAsync(
141
+ needMkdir: boolean,
142
+ dir: string,
143
+ path: string,
144
+ content: string,
145
+ ): Promise<void> {
146
+ if (needMkdir) {
147
+ await mkdir(dir, { recursive: true }).catch(() => {})
148
+ }
149
+ await appendFile(path, content)
150
+ void updateLatestDebugLogSymlink()
151
+ }
152
+
153
+ function noop(): void {}
154
+
155
+ function getDebugWriter(): BufferedWriter {
156
+ if (!debugWriter) {
157
+ let ensuredDir: string | null = null
158
+ debugWriter = createBufferedWriter({
159
+ writeFn: content => {
160
+ const path = getDebugLogPath()
161
+ const dir = dirname(path)
162
+ const needMkdir = ensuredDir !== dir
163
+ ensuredDir = dir
164
+ if (isDebugMode()) {
165
+ // immediateMode: must stay sync. Async writes are lost on direct
166
+ // process.exit() and keep the event loop alive in beforeExit
167
+ // handlers (infinite loop with Perfetto tracing). See #22257.
168
+ if (needMkdir) {
169
+ try {
170
+ getFsImplementation().mkdirSync(dir)
171
+ } catch {
172
+ // Directory already exists
173
+ }
174
+ }
175
+ getFsImplementation().appendFileSync(path, content)
176
+ void updateLatestDebugLogSymlink()
177
+ return
178
+ }
179
+ // Buffered path (ants without --debug): flushes ~1/sec so chain
180
+ // depth stays ~1. .bind over a closure so only the bound args are
181
+ // retained, not this scope.
182
+ pendingWrite = pendingWrite
183
+ .then(appendAsync.bind(null, needMkdir, dir, path, content))
184
+ .catch(noop)
185
+ },
186
+ flushIntervalMs: 1000,
187
+ maxBufferSize: 100,
188
+ immediateMode: isDebugMode(),
189
+ })
190
+ registerCleanup(async () => {
191
+ debugWriter?.dispose()
192
+ await pendingWrite
193
+ })
194
+ }
195
+ return debugWriter
196
+ }
197
+
198
+ export async function flushDebugLogs(): Promise<void> {
199
+ debugWriter?.flush()
200
+ await pendingWrite
201
+ }
202
+
203
+ export function logForDebugging(
204
+ message: string,
205
+ { level }: { level: DebugLogLevel } = {
206
+ level: 'debug',
207
+ },
208
+ ): void {
209
+ if (LEVEL_ORDER[level] < LEVEL_ORDER[getMinDebugLogLevel()]) {
210
+ return
211
+ }
212
+ if (!shouldLogDebugMessage(message)) {
213
+ return
214
+ }
215
+
216
+ // Multiline messages break the jsonl output format, so make any multiline messages JSON.
217
+ if (hasFormattedOutput && message.includes('\n')) {
218
+ message = jsonStringify(message)
219
+ }
220
+ const timestamp = new Date().toISOString()
221
+ const output = `${timestamp} [${level.toUpperCase()}] ${message.trim()}\n`
222
+ if (isDebugToStdErr()) {
223
+ writeToStderr(output)
224
+ return
225
+ }
226
+
227
+ getDebugWriter().write(output)
228
+ }
229
+
230
+ export function getDebugLogPath(): string {
231
+ return (
232
+ getDebugFilePath() ??
233
+ process.env.CLAUDE_CODE_DEBUG_LOGS_DIR ??
234
+ join(getClaudeConfigHomeDir(), 'debug', `${getSessionId()}.txt`)
235
+ )
236
+ }
237
+
238
+ /**
239
+ * Updates the latest debug log symlink to point to the current debug log file.
240
+ * Creates or updates a symlink at ~/.claude/debug/latest
241
+ */
242
+ const updateLatestDebugLogSymlink = memoize(async (): Promise<void> => {
243
+ try {
244
+ const debugLogPath = getDebugLogPath()
245
+ const debugLogsDir = dirname(debugLogPath)
246
+ const latestSymlinkPath = join(debugLogsDir, 'latest')
247
+
248
+ await unlink(latestSymlinkPath).catch(() => {})
249
+ await symlink(debugLogPath, latestSymlinkPath)
250
+ } catch {
251
+ // Silently fail if symlink creation fails
252
+ }
253
+ })
254
+
255
+ /**
256
+ * Logs errors for Ants only, always visible in production.
257
+ */
258
+ export function logAntError(context: string, error: unknown): void {
259
+ if (process.env.USER_TYPE !== 'ant') {
260
+ return
261
+ }
262
+
263
+ if (error instanceof Error && error.stack) {
264
+ logForDebugging(`[ANT-ONLY] ${context} stack trace:\n${error.stack}`, {
265
+ level: 'error',
266
+ })
267
+ }
268
+ }
@@ -0,0 +1,157 @@
1
+ import memoize from 'lodash-es/memoize.js'
2
+
3
+ export type DebugFilter = {
4
+ include: string[]
5
+ exclude: string[]
6
+ isExclusive: boolean
7
+ }
8
+
9
+ /**
10
+ * Parse debug filter string into a filter configuration
11
+ * Examples:
12
+ * - "api,hooks" -> include only api and hooks categories
13
+ * - "!1p,!file" -> exclude logging and file categories
14
+ * - undefined/empty -> no filtering (show all)
15
+ */
16
+ export const parseDebugFilter = memoize(
17
+ (filterString?: string): DebugFilter | null => {
18
+ if (!filterString || filterString.trim() === '') {
19
+ return null
20
+ }
21
+
22
+ const filters = filterString
23
+ .split(',')
24
+ .map(f => f.trim())
25
+ .filter(Boolean)
26
+
27
+ // If no valid filters remain, return null
28
+ if (filters.length === 0) {
29
+ return null
30
+ }
31
+
32
+ // Check for mixed inclusive/exclusive filters
33
+ const hasExclusive = filters.some(f => f.startsWith('!'))
34
+ const hasInclusive = filters.some(f => !f.startsWith('!'))
35
+
36
+ if (hasExclusive && hasInclusive) {
37
+ // For now, we'll treat this as an error case and show all messages
38
+ // Log error using logForDebugging to avoid console.error lint rule
39
+ // We'll import and use it later when the circular dependency is resolved
40
+ // For now, just return null silently
41
+ return null
42
+ }
43
+
44
+ // Clean up filters (remove ! prefix) and normalize
45
+ const cleanFilters = filters.map(f => f.replace(/^!/, '').toLowerCase())
46
+
47
+ return {
48
+ include: hasExclusive ? [] : cleanFilters,
49
+ exclude: hasExclusive ? cleanFilters : [],
50
+ isExclusive: hasExclusive,
51
+ }
52
+ },
53
+ )
54
+
55
+ /**
56
+ * Extract debug categories from a message
57
+ * Supports multiple patterns:
58
+ * - "category: message" -> ["category"]
59
+ * - "[CATEGORY] message" -> ["category"]
60
+ * - "MCP server \"name\": message" -> ["mcp", "name"]
61
+ * - "[ANT-ONLY] 1P event: tengu_timer" -> ["ant-only", "1p"]
62
+ *
63
+ * Returns lowercase categories for case-insensitive matching
64
+ */
65
+ export function extractDebugCategories(message: string): string[] {
66
+ const categories: string[] = []
67
+
68
+ // Pattern 3: MCP server "servername" - Check this first to avoid false positives
69
+ const mcpMatch = message.match(/^MCP server ["']([^"']+)["']/)
70
+ if (mcpMatch && mcpMatch[1]) {
71
+ categories.push('mcp')
72
+ categories.push(mcpMatch[1].toLowerCase())
73
+ } else {
74
+ // Pattern 1: "category: message" (simple prefix) - only if not MCP pattern
75
+ const prefixMatch = message.match(/^([^:[]+):/)
76
+ if (prefixMatch && prefixMatch[1]) {
77
+ categories.push(prefixMatch[1].trim().toLowerCase())
78
+ }
79
+ }
80
+
81
+ // Pattern 2: [CATEGORY] at the start
82
+ const bracketMatch = message.match(/^\[([^\]]+)]/)
83
+ if (bracketMatch && bracketMatch[1]) {
84
+ categories.push(bracketMatch[1].trim().toLowerCase())
85
+ }
86
+
87
+ // Pattern 4: Check for additional categories in the message
88
+ // e.g., "[ANT-ONLY] 1P event: tengu_timer" should match both "ant-only" and "1p"
89
+ if (message.toLowerCase().includes('1p event:')) {
90
+ categories.push('1p')
91
+ }
92
+
93
+ // Pattern 5: Look for secondary categories after the first pattern
94
+ // e.g., "AutoUpdaterWrapper: Installation type: development"
95
+ const secondaryMatch = message.match(
96
+ /:\s*([^:]+?)(?:\s+(?:type|mode|status|event))?:/,
97
+ )
98
+ if (secondaryMatch && secondaryMatch[1]) {
99
+ const secondary = secondaryMatch[1].trim().toLowerCase()
100
+ // Only add if it's a reasonable category name (not too long, no spaces)
101
+ if (secondary.length < 30 && !secondary.includes(' ')) {
102
+ categories.push(secondary)
103
+ }
104
+ }
105
+
106
+ // If no categories found, return empty array (uncategorized)
107
+ return Array.from(new Set(categories)) // Remove duplicates
108
+ }
109
+
110
+ /**
111
+ * Check if debug message should be shown based on filter
112
+ * @param categories - Categories extracted from the message
113
+ * @param filter - Parsed filter configuration
114
+ * @returns true if message should be shown
115
+ */
116
+ export function shouldShowDebugCategories(
117
+ categories: string[],
118
+ filter: DebugFilter | null,
119
+ ): boolean {
120
+ // No filter means show everything
121
+ if (!filter) {
122
+ return true
123
+ }
124
+
125
+ // If no categories found, handle based on filter mode
126
+ if (categories.length === 0) {
127
+ // In exclusive mode, uncategorized messages are excluded by default for security
128
+ // In inclusive mode, uncategorized messages are excluded (must match a category)
129
+ return false
130
+ }
131
+
132
+ if (filter.isExclusive) {
133
+ // Exclusive mode: show if none of the categories are in the exclude list
134
+ return !categories.some(cat => filter.exclude.includes(cat))
135
+ } else {
136
+ // Inclusive mode: show if any of the categories are in the include list
137
+ return categories.some(cat => filter.include.includes(cat))
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Main function to check if a debug message should be shown
143
+ * Combines extraction and filtering
144
+ */
145
+ export function shouldShowDebugMessage(
146
+ message: string,
147
+ filter: DebugFilter | null,
148
+ ): boolean {
149
+ // Fast path: no filter means show everything
150
+ if (!filter) {
151
+ return true
152
+ }
153
+
154
+ // Only extract categories if we have a filter
155
+ const categories = extractDebugCategories(message)
156
+ return shouldShowDebugCategories(categories, filter)
157
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Deep Link Origin Banner
3
+ *
4
+ * Builds the warning text shown when a session was opened by an external
5
+ * claude-cli:// deep link. Linux xdg-open and browsers with "always allow"
6
+ * set dispatch the link with no OS-level confirmation, so the application
7
+ * provides its own provenance signal — mirroring claude.ai's security
8
+ * interstitial for external-source prefills.
9
+ *
10
+ * The user must press Enter to submit; this banner primes them to read the
11
+ * prompt (which may use homoglyphs or padding to hide instructions) and
12
+ * notice which directory — and therefore which CLAUDE.md — was loaded.
13
+ */
14
+
15
+ import { stat } from 'fs/promises'
16
+ import { homedir } from 'os'
17
+ import { join, sep } from 'path'
18
+ import { formatNumber, formatRelativeTimeAgo } from '../format.js'
19
+ import { getCommonDir } from '../git/gitFilesystem.js'
20
+ import { getGitDir } from '../git.js'
21
+
22
+ const STALE_FETCH_WARN_MS = 7 * 24 * 60 * 60 * 1000
23
+
24
+ /**
25
+ * Above this length, a pre-filled prompt no longer fits on one screen
26
+ * (~12-15 lines on an 80-col terminal). The banner switches from "review
27
+ * carefully" to an explicit "scroll to review the entire prompt" so a
28
+ * malicious tail buried past line 60 isn't silently off-screen.
29
+ */
30
+ const LONG_PREFILL_THRESHOLD = 1000
31
+
32
+ export type DeepLinkBannerInfo = {
33
+ /** Resolved working directory the session launched in. */
34
+ cwd: string
35
+ /** Length of the ?q= prompt pre-filled in the input box. Undefined = no prefill. */
36
+ prefillLength?: number
37
+ /** The ?repo= slug if the cwd was resolved from the githubRepoPaths MRU. */
38
+ repo?: string
39
+ /** Last-fetch timestamp for the repo (FETCH_HEAD mtime). Undefined = never fetched or not a git repo. */
40
+ lastFetch?: Date
41
+ }
42
+
43
+ /**
44
+ * Build the multi-line warning banner for a deep-link-originated session.
45
+ *
46
+ * Always shows the working directory so the user can see which CLAUDE.md
47
+ * will load. When the link pre-filled a prompt, adds a second line prompting
48
+ * the user to review it — the prompt itself is visible in the input box.
49
+ *
50
+ * When the cwd was resolved from a ?repo= slug, also shows the slug and the
51
+ * clone's last-fetch age so the user knows which local clone was selected
52
+ * and whether its CLAUDE.md may be stale relative to upstream.
53
+ */
54
+ export function buildDeepLinkBanner(info: DeepLinkBannerInfo): string {
55
+ const lines = [
56
+ `This session was opened by an external deep link in ${tildify(info.cwd)}`,
57
+ ]
58
+ if (info.repo) {
59
+ const age = info.lastFetch ? formatRelativeTimeAgo(info.lastFetch) : 'never'
60
+ const stale =
61
+ !info.lastFetch ||
62
+ Date.now() - info.lastFetch.getTime() > STALE_FETCH_WARN_MS
63
+ lines.push(
64
+ `Resolved ${info.repo} from local clones · last fetched ${age}${stale ? ' — CLAUDE.md may be stale' : ''}`,
65
+ )
66
+ }
67
+ if (info.prefillLength) {
68
+ lines.push(
69
+ info.prefillLength > LONG_PREFILL_THRESHOLD
70
+ ? `The prompt below (${formatNumber(info.prefillLength)} chars) was supplied by the link — scroll to review the entire prompt before pressing Enter.`
71
+ : 'The prompt below was supplied by the link — review carefully before pressing Enter.',
72
+ )
73
+ }
74
+ return lines.join('\n')
75
+ }
76
+
77
+ /**
78
+ * Read the mtime of .git/FETCH_HEAD, which git updates on every fetch or
79
+ * pull. Returns undefined if the directory is not a git repo or has never
80
+ * been fetched.
81
+ *
82
+ * FETCH_HEAD is per-worktree — fetching from the main worktree does not
83
+ * touch a sibling worktree's FETCH_HEAD. When cwd is a worktree, we check
84
+ * both and return whichever is newer so a recently-fetched main repo
85
+ * doesn't read as "never fetched" just because the deep link landed in
86
+ * a worktree.
87
+ */
88
+ export async function readLastFetchTime(
89
+ cwd: string,
90
+ ): Promise<Date | undefined> {
91
+ const gitDir = await getGitDir(cwd)
92
+ if (!gitDir) return undefined
93
+ const commonDir = await getCommonDir(gitDir)
94
+ const [local, common] = await Promise.all([
95
+ mtimeOrUndefined(join(gitDir, 'FETCH_HEAD')),
96
+ commonDir
97
+ ? mtimeOrUndefined(join(commonDir, 'FETCH_HEAD'))
98
+ : Promise.resolve(undefined),
99
+ ])
100
+ if (local && common) return local > common ? local : common
101
+ return local ?? common
102
+ }
103
+
104
+ async function mtimeOrUndefined(p: string): Promise<Date | undefined> {
105
+ try {
106
+ const { mtime } = await stat(p)
107
+ return mtime
108
+ } catch {
109
+ return undefined
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Shorten home-dir-prefixed paths to ~ notation for the banner.
115
+ * Not using getDisplayPath() because cwd is the current working directory,
116
+ * so the relative-path branch would collapse it to the empty string.
117
+ */
118
+ function tildify(p: string): string {
119
+ const home = homedir()
120
+ if (p === home) return '~'
121
+ if (p.startsWith(home + sep)) return '~' + p.slice(home.length)
122
+ return p
123
+ }