@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,340 @@
1
+ import { profileCheckpoint } from '../utils/startupProfiler.js'
2
+ import '../bootstrap/state.js'
3
+ import '../utils/config.js'
4
+ import type { Attributes, MetricOptions } from '@opentelemetry/api'
5
+ import memoize from 'lodash-es/memoize.js'
6
+ import { getIsNonInteractiveSession } from 'src/bootstrap/state.js'
7
+ import type { AttributedCounter } from '../bootstrap/state.js'
8
+ import { getSessionCounter, setMeter } from '../bootstrap/state.js'
9
+ import { shutdownLspServerManager } from '../services/lsp/manager.js'
10
+ import { populateOAuthAccountInfoIfNeeded } from '../services/oauth/client.js'
11
+ import {
12
+ initializePolicyLimitsLoadingPromise,
13
+ isPolicyLimitsEligible,
14
+ } from '../services/policyLimits/index.js'
15
+ import {
16
+ initializeRemoteManagedSettingsLoadingPromise,
17
+ isEligibleForRemoteManagedSettings,
18
+ waitForRemoteManagedSettingsToLoad,
19
+ } from '../services/remoteManagedSettings/index.js'
20
+ import { preconnectAnthropicApi } from '../utils/apiPreconnect.js'
21
+ import { applyExtraCACertsFromConfig } from '../utils/caCertsConfig.js'
22
+ import { registerCleanup } from '../utils/cleanupRegistry.js'
23
+ import { enableConfigs, recordFirstStartTime } from '../utils/config.js'
24
+ import { logForDebugging } from '../utils/debug.js'
25
+ import { detectCurrentRepository } from '../utils/detectRepository.js'
26
+ import { logForDiagnosticsNoPII } from '../utils/diagLogs.js'
27
+ import { initJetBrainsDetection } from '../utils/envDynamic.js'
28
+ import { isEnvTruthy } from '../utils/envUtils.js'
29
+ import { ConfigParseError, errorMessage } from '../utils/errors.js'
30
+ // showInvalidConfigDialog is dynamically imported in the error path to avoid loading React at init
31
+ import {
32
+ gracefulShutdownSync,
33
+ setupGracefulShutdown,
34
+ } from '../utils/gracefulShutdown.js'
35
+ import {
36
+ applyConfigEnvironmentVariables,
37
+ applySafeConfigEnvironmentVariables,
38
+ } from '../utils/managedEnv.js'
39
+ import { configureGlobalMTLS } from '../utils/mtls.js'
40
+ import {
41
+ ensureScratchpadDir,
42
+ isScratchpadEnabled,
43
+ } from '../utils/permissions/filesystem.js'
44
+ // initializeTelemetry is loaded lazily via import() in setMeterState() to defer
45
+ // ~400KB of OpenTelemetry + protobuf modules until telemetry is actually initialized.
46
+ // gRPC exporters (~700KB via @grpc/grpc-js) are further lazy-loaded within instrumentation.ts.
47
+ import { configureGlobalAgents } from '../utils/proxy.js'
48
+ import { isBetaTracingEnabled } from '../utils/telemetry/betaSessionTracing.js'
49
+ import { getTelemetryAttributes } from '../utils/telemetryAttributes.js'
50
+ import { setShellIfWindows } from '../utils/windowsPaths.js'
51
+
52
+ // initialize1PEventLogging is dynamically imported to defer OpenTelemetry sdk-logs/resources
53
+
54
+ // Track if telemetry has been initialized to prevent double initialization
55
+ let telemetryInitialized = false
56
+
57
+ export const init = memoize(async (): Promise<void> => {
58
+ const initStartTime = Date.now()
59
+ logForDiagnosticsNoPII('info', 'init_started')
60
+ profileCheckpoint('init_function_start')
61
+
62
+ // Validate configs are valid and enable configuration system
63
+ try {
64
+ const configsStart = Date.now()
65
+ enableConfigs()
66
+ logForDiagnosticsNoPII('info', 'init_configs_enabled', {
67
+ duration_ms: Date.now() - configsStart,
68
+ })
69
+ profileCheckpoint('init_configs_enabled')
70
+
71
+ // Apply only safe environment variables before trust dialog
72
+ // Full environment variables are applied after trust is established
73
+ const envVarsStart = Date.now()
74
+ applySafeConfigEnvironmentVariables()
75
+
76
+ // Apply NODE_EXTRA_CA_CERTS from settings.json to process.env early,
77
+ // before any TLS connections. Bun caches the TLS cert store at boot
78
+ // via BoringSSL, so this must happen before the first TLS handshake.
79
+ applyExtraCACertsFromConfig()
80
+
81
+ logForDiagnosticsNoPII('info', 'init_safe_env_vars_applied', {
82
+ duration_ms: Date.now() - envVarsStart,
83
+ })
84
+ profileCheckpoint('init_safe_env_vars_applied')
85
+
86
+ // Make sure things get flushed on exit
87
+ setupGracefulShutdown()
88
+ profileCheckpoint('init_after_graceful_shutdown')
89
+
90
+ // Initialize 1P event logging (no security concerns, but deferred to avoid
91
+ // loading OpenTelemetry sdk-logs at startup). growthbook.js is already in
92
+ // the module cache by this point (firstPartyEventLogger imports it), so the
93
+ // second dynamic import adds no load cost.
94
+ void Promise.all([
95
+ import('../services/analytics/firstPartyEventLogger.js'),
96
+ import('../services/analytics/growthbook.js'),
97
+ ]).then(([fp, gb]) => {
98
+ fp.initialize1PEventLogging()
99
+ // Rebuild the logger provider if tengu_1p_event_batch_config changes
100
+ // mid-session. Change detection (isEqual) is inside the handler so
101
+ // unchanged refreshes are no-ops.
102
+ gb.onGrowthBookRefresh(() => {
103
+ void fp.reinitialize1PEventLoggingIfConfigChanged()
104
+ })
105
+ })
106
+ profileCheckpoint('init_after_1p_event_logging')
107
+
108
+ // Populate OAuth account info if it is not already cached in config. This is needed since the
109
+ // OAuth account info may not be populated when logging in through the VSCode extension.
110
+ void populateOAuthAccountInfoIfNeeded()
111
+ profileCheckpoint('init_after_oauth_populate')
112
+
113
+ // Initialize JetBrains IDE detection asynchronously (populates cache for later sync access)
114
+ void initJetBrainsDetection()
115
+ profileCheckpoint('init_after_jetbrains_detection')
116
+
117
+ // Detect GitHub repository asynchronously (populates cache for gitDiff PR linking)
118
+ void detectCurrentRepository()
119
+
120
+ // Initialize the loading promise early so that other systems (like plugin hooks)
121
+ // can await remote settings loading. The promise includes a timeout to prevent
122
+ // deadlocks if loadRemoteManagedSettings() is never called (e.g., Agent SDK tests).
123
+ if (isEligibleForRemoteManagedSettings()) {
124
+ initializeRemoteManagedSettingsLoadingPromise()
125
+ }
126
+ if (isPolicyLimitsEligible()) {
127
+ initializePolicyLimitsLoadingPromise()
128
+ }
129
+ profileCheckpoint('init_after_remote_settings_check')
130
+
131
+ // Record the first start time
132
+ recordFirstStartTime()
133
+
134
+ // Configure global mTLS settings
135
+ const mtlsStart = Date.now()
136
+ logForDebugging('[init] configureGlobalMTLS starting')
137
+ configureGlobalMTLS()
138
+ logForDiagnosticsNoPII('info', 'init_mtls_configured', {
139
+ duration_ms: Date.now() - mtlsStart,
140
+ })
141
+ logForDebugging('[init] configureGlobalMTLS complete')
142
+
143
+ // Configure global HTTP agents (proxy and/or mTLS)
144
+ const proxyStart = Date.now()
145
+ logForDebugging('[init] configureGlobalAgents starting')
146
+ configureGlobalAgents()
147
+ logForDiagnosticsNoPII('info', 'init_proxy_configured', {
148
+ duration_ms: Date.now() - proxyStart,
149
+ })
150
+ logForDebugging('[init] configureGlobalAgents complete')
151
+ profileCheckpoint('init_network_configured')
152
+
153
+ // Preconnect to the Anthropic API — overlap TCP+TLS handshake
154
+ // (~100-200ms) with the ~100ms of action-handler work before the API
155
+ // request. After CA certs + proxy agents are configured so the warmed
156
+ // connection uses the right transport. Fire-and-forget; skipped for
157
+ // proxy/mTLS/unix/cloud-provider where the SDK's dispatcher wouldn't
158
+ // reuse the global pool.
159
+ preconnectAnthropicApi()
160
+
161
+ // CCR upstreamproxy: start the local CONNECT relay so agent subprocesses
162
+ // can reach org-configured upstreams with credential injection. Gated on
163
+ // CLAUDE_CODE_REMOTE + GrowthBook; fail-open on any error. Lazy import so
164
+ // non-CCR startups don't pay the module load. The getUpstreamProxyEnv
165
+ // function is registered with subprocessEnv.ts so subprocess spawning can
166
+ // inject proxy vars without a static import of the upstreamproxy module.
167
+ if (isEnvTruthy(process.env.CLAUDE_CODE_REMOTE)) {
168
+ try {
169
+ const { initUpstreamProxy, getUpstreamProxyEnv } = await import(
170
+ '../upstreamproxy/upstreamproxy.js'
171
+ )
172
+ const { registerUpstreamProxyEnvFn } = await import(
173
+ '../utils/subprocessEnv.js'
174
+ )
175
+ registerUpstreamProxyEnvFn(getUpstreamProxyEnv)
176
+ await initUpstreamProxy()
177
+ } catch (err) {
178
+ logForDebugging(
179
+ `[init] upstreamproxy init failed: ${err instanceof Error ? err.message : String(err)}; continuing without proxy`,
180
+ { level: 'warn' },
181
+ )
182
+ }
183
+ }
184
+
185
+ // Set up git-bash if relevant
186
+ setShellIfWindows()
187
+
188
+ // Register LSP manager cleanup (initialization happens in main.tsx after --plugin-dir is processed)
189
+ registerCleanup(shutdownLspServerManager)
190
+
191
+ // gh-32730: teams created by subagents (or main agent without
192
+ // explicit TeamDelete) were left on disk forever. Register cleanup
193
+ // for all teams created this session. Lazy import: swarm code is
194
+ // behind feature gate and most sessions never create teams.
195
+ registerCleanup(async () => {
196
+ const { cleanupSessionTeams } = await import(
197
+ '../utils/swarm/teamHelpers.js'
198
+ )
199
+ await cleanupSessionTeams()
200
+ })
201
+
202
+ // Initialize scratchpad directory if enabled
203
+ if (isScratchpadEnabled()) {
204
+ const scratchpadStart = Date.now()
205
+ await ensureScratchpadDir()
206
+ logForDiagnosticsNoPII('info', 'init_scratchpad_created', {
207
+ duration_ms: Date.now() - scratchpadStart,
208
+ })
209
+ }
210
+
211
+ logForDiagnosticsNoPII('info', 'init_completed', {
212
+ duration_ms: Date.now() - initStartTime,
213
+ })
214
+ profileCheckpoint('init_function_end')
215
+ } catch (error) {
216
+ if (error instanceof ConfigParseError) {
217
+ // Skip the interactive Ink dialog when we can't safely render it.
218
+ // The dialog breaks JSON consumers (e.g. desktop marketplace plugin
219
+ // manager running `plugin marketplace list --json` in a VM sandbox).
220
+ if (getIsNonInteractiveSession()) {
221
+ process.stderr.write(
222
+ `Configuration error in ${error.filePath}: ${error.message}\n`,
223
+ )
224
+ gracefulShutdownSync(1)
225
+ return
226
+ }
227
+
228
+ // Show the invalid config dialog with the error object and wait for it to complete
229
+ return import('../components/InvalidConfigDialog.js').then(m =>
230
+ m.showInvalidConfigDialog({ error }),
231
+ )
232
+ // Dialog itself handles process.exit, so we don't need additional cleanup here
233
+ } else {
234
+ // For non-config errors, rethrow them
235
+ throw error
236
+ }
237
+ }
238
+ })
239
+
240
+ /**
241
+ * Initialize telemetry after trust has been granted.
242
+ * For remote-settings-eligible users, waits for settings to load (non-blocking),
243
+ * then re-applies env vars (to include remote settings) before initializing telemetry.
244
+ * For non-eligible users, initializes telemetry immediately.
245
+ * This should only be called once, after the trust dialog has been accepted.
246
+ */
247
+ export function initializeTelemetryAfterTrust(): void {
248
+ if (isEligibleForRemoteManagedSettings()) {
249
+ // For SDK/headless mode with beta tracing, initialize eagerly first
250
+ // to ensure the tracer is ready before the first query runs.
251
+ // The async path below will still run but doInitializeTelemetry() guards against double init.
252
+ if (getIsNonInteractiveSession() && isBetaTracingEnabled()) {
253
+ void doInitializeTelemetry().catch(error => {
254
+ logForDebugging(
255
+ `[3P telemetry] Eager telemetry init failed (beta tracing): ${errorMessage(error)}`,
256
+ { level: 'error' },
257
+ )
258
+ })
259
+ }
260
+ logForDebugging(
261
+ '[3P telemetry] Waiting for remote managed settings before telemetry init',
262
+ )
263
+ void waitForRemoteManagedSettingsToLoad()
264
+ .then(async () => {
265
+ logForDebugging(
266
+ '[3P telemetry] Remote managed settings loaded, initializing telemetry',
267
+ )
268
+ // Re-apply env vars to pick up remote settings before initializing telemetry.
269
+ applyConfigEnvironmentVariables()
270
+ await doInitializeTelemetry()
271
+ })
272
+ .catch(error => {
273
+ logForDebugging(
274
+ `[3P telemetry] Telemetry init failed (remote settings path): ${errorMessage(error)}`,
275
+ { level: 'error' },
276
+ )
277
+ })
278
+ } else {
279
+ void doInitializeTelemetry().catch(error => {
280
+ logForDebugging(
281
+ `[3P telemetry] Telemetry init failed: ${errorMessage(error)}`,
282
+ { level: 'error' },
283
+ )
284
+ })
285
+ }
286
+ }
287
+
288
+ async function doInitializeTelemetry(): Promise<void> {
289
+ if (telemetryInitialized) {
290
+ // Already initialized, nothing to do
291
+ return
292
+ }
293
+
294
+ // Set flag before init to prevent double initialization
295
+ telemetryInitialized = true
296
+ try {
297
+ await setMeterState()
298
+ } catch (error) {
299
+ // Reset flag on failure so subsequent calls can retry
300
+ telemetryInitialized = false
301
+ throw error
302
+ }
303
+ }
304
+
305
+ async function setMeterState(): Promise<void> {
306
+ // Lazy-load instrumentation to defer ~400KB of OpenTelemetry + protobuf
307
+ const { initializeTelemetry } = await import(
308
+ '../utils/telemetry/instrumentation.js'
309
+ )
310
+ // Initialize customer OTLP telemetry (metrics, logs, traces)
311
+ const meter = await initializeTelemetry()
312
+ if (meter) {
313
+ // Create factory function for attributed counters
314
+ const createAttributedCounter = (
315
+ name: string,
316
+ options: MetricOptions,
317
+ ): AttributedCounter => {
318
+ const counter = meter?.createCounter(name, options)
319
+
320
+ return {
321
+ add(value: number, additionalAttributes: Attributes = {}) {
322
+ // Always fetch fresh telemetry attributes to ensure they're up to date
323
+ const currentAttributes = getTelemetryAttributes()
324
+ const mergedAttributes = {
325
+ ...currentAttributes,
326
+ ...additionalAttributes,
327
+ }
328
+ counter?.add(value, mergedAttributes)
329
+ },
330
+ }
331
+ }
332
+
333
+ setMeter(meter, createAttributedCounter)
334
+
335
+ // Increment session counter here because the startup telemetry path
336
+ // runs before this async initialization completes, so the counter
337
+ // would be null there.
338
+ getSessionCounter()?.add(1)
339
+ }
340
+ }
@@ -0,0 +1,196 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js'
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
3
+ import {
4
+ CallToolRequestSchema,
5
+ type CallToolResult,
6
+ ListToolsRequestSchema,
7
+ type ListToolsResult,
8
+ type Tool,
9
+ } from '@modelcontextprotocol/sdk/types.js'
10
+ import { getDefaultAppState } from 'src/state/AppStateStore.js'
11
+ import review from '../commands/review.js'
12
+ import type { Command } from '../commands.js'
13
+ import {
14
+ findToolByName,
15
+ getEmptyToolPermissionContext,
16
+ type ToolUseContext,
17
+ } from '../Tool.js'
18
+ import { getTools } from '../tools.js'
19
+ import { createAbortController } from '../utils/abortController.js'
20
+ import { createFileStateCacheWithSizeLimit } from '../utils/fileStateCache.js'
21
+ import { logError } from '../utils/log.js'
22
+ import { createAssistantMessage } from '../utils/messages.js'
23
+ import { getMainLoopModel } from '../utils/model/model.js'
24
+ import { hasPermissionsToUseTool } from '../utils/permissions/permissions.js'
25
+ import { setCwd } from '../utils/Shell.js'
26
+ import { jsonStringify } from '../utils/slowOperations.js'
27
+ import { getErrorParts } from '../utils/toolErrors.js'
28
+ import { zodToJsonSchema } from '../utils/zodToJsonSchema.js'
29
+
30
+ type ToolInput = Tool['inputSchema']
31
+ type ToolOutput = Tool['outputSchema']
32
+
33
+ const MCP_COMMANDS: Command[] = [review]
34
+
35
+ export async function startMCPServer(
36
+ cwd: string,
37
+ debug: boolean,
38
+ verbose: boolean,
39
+ ): Promise<void> {
40
+ // Use size-limited LRU cache for readFileState to prevent unbounded memory growth
41
+ // 100 files and 25MB limit should be sufficient for MCP server operations
42
+ const READ_FILE_STATE_CACHE_SIZE = 100
43
+ const readFileStateCache = createFileStateCacheWithSizeLimit(
44
+ READ_FILE_STATE_CACHE_SIZE,
45
+ )
46
+ setCwd(cwd)
47
+ const server = new Server(
48
+ {
49
+ name: 'claude/tengu',
50
+ version: MACRO.VERSION,
51
+ },
52
+ {
53
+ capabilities: {
54
+ tools: {},
55
+ },
56
+ },
57
+ )
58
+
59
+ server.setRequestHandler(
60
+ ListToolsRequestSchema,
61
+ async (): Promise<ListToolsResult> => {
62
+ // TODO: Also re-expose any MCP tools
63
+ const toolPermissionContext = getEmptyToolPermissionContext()
64
+ const tools = getTools(toolPermissionContext)
65
+ return {
66
+ tools: await Promise.all(
67
+ tools.map(async tool => {
68
+ let outputSchema: ToolOutput | undefined
69
+ if (tool.outputSchema) {
70
+ const convertedSchema = zodToJsonSchema(tool.outputSchema)
71
+ // MCP SDK requires outputSchema to have type: "object" at root level
72
+ // Skip schemas with anyOf/oneOf at root (from z.union, z.discriminatedUnion, etc.)
73
+ // See: https://github.com/anthropics/claude-code/issues/8014
74
+ if (
75
+ typeof convertedSchema === 'object' &&
76
+ convertedSchema !== null &&
77
+ 'type' in convertedSchema &&
78
+ convertedSchema.type === 'object'
79
+ ) {
80
+ outputSchema = convertedSchema as ToolOutput
81
+ }
82
+ }
83
+ return {
84
+ ...tool,
85
+ description: await tool.prompt({
86
+ getToolPermissionContext: async () => toolPermissionContext,
87
+ tools,
88
+ agents: [],
89
+ }),
90
+ inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,
91
+ outputSchema,
92
+ }
93
+ }),
94
+ ),
95
+ }
96
+ },
97
+ )
98
+
99
+ server.setRequestHandler(
100
+ CallToolRequestSchema,
101
+ async ({ params: { name, arguments: args } }): Promise<CallToolResult> => {
102
+ const toolPermissionContext = getEmptyToolPermissionContext()
103
+ // TODO: Also re-expose any MCP tools
104
+ const tools = getTools(toolPermissionContext)
105
+ const tool = findToolByName(tools, name)
106
+ if (!tool) {
107
+ throw new Error(`Tool ${name} not found`)
108
+ }
109
+
110
+ // Assume MCP servers do not read messages separately from the tool
111
+ // call arguments.
112
+ const toolUseContext: ToolUseContext = {
113
+ abortController: createAbortController(),
114
+ options: {
115
+ commands: MCP_COMMANDS,
116
+ tools,
117
+ mainLoopModel: getMainLoopModel(),
118
+ thinkingConfig: { type: 'disabled' },
119
+ mcpClients: [],
120
+ mcpResources: {},
121
+ isNonInteractiveSession: true,
122
+ debug,
123
+ verbose,
124
+ agentDefinitions: { activeAgents: [], allAgents: [] },
125
+ },
126
+ getAppState: () => getDefaultAppState(),
127
+ setAppState: () => {},
128
+ messages: [],
129
+ readFileState: readFileStateCache,
130
+ setInProgressToolUseIDs: () => {},
131
+ setResponseLength: () => {},
132
+ updateFileHistoryState: () => {},
133
+ updateAttributionState: () => {},
134
+ }
135
+
136
+ // TODO: validate input types with zod
137
+ try {
138
+ if (!tool.isEnabled()) {
139
+ throw new Error(`Tool ${name} is not enabled`)
140
+ }
141
+ const validationResult = await tool.validateInput?.(
142
+ (args as never) ?? {},
143
+ toolUseContext,
144
+ )
145
+ if (validationResult && !validationResult.result) {
146
+ throw new Error(
147
+ `Tool ${name} input is invalid: ${validationResult.message}`,
148
+ )
149
+ }
150
+ const finalResult = await tool.call(
151
+ (args ?? {}) as never,
152
+ toolUseContext,
153
+ hasPermissionsToUseTool,
154
+ createAssistantMessage({
155
+ content: [],
156
+ }),
157
+ )
158
+
159
+ return {
160
+ content: [
161
+ {
162
+ type: 'text' as const,
163
+ text:
164
+ typeof finalResult === 'string'
165
+ ? finalResult
166
+ : jsonStringify(finalResult.data),
167
+ },
168
+ ],
169
+ }
170
+ } catch (error) {
171
+ logError(error)
172
+
173
+ const parts =
174
+ error instanceof Error ? getErrorParts(error) : [String(error)]
175
+ const errorText = parts.filter(Boolean).join('\n').trim() || 'Error'
176
+
177
+ return {
178
+ isError: true,
179
+ content: [
180
+ {
181
+ type: 'text',
182
+ text: errorText,
183
+ },
184
+ ],
185
+ }
186
+ }
187
+ },
188
+ )
189
+
190
+ async function runServer() {
191
+ const transport = new StdioServerTransport()
192
+ await server.connect(transport)
193
+ }
194
+
195
+ return await runServer()
196
+ }
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Sandbox types for the Claude Code Agent SDK
3
+ *
4
+ * This file is the single source of truth for sandbox configuration types.
5
+ * Both the SDK and the settings validation import from here.
6
+ */
7
+
8
+ import { z } from 'zod/v4'
9
+ import { lazySchema } from '../utils/lazySchema.js'
10
+
11
+ /**
12
+ * Network configuration schema for sandbox.
13
+ */
14
+ export const SandboxNetworkConfigSchema = lazySchema(() =>
15
+ z
16
+ .object({
17
+ allowedDomains: z.array(z.string()).optional(),
18
+ allowManagedDomainsOnly: z
19
+ .boolean()
20
+ .optional()
21
+ .describe(
22
+ 'When true (and set in managed settings), only allowedDomains and WebFetch(domain:...) allow rules from managed settings are respected. ' +
23
+ 'User, project, local, and flag settings domains are ignored. Denied domains are still respected from all sources.',
24
+ ),
25
+ allowUnixSockets: z
26
+ .array(z.string())
27
+ .optional()
28
+ .describe(
29
+ 'macOS only: Unix socket paths to allow. Ignored on Linux (seccomp cannot filter by path).',
30
+ ),
31
+ allowAllUnixSockets: z
32
+ .boolean()
33
+ .optional()
34
+ .describe(
35
+ 'If true, allow all Unix sockets (disables blocking on both platforms).',
36
+ ),
37
+ allowLocalBinding: z.boolean().optional(),
38
+ httpProxyPort: z.number().optional(),
39
+ socksProxyPort: z.number().optional(),
40
+ })
41
+ .optional(),
42
+ )
43
+
44
+ /**
45
+ * Filesystem configuration schema for sandbox.
46
+ */
47
+ export const SandboxFilesystemConfigSchema = lazySchema(() =>
48
+ z
49
+ .object({
50
+ allowWrite: z
51
+ .array(z.string())
52
+ .optional()
53
+ .describe(
54
+ 'Additional paths to allow writing within the sandbox. ' +
55
+ 'Merged with paths from Edit(...) allow permission rules.',
56
+ ),
57
+ denyWrite: z
58
+ .array(z.string())
59
+ .optional()
60
+ .describe(
61
+ 'Additional paths to deny writing within the sandbox. ' +
62
+ 'Merged with paths from Edit(...) deny permission rules.',
63
+ ),
64
+ denyRead: z
65
+ .array(z.string())
66
+ .optional()
67
+ .describe(
68
+ 'Additional paths to deny reading within the sandbox. ' +
69
+ 'Merged with paths from Read(...) deny permission rules.',
70
+ ),
71
+ allowRead: z
72
+ .array(z.string())
73
+ .optional()
74
+ .describe(
75
+ 'Paths to re-allow reading within denyRead regions. ' +
76
+ 'Takes precedence over denyRead for matching paths.',
77
+ ),
78
+ allowManagedReadPathsOnly: z
79
+ .boolean()
80
+ .optional()
81
+ .describe(
82
+ 'When true (set in managed settings), only allowRead paths from policySettings are used.',
83
+ ),
84
+ })
85
+ .optional(),
86
+ )
87
+
88
+ /**
89
+ * Sandbox settings schema.
90
+ */
91
+ export const SandboxSettingsSchema = lazySchema(() =>
92
+ z
93
+ .object({
94
+ enabled: z.boolean().optional(),
95
+ failIfUnavailable: z
96
+ .boolean()
97
+ .optional()
98
+ .describe(
99
+ 'Exit with an error at startup if sandbox.enabled is true but the sandbox cannot start ' +
100
+ '(missing dependencies, unsupported platform, or platform not in enabledPlatforms). ' +
101
+ 'When false (default), a warning is shown and commands run unsandboxed. ' +
102
+ 'Intended for managed-settings deployments that require sandboxing as a hard gate.',
103
+ ),
104
+ // Note: enabledPlatforms is an undocumented setting read via .passthrough()
105
+ // It restricts sandboxing to specific platforms (e.g., ["macos"]).
106
+ //
107
+ // Added to unblock NVIDIA enterprise rollout: they want to enable
108
+ // autoAllowBashIfSandboxed but only on macOS initially, since Linux/WSL
109
+ // sandbox support is newer and less battle-tested. This allows them to
110
+ // set enabledPlatforms: ["macos"] to disable sandbox (and auto-allow)
111
+ // on other platforms until they're ready to expand.
112
+ autoAllowBashIfSandboxed: z.boolean().optional(),
113
+ allowUnsandboxedCommands: z
114
+ .boolean()
115
+ .optional()
116
+ .describe(
117
+ 'Allow commands to run outside the sandbox via the dangerouslyDisableSandbox parameter. ' +
118
+ 'When false, the dangerouslyDisableSandbox parameter is completely ignored and all commands must run sandboxed. ' +
119
+ 'Default: true.',
120
+ ),
121
+ network: SandboxNetworkConfigSchema(),
122
+ filesystem: SandboxFilesystemConfigSchema(),
123
+ ignoreViolations: z.record(z.string(), z.array(z.string())).optional(),
124
+ enableWeakerNestedSandbox: z.boolean().optional(),
125
+ enableWeakerNetworkIsolation: z
126
+ .boolean()
127
+ .optional()
128
+ .describe(
129
+ 'macOS only: Allow access to com.apple.trustd.agent in the sandbox. ' +
130
+ 'Needed for Go-based CLI tools (gh, gcloud, terraform, etc.) to verify TLS certificates ' +
131
+ 'when using httpProxyPort with a MITM proxy and custom CA. ' +
132
+ '**Reduces security** — opens a potential data exfiltration vector through the trustd service. Default: false',
133
+ ),
134
+ excludedCommands: z.array(z.string()).optional(),
135
+ ripgrep: z
136
+ .object({
137
+ command: z.string(),
138
+ args: z.array(z.string()).optional(),
139
+ })
140
+ .optional()
141
+ .describe('Custom ripgrep configuration for bundled ripgrep support'),
142
+ })
143
+ .passthrough(),
144
+ )
145
+
146
+ // Inferred types from schemas
147
+ export type SandboxSettings = z.infer<ReturnType<typeof SandboxSettingsSchema>>
148
+ export type SandboxNetworkConfig = NonNullable<
149
+ z.infer<ReturnType<typeof SandboxNetworkConfigSchema>>
150
+ >
151
+ export type SandboxFilesystemConfig = NonNullable<
152
+ z.infer<ReturnType<typeof SandboxFilesystemConfigSchema>>
153
+ >
154
+ export type SandboxIgnoreViolations = NonNullable<
155
+ SandboxSettings['ignoreViolations']
156
+ >