@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,25 @@
1
+ /**
2
+ * Constants for the official Anthropic plugins marketplace.
3
+ *
4
+ * The official marketplace is hosted on GitHub and provides first-party
5
+ * plugins developed by Anthropic. This file defines the constants needed
6
+ * to install and identify this marketplace.
7
+ */
8
+
9
+ import type { MarketplaceSource } from './schemas.js'
10
+
11
+ /**
12
+ * Source configuration for the official Anthropic plugins marketplace.
13
+ * Used when auto-installing the marketplace on startup.
14
+ */
15
+ export const OFFICIAL_MARKETPLACE_SOURCE = {
16
+ source: 'github',
17
+ repo: 'anthropics/claude-plugins-official',
18
+ } as const satisfies MarketplaceSource
19
+
20
+ /**
21
+ * Display name for the official marketplace.
22
+ * This is the name under which the marketplace will be registered
23
+ * in the known_marketplaces.json file.
24
+ */
25
+ export const OFFICIAL_MARKETPLACE_NAME = 'claude-plugins-official'
@@ -0,0 +1,216 @@
1
+ /**
2
+ * inc-5046: fetch the official marketplace from a GCS mirror instead of
3
+ * git-cloning GitHub on every startup.
4
+ *
5
+ * Backend (anthropic#317037) publishes a marketplace-only zip alongside the
6
+ * titanium squashfs, keyed by base repo SHA. This module fetches the `latest`
7
+ * pointer, compares against a local sentinel, and downloads+extracts the zip
8
+ * when there's a new SHA. Callers decide fallback behavior on failure.
9
+ */
10
+
11
+ import axios from 'src/utils/axios.js'
12
+ import { chmod, mkdir, readFile, rename, rm, writeFile } from 'fs/promises'
13
+ import { dirname, join, resolve, sep } from 'path'
14
+ import { waitForScrollIdle } from '../../bootstrap/state.js'
15
+ import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../../services/analytics/index.js'
16
+ import { logEvent } from '../../services/analytics/index.js'
17
+ import { logForDebugging } from '../debug.js'
18
+ import { parseZipModes, unzipFile } from '../dxt/zip.js'
19
+ import { errorMessage, getErrnoCode } from '../errors.js'
20
+
21
+ type SafeString = AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
22
+
23
+ // CDN-fronted domain for the public GCS bucket (same bucket the native
24
+ // binary ships from — nativeInstaller/download.ts:24 uses the raw GCS URL).
25
+ // `{sha}.zip` is content-addressed so CDN can cache it indefinitely;
26
+ // `latest` has Cache-Control: max-age=300 so CDN staleness is bounded.
27
+ // Backend (anthropic#317037) populates this prefix.
28
+ const GCS_BASE =
29
+ 'https://downloads.claude.ai/claude-code-releases/plugins/claude-plugins-official'
30
+
31
+ // Zip arc paths are seed-dir-relative (marketplaces/claude-plugins-official/…)
32
+ // so the titanium seed machinery can use the same zip. Strip this prefix when
33
+ // extracting for a laptop install.
34
+ const ARC_PREFIX = 'marketplaces/claude-plugins-official/'
35
+
36
+ /**
37
+ * Fetch the official marketplace from GCS and extract to installLocation.
38
+ * Idempotent — checks a `.gcs-sha` sentinel before downloading the ~3.5MB zip.
39
+ *
40
+ * @param installLocation where to extract (must be inside marketplacesCacheDir)
41
+ * @param marketplacesCacheDir the plugins marketplace cache root — passed in
42
+ * by callers (rather than imported from pluginDirectories) to break a
43
+ * circular-dep edge through marketplaceManager
44
+ * @returns the fetched SHA on success (including no-op), null on any failure
45
+ * (network, 404, zip parse). Caller decides whether to fall through to git.
46
+ */
47
+ export async function fetchOfficialMarketplaceFromGcs(
48
+ installLocation: string,
49
+ marketplacesCacheDir: string,
50
+ ): Promise<string | null> {
51
+ // Defense in depth: this function does `rm(installLocation, {recursive})`
52
+ // during the atomic swap. A corrupted known_marketplaces.json (gh-32793 —
53
+ // Windows path read on WSL, literal tilde, manual edit) could point at the
54
+ // user's project. Refuse any path outside the marketplaces cache dir.
55
+ // Same guard as refreshMarketplace() at marketplaceManager.ts:~2392 but
56
+ // inside the function so ALL callers are covered.
57
+ const cacheDir = resolve(marketplacesCacheDir)
58
+ const resolvedLoc = resolve(installLocation)
59
+ if (resolvedLoc !== cacheDir && !resolvedLoc.startsWith(cacheDir + sep)) {
60
+ logForDebugging(
61
+ `fetchOfficialMarketplaceFromGcs: refusing path outside cache dir: ${installLocation}`,
62
+ { level: 'error' },
63
+ )
64
+ return null
65
+ }
66
+
67
+ // Network + zip extraction competes for the event loop with scroll frames.
68
+ // This is a fire-and-forget startup call — delaying by a few hundred ms
69
+ // until scroll settles is invisible to the user.
70
+ await waitForScrollIdle()
71
+
72
+ const start = performance.now()
73
+ let outcome: 'noop' | 'updated' | 'failed' = 'failed'
74
+ let sha: string | undefined
75
+ let bytes: number | undefined
76
+ let errKind: string | undefined
77
+
78
+ try {
79
+ // 1. Latest pointer — ~40 bytes, backend sets Cache-Control: no-cache,
80
+ // max-age=300. Cheap enough to hit every startup.
81
+ const latest = await axios.get(`${GCS_BASE}/latest`, {
82
+ responseType: 'text',
83
+ timeout: 10_000,
84
+ })
85
+ sha = String(latest.data).trim()
86
+ if (!sha) {
87
+ // Empty /latest body — backend misconfigured. Bail (null), don't
88
+ // lock into a permanently-broken empty-sentinel state.
89
+ throw new Error('latest pointer returned empty body')
90
+ }
91
+
92
+ // 2. Sentinel check — `.gcs-sha` at the install root holds the last
93
+ // extracted SHA. Matching means we already have this content.
94
+ const sentinelPath = join(installLocation, '.gcs-sha')
95
+ const currentSha = await readFile(sentinelPath, 'utf8').then(
96
+ s => s.trim(),
97
+ () => null, // ENOENT — first fetch, proceed to download
98
+ )
99
+ if (currentSha === sha) {
100
+ outcome = 'noop'
101
+ return sha
102
+ }
103
+
104
+ // 3. Download zip and extract to a staging dir, then atomic-swap into
105
+ // place. Crash mid-extract leaves a .staging dir (next run rm's it)
106
+ // rather than a half-written installLocation.
107
+ const zipResp = await axios.get(`${GCS_BASE}/${sha}.zip`, {
108
+ responseType: 'arraybuffer',
109
+ timeout: 60_000,
110
+ })
111
+ const zipBuf = Buffer.from(zipResp.data)
112
+ bytes = zipBuf.length
113
+ const files = await unzipFile(zipBuf)
114
+ // fflate doesn't surface external_attr, so parse the central directory
115
+ // ourselves to recover exec bits. Without this, hooks/scripts extract as
116
+ // 0644 and `sh -c "/path/script.sh"` (hooks.ts:~1002) fails with EACCES
117
+ // on Unix. Git-clone preserves +x natively; this keeps GCS at parity.
118
+ const modes = parseZipModes(zipBuf)
119
+
120
+ const staging = `${installLocation}.staging`
121
+ await rm(staging, { recursive: true, force: true })
122
+ await mkdir(staging, { recursive: true })
123
+ for (const [arcPath, data] of Object.entries(files)) {
124
+ if (!arcPath.startsWith(ARC_PREFIX)) continue
125
+ const rel = arcPath.slice(ARC_PREFIX.length)
126
+ if (!rel || rel.endsWith('/')) continue // prefix dir entry or subdir entry
127
+ const dest = join(staging, rel)
128
+ await mkdir(dirname(dest), { recursive: true })
129
+ await writeFile(dest, data)
130
+ const mode = modes[arcPath]
131
+ if (mode && mode & 0o111) {
132
+ // Only chmod when an exec bit is set — skip plain files to save syscalls.
133
+ // Swallow EPERM/ENOTSUP (NFS root_squash, some FUSE mounts) — losing +x
134
+ // is the pre-PR behavior and better than aborting mid-extraction.
135
+ await chmod(dest, mode & 0o777).catch(() => {})
136
+ }
137
+ }
138
+ await writeFile(join(staging, '.gcs-sha'), sha)
139
+
140
+ // Atomic swap: rm old, rename staging. Brief window where installLocation
141
+ // doesn't exist — acceptable for a background refresh (caller retries next
142
+ // startup if it crashes here).
143
+ await rm(installLocation, { recursive: true, force: true })
144
+ await rename(staging, installLocation)
145
+
146
+ outcome = 'updated'
147
+ return sha
148
+ } catch (e) {
149
+ errKind = classifyGcsError(e)
150
+ logForDebugging(
151
+ `Official marketplace GCS fetch failed: ${errorMessage(e)}`,
152
+ { level: 'warn' },
153
+ )
154
+ return null
155
+ } finally {
156
+ // tengu_plugin_remote_fetch schema shared with the telemetry PR
157
+ // (.daisy/inc-5046/index.md) — adds source:'marketplace_gcs'. All string
158
+ // values below are static enums or a git SHA — not code/filepaths/PII.
159
+ logEvent('tengu_plugin_remote_fetch', {
160
+ source: 'marketplace_gcs' as SafeString,
161
+ host: 'downloads.claude.ai' as SafeString,
162
+ is_official: true,
163
+ outcome: outcome as SafeString,
164
+ duration_ms: Math.round(performance.now() - start),
165
+ ...(bytes !== undefined && { bytes }),
166
+ ...(sha && { sha: sha as SafeString }),
167
+ ...(errKind && { error_kind: errKind as SafeString }),
168
+ })
169
+ }
170
+ }
171
+
172
+ // Bounded set of errno codes we report by name. Anything else buckets as
173
+ // fs_other to keep dashboard cardinality tractable.
174
+ const KNOWN_FS_CODES = new Set([
175
+ 'ENOSPC',
176
+ 'EACCES',
177
+ 'EPERM',
178
+ 'EXDEV',
179
+ 'EBUSY',
180
+ 'ENOENT',
181
+ 'ENOTDIR',
182
+ 'EROFS',
183
+ 'EMFILE',
184
+ 'ENAMETOOLONG',
185
+ ])
186
+
187
+ /**
188
+ * Classify a GCS fetch error into a stable telemetry bucket.
189
+ *
190
+ * Telemetry from v2.1.83+ showed 50% of failures landing in 'other' — and
191
+ * 99.99% of those had both sha+bytes set, meaning download succeeded but
192
+ * extraction/fs failed. This splits that bucket so we can see whether the
193
+ * failures are fixable (wrong staging dir, cross-device rename) or inherent
194
+ * (disk full, permission denied) before flipping the git-fallback kill switch.
195
+ */
196
+ export function classifyGcsError(e: unknown): string {
197
+ if (axios.isAxiosError(e)) {
198
+ if (e.code === 'ECONNABORTED') return 'timeout'
199
+ if (e.response) return `http_${e.response.status}`
200
+ return 'network'
201
+ }
202
+ const code = getErrnoCode(e)
203
+ // Node fs errno codes are E<UPPERCASE> (ENOSPC, EACCES). Axios also sets
204
+ // .code (ERR_NETWORK, ERR_BAD_OPTION, EPROTO) — don't bucket those as fs.
205
+ if (code && /^E[A-Z]+$/.test(code) && !code.startsWith('ERR_')) {
206
+ return KNOWN_FS_CODES.has(code) ? `fs_${code}` : 'fs_other'
207
+ }
208
+ // fflate sets numeric .code (0-14) on inflate/unzip errors — catches
209
+ // deflate-level corruption ("unexpected EOF", "invalid block type") that
210
+ // the message regex misses.
211
+ if (typeof (e as { code?: unknown })?.code === 'number') return 'zip_parse'
212
+ const msg = errorMessage(e)
213
+ if (/unzip|invalid zip|central directory/i.test(msg)) return 'zip_parse'
214
+ if (/empty body/.test(msg)) return 'empty_latest'
215
+ return 'other'
216
+ }
@@ -0,0 +1,439 @@
1
+ /**
2
+ * Auto-install logic for the official Anthropic marketplace.
3
+ *
4
+ * This module handles automatically installing the official marketplace
5
+ * on startup for new users, with appropriate checks for:
6
+ * - Enterprise policy restrictions
7
+ * - Git availability
8
+ * - Previous installation attempts
9
+ */
10
+
11
+ import { join } from 'path'
12
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from '../../services/analytics/growthbook.js'
13
+ import { logEvent } from '../../services/analytics/index.js'
14
+ import { getGlobalConfig, saveGlobalConfig } from '../config.js'
15
+ import { logForDebugging } from '../debug.js'
16
+ import { isEnvTruthy } from '../envUtils.js'
17
+ import { toError } from '../errors.js'
18
+ import { logError } from '../log.js'
19
+ import { checkGitAvailable, markGitUnavailable } from './gitAvailability.js'
20
+ import { isSourceAllowedByPolicy } from './marketplaceHelpers.js'
21
+ import {
22
+ addMarketplaceSource,
23
+ getMarketplacesCacheDir,
24
+ loadKnownMarketplacesConfig,
25
+ saveKnownMarketplacesConfig,
26
+ } from './marketplaceManager.js'
27
+ import {
28
+ OFFICIAL_MARKETPLACE_NAME,
29
+ OFFICIAL_MARKETPLACE_SOURCE,
30
+ } from './officialMarketplace.js'
31
+ import { fetchOfficialMarketplaceFromGcs } from './officialMarketplaceGcs.js'
32
+
33
+ /**
34
+ * Reason why the official marketplace was not installed
35
+ */
36
+ export type OfficialMarketplaceSkipReason =
37
+ | 'already_attempted'
38
+ | 'already_installed'
39
+ | 'policy_blocked'
40
+ | 'git_unavailable'
41
+ | 'gcs_unavailable'
42
+ | 'unknown'
43
+
44
+ /**
45
+ * Check if official marketplace auto-install is disabled via environment variable.
46
+ */
47
+ export function isOfficialMarketplaceAutoInstallDisabled(): boolean {
48
+ return isEnvTruthy(
49
+ process.env.CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL,
50
+ )
51
+ }
52
+
53
+ /**
54
+ * Configuration for retry logic
55
+ */
56
+ export const RETRY_CONFIG = {
57
+ MAX_ATTEMPTS: 10,
58
+ INITIAL_DELAY_MS: 60 * 60 * 1000, // 1 hour
59
+ BACKOFF_MULTIPLIER: 2,
60
+ MAX_DELAY_MS: 7 * 24 * 60 * 60 * 1000, // 1 week
61
+ }
62
+
63
+ /**
64
+ * Calculate next retry delay using exponential backoff
65
+ */
66
+ function calculateNextRetryDelay(retryCount: number): number {
67
+ const delay =
68
+ RETRY_CONFIG.INITIAL_DELAY_MS *
69
+ Math.pow(RETRY_CONFIG.BACKOFF_MULTIPLIER, retryCount)
70
+ return Math.min(delay, RETRY_CONFIG.MAX_DELAY_MS)
71
+ }
72
+
73
+ /**
74
+ * Determine if installation should be retried based on failure reason and retry state
75
+ */
76
+ function shouldRetryInstallation(
77
+ config: ReturnType<typeof getGlobalConfig>,
78
+ ): boolean {
79
+ // If never attempted, should try
80
+ if (!config.officialMarketplaceAutoInstallAttempted) {
81
+ return true
82
+ }
83
+
84
+ // If already installed successfully, don't retry
85
+ if (config.officialMarketplaceAutoInstalled) {
86
+ return false
87
+ }
88
+
89
+ const failReason = config.officialMarketplaceAutoInstallFailReason
90
+ const retryCount = config.officialMarketplaceAutoInstallRetryCount || 0
91
+ const nextRetryTime = config.officialMarketplaceAutoInstallNextRetryTime
92
+ const now = Date.now()
93
+
94
+ // Check if we've exceeded max attempts
95
+ if (retryCount >= RETRY_CONFIG.MAX_ATTEMPTS) {
96
+ return false
97
+ }
98
+
99
+ // Permanent failures - don't retry
100
+ if (failReason === 'policy_blocked') {
101
+ return false
102
+ }
103
+
104
+ // Check if enough time has passed for next retry
105
+ if (nextRetryTime && now < nextRetryTime) {
106
+ return false
107
+ }
108
+
109
+ // Retry for temporary failures (unknown), semi-permanent (git_unavailable),
110
+ // and legacy state (undefined failReason from before retry logic existed)
111
+ return (
112
+ failReason === 'unknown' ||
113
+ failReason === 'git_unavailable' ||
114
+ failReason === 'gcs_unavailable' ||
115
+ failReason === undefined
116
+ )
117
+ }
118
+
119
+ /**
120
+ * Result of the auto-install check
121
+ */
122
+ export type OfficialMarketplaceCheckResult = {
123
+ /** Whether the marketplace was successfully installed */
124
+ installed: boolean
125
+ /** Whether the installation was skipped (and why) */
126
+ skipped: boolean
127
+ /** Reason for skipping, if applicable */
128
+ reason?: OfficialMarketplaceSkipReason
129
+ /** Whether saving retry metadata to config failed */
130
+ configSaveFailed?: boolean
131
+ }
132
+
133
+ /**
134
+ * Check and install the official marketplace on startup.
135
+ *
136
+ * This function is designed to be called as a fire-and-forget operation
137
+ * during startup. It will:
138
+ * 1. Check if installation was already attempted
139
+ * 2. Check if marketplace is already installed
140
+ * 3. Check enterprise policy restrictions
141
+ * 4. Check git availability
142
+ * 5. Attempt installation
143
+ * 6. Record the result in GlobalConfig
144
+ *
145
+ * @returns Result indicating whether installation succeeded or was skipped
146
+ */
147
+ export async function checkAndInstallOfficialMarketplace(): Promise<OfficialMarketplaceCheckResult> {
148
+ const config = getGlobalConfig()
149
+
150
+ // Check if we should retry installation
151
+ if (!shouldRetryInstallation(config)) {
152
+ const reason: OfficialMarketplaceSkipReason =
153
+ config.officialMarketplaceAutoInstallFailReason ?? 'already_attempted'
154
+ logForDebugging(`Official marketplace auto-install skipped: ${reason}`)
155
+ return {
156
+ installed: false,
157
+ skipped: true,
158
+ reason,
159
+ }
160
+ }
161
+
162
+ try {
163
+ // Check if auto-install is disabled via env var
164
+ if (isOfficialMarketplaceAutoInstallDisabled()) {
165
+ logForDebugging(
166
+ 'Official marketplace auto-install disabled via env var, skipping',
167
+ )
168
+ saveGlobalConfig(current => ({
169
+ ...current,
170
+ officialMarketplaceAutoInstallAttempted: true,
171
+ officialMarketplaceAutoInstalled: false,
172
+ officialMarketplaceAutoInstallFailReason: 'policy_blocked',
173
+ }))
174
+ logEvent('tengu_official_marketplace_auto_install', {
175
+ installed: false,
176
+ skipped: true,
177
+ policy_blocked: true,
178
+ })
179
+ return { installed: false, skipped: true, reason: 'policy_blocked' }
180
+ }
181
+
182
+ // Check if marketplace is already installed
183
+ const knownMarketplaces = await loadKnownMarketplacesConfig()
184
+ if (knownMarketplaces[OFFICIAL_MARKETPLACE_NAME]) {
185
+ logForDebugging(
186
+ `Official marketplace '${OFFICIAL_MARKETPLACE_NAME}' already installed, skipping`,
187
+ )
188
+ // Mark as attempted so we don't check again
189
+ saveGlobalConfig(current => ({
190
+ ...current,
191
+ officialMarketplaceAutoInstallAttempted: true,
192
+ officialMarketplaceAutoInstalled: true,
193
+ }))
194
+ return { installed: false, skipped: true, reason: 'already_installed' }
195
+ }
196
+
197
+ // Check enterprise policy restrictions
198
+ if (!isSourceAllowedByPolicy(OFFICIAL_MARKETPLACE_SOURCE)) {
199
+ logForDebugging(
200
+ 'Official marketplace blocked by enterprise policy, skipping',
201
+ )
202
+ saveGlobalConfig(current => ({
203
+ ...current,
204
+ officialMarketplaceAutoInstallAttempted: true,
205
+ officialMarketplaceAutoInstalled: false,
206
+ officialMarketplaceAutoInstallFailReason: 'policy_blocked',
207
+ }))
208
+ logEvent('tengu_official_marketplace_auto_install', {
209
+ installed: false,
210
+ skipped: true,
211
+ policy_blocked: true,
212
+ })
213
+ return { installed: false, skipped: true, reason: 'policy_blocked' }
214
+ }
215
+
216
+ // inc-5046: try GCS mirror first — doesn't need git, doesn't hit GitHub.
217
+ // Backend (anthropic#317037) publishes a marketplace zip to the same
218
+ // bucket as the native binary. If GCS succeeds, register the marketplace
219
+ // with source:'github' (still true — GCS is a mirror) and skip git
220
+ // entirely.
221
+ const cacheDir = getMarketplacesCacheDir()
222
+ const installLocation = join(cacheDir, OFFICIAL_MARKETPLACE_NAME)
223
+ const gcsSha = await fetchOfficialMarketplaceFromGcs(
224
+ installLocation,
225
+ cacheDir,
226
+ )
227
+ if (gcsSha !== null) {
228
+ const known = await loadKnownMarketplacesConfig()
229
+ known[OFFICIAL_MARKETPLACE_NAME] = {
230
+ source: OFFICIAL_MARKETPLACE_SOURCE,
231
+ installLocation,
232
+ lastUpdated: new Date().toISOString(),
233
+ }
234
+ await saveKnownMarketplacesConfig(known)
235
+
236
+ saveGlobalConfig(current => ({
237
+ ...current,
238
+ officialMarketplaceAutoInstallAttempted: true,
239
+ officialMarketplaceAutoInstalled: true,
240
+ officialMarketplaceAutoInstallFailReason: undefined,
241
+ officialMarketplaceAutoInstallRetryCount: undefined,
242
+ officialMarketplaceAutoInstallLastAttemptTime: undefined,
243
+ officialMarketplaceAutoInstallNextRetryTime: undefined,
244
+ }))
245
+ logEvent('tengu_official_marketplace_auto_install', {
246
+ installed: true,
247
+ skipped: false,
248
+ via_gcs: true,
249
+ })
250
+ return { installed: true, skipped: false }
251
+ }
252
+ // GCS failed (404 until backend writes, or network). Fall through to git
253
+ // ONLY if the kill-switch allows — same gate as refreshMarketplace().
254
+ if (
255
+ !getFeatureValue_CACHED_MAY_BE_STALE(
256
+ 'tengu_plugin_official_mkt_git_fallback',
257
+ true,
258
+ )
259
+ ) {
260
+ logForDebugging(
261
+ 'Official marketplace GCS failed; git fallback disabled by flag — skipping install',
262
+ )
263
+ // Same retry-with-backoff metadata as git_unavailable below — transient
264
+ // GCS failures should retry with exponential backoff, not give up.
265
+ const retryCount =
266
+ (config.officialMarketplaceAutoInstallRetryCount || 0) + 1
267
+ const now = Date.now()
268
+ const nextRetryTime = now + calculateNextRetryDelay(retryCount)
269
+ saveGlobalConfig(current => ({
270
+ ...current,
271
+ officialMarketplaceAutoInstallAttempted: true,
272
+ officialMarketplaceAutoInstalled: false,
273
+ officialMarketplaceAutoInstallFailReason: 'gcs_unavailable',
274
+ officialMarketplaceAutoInstallRetryCount: retryCount,
275
+ officialMarketplaceAutoInstallLastAttemptTime: now,
276
+ officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
277
+ }))
278
+ logEvent('tengu_official_marketplace_auto_install', {
279
+ installed: false,
280
+ skipped: true,
281
+ gcs_unavailable: true,
282
+ retry_count: retryCount,
283
+ })
284
+ return { installed: false, skipped: true, reason: 'gcs_unavailable' }
285
+ }
286
+
287
+ // Check git availability
288
+ const gitAvailable = await checkGitAvailable()
289
+ if (!gitAvailable) {
290
+ logForDebugging(
291
+ 'Git not available, skipping official marketplace auto-install',
292
+ )
293
+ const retryCount =
294
+ (config.officialMarketplaceAutoInstallRetryCount || 0) + 1
295
+ const now = Date.now()
296
+ const nextRetryDelay = calculateNextRetryDelay(retryCount)
297
+ const nextRetryTime = now + nextRetryDelay
298
+
299
+ let configSaveFailed = false
300
+ try {
301
+ saveGlobalConfig(current => ({
302
+ ...current,
303
+ officialMarketplaceAutoInstallAttempted: true,
304
+ officialMarketplaceAutoInstalled: false,
305
+ officialMarketplaceAutoInstallFailReason: 'git_unavailable',
306
+ officialMarketplaceAutoInstallRetryCount: retryCount,
307
+ officialMarketplaceAutoInstallLastAttemptTime: now,
308
+ officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
309
+ }))
310
+ } catch (saveError) {
311
+ configSaveFailed = true
312
+ // Log the error properly so it gets tracked
313
+ const configError = toError(saveError)
314
+ logError(configError)
315
+
316
+ logForDebugging(
317
+ `Failed to save marketplace auto-install git_unavailable state: ${saveError}`,
318
+ { level: 'error' },
319
+ )
320
+ }
321
+ logEvent('tengu_official_marketplace_auto_install', {
322
+ installed: false,
323
+ skipped: true,
324
+ git_unavailable: true,
325
+ retry_count: retryCount,
326
+ })
327
+ return {
328
+ installed: false,
329
+ skipped: true,
330
+ reason: 'git_unavailable',
331
+ configSaveFailed,
332
+ }
333
+ }
334
+
335
+ // Attempt installation
336
+ logForDebugging('Attempting to auto-install official marketplace')
337
+ await addMarketplaceSource(OFFICIAL_MARKETPLACE_SOURCE)
338
+
339
+ // Success
340
+ logForDebugging('Successfully auto-installed official marketplace')
341
+ const previousRetryCount =
342
+ config.officialMarketplaceAutoInstallRetryCount || 0
343
+ saveGlobalConfig(current => ({
344
+ ...current,
345
+ officialMarketplaceAutoInstallAttempted: true,
346
+ officialMarketplaceAutoInstalled: true,
347
+ // Clear retry metadata on success
348
+ officialMarketplaceAutoInstallFailReason: undefined,
349
+ officialMarketplaceAutoInstallRetryCount: undefined,
350
+ officialMarketplaceAutoInstallLastAttemptTime: undefined,
351
+ officialMarketplaceAutoInstallNextRetryTime: undefined,
352
+ }))
353
+ logEvent('tengu_official_marketplace_auto_install', {
354
+ installed: true,
355
+ skipped: false,
356
+ retry_count: previousRetryCount,
357
+ })
358
+ return { installed: true, skipped: false }
359
+ } catch (error) {
360
+ // Handle installation failure
361
+ const errorMessage = error instanceof Error ? error.message : String(error)
362
+
363
+ // On macOS, /usr/bin/git is an xcrun shim that always exists on PATH, so
364
+ // checkGitAvailable() (which only does `which git`) passes even without
365
+ // Xcode CLT installed. The shim then fails at clone time with
366
+ // "xcrun: error: invalid active developer path (...)". Poison the memoized
367
+ // availability check so other git callers in this session skip cleanly,
368
+ // then return silently without recording any attempt state — next startup
369
+ // tries fresh (no backoff machinery for what is effectively "git absent").
370
+ if (errorMessage.includes('xcrun: error:')) {
371
+ markGitUnavailable()
372
+ logForDebugging(
373
+ 'Official marketplace auto-install: git is a non-functional macOS xcrun shim, treating as git_unavailable',
374
+ )
375
+ logEvent('tengu_official_marketplace_auto_install', {
376
+ installed: false,
377
+ skipped: true,
378
+ git_unavailable: true,
379
+ macos_xcrun_shim: true,
380
+ })
381
+ return {
382
+ installed: false,
383
+ skipped: true,
384
+ reason: 'git_unavailable',
385
+ }
386
+ }
387
+
388
+ logForDebugging(
389
+ `Failed to auto-install official marketplace: ${errorMessage}`,
390
+ { level: 'error' },
391
+ )
392
+ logError(toError(error))
393
+
394
+ const retryCount =
395
+ (config.officialMarketplaceAutoInstallRetryCount || 0) + 1
396
+ const now = Date.now()
397
+ const nextRetryDelay = calculateNextRetryDelay(retryCount)
398
+ const nextRetryTime = now + nextRetryDelay
399
+
400
+ let configSaveFailed = false
401
+ try {
402
+ saveGlobalConfig(current => ({
403
+ ...current,
404
+ officialMarketplaceAutoInstallAttempted: true,
405
+ officialMarketplaceAutoInstalled: false,
406
+ officialMarketplaceAutoInstallFailReason: 'unknown',
407
+ officialMarketplaceAutoInstallRetryCount: retryCount,
408
+ officialMarketplaceAutoInstallLastAttemptTime: now,
409
+ officialMarketplaceAutoInstallNextRetryTime: nextRetryTime,
410
+ }))
411
+ } catch (saveError) {
412
+ configSaveFailed = true
413
+ // Log the error properly so it gets tracked
414
+ const configError = toError(saveError)
415
+ logError(configError)
416
+
417
+ logForDebugging(
418
+ `Failed to save marketplace auto-install failure state: ${saveError}`,
419
+ { level: 'error' },
420
+ )
421
+
422
+ // Still return the failure result even if config save failed
423
+ // This ensures we report the installation failure correctly
424
+ }
425
+ logEvent('tengu_official_marketplace_auto_install', {
426
+ installed: false,
427
+ skipped: true,
428
+ failed: true,
429
+ retry_count: retryCount,
430
+ })
431
+
432
+ return {
433
+ installed: false,
434
+ skipped: true,
435
+ reason: 'unknown',
436
+ configSaveFailed,
437
+ }
438
+ }
439
+ }