@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,14 @@
1
+ import { getInitialSettings } from '../settings/settings.js'
2
+
3
+ /**
4
+ * Resolve the default shell for input-box `!` commands.
5
+ *
6
+ * Resolution order (docs/design/ps-shell-selection.md §4.2):
7
+ * settings.defaultShell → 'bash'
8
+ *
9
+ * Platform default is 'bash' everywhere — we do NOT auto-flip Windows to
10
+ * PowerShell (would break existing Windows users with bash hooks).
11
+ */
12
+ export function resolveDefaultShell(): 'bash' | 'powershell' {
13
+ return getInitialSettings().defaultShell ?? 'bash'
14
+ }
@@ -0,0 +1,33 @@
1
+ export const SHELL_TYPES = ['bash', 'powershell'] as const
2
+ export type ShellType = (typeof SHELL_TYPES)[number]
3
+ export const DEFAULT_HOOK_SHELL: ShellType = 'bash'
4
+
5
+ export type ShellProvider = {
6
+ type: ShellType
7
+ shellPath: string
8
+ detached: boolean
9
+
10
+ /**
11
+ * Build the full command string including all shell-specific setup.
12
+ * For bash: source snapshot, session env, disable extglob, eval-wrap, pwd tracking.
13
+ */
14
+ buildExecCommand(
15
+ command: string,
16
+ opts: {
17
+ id: number | string
18
+ sandboxTmpDir?: string
19
+ useSandbox: boolean
20
+ },
21
+ ): Promise<{ commandString: string; cwdFilePath: string }>
22
+
23
+ /**
24
+ * Shell args for spawn (e.g., ['-c', '-l', cmd] for bash).
25
+ */
26
+ getSpawnArgs(commandString: string): string[]
27
+
28
+ /**
29
+ * Extra env vars for this shell type.
30
+ * May perform async initialization (e.g., tmux socket setup for bash).
31
+ */
32
+ getEnvironmentOverrides(command: string): Promise<Record<string, string>>
33
+ }
@@ -0,0 +1,22 @@
1
+ import { BASH_TOOL_NAME } from '../../tools/BashTool/toolName.js'
2
+ import { POWERSHELL_TOOL_NAME } from '../../tools/PowerShellTool/toolName.js'
3
+ import { isEnvDefinedFalsy, isEnvTruthy } from '../envUtils.js'
4
+ import { getPlatform } from '../platform.js'
5
+
6
+ export const SHELL_TOOL_NAMES: string[] = [BASH_TOOL_NAME, POWERSHELL_TOOL_NAME]
7
+
8
+ /**
9
+ * Runtime gate for PowerShellTool. Windows-only (the permission engine uses
10
+ * Win32-specific path normalizations). Ant defaults on (opt-out via env=0);
11
+ * external defaults off (opt-in via env=1).
12
+ *
13
+ * Used by tools.ts (tool-list visibility), processBashCommand (! routing),
14
+ * and promptShellExecution (skill frontmatter routing) so the gate is
15
+ * consistent across all paths that invoke PowerShellTool.call().
16
+ */
17
+ export function isPowerShellToolEnabled(): boolean {
18
+ if (getPlatform() !== 'windows') return false
19
+ return process.env.USER_TYPE === 'ant'
20
+ ? !isEnvDefinedFalsy(process.env.CLAUDE_CODE_USE_POWERSHELL_TOOL)
21
+ : isEnvTruthy(process.env.CLAUDE_CODE_USE_POWERSHELL_TOOL)
22
+ }
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Fig-spec-driven command prefix extraction.
3
+ *
4
+ * Given a command name + args array + its @withfig/autocomplete spec, walks
5
+ * the spec to find how deep into the args a meaningful prefix extends.
6
+ * `git -C /repo status --short` → `git status` (spec says -C takes a value,
7
+ * skip it, find `status` as a known subcommand).
8
+ *
9
+ * Pure over (string, string[], CommandSpec) — no parser dependency. Extracted
10
+ * from src/utils/bash/prefix.ts so PowerShell's extractor can reuse it;
11
+ * external CLIs (git, npm, kubectl) are shell-agnostic.
12
+ */
13
+
14
+ import type { CommandSpec } from '../bash/registry.js'
15
+
16
+ const URL_PROTOCOLS = ['http://', 'https://', 'ftp://']
17
+
18
+ // Overrides for commands whose fig specs aren't available at runtime
19
+ // (dynamic imports don't work in native/node builds). Without these,
20
+ // calculateDepth falls back to 2, producing overly broad prefixes.
21
+ export const DEPTH_RULES: Record<string, number> = {
22
+ rg: 2, // pattern argument is required despite variadic paths
23
+ 'pre-commit': 2,
24
+ // CLI tools with deep subcommand trees (e.g. gcloud scheduler jobs list)
25
+ gcloud: 4,
26
+ 'gcloud compute': 6,
27
+ 'gcloud beta': 6,
28
+ aws: 4,
29
+ az: 4,
30
+ kubectl: 3,
31
+ docker: 3,
32
+ dotnet: 3,
33
+ 'git push': 2,
34
+ }
35
+
36
+ const toArray = <T>(val: T | T[]): T[] => (Array.isArray(val) ? val : [val])
37
+
38
+ // Check if an argument matches a known subcommand (case-insensitive: PS
39
+ // callers pass original-cased args; fig spec names are lowercase)
40
+ function isKnownSubcommand(arg: string, spec: CommandSpec | null): boolean {
41
+ if (!spec?.subcommands?.length) return false
42
+ const argLower = arg.toLowerCase()
43
+ return spec.subcommands.some(sub =>
44
+ Array.isArray(sub.name)
45
+ ? sub.name.some(n => n.toLowerCase() === argLower)
46
+ : sub.name.toLowerCase() === argLower,
47
+ )
48
+ }
49
+
50
+ // Check if a flag takes an argument based on spec, or use heuristic
51
+ function flagTakesArg(
52
+ flag: string,
53
+ nextArg: string | undefined,
54
+ spec: CommandSpec | null,
55
+ ): boolean {
56
+ // Check if flag is in spec.options
57
+ if (spec?.options) {
58
+ const option = spec.options.find(opt =>
59
+ Array.isArray(opt.name) ? opt.name.includes(flag) : opt.name === flag,
60
+ )
61
+ if (option) return !!option.args
62
+ }
63
+ // Heuristic: if next arg isn't a flag and isn't a known subcommand, assume it's a flag value
64
+ if (spec?.subcommands?.length && nextArg && !nextArg.startsWith('-')) {
65
+ return !isKnownSubcommand(nextArg, spec)
66
+ }
67
+ return false
68
+ }
69
+
70
+ // Find the first subcommand by skipping flags and their values
71
+ function findFirstSubcommand(
72
+ args: string[],
73
+ spec: CommandSpec | null,
74
+ ): string | undefined {
75
+ for (let i = 0; i < args.length; i++) {
76
+ const arg = args[i]
77
+ if (!arg) continue
78
+ if (arg.startsWith('-')) {
79
+ if (flagTakesArg(arg, args[i + 1], spec)) i++
80
+ continue
81
+ }
82
+ if (!spec?.subcommands?.length) return arg
83
+ if (isKnownSubcommand(arg, spec)) return arg
84
+ }
85
+ return undefined
86
+ }
87
+
88
+ export async function buildPrefix(
89
+ command: string,
90
+ args: string[],
91
+ spec: CommandSpec | null,
92
+ ): Promise<string> {
93
+ const maxDepth = await calculateDepth(command, args, spec)
94
+ const parts = [command]
95
+ const hasSubcommands = !!spec?.subcommands?.length
96
+ let foundSubcommand = false
97
+
98
+ for (let i = 0; i < args.length; i++) {
99
+ const arg = args[i]
100
+ if (!arg || parts.length >= maxDepth) break
101
+
102
+ if (arg.startsWith('-')) {
103
+ // Special case: python -c should stop after -c
104
+ if (arg === '-c' && ['python', 'python3'].includes(command.toLowerCase()))
105
+ break
106
+
107
+ // Check for isCommand/isModule flags that should be included in prefix
108
+ if (spec?.options) {
109
+ const option = spec.options.find(opt =>
110
+ Array.isArray(opt.name) ? opt.name.includes(arg) : opt.name === arg,
111
+ )
112
+ if (
113
+ option?.args &&
114
+ toArray(option.args).some(a => a?.isCommand || a?.isModule)
115
+ ) {
116
+ parts.push(arg)
117
+ continue
118
+ }
119
+ }
120
+
121
+ // For commands with subcommands, skip global flags to find the subcommand
122
+ if (hasSubcommands && !foundSubcommand) {
123
+ if (flagTakesArg(arg, args[i + 1], spec)) i++
124
+ continue
125
+ }
126
+ break // Stop at flags (original behavior)
127
+ }
128
+
129
+ if (await shouldStopAtArg(arg, args.slice(0, i), spec)) break
130
+ if (hasSubcommands && !foundSubcommand) {
131
+ foundSubcommand = isKnownSubcommand(arg, spec)
132
+ }
133
+ parts.push(arg)
134
+ }
135
+
136
+ return parts.join(' ')
137
+ }
138
+
139
+ async function calculateDepth(
140
+ command: string,
141
+ args: string[],
142
+ spec: CommandSpec | null,
143
+ ): Promise<number> {
144
+ // Find first subcommand by skipping flags and their values
145
+ const firstSubcommand = findFirstSubcommand(args, spec)
146
+ const commandLower = command.toLowerCase()
147
+ const key = firstSubcommand
148
+ ? `${commandLower} ${firstSubcommand.toLowerCase()}`
149
+ : commandLower
150
+ if (DEPTH_RULES[key]) return DEPTH_RULES[key]
151
+ if (DEPTH_RULES[commandLower]) return DEPTH_RULES[commandLower]
152
+ if (!spec) return 2
153
+
154
+ if (spec.options && args.some(arg => arg?.startsWith('-'))) {
155
+ for (const arg of args) {
156
+ if (!arg?.startsWith('-')) continue
157
+ const option = spec.options.find(opt =>
158
+ Array.isArray(opt.name) ? opt.name.includes(arg) : opt.name === arg,
159
+ )
160
+ if (
161
+ option?.args &&
162
+ toArray(option.args).some(arg => arg?.isCommand || arg?.isModule)
163
+ )
164
+ return 3
165
+ }
166
+ }
167
+
168
+ // Find subcommand spec using the already-found firstSubcommand
169
+ if (firstSubcommand && spec.subcommands?.length) {
170
+ const firstSubLower = firstSubcommand.toLowerCase()
171
+ const subcommand = spec.subcommands.find(sub =>
172
+ Array.isArray(sub.name)
173
+ ? sub.name.some(n => n.toLowerCase() === firstSubLower)
174
+ : sub.name.toLowerCase() === firstSubLower,
175
+ )
176
+ if (subcommand) {
177
+ if (subcommand.args) {
178
+ const subArgs = toArray(subcommand.args)
179
+ if (subArgs.some(arg => arg?.isCommand)) return 3
180
+ if (subArgs.some(arg => arg?.isVariadic)) return 2
181
+ }
182
+ if (subcommand.subcommands?.length) return 4
183
+ // Leaf subcommand with NO args declared (git show, git log, git tag):
184
+ // the 3rd word is transient (SHA, ref, tag name) → dead over-specific
185
+ // rule like PowerShell(git show 81210f8:*). NOT the isOptional case —
186
+ // `git fetch` declares optional remote/branch and `git fetch origin`
187
+ // is tested (bash/prefix.test.ts:912) as intentional remote scoping.
188
+ if (!subcommand.args) return 2
189
+ return 3
190
+ }
191
+ }
192
+
193
+ if (spec.args) {
194
+ const argsArray = toArray(spec.args)
195
+
196
+ if (argsArray.some(arg => arg?.isCommand)) {
197
+ return !Array.isArray(spec.args) && spec.args.isCommand
198
+ ? 2
199
+ : Math.min(2 + argsArray.findIndex(arg => arg?.isCommand), 3)
200
+ }
201
+
202
+ if (!spec.subcommands?.length) {
203
+ if (argsArray.some(arg => arg?.isVariadic)) return 1
204
+ if (argsArray[0] && !argsArray[0].isOptional) return 2
205
+ }
206
+ }
207
+
208
+ return spec.args && toArray(spec.args).some(arg => arg?.isDangerous) ? 3 : 2
209
+ }
210
+
211
+ async function shouldStopAtArg(
212
+ arg: string,
213
+ args: string[],
214
+ spec: CommandSpec | null,
215
+ ): Promise<boolean> {
216
+ if (arg.startsWith('-')) return true
217
+
218
+ const dotIndex = arg.lastIndexOf('.')
219
+ const hasExtension =
220
+ dotIndex > 0 &&
221
+ dotIndex < arg.length - 1 &&
222
+ !arg.substring(dotIndex + 1).includes(':')
223
+
224
+ const hasFile = arg.includes('/') || hasExtension
225
+ const hasUrl = URL_PROTOCOLS.some(proto => arg.startsWith(proto))
226
+
227
+ if (!hasFile && !hasUrl) return false
228
+
229
+ // Check if we're after a -m flag for python modules
230
+ if (spec?.options && args.length > 0 && args[args.length - 1] === '-m') {
231
+ const option = spec.options.find(opt =>
232
+ Array.isArray(opt.name) ? opt.name.includes('-m') : opt.name === '-m',
233
+ )
234
+ if (option?.args && toArray(option.args).some(arg => arg?.isModule)) {
235
+ return false // Don't stop at module names
236
+ }
237
+ }
238
+
239
+ // For actual files/URLs, always stop regardless of context
240
+ return true
241
+ }
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Utilities for managing shell configuration files (like .bashrc, .zshrc)
3
+ * Used for managing claude aliases and PATH entries
4
+ */
5
+
6
+ import { open, readFile, stat } from 'fs/promises'
7
+ import { homedir as osHomedir } from 'os'
8
+ import { join } from 'path'
9
+ import { isFsInaccessible } from './errors.js'
10
+ import { getLocalClaudePath } from './localInstaller.js'
11
+
12
+ export const CLAUDE_ALIAS_REGEX = /^\s*alias\s+claude\s*=/
13
+
14
+ type EnvLike = Record<string, string | undefined>
15
+
16
+ type ShellConfigOptions = {
17
+ env?: EnvLike
18
+ homedir?: string
19
+ }
20
+
21
+ /**
22
+ * Get the paths to shell configuration files
23
+ * Respects ZDOTDIR for zsh users
24
+ * @param options Optional overrides for testing (env, homedir)
25
+ */
26
+ export function getShellConfigPaths(
27
+ options?: ShellConfigOptions,
28
+ ): Record<string, string> {
29
+ const home = options?.homedir ?? osHomedir()
30
+ const env = options?.env ?? process.env
31
+ const zshConfigDir = env.ZDOTDIR || home
32
+ return {
33
+ zsh: join(zshConfigDir, '.zshrc'),
34
+ bash: join(home, '.bashrc'),
35
+ fish: join(home, '.config/fish/config.fish'),
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Filter out installer-created claude aliases from an array of lines
41
+ * Only removes aliases pointing to $HOME/.claude/local/claude
42
+ * Preserves custom user aliases that point to other locations
43
+ * Returns the filtered lines and whether our default installer alias was found
44
+ */
45
+ export function filterClaudeAliases(lines: string[]): {
46
+ filtered: string[]
47
+ hadAlias: boolean
48
+ } {
49
+ let hadAlias = false
50
+ const filtered = lines.filter(line => {
51
+ // Check if this is a claude alias
52
+ if (CLAUDE_ALIAS_REGEX.test(line)) {
53
+ // Extract the alias target - handle spaces, quotes, and various formats
54
+ // First try with quotes
55
+ let match = line.match(/alias\s+claude\s*=\s*["']([^"']+)["']/)
56
+ if (!match) {
57
+ // Try without quotes (capturing until end of line or comment)
58
+ match = line.match(/alias\s+claude\s*=\s*([^#\n]+)/)
59
+ }
60
+
61
+ if (match && match[1]) {
62
+ const target = match[1].trim()
63
+ // Only remove if it points to the installer location
64
+ // The installer always creates aliases with the full expanded path
65
+ if (target === getLocalClaudePath()) {
66
+ hadAlias = true
67
+ return false // Remove this line
68
+ }
69
+ }
70
+ // Keep custom aliases that don't point to the installer location
71
+ }
72
+ return true
73
+ })
74
+ return { filtered, hadAlias }
75
+ }
76
+
77
+ /**
78
+ * Read a file and split it into lines
79
+ * Returns null if file doesn't exist or can't be read
80
+ */
81
+ export async function readFileLines(
82
+ filePath: string,
83
+ ): Promise<string[] | null> {
84
+ try {
85
+ const content = await readFile(filePath, { encoding: 'utf8' })
86
+ return content.split('\n')
87
+ } catch (e: unknown) {
88
+ if (isFsInaccessible(e)) return null
89
+ throw e
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Write lines back to a file
95
+ */
96
+ export async function writeFileLines(
97
+ filePath: string,
98
+ lines: string[],
99
+ ): Promise<void> {
100
+ const fh = await open(filePath, 'w')
101
+ try {
102
+ await fh.writeFile(lines.join('\n'), { encoding: 'utf8' })
103
+ await fh.datasync()
104
+ } finally {
105
+ await fh.close()
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Check if a claude alias exists in any shell config file
111
+ * Returns the alias target if found, null otherwise
112
+ * @param options Optional overrides for testing (env, homedir)
113
+ */
114
+ export async function findClaudeAlias(
115
+ options?: ShellConfigOptions,
116
+ ): Promise<string | null> {
117
+ const configs = getShellConfigPaths(options)
118
+
119
+ for (const configPath of Object.values(configs)) {
120
+ const lines = await readFileLines(configPath)
121
+ if (!lines) continue
122
+
123
+ for (const line of lines) {
124
+ if (CLAUDE_ALIAS_REGEX.test(line)) {
125
+ // Extract the alias target
126
+ const match = line.match(/alias\s+claude=["']?([^"'\s]+)/)
127
+ if (match && match[1]) {
128
+ return match[1]
129
+ }
130
+ }
131
+ }
132
+ }
133
+
134
+ return null
135
+ }
136
+
137
+ /**
138
+ * Check if a claude alias exists and points to a valid executable
139
+ * Returns the alias target if valid, null otherwise
140
+ * @param options Optional overrides for testing (env, homedir)
141
+ */
142
+ export async function findValidClaudeAlias(
143
+ options?: ShellConfigOptions,
144
+ ): Promise<string | null> {
145
+ const aliasTarget = await findClaudeAlias(options)
146
+ if (!aliasTarget) return null
147
+
148
+ const home = options?.homedir ?? osHomedir()
149
+
150
+ // Expand ~ to home directory
151
+ const expandedPath = aliasTarget.startsWith('~')
152
+ ? aliasTarget.replace('~', home)
153
+ : aliasTarget
154
+
155
+ // Check if the target exists and is executable
156
+ try {
157
+ const stats = await stat(expandedPath)
158
+ // Check if it's a file (could be executable or symlink)
159
+ if (stats.isFile() || stats.isSymbolicLink()) {
160
+ return aliasTarget
161
+ }
162
+ } catch {
163
+ // Target doesn't exist or can't be accessed
164
+ }
165
+
166
+ return null
167
+ }
@@ -0,0 +1,222 @@
1
+ import type Anthropic from '@anthropic-ai/sdk'
2
+ import type { BetaToolUnion } from '@anthropic-ai/sdk/resources/beta/messages.js'
3
+ import {
4
+ getLastApiCompletionTimestamp,
5
+ setLastApiCompletionTimestamp,
6
+ } from '../bootstrap/state.js'
7
+ import { STRUCTURED_OUTPUTS_BETA_HEADER } from '../constants/betas.js'
8
+ import type { QuerySource } from '../constants/querySource.js'
9
+ import {
10
+ getAttributionHeader,
11
+ getCLISyspromptPrefix,
12
+ } from '../constants/system.js'
13
+ import { logEvent } from '../services/analytics/index.js'
14
+ import type { AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS } from '../services/analytics/metadata.js'
15
+ import { getAPIMetadata } from '../services/api/gemini.js'
16
+ import { getAnthropicClient } from '../services/api/client.js'
17
+ import { getModelBetas, modelSupportsStructuredOutputs } from './betas.js'
18
+ import { computeFingerprint } from './fingerprint.js'
19
+ import { normalizeModelStringForAPI } from './model/model.js'
20
+
21
+ type MessageParam = Anthropic.MessageParam
22
+ type TextBlockParam = Anthropic.TextBlockParam
23
+ type Tool = Anthropic.Tool
24
+ type ToolChoice = Anthropic.ToolChoice
25
+ type BetaMessage = Anthropic.Beta.Messages.BetaMessage
26
+ type BetaJSONOutputFormat = Anthropic.Beta.Messages.BetaJSONOutputFormat
27
+ type BetaThinkingConfigParam = Anthropic.Beta.Messages.BetaThinkingConfigParam
28
+
29
+ export type SideQueryOptions = {
30
+ /** Model to use for the query */
31
+ model: string
32
+ /**
33
+ * System prompt - string or array of text blocks (will be prefixed with CLI attribution).
34
+ *
35
+ * The attribution header is always placed in its own TextBlockParam block to ensure
36
+ * server-side parsing correctly extracts the cc_entrypoint value without including
37
+ * system prompt content.
38
+ */
39
+ system?: string | TextBlockParam[]
40
+ /** Messages to send (supports cache_control on content blocks) */
41
+ messages: MessageParam[]
42
+ /** Optional tools (supports both standard Tool[] and BetaToolUnion[] for custom tool types) */
43
+ tools?: Tool[] | BetaToolUnion[]
44
+ /** Optional tool choice (use { type: 'tool', name: 'x' } for forced output) */
45
+ tool_choice?: ToolChoice
46
+ /** Optional JSON output format for structured responses */
47
+ output_format?: BetaJSONOutputFormat
48
+ /** Max tokens (default: 1024) */
49
+ max_tokens?: number
50
+ /** Max retries (default: 2) */
51
+ maxRetries?: number
52
+ /** Abort signal */
53
+ signal?: AbortSignal
54
+ /** Skip CLI system prompt prefix (keeps attribution header for OAuth). For internal classifiers that provide their own prompt. */
55
+ skipSystemPromptPrefix?: boolean
56
+ /** Temperature override */
57
+ temperature?: number
58
+ /** Thinking budget (enables thinking), or `false` to send `{ type: 'disabled' }`. */
59
+ thinking?: number | false
60
+ /** Stop sequences — generation stops when any of these strings is emitted */
61
+ stop_sequences?: string[]
62
+ /** Attributes this call in tengu_api_success for COGS joining against reporting.sampling_calls. */
63
+ querySource: QuerySource
64
+ }
65
+
66
+ /**
67
+ * Extract text from first user message for fingerprint computation.
68
+ */
69
+ function extractFirstUserMessageText(messages: MessageParam[]): string {
70
+ const firstUserMessage = messages.find(m => m.role === 'user')
71
+ if (!firstUserMessage) return ''
72
+
73
+ const content = firstUserMessage.content
74
+ if (typeof content === 'string') return content
75
+
76
+ // Array of content blocks - find first text block
77
+ const textBlock = content.find(block => block.type === 'text')
78
+ return textBlock?.type === 'text' ? textBlock.text : ''
79
+ }
80
+
81
+ /**
82
+ * Lightweight API wrapper for "side queries" outside the main conversation loop.
83
+ *
84
+ * Use this instead of direct client.beta.messages.create() calls to ensure
85
+ * proper OAuth token validation with fingerprint attribution headers.
86
+ *
87
+ * This handles:
88
+ * - Fingerprint computation for OAuth validation
89
+ * - Attribution header injection
90
+ * - CLI system prompt prefix
91
+ * - Proper betas for the model
92
+ * - API metadata
93
+ * - Model string normalization (strips [1m] suffix for API)
94
+ *
95
+ * @example
96
+ * // Permission explainer
97
+ * await sideQuery({ querySource: 'permission_explainer', model, system: SYSTEM_PROMPT, messages, tools, tool_choice })
98
+ *
99
+ * @example
100
+ * // Session search
101
+ * await sideQuery({ querySource: 'session_search', model, system: SEARCH_PROMPT, messages })
102
+ *
103
+ * @example
104
+ * // Model validation
105
+ * await sideQuery({ querySource: 'model_validation', model, max_tokens: 1, messages: [{ role: 'user', content: 'Hi' }] })
106
+ */
107
+ export async function sideQuery(opts: SideQueryOptions): Promise<BetaMessage> {
108
+ const {
109
+ model,
110
+ system,
111
+ messages,
112
+ tools,
113
+ tool_choice,
114
+ output_format,
115
+ max_tokens = 1024,
116
+ maxRetries = 2,
117
+ signal,
118
+ skipSystemPromptPrefix,
119
+ temperature,
120
+ thinking,
121
+ stop_sequences,
122
+ } = opts
123
+
124
+ const client = await getAnthropicClient({
125
+ maxRetries,
126
+ model,
127
+ source: 'side_query',
128
+ })
129
+ const betas = [...getModelBetas(model)]
130
+ // Add structured-outputs beta if using output_format and provider supports it
131
+ if (
132
+ output_format &&
133
+ modelSupportsStructuredOutputs(model) &&
134
+ !betas.includes(STRUCTURED_OUTPUTS_BETA_HEADER)
135
+ ) {
136
+ betas.push(STRUCTURED_OUTPUTS_BETA_HEADER)
137
+ }
138
+
139
+ // Extract first user message text for fingerprint
140
+ const messageText = extractFirstUserMessageText(messages)
141
+
142
+ // Compute fingerprint for OAuth attribution
143
+ const fingerprint = computeFingerprint(messageText, MACRO.VERSION)
144
+ const attributionHeader = getAttributionHeader(fingerprint)
145
+
146
+ // Build system as array to keep attribution header in its own block
147
+ // (prevents server-side parsing from including system content in cc_entrypoint)
148
+ const systemBlocks: TextBlockParam[] = [
149
+ attributionHeader ? { type: 'text', text: attributionHeader } : null,
150
+ // Skip CLI system prompt prefix for internal classifiers that provide their own prompt
151
+ ...(skipSystemPromptPrefix
152
+ ? []
153
+ : [
154
+ {
155
+ type: 'text' as const,
156
+ text: getCLISyspromptPrefix({
157
+ isNonInteractive: false,
158
+ hasAppendSystemPrompt: false,
159
+ }),
160
+ },
161
+ ]),
162
+ ...(Array.isArray(system)
163
+ ? system
164
+ : system
165
+ ? [{ type: 'text' as const, text: system }]
166
+ : []),
167
+ ].filter((block): block is TextBlockParam => block !== null)
168
+
169
+ let thinkingConfig: BetaThinkingConfigParam | undefined
170
+ if (thinking === false) {
171
+ thinkingConfig = { type: 'disabled' }
172
+ } else if (thinking !== undefined) {
173
+ thinkingConfig = {
174
+ type: 'enabled',
175
+ budget_tokens: Math.min(thinking, max_tokens - 1),
176
+ }
177
+ }
178
+
179
+ const normalizedModel = normalizeModelStringForAPI(model)
180
+ const start = Date.now()
181
+ // biome-ignore lint/plugin: this IS the wrapper that handles OAuth attribution
182
+ const response = await client.beta.messages.create(
183
+ {
184
+ model: normalizedModel,
185
+ max_tokens,
186
+ system: systemBlocks,
187
+ messages,
188
+ ...(tools && { tools }),
189
+ ...(tool_choice && { tool_choice }),
190
+ ...(output_format && { output_config: { format: output_format } }),
191
+ ...(temperature !== undefined && { temperature }),
192
+ ...(stop_sequences && { stop_sequences }),
193
+ ...(thinkingConfig && { thinking: thinkingConfig }),
194
+ ...(betas.length > 0 && { betas }),
195
+ metadata: getAPIMetadata(),
196
+ },
197
+ { signal },
198
+ )
199
+
200
+ const requestId =
201
+ (response as { _request_id?: string | null })._request_id ?? undefined
202
+ const now = Date.now()
203
+ const lastCompletion = getLastApiCompletionTimestamp()
204
+ logEvent('tengu_api_success', {
205
+ requestId:
206
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
207
+ querySource:
208
+ opts.querySource as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
209
+ model:
210
+ normalizedModel as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
211
+ inputTokens: response.usage.input_tokens,
212
+ outputTokens: response.usage.output_tokens,
213
+ cachedInputTokens: response.usage.cache_read_input_tokens ?? 0,
214
+ uncachedInputTokens: response.usage.cache_creation_input_tokens ?? 0,
215
+ durationMsIncludingRetries: now - start,
216
+ timeSinceLastApiCallMs:
217
+ lastCompletion !== null ? now - lastCompletion : undefined,
218
+ })
219
+ setLastApiCompletionTimestamp(now)
220
+
221
+ return response
222
+ }