@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,349 @@
1
+ // CCR session polling for /ultraplan. Waits for an approved ExitPlanMode
2
+ // tool_result, then extracts the plan text. Uses pollRemoteSessionEvents
3
+ // (shared with RemoteAgentTask) for pagination + typed SDKMessage[].
4
+ // Plan mode is set via set_permission_mode control_request in
5
+ // teleportToRemote's CreateSession events array.
6
+
7
+ import type {
8
+ ToolResultBlockParam,
9
+ ToolUseBlock,
10
+ } from '@anthropic-ai/sdk/resources'
11
+ import type { SDKMessage } from '../../entrypoints/agentSdkTypes.js'
12
+ import { EXIT_PLAN_MODE_V2_TOOL_NAME } from '../../tools/ExitPlanModeTool/constants.js'
13
+ import { logForDebugging } from '../debug.js'
14
+ import { sleep } from '../sleep.js'
15
+ import { isTransientNetworkError } from '../teleport/api.js'
16
+ import {
17
+ type PollRemoteSessionResponse,
18
+ pollRemoteSessionEvents,
19
+ } from '../teleport.js'
20
+
21
+ const POLL_INTERVAL_MS = 3000
22
+ // pollRemoteSessionEvents doesn't retry. A 30min poll makes ~600 calls;
23
+ // at any nonzero 5xx rate one blip would kill the run.
24
+ const MAX_CONSECUTIVE_FAILURES = 5
25
+
26
+ export type PollFailReason =
27
+ | 'terminated'
28
+ | 'timeout_pending'
29
+ | 'timeout_no_plan'
30
+ | 'extract_marker_missing'
31
+ | 'network_or_unknown'
32
+ | 'stopped'
33
+
34
+ export class UltraplanPollError extends Error {
35
+ constructor(
36
+ message: string,
37
+ readonly reason: PollFailReason,
38
+ readonly rejectCount: number,
39
+ options?: ErrorOptions,
40
+ ) {
41
+ super(message, options)
42
+ this.name = 'UltraplanPollError'
43
+ }
44
+ }
45
+
46
+ // Sentinel string the browser PlanModal includes in the feedback when the user
47
+ // clicks "teleport back to terminal". Plan text follows on the next line.
48
+ export const ULTRAPLAN_TELEPORT_SENTINEL = '__ULTRAPLAN_TELEPORT_LOCAL__'
49
+
50
+ export type ScanResult =
51
+ | { kind: 'approved'; plan: string }
52
+ | { kind: 'teleport'; plan: string }
53
+ | { kind: 'rejected'; id: string }
54
+ | { kind: 'pending' }
55
+ | { kind: 'terminated'; subtype: string }
56
+ | { kind: 'unchanged' }
57
+
58
+ /**
59
+ * Pill/detail-view state derived from the event stream. Transitions:
60
+ * running → (turn ends, no ExitPlanMode) → needs_input
61
+ * needs_input → (user replies in browser) → running
62
+ * running → (ExitPlanMode emitted, no result yet) → plan_ready
63
+ * plan_ready → (rejected) → running
64
+ * plan_ready → (approved) → poll resolves, pill removed
65
+ */
66
+ export type UltraplanPhase = 'running' | 'needs_input' | 'plan_ready'
67
+
68
+ /**
69
+ * Pure stateful classifier for the CCR event stream. Ingests SDKMessage[]
70
+ * batches (as delivered by pollRemoteSessionEvents) and returns the current
71
+ * ExitPlanMode verdict. No I/O, no timers — feed it synthetic or recorded
72
+ * events for unit tests and offline replay.
73
+ *
74
+ * Precedence (approved > terminated > rejected > pending > unchanged):
75
+ * pollRemoteSessionEvents paginates up to 50 pages per call, so one ingest
76
+ * can span seconds of session activity. A batch may contain both an approved
77
+ * tool_result AND a subsequent {type:'result'} (user approved, then remote
78
+ * crashed). The approved plan is real and in threadstore — don't drop it.
79
+ */
80
+ export class ExitPlanModeScanner {
81
+ private exitPlanCalls: string[] = []
82
+ private results = new Map<string, ToolResultBlockParam>()
83
+ private rejectedIds = new Set<string>()
84
+ private terminated: { subtype: string } | null = null
85
+ private rescanAfterRejection = false
86
+ everSeenPending = false
87
+
88
+ get rejectCount(): number {
89
+ return this.rejectedIds.size
90
+ }
91
+
92
+ /**
93
+ * True when an ExitPlanMode tool_use exists with no tool_result yet —
94
+ * the remote is showing the approval dialog in the browser.
95
+ */
96
+ get hasPendingPlan(): boolean {
97
+ const id = this.exitPlanCalls.findLast(c => !this.rejectedIds.has(c))
98
+ return id !== undefined && !this.results.has(id)
99
+ }
100
+
101
+ ingest(newEvents: SDKMessage[]): ScanResult {
102
+ for (const m of newEvents) {
103
+ if (m.type === 'assistant') {
104
+ for (const block of m.message.content) {
105
+ if (block.type !== 'tool_use') continue
106
+ const tu = block as ToolUseBlock
107
+ if (tu.name === EXIT_PLAN_MODE_V2_TOOL_NAME) {
108
+ this.exitPlanCalls.push(tu.id)
109
+ }
110
+ }
111
+ } else if (m.type === 'user') {
112
+ const content = m.message.content
113
+ if (!Array.isArray(content)) continue
114
+ for (const block of content) {
115
+ if (block.type === 'tool_result') {
116
+ this.results.set(block.tool_use_id, block)
117
+ }
118
+ }
119
+ } else if (m.type === 'result' && m.subtype !== 'success') {
120
+ // result(success) fires after EVERY CCR turn
121
+ // If the remote asks a clarifying question (turn ends without
122
+ // ExitPlanMode), we must keep polling — the user can reply in
123
+ // the browser and reach ExitPlanMode in a later turn.
124
+ // Only error subtypes (error_during_execution, error_max_turns,
125
+ // etc.) mean the session is actually dead.
126
+ this.terminated = { subtype: m.subtype }
127
+ }
128
+ }
129
+
130
+ // Skip-scan when nothing could have moved the target: no new events, no
131
+ // rejection last tick. A rejection moves the newest-non-rejected target.
132
+ const shouldScan = newEvents.length > 0 || this.rescanAfterRejection
133
+ this.rescanAfterRejection = false
134
+
135
+ let found:
136
+ | { kind: 'approved'; plan: string }
137
+ | { kind: 'teleport'; plan: string }
138
+ | { kind: 'rejected'; id: string }
139
+ | { kind: 'pending' }
140
+ | null = null
141
+ if (shouldScan) {
142
+ for (let i = this.exitPlanCalls.length - 1; i >= 0; i--) {
143
+ const id = this.exitPlanCalls[i]!
144
+ if (this.rejectedIds.has(id)) continue
145
+ const tr = this.results.get(id)
146
+ if (!tr) {
147
+ found = { kind: 'pending' }
148
+ } else if (tr.is_error === true) {
149
+ const teleportPlan = extractTeleportPlan(tr.content)
150
+ found =
151
+ teleportPlan !== null
152
+ ? { kind: 'teleport', plan: teleportPlan }
153
+ : { kind: 'rejected', id }
154
+ } else {
155
+ found = { kind: 'approved', plan: extractApprovedPlan(tr.content) }
156
+ }
157
+ break
158
+ }
159
+ if (found?.kind === 'approved' || found?.kind === 'teleport') return found
160
+ }
161
+
162
+ // Bookkeeping before the terminated check — a batch can contain BOTH a
163
+ // rejected tool_result and a {type:'result'}; rejectCount must reflect
164
+ // the rejection even though terminated takes return precedence.
165
+ if (found?.kind === 'rejected') {
166
+ this.rejectedIds.add(found.id)
167
+ this.rescanAfterRejection = true
168
+ }
169
+ if (this.terminated) {
170
+ return { kind: 'terminated', subtype: this.terminated.subtype }
171
+ }
172
+ if (found?.kind === 'rejected') {
173
+ return found
174
+ }
175
+ if (found?.kind === 'pending') {
176
+ this.everSeenPending = true
177
+ return found
178
+ }
179
+ return { kind: 'unchanged' }
180
+ }
181
+ }
182
+
183
+ export type PollResult = {
184
+ plan: string
185
+ rejectCount: number
186
+ /** 'local' = user clicked teleport (execute here, archive remote). 'remote' = user approved in-CCR execution (don't archive). */
187
+ executionTarget: 'local' | 'remote'
188
+ }
189
+
190
+ // Returns the approved plan text and where the user wants it executed.
191
+ // 'approved' scrapes from the "## Approved Plan:" marker (ExitPlanModeV2Tool
192
+ // default branch) — the model writes plan to a file inside CCR and calls
193
+ // ExitPlanMode({allowedPrompts}), so input.plan is never in threadstore.
194
+ // 'teleport' scrapes from the ULTRAPLAN_TELEPORT_SENTINEL in a deny tool_result —
195
+ // browser sends a rejection so the remote stays in plan mode, with the plan
196
+ // text embedded in the feedback. Normal rejections (is_error === true, no
197
+ // sentinel) are tracked and skipped so the user can iterate in the browser.
198
+ export async function pollForApprovedExitPlanMode(
199
+ sessionId: string,
200
+ timeoutMs: number,
201
+ onPhaseChange?: (phase: UltraplanPhase) => void,
202
+ shouldStop?: () => boolean,
203
+ ): Promise<PollResult> {
204
+ const deadline = Date.now() + timeoutMs
205
+ const scanner = new ExitPlanModeScanner()
206
+ let cursor: string | null = null
207
+ let failures = 0
208
+ let lastPhase: UltraplanPhase = 'running'
209
+
210
+ while (Date.now() < deadline) {
211
+ if (shouldStop?.()) {
212
+ throw new UltraplanPollError(
213
+ 'poll stopped by caller',
214
+ 'stopped',
215
+ scanner.rejectCount,
216
+ )
217
+ }
218
+ let newEvents: SDKMessage[]
219
+ let sessionStatus: PollRemoteSessionResponse['sessionStatus']
220
+ try {
221
+ // Metadata fetch (session_status) is the needs_input signal —
222
+ // threadstore doesn't persist result(success) turn-end events, so
223
+ // idle status is the only authoritative "remote is waiting" marker.
224
+ const resp = await pollRemoteSessionEvents(sessionId, cursor)
225
+ newEvents = resp.newEvents
226
+ cursor = resp.lastEventId
227
+ sessionStatus = resp.sessionStatus
228
+ failures = 0
229
+ } catch (e) {
230
+ const transient = isTransientNetworkError(e)
231
+ if (!transient || ++failures >= MAX_CONSECUTIVE_FAILURES) {
232
+ throw new UltraplanPollError(
233
+ e instanceof Error ? e.message : String(e),
234
+ 'network_or_unknown',
235
+ scanner.rejectCount,
236
+ { cause: e },
237
+ )
238
+ }
239
+ await sleep(POLL_INTERVAL_MS)
240
+ continue
241
+ }
242
+
243
+ let result: ScanResult
244
+ try {
245
+ result = scanner.ingest(newEvents)
246
+ } catch (e) {
247
+ throw new UltraplanPollError(
248
+ e instanceof Error ? e.message : String(e),
249
+ 'extract_marker_missing',
250
+ scanner.rejectCount,
251
+ )
252
+ }
253
+ if (result.kind === 'approved') {
254
+ return {
255
+ plan: result.plan,
256
+ rejectCount: scanner.rejectCount,
257
+ executionTarget: 'remote',
258
+ }
259
+ }
260
+ if (result.kind === 'teleport') {
261
+ return {
262
+ plan: result.plan,
263
+ rejectCount: scanner.rejectCount,
264
+ executionTarget: 'local',
265
+ }
266
+ }
267
+ if (result.kind === 'terminated') {
268
+ throw new UltraplanPollError(
269
+ `remote session ended (${result.subtype}) before plan approval`,
270
+ 'terminated',
271
+ scanner.rejectCount,
272
+ )
273
+ }
274
+ // plan_ready from the event stream wins; otherwise idle session status
275
+ // means the remote asked a question and is waiting for a browser reply.
276
+ // requires_action with no pending plan is also needs_input — the remote
277
+ // may be blocked on a non-ExitPlanMode permission prompt.
278
+ // CCR briefly flips to 'idle' between tool turns (see STABLE_IDLE_POLLS
279
+ // in RemoteAgentTask). Only trust idle when no new events arrived —
280
+ // events flowing means the session is working regardless of the status
281
+ // snapshot. This also makes needs_input → running snap back on the first
282
+ // poll that sees the user's reply event, even if session_status lags.
283
+ const quietIdle =
284
+ (sessionStatus === 'idle' || sessionStatus === 'requires_action') &&
285
+ newEvents.length === 0
286
+ const phase: UltraplanPhase = scanner.hasPendingPlan
287
+ ? 'plan_ready'
288
+ : quietIdle
289
+ ? 'needs_input'
290
+ : 'running'
291
+ if (phase !== lastPhase) {
292
+ logForDebugging(`[ultraplan] phase ${lastPhase} → ${phase}`)
293
+ lastPhase = phase
294
+ onPhaseChange?.(phase)
295
+ }
296
+ await sleep(POLL_INTERVAL_MS)
297
+ }
298
+
299
+ throw new UltraplanPollError(
300
+ scanner.everSeenPending
301
+ ? `no approval after ${timeoutMs / 1000}s`
302
+ : `ExitPlanMode never reached after ${timeoutMs / 1000}s (the remote container failed to start, or session ID mismatch?)`,
303
+ scanner.everSeenPending ? 'timeout_pending' : 'timeout_no_plan',
304
+ scanner.rejectCount,
305
+ )
306
+ }
307
+
308
+ // tool_result content may be string or [{type:'text',text}] depending on
309
+ // threadstore encoding.
310
+ function contentToText(content: ToolResultBlockParam['content']): string {
311
+ return typeof content === 'string'
312
+ ? content
313
+ : Array.isArray(content)
314
+ ? content.map(b => ('text' in b ? b.text : '')).join('')
315
+ : ''
316
+ }
317
+
318
+ // Extracts the plan text after the ULTRAPLAN_TELEPORT_SENTINEL marker.
319
+ // Returns null when the sentinel is absent — callers treat null as a normal
320
+ // user rejection (scanner falls through to { kind: 'rejected' }).
321
+ function extractTeleportPlan(
322
+ content: ToolResultBlockParam['content'],
323
+ ): string | null {
324
+ const text = contentToText(content)
325
+ const marker = `${ULTRAPLAN_TELEPORT_SENTINEL}\n`
326
+ const idx = text.indexOf(marker)
327
+ if (idx === -1) return null
328
+ return text.slice(idx + marker.length).trimEnd()
329
+ }
330
+
331
+ // Plan is echoed in tool_result content as "## Approved Plan:\n<text>" or
332
+ // "## Approved Plan (edited by user):\n<text>" (ExitPlanModeV2Tool).
333
+ function extractApprovedPlan(content: ToolResultBlockParam['content']): string {
334
+ const text = contentToText(content)
335
+ // Try both markers — edited plans use a different label.
336
+ const markers = [
337
+ '## Approved Plan (edited by user):\n',
338
+ '## Approved Plan:\n',
339
+ ]
340
+ for (const marker of markers) {
341
+ const idx = text.indexOf(marker)
342
+ if (idx !== -1) {
343
+ return text.slice(idx + marker.length).trimEnd()
344
+ }
345
+ }
346
+ throw new Error(
347
+ `ExitPlanMode approved but tool_result has no "## Approved Plan:" marker — remote may have hit the empty-plan or isAgent branch. Content preview: ${text.slice(0, 200)}`,
348
+ )
349
+ }
@@ -0,0 +1,127 @@
1
+ type TriggerPosition = { word: string; start: number; end: number }
2
+
3
+ const OPEN_TO_CLOSE: Record<string, string> = {
4
+ '`': '`',
5
+ '"': '"',
6
+ '<': '>',
7
+ '{': '}',
8
+ '[': ']',
9
+ '(': ')',
10
+ "'": "'",
11
+ }
12
+
13
+ /**
14
+ * Find keyword positions, skipping occurrences that are clearly not a
15
+ * launch directive:
16
+ *
17
+ * - Inside paired delimiters: backticks, double quotes, angle brackets
18
+ * (tag-like only, so `n < 5 ultraplan n > 10` is not a phantom range),
19
+ * curly braces, square brackets (innermost — preExpansionInput has
20
+ * `[Pasted text #N]` placeholders), parentheses. Single quotes are
21
+ * delimiters only when not an apostrophe — the opening quote must be
22
+ * preceded by a non-word char (or start) and the closing quote must be
23
+ * followed by a non-word char (or end), so "let's ultraplan it's"
24
+ * still triggers.
25
+ *
26
+ * - Path/identifier-like context: immediately preceded or followed by
27
+ * `/`, `\`, or `-`, or followed by `.` + word char (file extension).
28
+ * `\b` sees a boundary at `-`, so `ultraplan-s` would otherwise
29
+ * match. This keeps `src/ultraplan/foo.ts`, `ultraplan.tsx`, and
30
+ * `--ultraplan-mode` from triggering while `ultraplan.` at a sentence
31
+ * end still does.
32
+ *
33
+ * - Followed by `?`: a question about the feature shouldn't invoke it.
34
+ * Other sentence punctuation (`.`, `,`, `!`) still triggers.
35
+ *
36
+ * - Slash command input: text starting with `/` is a slash command
37
+ * invocation (processUserInput.ts routes it to processSlashCommand,
38
+ * not keyword detection), so `/rename ultraplan foo` never triggers.
39
+ * Without this, PromptInput would rainbow-highlight the word and show
40
+ * the "will launch ultraplan" notification even though submitting the
41
+ * input runs /rename, not /ultraplan.
42
+ *
43
+ * Shape matches findThinkingTriggerPositions (thinking.ts) so
44
+ * PromptInput treats both trigger types uniformly.
45
+ */
46
+ function findKeywordTriggerPositions(
47
+ text: string,
48
+ keyword: string,
49
+ ): TriggerPosition[] {
50
+ const re = new RegExp(keyword, 'i')
51
+ if (!re.test(text)) return []
52
+ if (text.startsWith('/')) return []
53
+ const quotedRanges: Array<{ start: number; end: number }> = []
54
+ let openQuote: string | null = null
55
+ let openAt = 0
56
+ const isWord = (ch: string | undefined) => !!ch && /[\p{L}\p{N}_]/u.test(ch)
57
+ for (let i = 0; i < text.length; i++) {
58
+ const ch = text[i]!
59
+ if (openQuote) {
60
+ if (openQuote === '[' && ch === '[') {
61
+ openAt = i
62
+ continue
63
+ }
64
+ if (ch !== OPEN_TO_CLOSE[openQuote]) continue
65
+ if (openQuote === "'" && isWord(text[i + 1])) continue
66
+ quotedRanges.push({ start: openAt, end: i + 1 })
67
+ openQuote = null
68
+ } else if (
69
+ (ch === '<' && i + 1 < text.length && /[a-zA-Z/]/.test(text[i + 1]!)) ||
70
+ (ch === "'" && !isWord(text[i - 1])) ||
71
+ (ch !== '<' && ch !== "'" && ch in OPEN_TO_CLOSE)
72
+ ) {
73
+ openQuote = ch
74
+ openAt = i
75
+ }
76
+ }
77
+
78
+ const positions: TriggerPosition[] = []
79
+ const wordRe = new RegExp(`\\b${keyword}\\b`, 'gi')
80
+ const matches = text.matchAll(wordRe)
81
+ for (const match of matches) {
82
+ if (match.index === undefined) continue
83
+ const start = match.index
84
+ const end = start + match[0].length
85
+ if (quotedRanges.some(r => start >= r.start && start < r.end)) continue
86
+ const before = text[start - 1]
87
+ const after = text[end]
88
+ if (before === '/' || before === '\\' || before === '-') continue
89
+ if (after === '/' || after === '\\' || after === '-' || after === '?')
90
+ continue
91
+ if (after === '.' && isWord(text[end + 1])) continue
92
+ positions.push({ word: match[0], start, end })
93
+ }
94
+ return positions
95
+ }
96
+
97
+ export function findUltraplanTriggerPositions(text: string): TriggerPosition[] {
98
+ return findKeywordTriggerPositions(text, 'ultraplan')
99
+ }
100
+
101
+ export function findUltrareviewTriggerPositions(
102
+ text: string,
103
+ ): TriggerPosition[] {
104
+ return findKeywordTriggerPositions(text, 'ultrareview')
105
+ }
106
+
107
+ export function hasUltraplanKeyword(text: string): boolean {
108
+ return findUltraplanTriggerPositions(text).length > 0
109
+ }
110
+
111
+ export function hasUltrareviewKeyword(text: string): boolean {
112
+ return findUltrareviewTriggerPositions(text).length > 0
113
+ }
114
+
115
+ /**
116
+ * Replace the first triggerable "ultraplan" with "plan" so the forwarded
117
+ * prompt stays grammatical ("please ultraplan this" → "please plan this").
118
+ * Preserves the user's casing of the "plan" suffix.
119
+ */
120
+ export function replaceUltraplanKeyword(text: string): string {
121
+ const [trigger] = findUltraplanTriggerPositions(text)
122
+ if (!trigger) return text
123
+ const before = text.slice(0, trigger.start)
124
+ const after = text.slice(trigger.end)
125
+ if (!(before + after).trim()) return ''
126
+ return before + trigger.word.slice('ultra'.length) + after
127
+ }
@@ -0,0 +1 @@
1
+ placeholder
@@ -0,0 +1,39 @@
1
+ import {
2
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
3
+ logEvent,
4
+ } from 'src/services/analytics/index.js'
5
+
6
+ export type CompletionType =
7
+ | 'str_replace_single'
8
+ | 'str_replace_multi'
9
+ | 'write_file_single'
10
+ | 'tool_use_single'
11
+
12
+ type LogEvent = {
13
+ completion_type: CompletionType
14
+ event: 'accept' | 'reject' | 'response'
15
+ metadata: {
16
+ language_name: string | Promise<string>
17
+ message_id: string
18
+ platform: string
19
+ hasFeedback?: boolean
20
+ }
21
+ }
22
+
23
+ export async function logUnaryEvent(event: LogEvent): Promise<void> {
24
+ logEvent('tengu_unary_event', {
25
+ event:
26
+ event.event as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
27
+ completion_type:
28
+ event.completion_type as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
29
+ language_name: (await event.metadata
30
+ .language_name) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
31
+ message_id: event.metadata
32
+ .message_id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
33
+ platform: event.metadata
34
+ .platform as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
35
+ ...(event.metadata.hasFeedback !== undefined && {
36
+ hasFeedback: event.metadata.hasFeedback,
37
+ }),
38
+ })
39
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Undercover mode — safety utilities for contributing to public/open-source repos.
3
+ *
4
+ * When active, Claude Code adds safety instructions to commit/PR prompts and
5
+ * strips all attribution to avoid leaking internal model codenames, project
6
+ * names, or other Anthropic-internal information. The model is not told what
7
+ * model it is.
8
+ *
9
+ * Activation:
10
+ * - CLAUDE_CODE_UNDERCOVER=1 — force ON (even in internal repos)
11
+ * - Otherwise AUTO: active UNLESS the repo remote matches the internal
12
+ * allowlist (INTERNAL_MODEL_REPOS in commitAttribution.ts). Safe default
13
+ * is ON — Claude may push to public remotes from a CWD that isn't itself
14
+ * a git checkout (e.g. /tmp crash repro).
15
+ * - There is NO force-OFF. This guards against model codename leaks — if
16
+ * we're not confident we're in an internal repo, we stay undercover.
17
+ *
18
+ * All code paths are gated on process.env.USER_TYPE === 'ant'. Since USER_TYPE is
19
+ * a build-time --define, the bundler constant-folds these checks and dead-code-
20
+ * eliminates the ant-only branches from external builds. In external builds every
21
+ * function in this file reduces to a trivial return.
22
+ */
23
+
24
+ import { getRepoClassCached } from './commitAttribution.js'
25
+ import { getGlobalConfig } from './config.js'
26
+ import { isEnvTruthy } from './envUtils.js'
27
+
28
+ export function isUndercover(): boolean {
29
+ if (process.env.USER_TYPE === 'ant') {
30
+ if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return true
31
+ // Auto: active unless we've positively confirmed we're in an allowlisted
32
+ // internal repo. 'external', 'none', and null (check not yet run) all
33
+ // resolve to ON. The check is primed in setup.ts; only 'internal' → OFF.
34
+ return getRepoClassCached() !== 'internal'
35
+ }
36
+ return false
37
+ }
38
+
39
+ export function getUndercoverInstructions(): string {
40
+ if (process.env.USER_TYPE === 'ant') {
41
+ return `## UNDERCOVER MODE — CRITICAL
42
+
43
+ You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit
44
+ messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal
45
+ information. Do not blow your cover.
46
+
47
+ NEVER include in commit messages or PR descriptions:
48
+ - Internal model codenames (animal names like Capybara, Tengu, etc.)
49
+ - Unreleased model version numbers (e.g., opus-4-7, sonnet-4-8)
50
+ - Internal repo or project names (e.g., claude-cli-internal, anthropics/…)
51
+ - Internal tooling, Slack channels, or short links (e.g., go/cc, #claude-code-…)
52
+ - The phrase "Claude Code" or any mention that you are an AI
53
+ - Any hint of what model or version you are
54
+ - Co-Authored-By lines or any other attribution
55
+
56
+ Write commit messages as a human developer would — describe only what the code
57
+ change does.
58
+
59
+ GOOD:
60
+ - "Fix race condition in file watcher initialization"
61
+ - "Add support for custom key bindings"
62
+ - "Refactor parser for better error messages"
63
+
64
+ BAD (never write these):
65
+ - "Fix bug found while testing with Claude Capybara"
66
+ - "1-shotted by claude-opus-4-6"
67
+ - "Generated with Claude Code"
68
+ - "Co-Authored-By: Claude Opus 4.6 <…>"
69
+ `
70
+ }
71
+ return ''
72
+ }
73
+
74
+ /**
75
+ * Check whether to show the one-time explainer dialog for auto-undercover.
76
+ * True when: undercover is active via auto-detection (not forced via env),
77
+ * and the user hasn't seen the notice before. Pure — the component marks the
78
+ * flag on mount.
79
+ */
80
+ export function shouldShowUndercoverAutoNotice(): boolean {
81
+ if (process.env.USER_TYPE === 'ant') {
82
+ // If forced via env, user already knows; don't nag.
83
+ if (isEnvTruthy(process.env.CLAUDE_CODE_UNDERCOVER)) return false
84
+ if (!isUndercover()) return false
85
+ if (getGlobalConfig().hasSeenUndercoverAutoNotice) return false
86
+ return true
87
+ }
88
+ return false
89
+ }