@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,825 @@
1
+ import { DiagLogLevel, diag, trace } from '@opentelemetry/api'
2
+ import { logs } from '@opentelemetry/api-logs'
3
+ // OTLP/Prometheus exporters are dynamically imported inside the protocol
4
+ // switch statements below. A process uses at most one protocol variant per
5
+ // signal, but static imports would load all 6 (~1.2MB) on every startup.
6
+ import {
7
+ envDetector,
8
+ hostDetector,
9
+ osDetector,
10
+ resourceFromAttributes,
11
+ } from '@opentelemetry/resources'
12
+ import {
13
+ BatchLogRecordProcessor,
14
+ ConsoleLogRecordExporter,
15
+ LoggerProvider,
16
+ } from '@opentelemetry/sdk-logs'
17
+ import {
18
+ ConsoleMetricExporter,
19
+ MeterProvider,
20
+ PeriodicExportingMetricReader,
21
+ } from '@opentelemetry/sdk-metrics'
22
+ import {
23
+ BasicTracerProvider,
24
+ BatchSpanProcessor,
25
+ ConsoleSpanExporter,
26
+ } from '@opentelemetry/sdk-trace-base'
27
+ import {
28
+ ATTR_SERVICE_NAME,
29
+ ATTR_SERVICE_VERSION,
30
+ SEMRESATTRS_HOST_ARCH,
31
+ } from '@opentelemetry/semantic-conventions'
32
+ import { HttpsProxyAgent } from 'https-proxy-agent'
33
+ import {
34
+ getLoggerProvider,
35
+ getMeterProvider,
36
+ getTracerProvider,
37
+ setEventLogger,
38
+ setLoggerProvider,
39
+ setMeterProvider,
40
+ setTracerProvider,
41
+ } from 'src/bootstrap/state.js'
42
+ import {
43
+ getOtelHeadersFromHelper,
44
+ getSubscriptionType,
45
+ is1PApiCustomer,
46
+ isClaudeAISubscriber,
47
+ } from 'src/utils/auth.js'
48
+ import { getPlatform, getWslVersion } from 'src/utils/platform.js'
49
+
50
+ import { getCACertificates } from '../caCerts.js'
51
+ import { registerCleanup } from '../cleanupRegistry.js'
52
+ import { getHasFormattedOutput, logForDebugging } from '../debug.js'
53
+ import { isEnvTruthy } from '../envUtils.js'
54
+ import { errorMessage } from '../errors.js'
55
+ import { getMTLSConfig } from '../mtls.js'
56
+ import { getProxyUrl, shouldBypassProxy } from '../proxy.js'
57
+ import { getSettings_DEPRECATED } from '../settings/settings.js'
58
+ import { jsonStringify } from '../slowOperations.js'
59
+ import { profileCheckpoint } from '../startupProfiler.js'
60
+ import { isBetaTracingEnabled } from './betaSessionTracing.js'
61
+ import { BigQueryMetricsExporter } from './bigqueryExporter.js'
62
+ import { ClaudeCodeDiagLogger } from './logger.js'
63
+ import { initializePerfettoTracing } from './perfettoTracing.js'
64
+ import {
65
+ endInteractionSpan,
66
+ isEnhancedTelemetryEnabled,
67
+ } from './sessionTracing.js'
68
+
69
+ const DEFAULT_METRICS_EXPORT_INTERVAL_MS = 60000
70
+ const DEFAULT_LOGS_EXPORT_INTERVAL_MS = 5000
71
+ const DEFAULT_TRACES_EXPORT_INTERVAL_MS = 5000
72
+
73
+ class TelemetryTimeoutError extends Error {}
74
+
75
+ function telemetryTimeout(ms: number, message: string): Promise<never> {
76
+ return new Promise((_, reject) => {
77
+ setTimeout(
78
+ (rej: (e: Error) => void, msg: string) =>
79
+ rej(new TelemetryTimeoutError(msg)),
80
+ ms,
81
+ reject,
82
+ message,
83
+ ).unref()
84
+ })
85
+ }
86
+
87
+ export function bootstrapTelemetry() {
88
+ if (process.env.USER_TYPE === 'ant') {
89
+ // Read from ANT_ prefixed variables that are defined at build time
90
+ if (process.env.ANT_OTEL_METRICS_EXPORTER) {
91
+ process.env.OTEL_METRICS_EXPORTER = process.env.ANT_OTEL_METRICS_EXPORTER
92
+ }
93
+ if (process.env.ANT_OTEL_LOGS_EXPORTER) {
94
+ process.env.OTEL_LOGS_EXPORTER = process.env.ANT_OTEL_LOGS_EXPORTER
95
+ }
96
+ if (process.env.ANT_OTEL_TRACES_EXPORTER) {
97
+ process.env.OTEL_TRACES_EXPORTER = process.env.ANT_OTEL_TRACES_EXPORTER
98
+ }
99
+ if (process.env.ANT_OTEL_EXPORTER_OTLP_PROTOCOL) {
100
+ process.env.OTEL_EXPORTER_OTLP_PROTOCOL =
101
+ process.env.ANT_OTEL_EXPORTER_OTLP_PROTOCOL
102
+ }
103
+ if (process.env.ANT_OTEL_EXPORTER_OTLP_ENDPOINT) {
104
+ process.env.OTEL_EXPORTER_OTLP_ENDPOINT =
105
+ process.env.ANT_OTEL_EXPORTER_OTLP_ENDPOINT
106
+ }
107
+ if (process.env.ANT_OTEL_EXPORTER_OTLP_HEADERS) {
108
+ process.env.OTEL_EXPORTER_OTLP_HEADERS =
109
+ process.env.ANT_OTEL_EXPORTER_OTLP_HEADERS
110
+ }
111
+ }
112
+
113
+ // Set default tempoality to 'delta' because it's the more sane default
114
+ if (!process.env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE) {
115
+ process.env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = 'delta'
116
+ }
117
+ }
118
+
119
+ // Per OTEL spec, "none" means "no automatically configured exporter for this signal".
120
+ // https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/#exporter-selection
121
+ export function parseExporterTypes(value: string | undefined): string[] {
122
+ return (value || '')
123
+ .trim()
124
+ .split(',')
125
+ .filter(Boolean)
126
+ .map(t => t.trim())
127
+ .filter(t => t !== 'none')
128
+ }
129
+
130
+ async function getOtlpReaders() {
131
+ const exporterTypes = parseExporterTypes(process.env.OTEL_METRICS_EXPORTER)
132
+ const exportInterval = parseInt(
133
+ process.env.OTEL_METRIC_EXPORT_INTERVAL ||
134
+ DEFAULT_METRICS_EXPORT_INTERVAL_MS.toString(),
135
+ )
136
+
137
+ const exporters = []
138
+ for (const exporterType of exporterTypes) {
139
+ if (exporterType === 'console') {
140
+ // Custom console exporter that shows resource attributes
141
+ const consoleExporter = new ConsoleMetricExporter()
142
+ const originalExport = consoleExporter.export.bind(consoleExporter)
143
+
144
+ consoleExporter.export = (metrics, callback) => {
145
+ // Log resource attributes once at the start
146
+ if (metrics.resource && metrics.resource.attributes) {
147
+ // The console exporter is for debugging, so console output is intentional here
148
+
149
+ logForDebugging('\n=== Resource Attributes ===')
150
+ logForDebugging(jsonStringify(metrics.resource.attributes))
151
+ logForDebugging('===========================\n')
152
+ }
153
+
154
+ return originalExport(metrics, callback)
155
+ }
156
+
157
+ exporters.push(consoleExporter)
158
+ } else if (exporterType === 'otlp') {
159
+ const protocol =
160
+ process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL?.trim() ||
161
+ process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim()
162
+
163
+ const httpConfig = getOTLPExporterConfig()
164
+
165
+ switch (protocol) {
166
+ case 'grpc': {
167
+ // Lazy-import to keep @grpc/grpc-js (~700KB) out of the telemetry chunk
168
+ // when the protocol is http/protobuf (ant default) or http/json.
169
+ const { OTLPMetricExporter } = await import(
170
+ '@opentelemetry/exporter-metrics-otlp-grpc'
171
+ )
172
+ exporters.push(new OTLPMetricExporter())
173
+ break
174
+ }
175
+ case 'http/json': {
176
+ const { OTLPMetricExporter } = await import(
177
+ '@opentelemetry/exporter-metrics-otlp-http'
178
+ )
179
+ exporters.push(new OTLPMetricExporter(httpConfig))
180
+ break
181
+ }
182
+ case 'http/protobuf': {
183
+ const { OTLPMetricExporter } = await import(
184
+ '@opentelemetry/exporter-metrics-otlp-proto'
185
+ )
186
+ exporters.push(new OTLPMetricExporter(httpConfig))
187
+ break
188
+ }
189
+ default:
190
+ throw new Error(
191
+ `Unknown protocol set in OTEL_EXPORTER_OTLP_METRICS_PROTOCOL or OTEL_EXPORTER_OTLP_PROTOCOL env var: ${protocol}`,
192
+ )
193
+ }
194
+ } else if (exporterType === 'prometheus') {
195
+ const { PrometheusExporter } = await import(
196
+ '@opentelemetry/exporter-prometheus'
197
+ )
198
+ exporters.push(new PrometheusExporter())
199
+ } else {
200
+ throw new Error(
201
+ `Unknown exporter type set in OTEL_EXPORTER_OTLP_METRICS_PROTOCOL or OTEL_EXPORTER_OTLP_PROTOCOL env var: ${exporterType}`,
202
+ )
203
+ }
204
+ }
205
+
206
+ return exporters.map(exporter => {
207
+ if ('export' in exporter) {
208
+ return new PeriodicExportingMetricReader({
209
+ exporter,
210
+ exportIntervalMillis: exportInterval,
211
+ })
212
+ }
213
+ return exporter
214
+ })
215
+ }
216
+
217
+ async function getOtlpLogExporters() {
218
+ const exporterTypes = parseExporterTypes(process.env.OTEL_LOGS_EXPORTER)
219
+
220
+ const protocol =
221
+ process.env.OTEL_EXPORTER_OTLP_LOGS_PROTOCOL?.trim() ||
222
+ process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim()
223
+ const endpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT
224
+
225
+ logForDebugging(
226
+ `[3P telemetry] getOtlpLogExporters: types=${jsonStringify(exporterTypes)}, protocol=${protocol}, endpoint=${endpoint}`,
227
+ )
228
+
229
+ const exporters = []
230
+ for (const exporterType of exporterTypes) {
231
+ if (exporterType === 'console') {
232
+ exporters.push(new ConsoleLogRecordExporter())
233
+ } else if (exporterType === 'otlp') {
234
+ const httpConfig = getOTLPExporterConfig()
235
+
236
+ switch (protocol) {
237
+ case 'grpc': {
238
+ const { OTLPLogExporter } = await import(
239
+ '@opentelemetry/exporter-logs-otlp-grpc'
240
+ )
241
+ exporters.push(new OTLPLogExporter())
242
+ break
243
+ }
244
+ case 'http/json': {
245
+ const { OTLPLogExporter } = await import(
246
+ '@opentelemetry/exporter-logs-otlp-http'
247
+ )
248
+ exporters.push(new OTLPLogExporter(httpConfig))
249
+ break
250
+ }
251
+ case 'http/protobuf': {
252
+ const { OTLPLogExporter } = await import(
253
+ '@opentelemetry/exporter-logs-otlp-proto'
254
+ )
255
+ exporters.push(new OTLPLogExporter(httpConfig))
256
+ break
257
+ }
258
+ default:
259
+ throw new Error(
260
+ `Unknown protocol set in OTEL_EXPORTER_OTLP_LOGS_PROTOCOL or OTEL_EXPORTER_OTLP_PROTOCOL env var: ${protocol}`,
261
+ )
262
+ }
263
+ } else {
264
+ throw new Error(
265
+ `Unknown exporter type set in OTEL_LOGS_EXPORTER env var: ${exporterType}`,
266
+ )
267
+ }
268
+ }
269
+
270
+ return exporters
271
+ }
272
+
273
+ async function getOtlpTraceExporters() {
274
+ const exporterTypes = parseExporterTypes(process.env.OTEL_TRACES_EXPORTER)
275
+
276
+ const exporters = []
277
+ for (const exporterType of exporterTypes) {
278
+ if (exporterType === 'console') {
279
+ exporters.push(new ConsoleSpanExporter())
280
+ } else if (exporterType === 'otlp') {
281
+ const protocol =
282
+ process.env.OTEL_EXPORTER_OTLP_TRACES_PROTOCOL?.trim() ||
283
+ process.env.OTEL_EXPORTER_OTLP_PROTOCOL?.trim()
284
+
285
+ const httpConfig = getOTLPExporterConfig()
286
+
287
+ switch (protocol) {
288
+ case 'grpc': {
289
+ const { OTLPTraceExporter } = await import(
290
+ '@opentelemetry/exporter-trace-otlp-grpc'
291
+ )
292
+ exporters.push(new OTLPTraceExporter())
293
+ break
294
+ }
295
+ case 'http/json': {
296
+ const { OTLPTraceExporter } = await import(
297
+ '@opentelemetry/exporter-trace-otlp-http'
298
+ )
299
+ exporters.push(new OTLPTraceExporter(httpConfig))
300
+ break
301
+ }
302
+ case 'http/protobuf': {
303
+ const { OTLPTraceExporter } = await import(
304
+ '@opentelemetry/exporter-trace-otlp-proto'
305
+ )
306
+ exporters.push(new OTLPTraceExporter(httpConfig))
307
+ break
308
+ }
309
+ default:
310
+ throw new Error(
311
+ `Unknown protocol set in OTEL_EXPORTER_OTLP_TRACES_PROTOCOL or OTEL_EXPORTER_OTLP_PROTOCOL env var: ${protocol}`,
312
+ )
313
+ }
314
+ } else {
315
+ throw new Error(
316
+ `Unknown exporter type set in OTEL_TRACES_EXPORTER env var: ${exporterType}`,
317
+ )
318
+ }
319
+ }
320
+
321
+ return exporters
322
+ }
323
+
324
+ export function isTelemetryEnabled() {
325
+ return isEnvTruthy(process.env.CLAUDE_CODE_ENABLE_TELEMETRY)
326
+ }
327
+
328
+ function getBigQueryExportingReader() {
329
+ const bigqueryExporter = new BigQueryMetricsExporter()
330
+ return new PeriodicExportingMetricReader({
331
+ exporter: bigqueryExporter,
332
+ exportIntervalMillis: 5 * 60 * 1000, // 5mins for BigQuery metrics exporter to reduce load
333
+ })
334
+ }
335
+
336
+ function isBigQueryMetricsEnabled() {
337
+ // BigQuery metrics are enabled for:
338
+ // 1. API customers (excluding Claude.ai subscribers and Bedrock/Vertex)
339
+ // 2. Claude for Enterprise (C4E) users
340
+ // 3. Claude for Teams users
341
+ const subscriptionType = getSubscriptionType()
342
+ const isC4EOrTeamUser =
343
+ isClaudeAISubscriber() &&
344
+ (subscriptionType === 'enterprise' || subscriptionType === 'team')
345
+
346
+ return is1PApiCustomer() || isC4EOrTeamUser
347
+ }
348
+
349
+ /**
350
+ * Initialize beta tracing - a separate code path for detailed debugging.
351
+ * Uses BETA_TRACING_ENDPOINT instead of OTEL_EXPORTER_OTLP_ENDPOINT.
352
+ */
353
+ async function initializeBetaTracing(
354
+ resource: ReturnType<typeof resourceFromAttributes>,
355
+ ): Promise<void> {
356
+ const endpoint = process.env.BETA_TRACING_ENDPOINT
357
+ if (!endpoint) {
358
+ return
359
+ }
360
+
361
+ const [{ OTLPTraceExporter }, { OTLPLogExporter }] = await Promise.all([
362
+ import('@opentelemetry/exporter-trace-otlp-http'),
363
+ import('@opentelemetry/exporter-logs-otlp-http'),
364
+ ])
365
+
366
+ const httpConfig = {
367
+ url: `${endpoint}/v1/traces`,
368
+ }
369
+
370
+ const logHttpConfig = {
371
+ url: `${endpoint}/v1/logs`,
372
+ }
373
+
374
+ // Initialize trace exporter
375
+ const traceExporter = new OTLPTraceExporter(httpConfig)
376
+ const spanProcessor = new BatchSpanProcessor(traceExporter, {
377
+ scheduledDelayMillis: DEFAULT_TRACES_EXPORT_INTERVAL_MS,
378
+ })
379
+
380
+ const tracerProvider = new BasicTracerProvider({
381
+ resource,
382
+ spanProcessors: [spanProcessor],
383
+ })
384
+
385
+ trace.setGlobalTracerProvider(tracerProvider)
386
+ setTracerProvider(tracerProvider)
387
+
388
+ // Initialize log exporter
389
+ const logExporter = new OTLPLogExporter(logHttpConfig)
390
+ const loggerProvider = new LoggerProvider({
391
+ resource,
392
+ processors: [
393
+ new BatchLogRecordProcessor(logExporter, {
394
+ scheduledDelayMillis: DEFAULT_LOGS_EXPORT_INTERVAL_MS,
395
+ }),
396
+ ],
397
+ })
398
+
399
+ logs.setGlobalLoggerProvider(loggerProvider)
400
+ setLoggerProvider(loggerProvider)
401
+
402
+ // Initialize event logger
403
+ const eventLogger = logs.getLogger(
404
+ 'com.anthropic.claude_code.events',
405
+ MACRO.VERSION,
406
+ )
407
+ setEventLogger(eventLogger)
408
+
409
+ // Setup flush handlers - flush both logs AND traces
410
+ process.on('beforeExit', async () => {
411
+ await loggerProvider?.forceFlush()
412
+ await tracerProvider?.forceFlush()
413
+ })
414
+
415
+ process.on('exit', () => {
416
+ void loggerProvider?.forceFlush()
417
+ void tracerProvider?.forceFlush()
418
+ })
419
+ }
420
+
421
+ export async function initializeTelemetry() {
422
+ profileCheckpoint('telemetry_init_start')
423
+ bootstrapTelemetry()
424
+
425
+ // Console exporters call console.dir on a timer (5s logs/traces, 60s
426
+ // metrics), writing pretty-printed objects to stdout. In stream-json
427
+ // mode stdout is the SDK message channel; the first line (`{`) breaks
428
+ // the SDK's line reader. Stripped here (not main.tsx) because init.ts
429
+ // re-runs applyConfigEnvironmentVariables() inside initializeTelemetry-
430
+ // AfterTrust for remote-managed-settings users, and bootstrapTelemetry
431
+ // above copies ANT_OTEL_* for ant users — both would undo an earlier strip.
432
+ if (getHasFormattedOutput()) {
433
+ for (const key of [
434
+ 'OTEL_METRICS_EXPORTER',
435
+ 'OTEL_LOGS_EXPORTER',
436
+ 'OTEL_TRACES_EXPORTER',
437
+ ] as const) {
438
+ const v = process.env[key]
439
+ if (v?.includes('console')) {
440
+ process.env[key] = v
441
+ .split(',')
442
+ .map(s => s.trim())
443
+ .filter(s => s !== 'console')
444
+ .join(',')
445
+ }
446
+ }
447
+ }
448
+
449
+ diag.setLogger(new ClaudeCodeDiagLogger(), DiagLogLevel.ERROR)
450
+
451
+ // Initialize Perfetto tracing (independent of OTEL)
452
+ // Enable via CLAUDE_CODE_PERFETTO_TRACE=1 or CLAUDE_CODE_PERFETTO_TRACE=<path>
453
+ initializePerfettoTracing()
454
+
455
+ const readers = []
456
+
457
+ // Add customer exporters (if enabled)
458
+ const telemetryEnabled = isTelemetryEnabled()
459
+ logForDebugging(
460
+ `[3P telemetry] isTelemetryEnabled=${telemetryEnabled} (CLAUDE_CODE_ENABLE_TELEMETRY=${process.env.CLAUDE_CODE_ENABLE_TELEMETRY})`,
461
+ )
462
+ if (telemetryEnabled) {
463
+ readers.push(...(await getOtlpReaders()))
464
+ }
465
+
466
+ // Add BigQuery exporter (for API customers, C4E users, and internal users)
467
+ if (isBigQueryMetricsEnabled()) {
468
+ readers.push(getBigQueryExportingReader())
469
+ }
470
+
471
+ // Create base resource with service attributes
472
+ const platform = getPlatform()
473
+ const baseAttributes: Record<string, string> = {
474
+ [ATTR_SERVICE_NAME]: 'claude-code',
475
+ [ATTR_SERVICE_VERSION]: MACRO.VERSION,
476
+ }
477
+
478
+ // Add WSL-specific attributes if running on WSL
479
+ if (platform === 'wsl') {
480
+ const wslVersion = getWslVersion()
481
+ if (wslVersion) {
482
+ baseAttributes['wsl.version'] = wslVersion
483
+ }
484
+ }
485
+
486
+ const baseResource = resourceFromAttributes(baseAttributes)
487
+
488
+ // Use OpenTelemetry detectors
489
+ const osResource = resourceFromAttributes(
490
+ osDetector.detect().attributes || {},
491
+ )
492
+
493
+ // Extract only host.arch from hostDetector
494
+ const hostDetected = hostDetector.detect()
495
+ const hostArchAttributes = hostDetected.attributes?.[SEMRESATTRS_HOST_ARCH]
496
+ ? {
497
+ [SEMRESATTRS_HOST_ARCH]: hostDetected.attributes[SEMRESATTRS_HOST_ARCH],
498
+ }
499
+ : {}
500
+ const hostArchResource = resourceFromAttributes(hostArchAttributes)
501
+
502
+ const envResource = resourceFromAttributes(
503
+ envDetector.detect().attributes || {},
504
+ )
505
+
506
+ // Merge resources - later resources take precedence
507
+ const resource = baseResource
508
+ .merge(osResource)
509
+ .merge(hostArchResource)
510
+ .merge(envResource)
511
+
512
+ // Check if beta tracing is enabled - this is a separate code path
513
+ // Available to all users who set ENABLE_BETA_TRACING_DETAILED=1 and BETA_TRACING_ENDPOINT
514
+ if (isBetaTracingEnabled()) {
515
+ void initializeBetaTracing(resource).catch(e =>
516
+ logForDebugging(`Beta tracing init failed: ${e}`, { level: 'error' }),
517
+ )
518
+ // Still set up meter provider for metrics (but skip regular logs/traces setup)
519
+ const meterProvider = new MeterProvider({
520
+ resource,
521
+ views: [],
522
+ readers,
523
+ })
524
+ setMeterProvider(meterProvider)
525
+
526
+ // Register shutdown for beta tracing
527
+ const shutdownTelemetry = async () => {
528
+ const timeoutMs = parseInt(
529
+ process.env.CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS || '2000',
530
+ )
531
+ try {
532
+ endInteractionSpan()
533
+
534
+ // Force flush + shutdown together inside the timeout. Previously forceFlush
535
+ // was awaited unbounded BEFORE the race, blocking exit on slow OTLP endpoints.
536
+ // Each provider's flush→shutdown is chained independently so a slow logger
537
+ // flush doesn't delay meterProvider/tracerProvider shutdown (no waterfall).
538
+ const loggerProvider = getLoggerProvider()
539
+ const tracerProvider = getTracerProvider()
540
+
541
+ const chains: Promise<void>[] = [meterProvider.shutdown()]
542
+ if (loggerProvider) {
543
+ chains.push(
544
+ loggerProvider.forceFlush().then(() => loggerProvider.shutdown()),
545
+ )
546
+ }
547
+ if (tracerProvider) {
548
+ chains.push(
549
+ tracerProvider.forceFlush().then(() => tracerProvider.shutdown()),
550
+ )
551
+ }
552
+
553
+ await Promise.race([
554
+ Promise.all(chains),
555
+ telemetryTimeout(timeoutMs, 'OpenTelemetry shutdown timeout'),
556
+ ])
557
+ } catch {
558
+ // Ignore shutdown errors
559
+ }
560
+ }
561
+ registerCleanup(shutdownTelemetry)
562
+
563
+ return meterProvider.getMeter('com.anthropic.claude_code', MACRO.VERSION)
564
+ }
565
+
566
+ const meterProvider = new MeterProvider({
567
+ resource,
568
+ views: [],
569
+ readers,
570
+ })
571
+
572
+ // Store reference in state for flushing
573
+ setMeterProvider(meterProvider)
574
+
575
+ // Initialize logs if telemetry is enabled
576
+ if (telemetryEnabled) {
577
+ const logExporters = await getOtlpLogExporters()
578
+ logForDebugging(
579
+ `[3P telemetry] Created ${logExporters.length} log exporter(s)`,
580
+ )
581
+
582
+ if (logExporters.length > 0) {
583
+ const loggerProvider = new LoggerProvider({
584
+ resource,
585
+ // Add batch processors for each exporter
586
+ processors: logExporters.map(
587
+ exporter =>
588
+ new BatchLogRecordProcessor(exporter, {
589
+ scheduledDelayMillis: parseInt(
590
+ process.env.OTEL_LOGS_EXPORT_INTERVAL ||
591
+ DEFAULT_LOGS_EXPORT_INTERVAL_MS.toString(),
592
+ ),
593
+ }),
594
+ ),
595
+ })
596
+
597
+ // Register the logger provider globally
598
+ logs.setGlobalLoggerProvider(loggerProvider)
599
+ setLoggerProvider(loggerProvider)
600
+
601
+ // Initialize event logger
602
+ const eventLogger = logs.getLogger(
603
+ 'com.anthropic.claude_code.events',
604
+ MACRO.VERSION,
605
+ )
606
+ setEventLogger(eventLogger)
607
+ logForDebugging('[3P telemetry] Event logger set successfully')
608
+
609
+ // 'beforeExit' is emitted when Node.js empties its event loop and has no additional work to schedule.
610
+ // Unlike 'exit', it allows us to perform async operations, so it works well for letting
611
+ // network requests complete before the process exits naturally.
612
+ process.on('beforeExit', async () => {
613
+ await loggerProvider?.forceFlush()
614
+ // Also flush traces - they use BatchSpanProcessor which needs explicit flush
615
+ const tracerProvider = getTracerProvider()
616
+ await tracerProvider?.forceFlush()
617
+ })
618
+
619
+ process.on('exit', () => {
620
+ // Final attempt to flush logs and traces
621
+ void loggerProvider?.forceFlush()
622
+ void getTracerProvider()?.forceFlush()
623
+ })
624
+ }
625
+ }
626
+
627
+ // Initialize tracing if enhanced telemetry is enabled (BETA)
628
+ if (telemetryEnabled && isEnhancedTelemetryEnabled()) {
629
+ const traceExporters = await getOtlpTraceExporters()
630
+ if (traceExporters.length > 0) {
631
+ // Create span processors for each exporter
632
+ const spanProcessors = traceExporters.map(
633
+ exporter =>
634
+ new BatchSpanProcessor(exporter, {
635
+ scheduledDelayMillis: parseInt(
636
+ process.env.OTEL_TRACES_EXPORT_INTERVAL ||
637
+ DEFAULT_TRACES_EXPORT_INTERVAL_MS.toString(),
638
+ ),
639
+ }),
640
+ )
641
+
642
+ const tracerProvider = new BasicTracerProvider({
643
+ resource,
644
+ spanProcessors,
645
+ })
646
+
647
+ // Register the tracer provider globally
648
+ trace.setGlobalTracerProvider(tracerProvider)
649
+ setTracerProvider(tracerProvider)
650
+ }
651
+ }
652
+
653
+ // Shutdown metrics and logs on exit (flushes and closes exporters)
654
+ const shutdownTelemetry = async () => {
655
+ const timeoutMs = parseInt(
656
+ process.env.CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS || '2000',
657
+ )
658
+
659
+ try {
660
+ // End any active interaction span before shutdown
661
+ endInteractionSpan()
662
+
663
+ const shutdownPromises = [meterProvider.shutdown()]
664
+ const loggerProvider = getLoggerProvider()
665
+ if (loggerProvider) {
666
+ shutdownPromises.push(loggerProvider.shutdown())
667
+ }
668
+ const tracerProvider = getTracerProvider()
669
+ if (tracerProvider) {
670
+ shutdownPromises.push(tracerProvider.shutdown())
671
+ }
672
+
673
+ await Promise.race([
674
+ Promise.all(shutdownPromises),
675
+ telemetryTimeout(timeoutMs, 'OpenTelemetry shutdown timeout'),
676
+ ])
677
+ } catch (error) {
678
+ if (error instanceof Error && error.message.includes('timeout')) {
679
+ logForDebugging(
680
+ `
681
+ OpenTelemetry telemetry flush timed out after ${timeoutMs}ms
682
+
683
+ To resolve this issue, you can:
684
+ 1. Increase the timeout by setting CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS env var (e.g., 5000 for 5 seconds)
685
+ 2. Check if your OpenTelemetry backend is experiencing scalability issues
686
+ 3. Disable OpenTelemetry by unsetting CLAUDE_CODE_ENABLE_TELEMETRY env var
687
+
688
+ Current timeout: ${timeoutMs}ms
689
+ `,
690
+ { level: 'error' },
691
+ )
692
+ }
693
+ throw error
694
+ }
695
+ }
696
+
697
+ // Always register shutdown (internal metrics are always enabled)
698
+ registerCleanup(shutdownTelemetry)
699
+
700
+ return meterProvider.getMeter('com.anthropic.claude_code', MACRO.VERSION)
701
+ }
702
+
703
+ /**
704
+ * Flush all pending telemetry data immediately.
705
+ * This should be called before logout or org switching to prevent data leakage.
706
+ */
707
+ export async function flushTelemetry(): Promise<void> {
708
+ const meterProvider = getMeterProvider()
709
+ if (!meterProvider) {
710
+ return
711
+ }
712
+
713
+ const timeoutMs = parseInt(
714
+ process.env.CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS || '5000',
715
+ )
716
+
717
+ try {
718
+ const flushPromises = [meterProvider.forceFlush()]
719
+ const loggerProvider = getLoggerProvider()
720
+ if (loggerProvider) {
721
+ flushPromises.push(loggerProvider.forceFlush())
722
+ }
723
+ const tracerProvider = getTracerProvider()
724
+ if (tracerProvider) {
725
+ flushPromises.push(tracerProvider.forceFlush())
726
+ }
727
+
728
+ await Promise.race([
729
+ Promise.all(flushPromises),
730
+ telemetryTimeout(timeoutMs, 'OpenTelemetry flush timeout'),
731
+ ])
732
+
733
+ logForDebugging('Telemetry flushed successfully')
734
+ } catch (error) {
735
+ if (error instanceof TelemetryTimeoutError) {
736
+ logForDebugging(
737
+ `Telemetry flush timed out after ${timeoutMs}ms. Some metrics may not be exported.`,
738
+ { level: 'warn' },
739
+ )
740
+ } else {
741
+ logForDebugging(`Telemetry flush failed: ${errorMessage(error)}`, {
742
+ level: 'error',
743
+ })
744
+ }
745
+ // Don't throw - allow logout to continue even if flush fails
746
+ }
747
+ }
748
+
749
+ function parseOtelHeadersEnvVar(): Record<string, string> {
750
+ const headers: Record<string, string> = {}
751
+ const envHeaders = process.env.OTEL_EXPORTER_OTLP_HEADERS
752
+ if (envHeaders) {
753
+ for (const pair of envHeaders.split(',')) {
754
+ const [key, ...valueParts] = pair.split('=')
755
+ if (key && valueParts.length > 0) {
756
+ headers[key.trim()] = valueParts.join('=').trim()
757
+ }
758
+ }
759
+ }
760
+ return headers
761
+ }
762
+
763
+ /**
764
+ * Get configuration for OTLP exporters including:
765
+ * - HTTP agent options (proxy, mTLS)
766
+ * - Dynamic headers via otelHeadersHelper or static headers from env var
767
+ */
768
+ function getOTLPExporterConfig() {
769
+ const proxyUrl = getProxyUrl()
770
+ const mtlsConfig = getMTLSConfig()
771
+ const settings = getSettings_DEPRECATED()
772
+
773
+ // Build base config
774
+ const config: Record<string, unknown> = {}
775
+
776
+ // Parse static headers from env var once (doesn't change at runtime)
777
+ const staticHeaders = parseOtelHeadersEnvVar()
778
+
779
+ // If otelHeadersHelper is configured, use async headers function for dynamic refresh
780
+ // Otherwise just return static headers if any exist
781
+ if (settings?.otelHeadersHelper) {
782
+ config.headers = async (): Promise<Record<string, string>> => {
783
+ const dynamicHeaders = getOtelHeadersFromHelper()
784
+ return { ...staticHeaders, ...dynamicHeaders }
785
+ }
786
+ } else if (Object.keys(staticHeaders).length > 0) {
787
+ config.headers = async (): Promise<Record<string, string>> => staticHeaders
788
+ }
789
+
790
+ // Check if we should bypass proxy for OTEL endpoint
791
+ const otelEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT
792
+ if (!proxyUrl || (otelEndpoint && shouldBypassProxy(otelEndpoint))) {
793
+ // No proxy configured or OTEL endpoint should bypass proxy
794
+ const caCerts = getCACertificates()
795
+ if (mtlsConfig || caCerts) {
796
+ config.httpAgentOptions = {
797
+ ...mtlsConfig,
798
+ ...(caCerts && { ca: caCerts }),
799
+ }
800
+ }
801
+ return config
802
+ }
803
+
804
+ // Return an HttpAgentFactory function that creates our proxy agent
805
+ const caCerts = getCACertificates()
806
+ const agentFactory = (_protocol: string) => {
807
+ // Create and return the proxy agent with mTLS and CA cert config
808
+ const proxyAgent =
809
+ mtlsConfig || caCerts
810
+ ? new HttpsProxyAgent(proxyUrl, {
811
+ ...(mtlsConfig && {
812
+ cert: mtlsConfig.cert,
813
+ key: mtlsConfig.key,
814
+ passphrase: mtlsConfig.passphrase,
815
+ }),
816
+ ...(caCerts && { ca: caCerts }),
817
+ })
818
+ : new HttpsProxyAgent(proxyUrl)
819
+
820
+ return proxyAgent
821
+ }
822
+
823
+ config.httpAgentOptions = agentFactory
824
+ return config
825
+ }