@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,860 @@
1
+ import { open } from 'fs/promises'
2
+ import * as path from 'path'
3
+ import { pathToFileURL } from 'url'
4
+ import type {
5
+ CallHierarchyIncomingCall,
6
+ CallHierarchyItem,
7
+ CallHierarchyOutgoingCall,
8
+ DocumentSymbol,
9
+ Hover,
10
+ Location,
11
+ LocationLink,
12
+ SymbolInformation,
13
+ } from 'vscode-languageserver-types'
14
+ import { z } from 'zod/v4'
15
+ import {
16
+ getInitializationStatus,
17
+ getLspServerManager,
18
+ isLspConnected,
19
+ waitForInitialization,
20
+ } from '../../services/lsp/manager.js'
21
+ import type { ValidationResult } from '../../Tool.js'
22
+ import { buildTool, type ToolDef } from '../../Tool.js'
23
+ import { uniq } from '../../utils/array.js'
24
+ import { getCwd } from '../../utils/cwd.js'
25
+ import { logForDebugging } from '../../utils/debug.js'
26
+ import { isENOENT, toError } from '../../utils/errors.js'
27
+ import { execFileNoThrowWithCwd } from '../../utils/execFileNoThrow.js'
28
+ import { getFsImplementation } from '../../utils/fsOperations.js'
29
+ import { lazySchema } from '../../utils/lazySchema.js'
30
+ import { logError } from '../../utils/log.js'
31
+ import { expandPath } from '../../utils/path.js'
32
+ import { checkReadPermissionForTool } from '../../utils/permissions/filesystem.js'
33
+ import type { PermissionDecision } from '../../utils/permissions/PermissionResult.js'
34
+ import {
35
+ formatDocumentSymbolResult,
36
+ formatFindReferencesResult,
37
+ formatGoToDefinitionResult,
38
+ formatHoverResult,
39
+ formatIncomingCallsResult,
40
+ formatOutgoingCallsResult,
41
+ formatPrepareCallHierarchyResult,
42
+ formatWorkspaceSymbolResult,
43
+ } from './formatters.js'
44
+ import { DESCRIPTION, LSP_TOOL_NAME } from './prompt.js'
45
+ import { lspToolInputSchema } from './schemas.js'
46
+ import {
47
+ renderToolResultMessage,
48
+ renderToolUseErrorMessage,
49
+ renderToolUseMessage,
50
+ userFacingName,
51
+ } from './UI.js'
52
+
53
+ const MAX_LSP_FILE_SIZE_BYTES = 10_000_000
54
+
55
+ /**
56
+ * Tool-compatible input schema (regular ZodObject instead of discriminated union)
57
+ * We validate against the discriminated union in validateInput for better error messages
58
+ */
59
+ const inputSchema = lazySchema(() =>
60
+ z.strictObject({
61
+ operation: z
62
+ .enum([
63
+ 'goToDefinition',
64
+ 'findReferences',
65
+ 'hover',
66
+ 'documentSymbol',
67
+ 'workspaceSymbol',
68
+ 'goToImplementation',
69
+ 'prepareCallHierarchy',
70
+ 'incomingCalls',
71
+ 'outgoingCalls',
72
+ ])
73
+ .describe('The LSP operation to perform'),
74
+ filePath: z.string().describe('The absolute or relative path to the file'),
75
+ line: z
76
+ .number()
77
+ .int()
78
+ .positive()
79
+ .describe('The line number (1-based, as shown in editors)'),
80
+ character: z
81
+ .number()
82
+ .int()
83
+ .positive()
84
+ .describe('The character offset (1-based, as shown in editors)'),
85
+ }),
86
+ )
87
+ type InputSchema = ReturnType<typeof inputSchema>
88
+
89
+ const outputSchema = lazySchema(() =>
90
+ z.object({
91
+ operation: z
92
+ .enum([
93
+ 'goToDefinition',
94
+ 'findReferences',
95
+ 'hover',
96
+ 'documentSymbol',
97
+ 'workspaceSymbol',
98
+ 'goToImplementation',
99
+ 'prepareCallHierarchy',
100
+ 'incomingCalls',
101
+ 'outgoingCalls',
102
+ ])
103
+ .describe('The LSP operation that was performed'),
104
+ result: z.string().describe('The formatted result of the LSP operation'),
105
+ filePath: z
106
+ .string()
107
+ .describe('The file path the operation was performed on'),
108
+ resultCount: z
109
+ .number()
110
+ .int()
111
+ .nonnegative()
112
+ .optional()
113
+ .describe('Number of results (definitions, references, symbols)'),
114
+ fileCount: z
115
+ .number()
116
+ .int()
117
+ .nonnegative()
118
+ .optional()
119
+ .describe('Number of files containing results'),
120
+ }),
121
+ )
122
+ type OutputSchema = ReturnType<typeof outputSchema>
123
+
124
+ export type Output = z.infer<OutputSchema>
125
+ export type Input = z.infer<InputSchema>
126
+
127
+ export const LSPTool = buildTool({
128
+ name: LSP_TOOL_NAME,
129
+ searchHint: 'code intelligence (definitions, references, symbols, hover)',
130
+ maxResultSizeChars: 100_000,
131
+ isLsp: true,
132
+ async description() {
133
+ return DESCRIPTION
134
+ },
135
+ userFacingName,
136
+ shouldDefer: true,
137
+ isEnabled() {
138
+ return isLspConnected()
139
+ },
140
+ get inputSchema(): InputSchema {
141
+ return inputSchema()
142
+ },
143
+ get outputSchema(): OutputSchema {
144
+ return outputSchema()
145
+ },
146
+ isConcurrencySafe() {
147
+ return true
148
+ },
149
+ isReadOnly() {
150
+ return true
151
+ },
152
+ getPath({ filePath }): string {
153
+ return expandPath(filePath)
154
+ },
155
+ async validateInput(input: Input): Promise<ValidationResult> {
156
+ // First validate against the discriminated union for better type safety
157
+ const parseResult = lspToolInputSchema().safeParse(input)
158
+ if (!parseResult.success) {
159
+ return {
160
+ result: false,
161
+ message: `Invalid input: ${parseResult.error.message}`,
162
+ errorCode: 3,
163
+ }
164
+ }
165
+
166
+ // Validate file exists and is a regular file
167
+ const fs = getFsImplementation()
168
+ const absolutePath = expandPath(input.filePath)
169
+
170
+ // SECURITY: Skip filesystem operations for UNC paths to prevent NTLM credential leaks.
171
+ if (absolutePath.startsWith('\\\\') || absolutePath.startsWith('//')) {
172
+ return { result: true }
173
+ }
174
+
175
+ let stats
176
+ try {
177
+ stats = await fs.stat(absolutePath)
178
+ } catch (error) {
179
+ if (isENOENT(error)) {
180
+ return {
181
+ result: false,
182
+ message: `File does not exist: ${input.filePath}`,
183
+ errorCode: 1,
184
+ }
185
+ }
186
+ const err = toError(error)
187
+ // Log filesystem access errors for tracking
188
+ logError(
189
+ new Error(
190
+ `Failed to access file stats for LSP operation on ${input.filePath}: ${err.message}`,
191
+ ),
192
+ )
193
+ return {
194
+ result: false,
195
+ message: `Cannot access file: ${input.filePath}. ${err.message}`,
196
+ errorCode: 4,
197
+ }
198
+ }
199
+
200
+ if (!stats.isFile()) {
201
+ return {
202
+ result: false,
203
+ message: `Path is not a file: ${input.filePath}`,
204
+ errorCode: 2,
205
+ }
206
+ }
207
+
208
+ return { result: true }
209
+ },
210
+ async checkPermissions(input, context): Promise<PermissionDecision> {
211
+ const appState = context.getAppState()
212
+ return checkReadPermissionForTool(
213
+ LSPTool,
214
+ input,
215
+ appState.toolPermissionContext,
216
+ )
217
+ },
218
+ async prompt() {
219
+ return DESCRIPTION
220
+ },
221
+ renderToolUseMessage,
222
+ renderToolUseErrorMessage,
223
+ renderToolResultMessage,
224
+ async call(input: Input, _context) {
225
+ const absolutePath = expandPath(input.filePath)
226
+ const cwd = getCwd()
227
+
228
+ // Wait for initialization if it's still pending
229
+ // This prevents returning "no server available" before init completes
230
+ const status = getInitializationStatus()
231
+ if (status.status === 'pending') {
232
+ await waitForInitialization()
233
+ }
234
+
235
+ // Get the LSP server manager
236
+ const manager = getLspServerManager()
237
+ if (!manager) {
238
+ // Log this system-level failure for tracking
239
+ logError(
240
+ new Error('LSP server manager not initialized when tool was called'),
241
+ )
242
+
243
+ const output: Output = {
244
+ operation: input.operation,
245
+ result:
246
+ 'LSP server manager not initialized. This may indicate a startup issue.',
247
+ filePath: input.filePath,
248
+ }
249
+ return {
250
+ data: output,
251
+ }
252
+ }
253
+
254
+ // Map operation to LSP method and prepare params
255
+ const { method, params } = getMethodAndParams(input, absolutePath)
256
+
257
+ try {
258
+ // Ensure file is open in LSP server before making requests
259
+ // Most LSP servers require textDocument/didOpen before operations
260
+ // Only read the file if it's not already open to avoid unnecessary I/O
261
+ if (!manager.isFileOpen(absolutePath)) {
262
+ const handle = await open(absolutePath, 'r')
263
+ try {
264
+ const stats = await handle.stat()
265
+ if (stats.size > MAX_LSP_FILE_SIZE_BYTES) {
266
+ const output: Output = {
267
+ operation: input.operation,
268
+ result: `File too large for LSP analysis (${Math.ceil(stats.size / 1_000_000)}MB exceeds 10MB limit)`,
269
+ filePath: input.filePath,
270
+ }
271
+ return { data: output }
272
+ }
273
+ const fileContent = await handle.readFile({ encoding: 'utf-8' })
274
+ await manager.openFile(absolutePath, fileContent)
275
+ } finally {
276
+ await handle.close()
277
+ }
278
+ }
279
+
280
+ // Send request to LSP server
281
+ let result = await manager.sendRequest(absolutePath, method, params)
282
+
283
+ if (result === undefined) {
284
+ // Log for diagnostic purposes - helps track usage patterns and potential bugs
285
+ logForDebugging(
286
+ `No LSP server available for file type ${path.extname(absolutePath)} for operation ${input.operation} on file ${input.filePath}`,
287
+ )
288
+
289
+ const output: Output = {
290
+ operation: input.operation,
291
+ result: `No LSP server available for file type: ${path.extname(absolutePath)}`,
292
+ filePath: input.filePath,
293
+ }
294
+ return {
295
+ data: output,
296
+ }
297
+ }
298
+
299
+ // For incomingCalls and outgoingCalls, we need a two-step process:
300
+ // 1. First get CallHierarchyItem(s) from prepareCallHierarchy
301
+ // 2. Then request the actual calls using that item
302
+ if (
303
+ input.operation === 'incomingCalls' ||
304
+ input.operation === 'outgoingCalls'
305
+ ) {
306
+ const callItems = result as CallHierarchyItem[]
307
+ if (!callItems || callItems.length === 0) {
308
+ const output: Output = {
309
+ operation: input.operation,
310
+ result: 'No call hierarchy item found at this position',
311
+ filePath: input.filePath,
312
+ resultCount: 0,
313
+ fileCount: 0,
314
+ }
315
+ return { data: output }
316
+ }
317
+
318
+ // Use the first call hierarchy item to request calls
319
+ const callMethod =
320
+ input.operation === 'incomingCalls'
321
+ ? 'callHierarchy/incomingCalls'
322
+ : 'callHierarchy/outgoingCalls'
323
+
324
+ result = await manager.sendRequest(absolutePath, callMethod, {
325
+ item: callItems[0],
326
+ })
327
+
328
+ if (result === undefined) {
329
+ logForDebugging(
330
+ `LSP server returned undefined for ${callMethod} on ${input.filePath}`,
331
+ )
332
+ // Continue to formatter which will handle empty/null gracefully
333
+ }
334
+ }
335
+
336
+ // Filter out gitignored files from location-based results
337
+ if (
338
+ result &&
339
+ Array.isArray(result) &&
340
+ (input.operation === 'findReferences' ||
341
+ input.operation === 'goToDefinition' ||
342
+ input.operation === 'goToImplementation' ||
343
+ input.operation === 'workspaceSymbol')
344
+ ) {
345
+ if (input.operation === 'workspaceSymbol') {
346
+ // SymbolInformation has location.uri — filter by extracting locations
347
+ const symbols = result as SymbolInformation[]
348
+ const locations = symbols
349
+ .filter(s => s?.location?.uri)
350
+ .map(s => s.location)
351
+ const filteredLocations = await filterGitIgnoredLocations(
352
+ locations,
353
+ cwd,
354
+ )
355
+ const filteredUris = new Set(filteredLocations.map(l => l.uri))
356
+ result = symbols.filter(
357
+ s => !s?.location?.uri || filteredUris.has(s.location.uri),
358
+ )
359
+ } else {
360
+ // Location[] or (Location | LocationLink)[]
361
+ const locations = (result as (Location | LocationLink)[]).map(
362
+ toLocation,
363
+ )
364
+ const filteredLocations = await filterGitIgnoredLocations(
365
+ locations,
366
+ cwd,
367
+ )
368
+ const filteredUris = new Set(filteredLocations.map(l => l.uri))
369
+ result = (result as (Location | LocationLink)[]).filter(item => {
370
+ const loc = toLocation(item)
371
+ return !loc.uri || filteredUris.has(loc.uri)
372
+ })
373
+ }
374
+ }
375
+
376
+ // Format the result based on operation type
377
+ const { formatted, resultCount, fileCount } = formatResult(
378
+ input.operation,
379
+ result,
380
+ cwd,
381
+ )
382
+
383
+ const output: Output = {
384
+ operation: input.operation,
385
+ result: formatted,
386
+ filePath: input.filePath,
387
+ resultCount,
388
+ fileCount,
389
+ }
390
+
391
+ return {
392
+ data: output,
393
+ }
394
+ } catch (error) {
395
+ const err = toError(error)
396
+ const errorMessage = err.message
397
+
398
+ // Log error for tracking
399
+ logError(
400
+ new Error(
401
+ `LSP tool request failed for ${input.operation} on ${input.filePath}: ${errorMessage}`,
402
+ ),
403
+ )
404
+
405
+ const output: Output = {
406
+ operation: input.operation,
407
+ result: `Error performing ${input.operation}: ${errorMessage}`,
408
+ filePath: input.filePath,
409
+ }
410
+ return {
411
+ data: output,
412
+ }
413
+ }
414
+ },
415
+ mapToolResultToToolResultBlockParam(output, toolUseID) {
416
+ return {
417
+ tool_use_id: toolUseID,
418
+ type: 'tool_result',
419
+ content: output.result,
420
+ }
421
+ },
422
+ } satisfies ToolDef<InputSchema, Output>)
423
+
424
+ /**
425
+ * Maps LSPTool operation to LSP method and params
426
+ */
427
+ function getMethodAndParams(
428
+ input: Input,
429
+ absolutePath: string,
430
+ ): { method: string; params: unknown } {
431
+ const uri = pathToFileURL(absolutePath).href
432
+ // Convert from 1-based (user-friendly) to 0-based (LSP protocol)
433
+ const position = {
434
+ line: input.line - 1,
435
+ character: input.character - 1,
436
+ }
437
+
438
+ switch (input.operation) {
439
+ case 'goToDefinition':
440
+ return {
441
+ method: 'textDocument/definition',
442
+ params: {
443
+ textDocument: { uri },
444
+ position,
445
+ },
446
+ }
447
+ case 'findReferences':
448
+ return {
449
+ method: 'textDocument/references',
450
+ params: {
451
+ textDocument: { uri },
452
+ position,
453
+ context: { includeDeclaration: true },
454
+ },
455
+ }
456
+ case 'hover':
457
+ return {
458
+ method: 'textDocument/hover',
459
+ params: {
460
+ textDocument: { uri },
461
+ position,
462
+ },
463
+ }
464
+ case 'documentSymbol':
465
+ return {
466
+ method: 'textDocument/documentSymbol',
467
+ params: {
468
+ textDocument: { uri },
469
+ },
470
+ }
471
+ case 'workspaceSymbol':
472
+ return {
473
+ method: 'workspace/symbol',
474
+ params: {
475
+ query: '', // Empty query returns all symbols
476
+ },
477
+ }
478
+ case 'goToImplementation':
479
+ return {
480
+ method: 'textDocument/implementation',
481
+ params: {
482
+ textDocument: { uri },
483
+ position,
484
+ },
485
+ }
486
+ case 'prepareCallHierarchy':
487
+ return {
488
+ method: 'textDocument/prepareCallHierarchy',
489
+ params: {
490
+ textDocument: { uri },
491
+ position,
492
+ },
493
+ }
494
+ case 'incomingCalls':
495
+ // For incoming/outgoing calls, we first need to prepare the call hierarchy
496
+ // The LSP server will return CallHierarchyItem(s) that we pass to the calls request
497
+ return {
498
+ method: 'textDocument/prepareCallHierarchy',
499
+ params: {
500
+ textDocument: { uri },
501
+ position,
502
+ },
503
+ }
504
+ case 'outgoingCalls':
505
+ return {
506
+ method: 'textDocument/prepareCallHierarchy',
507
+ params: {
508
+ textDocument: { uri },
509
+ position,
510
+ },
511
+ }
512
+ }
513
+ }
514
+
515
+ /**
516
+ * Counts the total number of symbols including nested children
517
+ */
518
+ function countSymbols(symbols: DocumentSymbol[]): number {
519
+ let count = symbols.length
520
+ for (const symbol of symbols) {
521
+ if (symbol.children && symbol.children.length > 0) {
522
+ count += countSymbols(symbol.children)
523
+ }
524
+ }
525
+ return count
526
+ }
527
+
528
+ /**
529
+ * Counts unique files from an array of locations
530
+ */
531
+ function countUniqueFiles(locations: Location[]): number {
532
+ return new Set(locations.map(loc => loc.uri)).size
533
+ }
534
+
535
+ /**
536
+ * Extracts a file path from a file:// URI, decoding percent-encoded characters.
537
+ */
538
+ function uriToFilePath(uri: string): string {
539
+ let filePath = uri.replace(/^file:\/\//, '')
540
+ // On Windows, file:///C:/path becomes /C:/path — strip the leading slash
541
+ if (/^\/[A-Za-z]:/.test(filePath)) {
542
+ filePath = filePath.slice(1)
543
+ }
544
+ try {
545
+ filePath = decodeURIComponent(filePath)
546
+ } catch {
547
+ // Use un-decoded path if malformed
548
+ }
549
+ return filePath
550
+ }
551
+
552
+ /**
553
+ * Filters out locations whose file paths are gitignored.
554
+ * Uses `git check-ignore` with batched path arguments for efficiency.
555
+ */
556
+ async function filterGitIgnoredLocations<T extends Location>(
557
+ locations: T[],
558
+ cwd: string,
559
+ ): Promise<T[]> {
560
+ if (locations.length === 0) {
561
+ return locations
562
+ }
563
+
564
+ // Collect unique file paths from URIs
565
+ const uriToPath = new Map<string, string>()
566
+ for (const loc of locations) {
567
+ if (loc.uri && !uriToPath.has(loc.uri)) {
568
+ uriToPath.set(loc.uri, uriToFilePath(loc.uri))
569
+ }
570
+ }
571
+
572
+ const uniquePaths = uniq(uriToPath.values())
573
+ if (uniquePaths.length === 0) {
574
+ return locations
575
+ }
576
+
577
+ // Batch check paths with git check-ignore
578
+ // Exit code 0 = at least one path is ignored, 1 = none ignored, 128 = not a git repo
579
+ const ignoredPaths = new Set<string>()
580
+ const BATCH_SIZE = 50
581
+ for (let i = 0; i < uniquePaths.length; i += BATCH_SIZE) {
582
+ const batch = uniquePaths.slice(i, i + BATCH_SIZE)
583
+ const result = await execFileNoThrowWithCwd(
584
+ 'git',
585
+ ['check-ignore', ...batch],
586
+ {
587
+ cwd,
588
+ preserveOutputOnError: false,
589
+ timeout: 5_000,
590
+ },
591
+ )
592
+
593
+ if (result.code === 0 && result.stdout) {
594
+ for (const line of result.stdout.split('\n')) {
595
+ const trimmed = line.trim()
596
+ if (trimmed) {
597
+ ignoredPaths.add(trimmed)
598
+ }
599
+ }
600
+ }
601
+ }
602
+
603
+ if (ignoredPaths.size === 0) {
604
+ return locations
605
+ }
606
+
607
+ return locations.filter(loc => {
608
+ const filePath = uriToPath.get(loc.uri)
609
+ return !filePath || !ignoredPaths.has(filePath)
610
+ })
611
+ }
612
+
613
+ /**
614
+ * Checks if item is LocationLink (has targetUri) vs Location (has uri)
615
+ */
616
+ function isLocationLink(item: Location | LocationLink): item is LocationLink {
617
+ return 'targetUri' in item
618
+ }
619
+
620
+ /**
621
+ * Converts LocationLink to Location format for uniform handling
622
+ */
623
+ function toLocation(item: Location | LocationLink): Location {
624
+ if (isLocationLink(item)) {
625
+ return {
626
+ uri: item.targetUri,
627
+ range: item.targetSelectionRange || item.targetRange,
628
+ }
629
+ }
630
+ return item
631
+ }
632
+
633
+ /**
634
+ * Formats LSP result based on operation type and extracts summary counts
635
+ */
636
+ function formatResult(
637
+ operation: Input['operation'],
638
+ result: unknown,
639
+ cwd: string,
640
+ ): { formatted: string; resultCount: number; fileCount: number } {
641
+ switch (operation) {
642
+ case 'goToDefinition': {
643
+ // Handle both Location and LocationLink formats
644
+ const rawResults = Array.isArray(result)
645
+ ? result
646
+ : result
647
+ ? [result as Location | LocationLink]
648
+ : []
649
+
650
+ // Convert LocationLinks to Locations for uniform handling
651
+ const locations = rawResults.map(toLocation)
652
+
653
+ // Log and filter out locations with undefined uris
654
+ const invalidLocations = locations.filter(loc => !loc || !loc.uri)
655
+ if (invalidLocations.length > 0) {
656
+ logError(
657
+ new Error(
658
+ `LSP server returned ${invalidLocations.length} location(s) with undefined URI for goToDefinition on ${cwd}. ` +
659
+ `This indicates malformed data from the LSP server.`,
660
+ ),
661
+ )
662
+ }
663
+
664
+ const validLocations = locations.filter(loc => loc && loc.uri)
665
+ return {
666
+ formatted: formatGoToDefinitionResult(
667
+ result as
668
+ | Location
669
+ | Location[]
670
+ | LocationLink
671
+ | LocationLink[]
672
+ | null,
673
+ cwd,
674
+ ),
675
+ resultCount: validLocations.length,
676
+ fileCount: countUniqueFiles(validLocations),
677
+ }
678
+ }
679
+ case 'findReferences': {
680
+ const locations = (result as Location[]) || []
681
+
682
+ // Log and filter out locations with undefined uris
683
+ const invalidLocations = locations.filter(loc => !loc || !loc.uri)
684
+ if (invalidLocations.length > 0) {
685
+ logError(
686
+ new Error(
687
+ `LSP server returned ${invalidLocations.length} location(s) with undefined URI for findReferences on ${cwd}. ` +
688
+ `This indicates malformed data from the LSP server.`,
689
+ ),
690
+ )
691
+ }
692
+
693
+ const validLocations = locations.filter(loc => loc && loc.uri)
694
+ return {
695
+ formatted: formatFindReferencesResult(result as Location[] | null, cwd),
696
+ resultCount: validLocations.length,
697
+ fileCount: countUniqueFiles(validLocations),
698
+ }
699
+ }
700
+ case 'hover': {
701
+ return {
702
+ formatted: formatHoverResult(result as Hover | null, cwd),
703
+ resultCount: result ? 1 : 0,
704
+ fileCount: result ? 1 : 0,
705
+ }
706
+ }
707
+ case 'documentSymbol': {
708
+ // LSP allows documentSymbol to return either DocumentSymbol[] or SymbolInformation[]
709
+ const symbols = (result as (DocumentSymbol | SymbolInformation)[]) || []
710
+ // Detect format: DocumentSymbol has 'range', SymbolInformation has 'location'
711
+ const isDocumentSymbol =
712
+ symbols.length > 0 && symbols[0] && 'range' in symbols[0]
713
+ // Count symbols - DocumentSymbol can have nested children, SymbolInformation is flat
714
+ const count = isDocumentSymbol
715
+ ? countSymbols(symbols as DocumentSymbol[])
716
+ : symbols.length
717
+ return {
718
+ formatted: formatDocumentSymbolResult(
719
+ result as (DocumentSymbol[] | SymbolInformation[]) | null,
720
+ cwd,
721
+ ),
722
+ resultCount: count,
723
+ fileCount: symbols.length > 0 ? 1 : 0,
724
+ }
725
+ }
726
+ case 'workspaceSymbol': {
727
+ const symbols = (result as SymbolInformation[]) || []
728
+
729
+ // Log and filter out symbols with undefined location.uri
730
+ const invalidSymbols = symbols.filter(
731
+ sym => !sym || !sym.location || !sym.location.uri,
732
+ )
733
+ if (invalidSymbols.length > 0) {
734
+ logError(
735
+ new Error(
736
+ `LSP server returned ${invalidSymbols.length} symbol(s) with undefined location URI for workspaceSymbol on ${cwd}. ` +
737
+ `This indicates malformed data from the LSP server.`,
738
+ ),
739
+ )
740
+ }
741
+
742
+ const validSymbols = symbols.filter(
743
+ sym => sym && sym.location && sym.location.uri,
744
+ )
745
+ const locations = validSymbols.map(s => s.location)
746
+ return {
747
+ formatted: formatWorkspaceSymbolResult(
748
+ result as SymbolInformation[] | null,
749
+ cwd,
750
+ ),
751
+ resultCount: validSymbols.length,
752
+ fileCount: countUniqueFiles(locations),
753
+ }
754
+ }
755
+ case 'goToImplementation': {
756
+ // Handle both Location and LocationLink formats (same as goToDefinition)
757
+ const rawResults = Array.isArray(result)
758
+ ? result
759
+ : result
760
+ ? [result as Location | LocationLink]
761
+ : []
762
+
763
+ // Convert LocationLinks to Locations for uniform handling
764
+ const locations = rawResults.map(toLocation)
765
+
766
+ // Log and filter out locations with undefined uris
767
+ const invalidLocations = locations.filter(loc => !loc || !loc.uri)
768
+ if (invalidLocations.length > 0) {
769
+ logError(
770
+ new Error(
771
+ `LSP server returned ${invalidLocations.length} location(s) with undefined URI for goToImplementation on ${cwd}. ` +
772
+ `This indicates malformed data from the LSP server.`,
773
+ ),
774
+ )
775
+ }
776
+
777
+ const validLocations = locations.filter(loc => loc && loc.uri)
778
+ return {
779
+ // Reuse goToDefinition formatter since the result format is identical
780
+ formatted: formatGoToDefinitionResult(
781
+ result as
782
+ | Location
783
+ | Location[]
784
+ | LocationLink
785
+ | LocationLink[]
786
+ | null,
787
+ cwd,
788
+ ),
789
+ resultCount: validLocations.length,
790
+ fileCount: countUniqueFiles(validLocations),
791
+ }
792
+ }
793
+ case 'prepareCallHierarchy': {
794
+ const items = (result as CallHierarchyItem[]) || []
795
+ return {
796
+ formatted: formatPrepareCallHierarchyResult(
797
+ result as CallHierarchyItem[] | null,
798
+ cwd,
799
+ ),
800
+ resultCount: items.length,
801
+ fileCount: items.length > 0 ? countUniqueFilesFromCallItems(items) : 0,
802
+ }
803
+ }
804
+ case 'incomingCalls': {
805
+ const calls = (result as CallHierarchyIncomingCall[]) || []
806
+ return {
807
+ formatted: formatIncomingCallsResult(
808
+ result as CallHierarchyIncomingCall[] | null,
809
+ cwd,
810
+ ),
811
+ resultCount: calls.length,
812
+ fileCount:
813
+ calls.length > 0 ? countUniqueFilesFromIncomingCalls(calls) : 0,
814
+ }
815
+ }
816
+ case 'outgoingCalls': {
817
+ const calls = (result as CallHierarchyOutgoingCall[]) || []
818
+ return {
819
+ formatted: formatOutgoingCallsResult(
820
+ result as CallHierarchyOutgoingCall[] | null,
821
+ cwd,
822
+ ),
823
+ resultCount: calls.length,
824
+ fileCount:
825
+ calls.length > 0 ? countUniqueFilesFromOutgoingCalls(calls) : 0,
826
+ }
827
+ }
828
+ }
829
+ }
830
+
831
+ /**
832
+ * Counts unique files from CallHierarchyItem array
833
+ * Filters out items with undefined URIs
834
+ */
835
+ function countUniqueFilesFromCallItems(items: CallHierarchyItem[]): number {
836
+ const validUris = items.map(item => item.uri).filter(uri => uri)
837
+ return new Set(validUris).size
838
+ }
839
+
840
+ /**
841
+ * Counts unique files from CallHierarchyIncomingCall array
842
+ * Filters out calls with undefined URIs
843
+ */
844
+ function countUniqueFilesFromIncomingCalls(
845
+ calls: CallHierarchyIncomingCall[],
846
+ ): number {
847
+ const validUris = calls.map(call => call.from?.uri).filter(uri => uri)
848
+ return new Set(validUris).size
849
+ }
850
+
851
+ /**
852
+ * Counts unique files from CallHierarchyOutgoingCall array
853
+ * Filters out calls with undefined URIs
854
+ */
855
+ function countUniqueFilesFromOutgoingCalls(
856
+ calls: CallHierarchyOutgoingCall[],
857
+ ): number {
858
+ const validUris = calls.map(call => call.to?.uri).filter(uri => uri)
859
+ return new Set(validUris).size
860
+ }