@xelauvas/xela-cli 0.1.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 (1920) hide show
  1. package/README.md +200 -0
  2. package/bin/xela +100 -0
  3. package/package.json +88 -0
  4. package/src/QueryEngine.ts +1295 -0
  5. package/src/Task.ts +125 -0
  6. package/src/Tool.ts +792 -0
  7. package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
  8. package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
  9. package/src/_shims/bun_bundle.js +9 -0
  10. package/src/_shims/cjs_stub.cjs +23 -0
  11. package/src/_shims/empty_stub.js +33 -0
  12. package/src/_shims/loader.js +352 -0
  13. package/src/_shims/openai_adapter.ts +486 -0
  14. package/src/_shims/react_compiler_runtime.js +17 -0
  15. package/src/_shims/register.js +148 -0
  16. package/src/assistant/sessionHistory.ts +87 -0
  17. package/src/bootstrap/state.ts +1759 -0
  18. package/src/bridge/bridgeApi.ts +539 -0
  19. package/src/bridge/bridgeConfig.ts +48 -0
  20. package/src/bridge/bridgeDebug.ts +135 -0
  21. package/src/bridge/bridgeEnabled.ts +202 -0
  22. package/src/bridge/bridgeMain.ts +2999 -0
  23. package/src/bridge/bridgeMessaging.ts +461 -0
  24. package/src/bridge/bridgePermissionCallbacks.ts +43 -0
  25. package/src/bridge/bridgePointer.ts +210 -0
  26. package/src/bridge/bridgeStatusUtil.ts +163 -0
  27. package/src/bridge/bridgeUI.ts +530 -0
  28. package/src/bridge/capacityWake.ts +56 -0
  29. package/src/bridge/codeSessionApi.ts +168 -0
  30. package/src/bridge/createSession.ts +384 -0
  31. package/src/bridge/debugUtils.ts +141 -0
  32. package/src/bridge/envLessBridgeConfig.ts +165 -0
  33. package/src/bridge/flushGate.ts +71 -0
  34. package/src/bridge/inboundAttachments.ts +175 -0
  35. package/src/bridge/inboundMessages.ts +80 -0
  36. package/src/bridge/initReplBridge.ts +569 -0
  37. package/src/bridge/jwtUtils.ts +256 -0
  38. package/src/bridge/pollConfig.ts +110 -0
  39. package/src/bridge/pollConfigDefaults.ts +82 -0
  40. package/src/bridge/remoteBridgeCore.ts +1008 -0
  41. package/src/bridge/replBridge.ts +2406 -0
  42. package/src/bridge/replBridgeHandle.ts +36 -0
  43. package/src/bridge/replBridgeTransport.ts +370 -0
  44. package/src/bridge/sessionIdCompat.ts +57 -0
  45. package/src/bridge/sessionRunner.ts +550 -0
  46. package/src/bridge/trustedDevice.ts +210 -0
  47. package/src/bridge/types.ts +262 -0
  48. package/src/bridge/workSecret.ts +127 -0
  49. package/src/buddy/CompanionSprite.tsx +371 -0
  50. package/src/buddy/companion.ts +133 -0
  51. package/src/buddy/prompt.ts +36 -0
  52. package/src/buddy/sprites.ts +514 -0
  53. package/src/buddy/types.ts +148 -0
  54. package/src/buddy/useBuddyNotification.tsx +98 -0
  55. package/src/cli/exit.ts +31 -0
  56. package/src/cli/handlers/agents.ts +70 -0
  57. package/src/cli/handlers/auth.ts +330 -0
  58. package/src/cli/handlers/autoMode.ts +170 -0
  59. package/src/cli/handlers/mcp.tsx +362 -0
  60. package/src/cli/handlers/plugins.ts +878 -0
  61. package/src/cli/handlers/util.tsx +110 -0
  62. package/src/cli/ndjsonSafeStringify.ts +32 -0
  63. package/src/cli/print.ts +5594 -0
  64. package/src/cli/remoteIO.ts +255 -0
  65. package/src/cli/structuredIO.ts +859 -0
  66. package/src/cli/transports/HybridTransport.ts +282 -0
  67. package/src/cli/transports/SSETransport.ts +711 -0
  68. package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
  69. package/src/cli/transports/WebSocketTransport.ts +800 -0
  70. package/src/cli/transports/WorkerStateUploader.ts +131 -0
  71. package/src/cli/transports/ccrClient.ts +998 -0
  72. package/src/cli/transports/transportUtils.ts +45 -0
  73. package/src/cli/update.ts +422 -0
  74. package/src/commands/add-dir/add-dir.tsx +126 -0
  75. package/src/commands/add-dir/index.ts +11 -0
  76. package/src/commands/add-dir/validation.ts +110 -0
  77. package/src/commands/advisor.ts +109 -0
  78. package/src/commands/agents/agents.tsx +12 -0
  79. package/src/commands/agents/index.ts +10 -0
  80. package/src/commands/ant-trace/index.js +1 -0
  81. package/src/commands/autofix-pr/index.js +1 -0
  82. package/src/commands/backfill-sessions/index.js +1 -0
  83. package/src/commands/branch/branch.ts +296 -0
  84. package/src/commands/branch/index.ts +14 -0
  85. package/src/commands/break-cache/index.js +1 -0
  86. package/src/commands/bridge/bridge.tsx +509 -0
  87. package/src/commands/bridge/index.ts +26 -0
  88. package/src/commands/bridge-kick.ts +200 -0
  89. package/src/commands/brief.ts +130 -0
  90. package/src/commands/btw/btw.tsx +243 -0
  91. package/src/commands/btw/index.ts +13 -0
  92. package/src/commands/bughunter/index.js +1 -0
  93. package/src/commands/chrome/chrome.tsx +285 -0
  94. package/src/commands/chrome/index.ts +13 -0
  95. package/src/commands/clear/caches.ts +144 -0
  96. package/src/commands/clear/clear.ts +7 -0
  97. package/src/commands/clear/conversation.ts +251 -0
  98. package/src/commands/clear/index.ts +19 -0
  99. package/src/commands/color/color.ts +93 -0
  100. package/src/commands/color/index.ts +16 -0
  101. package/src/commands/commit-push-pr.ts +158 -0
  102. package/src/commands/commit.ts +92 -0
  103. package/src/commands/compact/compact.ts +287 -0
  104. package/src/commands/compact/index.ts +15 -0
  105. package/src/commands/config/config.tsx +7 -0
  106. package/src/commands/config/index.ts +11 -0
  107. package/src/commands/context/context-noninteractive.ts +325 -0
  108. package/src/commands/context/context.tsx +64 -0
  109. package/src/commands/context/index.ts +24 -0
  110. package/src/commands/copy/copy.tsx +371 -0
  111. package/src/commands/copy/index.ts +15 -0
  112. package/src/commands/cost/cost.ts +24 -0
  113. package/src/commands/cost/index.ts +23 -0
  114. package/src/commands/createMovedToPluginCommand.ts +65 -0
  115. package/src/commands/ctx_viz/index.js +1 -0
  116. package/src/commands/debug-tool-call/index.js +1 -0
  117. package/src/commands/desktop/desktop.tsx +9 -0
  118. package/src/commands/desktop/index.ts +26 -0
  119. package/src/commands/diff/diff.tsx +9 -0
  120. package/src/commands/diff/index.ts +8 -0
  121. package/src/commands/doctor/doctor.tsx +7 -0
  122. package/src/commands/doctor/index.ts +12 -0
  123. package/src/commands/effort/effort.tsx +183 -0
  124. package/src/commands/effort/index.ts +13 -0
  125. package/src/commands/env/index.js +1 -0
  126. package/src/commands/exit/exit.tsx +33 -0
  127. package/src/commands/exit/index.ts +12 -0
  128. package/src/commands/export/export.tsx +91 -0
  129. package/src/commands/export/index.ts +11 -0
  130. package/src/commands/extra-usage/extra-usage-core.ts +118 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  132. package/src/commands/extra-usage/extra-usage.tsx +17 -0
  133. package/src/commands/extra-usage/index.ts +31 -0
  134. package/src/commands/fast/fast.tsx +269 -0
  135. package/src/commands/fast/index.ts +26 -0
  136. package/src/commands/feedback/feedback.tsx +25 -0
  137. package/src/commands/feedback/index.ts +26 -0
  138. package/src/commands/files/files.ts +19 -0
  139. package/src/commands/files/index.ts +12 -0
  140. package/src/commands/good-claude/index.js +1 -0
  141. package/src/commands/heapdump/heapdump.ts +17 -0
  142. package/src/commands/heapdump/index.ts +12 -0
  143. package/src/commands/help/help.tsx +11 -0
  144. package/src/commands/help/index.ts +10 -0
  145. package/src/commands/hooks/hooks.tsx +13 -0
  146. package/src/commands/hooks/index.ts +11 -0
  147. package/src/commands/ide/ide.tsx +646 -0
  148. package/src/commands/ide/index.ts +11 -0
  149. package/src/commands/init-verifiers.ts +262 -0
  150. package/src/commands/init.ts +256 -0
  151. package/src/commands/insights.ts +3200 -0
  152. package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
  153. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  154. package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  155. package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  156. package/src/commands/install-github-app/CreatingStep.tsx +65 -0
  157. package/src/commands/install-github-app/ErrorStep.tsx +85 -0
  158. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  159. package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
  160. package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  161. package/src/commands/install-github-app/SuccessStep.tsx +96 -0
  162. package/src/commands/install-github-app/WarningsStep.tsx +73 -0
  163. package/src/commands/install-github-app/index.ts +13 -0
  164. package/src/commands/install-github-app/install-github-app.tsx +587 -0
  165. package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
  166. package/src/commands/install-slack-app/index.ts +12 -0
  167. package/src/commands/install-slack-app/install-slack-app.ts +30 -0
  168. package/src/commands/install.tsx +300 -0
  169. package/src/commands/issue/index.js +1 -0
  170. package/src/commands/keybindings/index.ts +13 -0
  171. package/src/commands/keybindings/keybindings.ts +53 -0
  172. package/src/commands/login/index.ts +14 -0
  173. package/src/commands/login/login.tsx +104 -0
  174. package/src/commands/logout/index.ts +10 -0
  175. package/src/commands/logout/logout.tsx +82 -0
  176. package/src/commands/mcp/addCommand.ts +280 -0
  177. package/src/commands/mcp/index.ts +12 -0
  178. package/src/commands/mcp/mcp.tsx +85 -0
  179. package/src/commands/mcp/xaaIdpCommand.ts +266 -0
  180. package/src/commands/memory/index.ts +10 -0
  181. package/src/commands/memory/memory.tsx +90 -0
  182. package/src/commands/mobile/index.ts +11 -0
  183. package/src/commands/mobile/mobile.tsx +274 -0
  184. package/src/commands/mock-limits/index.js +1 -0
  185. package/src/commands/model/index.ts +16 -0
  186. package/src/commands/model/model.tsx +297 -0
  187. package/src/commands/oauth-refresh/index.js +1 -0
  188. package/src/commands/onboarding/index.js +1 -0
  189. package/src/commands/output-style/index.ts +11 -0
  190. package/src/commands/output-style/output-style.tsx +7 -0
  191. package/src/commands/passes/index.ts +22 -0
  192. package/src/commands/passes/passes.tsx +24 -0
  193. package/src/commands/perf-issue/index.js +1 -0
  194. package/src/commands/permissions/index.ts +11 -0
  195. package/src/commands/permissions/permissions.tsx +10 -0
  196. package/src/commands/plan/index.ts +11 -0
  197. package/src/commands/plan/plan.tsx +122 -0
  198. package/src/commands/plugin/AddMarketplace.tsx +162 -0
  199. package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
  200. package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
  201. package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
  202. package/src/commands/plugin/ManagePlugins.tsx +2215 -0
  203. package/src/commands/plugin/PluginErrors.tsx +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
  205. package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
  206. package/src/commands/plugin/PluginSettings.tsx +1072 -0
  207. package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  209. package/src/commands/plugin/ValidatePlugin.tsx +98 -0
  210. package/src/commands/plugin/index.tsx +11 -0
  211. package/src/commands/plugin/parseArgs.ts +103 -0
  212. package/src/commands/plugin/plugin.tsx +7 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  214. package/src/commands/plugin/usePagination.ts +171 -0
  215. package/src/commands/pr_comments/index.ts +50 -0
  216. package/src/commands/privacy-settings/index.ts +14 -0
  217. package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
  218. package/src/commands/rate-limit-options/index.ts +19 -0
  219. package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  220. package/src/commands/release-notes/index.ts +11 -0
  221. package/src/commands/release-notes/release-notes.ts +50 -0
  222. package/src/commands/reload-plugins/index.ts +18 -0
  223. package/src/commands/reload-plugins/reload-plugins.ts +61 -0
  224. package/src/commands/remote-env/index.ts +15 -0
  225. package/src/commands/remote-env/remote-env.tsx +7 -0
  226. package/src/commands/remote-setup/api.ts +182 -0
  227. package/src/commands/remote-setup/index.ts +20 -0
  228. package/src/commands/remote-setup/remote-setup.tsx +187 -0
  229. package/src/commands/rename/generateSessionName.ts +67 -0
  230. package/src/commands/rename/index.ts +12 -0
  231. package/src/commands/rename/rename.ts +87 -0
  232. package/src/commands/reset-limits/index.js +4 -0
  233. package/src/commands/resume/index.ts +12 -0
  234. package/src/commands/resume/resume.tsx +275 -0
  235. package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
  236. package/src/commands/review/reviewRemote.ts +316 -0
  237. package/src/commands/review/ultrareviewCommand.tsx +58 -0
  238. package/src/commands/review/ultrareviewEnabled.ts +14 -0
  239. package/src/commands/review.ts +57 -0
  240. package/src/commands/rewind/index.ts +13 -0
  241. package/src/commands/rewind/rewind.ts +13 -0
  242. package/src/commands/sandbox-toggle/index.ts +50 -0
  243. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  244. package/src/commands/security-review.ts +243 -0
  245. package/src/commands/session/index.ts +16 -0
  246. package/src/commands/session/session.tsx +140 -0
  247. package/src/commands/share/index.js +1 -0
  248. package/src/commands/skills/index.ts +10 -0
  249. package/src/commands/skills/skills.tsx +8 -0
  250. package/src/commands/stats/index.ts +10 -0
  251. package/src/commands/stats/stats.tsx +7 -0
  252. package/src/commands/status/index.ts +12 -0
  253. package/src/commands/status/status.tsx +8 -0
  254. package/src/commands/statusline.tsx +24 -0
  255. package/src/commands/stickers/index.ts +11 -0
  256. package/src/commands/stickers/stickers.ts +16 -0
  257. package/src/commands/summary/index.js +1 -0
  258. package/src/commands/tag/index.ts +12 -0
  259. package/src/commands/tag/tag.tsx +215 -0
  260. package/src/commands/tasks/index.ts +11 -0
  261. package/src/commands/tasks/tasks.tsx +8 -0
  262. package/src/commands/teleport/index.js +1 -0
  263. package/src/commands/terminalSetup/index.ts +23 -0
  264. package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
  265. package/src/commands/theme/index.ts +10 -0
  266. package/src/commands/theme/theme.tsx +57 -0
  267. package/src/commands/thinkback/index.ts +13 -0
  268. package/src/commands/thinkback/thinkback.tsx +554 -0
  269. package/src/commands/thinkback-play/index.ts +17 -0
  270. package/src/commands/thinkback-play/thinkback-play.ts +43 -0
  271. package/src/commands/ultraplan.tsx +471 -0
  272. package/src/commands/upgrade/index.ts +16 -0
  273. package/src/commands/upgrade/upgrade.tsx +38 -0
  274. package/src/commands/usage/index.ts +9 -0
  275. package/src/commands/usage/usage.tsx +7 -0
  276. package/src/commands/version.ts +22 -0
  277. package/src/commands/vim/index.ts +11 -0
  278. package/src/commands/vim/vim.ts +38 -0
  279. package/src/commands/voice/index.ts +20 -0
  280. package/src/commands/voice/voice.ts +150 -0
  281. package/src/commands.ts +754 -0
  282. package/src/components/AgentProgressLine.tsx +136 -0
  283. package/src/components/App.tsx +56 -0
  284. package/src/components/ApproveApiKey.tsx +123 -0
  285. package/src/components/AutoModeOptInDialog.tsx +142 -0
  286. package/src/components/AutoUpdater.tsx +198 -0
  287. package/src/components/AutoUpdaterWrapper.tsx +91 -0
  288. package/src/components/AwsAuthStatusBox.tsx +82 -0
  289. package/src/components/BaseTextInput.tsx +136 -0
  290. package/src/components/BashModeProgress.tsx +56 -0
  291. package/src/components/BridgeDialog.tsx +401 -0
  292. package/src/components/BypassPermissionsModeDialog.tsx +87 -0
  293. package/src/components/ChannelDowngradeDialog.tsx +102 -0
  294. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  295. package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
  296. package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  297. package/src/components/ClickableImageRef.tsx +73 -0
  298. package/src/components/CompactSummary.tsx +118 -0
  299. package/src/components/ConfigurableShortcutHint.tsx +57 -0
  300. package/src/components/ConsoleOAuthFlow.tsx +631 -0
  301. package/src/components/ContextSuggestions.tsx +47 -0
  302. package/src/components/ContextVisualization.tsx +489 -0
  303. package/src/components/CoordinatorAgentStatus.tsx +273 -0
  304. package/src/components/CostThresholdDialog.tsx +50 -0
  305. package/src/components/CtrlOToExpand.tsx +51 -0
  306. package/src/components/CustomSelect/SelectMulti.tsx +213 -0
  307. package/src/components/CustomSelect/index.ts +3 -0
  308. package/src/components/CustomSelect/option-map.ts +50 -0
  309. package/src/components/CustomSelect/select-input-option.tsx +488 -0
  310. package/src/components/CustomSelect/select-option.tsx +68 -0
  311. package/src/components/CustomSelect/select.tsx +690 -0
  312. package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
  313. package/src/components/CustomSelect/use-select-input.ts +287 -0
  314. package/src/components/CustomSelect/use-select-navigation.ts +653 -0
  315. package/src/components/CustomSelect/use-select-state.ts +157 -0
  316. package/src/components/DesktopHandoff.tsx +193 -0
  317. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  318. package/src/components/DevBar.tsx +49 -0
  319. package/src/components/DevChannelsDialog.tsx +105 -0
  320. package/src/components/DiagnosticsDisplay.tsx +95 -0
  321. package/src/components/EffortCallout.tsx +265 -0
  322. package/src/components/EffortIndicator.ts +42 -0
  323. package/src/components/ExitFlow.tsx +48 -0
  324. package/src/components/ExportDialog.tsx +128 -0
  325. package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
  326. package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
  327. package/src/components/FastIcon.tsx +46 -0
  328. package/src/components/Feedback.tsx +592 -0
  329. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  330. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  331. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  332. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  333. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  334. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  335. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  336. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  337. package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  338. package/src/components/FileEditToolDiff.tsx +181 -0
  339. package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
  340. package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
  341. package/src/components/FilePathLink.tsx +43 -0
  342. package/src/components/FullscreenLayout.tsx +637 -0
  343. package/src/components/GlobalSearchDialog.tsx +343 -0
  344. package/src/components/HelpV2/Commands.tsx +82 -0
  345. package/src/components/HelpV2/General.tsx +23 -0
  346. package/src/components/HelpV2/HelpV2.tsx +184 -0
  347. package/src/components/HighlightedCode/Fallback.tsx +193 -0
  348. package/src/components/HighlightedCode.tsx +190 -0
  349. package/src/components/HistorySearchDialog.tsx +118 -0
  350. package/src/components/IdeAutoConnectDialog.tsx +154 -0
  351. package/src/components/IdeOnboardingDialog.tsx +167 -0
  352. package/src/components/IdeStatusIndicator.tsx +58 -0
  353. package/src/components/IdleReturnDialog.tsx +118 -0
  354. package/src/components/InterruptedByUser.tsx +15 -0
  355. package/src/components/InvalidConfigDialog.tsx +156 -0
  356. package/src/components/InvalidSettingsDialog.tsx +89 -0
  357. package/src/components/KeybindingWarnings.tsx +55 -0
  358. package/src/components/LanguagePicker.tsx +86 -0
  359. package/src/components/LogSelector.tsx +1575 -0
  360. package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  361. package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
  362. package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
  363. package/src/components/LogoV2/Clawd.tsx +240 -0
  364. package/src/components/LogoV2/CondensedLogo.tsx +161 -0
  365. package/src/components/LogoV2/EmergencyTip.tsx +58 -0
  366. package/src/components/LogoV2/Feed.tsx +112 -0
  367. package/src/components/LogoV2/FeedColumn.tsx +59 -0
  368. package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  369. package/src/components/LogoV2/LogoV2.tsx +543 -0
  370. package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  371. package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  372. package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
  373. package/src/components/LogoV2/WelcomeV2.tsx +433 -0
  374. package/src/components/LogoV2/feedConfigs.tsx +92 -0
  375. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  376. package/src/components/MCPServerApprovalDialog.tsx +115 -0
  377. package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
  378. package/src/components/MCPServerDialogCopy.tsx +15 -0
  379. package/src/components/MCPServerMultiselectDialog.tsx +133 -0
  380. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  381. package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  382. package/src/components/Markdown.tsx +236 -0
  383. package/src/components/MarkdownTable.tsx +322 -0
  384. package/src/components/MemoryUsageIndicator.tsx +37 -0
  385. package/src/components/Message.tsx +627 -0
  386. package/src/components/MessageModel.tsx +43 -0
  387. package/src/components/MessageResponse.tsx +78 -0
  388. package/src/components/MessageRow.tsx +383 -0
  389. package/src/components/MessageSelector.tsx +831 -0
  390. package/src/components/MessageTimestamp.tsx +63 -0
  391. package/src/components/Messages.tsx +834 -0
  392. package/src/components/ModelPicker.tsx +448 -0
  393. package/src/components/NativeAutoUpdater.tsx +193 -0
  394. package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  395. package/src/components/OffscreenFreeze.tsx +44 -0
  396. package/src/components/Onboarding.tsx +244 -0
  397. package/src/components/OutputStylePicker.tsx +112 -0
  398. package/src/components/PackageManagerAutoUpdater.tsx +104 -0
  399. package/src/components/Passes/Passes.tsx +184 -0
  400. package/src/components/PrBadge.tsx +97 -0
  401. package/src/components/PressEnterToContinue.tsx +15 -0
  402. package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
  403. package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
  404. package/src/components/PromptInput/Notifications.tsx +332 -0
  405. package/src/components/PromptInput/PromptInput.tsx +2339 -0
  406. package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
  407. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  408. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  409. package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  410. package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  411. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  412. package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  413. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  414. package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
  415. package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
  416. package/src/components/PromptInput/inputModes.ts +33 -0
  417. package/src/components/PromptInput/inputPaste.ts +90 -0
  418. package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  419. package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  420. package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
  421. package/src/components/PromptInput/useSwarmBanner.ts +155 -0
  422. package/src/components/PromptInput/utils.ts +60 -0
  423. package/src/components/QuickOpenDialog.tsx +244 -0
  424. package/src/components/RemoteCallout.tsx +76 -0
  425. package/src/components/RemoteEnvironmentDialog.tsx +340 -0
  426. package/src/components/ResumeTask.tsx +268 -0
  427. package/src/components/SandboxViolationExpandedView.tsx +99 -0
  428. package/src/components/ScrollKeybindingHandler.tsx +1012 -0
  429. package/src/components/SearchBox.tsx +72 -0
  430. package/src/components/SentryErrorBoundary.ts +28 -0
  431. package/src/components/SessionBackgroundHint.tsx +108 -0
  432. package/src/components/SessionPreview.tsx +194 -0
  433. package/src/components/Settings/Config.tsx +1822 -0
  434. package/src/components/Settings/Settings.tsx +137 -0
  435. package/src/components/Settings/Status.tsx +241 -0
  436. package/src/components/Settings/Usage.tsx +377 -0
  437. package/src/components/ShowInIDEPrompt.tsx +170 -0
  438. package/src/components/SkillImprovementSurvey.tsx +152 -0
  439. package/src/components/Spinner/FlashingChar.tsx +61 -0
  440. package/src/components/Spinner/GlimmerMessage.tsx +328 -0
  441. package/src/components/Spinner/ShimmerChar.tsx +36 -0
  442. package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  443. package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
  444. package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  445. package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  446. package/src/components/Spinner/index.ts +10 -0
  447. package/src/components/Spinner/teammateSelectHint.ts +1 -0
  448. package/src/components/Spinner/useShimmerAnimation.ts +31 -0
  449. package/src/components/Spinner/useStalledAnimation.ts +75 -0
  450. package/src/components/Spinner/utils.ts +84 -0
  451. package/src/components/Spinner.tsx +562 -0
  452. package/src/components/Stats.tsx +1228 -0
  453. package/src/components/StatusLine.tsx +324 -0
  454. package/src/components/StatusNotices.tsx +55 -0
  455. package/src/components/StructuredDiff/Fallback.tsx +487 -0
  456. package/src/components/StructuredDiff/colorDiff.ts +37 -0
  457. package/src/components/StructuredDiff.tsx +190 -0
  458. package/src/components/StructuredDiffList.tsx +30 -0
  459. package/src/components/TagTabs.tsx +139 -0
  460. package/src/components/TaskListV2.tsx +378 -0
  461. package/src/components/TeammateViewHeader.tsx +82 -0
  462. package/src/components/TeleportError.tsx +189 -0
  463. package/src/components/TeleportProgress.tsx +140 -0
  464. package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
  465. package/src/components/TeleportResumeWrapper.tsx +167 -0
  466. package/src/components/TeleportStash.tsx +116 -0
  467. package/src/components/TextInput.tsx +124 -0
  468. package/src/components/ThemePicker.tsx +333 -0
  469. package/src/components/ThinkingToggle.tsx +153 -0
  470. package/src/components/TokenWarning.tsx +179 -0
  471. package/src/components/ToolUseLoader.tsx +42 -0
  472. package/src/components/TrustDialog/TrustDialog.tsx +290 -0
  473. package/src/components/TrustDialog/utils.ts +245 -0
  474. package/src/components/ValidationErrorsList.tsx +148 -0
  475. package/src/components/VimTextInput.tsx +140 -0
  476. package/src/components/VirtualMessageList.tsx +1082 -0
  477. package/src/components/WorkflowMultiselectDialog.tsx +128 -0
  478. package/src/components/WorktreeExitDialog.tsx +231 -0
  479. package/src/components/agents/AgentDetail.tsx +220 -0
  480. package/src/components/agents/AgentEditor.tsx +178 -0
  481. package/src/components/agents/AgentNavigationFooter.tsx +26 -0
  482. package/src/components/agents/AgentsList.tsx +440 -0
  483. package/src/components/agents/AgentsMenu.tsx +800 -0
  484. package/src/components/agents/ColorPicker.tsx +112 -0
  485. package/src/components/agents/ModelSelector.tsx +68 -0
  486. package/src/components/agents/ToolSelector.tsx +562 -0
  487. package/src/components/agents/agentFileUtils.ts +272 -0
  488. package/src/components/agents/generateAgent.ts +197 -0
  489. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  490. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  491. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  492. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  493. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  494. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  495. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  496. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  497. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  498. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  499. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  502. package/src/components/agents/types.ts +27 -0
  503. package/src/components/agents/utils.ts +18 -0
  504. package/src/components/agents/validateAgent.ts +109 -0
  505. package/src/components/design-system/Byline.tsx +77 -0
  506. package/src/components/design-system/Dialog.tsx +138 -0
  507. package/src/components/design-system/Divider.tsx +149 -0
  508. package/src/components/design-system/FuzzyPicker.tsx +312 -0
  509. package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
  510. package/src/components/design-system/ListItem.tsx +244 -0
  511. package/src/components/design-system/LoadingState.tsx +94 -0
  512. package/src/components/design-system/Pane.tsx +77 -0
  513. package/src/components/design-system/ProgressBar.tsx +86 -0
  514. package/src/components/design-system/Ratchet.tsx +80 -0
  515. package/src/components/design-system/StatusIcon.tsx +95 -0
  516. package/src/components/design-system/Tabs.tsx +340 -0
  517. package/src/components/design-system/ThemeProvider.tsx +174 -0
  518. package/src/components/design-system/ThemedBox.tsx +156 -0
  519. package/src/components/design-system/ThemedText.tsx +124 -0
  520. package/src/components/design-system/color.ts +30 -0
  521. package/src/components/diff/DiffDetailView.tsx +281 -0
  522. package/src/components/diff/DiffDialog.tsx +383 -0
  523. package/src/components/diff/DiffFileList.tsx +292 -0
  524. package/src/components/grove/Grove.tsx +463 -0
  525. package/src/components/hooks/HooksConfigMenu.tsx +578 -0
  526. package/src/components/hooks/PromptDialog.tsx +90 -0
  527. package/src/components/hooks/SelectEventMode.tsx +127 -0
  528. package/src/components/hooks/SelectHookMode.tsx +112 -0
  529. package/src/components/hooks/SelectMatcherMode.tsx +144 -0
  530. package/src/components/hooks/ViewHookMode.tsx +199 -0
  531. package/src/components/mcp/CapabilitiesSection.tsx +61 -0
  532. package/src/components/mcp/ElicitationDialog.tsx +1169 -0
  533. package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
  534. package/src/components/mcp/MCPListPanel.tsx +504 -0
  535. package/src/components/mcp/MCPReconnect.tsx +167 -0
  536. package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  537. package/src/components/mcp/MCPSettings.tsx +398 -0
  538. package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
  539. package/src/components/mcp/MCPToolDetailView.tsx +212 -0
  540. package/src/components/mcp/MCPToolListView.tsx +141 -0
  541. package/src/components/mcp/McpParsingWarnings.tsx +213 -0
  542. package/src/components/mcp/index.ts +9 -0
  543. package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
  544. package/src/components/memory/MemoryFileSelector.tsx +438 -0
  545. package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
  546. package/src/components/messageActions.tsx +450 -0
  547. package/src/components/messages/AdvisorMessage.tsx +158 -0
  548. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  549. package/src/components/messages/AssistantTextMessage.tsx +270 -0
  550. package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
  551. package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
  552. package/src/components/messages/AttachmentMessage.tsx +536 -0
  553. package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
  554. package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
  555. package/src/components/messages/GroupedToolUseContent.tsx +58 -0
  556. package/src/components/messages/HighlightedThinkingText.tsx +162 -0
  557. package/src/components/messages/HookProgressMessage.tsx +116 -0
  558. package/src/components/messages/PlanApprovalMessage.tsx +222 -0
  559. package/src/components/messages/RateLimitMessage.tsx +161 -0
  560. package/src/components/messages/ShutdownMessage.tsx +132 -0
  561. package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
  562. package/src/components/messages/SystemTextMessage.tsx +827 -0
  563. package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
  564. package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
  565. package/src/components/messages/UserBashInputMessage.tsx +58 -0
  566. package/src/components/messages/UserBashOutputMessage.tsx +54 -0
  567. package/src/components/messages/UserChannelMessage.tsx +137 -0
  568. package/src/components/messages/UserCommandMessage.tsx +108 -0
  569. package/src/components/messages/UserImageMessage.tsx +59 -0
  570. package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  571. package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
  572. package/src/components/messages/UserPlanMessage.tsx +42 -0
  573. package/src/components/messages/UserPromptMessage.tsx +80 -0
  574. package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
  575. package/src/components/messages/UserTeammateMessage.tsx +206 -0
  576. package/src/components/messages/UserTextMessage.tsx +275 -0
  577. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  578. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  579. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  580. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  581. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  582. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  583. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  584. package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
  585. package/src/components/messages/nullRenderingAttachments.ts +70 -0
  586. package/src/components/messages/teamMemCollapsed.tsx +140 -0
  587. package/src/components/messages/teamMemSaved.ts +19 -0
  588. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  589. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  590. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  591. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  592. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  593. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  594. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  595. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  596. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  597. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  598. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  599. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  600. package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
  601. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  602. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  603. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  604. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  605. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  606. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  607. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  608. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  609. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  610. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  611. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  612. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  613. package/src/components/permissions/PermissionDialog.tsx +72 -0
  614. package/src/components/permissions/PermissionExplanation.tsx +272 -0
  615. package/src/components/permissions/PermissionPrompt.tsx +336 -0
  616. package/src/components/permissions/PermissionRequest.tsx +217 -0
  617. package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
  618. package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
  619. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  620. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  621. package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
  622. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  623. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  624. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  625. package/src/components/permissions/WorkerBadge.tsx +49 -0
  626. package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
  627. package/src/components/permissions/hooks.ts +209 -0
  628. package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
  629. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  630. package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  631. package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  632. package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  633. package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  634. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  635. package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
  636. package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
  637. package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
  638. package/src/components/permissions/utils.ts +25 -0
  639. package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
  640. package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  641. package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
  642. package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
  643. package/src/components/sandbox/SandboxSettings.tsx +296 -0
  644. package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
  645. package/src/components/shell/OutputLine.tsx +118 -0
  646. package/src/components/shell/ShellProgressMessage.tsx +150 -0
  647. package/src/components/shell/ShellTimeDisplay.tsx +74 -0
  648. package/src/components/skills/SkillsMenu.tsx +237 -0
  649. package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  650. package/src/components/tasks/BackgroundTask.tsx +345 -0
  651. package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
  652. package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
  653. package/src/components/tasks/DreamDetailDialog.tsx +251 -0
  654. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  655. package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  656. package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
  657. package/src/components/tasks/ShellDetailDialog.tsx +404 -0
  658. package/src/components/tasks/ShellProgress.tsx +87 -0
  659. package/src/components/tasks/renderToolActivity.tsx +33 -0
  660. package/src/components/tasks/taskStatusUtils.tsx +107 -0
  661. package/src/components/teams/TeamStatus.tsx +80 -0
  662. package/src/components/teams/TeamsDialog.tsx +715 -0
  663. package/src/components/ui/OrderedList.tsx +71 -0
  664. package/src/components/ui/OrderedListItem.tsx +45 -0
  665. package/src/components/ui/TreeSelect.tsx +397 -0
  666. package/src/components/wizard/WizardDialogLayout.tsx +65 -0
  667. package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
  668. package/src/components/wizard/WizardProvider.tsx +213 -0
  669. package/src/components/wizard/index.ts +9 -0
  670. package/src/components/wizard/useWizard.ts +13 -0
  671. package/src/constants/apiLimits.ts +94 -0
  672. package/src/constants/betas.ts +52 -0
  673. package/src/constants/common.ts +33 -0
  674. package/src/constants/cyberRiskInstruction.ts +24 -0
  675. package/src/constants/errorIds.ts +15 -0
  676. package/src/constants/figures.ts +45 -0
  677. package/src/constants/files.ts +156 -0
  678. package/src/constants/github-app.ts +144 -0
  679. package/src/constants/keys.ts +11 -0
  680. package/src/constants/messages.ts +1 -0
  681. package/src/constants/oauth.ts +234 -0
  682. package/src/constants/outputStyles.ts +216 -0
  683. package/src/constants/product.ts +76 -0
  684. package/src/constants/prompts.ts +914 -0
  685. package/src/constants/spinnerVerbs.ts +204 -0
  686. package/src/constants/system.ts +95 -0
  687. package/src/constants/systemPromptSections.ts +68 -0
  688. package/src/constants/toolLimits.ts +56 -0
  689. package/src/constants/tools.ts +112 -0
  690. package/src/constants/turnCompletionVerbs.ts +12 -0
  691. package/src/constants/xml.ts +86 -0
  692. package/src/context/QueuedMessageContext.tsx +63 -0
  693. package/src/context/fpsMetrics.tsx +30 -0
  694. package/src/context/mailbox.tsx +38 -0
  695. package/src/context/modalContext.tsx +58 -0
  696. package/src/context/notifications.tsx +240 -0
  697. package/src/context/overlayContext.tsx +151 -0
  698. package/src/context/promptOverlayContext.tsx +125 -0
  699. package/src/context/stats.tsx +220 -0
  700. package/src/context/voice.tsx +88 -0
  701. package/src/context.ts +189 -0
  702. package/src/coordinator/coordinatorMode.ts +369 -0
  703. package/src/cost-tracker.ts +323 -0
  704. package/src/costHook.ts +22 -0
  705. package/src/dialogLaunchers.tsx +133 -0
  706. package/src/entrypoints/agentSdkTypes.ts +443 -0
  707. package/src/entrypoints/cli.tsx +303 -0
  708. package/src/entrypoints/init.ts +340 -0
  709. package/src/entrypoints/mcp.ts +196 -0
  710. package/src/entrypoints/sandboxTypes.ts +156 -0
  711. package/src/entrypoints/sdk/controlSchemas.ts +663 -0
  712. package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
  713. package/src/entrypoints/sdk/coreTypes.ts +62 -0
  714. package/src/history.ts +464 -0
  715. package/src/hooks/fileSuggestions.ts +811 -0
  716. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  717. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  718. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  719. package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
  720. package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  721. package/src/hooks/notifs/useInstallMessages.tsx +26 -0
  722. package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  723. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  724. package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  725. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  726. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  727. package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  728. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  729. package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
  730. package/src/hooks/notifs/useStartupNotification.ts +41 -0
  731. package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  732. package/src/hooks/renderPlaceholder.ts +51 -0
  733. package/src/hooks/toolPermission/PermissionContext.ts +388 -0
  734. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  735. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  736. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  737. package/src/hooks/toolPermission/permissionLogging.ts +238 -0
  738. package/src/hooks/unifiedSuggestions.ts +202 -0
  739. package/src/hooks/useAfterFirstRender.ts +17 -0
  740. package/src/hooks/useApiKeyVerification.ts +84 -0
  741. package/src/hooks/useArrowKeyHistory.tsx +229 -0
  742. package/src/hooks/useAssistantHistory.ts +250 -0
  743. package/src/hooks/useAwaySummary.ts +125 -0
  744. package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
  745. package/src/hooks/useBlink.ts +34 -0
  746. package/src/hooks/useCanUseTool.tsx +204 -0
  747. package/src/hooks/useCancelRequest.ts +276 -0
  748. package/src/hooks/useChromeExtensionNotification.tsx +50 -0
  749. package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  750. package/src/hooks/useClipboardImageHint.ts +77 -0
  751. package/src/hooks/useCommandKeybindings.tsx +108 -0
  752. package/src/hooks/useCommandQueue.ts +15 -0
  753. package/src/hooks/useCopyOnSelect.ts +98 -0
  754. package/src/hooks/useDeferredHookMessages.ts +46 -0
  755. package/src/hooks/useDiffData.ts +110 -0
  756. package/src/hooks/useDiffInIDE.ts +379 -0
  757. package/src/hooks/useDirectConnect.ts +229 -0
  758. package/src/hooks/useDoublePress.ts +62 -0
  759. package/src/hooks/useDynamicConfig.ts +22 -0
  760. package/src/hooks/useElapsedTime.ts +37 -0
  761. package/src/hooks/useExitOnCtrlCD.ts +95 -0
  762. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  763. package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
  764. package/src/hooks/useGlobalKeybindings.tsx +249 -0
  765. package/src/hooks/useHistorySearch.ts +303 -0
  766. package/src/hooks/useIDEIntegration.tsx +70 -0
  767. package/src/hooks/useIdeAtMentioned.ts +76 -0
  768. package/src/hooks/useIdeConnectionStatus.ts +33 -0
  769. package/src/hooks/useIdeLogging.ts +41 -0
  770. package/src/hooks/useIdeSelection.ts +150 -0
  771. package/src/hooks/useInboxPoller.ts +969 -0
  772. package/src/hooks/useInputBuffer.ts +132 -0
  773. package/src/hooks/useIssueFlagBanner.ts +133 -0
  774. package/src/hooks/useLogMessages.ts +119 -0
  775. package/src/hooks/useLspPluginRecommendation.tsx +194 -0
  776. package/src/hooks/useMailboxBridge.ts +21 -0
  777. package/src/hooks/useMainLoopModel.ts +34 -0
  778. package/src/hooks/useManagePlugins.ts +304 -0
  779. package/src/hooks/useMemoryUsage.ts +39 -0
  780. package/src/hooks/useMergedClients.ts +23 -0
  781. package/src/hooks/useMergedCommands.ts +15 -0
  782. package/src/hooks/useMergedTools.ts +44 -0
  783. package/src/hooks/useMinDisplayTime.ts +35 -0
  784. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  785. package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  786. package/src/hooks/usePasteHandler.ts +285 -0
  787. package/src/hooks/usePluginRecommendationBase.tsx +105 -0
  788. package/src/hooks/usePrStatus.ts +106 -0
  789. package/src/hooks/usePromptSuggestion.ts +177 -0
  790. package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  791. package/src/hooks/useQueueProcessor.ts +68 -0
  792. package/src/hooks/useRemoteSession.ts +605 -0
  793. package/src/hooks/useReplBridge.tsx +723 -0
  794. package/src/hooks/useSSHSession.ts +241 -0
  795. package/src/hooks/useScheduledTasks.ts +139 -0
  796. package/src/hooks/useSearchInput.ts +364 -0
  797. package/src/hooks/useSessionBackgrounding.ts +158 -0
  798. package/src/hooks/useSettings.ts +17 -0
  799. package/src/hooks/useSettingsChange.ts +25 -0
  800. package/src/hooks/useSkillImprovementSurvey.ts +105 -0
  801. package/src/hooks/useSkillsChange.ts +62 -0
  802. package/src/hooks/useSwarmInitialization.ts +81 -0
  803. package/src/hooks/useSwarmPermissionPoller.ts +330 -0
  804. package/src/hooks/useTaskListWatcher.ts +221 -0
  805. package/src/hooks/useTasksV2.ts +250 -0
  806. package/src/hooks/useTeammateViewAutoExit.ts +63 -0
  807. package/src/hooks/useTeleportResume.tsx +85 -0
  808. package/src/hooks/useTerminalSize.ts +15 -0
  809. package/src/hooks/useTextInput.ts +529 -0
  810. package/src/hooks/useTimeout.ts +14 -0
  811. package/src/hooks/useTurnDiffs.ts +213 -0
  812. package/src/hooks/useTypeahead.tsx +1385 -0
  813. package/src/hooks/useUpdateNotification.ts +34 -0
  814. package/src/hooks/useVimInput.ts +316 -0
  815. package/src/hooks/useVirtualScroll.ts +721 -0
  816. package/src/hooks/useVoice.ts +1144 -0
  817. package/src/hooks/useVoiceEnabled.ts +25 -0
  818. package/src/hooks/useVoiceIntegration.tsx +677 -0
  819. package/src/ink/Ansi.tsx +292 -0
  820. package/src/ink/bidi.ts +139 -0
  821. package/src/ink/clearTerminal.ts +74 -0
  822. package/src/ink/colorize.ts +231 -0
  823. package/src/ink/components/AlternateScreen.tsx +80 -0
  824. package/src/ink/components/App.tsx +659 -0
  825. package/src/ink/components/AppContext.ts +21 -0
  826. package/src/ink/components/Box.tsx +214 -0
  827. package/src/ink/components/Button.tsx +192 -0
  828. package/src/ink/components/ClockContext.tsx +112 -0
  829. package/src/ink/components/CursorDeclarationContext.ts +32 -0
  830. package/src/ink/components/ErrorOverview.tsx +109 -0
  831. package/src/ink/components/Link.tsx +42 -0
  832. package/src/ink/components/Newline.tsx +39 -0
  833. package/src/ink/components/NoSelect.tsx +68 -0
  834. package/src/ink/components/RawAnsi.tsx +57 -0
  835. package/src/ink/components/ScrollBox.tsx +237 -0
  836. package/src/ink/components/Spacer.tsx +20 -0
  837. package/src/ink/components/StdinContext.ts +49 -0
  838. package/src/ink/components/TerminalFocusContext.tsx +52 -0
  839. package/src/ink/components/TerminalSizeContext.tsx +7 -0
  840. package/src/ink/components/Text.tsx +254 -0
  841. package/src/ink/constants.ts +2 -0
  842. package/src/ink/dom.ts +484 -0
  843. package/src/ink/events/click-event.ts +38 -0
  844. package/src/ink/events/dispatcher.ts +233 -0
  845. package/src/ink/events/emitter.ts +39 -0
  846. package/src/ink/events/event-handlers.ts +73 -0
  847. package/src/ink/events/event.ts +11 -0
  848. package/src/ink/events/focus-event.ts +21 -0
  849. package/src/ink/events/input-event.ts +205 -0
  850. package/src/ink/events/keyboard-event.ts +51 -0
  851. package/src/ink/events/terminal-event.ts +107 -0
  852. package/src/ink/events/terminal-focus-event.ts +19 -0
  853. package/src/ink/focus.ts +181 -0
  854. package/src/ink/frame.ts +124 -0
  855. package/src/ink/get-max-width.ts +27 -0
  856. package/src/ink/hit-test.ts +130 -0
  857. package/src/ink/hooks/use-animation-frame.ts +57 -0
  858. package/src/ink/hooks/use-app.ts +8 -0
  859. package/src/ink/hooks/use-declared-cursor.ts +73 -0
  860. package/src/ink/hooks/use-input.ts +92 -0
  861. package/src/ink/hooks/use-interval.ts +67 -0
  862. package/src/ink/hooks/use-search-highlight.ts +53 -0
  863. package/src/ink/hooks/use-selection.ts +104 -0
  864. package/src/ink/hooks/use-stdin.ts +8 -0
  865. package/src/ink/hooks/use-tab-status.ts +72 -0
  866. package/src/ink/hooks/use-terminal-focus.ts +16 -0
  867. package/src/ink/hooks/use-terminal-title.ts +31 -0
  868. package/src/ink/hooks/use-terminal-viewport.ts +96 -0
  869. package/src/ink/ink.tsx +1728 -0
  870. package/src/ink/instances.ts +10 -0
  871. package/src/ink/layout/engine.ts +6 -0
  872. package/src/ink/layout/geometry.ts +97 -0
  873. package/src/ink/layout/node.ts +152 -0
  874. package/src/ink/layout/yoga.ts +308 -0
  875. package/src/ink/line-width-cache.ts +24 -0
  876. package/src/ink/log-update.ts +773 -0
  877. package/src/ink/measure-element.ts +23 -0
  878. package/src/ink/measure-text.ts +47 -0
  879. package/src/ink/node-cache.ts +54 -0
  880. package/src/ink/optimizer.ts +93 -0
  881. package/src/ink/output.ts +797 -0
  882. package/src/ink/parse-keypress.ts +801 -0
  883. package/src/ink/reconciler.ts +512 -0
  884. package/src/ink/render-border.ts +231 -0
  885. package/src/ink/render-node-to-output.ts +1462 -0
  886. package/src/ink/render-to-screen.ts +231 -0
  887. package/src/ink/renderer.ts +178 -0
  888. package/src/ink/root.ts +184 -0
  889. package/src/ink/screen.ts +1486 -0
  890. package/src/ink/searchHighlight.ts +93 -0
  891. package/src/ink/selection.ts +917 -0
  892. package/src/ink/squash-text-nodes.ts +92 -0
  893. package/src/ink/stringWidth.ts +222 -0
  894. package/src/ink/styles.ts +771 -0
  895. package/src/ink/supports-hyperlinks.ts +57 -0
  896. package/src/ink/tabstops.ts +46 -0
  897. package/src/ink/terminal-focus-state.ts +47 -0
  898. package/src/ink/terminal-querier.ts +212 -0
  899. package/src/ink/terminal.ts +248 -0
  900. package/src/ink/termio/ansi.ts +75 -0
  901. package/src/ink/termio/csi.ts +319 -0
  902. package/src/ink/termio/dec.ts +60 -0
  903. package/src/ink/termio/esc.ts +67 -0
  904. package/src/ink/termio/osc.ts +493 -0
  905. package/src/ink/termio/parser.ts +394 -0
  906. package/src/ink/termio/sgr.ts +308 -0
  907. package/src/ink/termio/tokenize.ts +319 -0
  908. package/src/ink/termio/types.ts +236 -0
  909. package/src/ink/termio.ts +42 -0
  910. package/src/ink/useTerminalNotification.ts +126 -0
  911. package/src/ink/warn.ts +9 -0
  912. package/src/ink/widest-line.ts +19 -0
  913. package/src/ink/wrap-text.ts +74 -0
  914. package/src/ink/wrapAnsi.ts +20 -0
  915. package/src/ink.ts +85 -0
  916. package/src/interactiveHelpers.tsx +367 -0
  917. package/src/keybindings/KeybindingContext.tsx +243 -0
  918. package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
  919. package/src/keybindings/defaultBindings.ts +340 -0
  920. package/src/keybindings/loadUserBindings.ts +472 -0
  921. package/src/keybindings/match.ts +120 -0
  922. package/src/keybindings/parser.ts +203 -0
  923. package/src/keybindings/reservedShortcuts.ts +127 -0
  924. package/src/keybindings/resolver.ts +244 -0
  925. package/src/keybindings/schema.ts +236 -0
  926. package/src/keybindings/shortcutFormat.ts +63 -0
  927. package/src/keybindings/template.ts +52 -0
  928. package/src/keybindings/useKeybinding.ts +196 -0
  929. package/src/keybindings/useShortcutDisplay.ts +59 -0
  930. package/src/keybindings/validate.ts +498 -0
  931. package/src/main.tsx +4684 -0
  932. package/src/memdir/findRelevantMemories.ts +141 -0
  933. package/src/memdir/memdir.ts +507 -0
  934. package/src/memdir/memoryAge.ts +53 -0
  935. package/src/memdir/memoryScan.ts +94 -0
  936. package/src/memdir/memoryTypes.ts +271 -0
  937. package/src/memdir/paths.ts +278 -0
  938. package/src/memdir/teamMemPaths.ts +292 -0
  939. package/src/memdir/teamMemPrompts.ts +100 -0
  940. package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  941. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  942. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  943. package/src/migrations/migrateFennecToOpus.ts +45 -0
  944. package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  945. package/src/migrations/migrateOpusToOpus1m.ts +43 -0
  946. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  947. package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  948. package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  949. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  950. package/src/migrations/resetProToOpusDefault.ts +51 -0
  951. package/src/moreright/useMoreRight.tsx +26 -0
  952. package/src/native-ts/color-diff/index.ts +999 -0
  953. package/src/native-ts/file-index/index.ts +370 -0
  954. package/src/native-ts/yoga-layout/enums.ts +134 -0
  955. package/src/native-ts/yoga-layout/index.ts +2578 -0
  956. package/src/outputStyles/loadOutputStylesDir.ts +98 -0
  957. package/src/plugins/builtinPlugins.ts +159 -0
  958. package/src/plugins/bundled/index.ts +23 -0
  959. package/src/projectOnboardingState.ts +83 -0
  960. package/src/query/config.ts +46 -0
  961. package/src/query/deps.ts +40 -0
  962. package/src/query/stopHooks.ts +473 -0
  963. package/src/query/tokenBudget.ts +93 -0
  964. package/src/query.ts +1729 -0
  965. package/src/remote/RemoteSessionManager.ts +343 -0
  966. package/src/remote/SessionsWebSocket.ts +404 -0
  967. package/src/remote/remotePermissionBridge.ts +78 -0
  968. package/src/remote/sdkMessageAdapter.ts +302 -0
  969. package/src/replLauncher.tsx +23 -0
  970. package/src/schemas/hooks.ts +222 -0
  971. package/src/screens/Doctor.tsx +575 -0
  972. package/src/screens/REPL.tsx +5006 -0
  973. package/src/screens/ResumeConversation.tsx +399 -0
  974. package/src/server/createDirectConnectSession.ts +88 -0
  975. package/src/server/directConnectManager.ts +213 -0
  976. package/src/server/types.ts +57 -0
  977. package/src/services/AgentSummary/agentSummary.ts +179 -0
  978. package/src/services/MagicDocs/magicDocs.ts +254 -0
  979. package/src/services/MagicDocs/prompts.ts +127 -0
  980. package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
  981. package/src/services/PromptSuggestion/speculation.ts +991 -0
  982. package/src/services/SessionMemory/prompts.ts +324 -0
  983. package/src/services/SessionMemory/sessionMemory.ts +495 -0
  984. package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  985. package/src/services/analytics/config.ts +38 -0
  986. package/src/services/analytics/datadog.ts +307 -0
  987. package/src/services/analytics/firstPartyEventLogger.ts +449 -0
  988. package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  989. package/src/services/analytics/growthbook.ts +1157 -0
  990. package/src/services/analytics/index.ts +173 -0
  991. package/src/services/analytics/metadata.ts +973 -0
  992. package/src/services/analytics/sink.ts +114 -0
  993. package/src/services/analytics/sinkKillswitch.ts +25 -0
  994. package/src/services/api/adminRequests.ts +119 -0
  995. package/src/services/api/bootstrap.ts +142 -0
  996. package/src/services/api/claude.ts +3433 -0
  997. package/src/services/api/client.ts +395 -0
  998. package/src/services/api/dumpPrompts.ts +226 -0
  999. package/src/services/api/emptyUsage.ts +22 -0
  1000. package/src/services/api/errorUtils.ts +260 -0
  1001. package/src/services/api/errors.ts +1207 -0
  1002. package/src/services/api/filesApi.ts +748 -0
  1003. package/src/services/api/firstTokenDate.ts +60 -0
  1004. package/src/services/api/grove.ts +357 -0
  1005. package/src/services/api/logging.ts +788 -0
  1006. package/src/services/api/metricsOptOut.ts +159 -0
  1007. package/src/services/api/overageCreditGrant.ts +137 -0
  1008. package/src/services/api/promptCacheBreakDetection.ts +727 -0
  1009. package/src/services/api/referral.ts +281 -0
  1010. package/src/services/api/sessionIngress.ts +514 -0
  1011. package/src/services/api/ultrareviewQuota.ts +38 -0
  1012. package/src/services/api/usage.ts +63 -0
  1013. package/src/services/api/withRetry.ts +826 -0
  1014. package/src/services/autoDream/autoDream.ts +324 -0
  1015. package/src/services/autoDream/config.ts +21 -0
  1016. package/src/services/autoDream/consolidationLock.ts +140 -0
  1017. package/src/services/autoDream/consolidationPrompt.ts +65 -0
  1018. package/src/services/awaySummary.ts +74 -0
  1019. package/src/services/claudeAiLimits.ts +515 -0
  1020. package/src/services/claudeAiLimitsHook.ts +23 -0
  1021. package/src/services/compact/apiMicrocompact.ts +153 -0
  1022. package/src/services/compact/autoCompact.ts +351 -0
  1023. package/src/services/compact/compact.ts +1705 -0
  1024. package/src/services/compact/compactWarningHook.ts +16 -0
  1025. package/src/services/compact/compactWarningState.ts +18 -0
  1026. package/src/services/compact/grouping.ts +63 -0
  1027. package/src/services/compact/microCompact.ts +530 -0
  1028. package/src/services/compact/postCompactCleanup.ts +77 -0
  1029. package/src/services/compact/prompt.ts +374 -0
  1030. package/src/services/compact/sessionMemoryCompact.ts +630 -0
  1031. package/src/services/compact/timeBasedMCConfig.ts +43 -0
  1032. package/src/services/diagnosticTracking.ts +397 -0
  1033. package/src/services/extractMemories/extractMemories.ts +615 -0
  1034. package/src/services/extractMemories/prompts.ts +154 -0
  1035. package/src/services/internalLogging.ts +90 -0
  1036. package/src/services/lsp/LSPClient.ts +447 -0
  1037. package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  1038. package/src/services/lsp/LSPServerInstance.ts +511 -0
  1039. package/src/services/lsp/LSPServerManager.ts +420 -0
  1040. package/src/services/lsp/config.ts +79 -0
  1041. package/src/services/lsp/manager.ts +289 -0
  1042. package/src/services/lsp/passiveFeedback.ts +328 -0
  1043. package/src/services/mcp/InProcessTransport.ts +63 -0
  1044. package/src/services/mcp/MCPConnectionManager.tsx +73 -0
  1045. package/src/services/mcp/SdkControlTransport.ts +136 -0
  1046. package/src/services/mcp/auth.ts +2465 -0
  1047. package/src/services/mcp/channelAllowlist.ts +76 -0
  1048. package/src/services/mcp/channelNotification.ts +316 -0
  1049. package/src/services/mcp/channelPermissions.ts +240 -0
  1050. package/src/services/mcp/claudeai.ts +164 -0
  1051. package/src/services/mcp/client.ts +3348 -0
  1052. package/src/services/mcp/config.ts +1578 -0
  1053. package/src/services/mcp/elicitationHandler.ts +313 -0
  1054. package/src/services/mcp/envExpansion.ts +38 -0
  1055. package/src/services/mcp/headersHelper.ts +138 -0
  1056. package/src/services/mcp/mcpStringUtils.ts +106 -0
  1057. package/src/services/mcp/normalization.ts +23 -0
  1058. package/src/services/mcp/oauthPort.ts +78 -0
  1059. package/src/services/mcp/officialRegistry.ts +72 -0
  1060. package/src/services/mcp/types.ts +258 -0
  1061. package/src/services/mcp/useManageMCPConnections.ts +1141 -0
  1062. package/src/services/mcp/utils.ts +575 -0
  1063. package/src/services/mcp/vscodeSdkMcp.ts +112 -0
  1064. package/src/services/mcp/xaa.ts +511 -0
  1065. package/src/services/mcp/xaaIdpLogin.ts +487 -0
  1066. package/src/services/mcpServerApproval.tsx +41 -0
  1067. package/src/services/mockRateLimits.ts +882 -0
  1068. package/src/services/notifier.ts +156 -0
  1069. package/src/services/oauth/auth-code-listener.ts +211 -0
  1070. package/src/services/oauth/client.ts +566 -0
  1071. package/src/services/oauth/crypto.ts +23 -0
  1072. package/src/services/oauth/getOauthProfile.ts +53 -0
  1073. package/src/services/oauth/index.ts +198 -0
  1074. package/src/services/plugins/PluginInstallationManager.ts +184 -0
  1075. package/src/services/plugins/pluginCliCommands.ts +344 -0
  1076. package/src/services/plugins/pluginOperations.ts +1088 -0
  1077. package/src/services/policyLimits/index.ts +664 -0
  1078. package/src/services/policyLimits/types.ts +27 -0
  1079. package/src/services/preventSleep.ts +165 -0
  1080. package/src/services/rateLimitMessages.ts +344 -0
  1081. package/src/services/rateLimitMocking.ts +144 -0
  1082. package/src/services/remoteManagedSettings/index.ts +639 -0
  1083. package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
  1084. package/src/services/remoteManagedSettings/syncCache.ts +112 -0
  1085. package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
  1086. package/src/services/remoteManagedSettings/types.ts +31 -0
  1087. package/src/services/settingsSync/index.ts +581 -0
  1088. package/src/services/settingsSync/types.ts +67 -0
  1089. package/src/services/teamMemorySync/index.ts +1256 -0
  1090. package/src/services/teamMemorySync/secretScanner.ts +324 -0
  1091. package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  1092. package/src/services/teamMemorySync/types.ts +156 -0
  1093. package/src/services/teamMemorySync/watcher.ts +387 -0
  1094. package/src/services/tips/tipHistory.ts +17 -0
  1095. package/src/services/tips/tipRegistry.ts +686 -0
  1096. package/src/services/tips/tipScheduler.ts +58 -0
  1097. package/src/services/tokenEstimation.ts +495 -0
  1098. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1099. package/src/services/tools/StreamingToolExecutor.ts +530 -0
  1100. package/src/services/tools/toolExecution.ts +1745 -0
  1101. package/src/services/tools/toolHooks.ts +650 -0
  1102. package/src/services/tools/toolOrchestration.ts +188 -0
  1103. package/src/services/vcr.ts +406 -0
  1104. package/src/services/voice.ts +525 -0
  1105. package/src/services/voiceKeyterms.ts +106 -0
  1106. package/src/services/voiceStreamSTT.ts +544 -0
  1107. package/src/setup.ts +477 -0
  1108. package/src/skills/bundled/batch.ts +124 -0
  1109. package/src/skills/bundled/claudeApi.ts +196 -0
  1110. package/src/skills/bundled/claudeApiContent.ts +75 -0
  1111. package/src/skills/bundled/claudeInChrome.ts +34 -0
  1112. package/src/skills/bundled/debug.ts +103 -0
  1113. package/src/skills/bundled/index.ts +79 -0
  1114. package/src/skills/bundled/keybindings.ts +339 -0
  1115. package/src/skills/bundled/loop.ts +92 -0
  1116. package/src/skills/bundled/loremIpsum.ts +282 -0
  1117. package/src/skills/bundled/remember.ts +82 -0
  1118. package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
  1119. package/src/skills/bundled/simplify.ts +69 -0
  1120. package/src/skills/bundled/skillify.ts +197 -0
  1121. package/src/skills/bundled/stuck.ts +79 -0
  1122. package/src/skills/bundled/updateConfig.ts +475 -0
  1123. package/src/skills/bundled/verify.ts +30 -0
  1124. package/src/skills/bundled/verifyContent.ts +13 -0
  1125. package/src/skills/bundledSkills.ts +220 -0
  1126. package/src/skills/loadSkillsDir.ts +1086 -0
  1127. package/src/skills/mcpSkillBuilders.ts +44 -0
  1128. package/src/state/AppState.tsx +200 -0
  1129. package/src/state/AppStateStore.ts +569 -0
  1130. package/src/state/onChangeAppState.ts +171 -0
  1131. package/src/state/selectors.ts +76 -0
  1132. package/src/state/store.ts +34 -0
  1133. package/src/state/teammateViewHelpers.ts +141 -0
  1134. package/src/tasks/DreamTask/DreamTask.ts +157 -0
  1135. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  1136. package/src/tasks/InProcessTeammateTask/types.ts +121 -0
  1137. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  1138. package/src/tasks/LocalMainSessionTask.ts +479 -0
  1139. package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  1140. package/src/tasks/LocalShellTask/guards.ts +41 -0
  1141. package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
  1142. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  1143. package/src/tasks/pillLabel.ts +82 -0
  1144. package/src/tasks/stopTask.ts +100 -0
  1145. package/src/tasks/types.ts +46 -0
  1146. package/src/tasks.ts +39 -0
  1147. package/src/tools/AgentTool/AgentTool.tsx +1398 -0
  1148. package/src/tools/AgentTool/UI.tsx +872 -0
  1149. package/src/tools/AgentTool/agentColorManager.ts +66 -0
  1150. package/src/tools/AgentTool/agentDisplay.ts +104 -0
  1151. package/src/tools/AgentTool/agentMemory.ts +177 -0
  1152. package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1153. package/src/tools/AgentTool/agentToolUtils.ts +686 -0
  1154. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1155. package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1156. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1157. package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
  1158. package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1159. package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1160. package/src/tools/AgentTool/builtInAgents.ts +72 -0
  1161. package/src/tools/AgentTool/constants.ts +12 -0
  1162. package/src/tools/AgentTool/forkSubagent.ts +210 -0
  1163. package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
  1164. package/src/tools/AgentTool/prompt.ts +287 -0
  1165. package/src/tools/AgentTool/resumeAgent.ts +265 -0
  1166. package/src/tools/AgentTool/runAgent.ts +973 -0
  1167. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1168. package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
  1169. package/src/tools/BashTool/BashTool.tsx +1144 -0
  1170. package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1171. package/src/tools/BashTool/UI.tsx +185 -0
  1172. package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
  1173. package/src/tools/BashTool/bashPermissions.ts +2621 -0
  1174. package/src/tools/BashTool/bashSecurity.ts +2592 -0
  1175. package/src/tools/BashTool/commandSemantics.ts +140 -0
  1176. package/src/tools/BashTool/commentLabel.ts +13 -0
  1177. package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1178. package/src/tools/BashTool/modeValidation.ts +115 -0
  1179. package/src/tools/BashTool/pathValidation.ts +1303 -0
  1180. package/src/tools/BashTool/prompt.ts +369 -0
  1181. package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
  1182. package/src/tools/BashTool/sedEditParser.ts +322 -0
  1183. package/src/tools/BashTool/sedValidation.ts +684 -0
  1184. package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
  1185. package/src/tools/BashTool/toolName.ts +2 -0
  1186. package/src/tools/BashTool/utils.ts +223 -0
  1187. package/src/tools/BriefTool/BriefTool.ts +204 -0
  1188. package/src/tools/BriefTool/UI.tsx +101 -0
  1189. package/src/tools/BriefTool/attachments.ts +110 -0
  1190. package/src/tools/BriefTool/prompt.ts +22 -0
  1191. package/src/tools/BriefTool/upload.ts +174 -0
  1192. package/src/tools/ConfigTool/ConfigTool.ts +467 -0
  1193. package/src/tools/ConfigTool/UI.tsx +38 -0
  1194. package/src/tools/ConfigTool/constants.ts +1 -0
  1195. package/src/tools/ConfigTool/prompt.ts +93 -0
  1196. package/src/tools/ConfigTool/supportedSettings.ts +211 -0
  1197. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1198. package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
  1199. package/src/tools/EnterPlanModeTool/constants.ts +1 -0
  1200. package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
  1201. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1202. package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
  1203. package/src/tools/EnterWorktreeTool/constants.ts +1 -0
  1204. package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
  1205. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1206. package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
  1207. package/src/tools/ExitPlanModeTool/constants.ts +2 -0
  1208. package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
  1209. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1210. package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
  1211. package/src/tools/ExitWorktreeTool/constants.ts +1 -0
  1212. package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
  1213. package/src/tools/FileEditTool/FileEditTool.ts +625 -0
  1214. package/src/tools/FileEditTool/UI.tsx +289 -0
  1215. package/src/tools/FileEditTool/constants.ts +11 -0
  1216. package/src/tools/FileEditTool/prompt.ts +28 -0
  1217. package/src/tools/FileEditTool/types.ts +85 -0
  1218. package/src/tools/FileEditTool/utils.ts +775 -0
  1219. package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
  1220. package/src/tools/FileReadTool/UI.tsx +185 -0
  1221. package/src/tools/FileReadTool/imageProcessor.ts +94 -0
  1222. package/src/tools/FileReadTool/limits.ts +92 -0
  1223. package/src/tools/FileReadTool/prompt.ts +49 -0
  1224. package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1225. package/src/tools/FileWriteTool/UI.tsx +405 -0
  1226. package/src/tools/FileWriteTool/prompt.ts +18 -0
  1227. package/src/tools/GlobTool/GlobTool.ts +198 -0
  1228. package/src/tools/GlobTool/UI.tsx +63 -0
  1229. package/src/tools/GlobTool/prompt.ts +7 -0
  1230. package/src/tools/GrepTool/GrepTool.ts +577 -0
  1231. package/src/tools/GrepTool/UI.tsx +201 -0
  1232. package/src/tools/GrepTool/prompt.ts +18 -0
  1233. package/src/tools/LSPTool/LSPTool.ts +860 -0
  1234. package/src/tools/LSPTool/UI.tsx +228 -0
  1235. package/src/tools/LSPTool/formatters.ts +592 -0
  1236. package/src/tools/LSPTool/prompt.ts +21 -0
  1237. package/src/tools/LSPTool/schemas.ts +215 -0
  1238. package/src/tools/LSPTool/symbolContext.ts +90 -0
  1239. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1240. package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1241. package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1242. package/src/tools/MCPTool/MCPTool.ts +77 -0
  1243. package/src/tools/MCPTool/UI.tsx +403 -0
  1244. package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
  1245. package/src/tools/MCPTool/prompt.ts +3 -0
  1246. package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1247. package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1248. package/src/tools/NotebookEditTool/UI.tsx +93 -0
  1249. package/src/tools/NotebookEditTool/constants.ts +2 -0
  1250. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  1251. package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1252. package/src/tools/PowerShellTool/UI.tsx +131 -0
  1253. package/src/tools/PowerShellTool/clmTypes.ts +211 -0
  1254. package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
  1255. package/src/tools/PowerShellTool/commonParameters.ts +30 -0
  1256. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1257. package/src/tools/PowerShellTool/gitSafety.ts +176 -0
  1258. package/src/tools/PowerShellTool/modeValidation.ts +404 -0
  1259. package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
  1260. package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1261. package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1262. package/src/tools/PowerShellTool/prompt.ts +145 -0
  1263. package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1264. package/src/tools/PowerShellTool/toolName.ts +2 -0
  1265. package/src/tools/REPLTool/constants.ts +46 -0
  1266. package/src/tools/REPLTool/primitiveTools.ts +39 -0
  1267. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1268. package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1269. package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1270. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1271. package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
  1272. package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
  1273. package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1274. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1275. package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1276. package/src/tools/ScheduleCronTool/UI.tsx +60 -0
  1277. package/src/tools/ScheduleCronTool/prompt.ts +135 -0
  1278. package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1279. package/src/tools/SendMessageTool/UI.tsx +31 -0
  1280. package/src/tools/SendMessageTool/constants.ts +1 -0
  1281. package/src/tools/SendMessageTool/prompt.ts +49 -0
  1282. package/src/tools/SkillTool/SkillTool.ts +1108 -0
  1283. package/src/tools/SkillTool/UI.tsx +128 -0
  1284. package/src/tools/SkillTool/constants.ts +1 -0
  1285. package/src/tools/SkillTool/prompt.ts +241 -0
  1286. package/src/tools/SleepTool/prompt.ts +17 -0
  1287. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1288. package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1289. package/src/tools/TaskCreateTool/constants.ts +1 -0
  1290. package/src/tools/TaskCreateTool/prompt.ts +56 -0
  1291. package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1292. package/src/tools/TaskGetTool/constants.ts +1 -0
  1293. package/src/tools/TaskGetTool/prompt.ts +24 -0
  1294. package/src/tools/TaskListTool/TaskListTool.ts +116 -0
  1295. package/src/tools/TaskListTool/constants.ts +1 -0
  1296. package/src/tools/TaskListTool/prompt.ts +49 -0
  1297. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1298. package/src/tools/TaskOutputTool/constants.ts +1 -0
  1299. package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1300. package/src/tools/TaskStopTool/UI.tsx +41 -0
  1301. package/src/tools/TaskStopTool/prompt.ts +8 -0
  1302. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1303. package/src/tools/TaskUpdateTool/constants.ts +1 -0
  1304. package/src/tools/TaskUpdateTool/prompt.ts +77 -0
  1305. package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1306. package/src/tools/TeamCreateTool/UI.tsx +6 -0
  1307. package/src/tools/TeamCreateTool/constants.ts +1 -0
  1308. package/src/tools/TeamCreateTool/prompt.ts +113 -0
  1309. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1310. package/src/tools/TeamDeleteTool/UI.tsx +20 -0
  1311. package/src/tools/TeamDeleteTool/constants.ts +1 -0
  1312. package/src/tools/TeamDeleteTool/prompt.ts +16 -0
  1313. package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1314. package/src/tools/TodoWriteTool/constants.ts +1 -0
  1315. package/src/tools/TodoWriteTool/prompt.ts +184 -0
  1316. package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1317. package/src/tools/ToolSearchTool/constants.ts +1 -0
  1318. package/src/tools/ToolSearchTool/prompt.ts +121 -0
  1319. package/src/tools/TungstenTool/TungstenTool.js +2 -0
  1320. package/src/tools/TungstenTool/TungstenTool.ts +1 -0
  1321. package/src/tools/WebFetchTool/UI.tsx +72 -0
  1322. package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1323. package/src/tools/WebFetchTool/preapproved.ts +166 -0
  1324. package/src/tools/WebFetchTool/prompt.ts +46 -0
  1325. package/src/tools/WebFetchTool/utils.ts +530 -0
  1326. package/src/tools/WebSearchTool/UI.tsx +101 -0
  1327. package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1328. package/src/tools/WebSearchTool/prompt.ts +34 -0
  1329. package/src/tools/shared/gitOperationTracking.ts +277 -0
  1330. package/src/tools/shared/spawnMultiAgent.ts +1093 -0
  1331. package/src/tools/testing/TestingPermissionTool.tsx +74 -0
  1332. package/src/tools/utils.ts +40 -0
  1333. package/src/tools.ts +389 -0
  1334. package/src/types/command.ts +216 -0
  1335. package/src/types/connectorText.js +5 -0
  1336. package/src/types/connectorText.ts +1 -0
  1337. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1338. package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
  1339. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1340. package/src/types/generated/google/protobuf/timestamp.ts +187 -0
  1341. package/src/types/hooks.ts +290 -0
  1342. package/src/types/ids.ts +44 -0
  1343. package/src/types/logs.ts +330 -0
  1344. package/src/types/permissions.ts +441 -0
  1345. package/src/types/plugin.ts +363 -0
  1346. package/src/types/textInputTypes.ts +387 -0
  1347. package/src/upstreamproxy/relay.ts +455 -0
  1348. package/src/upstreamproxy/upstreamproxy.ts +285 -0
  1349. package/src/utils/CircularBuffer.ts +84 -0
  1350. package/src/utils/Cursor.ts +1530 -0
  1351. package/src/utils/QueryGuard.ts +121 -0
  1352. package/src/utils/Shell.ts +474 -0
  1353. package/src/utils/ShellCommand.ts +465 -0
  1354. package/src/utils/abortController.ts +99 -0
  1355. package/src/utils/activityManager.ts +164 -0
  1356. package/src/utils/advisor.ts +145 -0
  1357. package/src/utils/agentContext.ts +178 -0
  1358. package/src/utils/agentId.ts +99 -0
  1359. package/src/utils/agentSwarmsEnabled.ts +44 -0
  1360. package/src/utils/agenticSessionSearch.ts +307 -0
  1361. package/src/utils/analyzeContext.ts +1382 -0
  1362. package/src/utils/ansiToPng.ts +334 -0
  1363. package/src/utils/ansiToSvg.ts +272 -0
  1364. package/src/utils/api.ts +718 -0
  1365. package/src/utils/apiPreconnect.ts +72 -0
  1366. package/src/utils/appleTerminalBackup.ts +124 -0
  1367. package/src/utils/argumentSubstitution.ts +145 -0
  1368. package/src/utils/array.ts +13 -0
  1369. package/src/utils/asciicast.ts +239 -0
  1370. package/src/utils/attachments.ts +3997 -0
  1371. package/src/utils/attribution.ts +393 -0
  1372. package/src/utils/auth.ts +2007 -0
  1373. package/src/utils/authFileDescriptor.ts +196 -0
  1374. package/src/utils/authPortable.ts +19 -0
  1375. package/src/utils/autoModeDenials.ts +26 -0
  1376. package/src/utils/autoRunIssue.tsx +122 -0
  1377. package/src/utils/autoUpdater.ts +562 -0
  1378. package/src/utils/aws.ts +74 -0
  1379. package/src/utils/awsAuthStatusManager.ts +81 -0
  1380. package/src/utils/background/remote/preconditions.ts +235 -0
  1381. package/src/utils/background/remote/remoteSession.ts +98 -0
  1382. package/src/utils/backgroundHousekeeping.ts +94 -0
  1383. package/src/utils/bash/ParsedCommand.ts +318 -0
  1384. package/src/utils/bash/ShellSnapshot.ts +582 -0
  1385. package/src/utils/bash/ast.ts +2679 -0
  1386. package/src/utils/bash/bashParser.ts +4436 -0
  1387. package/src/utils/bash/bashPipeCommand.ts +294 -0
  1388. package/src/utils/bash/commands.ts +1339 -0
  1389. package/src/utils/bash/heredoc.ts +733 -0
  1390. package/src/utils/bash/parser.ts +230 -0
  1391. package/src/utils/bash/prefix.ts +204 -0
  1392. package/src/utils/bash/registry.ts +53 -0
  1393. package/src/utils/bash/shellCompletion.ts +259 -0
  1394. package/src/utils/bash/shellPrefix.ts +28 -0
  1395. package/src/utils/bash/shellQuote.ts +304 -0
  1396. package/src/utils/bash/shellQuoting.ts +128 -0
  1397. package/src/utils/bash/specs/alias.ts +14 -0
  1398. package/src/utils/bash/specs/index.ts +18 -0
  1399. package/src/utils/bash/specs/nohup.ts +13 -0
  1400. package/src/utils/bash/specs/pyright.ts +91 -0
  1401. package/src/utils/bash/specs/sleep.ts +13 -0
  1402. package/src/utils/bash/specs/srun.ts +31 -0
  1403. package/src/utils/bash/specs/time.ts +13 -0
  1404. package/src/utils/bash/specs/timeout.ts +20 -0
  1405. package/src/utils/bash/treeSitterAnalysis.ts +506 -0
  1406. package/src/utils/betas.ts +438 -0
  1407. package/src/utils/billing.ts +78 -0
  1408. package/src/utils/binaryCheck.ts +53 -0
  1409. package/src/utils/browser.ts +68 -0
  1410. package/src/utils/bufferedWriter.ts +100 -0
  1411. package/src/utils/bundledMode.ts +22 -0
  1412. package/src/utils/caCerts.ts +115 -0
  1413. package/src/utils/caCertsConfig.ts +88 -0
  1414. package/src/utils/cachePaths.ts +38 -0
  1415. package/src/utils/classifierApprovals.ts +88 -0
  1416. package/src/utils/classifierApprovalsHook.ts +17 -0
  1417. package/src/utils/claudeCodeHints.ts +193 -0
  1418. package/src/utils/claudeDesktop.ts +152 -0
  1419. package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1420. package/src/utils/claudeInChrome/common.ts +540 -0
  1421. package/src/utils/claudeInChrome/mcpServer.ts +293 -0
  1422. package/src/utils/claudeInChrome/prompt.ts +83 -0
  1423. package/src/utils/claudeInChrome/setup.ts +400 -0
  1424. package/src/utils/claudeInChrome/setupPortable.ts +233 -0
  1425. package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
  1426. package/src/utils/claudemd.ts +1479 -0
  1427. package/src/utils/cleanup.ts +602 -0
  1428. package/src/utils/cleanupRegistry.ts +25 -0
  1429. package/src/utils/cliArgs.ts +60 -0
  1430. package/src/utils/cliHighlight.ts +54 -0
  1431. package/src/utils/codeIndexing.ts +206 -0
  1432. package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
  1433. package/src/utils/collapseHookSummaries.ts +59 -0
  1434. package/src/utils/collapseReadSearch.ts +1109 -0
  1435. package/src/utils/collapseTeammateShutdowns.ts +55 -0
  1436. package/src/utils/combinedAbortSignal.ts +47 -0
  1437. package/src/utils/commandLifecycle.ts +21 -0
  1438. package/src/utils/commitAttribution.ts +961 -0
  1439. package/src/utils/completionCache.ts +166 -0
  1440. package/src/utils/computerUse/appNames.ts +196 -0
  1441. package/src/utils/computerUse/cleanup.ts +86 -0
  1442. package/src/utils/computerUse/common.ts +61 -0
  1443. package/src/utils/computerUse/computerUseLock.ts +215 -0
  1444. package/src/utils/computerUse/drainRunLoop.ts +79 -0
  1445. package/src/utils/computerUse/escHotkey.ts +54 -0
  1446. package/src/utils/computerUse/executor.ts +658 -0
  1447. package/src/utils/computerUse/gates.ts +72 -0
  1448. package/src/utils/computerUse/hostAdapter.ts +69 -0
  1449. package/src/utils/computerUse/inputLoader.ts +30 -0
  1450. package/src/utils/computerUse/mcpServer.ts +106 -0
  1451. package/src/utils/computerUse/setup.ts +53 -0
  1452. package/src/utils/computerUse/swiftLoader.ts +23 -0
  1453. package/src/utils/computerUse/toolRendering.tsx +125 -0
  1454. package/src/utils/computerUse/wrapper.tsx +336 -0
  1455. package/src/utils/concurrentSessions.ts +204 -0
  1456. package/src/utils/config.ts +1817 -0
  1457. package/src/utils/configConstants.ts +21 -0
  1458. package/src/utils/contentArray.ts +51 -0
  1459. package/src/utils/context.ts +221 -0
  1460. package/src/utils/contextAnalysis.ts +272 -0
  1461. package/src/utils/contextSuggestions.ts +235 -0
  1462. package/src/utils/controlMessageCompat.ts +32 -0
  1463. package/src/utils/conversationRecovery.ts +597 -0
  1464. package/src/utils/cron.ts +308 -0
  1465. package/src/utils/cronJitterConfig.ts +75 -0
  1466. package/src/utils/cronScheduler.ts +565 -0
  1467. package/src/utils/cronTasks.ts +458 -0
  1468. package/src/utils/cronTasksLock.ts +195 -0
  1469. package/src/utils/crossProjectResume.ts +75 -0
  1470. package/src/utils/crypto.ts +13 -0
  1471. package/src/utils/cwd.ts +32 -0
  1472. package/src/utils/debug.ts +268 -0
  1473. package/src/utils/debugFilter.ts +157 -0
  1474. package/src/utils/deepLink/banner.ts +123 -0
  1475. package/src/utils/deepLink/parseDeepLink.ts +170 -0
  1476. package/src/utils/deepLink/protocolHandler.ts +136 -0
  1477. package/src/utils/deepLink/registerProtocol.ts +348 -0
  1478. package/src/utils/deepLink/terminalLauncher.ts +557 -0
  1479. package/src/utils/deepLink/terminalPreference.ts +54 -0
  1480. package/src/utils/desktopDeepLink.ts +236 -0
  1481. package/src/utils/detectRepository.ts +178 -0
  1482. package/src/utils/diagLogs.ts +94 -0
  1483. package/src/utils/diff.ts +177 -0
  1484. package/src/utils/directMemberMessage.ts +69 -0
  1485. package/src/utils/displayTags.ts +51 -0
  1486. package/src/utils/doctorContextWarnings.ts +265 -0
  1487. package/src/utils/doctorDiagnostic.ts +625 -0
  1488. package/src/utils/dxt/helpers.ts +88 -0
  1489. package/src/utils/dxt/zip.ts +226 -0
  1490. package/src/utils/earlyInput.ts +191 -0
  1491. package/src/utils/editor.ts +183 -0
  1492. package/src/utils/effort.ts +329 -0
  1493. package/src/utils/embeddedTools.ts +29 -0
  1494. package/src/utils/env.ts +347 -0
  1495. package/src/utils/envDynamic.ts +151 -0
  1496. package/src/utils/envUtils.ts +183 -0
  1497. package/src/utils/envValidation.ts +38 -0
  1498. package/src/utils/errorLogSink.ts +235 -0
  1499. package/src/utils/errors.ts +238 -0
  1500. package/src/utils/exampleCommands.ts +184 -0
  1501. package/src/utils/execFileNoThrow.ts +150 -0
  1502. package/src/utils/execFileNoThrowPortable.ts +89 -0
  1503. package/src/utils/execSyncWrapper.ts +38 -0
  1504. package/src/utils/exportRenderer.tsx +98 -0
  1505. package/src/utils/extraUsage.ts +23 -0
  1506. package/src/utils/fastMode.ts +532 -0
  1507. package/src/utils/file.ts +584 -0
  1508. package/src/utils/fileHistory.ts +1115 -0
  1509. package/src/utils/fileOperationAnalytics.ts +71 -0
  1510. package/src/utils/filePersistence/filePersistence.ts +287 -0
  1511. package/src/utils/filePersistence/outputsScanner.ts +126 -0
  1512. package/src/utils/fileRead.ts +102 -0
  1513. package/src/utils/fileReadCache.ts +96 -0
  1514. package/src/utils/fileStateCache.ts +142 -0
  1515. package/src/utils/findExecutable.ts +17 -0
  1516. package/src/utils/fingerprint.ts +76 -0
  1517. package/src/utils/forkedAgent.ts +689 -0
  1518. package/src/utils/format.ts +308 -0
  1519. package/src/utils/formatBriefTimestamp.ts +81 -0
  1520. package/src/utils/fpsTracker.ts +47 -0
  1521. package/src/utils/frontmatterParser.ts +370 -0
  1522. package/src/utils/fsOperations.ts +770 -0
  1523. package/src/utils/fullscreen.ts +202 -0
  1524. package/src/utils/generatedFiles.ts +136 -0
  1525. package/src/utils/generators.ts +88 -0
  1526. package/src/utils/genericProcessUtils.ts +184 -0
  1527. package/src/utils/getWorktreePaths.ts +70 -0
  1528. package/src/utils/getWorktreePathsPortable.ts +27 -0
  1529. package/src/utils/ghPrStatus.ts +106 -0
  1530. package/src/utils/git/gitConfigParser.ts +277 -0
  1531. package/src/utils/git/gitFilesystem.ts +699 -0
  1532. package/src/utils/git/gitignore.ts +99 -0
  1533. package/src/utils/git.ts +926 -0
  1534. package/src/utils/gitDiff.ts +532 -0
  1535. package/src/utils/gitSettings.ts +18 -0
  1536. package/src/utils/github/ghAuthStatus.ts +29 -0
  1537. package/src/utils/githubRepoPathMapping.ts +162 -0
  1538. package/src/utils/glob.ts +130 -0
  1539. package/src/utils/gracefulShutdown.ts +529 -0
  1540. package/src/utils/groupToolUses.ts +182 -0
  1541. package/src/utils/handlePromptSubmit.ts +610 -0
  1542. package/src/utils/hash.ts +46 -0
  1543. package/src/utils/headlessProfiler.ts +178 -0
  1544. package/src/utils/heapDumpService.ts +303 -0
  1545. package/src/utils/heatmap.ts +198 -0
  1546. package/src/utils/highlightMatch.tsx +28 -0
  1547. package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
  1548. package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
  1549. package/src/utils/hooks/execAgentHook.ts +339 -0
  1550. package/src/utils/hooks/execHttpHook.ts +242 -0
  1551. package/src/utils/hooks/execPromptHook.ts +211 -0
  1552. package/src/utils/hooks/fileChangedWatcher.ts +191 -0
  1553. package/src/utils/hooks/hookEvents.ts +192 -0
  1554. package/src/utils/hooks/hookHelpers.ts +83 -0
  1555. package/src/utils/hooks/hooksConfigManager.ts +400 -0
  1556. package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1557. package/src/utils/hooks/hooksSettings.ts +271 -0
  1558. package/src/utils/hooks/postSamplingHooks.ts +70 -0
  1559. package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1560. package/src/utils/hooks/registerSkillHooks.ts +64 -0
  1561. package/src/utils/hooks/sessionHooks.ts +447 -0
  1562. package/src/utils/hooks/skillImprovement.ts +267 -0
  1563. package/src/utils/hooks/ssrfGuard.ts +294 -0
  1564. package/src/utils/hooks.ts +5022 -0
  1565. package/src/utils/horizontalScroll.ts +137 -0
  1566. package/src/utils/http.ts +136 -0
  1567. package/src/utils/hyperlink.ts +39 -0
  1568. package/src/utils/iTermBackup.ts +73 -0
  1569. package/src/utils/ide.ts +1494 -0
  1570. package/src/utils/idePathConversion.ts +90 -0
  1571. package/src/utils/idleTimeout.ts +53 -0
  1572. package/src/utils/imagePaste.ts +416 -0
  1573. package/src/utils/imageResizer.ts +880 -0
  1574. package/src/utils/imageStore.ts +167 -0
  1575. package/src/utils/imageValidation.ts +104 -0
  1576. package/src/utils/immediateCommand.ts +15 -0
  1577. package/src/utils/inProcessTeammateHelpers.ts +102 -0
  1578. package/src/utils/ink.ts +26 -0
  1579. package/src/utils/intl.ts +94 -0
  1580. package/src/utils/jetbrains.ts +191 -0
  1581. package/src/utils/json.ts +277 -0
  1582. package/src/utils/jsonRead.ts +16 -0
  1583. package/src/utils/keyboardShortcuts.ts +14 -0
  1584. package/src/utils/lazySchema.ts +8 -0
  1585. package/src/utils/listSessionsImpl.ts +454 -0
  1586. package/src/utils/localInstaller.ts +162 -0
  1587. package/src/utils/lockfile.ts +43 -0
  1588. package/src/utils/log.ts +362 -0
  1589. package/src/utils/logoV2Utils.ts +350 -0
  1590. package/src/utils/mailbox.ts +73 -0
  1591. package/src/utils/managedEnv.ts +199 -0
  1592. package/src/utils/managedEnvConstants.ts +191 -0
  1593. package/src/utils/markdown.ts +381 -0
  1594. package/src/utils/markdownConfigLoader.ts +600 -0
  1595. package/src/utils/mcp/dateTimeParser.ts +121 -0
  1596. package/src/utils/mcp/elicitationValidation.ts +336 -0
  1597. package/src/utils/mcpInstructionsDelta.ts +130 -0
  1598. package/src/utils/mcpOutputStorage.ts +189 -0
  1599. package/src/utils/mcpValidation.ts +208 -0
  1600. package/src/utils/mcpWebSocketTransport.ts +200 -0
  1601. package/src/utils/memoize.ts +269 -0
  1602. package/src/utils/memory/types.ts +12 -0
  1603. package/src/utils/memory/versions.ts +8 -0
  1604. package/src/utils/memoryFileDetection.ts +289 -0
  1605. package/src/utils/messagePredicates.ts +8 -0
  1606. package/src/utils/messageQueueManager.ts +547 -0
  1607. package/src/utils/messages/mappers.ts +290 -0
  1608. package/src/utils/messages/systemInit.ts +96 -0
  1609. package/src/utils/messages.ts +5512 -0
  1610. package/src/utils/model/agent.ts +157 -0
  1611. package/src/utils/model/aliases.ts +25 -0
  1612. package/src/utils/model/antModels.ts +64 -0
  1613. package/src/utils/model/bedrock.ts +265 -0
  1614. package/src/utils/model/check1mAccess.ts +72 -0
  1615. package/src/utils/model/configs.ts +118 -0
  1616. package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1617. package/src/utils/model/deprecation.ts +101 -0
  1618. package/src/utils/model/model.ts +634 -0
  1619. package/src/utils/model/modelAllowlist.ts +170 -0
  1620. package/src/utils/model/modelCapabilities.ts +118 -0
  1621. package/src/utils/model/modelOptions.ts +540 -0
  1622. package/src/utils/model/modelStrings.ts +166 -0
  1623. package/src/utils/model/modelSupportOverrides.ts +50 -0
  1624. package/src/utils/model/providers.ts +46 -0
  1625. package/src/utils/model/validateModel.ts +159 -0
  1626. package/src/utils/modelCost.ts +235 -0
  1627. package/src/utils/modifiers.ts +36 -0
  1628. package/src/utils/mtls.ts +179 -0
  1629. package/src/utils/nativeInstaller/download.ts +523 -0
  1630. package/src/utils/nativeInstaller/index.ts +18 -0
  1631. package/src/utils/nativeInstaller/installer.ts +1708 -0
  1632. package/src/utils/nativeInstaller/packageManagers.ts +336 -0
  1633. package/src/utils/nativeInstaller/pidLock.ts +433 -0
  1634. package/src/utils/notebook.ts +224 -0
  1635. package/src/utils/objectGroupBy.ts +18 -0
  1636. package/src/utils/pasteStore.ts +104 -0
  1637. package/src/utils/path.ts +155 -0
  1638. package/src/utils/pdf.ts +300 -0
  1639. package/src/utils/pdfUtils.ts +70 -0
  1640. package/src/utils/peerAddress.ts +21 -0
  1641. package/src/utils/permissions/PermissionMode.ts +141 -0
  1642. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1643. package/src/utils/permissions/PermissionResult.ts +35 -0
  1644. package/src/utils/permissions/PermissionRule.ts +40 -0
  1645. package/src/utils/permissions/PermissionUpdate.ts +389 -0
  1646. package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1647. package/src/utils/permissions/autoModeState.ts +39 -0
  1648. package/src/utils/permissions/bashClassifier.ts +61 -0
  1649. package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1650. package/src/utils/permissions/classifierDecision.ts +98 -0
  1651. package/src/utils/permissions/classifierShared.ts +39 -0
  1652. package/src/utils/permissions/dangerousPatterns.ts +80 -0
  1653. package/src/utils/permissions/denialTracking.ts +45 -0
  1654. package/src/utils/permissions/filesystem.ts +1777 -0
  1655. package/src/utils/permissions/getNextPermissionMode.ts +101 -0
  1656. package/src/utils/permissions/pathValidation.ts +485 -0
  1657. package/src/utils/permissions/permissionExplainer.ts +250 -0
  1658. package/src/utils/permissions/permissionRuleParser.ts +198 -0
  1659. package/src/utils/permissions/permissionSetup.ts +1532 -0
  1660. package/src/utils/permissions/permissions.ts +1486 -0
  1661. package/src/utils/permissions/permissionsLoader.ts +296 -0
  1662. package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
  1663. package/src/utils/permissions/shellRuleMatching.ts +228 -0
  1664. package/src/utils/permissions/yoloClassifier.ts +1495 -0
  1665. package/src/utils/planModeV2.ts +95 -0
  1666. package/src/utils/plans.ts +397 -0
  1667. package/src/utils/platform.ts +150 -0
  1668. package/src/utils/plugins/addDirPluginSettings.ts +71 -0
  1669. package/src/utils/plugins/cacheUtils.ts +196 -0
  1670. package/src/utils/plugins/dependencyResolver.ts +305 -0
  1671. package/src/utils/plugins/fetchTelemetry.ts +135 -0
  1672. package/src/utils/plugins/gitAvailability.ts +69 -0
  1673. package/src/utils/plugins/headlessPluginInstall.ts +174 -0
  1674. package/src/utils/plugins/hintRecommendation.ts +164 -0
  1675. package/src/utils/plugins/installCounts.ts +292 -0
  1676. package/src/utils/plugins/installedPluginsManager.ts +1268 -0
  1677. package/src/utils/plugins/loadPluginAgents.ts +348 -0
  1678. package/src/utils/plugins/loadPluginCommands.ts +946 -0
  1679. package/src/utils/plugins/loadPluginHooks.ts +287 -0
  1680. package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1681. package/src/utils/plugins/lspPluginIntegration.ts +387 -0
  1682. package/src/utils/plugins/lspRecommendation.ts +374 -0
  1683. package/src/utils/plugins/managedPlugins.ts +27 -0
  1684. package/src/utils/plugins/marketplaceHelpers.ts +592 -0
  1685. package/src/utils/plugins/marketplaceManager.ts +2643 -0
  1686. package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
  1687. package/src/utils/plugins/mcpbHandler.ts +968 -0
  1688. package/src/utils/plugins/officialMarketplace.ts +25 -0
  1689. package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1690. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1691. package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
  1692. package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
  1693. package/src/utils/plugins/performStartupChecks.tsx +70 -0
  1694. package/src/utils/plugins/pluginAutoupdate.ts +284 -0
  1695. package/src/utils/plugins/pluginBlocklist.ts +127 -0
  1696. package/src/utils/plugins/pluginDirectories.ts +178 -0
  1697. package/src/utils/plugins/pluginFlagging.ts +208 -0
  1698. package/src/utils/plugins/pluginIdentifier.ts +123 -0
  1699. package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1700. package/src/utils/plugins/pluginLoader.ts +3302 -0
  1701. package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
  1702. package/src/utils/plugins/pluginPolicy.ts +20 -0
  1703. package/src/utils/plugins/pluginStartupCheck.ts +341 -0
  1704. package/src/utils/plugins/pluginVersioning.ts +157 -0
  1705. package/src/utils/plugins/reconciler.ts +265 -0
  1706. package/src/utils/plugins/refresh.ts +215 -0
  1707. package/src/utils/plugins/schemas.ts +1681 -0
  1708. package/src/utils/plugins/validatePlugin.ts +903 -0
  1709. package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
  1710. package/src/utils/plugins/zipCache.ts +406 -0
  1711. package/src/utils/plugins/zipCacheAdapters.ts +164 -0
  1712. package/src/utils/powershell/dangerousCmdlets.ts +185 -0
  1713. package/src/utils/powershell/parser.ts +1804 -0
  1714. package/src/utils/powershell/staticPrefix.ts +316 -0
  1715. package/src/utils/preflightChecks.tsx +151 -0
  1716. package/src/utils/privacyLevel.ts +55 -0
  1717. package/src/utils/process.ts +68 -0
  1718. package/src/utils/processUserInput/processBashCommand.tsx +140 -0
  1719. package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
  1720. package/src/utils/processUserInput/processTextPrompt.ts +100 -0
  1721. package/src/utils/processUserInput/processUserInput.ts +605 -0
  1722. package/src/utils/profilerBase.ts +46 -0
  1723. package/src/utils/promptCategory.ts +49 -0
  1724. package/src/utils/promptEditor.ts +188 -0
  1725. package/src/utils/promptShellExecution.ts +183 -0
  1726. package/src/utils/proxy.ts +426 -0
  1727. package/src/utils/queryContext.ts +179 -0
  1728. package/src/utils/queryHelpers.ts +552 -0
  1729. package/src/utils/queryProfiler.ts +301 -0
  1730. package/src/utils/queueProcessor.ts +95 -0
  1731. package/src/utils/readEditContext.ts +227 -0
  1732. package/src/utils/readFileInRange.ts +383 -0
  1733. package/src/utils/releaseNotes.ts +360 -0
  1734. package/src/utils/renderOptions.ts +77 -0
  1735. package/src/utils/ripgrep.ts +679 -0
  1736. package/src/utils/sandbox/sandbox-adapter.ts +985 -0
  1737. package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1738. package/src/utils/sanitization.ts +91 -0
  1739. package/src/utils/screenshotClipboard.ts +121 -0
  1740. package/src/utils/sdkEventQueue.ts +134 -0
  1741. package/src/utils/secureStorage/fallbackStorage.ts +70 -0
  1742. package/src/utils/secureStorage/index.ts +17 -0
  1743. package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
  1744. package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1745. package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1746. package/src/utils/secureStorage/plainTextStorage.ts +84 -0
  1747. package/src/utils/semanticBoolean.ts +29 -0
  1748. package/src/utils/semanticNumber.ts +36 -0
  1749. package/src/utils/semver.ts +59 -0
  1750. package/src/utils/sequential.ts +56 -0
  1751. package/src/utils/sessionActivity.ts +133 -0
  1752. package/src/utils/sessionEnvVars.ts +22 -0
  1753. package/src/utils/sessionEnvironment.ts +166 -0
  1754. package/src/utils/sessionFileAccessHooks.ts +250 -0
  1755. package/src/utils/sessionIngressAuth.ts +140 -0
  1756. package/src/utils/sessionRestore.ts +551 -0
  1757. package/src/utils/sessionStart.ts +232 -0
  1758. package/src/utils/sessionState.ts +150 -0
  1759. package/src/utils/sessionStorage.ts +5105 -0
  1760. package/src/utils/sessionStoragePortable.ts +793 -0
  1761. package/src/utils/sessionTitle.ts +129 -0
  1762. package/src/utils/sessionUrl.ts +64 -0
  1763. package/src/utils/set.ts +53 -0
  1764. package/src/utils/settings/allErrors.ts +32 -0
  1765. package/src/utils/settings/applySettingsChange.ts +92 -0
  1766. package/src/utils/settings/changeDetector.ts +488 -0
  1767. package/src/utils/settings/constants.ts +202 -0
  1768. package/src/utils/settings/internalWrites.ts +37 -0
  1769. package/src/utils/settings/managedPath.ts +34 -0
  1770. package/src/utils/settings/mdm/constants.ts +81 -0
  1771. package/src/utils/settings/mdm/rawRead.ts +130 -0
  1772. package/src/utils/settings/mdm/settings.ts +316 -0
  1773. package/src/utils/settings/permissionValidation.ts +262 -0
  1774. package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
  1775. package/src/utils/settings/schemaOutput.ts +8 -0
  1776. package/src/utils/settings/settings.ts +1015 -0
  1777. package/src/utils/settings/settingsCache.ts +80 -0
  1778. package/src/utils/settings/toolValidationConfig.ts +103 -0
  1779. package/src/utils/settings/types.ts +1148 -0
  1780. package/src/utils/settings/validateEditTool.ts +45 -0
  1781. package/src/utils/settings/validation.ts +265 -0
  1782. package/src/utils/settings/validationTips.ts +164 -0
  1783. package/src/utils/shell/bashProvider.ts +255 -0
  1784. package/src/utils/shell/outputLimits.ts +14 -0
  1785. package/src/utils/shell/powershellDetection.ts +107 -0
  1786. package/src/utils/shell/powershellProvider.ts +123 -0
  1787. package/src/utils/shell/prefix.ts +367 -0
  1788. package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1789. package/src/utils/shell/resolveDefaultShell.ts +14 -0
  1790. package/src/utils/shell/shellProvider.ts +33 -0
  1791. package/src/utils/shell/shellToolUtils.ts +22 -0
  1792. package/src/utils/shell/specPrefix.ts +241 -0
  1793. package/src/utils/shellConfig.ts +167 -0
  1794. package/src/utils/sideQuery.ts +222 -0
  1795. package/src/utils/sideQuestion.ts +155 -0
  1796. package/src/utils/signal.ts +43 -0
  1797. package/src/utils/sinks.ts +16 -0
  1798. package/src/utils/skills/skillChangeDetector.ts +311 -0
  1799. package/src/utils/slashCommandParsing.ts +60 -0
  1800. package/src/utils/sleep.ts +84 -0
  1801. package/src/utils/sliceAnsi.ts +91 -0
  1802. package/src/utils/slowOperations.ts +286 -0
  1803. package/src/utils/standaloneAgent.ts +23 -0
  1804. package/src/utils/startupProfiler.ts +194 -0
  1805. package/src/utils/staticRender.tsx +116 -0
  1806. package/src/utils/stats.ts +1061 -0
  1807. package/src/utils/statsCache.ts +434 -0
  1808. package/src/utils/status.tsx +362 -0
  1809. package/src/utils/statusNoticeDefinitions.tsx +198 -0
  1810. package/src/utils/statusNoticeHelpers.ts +20 -0
  1811. package/src/utils/stream.ts +76 -0
  1812. package/src/utils/streamJsonStdoutGuard.ts +123 -0
  1813. package/src/utils/streamlinedTransform.ts +201 -0
  1814. package/src/utils/stringUtils.ts +235 -0
  1815. package/src/utils/subprocessEnv.ts +99 -0
  1816. package/src/utils/suggestions/commandSuggestions.ts +567 -0
  1817. package/src/utils/suggestions/directoryCompletion.ts +263 -0
  1818. package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1819. package/src/utils/suggestions/skillUsageTracking.ts +55 -0
  1820. package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1821. package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
  1822. package/src/utils/swarm/backends/ITermBackend.ts +370 -0
  1823. package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
  1824. package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1825. package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
  1826. package/src/utils/swarm/backends/detection.ts +128 -0
  1827. package/src/utils/swarm/backends/it2Setup.ts +245 -0
  1828. package/src/utils/swarm/backends/registry.ts +464 -0
  1829. package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1830. package/src/utils/swarm/backends/types.ts +311 -0
  1831. package/src/utils/swarm/constants.ts +33 -0
  1832. package/src/utils/swarm/inProcessRunner.ts +1552 -0
  1833. package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
  1834. package/src/utils/swarm/permissionSync.ts +928 -0
  1835. package/src/utils/swarm/reconnection.ts +119 -0
  1836. package/src/utils/swarm/spawnInProcess.ts +328 -0
  1837. package/src/utils/swarm/spawnUtils.ts +146 -0
  1838. package/src/utils/swarm/teamHelpers.ts +683 -0
  1839. package/src/utils/swarm/teammateInit.ts +129 -0
  1840. package/src/utils/swarm/teammateLayoutManager.ts +107 -0
  1841. package/src/utils/swarm/teammateModel.ts +10 -0
  1842. package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
  1843. package/src/utils/systemDirectories.ts +74 -0
  1844. package/src/utils/systemPrompt.ts +123 -0
  1845. package/src/utils/systemPromptType.ts +14 -0
  1846. package/src/utils/systemTheme.ts +119 -0
  1847. package/src/utils/taggedId.ts +54 -0
  1848. package/src/utils/task/TaskOutput.ts +390 -0
  1849. package/src/utils/task/diskOutput.ts +451 -0
  1850. package/src/utils/task/framework.ts +308 -0
  1851. package/src/utils/task/outputFormatting.ts +38 -0
  1852. package/src/utils/task/sdkProgress.ts +36 -0
  1853. package/src/utils/tasks.ts +862 -0
  1854. package/src/utils/teamDiscovery.ts +81 -0
  1855. package/src/utils/teamMemoryOps.ts +88 -0
  1856. package/src/utils/teammate.ts +292 -0
  1857. package/src/utils/teammateContext.ts +96 -0
  1858. package/src/utils/teammateMailbox.ts +1183 -0
  1859. package/src/utils/telemetry/betaSessionTracing.ts +491 -0
  1860. package/src/utils/telemetry/bigqueryExporter.ts +252 -0
  1861. package/src/utils/telemetry/events.ts +75 -0
  1862. package/src/utils/telemetry/instrumentation.ts +825 -0
  1863. package/src/utils/telemetry/logger.ts +26 -0
  1864. package/src/utils/telemetry/perfettoTracing.ts +1120 -0
  1865. package/src/utils/telemetry/pluginTelemetry.ts +289 -0
  1866. package/src/utils/telemetry/sessionTracing.ts +927 -0
  1867. package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
  1868. package/src/utils/telemetryAttributes.ts +71 -0
  1869. package/src/utils/teleport/api.ts +466 -0
  1870. package/src/utils/teleport/environmentSelection.ts +77 -0
  1871. package/src/utils/teleport/environments.ts +120 -0
  1872. package/src/utils/teleport/gitBundle.ts +292 -0
  1873. package/src/utils/teleport.tsx +1226 -0
  1874. package/src/utils/tempfile.ts +31 -0
  1875. package/src/utils/terminal.ts +131 -0
  1876. package/src/utils/terminalPanel.ts +191 -0
  1877. package/src/utils/textHighlighting.ts +166 -0
  1878. package/src/utils/theme.ts +639 -0
  1879. package/src/utils/thinking.ts +162 -0
  1880. package/src/utils/timeouts.ts +39 -0
  1881. package/src/utils/tmuxSocket.ts +427 -0
  1882. package/src/utils/todo/types.ts +18 -0
  1883. package/src/utils/tokenBudget.ts +73 -0
  1884. package/src/utils/tokens.ts +261 -0
  1885. package/src/utils/toolErrors.ts +132 -0
  1886. package/src/utils/toolPool.ts +79 -0
  1887. package/src/utils/toolResultStorage.ts +1040 -0
  1888. package/src/utils/toolSchemaCache.ts +26 -0
  1889. package/src/utils/toolSearch.ts +756 -0
  1890. package/src/utils/transcriptSearch.ts +202 -0
  1891. package/src/utils/treeify.ts +170 -0
  1892. package/src/utils/truncate.ts +179 -0
  1893. package/src/utils/ultraplan/ccrSession.ts +349 -0
  1894. package/src/utils/ultraplan/keyword.ts +127 -0
  1895. package/src/utils/ultraplan/prompt.txt +1 -0
  1896. package/src/utils/unaryLogging.ts +39 -0
  1897. package/src/utils/undercover.ts +89 -0
  1898. package/src/utils/user.ts +194 -0
  1899. package/src/utils/userAgent.ts +10 -0
  1900. package/src/utils/userPromptKeywords.ts +27 -0
  1901. package/src/utils/uuid.ts +27 -0
  1902. package/src/utils/warningHandler.ts +121 -0
  1903. package/src/utils/which.ts +82 -0
  1904. package/src/utils/windowsPaths.ts +173 -0
  1905. package/src/utils/withResolvers.ts +13 -0
  1906. package/src/utils/words.ts +800 -0
  1907. package/src/utils/workloadContext.ts +57 -0
  1908. package/src/utils/worktree.ts +1519 -0
  1909. package/src/utils/worktreeModeEnabled.ts +11 -0
  1910. package/src/utils/xdg.ts +65 -0
  1911. package/src/utils/xml.ts +16 -0
  1912. package/src/utils/yaml.ts +15 -0
  1913. package/src/utils/zodToJsonSchema.ts +23 -0
  1914. package/src/vim/motions.ts +82 -0
  1915. package/src/vim/operators.ts +556 -0
  1916. package/src/vim/textObjects.ts +186 -0
  1917. package/src/vim/transitions.ts +490 -0
  1918. package/src/vim/types.ts +199 -0
  1919. package/src/voice/voiceModeEnabled.ts +54 -0
  1920. package/start.js +1 -0
@@ -0,0 +1,1745 @@
1
+ import { feature } from 'bun:bundle'
2
+ import type {
3
+ ContentBlockParam,
4
+ ToolResultBlockParam,
5
+ ToolUseBlock,
6
+ } from '@anthropic-ai/sdk/resources/index.mjs'
7
+ import {
8
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
9
+ logEvent,
10
+ } from 'src/services/analytics/index.js'
11
+ import {
12
+ extractMcpToolDetails,
13
+ extractSkillName,
14
+ extractToolInputForTelemetry,
15
+ getFileExtensionForAnalytics,
16
+ getFileExtensionsFromBashCommand,
17
+ isToolDetailsLoggingEnabled,
18
+ mcpToolDetailsForAnalytics,
19
+ sanitizeToolNameForAnalytics,
20
+ } from 'src/services/analytics/metadata.js'
21
+ import {
22
+ addToToolDuration,
23
+ getCodeEditToolDecisionCounter,
24
+ getStatsStore,
25
+ } from '../../bootstrap/state.js'
26
+ import {
27
+ buildCodeEditToolAttributes,
28
+ isCodeEditingTool,
29
+ } from '../../hooks/toolPermission/permissionLogging.js'
30
+ import type { CanUseToolFn } from '../../hooks/useCanUseTool.js'
31
+ import {
32
+ findToolByName,
33
+ type Tool,
34
+ type ToolProgress,
35
+ type ToolProgressData,
36
+ type ToolUseContext,
37
+ } from '../../Tool.js'
38
+ import type { BashToolInput } from '../../tools/BashTool/BashTool.js'
39
+ import { startSpeculativeClassifierCheck } from '../../tools/BashTool/bashPermissions.js'
40
+ import { BASH_TOOL_NAME } from '../../tools/BashTool/toolName.js'
41
+ import { FILE_EDIT_TOOL_NAME } from '../../tools/FileEditTool/constants.js'
42
+ import { FILE_READ_TOOL_NAME } from '../../tools/FileReadTool/prompt.js'
43
+ import { FILE_WRITE_TOOL_NAME } from '../../tools/FileWriteTool/prompt.js'
44
+ import { NOTEBOOK_EDIT_TOOL_NAME } from '../../tools/NotebookEditTool/constants.js'
45
+ import { POWERSHELL_TOOL_NAME } from '../../tools/PowerShellTool/toolName.js'
46
+ import { parseGitCommitId } from '../../tools/shared/gitOperationTracking.js'
47
+ import {
48
+ isDeferredTool,
49
+ TOOL_SEARCH_TOOL_NAME,
50
+ } from '../../tools/ToolSearchTool/prompt.js'
51
+ import { getAllBaseTools } from '../../tools.js'
52
+ import type { HookProgress } from '../../types/hooks.js'
53
+ import type {
54
+ AssistantMessage,
55
+ AttachmentMessage,
56
+ Message,
57
+ ProgressMessage,
58
+ StopHookInfo,
59
+ } from '../../types/message.js'
60
+ import { count } from '../../utils/array.js'
61
+ import { createAttachmentMessage } from '../../utils/attachments.js'
62
+ import { logForDebugging } from '../../utils/debug.js'
63
+ import {
64
+ AbortError,
65
+ errorMessage,
66
+ getErrnoCode,
67
+ ShellError,
68
+ TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
69
+ } from '../../utils/errors.js'
70
+ import { executePermissionDeniedHooks } from '../../utils/hooks.js'
71
+ import { logError } from '../../utils/log.js'
72
+ import {
73
+ CANCEL_MESSAGE,
74
+ createProgressMessage,
75
+ createStopHookSummaryMessage,
76
+ createToolResultStopMessage,
77
+ createUserMessage,
78
+ withMemoryCorrectionHint,
79
+ } from '../../utils/messages.js'
80
+ import type {
81
+ PermissionDecisionReason,
82
+ PermissionResult,
83
+ } from '../../utils/permissions/PermissionResult.js'
84
+ import {
85
+ startSessionActivity,
86
+ stopSessionActivity,
87
+ } from '../../utils/sessionActivity.js'
88
+ import { jsonStringify } from '../../utils/slowOperations.js'
89
+ import { Stream } from '../../utils/stream.js'
90
+ import { logOTelEvent } from '../../utils/telemetry/events.js'
91
+ import {
92
+ addToolContentEvent,
93
+ endToolBlockedOnUserSpan,
94
+ endToolExecutionSpan,
95
+ endToolSpan,
96
+ isBetaTracingEnabled,
97
+ startToolBlockedOnUserSpan,
98
+ startToolExecutionSpan,
99
+ startToolSpan,
100
+ } from '../../utils/telemetry/sessionTracing.js'
101
+ import {
102
+ formatError,
103
+ formatZodValidationError,
104
+ } from '../../utils/toolErrors.js'
105
+ import {
106
+ processPreMappedToolResultBlock,
107
+ processToolResultBlock,
108
+ } from '../../utils/toolResultStorage.js'
109
+ import {
110
+ extractDiscoveredToolNames,
111
+ isToolSearchEnabledOptimistic,
112
+ isToolSearchToolAvailable,
113
+ } from '../../utils/toolSearch.js'
114
+ import {
115
+ McpAuthError,
116
+ McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
117
+ } from '../mcp/client.js'
118
+ import { mcpInfoFromString } from '../mcp/mcpStringUtils.js'
119
+ import { normalizeNameForMCP } from '../mcp/normalization.js'
120
+ import type { MCPServerConnection } from '../mcp/types.js'
121
+ import {
122
+ getLoggingSafeMcpBaseUrl,
123
+ getMcpServerScopeFromToolName,
124
+ isMcpTool,
125
+ } from '../mcp/utils.js'
126
+ import {
127
+ resolveHookPermissionDecision,
128
+ runPostToolUseFailureHooks,
129
+ runPostToolUseHooks,
130
+ runPreToolUseHooks,
131
+ } from './toolHooks.js'
132
+
133
+ /** Minimum total hook duration (ms) to show inline timing summary */
134
+ export const HOOK_TIMING_DISPLAY_THRESHOLD_MS = 500
135
+ /** Log a debug warning when hooks/permission-decision block for this long. Matches
136
+ * BashTool's PROGRESS_THRESHOLD_MS — the collapsed view feels stuck past this. */
137
+ const SLOW_PHASE_LOG_THRESHOLD_MS = 2000
138
+
139
+ /**
140
+ * Classify a tool execution error into a telemetry-safe string.
141
+ *
142
+ * In minified/external builds, `error.constructor.name` is mangled into
143
+ * short identifiers like "nJT" or "Chq" — useless for diagnostics.
144
+ * This function extracts structured, telemetry-safe information instead:
145
+ * - TelemetrySafeError: use its telemetryMessage (already vetted)
146
+ * - Node.js fs errors: log the error code (ENOENT, EACCES, etc.)
147
+ * - Known error types: use their unminified name
148
+ * - Fallback: "Error" (better than a mangled 3-char identifier)
149
+ */
150
+ export function classifyToolError(error: unknown): string {
151
+ if (
152
+ error instanceof TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
153
+ ) {
154
+ return error.telemetryMessage.slice(0, 200)
155
+ }
156
+ if (error instanceof Error) {
157
+ // Node.js filesystem errors have a `code` property (ENOENT, EACCES, etc.)
158
+ // These are safe to log and much more useful than the constructor name.
159
+ const errnoCode = getErrnoCode(error)
160
+ if (typeof errnoCode === 'string') {
161
+ return `Error:${errnoCode}`
162
+ }
163
+ // ShellError, ImageSizeError, etc. have stable `.name` properties
164
+ // that survive minification (they're set in the constructor).
165
+ if (error.name && error.name !== 'Error' && error.name.length > 3) {
166
+ return error.name.slice(0, 60)
167
+ }
168
+ return 'Error'
169
+ }
170
+ return 'UnknownError'
171
+ }
172
+
173
+ /**
174
+ * Map a rule's origin to the documented OTel `source` vocabulary, matching
175
+ * the interactive path's semantics (permissionLogging.ts:81): session-scoped
176
+ * grants are temporary, on-disk grants are permanent, and user-authored
177
+ * denies are user_reject regardless of persistence. Everything the user
178
+ * didn't write (cliArg, policySettings, projectSettings, flagSettings) is
179
+ * config.
180
+ */
181
+ function ruleSourceToOTelSource(
182
+ ruleSource: string,
183
+ behavior: 'allow' | 'deny',
184
+ ): string {
185
+ switch (ruleSource) {
186
+ case 'session':
187
+ return behavior === 'allow' ? 'user_temporary' : 'user_reject'
188
+ case 'localSettings':
189
+ case 'userSettings':
190
+ return behavior === 'allow' ? 'user_permanent' : 'user_reject'
191
+ default:
192
+ return 'config'
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Map a PermissionDecisionReason to the OTel `source` label for the
198
+ * non-interactive tool_decision path, staying within the documented
199
+ * vocabulary (config, hook, user_permanent, user_temporary, user_reject).
200
+ *
201
+ * For permissionPromptTool, the SDK host may set decisionClassification on
202
+ * the PermissionResult to tell us exactly what happened (once vs always vs
203
+ * cache hit — the host knows, we can't tell from {behavior:'allow'} alone).
204
+ * Without it, we fall back conservatively: allow → user_temporary,
205
+ * deny → user_reject.
206
+ */
207
+ function decisionReasonToOTelSource(
208
+ reason: PermissionDecisionReason | undefined,
209
+ behavior: 'allow' | 'deny',
210
+ ): string {
211
+ if (!reason) {
212
+ return 'config'
213
+ }
214
+ switch (reason.type) {
215
+ case 'permissionPromptTool': {
216
+ // toolResult is typed `unknown` on PermissionDecisionReason but carries
217
+ // the parsed Output from PermissionPromptToolResultSchema. Narrow at
218
+ // runtime rather than widen the cross-file type.
219
+ const toolResult = reason.toolResult as
220
+ | { decisionClassification?: string }
221
+ | undefined
222
+ const classified = toolResult?.decisionClassification
223
+ if (
224
+ classified === 'user_temporary' ||
225
+ classified === 'user_permanent' ||
226
+ classified === 'user_reject'
227
+ ) {
228
+ return classified
229
+ }
230
+ return behavior === 'allow' ? 'user_temporary' : 'user_reject'
231
+ }
232
+ case 'rule':
233
+ return ruleSourceToOTelSource(reason.rule.source, behavior)
234
+ case 'hook':
235
+ return 'hook'
236
+ case 'mode':
237
+ case 'classifier':
238
+ case 'subcommandResults':
239
+ case 'asyncAgent':
240
+ case 'sandboxOverride':
241
+ case 'workingDir':
242
+ case 'safetyCheck':
243
+ case 'other':
244
+ return 'config'
245
+ default: {
246
+ const _exhaustive: never = reason
247
+ return 'config'
248
+ }
249
+ }
250
+ }
251
+
252
+ function getNextImagePasteId(messages: Message[]): number {
253
+ let maxId = 0
254
+ for (const message of messages) {
255
+ if (message.type === 'user' && message.imagePasteIds) {
256
+ for (const id of message.imagePasteIds) {
257
+ if (id > maxId) maxId = id
258
+ }
259
+ }
260
+ }
261
+ return maxId + 1
262
+ }
263
+
264
+ export type MessageUpdateLazy<M extends Message = Message> = {
265
+ message: M
266
+ contextModifier?: {
267
+ toolUseID: string
268
+ modifyContext: (context: ToolUseContext) => ToolUseContext
269
+ }
270
+ }
271
+
272
+ export type McpServerType =
273
+ | 'stdio'
274
+ | 'sse'
275
+ | 'http'
276
+ | 'ws'
277
+ | 'sdk'
278
+ | 'sse-ide'
279
+ | 'ws-ide'
280
+ | 'claudeai-proxy'
281
+ | undefined
282
+
283
+ function findMcpServerConnection(
284
+ toolName: string,
285
+ mcpClients: MCPServerConnection[],
286
+ ): MCPServerConnection | undefined {
287
+ if (!toolName.startsWith('mcp__')) {
288
+ return undefined
289
+ }
290
+
291
+ const mcpInfo = mcpInfoFromString(toolName)
292
+ if (!mcpInfo) {
293
+ return undefined
294
+ }
295
+
296
+ // mcpInfo.serverName is normalized (e.g., "claude_ai_Slack"), but client.name
297
+ // is the original name (e.g., "claude.ai Slack"). Normalize both for comparison.
298
+ return mcpClients.find(
299
+ client => normalizeNameForMCP(client.name) === mcpInfo.serverName,
300
+ )
301
+ }
302
+
303
+ /**
304
+ * Extracts the MCP server transport type from a tool name.
305
+ * Returns the server type (stdio, sse, http, ws, sdk, etc.) for MCP tools,
306
+ * or undefined for built-in tools.
307
+ */
308
+ function getMcpServerType(
309
+ toolName: string,
310
+ mcpClients: MCPServerConnection[],
311
+ ): McpServerType {
312
+ const serverConnection = findMcpServerConnection(toolName, mcpClients)
313
+
314
+ if (serverConnection?.type === 'connected') {
315
+ // Handle stdio configs where type field is optional (defaults to 'stdio')
316
+ return serverConnection.config.type ?? 'stdio'
317
+ }
318
+
319
+ return undefined
320
+ }
321
+
322
+ /**
323
+ * Extracts the MCP server base URL for a tool by looking up its server connection.
324
+ * Returns undefined for stdio servers, built-in tools, or if the server is not connected.
325
+ */
326
+ function getMcpServerBaseUrlFromToolName(
327
+ toolName: string,
328
+ mcpClients: MCPServerConnection[],
329
+ ): string | undefined {
330
+ const serverConnection = findMcpServerConnection(toolName, mcpClients)
331
+ if (serverConnection?.type !== 'connected') {
332
+ return undefined
333
+ }
334
+ return getLoggingSafeMcpBaseUrl(serverConnection.config)
335
+ }
336
+
337
+ export async function* runToolUse(
338
+ toolUse: ToolUseBlock,
339
+ assistantMessage: AssistantMessage,
340
+ canUseTool: CanUseToolFn,
341
+ toolUseContext: ToolUseContext,
342
+ ): AsyncGenerator<MessageUpdateLazy, void> {
343
+ const toolName = toolUse.name
344
+ // First try to find in the available tools (what the model sees)
345
+ let tool = findToolByName(toolUseContext.options.tools, toolName)
346
+
347
+ // If not found, check if it's a deprecated tool being called by alias
348
+ // (e.g., old transcripts calling "KillShell" which is now an alias for "TaskStop")
349
+ // Only fall back for tools where the name matches an alias, not the primary name
350
+ if (!tool) {
351
+ const fallbackTool = findToolByName(getAllBaseTools(), toolName)
352
+ // Only use fallback if the tool was found via alias (deprecated name)
353
+ if (fallbackTool && fallbackTool.aliases?.includes(toolName)) {
354
+ tool = fallbackTool
355
+ }
356
+ }
357
+ const messageId = assistantMessage.message.id
358
+ const requestId = assistantMessage.requestId
359
+ const mcpServerType = getMcpServerType(
360
+ toolName,
361
+ toolUseContext.options.mcpClients,
362
+ )
363
+ const mcpServerBaseUrl = getMcpServerBaseUrlFromToolName(
364
+ toolName,
365
+ toolUseContext.options.mcpClients,
366
+ )
367
+
368
+ // Check if the tool exists
369
+ if (!tool) {
370
+ const sanitizedToolName = sanitizeToolNameForAnalytics(toolName)
371
+ logForDebugging(`Unknown tool ${toolName}: ${toolUse.id}`)
372
+ logEvent('tengu_tool_use_error', {
373
+ error:
374
+ `No such tool available: ${sanitizedToolName}` as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
375
+ toolName: sanitizedToolName,
376
+ toolUseID:
377
+ toolUse.id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
378
+ isMcp: toolName.startsWith('mcp__'),
379
+ queryChainId: toolUseContext.queryTracking
380
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
381
+ queryDepth: toolUseContext.queryTracking?.depth,
382
+ ...(mcpServerType && {
383
+ mcpServerType:
384
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
385
+ }),
386
+ ...(mcpServerBaseUrl && {
387
+ mcpServerBaseUrl:
388
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
389
+ }),
390
+ ...(requestId && {
391
+ requestId:
392
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
393
+ }),
394
+ ...mcpToolDetailsForAnalytics(toolName, mcpServerType, mcpServerBaseUrl),
395
+ })
396
+ yield {
397
+ message: createUserMessage({
398
+ content: [
399
+ {
400
+ type: 'tool_result',
401
+ content: `<tool_use_error>Error: No such tool available: ${toolName}</tool_use_error>`,
402
+ is_error: true,
403
+ tool_use_id: toolUse.id,
404
+ },
405
+ ],
406
+ toolUseResult: `Error: No such tool available: ${toolName}`,
407
+ sourceToolAssistantUUID: assistantMessage.uuid,
408
+ }),
409
+ }
410
+ return
411
+ }
412
+
413
+ const toolInput = toolUse.input as { [key: string]: string }
414
+ try {
415
+ if (toolUseContext.abortController.signal.aborted) {
416
+ logEvent('tengu_tool_use_cancelled', {
417
+ toolName: sanitizeToolNameForAnalytics(tool.name),
418
+ toolUseID:
419
+ toolUse.id as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
420
+ isMcp: tool.isMcp ?? false,
421
+
422
+ queryChainId: toolUseContext.queryTracking
423
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
424
+ queryDepth: toolUseContext.queryTracking?.depth,
425
+ ...(mcpServerType && {
426
+ mcpServerType:
427
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
428
+ }),
429
+ ...(mcpServerBaseUrl && {
430
+ mcpServerBaseUrl:
431
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
432
+ }),
433
+ ...(requestId && {
434
+ requestId:
435
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
436
+ }),
437
+ ...mcpToolDetailsForAnalytics(
438
+ tool.name,
439
+ mcpServerType,
440
+ mcpServerBaseUrl,
441
+ ),
442
+ })
443
+ const content = createToolResultStopMessage(toolUse.id)
444
+ content.content = withMemoryCorrectionHint(CANCEL_MESSAGE)
445
+ yield {
446
+ message: createUserMessage({
447
+ content: [content],
448
+ toolUseResult: CANCEL_MESSAGE,
449
+ sourceToolAssistantUUID: assistantMessage.uuid,
450
+ }),
451
+ }
452
+ return
453
+ }
454
+
455
+ for await (const update of streamedCheckPermissionsAndCallTool(
456
+ tool,
457
+ toolUse.id,
458
+ toolInput,
459
+ toolUseContext,
460
+ canUseTool,
461
+ assistantMessage,
462
+ messageId,
463
+ requestId,
464
+ mcpServerType,
465
+ mcpServerBaseUrl,
466
+ )) {
467
+ yield update
468
+ }
469
+ } catch (error) {
470
+ logError(error)
471
+ const errorMessage = error instanceof Error ? error.message : String(error)
472
+ const toolInfo = tool ? ` (${tool.name})` : ''
473
+ const detailedError = `Error calling tool${toolInfo}: ${errorMessage}`
474
+
475
+ yield {
476
+ message: createUserMessage({
477
+ content: [
478
+ {
479
+ type: 'tool_result',
480
+ content: `<tool_use_error>${detailedError}</tool_use_error>`,
481
+ is_error: true,
482
+ tool_use_id: toolUse.id,
483
+ },
484
+ ],
485
+ toolUseResult: detailedError,
486
+ sourceToolAssistantUUID: assistantMessage.uuid,
487
+ }),
488
+ }
489
+ }
490
+ }
491
+
492
+ function streamedCheckPermissionsAndCallTool(
493
+ tool: Tool,
494
+ toolUseID: string,
495
+ input: { [key: string]: boolean | string | number },
496
+ toolUseContext: ToolUseContext,
497
+ canUseTool: CanUseToolFn,
498
+ assistantMessage: AssistantMessage,
499
+ messageId: string,
500
+ requestId: string | undefined,
501
+ mcpServerType: McpServerType,
502
+ mcpServerBaseUrl: ReturnType<typeof getLoggingSafeMcpBaseUrl>,
503
+ ): AsyncIterable<MessageUpdateLazy> {
504
+ // This is a bit of a hack to get progress events and final results
505
+ // into a single async iterable.
506
+ //
507
+ // Ideally the progress reporting and tool call reporting would
508
+ // be via separate mechanisms.
509
+ const stream = new Stream<MessageUpdateLazy>()
510
+ checkPermissionsAndCallTool(
511
+ tool,
512
+ toolUseID,
513
+ input,
514
+ toolUseContext,
515
+ canUseTool,
516
+ assistantMessage,
517
+ messageId,
518
+ requestId,
519
+ mcpServerType,
520
+ mcpServerBaseUrl,
521
+ progress => {
522
+ logEvent('tengu_tool_use_progress', {
523
+ messageID:
524
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
525
+ toolName: sanitizeToolNameForAnalytics(tool.name),
526
+ isMcp: tool.isMcp ?? false,
527
+
528
+ queryChainId: toolUseContext.queryTracking
529
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
530
+ queryDepth: toolUseContext.queryTracking?.depth,
531
+ ...(mcpServerType && {
532
+ mcpServerType:
533
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
534
+ }),
535
+ ...(mcpServerBaseUrl && {
536
+ mcpServerBaseUrl:
537
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
538
+ }),
539
+ ...(requestId && {
540
+ requestId:
541
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
542
+ }),
543
+ ...mcpToolDetailsForAnalytics(
544
+ tool.name,
545
+ mcpServerType,
546
+ mcpServerBaseUrl,
547
+ ),
548
+ })
549
+ stream.enqueue({
550
+ message: createProgressMessage({
551
+ toolUseID: progress.toolUseID,
552
+ parentToolUseID: toolUseID,
553
+ data: progress.data,
554
+ }),
555
+ })
556
+ },
557
+ )
558
+ .then(results => {
559
+ for (const result of results) {
560
+ stream.enqueue(result)
561
+ }
562
+ })
563
+ .catch(error => {
564
+ stream.error(error)
565
+ })
566
+ .finally(() => {
567
+ stream.done()
568
+ })
569
+ return stream
570
+ }
571
+
572
+ /**
573
+ * Appended to Zod errors when a deferred tool wasn't in the discovered-tool
574
+ * set — re-runs the claude.ts schema-filter scan dispatch-time to detect the
575
+ * mismatch. The raw Zod error ("expected array, got string") doesn't tell the
576
+ * model to re-load the tool; this hint does. Null if the schema was sent.
577
+ */
578
+ export function buildSchemaNotSentHint(
579
+ tool: Tool,
580
+ messages: Message[],
581
+ tools: readonly { name: string }[],
582
+ ): string | null {
583
+ // Optimistic gating — reconstructing claude.ts's full useToolSearch
584
+ // computation is fragile. These two gates prevent pointing at a ToolSearch
585
+ // that isn't callable; occasional misfires (Haiku, tst-auto below threshold)
586
+ // cost one extra round-trip on an already-failing path.
587
+ if (!isToolSearchEnabledOptimistic()) return null
588
+ if (!isToolSearchToolAvailable(tools)) return null
589
+ if (!isDeferredTool(tool)) return null
590
+ const discovered = extractDiscoveredToolNames(messages)
591
+ if (discovered.has(tool.name)) return null
592
+ return (
593
+ `\n\nThis tool's schema was not sent to the API — it was not in the discovered-tool set derived from message history. ` +
594
+ `Without the schema in your prompt, typed parameters (arrays, numbers, booleans) get emitted as strings and the client-side parser rejects them. ` +
595
+ `Load the tool first: call ${TOOL_SEARCH_TOOL_NAME} with query "select:${tool.name}", then retry this call.`
596
+ )
597
+ }
598
+
599
+ async function checkPermissionsAndCallTool(
600
+ tool: Tool,
601
+ toolUseID: string,
602
+ input: { [key: string]: boolean | string | number },
603
+ toolUseContext: ToolUseContext,
604
+ canUseTool: CanUseToolFn,
605
+ assistantMessage: AssistantMessage,
606
+ messageId: string,
607
+ requestId: string | undefined,
608
+ mcpServerType: McpServerType,
609
+ mcpServerBaseUrl: ReturnType<typeof getLoggingSafeMcpBaseUrl>,
610
+ onToolProgress: (
611
+ progress: ToolProgress<ToolProgressData> | ProgressMessage<HookProgress>,
612
+ ) => void,
613
+ ): Promise<MessageUpdateLazy[]> {
614
+ // Validate input types with zod (surprisingly, the model is not great at generating valid input)
615
+ const parsedInput = tool.inputSchema.safeParse(input)
616
+ if (!parsedInput.success) {
617
+ let errorContent = formatZodValidationError(tool.name, parsedInput.error)
618
+
619
+ const schemaHint = buildSchemaNotSentHint(
620
+ tool,
621
+ toolUseContext.messages,
622
+ toolUseContext.options.tools,
623
+ )
624
+ if (schemaHint) {
625
+ logEvent('tengu_deferred_tool_schema_not_sent', {
626
+ toolName: sanitizeToolNameForAnalytics(tool.name),
627
+ isMcp: tool.isMcp ?? false,
628
+ })
629
+ errorContent += schemaHint
630
+ }
631
+
632
+ logForDebugging(
633
+ `${tool.name} tool input error: ${errorContent.slice(0, 200)}`,
634
+ )
635
+ logEvent('tengu_tool_use_error', {
636
+ error:
637
+ 'InputValidationError' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
638
+ errorDetails: errorContent.slice(
639
+ 0,
640
+ 2000,
641
+ ) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
642
+ messageID:
643
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
644
+ toolName: sanitizeToolNameForAnalytics(tool.name),
645
+ isMcp: tool.isMcp ?? false,
646
+
647
+ queryChainId: toolUseContext.queryTracking
648
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
649
+ queryDepth: toolUseContext.queryTracking?.depth,
650
+ ...(mcpServerType && {
651
+ mcpServerType:
652
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
653
+ }),
654
+ ...(mcpServerBaseUrl && {
655
+ mcpServerBaseUrl:
656
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
657
+ }),
658
+ ...(requestId && {
659
+ requestId:
660
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
661
+ }),
662
+ ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl),
663
+ })
664
+ return [
665
+ {
666
+ message: createUserMessage({
667
+ content: [
668
+ {
669
+ type: 'tool_result',
670
+ content: `<tool_use_error>InputValidationError: ${errorContent}</tool_use_error>`,
671
+ is_error: true,
672
+ tool_use_id: toolUseID,
673
+ },
674
+ ],
675
+ toolUseResult: `InputValidationError: ${parsedInput.error.message}`,
676
+ sourceToolAssistantUUID: assistantMessage.uuid,
677
+ }),
678
+ },
679
+ ]
680
+ }
681
+
682
+ // Validate input values. Each tool has its own validation logic
683
+ const isValidCall = await tool.validateInput?.(
684
+ parsedInput.data,
685
+ toolUseContext,
686
+ )
687
+ if (isValidCall?.result === false) {
688
+ logForDebugging(
689
+ `${tool.name} tool validation error: ${isValidCall.message?.slice(0, 200)}`,
690
+ )
691
+ logEvent('tengu_tool_use_error', {
692
+ messageID:
693
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
694
+ toolName: sanitizeToolNameForAnalytics(tool.name),
695
+ error:
696
+ isValidCall.message as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
697
+ errorCode: isValidCall.errorCode,
698
+ isMcp: tool.isMcp ?? false,
699
+
700
+ queryChainId: toolUseContext.queryTracking
701
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
702
+ queryDepth: toolUseContext.queryTracking?.depth,
703
+ ...(mcpServerType && {
704
+ mcpServerType:
705
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
706
+ }),
707
+ ...(mcpServerBaseUrl && {
708
+ mcpServerBaseUrl:
709
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
710
+ }),
711
+ ...(requestId && {
712
+ requestId:
713
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
714
+ }),
715
+ ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl),
716
+ })
717
+ return [
718
+ {
719
+ message: createUserMessage({
720
+ content: [
721
+ {
722
+ type: 'tool_result',
723
+ content: `<tool_use_error>${isValidCall.message}</tool_use_error>`,
724
+ is_error: true,
725
+ tool_use_id: toolUseID,
726
+ },
727
+ ],
728
+ toolUseResult: `Error: ${isValidCall.message}`,
729
+ sourceToolAssistantUUID: assistantMessage.uuid,
730
+ }),
731
+ },
732
+ ]
733
+ }
734
+ // Speculatively start the bash allow classifier check early so it runs in
735
+ // parallel with pre-tool hooks, deny/ask classifiers, and permission dialog
736
+ // setup. The UI indicator (setClassifierChecking) is NOT set here — it's
737
+ // set in interactiveHandler.ts only when the permission check returns `ask`
738
+ // with a pendingClassifierCheck. This avoids flashing "classifier running"
739
+ // for commands that auto-allow via prefix rules.
740
+ if (
741
+ tool.name === BASH_TOOL_NAME &&
742
+ parsedInput.data &&
743
+ 'command' in parsedInput.data
744
+ ) {
745
+ const appState = toolUseContext.getAppState()
746
+ startSpeculativeClassifierCheck(
747
+ (parsedInput.data as BashToolInput).command,
748
+ appState.toolPermissionContext,
749
+ toolUseContext.abortController.signal,
750
+ toolUseContext.options.isNonInteractiveSession,
751
+ )
752
+ }
753
+
754
+ const resultingMessages = []
755
+
756
+ // Defense-in-depth: strip _simulatedSedEdit from model-provided Bash input.
757
+ // This field is internal-only — it must only be injected by the permission
758
+ // system (SedEditPermissionRequest) after user approval. If the model supplies
759
+ // it, the schema's strictObject should already reject it, but we strip here
760
+ // as a safeguard against future regressions.
761
+ let processedInput = parsedInput.data
762
+ if (
763
+ tool.name === BASH_TOOL_NAME &&
764
+ processedInput &&
765
+ typeof processedInput === 'object' &&
766
+ '_simulatedSedEdit' in processedInput
767
+ ) {
768
+ const { _simulatedSedEdit: _, ...rest } =
769
+ processedInput as typeof processedInput & {
770
+ _simulatedSedEdit: unknown
771
+ }
772
+ processedInput = rest as typeof processedInput
773
+ }
774
+
775
+ // Backfill legacy/derived fields on a shallow clone so hooks/canUseTool see
776
+ // them without affecting tool.call(). SendMessageTool adds fields; file
777
+ // tools overwrite file_path with expandPath — that mutation must not reach
778
+ // call() because tool results embed the input path verbatim (e.g. "File
779
+ // created successfully at: {path}"), and changing it alters the serialized
780
+ // transcript and VCR fixture hashes. If a hook/permission later returns a
781
+ // fresh updatedInput, callInput converges on it below — that replacement
782
+ // is intentional and should reach call().
783
+ let callInput = processedInput
784
+ const backfilledClone =
785
+ tool.backfillObservableInput &&
786
+ typeof processedInput === 'object' &&
787
+ processedInput !== null
788
+ ? ({ ...processedInput } as typeof processedInput)
789
+ : null
790
+ if (backfilledClone) {
791
+ tool.backfillObservableInput!(backfilledClone as Record<string, unknown>)
792
+ processedInput = backfilledClone
793
+ }
794
+
795
+ let shouldPreventContinuation = false
796
+ let stopReason: string | undefined
797
+ let hookPermissionResult: PermissionResult | undefined
798
+ const preToolHookInfos: StopHookInfo[] = []
799
+ const preToolHookStart = Date.now()
800
+ for await (const result of runPreToolUseHooks(
801
+ toolUseContext,
802
+ tool,
803
+ processedInput,
804
+ toolUseID,
805
+ assistantMessage.message.id,
806
+ requestId,
807
+ mcpServerType,
808
+ mcpServerBaseUrl,
809
+ )) {
810
+ switch (result.type) {
811
+ case 'message':
812
+ if (result.message.message.type === 'progress') {
813
+ onToolProgress(result.message.message)
814
+ } else {
815
+ resultingMessages.push(result.message)
816
+ const att = result.message.message.attachment
817
+ if (
818
+ att &&
819
+ 'command' in att &&
820
+ att.command !== undefined &&
821
+ 'durationMs' in att &&
822
+ att.durationMs !== undefined
823
+ ) {
824
+ preToolHookInfos.push({
825
+ command: att.command,
826
+ durationMs: att.durationMs,
827
+ })
828
+ }
829
+ }
830
+ break
831
+ case 'hookPermissionResult':
832
+ hookPermissionResult = result.hookPermissionResult
833
+ break
834
+ case 'hookUpdatedInput':
835
+ // Hook provided updatedInput without making a permission decision (passthrough)
836
+ // Update processedInput so it's used in the normal permission flow
837
+ processedInput = result.updatedInput
838
+ break
839
+ case 'preventContinuation':
840
+ shouldPreventContinuation = result.shouldPreventContinuation
841
+ break
842
+ case 'stopReason':
843
+ stopReason = result.stopReason
844
+ break
845
+ case 'additionalContext':
846
+ resultingMessages.push(result.message)
847
+ break
848
+ case 'stop':
849
+ getStatsStore()?.observe(
850
+ 'pre_tool_hook_duration_ms',
851
+ Date.now() - preToolHookStart,
852
+ )
853
+ resultingMessages.push({
854
+ message: createUserMessage({
855
+ content: [createToolResultStopMessage(toolUseID)],
856
+ toolUseResult: `Error: ${stopReason}`,
857
+ sourceToolAssistantUUID: assistantMessage.uuid,
858
+ }),
859
+ })
860
+ return resultingMessages
861
+ }
862
+ }
863
+ const preToolHookDurationMs = Date.now() - preToolHookStart
864
+ getStatsStore()?.observe('pre_tool_hook_duration_ms', preToolHookDurationMs)
865
+ if (preToolHookDurationMs >= SLOW_PHASE_LOG_THRESHOLD_MS) {
866
+ logForDebugging(
867
+ `Slow PreToolUse hooks: ${preToolHookDurationMs}ms for ${tool.name} (${preToolHookInfos.length} hooks)`,
868
+ { level: 'info' },
869
+ )
870
+ }
871
+
872
+ // Emit PreToolUse summary immediately so it's visible while the tool executes.
873
+ // Use wall-clock time (not sum of individual durations) since hooks run in parallel.
874
+ if (process.env.USER_TYPE === 'ant' && preToolHookInfos.length > 0) {
875
+ if (preToolHookDurationMs > HOOK_TIMING_DISPLAY_THRESHOLD_MS) {
876
+ resultingMessages.push({
877
+ message: createStopHookSummaryMessage(
878
+ preToolHookInfos.length,
879
+ preToolHookInfos,
880
+ [],
881
+ false,
882
+ undefined,
883
+ false,
884
+ 'suggestion',
885
+ undefined,
886
+ 'PreToolUse',
887
+ preToolHookDurationMs,
888
+ ),
889
+ })
890
+ }
891
+ }
892
+
893
+ const toolAttributes: Record<string, string | number | boolean> = {}
894
+ if (processedInput && typeof processedInput === 'object') {
895
+ if (tool.name === FILE_READ_TOOL_NAME && 'file_path' in processedInput) {
896
+ toolAttributes.file_path = String(processedInput.file_path)
897
+ } else if (
898
+ (tool.name === FILE_EDIT_TOOL_NAME ||
899
+ tool.name === FILE_WRITE_TOOL_NAME) &&
900
+ 'file_path' in processedInput
901
+ ) {
902
+ toolAttributes.file_path = String(processedInput.file_path)
903
+ } else if (tool.name === BASH_TOOL_NAME && 'command' in processedInput) {
904
+ const bashInput = processedInput as BashToolInput
905
+ toolAttributes.full_command = bashInput.command
906
+ }
907
+ }
908
+
909
+ startToolSpan(
910
+ tool.name,
911
+ toolAttributes,
912
+ isBetaTracingEnabled() ? jsonStringify(processedInput) : undefined,
913
+ )
914
+ startToolBlockedOnUserSpan()
915
+
916
+ // Check whether we have permission to use the tool,
917
+ // and ask the user for permission if we don't
918
+ const permissionMode = toolUseContext.getAppState().toolPermissionContext.mode
919
+ const permissionStart = Date.now()
920
+
921
+ const resolved = await resolveHookPermissionDecision(
922
+ hookPermissionResult,
923
+ tool,
924
+ processedInput,
925
+ toolUseContext,
926
+ canUseTool,
927
+ assistantMessage,
928
+ toolUseID,
929
+ )
930
+ const permissionDecision = resolved.decision
931
+ processedInput = resolved.input
932
+ const permissionDurationMs = Date.now() - permissionStart
933
+ // In auto mode, canUseTool awaits the classifier (side_query) — if that's
934
+ // slow the collapsed view shows "Running…" with no (Ns) tick since
935
+ // bash_progress hasn't started yet. Auto-only: in default mode this timer
936
+ // includes interactive-dialog wait (user think time), which is just noise.
937
+ if (
938
+ permissionDurationMs >= SLOW_PHASE_LOG_THRESHOLD_MS &&
939
+ permissionMode === 'auto'
940
+ ) {
941
+ logForDebugging(
942
+ `Slow permission decision: ${permissionDurationMs}ms for ${tool.name} ` +
943
+ `(mode=${permissionMode}, behavior=${permissionDecision.behavior})`,
944
+ { level: 'info' },
945
+ )
946
+ }
947
+
948
+ // Emit tool_decision OTel event and code-edit counter if the interactive
949
+ // permission path didn't already log it (headless mode bypasses permission
950
+ // logging, so we need to emit both the generic event and the code-edit
951
+ // counter here)
952
+ if (
953
+ permissionDecision.behavior !== 'ask' &&
954
+ !toolUseContext.toolDecisions?.has(toolUseID)
955
+ ) {
956
+ const decision =
957
+ permissionDecision.behavior === 'allow' ? 'accept' : 'reject'
958
+ const source = decisionReasonToOTelSource(
959
+ permissionDecision.decisionReason,
960
+ permissionDecision.behavior,
961
+ )
962
+ void logOTelEvent('tool_decision', {
963
+ decision,
964
+ source,
965
+ tool_name: sanitizeToolNameForAnalytics(tool.name),
966
+ })
967
+
968
+ // Increment code-edit tool decision counter for headless mode
969
+ if (isCodeEditingTool(tool.name)) {
970
+ void buildCodeEditToolAttributes(
971
+ tool,
972
+ processedInput,
973
+ decision,
974
+ source,
975
+ ).then(attributes => getCodeEditToolDecisionCounter()?.add(1, attributes))
976
+ }
977
+ }
978
+
979
+ // Add message if permission was granted/denied by PermissionRequest hook
980
+ if (
981
+ permissionDecision.decisionReason?.type === 'hook' &&
982
+ permissionDecision.decisionReason.hookName === 'PermissionRequest' &&
983
+ permissionDecision.behavior !== 'ask'
984
+ ) {
985
+ resultingMessages.push({
986
+ message: createAttachmentMessage({
987
+ type: 'hook_permission_decision',
988
+ decision: permissionDecision.behavior,
989
+ toolUseID,
990
+ hookEvent: 'PermissionRequest',
991
+ }),
992
+ })
993
+ }
994
+
995
+ if (permissionDecision.behavior !== 'allow') {
996
+ logForDebugging(`${tool.name} tool permission denied`)
997
+ const decisionInfo = toolUseContext.toolDecisions?.get(toolUseID)
998
+ endToolBlockedOnUserSpan('reject', decisionInfo?.source || 'unknown')
999
+ endToolSpan()
1000
+
1001
+ logEvent('tengu_tool_use_can_use_tool_rejected', {
1002
+ messageID:
1003
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1004
+ toolName: sanitizeToolNameForAnalytics(tool.name),
1005
+
1006
+ queryChainId: toolUseContext.queryTracking
1007
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1008
+ queryDepth: toolUseContext.queryTracking?.depth,
1009
+ ...(mcpServerType && {
1010
+ mcpServerType:
1011
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1012
+ }),
1013
+ ...(mcpServerBaseUrl && {
1014
+ mcpServerBaseUrl:
1015
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1016
+ }),
1017
+ ...(requestId && {
1018
+ requestId:
1019
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1020
+ }),
1021
+ ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl),
1022
+ })
1023
+ let errorMessage = permissionDecision.message
1024
+ // Only use generic "Execution stopped" message if we don't have a detailed hook message
1025
+ if (shouldPreventContinuation && !errorMessage) {
1026
+ errorMessage = `Execution stopped by PreToolUse hook${stopReason ? `: ${stopReason}` : ''}`
1027
+ }
1028
+
1029
+ // Build top-level content: tool_result (text-only for is_error compatibility) + images alongside
1030
+ const messageContent: ContentBlockParam[] = [
1031
+ {
1032
+ type: 'tool_result',
1033
+ content: errorMessage,
1034
+ is_error: true,
1035
+ tool_use_id: toolUseID,
1036
+ },
1037
+ ]
1038
+
1039
+ // Add image blocks at top level (not inside tool_result, which rejects non-text with is_error)
1040
+ const rejectContentBlocks =
1041
+ permissionDecision.behavior === 'ask'
1042
+ ? permissionDecision.contentBlocks
1043
+ : undefined
1044
+ if (rejectContentBlocks?.length) {
1045
+ messageContent.push(...rejectContentBlocks)
1046
+ }
1047
+
1048
+ // Generate sequential imagePasteIds so each image renders with a distinct label
1049
+ let rejectImageIds: number[] | undefined
1050
+ if (rejectContentBlocks?.length) {
1051
+ const imageCount = count(
1052
+ rejectContentBlocks,
1053
+ (b: ContentBlockParam) => b.type === 'image',
1054
+ )
1055
+ if (imageCount > 0) {
1056
+ const startId = getNextImagePasteId(toolUseContext.messages)
1057
+ rejectImageIds = Array.from(
1058
+ { length: imageCount },
1059
+ (_, i) => startId + i,
1060
+ )
1061
+ }
1062
+ }
1063
+
1064
+ resultingMessages.push({
1065
+ message: createUserMessage({
1066
+ content: messageContent,
1067
+ imagePasteIds: rejectImageIds,
1068
+ toolUseResult: `Error: ${errorMessage}`,
1069
+ sourceToolAssistantUUID: assistantMessage.uuid,
1070
+ }),
1071
+ })
1072
+
1073
+ // Run PermissionDenied hooks for auto mode classifier denials.
1074
+ // If a hook returns {retry: true}, tell the model it may retry.
1075
+ if (
1076
+ feature('TRANSCRIPT_CLASSIFIER') &&
1077
+ permissionDecision.decisionReason?.type === 'classifier' &&
1078
+ permissionDecision.decisionReason.classifier === 'auto-mode'
1079
+ ) {
1080
+ let hookSaysRetry = false
1081
+ for await (const result of executePermissionDeniedHooks(
1082
+ tool.name,
1083
+ toolUseID,
1084
+ processedInput,
1085
+ permissionDecision.decisionReason.reason ?? 'Permission denied',
1086
+ toolUseContext,
1087
+ permissionMode,
1088
+ toolUseContext.abortController.signal,
1089
+ )) {
1090
+ if (result.retry) hookSaysRetry = true
1091
+ }
1092
+ if (hookSaysRetry) {
1093
+ resultingMessages.push({
1094
+ message: createUserMessage({
1095
+ content:
1096
+ 'The PermissionDenied hook indicated this command is now approved. You may retry it if you would like.',
1097
+ isMeta: true,
1098
+ }),
1099
+ })
1100
+ }
1101
+ }
1102
+
1103
+ return resultingMessages
1104
+ }
1105
+ logEvent('tengu_tool_use_can_use_tool_allowed', {
1106
+ messageID:
1107
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1108
+ toolName: sanitizeToolNameForAnalytics(tool.name),
1109
+
1110
+ queryChainId: toolUseContext.queryTracking
1111
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1112
+ queryDepth: toolUseContext.queryTracking?.depth,
1113
+ ...(mcpServerType && {
1114
+ mcpServerType:
1115
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1116
+ }),
1117
+ ...(mcpServerBaseUrl && {
1118
+ mcpServerBaseUrl:
1119
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1120
+ }),
1121
+ ...(requestId && {
1122
+ requestId:
1123
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1124
+ }),
1125
+ ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl),
1126
+ })
1127
+
1128
+ // Use the updated input from permissions if provided
1129
+ // (Don't overwrite if undefined - processedInput may have been modified by passthrough hooks)
1130
+ if (permissionDecision.updatedInput !== undefined) {
1131
+ processedInput = permissionDecision.updatedInput
1132
+ }
1133
+
1134
+ // Prepare tool parameters for logging in tool_result event.
1135
+ // Gated by OTEL_LOG_TOOL_DETAILS — tool parameters can contain sensitive
1136
+ // content (bash commands, MCP server names, etc.) so they're opt-in only.
1137
+ const telemetryToolInput = extractToolInputForTelemetry(processedInput)
1138
+ let toolParameters: Record<string, unknown> = {}
1139
+ if (isToolDetailsLoggingEnabled()) {
1140
+ if (tool.name === BASH_TOOL_NAME && 'command' in processedInput) {
1141
+ const bashInput = processedInput as BashToolInput
1142
+ const commandParts = bashInput.command.trim().split(/\s+/)
1143
+ const bashCommand = commandParts[0] || ''
1144
+
1145
+ toolParameters = {
1146
+ bash_command: bashCommand,
1147
+ full_command: bashInput.command,
1148
+ ...(bashInput.timeout !== undefined && {
1149
+ timeout: bashInput.timeout,
1150
+ }),
1151
+ ...(bashInput.description !== undefined && {
1152
+ description: bashInput.description,
1153
+ }),
1154
+ ...('dangerouslyDisableSandbox' in bashInput && {
1155
+ dangerouslyDisableSandbox: bashInput.dangerouslyDisableSandbox,
1156
+ }),
1157
+ }
1158
+ }
1159
+
1160
+ const mcpDetails = extractMcpToolDetails(tool.name)
1161
+ if (mcpDetails) {
1162
+ toolParameters.mcp_server_name = mcpDetails.serverName
1163
+ toolParameters.mcp_tool_name = mcpDetails.mcpToolName
1164
+ }
1165
+ const skillName = extractSkillName(tool.name, processedInput)
1166
+ if (skillName) {
1167
+ toolParameters.skill_name = skillName
1168
+ }
1169
+ }
1170
+
1171
+ const decisionInfo = toolUseContext.toolDecisions?.get(toolUseID)
1172
+ endToolBlockedOnUserSpan(
1173
+ decisionInfo?.decision || 'unknown',
1174
+ decisionInfo?.source || 'unknown',
1175
+ )
1176
+ startToolExecutionSpan()
1177
+
1178
+ const startTime = Date.now()
1179
+
1180
+ startSessionActivity('tool_exec')
1181
+ // If processedInput still points at the backfill clone, no hook/permission
1182
+ // replaced it — pass the pre-backfill callInput so call() sees the model's
1183
+ // original field values. Otherwise converge on the hook-supplied input.
1184
+ // Permission/hook flows may return a fresh object derived from the
1185
+ // backfilled clone (e.g. via inputSchema.parse). If its file_path matches
1186
+ // the backfill-expanded value, restore the model's original so the tool
1187
+ // result string embeds the path the model emitted — keeps transcript/VCR
1188
+ // hashes stable. Other hook modifications flow through unchanged.
1189
+ if (
1190
+ backfilledClone &&
1191
+ processedInput !== callInput &&
1192
+ typeof processedInput === 'object' &&
1193
+ processedInput !== null &&
1194
+ 'file_path' in processedInput &&
1195
+ 'file_path' in (callInput as Record<string, unknown>) &&
1196
+ (processedInput as Record<string, unknown>).file_path ===
1197
+ (backfilledClone as Record<string, unknown>).file_path
1198
+ ) {
1199
+ callInput = {
1200
+ ...processedInput,
1201
+ file_path: (callInput as Record<string, unknown>).file_path,
1202
+ } as typeof processedInput
1203
+ } else if (processedInput !== backfilledClone) {
1204
+ callInput = processedInput
1205
+ }
1206
+ try {
1207
+ const result = await tool.call(
1208
+ callInput,
1209
+ {
1210
+ ...toolUseContext,
1211
+ toolUseId: toolUseID,
1212
+ userModified: permissionDecision.userModified ?? false,
1213
+ },
1214
+ canUseTool,
1215
+ assistantMessage,
1216
+ progress => {
1217
+ onToolProgress({
1218
+ toolUseID: progress.toolUseID,
1219
+ data: progress.data,
1220
+ })
1221
+ },
1222
+ )
1223
+ const durationMs = Date.now() - startTime
1224
+ addToToolDuration(durationMs)
1225
+
1226
+ // Log tool content/output as span event if enabled
1227
+ if (result.data && typeof result.data === 'object') {
1228
+ const contentAttributes: Record<string, string | number | boolean> = {}
1229
+
1230
+ // Read tool: capture file_path and content
1231
+ if (tool.name === FILE_READ_TOOL_NAME && 'content' in result.data) {
1232
+ if ('file_path' in processedInput) {
1233
+ contentAttributes.file_path = String(processedInput.file_path)
1234
+ }
1235
+ contentAttributes.content = String(result.data.content)
1236
+ }
1237
+
1238
+ // Edit/Write tools: capture file_path and diff
1239
+ if (
1240
+ (tool.name === FILE_EDIT_TOOL_NAME ||
1241
+ tool.name === FILE_WRITE_TOOL_NAME) &&
1242
+ 'file_path' in processedInput
1243
+ ) {
1244
+ contentAttributes.file_path = String(processedInput.file_path)
1245
+
1246
+ // For Edit, capture the actual changes made
1247
+ if (tool.name === FILE_EDIT_TOOL_NAME && 'diff' in result.data) {
1248
+ contentAttributes.diff = String(result.data.diff)
1249
+ }
1250
+ // For Write, capture the written content
1251
+ if (tool.name === FILE_WRITE_TOOL_NAME && 'content' in processedInput) {
1252
+ contentAttributes.content = String(processedInput.content)
1253
+ }
1254
+ }
1255
+
1256
+ // Bash tool: capture command
1257
+ if (tool.name === BASH_TOOL_NAME && 'command' in processedInput) {
1258
+ const bashInput = processedInput as BashToolInput
1259
+ contentAttributes.bash_command = bashInput.command
1260
+ // Also capture output if available
1261
+ if ('output' in result.data) {
1262
+ contentAttributes.output = String(result.data.output)
1263
+ }
1264
+ }
1265
+
1266
+ if (Object.keys(contentAttributes).length > 0) {
1267
+ addToolContentEvent('tool.output', contentAttributes)
1268
+ }
1269
+ }
1270
+
1271
+ // Capture structured output from tool result if present
1272
+ if (typeof result === 'object' && 'structured_output' in result) {
1273
+ // Store the structured output in an attachment message
1274
+ resultingMessages.push({
1275
+ message: createAttachmentMessage({
1276
+ type: 'structured_output',
1277
+ data: result.structured_output,
1278
+ }),
1279
+ })
1280
+ }
1281
+
1282
+ endToolExecutionSpan({ success: true })
1283
+ // Pass tool result for new_context logging
1284
+ const toolResultStr =
1285
+ result.data && typeof result.data === 'object'
1286
+ ? jsonStringify(result.data)
1287
+ : String(result.data ?? '')
1288
+ endToolSpan(toolResultStr)
1289
+
1290
+ // Map the tool result to API format once and cache it. This block is reused
1291
+ // by addToolResult (skipping the remap) and measured here for analytics.
1292
+ const mappedToolResultBlock = tool.mapToolResultToToolResultBlockParam(
1293
+ result.data,
1294
+ toolUseID,
1295
+ )
1296
+ const mappedContent = mappedToolResultBlock.content
1297
+ const toolResultSizeBytes = !mappedContent
1298
+ ? 0
1299
+ : typeof mappedContent === 'string'
1300
+ ? mappedContent.length
1301
+ : jsonStringify(mappedContent).length
1302
+
1303
+ // Extract file extension for file-related tools
1304
+ let fileExtension: ReturnType<typeof getFileExtensionForAnalytics>
1305
+ if (processedInput && typeof processedInput === 'object') {
1306
+ if (
1307
+ (tool.name === FILE_READ_TOOL_NAME ||
1308
+ tool.name === FILE_EDIT_TOOL_NAME ||
1309
+ tool.name === FILE_WRITE_TOOL_NAME) &&
1310
+ 'file_path' in processedInput
1311
+ ) {
1312
+ fileExtension = getFileExtensionForAnalytics(
1313
+ String(processedInput.file_path),
1314
+ )
1315
+ } else if (
1316
+ tool.name === NOTEBOOK_EDIT_TOOL_NAME &&
1317
+ 'notebook_path' in processedInput
1318
+ ) {
1319
+ fileExtension = getFileExtensionForAnalytics(
1320
+ String(processedInput.notebook_path),
1321
+ )
1322
+ } else if (tool.name === BASH_TOOL_NAME && 'command' in processedInput) {
1323
+ const bashInput = processedInput as BashToolInput
1324
+ fileExtension = getFileExtensionsFromBashCommand(
1325
+ bashInput.command,
1326
+ bashInput._simulatedSedEdit?.filePath,
1327
+ )
1328
+ }
1329
+ }
1330
+
1331
+ logEvent('tengu_tool_use_success', {
1332
+ messageID:
1333
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1334
+ toolName: sanitizeToolNameForAnalytics(tool.name),
1335
+ isMcp: tool.isMcp ?? false,
1336
+ durationMs,
1337
+ preToolHookDurationMs,
1338
+ toolResultSizeBytes,
1339
+ ...(fileExtension !== undefined && { fileExtension }),
1340
+
1341
+ queryChainId: toolUseContext.queryTracking
1342
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1343
+ queryDepth: toolUseContext.queryTracking?.depth,
1344
+ ...(mcpServerType && {
1345
+ mcpServerType:
1346
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1347
+ }),
1348
+ ...(mcpServerBaseUrl && {
1349
+ mcpServerBaseUrl:
1350
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1351
+ }),
1352
+ ...(requestId && {
1353
+ requestId:
1354
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1355
+ }),
1356
+ ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl),
1357
+ })
1358
+
1359
+ // Enrich tool parameters with git commit ID from successful git commit output
1360
+ if (
1361
+ isToolDetailsLoggingEnabled() &&
1362
+ (tool.name === BASH_TOOL_NAME || tool.name === POWERSHELL_TOOL_NAME) &&
1363
+ 'command' in processedInput &&
1364
+ typeof processedInput.command === 'string' &&
1365
+ processedInput.command.match(/\bgit\s+commit\b/) &&
1366
+ result.data &&
1367
+ typeof result.data === 'object' &&
1368
+ 'stdout' in result.data
1369
+ ) {
1370
+ const gitCommitId = parseGitCommitId(String(result.data.stdout))
1371
+ if (gitCommitId) {
1372
+ toolParameters.git_commit_id = gitCommitId
1373
+ }
1374
+ }
1375
+
1376
+ // Log tool result event for OTLP with tool parameters and decision context
1377
+ const mcpServerScope = isMcpTool(tool)
1378
+ ? getMcpServerScopeFromToolName(tool.name)
1379
+ : null
1380
+
1381
+ void logOTelEvent('tool_result', {
1382
+ tool_name: sanitizeToolNameForAnalytics(tool.name),
1383
+ success: 'true',
1384
+ duration_ms: String(durationMs),
1385
+ ...(Object.keys(toolParameters).length > 0 && {
1386
+ tool_parameters: jsonStringify(toolParameters),
1387
+ }),
1388
+ ...(telemetryToolInput && { tool_input: telemetryToolInput }),
1389
+ tool_result_size_bytes: String(toolResultSizeBytes),
1390
+ ...(decisionInfo && {
1391
+ decision_source: decisionInfo.source,
1392
+ decision_type: decisionInfo.decision,
1393
+ }),
1394
+ ...(mcpServerScope && { mcp_server_scope: mcpServerScope }),
1395
+ })
1396
+
1397
+ // Run PostToolUse hooks
1398
+ let toolOutput = result.data
1399
+ const hookResults = []
1400
+ const toolContextModifier = result.contextModifier
1401
+ const mcpMeta = result.mcpMeta
1402
+
1403
+ async function addToolResult(
1404
+ toolUseResult: unknown,
1405
+ preMappedBlock?: ToolResultBlockParam,
1406
+ ) {
1407
+ // Use the pre-mapped block when available (non-MCP tools where hooks
1408
+ // don't modify the output), otherwise map from scratch.
1409
+ const toolResultBlock = preMappedBlock
1410
+ ? await processPreMappedToolResultBlock(
1411
+ preMappedBlock,
1412
+ tool.name,
1413
+ tool.maxResultSizeChars,
1414
+ )
1415
+ : await processToolResultBlock(tool, toolUseResult, toolUseID)
1416
+
1417
+ // Build content blocks - tool result first, then optional feedback
1418
+ const contentBlocks: ContentBlockParam[] = [toolResultBlock]
1419
+ // Add accept feedback if user provided feedback when approving
1420
+ // (acceptFeedback only exists on PermissionAllowDecision, which is guaranteed here)
1421
+ if (
1422
+ 'acceptFeedback' in permissionDecision &&
1423
+ permissionDecision.acceptFeedback
1424
+ ) {
1425
+ contentBlocks.push({
1426
+ type: 'text',
1427
+ text: permissionDecision.acceptFeedback,
1428
+ })
1429
+ }
1430
+
1431
+ // Add content blocks (e.g., pasted images) from the permission decision
1432
+ const allowContentBlocks =
1433
+ 'contentBlocks' in permissionDecision
1434
+ ? permissionDecision.contentBlocks
1435
+ : undefined
1436
+ if (allowContentBlocks?.length) {
1437
+ contentBlocks.push(...allowContentBlocks)
1438
+ }
1439
+
1440
+ // Generate sequential imagePasteIds so each image renders with a distinct label
1441
+ let allowImageIds: number[] | undefined
1442
+ if (allowContentBlocks?.length) {
1443
+ const imageCount = count(
1444
+ allowContentBlocks,
1445
+ (b: ContentBlockParam) => b.type === 'image',
1446
+ )
1447
+ if (imageCount > 0) {
1448
+ const startId = getNextImagePasteId(toolUseContext.messages)
1449
+ allowImageIds = Array.from(
1450
+ { length: imageCount },
1451
+ (_, i) => startId + i,
1452
+ )
1453
+ }
1454
+ }
1455
+
1456
+ resultingMessages.push({
1457
+ message: createUserMessage({
1458
+ content: contentBlocks,
1459
+ imagePasteIds: allowImageIds,
1460
+ toolUseResult:
1461
+ toolUseContext.agentId && !toolUseContext.preserveToolUseResults
1462
+ ? undefined
1463
+ : toolUseResult,
1464
+ mcpMeta: toolUseContext.agentId ? undefined : mcpMeta,
1465
+ sourceToolAssistantUUID: assistantMessage.uuid,
1466
+ }),
1467
+ contextModifier: toolContextModifier
1468
+ ? {
1469
+ toolUseID: toolUseID,
1470
+ modifyContext: toolContextModifier,
1471
+ }
1472
+ : undefined,
1473
+ })
1474
+ }
1475
+
1476
+ // TOOD(hackyon): refactor so we don't have different experiences for MCP tools
1477
+ if (!isMcpTool(tool)) {
1478
+ await addToolResult(toolOutput, mappedToolResultBlock)
1479
+ }
1480
+
1481
+ const postToolHookInfos: StopHookInfo[] = []
1482
+ const postToolHookStart = Date.now()
1483
+ for await (const hookResult of runPostToolUseHooks(
1484
+ toolUseContext,
1485
+ tool,
1486
+ toolUseID,
1487
+ assistantMessage.message.id,
1488
+ processedInput,
1489
+ toolOutput,
1490
+ requestId,
1491
+ mcpServerType,
1492
+ mcpServerBaseUrl,
1493
+ )) {
1494
+ if ('updatedMCPToolOutput' in hookResult) {
1495
+ if (isMcpTool(tool)) {
1496
+ toolOutput = hookResult.updatedMCPToolOutput
1497
+ }
1498
+ } else if (isMcpTool(tool)) {
1499
+ hookResults.push(hookResult)
1500
+ if (hookResult.message.type === 'attachment') {
1501
+ const att = hookResult.message.attachment
1502
+ if (
1503
+ 'command' in att &&
1504
+ att.command !== undefined &&
1505
+ 'durationMs' in att &&
1506
+ att.durationMs !== undefined
1507
+ ) {
1508
+ postToolHookInfos.push({
1509
+ command: att.command,
1510
+ durationMs: att.durationMs,
1511
+ })
1512
+ }
1513
+ }
1514
+ } else {
1515
+ resultingMessages.push(hookResult)
1516
+ if (hookResult.message.type === 'attachment') {
1517
+ const att = hookResult.message.attachment
1518
+ if (
1519
+ 'command' in att &&
1520
+ att.command !== undefined &&
1521
+ 'durationMs' in att &&
1522
+ att.durationMs !== undefined
1523
+ ) {
1524
+ postToolHookInfos.push({
1525
+ command: att.command,
1526
+ durationMs: att.durationMs,
1527
+ })
1528
+ }
1529
+ }
1530
+ }
1531
+ }
1532
+ const postToolHookDurationMs = Date.now() - postToolHookStart
1533
+ if (postToolHookDurationMs >= SLOW_PHASE_LOG_THRESHOLD_MS) {
1534
+ logForDebugging(
1535
+ `Slow PostToolUse hooks: ${postToolHookDurationMs}ms for ${tool.name} (${postToolHookInfos.length} hooks)`,
1536
+ { level: 'info' },
1537
+ )
1538
+ }
1539
+
1540
+ if (isMcpTool(tool)) {
1541
+ await addToolResult(toolOutput)
1542
+ }
1543
+
1544
+ // Show PostToolUse hook timing inline below tool result when > 500ms.
1545
+ // Use wall-clock time (not sum of individual durations) since hooks run in parallel.
1546
+ if (process.env.USER_TYPE === 'ant' && postToolHookInfos.length > 0) {
1547
+ if (postToolHookDurationMs > HOOK_TIMING_DISPLAY_THRESHOLD_MS) {
1548
+ resultingMessages.push({
1549
+ message: createStopHookSummaryMessage(
1550
+ postToolHookInfos.length,
1551
+ postToolHookInfos,
1552
+ [],
1553
+ false,
1554
+ undefined,
1555
+ false,
1556
+ 'suggestion',
1557
+ undefined,
1558
+ 'PostToolUse',
1559
+ postToolHookDurationMs,
1560
+ ),
1561
+ })
1562
+ }
1563
+ }
1564
+
1565
+ // If the tool provided new messages, add them to the list to return.
1566
+ if (result.newMessages && result.newMessages.length > 0) {
1567
+ for (const message of result.newMessages) {
1568
+ resultingMessages.push({ message })
1569
+ }
1570
+ }
1571
+ // If hook indicated to prevent continuation after successful execution, yield a stop reason message
1572
+ if (shouldPreventContinuation) {
1573
+ resultingMessages.push({
1574
+ message: createAttachmentMessage({
1575
+ type: 'hook_stopped_continuation',
1576
+ message: stopReason || 'Execution stopped by hook',
1577
+ hookName: `PreToolUse:${tool.name}`,
1578
+ toolUseID: toolUseID,
1579
+ hookEvent: 'PreToolUse',
1580
+ }),
1581
+ })
1582
+ }
1583
+
1584
+ // Yield the remaining hook results after the other messages are sent
1585
+ for (const hookResult of hookResults) {
1586
+ resultingMessages.push(hookResult)
1587
+ }
1588
+ return resultingMessages
1589
+ } catch (error) {
1590
+ const durationMs = Date.now() - startTime
1591
+ addToToolDuration(durationMs)
1592
+
1593
+ endToolExecutionSpan({
1594
+ success: false,
1595
+ error: errorMessage(error),
1596
+ })
1597
+ endToolSpan()
1598
+
1599
+ // Handle MCP auth errors by updating the client status to 'needs-auth'
1600
+ // This updates the /mcp display to show the server needs re-authorization
1601
+ if (error instanceof McpAuthError) {
1602
+ toolUseContext.setAppState(prevState => {
1603
+ const serverName = error.serverName
1604
+ const existingClientIndex = prevState.mcp.clients.findIndex(
1605
+ c => c.name === serverName,
1606
+ )
1607
+ if (existingClientIndex === -1) {
1608
+ return prevState
1609
+ }
1610
+ const existingClient = prevState.mcp.clients[existingClientIndex]
1611
+ // Only update if client was connected (don't overwrite other states)
1612
+ if (!existingClient || existingClient.type !== 'connected') {
1613
+ return prevState
1614
+ }
1615
+ const updatedClients = [...prevState.mcp.clients]
1616
+ updatedClients[existingClientIndex] = {
1617
+ name: serverName,
1618
+ type: 'needs-auth' as const,
1619
+ config: existingClient.config,
1620
+ }
1621
+ return {
1622
+ ...prevState,
1623
+ mcp: {
1624
+ ...prevState.mcp,
1625
+ clients: updatedClients,
1626
+ },
1627
+ }
1628
+ })
1629
+ }
1630
+
1631
+ if (!(error instanceof AbortError)) {
1632
+ const errorMsg = errorMessage(error)
1633
+ logForDebugging(
1634
+ `${tool.name} tool error (${durationMs}ms): ${errorMsg.slice(0, 200)}`,
1635
+ )
1636
+ if (!(error instanceof ShellError)) {
1637
+ logError(error)
1638
+ }
1639
+ logEvent('tengu_tool_use_error', {
1640
+ messageID:
1641
+ messageId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1642
+ toolName: sanitizeToolNameForAnalytics(tool.name),
1643
+ error: classifyToolError(
1644
+ error,
1645
+ ) as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1646
+ isMcp: tool.isMcp ?? false,
1647
+
1648
+ queryChainId: toolUseContext.queryTracking
1649
+ ?.chainId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1650
+ queryDepth: toolUseContext.queryTracking?.depth,
1651
+ ...(mcpServerType && {
1652
+ mcpServerType:
1653
+ mcpServerType as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1654
+ }),
1655
+ ...(mcpServerBaseUrl && {
1656
+ mcpServerBaseUrl:
1657
+ mcpServerBaseUrl as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1658
+ }),
1659
+ ...(requestId && {
1660
+ requestId:
1661
+ requestId as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1662
+ }),
1663
+ ...mcpToolDetailsForAnalytics(
1664
+ tool.name,
1665
+ mcpServerType,
1666
+ mcpServerBaseUrl,
1667
+ ),
1668
+ })
1669
+ // Log tool result error event for OTLP with tool parameters and decision context
1670
+ const mcpServerScope = isMcpTool(tool)
1671
+ ? getMcpServerScopeFromToolName(tool.name)
1672
+ : null
1673
+
1674
+ void logOTelEvent('tool_result', {
1675
+ tool_name: sanitizeToolNameForAnalytics(tool.name),
1676
+ use_id: toolUseID,
1677
+ success: 'false',
1678
+ duration_ms: String(durationMs),
1679
+ error: errorMessage(error),
1680
+ ...(Object.keys(toolParameters).length > 0 && {
1681
+ tool_parameters: jsonStringify(toolParameters),
1682
+ }),
1683
+ ...(telemetryToolInput && { tool_input: telemetryToolInput }),
1684
+ ...(decisionInfo && {
1685
+ decision_source: decisionInfo.source,
1686
+ decision_type: decisionInfo.decision,
1687
+ }),
1688
+ ...(mcpServerScope && { mcp_server_scope: mcpServerScope }),
1689
+ })
1690
+ }
1691
+ const content = formatError(error)
1692
+
1693
+ // Determine if this was a user interrupt
1694
+ const isInterrupt = error instanceof AbortError
1695
+
1696
+ // Run PostToolUseFailure hooks
1697
+ const hookMessages: MessageUpdateLazy<
1698
+ AttachmentMessage | ProgressMessage<HookProgress>
1699
+ >[] = []
1700
+ for await (const hookResult of runPostToolUseFailureHooks(
1701
+ toolUseContext,
1702
+ tool,
1703
+ toolUseID,
1704
+ messageId,
1705
+ processedInput,
1706
+ content,
1707
+ isInterrupt,
1708
+ requestId,
1709
+ mcpServerType,
1710
+ mcpServerBaseUrl,
1711
+ )) {
1712
+ hookMessages.push(hookResult)
1713
+ }
1714
+
1715
+ return [
1716
+ {
1717
+ message: createUserMessage({
1718
+ content: [
1719
+ {
1720
+ type: 'tool_result',
1721
+ content,
1722
+ is_error: true,
1723
+ tool_use_id: toolUseID,
1724
+ },
1725
+ ],
1726
+ toolUseResult: `Error: ${content}`,
1727
+ mcpMeta: toolUseContext.agentId
1728
+ ? undefined
1729
+ : error instanceof
1730
+ McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS
1731
+ ? error.mcpMeta
1732
+ : undefined,
1733
+ sourceToolAssistantUUID: assistantMessage.uuid,
1734
+ }),
1735
+ },
1736
+ ...hookMessages,
1737
+ ]
1738
+ } finally {
1739
+ stopSessionActivity('tool_exec')
1740
+ // Clean up decision info after logging
1741
+ if (decisionInfo) {
1742
+ toolUseContext.toolDecisions?.delete(toolUseID)
1743
+ }
1744
+ }
1745
+ }