@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,100 @@
1
+ type WriteFn = (content: string) => void
2
+
3
+ export type BufferedWriter = {
4
+ write: (content: string) => void
5
+ flush: () => void
6
+ dispose: () => void
7
+ }
8
+
9
+ export function createBufferedWriter({
10
+ writeFn,
11
+ flushIntervalMs = 1000,
12
+ maxBufferSize = 100,
13
+ maxBufferBytes = Infinity,
14
+ immediateMode = false,
15
+ }: {
16
+ writeFn: WriteFn
17
+ flushIntervalMs?: number
18
+ maxBufferSize?: number
19
+ maxBufferBytes?: number
20
+ immediateMode?: boolean
21
+ }): BufferedWriter {
22
+ let buffer: string[] = []
23
+ let bufferBytes = 0
24
+ let flushTimer: NodeJS.Timeout | null = null
25
+ // Batch detached by overflow that hasn't been written yet. Tracked so
26
+ // flush()/dispose() can drain it synchronously if the process exits
27
+ // before the setImmediate fires.
28
+ let pendingOverflow: string[] | null = null
29
+
30
+ function clearTimer(): void {
31
+ if (flushTimer) {
32
+ clearTimeout(flushTimer)
33
+ flushTimer = null
34
+ }
35
+ }
36
+
37
+ function flush(): void {
38
+ if (pendingOverflow) {
39
+ writeFn(pendingOverflow.join(''))
40
+ pendingOverflow = null
41
+ }
42
+ if (buffer.length === 0) return
43
+ writeFn(buffer.join(''))
44
+ buffer = []
45
+ bufferBytes = 0
46
+ clearTimer()
47
+ }
48
+
49
+ function scheduleFlush(): void {
50
+ if (!flushTimer) {
51
+ flushTimer = setTimeout(flush, flushIntervalMs)
52
+ }
53
+ }
54
+
55
+ // Detach the buffer synchronously so the caller never waits on writeFn.
56
+ // writeFn may block (e.g. errorLogSink.ts appendFileSync) — if overflow fires
57
+ // mid-render or mid-keystroke, deferring the write keeps the current tick
58
+ // short. Timer-based flushes already run outside user code paths so they
59
+ // stay synchronous.
60
+ function flushDeferred(): void {
61
+ if (pendingOverflow) {
62
+ // A previous overflow write is still queued. Coalesce into it to
63
+ // preserve ordering — writes land in a single setImmediate-ordered batch.
64
+ pendingOverflow.push(...buffer)
65
+ buffer = []
66
+ bufferBytes = 0
67
+ clearTimer()
68
+ return
69
+ }
70
+ const detached = buffer
71
+ buffer = []
72
+ bufferBytes = 0
73
+ clearTimer()
74
+ pendingOverflow = detached
75
+ setImmediate(() => {
76
+ const toWrite = pendingOverflow
77
+ pendingOverflow = null
78
+ if (toWrite) writeFn(toWrite.join(''))
79
+ })
80
+ }
81
+
82
+ return {
83
+ write(content: string): void {
84
+ if (immediateMode) {
85
+ writeFn(content)
86
+ return
87
+ }
88
+ buffer.push(content)
89
+ bufferBytes += content.length
90
+ scheduleFlush()
91
+ if (buffer.length >= maxBufferSize || bufferBytes >= maxBufferBytes) {
92
+ flushDeferred()
93
+ }
94
+ },
95
+ flush,
96
+ dispose(): void {
97
+ flush()
98
+ },
99
+ }
100
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Detects if the current runtime is Bun.
3
+ * Returns true when:
4
+ * - Running a JS file via the `bun` command
5
+ * - Running a Bun-compiled standalone executable
6
+ */
7
+ export function isRunningWithBun(): boolean {
8
+ // https://bun.com/guides/util/detect-bun
9
+ return process.versions.bun !== undefined
10
+ }
11
+
12
+ /**
13
+ * Detects if running as a Bun-compiled standalone executable.
14
+ * This checks for embedded files which are present in compiled binaries.
15
+ */
16
+ export function isInBundledMode(): boolean {
17
+ return (
18
+ typeof Bun !== 'undefined' &&
19
+ Array.isArray(Bun.embeddedFiles) &&
20
+ Bun.embeddedFiles.length > 0
21
+ )
22
+ }
@@ -0,0 +1,115 @@
1
+ import memoize from 'lodash-es/memoize.js'
2
+ import { logForDebugging } from './debug.js'
3
+ import { hasNodeOption } from './envUtils.js'
4
+ import { getFsImplementation } from './fsOperations.js'
5
+
6
+ /**
7
+ * Load CA certificates for TLS connections.
8
+ *
9
+ * Since setting `ca` on an HTTPS agent replaces the default certificate store,
10
+ * we must always include base CAs (either system or bundled Mozilla) when returning.
11
+ *
12
+ * Returns undefined when no custom CA configuration is needed, allowing the
13
+ * runtime's default certificate handling to apply.
14
+ *
15
+ * Behavior:
16
+ * - Neither NODE_EXTRA_CA_CERTS nor --use-system-ca/--use-openssl-ca set: undefined (runtime defaults)
17
+ * - NODE_EXTRA_CA_CERTS only: bundled Mozilla CAs + extra cert file contents
18
+ * - --use-system-ca or --use-openssl-ca only: system CAs
19
+ * - --use-system-ca + NODE_EXTRA_CA_CERTS: system CAs + extra cert file contents
20
+ *
21
+ * Memoized for performance. Call clearCACertsCache() to invalidate after
22
+ * environment variable changes (e.g., after trust dialog applies settings.json).
23
+ *
24
+ * Reads ONLY `process.env.NODE_EXTRA_CA_CERTS`. `caCertsConfig.ts` populates
25
+ * that env var from settings.json at CLI init; this module stays config-free
26
+ * so `proxy.ts`/`mtls.ts` don't transitively pull in the command registry.
27
+ */
28
+ export const getCACertificates = memoize((): string[] | undefined => {
29
+ const useSystemCA =
30
+ hasNodeOption('--use-system-ca') || hasNodeOption('--use-openssl-ca')
31
+
32
+ const extraCertsPath = process.env.NODE_EXTRA_CA_CERTS
33
+
34
+ logForDebugging(
35
+ `CA certs: useSystemCA=${useSystemCA}, extraCertsPath=${extraCertsPath}`,
36
+ )
37
+
38
+ // If neither is set, return undefined (use runtime defaults, no override)
39
+ if (!useSystemCA && !extraCertsPath) {
40
+ return undefined
41
+ }
42
+
43
+ // Deferred load: Bun's node:tls module eagerly materializes ~150 Mozilla
44
+ // root certificates (~750KB heap) on import, even if tls.rootCertificates
45
+ // is never accessed. Most users hit the early return above, so we only
46
+ // pay this cost when custom CA handling is actually needed.
47
+ /* eslint-disable @typescript-eslint/no-require-imports */
48
+ const tls = require('tls') as typeof import('tls')
49
+ /* eslint-enable @typescript-eslint/no-require-imports */
50
+
51
+ const certs: string[] = []
52
+
53
+ if (useSystemCA) {
54
+ // Load system CA store (Bun API)
55
+ const getCACerts = (
56
+ tls as typeof tls & { getCACertificates?: (type: string) => string[] }
57
+ ).getCACertificates
58
+ const systemCAs = getCACerts?.('system')
59
+ if (systemCAs && systemCAs.length > 0) {
60
+ certs.push(...systemCAs)
61
+ logForDebugging(
62
+ `CA certs: Loaded ${certs.length} system CA certificates (--use-system-ca)`,
63
+ )
64
+ } else if (!getCACerts && !extraCertsPath) {
65
+ // Under Node.js where getCACertificates doesn't exist and no extra certs,
66
+ // return undefined to let Node.js handle --use-system-ca natively.
67
+ logForDebugging(
68
+ 'CA certs: --use-system-ca set but system CA API unavailable, deferring to runtime',
69
+ )
70
+ return undefined
71
+ } else {
72
+ // System CA API returned empty or unavailable; fall back to bundled root certs
73
+ certs.push(...tls.rootCertificates)
74
+ logForDebugging(
75
+ `CA certs: Loaded ${certs.length} bundled root certificates as base (--use-system-ca fallback)`,
76
+ )
77
+ }
78
+ } else {
79
+ // Must include bundled Mozilla CAs as base since ca replaces defaults
80
+ certs.push(...tls.rootCertificates)
81
+ logForDebugging(
82
+ `CA certs: Loaded ${certs.length} bundled root certificates as base`,
83
+ )
84
+ }
85
+
86
+ // Append extra certs from file
87
+ if (extraCertsPath) {
88
+ try {
89
+ const extraCert = getFsImplementation().readFileSync(extraCertsPath, {
90
+ encoding: 'utf8',
91
+ })
92
+ certs.push(extraCert)
93
+ logForDebugging(
94
+ `CA certs: Appended extra certificates from NODE_EXTRA_CA_CERTS (${extraCertsPath})`,
95
+ )
96
+ } catch (error) {
97
+ logForDebugging(
98
+ `CA certs: Failed to read NODE_EXTRA_CA_CERTS file (${extraCertsPath}): ${error}`,
99
+ { level: 'error' },
100
+ )
101
+ }
102
+ }
103
+
104
+ return certs.length > 0 ? certs : undefined
105
+ })
106
+
107
+ /**
108
+ * Clear the CA certificates cache.
109
+ * Call this when environment variables that affect CA certs may have changed
110
+ * (e.g., NODE_EXTRA_CA_CERTS, NODE_OPTIONS).
111
+ */
112
+ export function clearCACertsCache(): void {
113
+ getCACertificates.cache.clear?.()
114
+ logForDebugging('Cleared CA certificates cache')
115
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Config/settings-backed NODE_EXTRA_CA_CERTS population for `caCerts.ts`.
3
+ *
4
+ * Split from `caCerts.ts` because `config.ts` → `file.ts` →
5
+ * `permissions/filesystem.ts` → `commands.ts` transitively pulls in ~5300
6
+ * modules (REPL, React, every slash command). `proxy.ts`/`mtls.ts` (and
7
+ * therefore anything using HTTPS through our proxy agent — WebSocketTransport,
8
+ * CCRClient, telemetry) must NOT depend on that graph, or the Agent SDK
9
+ * bundle (`connectRemoteControl` path) bloats from ~0.4 MB to ~10.8 MB.
10
+ *
11
+ * `getCACertificates()` only reads `process.env.NODE_EXTRA_CA_CERTS`. This
12
+ * module is the one place allowed to import `config.ts` to *populate* that
13
+ * env var at CLI startup. Only `init.ts` imports this file.
14
+ */
15
+
16
+ import { getGlobalConfig } from './config.js'
17
+ import { logForDebugging } from './debug.js'
18
+ import { getSettingsForSource } from './settings/settings.js'
19
+
20
+ /**
21
+ * Apply NODE_EXTRA_CA_CERTS from settings.json to process.env early in init,
22
+ * BEFORE any TLS connections are made.
23
+ *
24
+ * Bun caches the TLS certificate store at process boot via BoringSSL.
25
+ * If NODE_EXTRA_CA_CERTS isn't set in the environment at boot, Bun won't
26
+ * include the custom CA cert. By setting it on process.env before any
27
+ * TLS connections, we give Bun a chance to pick it up (if the cert store
28
+ * is lazy-initialized) and ensure Node.js compatibility.
29
+ *
30
+ * This is safe to call before the trust dialog because we only read from
31
+ * user-controlled files (~/.claude/settings.json and ~/.claude.json),
32
+ * not from project-level settings.
33
+ */
34
+ export function applyExtraCACertsFromConfig(): void {
35
+ if (process.env.NODE_EXTRA_CA_CERTS) {
36
+ return // Already set in environment, nothing to do
37
+ }
38
+ const configPath = getExtraCertsPathFromConfig()
39
+ if (configPath) {
40
+ process.env.NODE_EXTRA_CA_CERTS = configPath
41
+ logForDebugging(
42
+ `CA certs: Applied NODE_EXTRA_CA_CERTS from config to process.env: ${configPath}`,
43
+ )
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Read NODE_EXTRA_CA_CERTS from settings/config as a fallback.
49
+ *
50
+ * NODE_EXTRA_CA_CERTS is categorized as a non-safe env var (it allows
51
+ * trusting attacker-controlled servers), so it's only applied to process.env
52
+ * after the trust dialog. But we need the CA cert early to establish the TLS
53
+ * connection to an HTTPS proxy during init().
54
+ *
55
+ * We read from global config (~/.claude.json) and user settings
56
+ * (~/.claude/settings.json). These are user-controlled files that don't
57
+ * require trust approval.
58
+ */
59
+ function getExtraCertsPathFromConfig(): string | undefined {
60
+ try {
61
+ const globalConfig = getGlobalConfig()
62
+ const globalEnv = globalConfig?.env
63
+ // Only read from user-controlled settings (~/.claude/settings.json),
64
+ // not project-level settings, to prevent malicious projects from
65
+ // injecting CA certs before the trust dialog.
66
+ const settings = getSettingsForSource('userSettings')
67
+ const settingsEnv = settings?.env
68
+
69
+ logForDebugging(
70
+ `CA certs: Config fallback - globalEnv keys: ${globalEnv ? Object.keys(globalEnv).join(',') : 'none'}, settingsEnv keys: ${settingsEnv ? Object.keys(settingsEnv).join(',') : 'none'}`,
71
+ )
72
+
73
+ // Settings override global config (same precedence as applyConfigEnvironmentVariables)
74
+ const path =
75
+ settingsEnv?.NODE_EXTRA_CA_CERTS || globalEnv?.NODE_EXTRA_CA_CERTS
76
+ if (path) {
77
+ logForDebugging(
78
+ `CA certs: Found NODE_EXTRA_CA_CERTS in config/settings: ${path}`,
79
+ )
80
+ }
81
+ return path
82
+ } catch (error) {
83
+ logForDebugging(`CA certs: Config fallback failed: ${error}`, {
84
+ level: 'error',
85
+ })
86
+ return undefined
87
+ }
88
+ }
@@ -0,0 +1,38 @@
1
+ import envPaths from 'env-paths'
2
+ import { join } from 'path'
3
+ import { getFsImplementation } from './fsOperations.js'
4
+ import { djb2Hash } from './hash.js'
5
+
6
+ const paths = envPaths('claude-cli')
7
+
8
+ // Local sanitizePath using djb2Hash — NOT the shared version from
9
+ // sessionStoragePortable.ts which uses Bun.hash (wyhash) when available.
10
+ // Cache directory names must remain stable across upgrades so existing cache
11
+ // data (error logs, MCP logs) is not orphaned.
12
+ const MAX_SANITIZED_LENGTH = 200
13
+ function sanitizePath(name: string): string {
14
+ const sanitized = name.replace(/[^a-zA-Z0-9]/g, '-')
15
+ if (sanitized.length <= MAX_SANITIZED_LENGTH) {
16
+ return sanitized
17
+ }
18
+ return `${sanitized.slice(0, MAX_SANITIZED_LENGTH)}-${Math.abs(djb2Hash(name)).toString(36)}`
19
+ }
20
+
21
+ function getProjectDir(cwd: string): string {
22
+ return sanitizePath(cwd)
23
+ }
24
+
25
+ export const CACHE_PATHS = {
26
+ baseLogs: () => join(paths.cache, getProjectDir(getFsImplementation().cwd())),
27
+ errors: () =>
28
+ join(paths.cache, getProjectDir(getFsImplementation().cwd()), 'errors'),
29
+ messages: () =>
30
+ join(paths.cache, getProjectDir(getFsImplementation().cwd()), 'messages'),
31
+ mcpLogs: (serverName: string) =>
32
+ join(
33
+ paths.cache,
34
+ getProjectDir(getFsImplementation().cwd()),
35
+ // Sanitize server name for Windows compatibility (colons are reserved for drive letters)
36
+ `mcp-logs-${sanitizePath(serverName)}`,
37
+ ),
38
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Tracks which tool uses were auto-approved by classifiers.
3
+ * Populated from useCanUseTool.ts and permissions.ts, read from UserToolSuccessMessage.tsx.
4
+ */
5
+
6
+ import { feature } from 'bun:bundle'
7
+ import { createSignal } from './signal.js'
8
+
9
+ type ClassifierApproval = {
10
+ classifier: 'bash' | 'auto-mode'
11
+ matchedRule?: string
12
+ reason?: string
13
+ }
14
+
15
+ const CLASSIFIER_APPROVALS = new Map<string, ClassifierApproval>()
16
+ const CLASSIFIER_CHECKING = new Set<string>()
17
+ const classifierChecking = createSignal()
18
+
19
+ export function setClassifierApproval(
20
+ toolUseID: string,
21
+ matchedRule: string,
22
+ ): void {
23
+ if (!feature('BASH_CLASSIFIER')) {
24
+ return
25
+ }
26
+ CLASSIFIER_APPROVALS.set(toolUseID, {
27
+ classifier: 'bash',
28
+ matchedRule,
29
+ })
30
+ }
31
+
32
+ export function getClassifierApproval(toolUseID: string): string | undefined {
33
+ if (!feature('BASH_CLASSIFIER')) {
34
+ return undefined
35
+ }
36
+ const approval = CLASSIFIER_APPROVALS.get(toolUseID)
37
+ if (!approval || approval.classifier !== 'bash') return undefined
38
+ return approval.matchedRule
39
+ }
40
+
41
+ export function setYoloClassifierApproval(
42
+ toolUseID: string,
43
+ reason: string,
44
+ ): void {
45
+ if (!feature('TRANSCRIPT_CLASSIFIER')) {
46
+ return
47
+ }
48
+ CLASSIFIER_APPROVALS.set(toolUseID, { classifier: 'auto-mode', reason })
49
+ }
50
+
51
+ export function getYoloClassifierApproval(
52
+ toolUseID: string,
53
+ ): string | undefined {
54
+ if (!feature('TRANSCRIPT_CLASSIFIER')) {
55
+ return undefined
56
+ }
57
+ const approval = CLASSIFIER_APPROVALS.get(toolUseID)
58
+ if (!approval || approval.classifier !== 'auto-mode') return undefined
59
+ return approval.reason
60
+ }
61
+
62
+ export function setClassifierChecking(toolUseID: string): void {
63
+ if (!feature('BASH_CLASSIFIER') && !feature('TRANSCRIPT_CLASSIFIER')) return
64
+ CLASSIFIER_CHECKING.add(toolUseID)
65
+ classifierChecking.emit()
66
+ }
67
+
68
+ export function clearClassifierChecking(toolUseID: string): void {
69
+ if (!feature('BASH_CLASSIFIER') && !feature('TRANSCRIPT_CLASSIFIER')) return
70
+ CLASSIFIER_CHECKING.delete(toolUseID)
71
+ classifierChecking.emit()
72
+ }
73
+
74
+ export const subscribeClassifierChecking = classifierChecking.subscribe
75
+
76
+ export function isClassifierChecking(toolUseID: string): boolean {
77
+ return CLASSIFIER_CHECKING.has(toolUseID)
78
+ }
79
+
80
+ export function deleteClassifierApproval(toolUseID: string): void {
81
+ CLASSIFIER_APPROVALS.delete(toolUseID)
82
+ }
83
+
84
+ export function clearClassifierApprovals(): void {
85
+ CLASSIFIER_APPROVALS.clear()
86
+ CLASSIFIER_CHECKING.clear()
87
+ classifierChecking.emit()
88
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * React hook for classifierApprovals store.
3
+ * Split from classifierApprovals.ts so pure-state importers (permissions.ts,
4
+ * toolExecution.ts, postCompactCleanup.ts) do not pull React into print.ts.
5
+ */
6
+
7
+ import { useSyncExternalStore } from 'react'
8
+ import {
9
+ isClassifierChecking,
10
+ subscribeClassifierChecking,
11
+ } from './classifierApprovals.js'
12
+
13
+ export function useIsClassifierChecking(toolUseID: string): boolean {
14
+ return useSyncExternalStore(subscribeClassifierChecking, () =>
15
+ isClassifierChecking(toolUseID),
16
+ )
17
+ }
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Claude Code hints protocol.
3
+ *
4
+ * CLIs and SDKs running under Claude Code can emit a self-closing
5
+ * `<claude-code-hint />` tag to stderr (merged into stdout by the shell
6
+ * tools). The harness scans tool output for these tags, strips them before
7
+ * the output reaches the model, and surfaces an install prompt to the
8
+ * user — no inference, no proactive execution.
9
+ *
10
+ * This file provides both the parser and a small module-level store for
11
+ * the pending hint. The store is a single slot (not a queue) — we surface
12
+ * at most one prompt per session, so there's no reason to accumulate.
13
+ * React subscribes via useSyncExternalStore.
14
+ *
15
+ * See docs/claude-code-hints.md for the vendor-facing spec.
16
+ */
17
+
18
+ import { logForDebugging } from './debug.js'
19
+ import { createSignal } from './signal.js'
20
+
21
+ export type ClaudeCodeHintType = 'plugin'
22
+
23
+ export type ClaudeCodeHint = {
24
+ /** Spec version declared by the emitter. Unknown versions are dropped. */
25
+ v: number
26
+ /** Hint discriminator. v1 defines only `plugin`. */
27
+ type: ClaudeCodeHintType
28
+ /**
29
+ * Hint payload. For `type: 'plugin'`: a `name@marketplace` slug
30
+ * matching the form accepted by `parsePluginIdentifier`.
31
+ */
32
+ value: string
33
+ /**
34
+ * First token of the shell command that produced this hint. Shown in the
35
+ * install prompt so the user can spot a mismatch between the tool that
36
+ * emitted the hint and the plugin it recommends.
37
+ */
38
+ sourceCommand: string
39
+ }
40
+
41
+ /** Spec versions this harness understands. */
42
+ const SUPPORTED_VERSIONS = new Set([1])
43
+
44
+ /** Hint types this harness understands at the supported versions. */
45
+ const SUPPORTED_TYPES = new Set<string>(['plugin'])
46
+
47
+ /**
48
+ * Outer tag match. Anchored to whole lines (multiline mode) so that a
49
+ * hint marker buried in a larger line — e.g. a log statement quoting the
50
+ * tag — is ignored. Leading and trailing whitespace on the line is
51
+ * tolerated since some SDKs pad stderr.
52
+ */
53
+ const HINT_TAG_RE = /^[ \t]*<claude-code-hint\s+([^>]*?)\s*\/>[ \t]*$/gm
54
+
55
+ /**
56
+ * Attribute matcher. Accepts `key="value"` and `key=value` (terminated by
57
+ * whitespace or `/>` closing sequence). Values containing whitespace or `"` must use the quoted
58
+ * form. The quoted form does not support escape sequences; raise the spec
59
+ * version if that becomes necessary.
60
+ */
61
+ const ATTR_RE = /(\w+)=(?:"([^"]*)"|([^\s/>]+))/g
62
+
63
+ /**
64
+ * Scan shell tool output for hint tags, returning the parsed hints and
65
+ * the output with hint lines removed. The stripped output is what the
66
+ * model sees — hints are a harness-only side channel.
67
+ *
68
+ * @param output - Raw command output (stdout with stderr interleaved).
69
+ * @param command - The command that produced the output; its first
70
+ * whitespace-separated token is recorded as `sourceCommand`.
71
+ */
72
+ export function extractClaudeCodeHints(
73
+ output: string,
74
+ command: string,
75
+ ): { hints: ClaudeCodeHint[]; stripped: string } {
76
+ // Fast path: no tag open sequence → no work, no allocation.
77
+ if (!output.includes('<claude-code-hint')) {
78
+ return { hints: [], stripped: output }
79
+ }
80
+
81
+ const sourceCommand = firstCommandToken(command)
82
+ const hints: ClaudeCodeHint[] = []
83
+
84
+ const stripped = output.replace(HINT_TAG_RE, rawLine => {
85
+ const attrs = parseAttrs(rawLine)
86
+ const v = Number(attrs.v)
87
+ const type = attrs.type
88
+ const value = attrs.value
89
+
90
+ if (!SUPPORTED_VERSIONS.has(v)) {
91
+ logForDebugging(
92
+ `[claudeCodeHints] dropped hint with unsupported v=${attrs.v}`,
93
+ )
94
+ return ''
95
+ }
96
+ if (!type || !SUPPORTED_TYPES.has(type)) {
97
+ logForDebugging(
98
+ `[claudeCodeHints] dropped hint with unsupported type=${type}`,
99
+ )
100
+ return ''
101
+ }
102
+ if (!value) {
103
+ logForDebugging('[claudeCodeHints] dropped hint with empty value')
104
+ return ''
105
+ }
106
+
107
+ hints.push({ v, type: type as ClaudeCodeHintType, value, sourceCommand })
108
+ return ''
109
+ })
110
+
111
+ // Dropping a matched line leaves a blank line (the surrounding newlines
112
+ // remain). Collapse runs of blank lines introduced by the replace so the
113
+ // model-visible output doesn't grow vertical whitespace.
114
+ const collapsed =
115
+ hints.length > 0 || stripped !== output
116
+ ? stripped.replace(/\n{3,}/g, '\n\n')
117
+ : stripped
118
+
119
+ return { hints, stripped: collapsed }
120
+ }
121
+
122
+ function parseAttrs(tagBody: string): Record<string, string> {
123
+ const attrs: Record<string, string> = {}
124
+ for (const m of tagBody.matchAll(ATTR_RE)) {
125
+ attrs[m[1]!] = m[2] ?? m[3] ?? ''
126
+ }
127
+ return attrs
128
+ }
129
+
130
+ function firstCommandToken(command: string): string {
131
+ const trimmed = command.trim()
132
+ const spaceIdx = trimmed.search(/\s/)
133
+ return spaceIdx === -1 ? trimmed : trimmed.slice(0, spaceIdx)
134
+ }
135
+
136
+ // ============================================================================
137
+ // Pending-hint store (useSyncExternalStore interface)
138
+ //
139
+ // Single-slot: write wins if the slot is already full (a CLI that emits on
140
+ // every invocation would otherwise pile up). The dialog is shown at most
141
+ // once per session; after that, setPendingHint becomes a no-op.
142
+ //
143
+ // Callers should gate before writing (installed? already shown? cap hit?) —
144
+ // see maybeRecordPluginHint in hintRecommendation.ts for the plugin-type
145
+ // gate. This module stays plugin-agnostic so future hint types can reuse
146
+ // the same store.
147
+ // ============================================================================
148
+
149
+ let pendingHint: ClaudeCodeHint | null = null
150
+ let shownThisSession = false
151
+ const pendingHintChanged = createSignal()
152
+ const notify = pendingHintChanged.emit
153
+
154
+ /** Raw store write. Callers should gate first (see module comment). */
155
+ export function setPendingHint(hint: ClaudeCodeHint): void {
156
+ if (shownThisSession) return
157
+ pendingHint = hint
158
+ notify()
159
+ }
160
+
161
+ /** Clear the slot without flipping the session flag — for rejected hints. */
162
+ export function clearPendingHint(): void {
163
+ if (pendingHint !== null) {
164
+ pendingHint = null
165
+ notify()
166
+ }
167
+ }
168
+
169
+ /** Flip the once-per-session flag. Call only when a dialog is actually shown. */
170
+ export function markShownThisSession(): void {
171
+ shownThisSession = true
172
+ }
173
+
174
+ export const subscribeToPendingHint = pendingHintChanged.subscribe
175
+
176
+ export function getPendingHintSnapshot(): ClaudeCodeHint | null {
177
+ return pendingHint
178
+ }
179
+
180
+ export function hasShownHintThisSession(): boolean {
181
+ return shownThisSession
182
+ }
183
+
184
+ /** Test-only reset. */
185
+ export function _resetClaudeCodeHintStore(): void {
186
+ pendingHint = null
187
+ shownThisSession = false
188
+ }
189
+
190
+ export const _test = {
191
+ parseAttrs,
192
+ firstCommandToken,
193
+ }