yzcode-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1782) hide show
  1. package/QueryEngine.ts +1295 -0
  2. package/Task.ts +125 -0
  3. package/Tool.ts +792 -0
  4. package/bin/yzcode-init.js +31 -0
  5. package/bin/yzcode.js +35 -0
  6. package/cli/exit.ts +31 -0
  7. package/cli/handlers/agents.ts +70 -0
  8. package/cli/handlers/auth.ts +330 -0
  9. package/cli/handlers/autoMode.ts +170 -0
  10. package/cli/handlers/mcp.tsx +362 -0
  11. package/cli/handlers/plugins.ts +878 -0
  12. package/cli/handlers/util.tsx +110 -0
  13. package/cli/ndjsonSafeStringify.ts +32 -0
  14. package/cli/print.ts +5594 -0
  15. package/cli/remoteIO.ts +255 -0
  16. package/cli/structuredIO.ts +859 -0
  17. package/cli/transports/HybridTransport.ts +282 -0
  18. package/cli/transports/SSETransport.ts +711 -0
  19. package/cli/transports/SerialBatchEventUploader.ts +275 -0
  20. package/cli/transports/WebSocketTransport.ts +800 -0
  21. package/cli/transports/WorkerStateUploader.ts +131 -0
  22. package/cli/transports/ccrClient.ts +998 -0
  23. package/cli/transports/transportUtils.ts +45 -0
  24. package/cli/update.ts +422 -0
  25. package/commands/add-dir/add-dir.tsx +126 -0
  26. package/commands/add-dir/index.ts +11 -0
  27. package/commands/add-dir/validation.ts +110 -0
  28. package/commands/advisor.ts +109 -0
  29. package/commands/agents/agents.tsx +12 -0
  30. package/commands/agents/index.ts +10 -0
  31. package/commands/ant-trace/index.js +1 -0
  32. package/commands/autofix-pr/index.js +1 -0
  33. package/commands/backfill-sessions/index.js +1 -0
  34. package/commands/branch/branch.ts +296 -0
  35. package/commands/branch/index.ts +14 -0
  36. package/commands/break-cache/index.js +1 -0
  37. package/commands/bridge/bridge.tsx +509 -0
  38. package/commands/bridge/index.ts +26 -0
  39. package/commands/bridge-kick.ts +200 -0
  40. package/commands/brief.ts +130 -0
  41. package/commands/btw/btw.tsx +243 -0
  42. package/commands/btw/index.ts +13 -0
  43. package/commands/bughunter/index.js +1 -0
  44. package/commands/chrome/chrome.tsx +285 -0
  45. package/commands/chrome/index.ts +13 -0
  46. package/commands/clear/caches.ts +144 -0
  47. package/commands/clear/clear.ts +7 -0
  48. package/commands/clear/conversation.ts +251 -0
  49. package/commands/clear/index.ts +19 -0
  50. package/commands/color/color.ts +93 -0
  51. package/commands/color/index.ts +16 -0
  52. package/commands/commit-push-pr.ts +158 -0
  53. package/commands/commit.ts +92 -0
  54. package/commands/compact/compact.ts +287 -0
  55. package/commands/compact/index.ts +15 -0
  56. package/commands/config/config.tsx +7 -0
  57. package/commands/config/index.ts +11 -0
  58. package/commands/context/context-noninteractive.ts +325 -0
  59. package/commands/context/context.tsx +64 -0
  60. package/commands/context/index.ts +24 -0
  61. package/commands/copy/copy.tsx +371 -0
  62. package/commands/copy/index.ts +15 -0
  63. package/commands/cost/cost.ts +24 -0
  64. package/commands/cost/index.ts +23 -0
  65. package/commands/createMovedToPluginCommand.ts +65 -0
  66. package/commands/ctx_viz/index.js +1 -0
  67. package/commands/debug-tool-call/index.js +1 -0
  68. package/commands/desktop/desktop.tsx +9 -0
  69. package/commands/desktop/index.ts +26 -0
  70. package/commands/diff/diff.tsx +9 -0
  71. package/commands/diff/index.ts +8 -0
  72. package/commands/doctor/doctor.tsx +7 -0
  73. package/commands/doctor/index.ts +12 -0
  74. package/commands/effort/effort.tsx +183 -0
  75. package/commands/effort/index.ts +13 -0
  76. package/commands/env/index.js +1 -0
  77. package/commands/exit/exit.tsx +33 -0
  78. package/commands/exit/index.ts +12 -0
  79. package/commands/export/export.tsx +91 -0
  80. package/commands/export/index.ts +11 -0
  81. package/commands/extra-usage/extra-usage-core.ts +118 -0
  82. package/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  83. package/commands/extra-usage/extra-usage.tsx +17 -0
  84. package/commands/extra-usage/index.ts +31 -0
  85. package/commands/fast/fast.tsx +269 -0
  86. package/commands/fast/index.ts +26 -0
  87. package/commands/feedback/feedback.tsx +25 -0
  88. package/commands/feedback/index.ts +26 -0
  89. package/commands/files/files.ts +19 -0
  90. package/commands/files/index.ts +12 -0
  91. package/commands/good-claude/index.js +1 -0
  92. package/commands/heapdump/heapdump.ts +17 -0
  93. package/commands/heapdump/index.ts +12 -0
  94. package/commands/help/help.tsx +11 -0
  95. package/commands/help/index.ts +10 -0
  96. package/commands/hooks/hooks.tsx +13 -0
  97. package/commands/hooks/index.ts +11 -0
  98. package/commands/ide/ide.tsx +646 -0
  99. package/commands/ide/index.ts +11 -0
  100. package/commands/init-verifiers.ts +262 -0
  101. package/commands/init.ts +256 -0
  102. package/commands/insights.ts +3200 -0
  103. package/commands/install-github-app/ApiKeyStep.tsx +231 -0
  104. package/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  105. package/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  106. package/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  107. package/commands/install-github-app/CreatingStep.tsx +65 -0
  108. package/commands/install-github-app/ErrorStep.tsx +85 -0
  109. package/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  110. package/commands/install-github-app/InstallAppStep.tsx +94 -0
  111. package/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  112. package/commands/install-github-app/SuccessStep.tsx +96 -0
  113. package/commands/install-github-app/WarningsStep.tsx +73 -0
  114. package/commands/install-github-app/index.ts +13 -0
  115. package/commands/install-github-app/install-github-app.tsx +587 -0
  116. package/commands/install-github-app/setupGitHubActions.ts +325 -0
  117. package/commands/install-slack-app/index.ts +12 -0
  118. package/commands/install-slack-app/install-slack-app.ts +30 -0
  119. package/commands/install.tsx +300 -0
  120. package/commands/issue/index.js +1 -0
  121. package/commands/keybindings/index.ts +13 -0
  122. package/commands/keybindings/keybindings.ts +53 -0
  123. package/commands/login/index.ts +14 -0
  124. package/commands/login/login.tsx +104 -0
  125. package/commands/logout/index.ts +10 -0
  126. package/commands/logout/logout.tsx +82 -0
  127. package/commands/mcp/addCommand.ts +280 -0
  128. package/commands/mcp/index.ts +12 -0
  129. package/commands/mcp/mcp.tsx +85 -0
  130. package/commands/mcp/xaaIdpCommand.ts +266 -0
  131. package/commands/memory/index.ts +10 -0
  132. package/commands/memory/memory.tsx +90 -0
  133. package/commands/mobile/index.ts +11 -0
  134. package/commands/mobile/mobile.tsx +274 -0
  135. package/commands/mock-limits/index.js +1 -0
  136. package/commands/model/index.ts +16 -0
  137. package/commands/model/model.tsx +297 -0
  138. package/commands/oauth-refresh/index.js +1 -0
  139. package/commands/onboarding/index.js +1 -0
  140. package/commands/output-style/index.ts +11 -0
  141. package/commands/output-style/output-style.tsx +7 -0
  142. package/commands/passes/index.ts +22 -0
  143. package/commands/passes/passes.tsx +24 -0
  144. package/commands/perf-issue/index.js +1 -0
  145. package/commands/permissions/index.ts +11 -0
  146. package/commands/permissions/permissions.tsx +10 -0
  147. package/commands/plan/index.ts +11 -0
  148. package/commands/plan/plan.tsx +122 -0
  149. package/commands/plugin/AddMarketplace.tsx +162 -0
  150. package/commands/plugin/BrowseMarketplace.tsx +802 -0
  151. package/commands/plugin/DiscoverPlugins.tsx +781 -0
  152. package/commands/plugin/ManageMarketplaces.tsx +838 -0
  153. package/commands/plugin/ManagePlugins.tsx +2215 -0
  154. package/commands/plugin/PluginErrors.tsx +124 -0
  155. package/commands/plugin/PluginOptionsDialog.tsx +357 -0
  156. package/commands/plugin/PluginOptionsFlow.tsx +135 -0
  157. package/commands/plugin/PluginSettings.tsx +1072 -0
  158. package/commands/plugin/PluginTrustWarning.tsx +32 -0
  159. package/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  160. package/commands/plugin/ValidatePlugin.tsx +98 -0
  161. package/commands/plugin/index.tsx +11 -0
  162. package/commands/plugin/parseArgs.ts +103 -0
  163. package/commands/plugin/plugin.tsx +7 -0
  164. package/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  165. package/commands/plugin/usePagination.ts +171 -0
  166. package/commands/pr_comments/index.ts +50 -0
  167. package/commands/privacy-settings/index.ts +14 -0
  168. package/commands/privacy-settings/privacy-settings.tsx +58 -0
  169. package/commands/rate-limit-options/index.ts +19 -0
  170. package/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  171. package/commands/release-notes/index.ts +11 -0
  172. package/commands/release-notes/release-notes.ts +50 -0
  173. package/commands/reload-plugins/index.ts +18 -0
  174. package/commands/reload-plugins/reload-plugins.ts +61 -0
  175. package/commands/remote-env/index.ts +15 -0
  176. package/commands/remote-env/remote-env.tsx +7 -0
  177. package/commands/remote-setup/api.ts +182 -0
  178. package/commands/remote-setup/index.ts +20 -0
  179. package/commands/remote-setup/remote-setup.tsx +187 -0
  180. package/commands/rename/generateSessionName.ts +67 -0
  181. package/commands/rename/index.ts +12 -0
  182. package/commands/rename/rename.ts +87 -0
  183. package/commands/reset-limits/index.js +4 -0
  184. package/commands/resume/index.ts +12 -0
  185. package/commands/resume/resume.tsx +275 -0
  186. package/commands/review/UltrareviewOverageDialog.tsx +96 -0
  187. package/commands/review/reviewRemote.ts +316 -0
  188. package/commands/review/ultrareviewCommand.tsx +58 -0
  189. package/commands/review/ultrareviewEnabled.ts +14 -0
  190. package/commands/review.ts +57 -0
  191. package/commands/rewind/index.ts +13 -0
  192. package/commands/rewind/rewind.ts +13 -0
  193. package/commands/sandbox-toggle/index.ts +50 -0
  194. package/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  195. package/commands/security-review.ts +243 -0
  196. package/commands/session/index.ts +16 -0
  197. package/commands/session/session.tsx +140 -0
  198. package/commands/share/index.js +1 -0
  199. package/commands/skills/index.ts +10 -0
  200. package/commands/skills/skills.tsx +8 -0
  201. package/commands/stats/index.ts +10 -0
  202. package/commands/stats/stats.tsx +7 -0
  203. package/commands/status/index.ts +12 -0
  204. package/commands/status/status.tsx +8 -0
  205. package/commands/statusline.tsx +24 -0
  206. package/commands/stickers/index.ts +11 -0
  207. package/commands/stickers/stickers.ts +16 -0
  208. package/commands/summary/index.js +1 -0
  209. package/commands/tag/index.ts +12 -0
  210. package/commands/tag/tag.tsx +215 -0
  211. package/commands/tasks/index.ts +11 -0
  212. package/commands/tasks/tasks.tsx +8 -0
  213. package/commands/teleport/index.js +1 -0
  214. package/commands/terminalSetup/index.ts +23 -0
  215. package/commands/terminalSetup/terminalSetup.tsx +531 -0
  216. package/commands/theme/index.ts +10 -0
  217. package/commands/theme/theme.tsx +57 -0
  218. package/commands/thinkback/index.ts +13 -0
  219. package/commands/thinkback/thinkback.tsx +554 -0
  220. package/commands/thinkback-play/index.ts +17 -0
  221. package/commands/thinkback-play/thinkback-play.ts +43 -0
  222. package/commands/ultraplan.tsx +471 -0
  223. package/commands/upgrade/index.ts +16 -0
  224. package/commands/upgrade/upgrade.tsx +38 -0
  225. package/commands/usage/index.ts +9 -0
  226. package/commands/usage/usage.tsx +7 -0
  227. package/commands/version.ts +22 -0
  228. package/commands/vim/index.ts +11 -0
  229. package/commands/vim/vim.ts +38 -0
  230. package/commands/voice/index.ts +20 -0
  231. package/commands/voice/voice.ts +150 -0
  232. package/commands.ts +754 -0
  233. package/components/AgentProgressLine.tsx +136 -0
  234. package/components/App.tsx +56 -0
  235. package/components/ApproveApiKey.tsx +123 -0
  236. package/components/AutoModeOptInDialog.tsx +142 -0
  237. package/components/AutoUpdater.tsx +198 -0
  238. package/components/AutoUpdaterWrapper.tsx +91 -0
  239. package/components/AwsAuthStatusBox.tsx +82 -0
  240. package/components/BaseTextInput.tsx +136 -0
  241. package/components/BashModeProgress.tsx +56 -0
  242. package/components/BridgeDialog.tsx +401 -0
  243. package/components/BypassPermissionsModeDialog.tsx +87 -0
  244. package/components/ChannelDowngradeDialog.tsx +102 -0
  245. package/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  246. package/components/ClaudeInChromeOnboarding.tsx +121 -0
  247. package/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  248. package/components/ClickableImageRef.tsx +73 -0
  249. package/components/CompactSummary.tsx +118 -0
  250. package/components/ConfigurableShortcutHint.tsx +57 -0
  251. package/components/ConsoleOAuthFlow.tsx +631 -0
  252. package/components/ContextSuggestions.tsx +47 -0
  253. package/components/ContextVisualization.tsx +489 -0
  254. package/components/CoordinatorAgentStatus.tsx +273 -0
  255. package/components/CostThresholdDialog.tsx +50 -0
  256. package/components/CtrlOToExpand.tsx +51 -0
  257. package/components/CustomSelect/SelectMulti.tsx +213 -0
  258. package/components/CustomSelect/index.ts +3 -0
  259. package/components/CustomSelect/option-map.ts +50 -0
  260. package/components/CustomSelect/select-input-option.tsx +488 -0
  261. package/components/CustomSelect/select-option.tsx +68 -0
  262. package/components/CustomSelect/select.tsx +690 -0
  263. package/components/CustomSelect/use-multi-select-state.ts +414 -0
  264. package/components/CustomSelect/use-select-input.ts +287 -0
  265. package/components/CustomSelect/use-select-navigation.ts +653 -0
  266. package/components/CustomSelect/use-select-state.ts +157 -0
  267. package/components/DesktopHandoff.tsx +193 -0
  268. package/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  269. package/components/DevBar.tsx +49 -0
  270. package/components/DevChannelsDialog.tsx +105 -0
  271. package/components/DiagnosticsDisplay.tsx +95 -0
  272. package/components/EffortCallout.tsx +265 -0
  273. package/components/EffortIndicator.ts +42 -0
  274. package/components/ExitFlow.tsx +48 -0
  275. package/components/ExportDialog.tsx +128 -0
  276. package/components/FallbackToolUseErrorMessage.tsx +116 -0
  277. package/components/FallbackToolUseRejectedMessage.tsx +16 -0
  278. package/components/FastIcon.tsx +46 -0
  279. package/components/Feedback.tsx +592 -0
  280. package/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  281. package/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  282. package/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  283. package/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  284. package/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  285. package/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  286. package/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  287. package/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  288. package/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  289. package/components/FileEditToolDiff.tsx +181 -0
  290. package/components/FileEditToolUpdatedMessage.tsx +124 -0
  291. package/components/FileEditToolUseRejectedMessage.tsx +170 -0
  292. package/components/FilePathLink.tsx +43 -0
  293. package/components/FullscreenLayout.tsx +637 -0
  294. package/components/GlobalSearchDialog.tsx +343 -0
  295. package/components/HelpV2/Commands.tsx +82 -0
  296. package/components/HelpV2/General.tsx +23 -0
  297. package/components/HelpV2/HelpV2.tsx +184 -0
  298. package/components/HighlightedCode/Fallback.tsx +193 -0
  299. package/components/HighlightedCode.tsx +190 -0
  300. package/components/HistorySearchDialog.tsx +118 -0
  301. package/components/IdeAutoConnectDialog.tsx +154 -0
  302. package/components/IdeOnboardingDialog.tsx +167 -0
  303. package/components/IdeStatusIndicator.tsx +58 -0
  304. package/components/IdleReturnDialog.tsx +118 -0
  305. package/components/InterruptedByUser.tsx +15 -0
  306. package/components/InvalidConfigDialog.tsx +156 -0
  307. package/components/InvalidSettingsDialog.tsx +89 -0
  308. package/components/KeybindingWarnings.tsx +55 -0
  309. package/components/LanguagePicker.tsx +86 -0
  310. package/components/LogSelector.tsx +1575 -0
  311. package/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  312. package/components/LogoV2/AnimatedClawd.tsx +124 -0
  313. package/components/LogoV2/ChannelsNotice.tsx +266 -0
  314. package/components/LogoV2/Clawd.tsx +240 -0
  315. package/components/LogoV2/CondensedLogo.tsx +161 -0
  316. package/components/LogoV2/EmergencyTip.tsx +58 -0
  317. package/components/LogoV2/Feed.tsx +112 -0
  318. package/components/LogoV2/FeedColumn.tsx +59 -0
  319. package/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  320. package/components/LogoV2/LogoV2.tsx +543 -0
  321. package/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  322. package/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  323. package/components/LogoV2/VoiceModeNotice.tsx +68 -0
  324. package/components/LogoV2/WelcomeV2.tsx +433 -0
  325. package/components/LogoV2/feedConfigs.tsx +92 -0
  326. package/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  327. package/components/MCPServerApprovalDialog.tsx +115 -0
  328. package/components/MCPServerDesktopImportDialog.tsx +203 -0
  329. package/components/MCPServerDialogCopy.tsx +15 -0
  330. package/components/MCPServerMultiselectDialog.tsx +133 -0
  331. package/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  332. package/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  333. package/components/Markdown.tsx +236 -0
  334. package/components/MarkdownTable.tsx +322 -0
  335. package/components/MemoryUsageIndicator.tsx +37 -0
  336. package/components/Message.tsx +627 -0
  337. package/components/MessageModel.tsx +43 -0
  338. package/components/MessageResponse.tsx +78 -0
  339. package/components/MessageRow.tsx +383 -0
  340. package/components/MessageSelector.tsx +831 -0
  341. package/components/MessageTimestamp.tsx +63 -0
  342. package/components/Messages.tsx +834 -0
  343. package/components/ModelPicker.tsx +448 -0
  344. package/components/NativeAutoUpdater.tsx +193 -0
  345. package/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  346. package/components/OffscreenFreeze.tsx +44 -0
  347. package/components/Onboarding.tsx +244 -0
  348. package/components/OutputStylePicker.tsx +112 -0
  349. package/components/PackageManagerAutoUpdater.tsx +104 -0
  350. package/components/Passes/Passes.tsx +184 -0
  351. package/components/PrBadge.tsx +97 -0
  352. package/components/PressEnterToContinue.tsx +15 -0
  353. package/components/PromptInput/HistorySearchInput.tsx +51 -0
  354. package/components/PromptInput/IssueFlagBanner.tsx +12 -0
  355. package/components/PromptInput/Notifications.tsx +332 -0
  356. package/components/PromptInput/PromptInput.tsx +2339 -0
  357. package/components/PromptInput/PromptInputFooter.tsx +191 -0
  358. package/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  359. package/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  360. package/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  361. package/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  362. package/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  363. package/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  364. package/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  365. package/components/PromptInput/ShimmeredInput.tsx +143 -0
  366. package/components/PromptInput/VoiceIndicator.tsx +137 -0
  367. package/components/PromptInput/inputModes.ts +33 -0
  368. package/components/PromptInput/inputPaste.ts +90 -0
  369. package/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  370. package/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  371. package/components/PromptInput/useShowFastIconHint.ts +31 -0
  372. package/components/PromptInput/useSwarmBanner.ts +155 -0
  373. package/components/PromptInput/utils.ts +60 -0
  374. package/components/QuickOpenDialog.tsx +244 -0
  375. package/components/RemoteCallout.tsx +76 -0
  376. package/components/RemoteEnvironmentDialog.tsx +340 -0
  377. package/components/ResumeTask.tsx +268 -0
  378. package/components/SandboxViolationExpandedView.tsx +99 -0
  379. package/components/ScrollKeybindingHandler.tsx +1012 -0
  380. package/components/SearchBox.tsx +72 -0
  381. package/components/SentryErrorBoundary.ts +28 -0
  382. package/components/SessionBackgroundHint.tsx +108 -0
  383. package/components/SessionPreview.tsx +194 -0
  384. package/components/Settings/Config.tsx +1822 -0
  385. package/components/Settings/Settings.tsx +137 -0
  386. package/components/Settings/Status.tsx +241 -0
  387. package/components/Settings/Usage.tsx +377 -0
  388. package/components/ShowInIDEPrompt.tsx +170 -0
  389. package/components/SkillImprovementSurvey.tsx +152 -0
  390. package/components/Spinner/FlashingChar.tsx +61 -0
  391. package/components/Spinner/GlimmerMessage.tsx +328 -0
  392. package/components/Spinner/ShimmerChar.tsx +36 -0
  393. package/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  394. package/components/Spinner/SpinnerGlyph.tsx +80 -0
  395. package/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  396. package/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  397. package/components/Spinner/index.ts +10 -0
  398. package/components/Spinner/teammateSelectHint.ts +1 -0
  399. package/components/Spinner/useShimmerAnimation.ts +31 -0
  400. package/components/Spinner/useStalledAnimation.ts +75 -0
  401. package/components/Spinner/utils.ts +84 -0
  402. package/components/Spinner.tsx +562 -0
  403. package/components/Stats.tsx +1228 -0
  404. package/components/StatusLine.tsx +324 -0
  405. package/components/StatusNotices.tsx +55 -0
  406. package/components/StructuredDiff/Fallback.tsx +487 -0
  407. package/components/StructuredDiff/colorDiff.ts +37 -0
  408. package/components/StructuredDiff.tsx +190 -0
  409. package/components/StructuredDiffList.tsx +30 -0
  410. package/components/TagTabs.tsx +139 -0
  411. package/components/TaskListV2.tsx +378 -0
  412. package/components/TeammateViewHeader.tsx +82 -0
  413. package/components/TeleportError.tsx +189 -0
  414. package/components/TeleportProgress.tsx +140 -0
  415. package/components/TeleportRepoMismatchDialog.tsx +104 -0
  416. package/components/TeleportResumeWrapper.tsx +167 -0
  417. package/components/TeleportStash.tsx +116 -0
  418. package/components/TextInput.tsx +124 -0
  419. package/components/ThemePicker.tsx +333 -0
  420. package/components/ThinkingToggle.tsx +153 -0
  421. package/components/TokenWarning.tsx +179 -0
  422. package/components/ToolUseLoader.tsx +42 -0
  423. package/components/TrustDialog/TrustDialog.tsx +290 -0
  424. package/components/TrustDialog/utils.ts +245 -0
  425. package/components/ValidationErrorsList.tsx +148 -0
  426. package/components/VimTextInput.tsx +140 -0
  427. package/components/VirtualMessageList.tsx +1082 -0
  428. package/components/WorkflowMultiselectDialog.tsx +128 -0
  429. package/components/WorktreeExitDialog.tsx +231 -0
  430. package/components/agents/AgentDetail.tsx +220 -0
  431. package/components/agents/AgentEditor.tsx +178 -0
  432. package/components/agents/AgentNavigationFooter.tsx +26 -0
  433. package/components/agents/AgentsList.tsx +440 -0
  434. package/components/agents/AgentsMenu.tsx +800 -0
  435. package/components/agents/ColorPicker.tsx +112 -0
  436. package/components/agents/ModelSelector.tsx +68 -0
  437. package/components/agents/ToolSelector.tsx +562 -0
  438. package/components/agents/agentFileUtils.ts +272 -0
  439. package/components/agents/generateAgent.ts +197 -0
  440. package/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  441. package/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  442. package/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  443. package/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  444. package/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  445. package/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  446. package/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  447. package/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  448. package/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  449. package/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  450. package/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  451. package/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  452. package/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  453. package/components/agents/types.ts +27 -0
  454. package/components/agents/utils.ts +18 -0
  455. package/components/agents/validateAgent.ts +109 -0
  456. package/components/design-system/Byline.tsx +77 -0
  457. package/components/design-system/Dialog.tsx +138 -0
  458. package/components/design-system/Divider.tsx +149 -0
  459. package/components/design-system/FuzzyPicker.tsx +312 -0
  460. package/components/design-system/KeyboardShortcutHint.tsx +81 -0
  461. package/components/design-system/ListItem.tsx +244 -0
  462. package/components/design-system/LoadingState.tsx +94 -0
  463. package/components/design-system/Pane.tsx +77 -0
  464. package/components/design-system/ProgressBar.tsx +86 -0
  465. package/components/design-system/Ratchet.tsx +80 -0
  466. package/components/design-system/StatusIcon.tsx +95 -0
  467. package/components/design-system/Tabs.tsx +340 -0
  468. package/components/design-system/ThemeProvider.tsx +170 -0
  469. package/components/design-system/ThemedBox.tsx +156 -0
  470. package/components/design-system/ThemedText.tsx +124 -0
  471. package/components/design-system/color.ts +30 -0
  472. package/components/diff/DiffDetailView.tsx +281 -0
  473. package/components/diff/DiffDialog.tsx +383 -0
  474. package/components/diff/DiffFileList.tsx +292 -0
  475. package/components/grove/Grove.tsx +463 -0
  476. package/components/hooks/HooksConfigMenu.tsx +578 -0
  477. package/components/hooks/PromptDialog.tsx +90 -0
  478. package/components/hooks/SelectEventMode.tsx +127 -0
  479. package/components/hooks/SelectHookMode.tsx +112 -0
  480. package/components/hooks/SelectMatcherMode.tsx +144 -0
  481. package/components/hooks/ViewHookMode.tsx +199 -0
  482. package/components/mcp/CapabilitiesSection.tsx +61 -0
  483. package/components/mcp/ElicitationDialog.tsx +1169 -0
  484. package/components/mcp/MCPAgentServerMenu.tsx +183 -0
  485. package/components/mcp/MCPListPanel.tsx +504 -0
  486. package/components/mcp/MCPReconnect.tsx +167 -0
  487. package/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  488. package/components/mcp/MCPSettings.tsx +398 -0
  489. package/components/mcp/MCPStdioServerMenu.tsx +177 -0
  490. package/components/mcp/MCPToolDetailView.tsx +212 -0
  491. package/components/mcp/MCPToolListView.tsx +141 -0
  492. package/components/mcp/McpParsingWarnings.tsx +213 -0
  493. package/components/mcp/index.ts +9 -0
  494. package/components/mcp/utils/reconnectHelpers.tsx +49 -0
  495. package/components/memory/MemoryFileSelector.tsx +438 -0
  496. package/components/memory/MemoryUpdateNotification.tsx +45 -0
  497. package/components/messageActions.tsx +450 -0
  498. package/components/messages/AdvisorMessage.tsx +158 -0
  499. package/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  500. package/components/messages/AssistantTextMessage.tsx +270 -0
  501. package/components/messages/AssistantThinkingMessage.tsx +86 -0
  502. package/components/messages/AssistantToolUseMessage.tsx +368 -0
  503. package/components/messages/AttachmentMessage.tsx +536 -0
  504. package/components/messages/CollapsedReadSearchContent.tsx +484 -0
  505. package/components/messages/CompactBoundaryMessage.tsx +18 -0
  506. package/components/messages/GroupedToolUseContent.tsx +58 -0
  507. package/components/messages/HighlightedThinkingText.tsx +162 -0
  508. package/components/messages/HookProgressMessage.tsx +116 -0
  509. package/components/messages/PlanApprovalMessage.tsx +222 -0
  510. package/components/messages/RateLimitMessage.tsx +161 -0
  511. package/components/messages/ShutdownMessage.tsx +132 -0
  512. package/components/messages/SystemAPIErrorMessage.tsx +141 -0
  513. package/components/messages/SystemTextMessage.tsx +827 -0
  514. package/components/messages/TaskAssignmentMessage.tsx +76 -0
  515. package/components/messages/UserAgentNotificationMessage.tsx +83 -0
  516. package/components/messages/UserBashInputMessage.tsx +58 -0
  517. package/components/messages/UserBashOutputMessage.tsx +54 -0
  518. package/components/messages/UserChannelMessage.tsx +137 -0
  519. package/components/messages/UserCommandMessage.tsx +108 -0
  520. package/components/messages/UserImageMessage.tsx +59 -0
  521. package/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  522. package/components/messages/UserMemoryInputMessage.tsx +75 -0
  523. package/components/messages/UserPlanMessage.tsx +42 -0
  524. package/components/messages/UserPromptMessage.tsx +80 -0
  525. package/components/messages/UserResourceUpdateMessage.tsx +121 -0
  526. package/components/messages/UserTeammateMessage.tsx +206 -0
  527. package/components/messages/UserTextMessage.tsx +275 -0
  528. package/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  529. package/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  530. package/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  531. package/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  532. package/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  533. package/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  534. package/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  535. package/components/messages/UserToolResultMessage/utils.tsx +44 -0
  536. package/components/messages/nullRenderingAttachments.ts +70 -0
  537. package/components/messages/teamMemCollapsed.tsx +140 -0
  538. package/components/messages/teamMemSaved.ts +19 -0
  539. package/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  540. package/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  541. package/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  542. package/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  543. package/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  544. package/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  545. package/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  546. package/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  547. package/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  548. package/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  549. package/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  550. package/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  551. package/components/permissions/FallbackPermissionRequest.tsx +333 -0
  552. package/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  553. package/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  554. package/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  555. package/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  556. package/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  557. package/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  558. package/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  559. package/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  560. package/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  561. package/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  562. package/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  563. package/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  564. package/components/permissions/PermissionDialog.tsx +72 -0
  565. package/components/permissions/PermissionExplanation.tsx +272 -0
  566. package/components/permissions/PermissionPrompt.tsx +336 -0
  567. package/components/permissions/PermissionRequest.tsx +217 -0
  568. package/components/permissions/PermissionRequestTitle.tsx +66 -0
  569. package/components/permissions/PermissionRuleExplanation.tsx +121 -0
  570. package/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  571. package/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  572. package/components/permissions/SandboxPermissionRequest.tsx +163 -0
  573. package/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  574. package/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  575. package/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  576. package/components/permissions/WorkerBadge.tsx +49 -0
  577. package/components/permissions/WorkerPendingPermission.tsx +105 -0
  578. package/components/permissions/hooks.ts +209 -0
  579. package/components/permissions/rules/AddPermissionRules.tsx +180 -0
  580. package/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  581. package/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  582. package/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  583. package/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  584. package/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  585. package/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  586. package/components/permissions/rules/WorkspaceTab.tsx +150 -0
  587. package/components/permissions/shellPermissionHelpers.tsx +164 -0
  588. package/components/permissions/useShellPermissionFeedback.ts +148 -0
  589. package/components/permissions/utils.ts +25 -0
  590. package/components/sandbox/SandboxConfigTab.tsx +45 -0
  591. package/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  592. package/components/sandbox/SandboxDoctorSection.tsx +46 -0
  593. package/components/sandbox/SandboxOverridesTab.tsx +193 -0
  594. package/components/sandbox/SandboxSettings.tsx +296 -0
  595. package/components/shell/ExpandShellOutputContext.tsx +36 -0
  596. package/components/shell/OutputLine.tsx +118 -0
  597. package/components/shell/ShellProgressMessage.tsx +150 -0
  598. package/components/shell/ShellTimeDisplay.tsx +74 -0
  599. package/components/skills/SkillsMenu.tsx +237 -0
  600. package/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  601. package/components/tasks/BackgroundTask.tsx +345 -0
  602. package/components/tasks/BackgroundTaskStatus.tsx +429 -0
  603. package/components/tasks/BackgroundTasksDialog.tsx +652 -0
  604. package/components/tasks/DreamDetailDialog.tsx +251 -0
  605. package/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  606. package/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  607. package/components/tasks/RemoteSessionProgress.tsx +243 -0
  608. package/components/tasks/ShellDetailDialog.tsx +404 -0
  609. package/components/tasks/ShellProgress.tsx +87 -0
  610. package/components/tasks/renderToolActivity.tsx +33 -0
  611. package/components/tasks/taskStatusUtils.tsx +107 -0
  612. package/components/teams/TeamStatus.tsx +80 -0
  613. package/components/teams/TeamsDialog.tsx +715 -0
  614. package/components/ui/OrderedList.tsx +71 -0
  615. package/components/ui/OrderedListItem.tsx +45 -0
  616. package/components/ui/TreeSelect.tsx +397 -0
  617. package/components/wizard/WizardDialogLayout.tsx +65 -0
  618. package/components/wizard/WizardNavigationFooter.tsx +24 -0
  619. package/components/wizard/WizardProvider.tsx +213 -0
  620. package/components/wizard/index.ts +9 -0
  621. package/components/wizard/useWizard.ts +13 -0
  622. package/constants/apiLimits.ts +94 -0
  623. package/constants/betas.ts +52 -0
  624. package/constants/common.ts +33 -0
  625. package/constants/cyberRiskInstruction.ts +24 -0
  626. package/constants/errorIds.ts +15 -0
  627. package/constants/figures.ts +45 -0
  628. package/constants/files.ts +156 -0
  629. package/constants/github-app.ts +144 -0
  630. package/constants/keys.ts +11 -0
  631. package/constants/messages.ts +1 -0
  632. package/constants/oauth.ts +234 -0
  633. package/constants/outputStyles.ts +216 -0
  634. package/constants/product.ts +76 -0
  635. package/constants/prompts.ts +914 -0
  636. package/constants/spinnerVerbs.ts +204 -0
  637. package/constants/system.ts +95 -0
  638. package/constants/systemPromptSections.ts +68 -0
  639. package/constants/toolLimits.ts +56 -0
  640. package/constants/tools.ts +112 -0
  641. package/constants/turnCompletionVerbs.ts +12 -0
  642. package/constants/xml.ts +86 -0
  643. package/context/QueuedMessageContext.tsx +63 -0
  644. package/context/fpsMetrics.tsx +30 -0
  645. package/context/mailbox.tsx +38 -0
  646. package/context/modalContext.tsx +58 -0
  647. package/context/notifications.tsx +240 -0
  648. package/context/overlayContext.tsx +151 -0
  649. package/context/promptOverlayContext.tsx +125 -0
  650. package/context/stats.tsx +220 -0
  651. package/context/voice.tsx +88 -0
  652. package/context.ts +189 -0
  653. package/cost-tracker.ts +323 -0
  654. package/costHook.ts +22 -0
  655. package/dialogLaunchers.tsx +133 -0
  656. package/entrypoints/agentSdkTypes.ts +443 -0
  657. package/entrypoints/cli.tsx +310 -0
  658. package/entrypoints/init.ts +340 -0
  659. package/entrypoints/mcp.ts +196 -0
  660. package/entrypoints/sandboxTypes.ts +156 -0
  661. package/entrypoints/sdk/controlSchemas.ts +663 -0
  662. package/entrypoints/sdk/coreSchemas.ts +1889 -0
  663. package/entrypoints/sdk/coreTypes.generated.ts +73 -0
  664. package/entrypoints/sdk/coreTypes.ts +62 -0
  665. package/entrypoints/sdk/runtimeTypes.ts +74 -0
  666. package/entrypoints/sdk/toolTypes.ts +12 -0
  667. package/global.d.ts +18 -0
  668. package/history.ts +464 -0
  669. package/hooks/fileSuggestions.ts +811 -0
  670. package/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  671. package/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  672. package/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  673. package/hooks/notifs/useFastModeNotification.tsx +162 -0
  674. package/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  675. package/hooks/notifs/useInstallMessages.tsx +26 -0
  676. package/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  677. package/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  678. package/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  679. package/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  680. package/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  681. package/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  682. package/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  683. package/hooks/notifs/useSettingsErrors.tsx +69 -0
  684. package/hooks/notifs/useStartupNotification.ts +41 -0
  685. package/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  686. package/hooks/renderPlaceholder.ts +51 -0
  687. package/hooks/toolPermission/PermissionContext.ts +388 -0
  688. package/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  689. package/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  690. package/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  691. package/hooks/toolPermission/permissionLogging.ts +238 -0
  692. package/hooks/unifiedSuggestions.ts +202 -0
  693. package/hooks/useAfterFirstRender.ts +17 -0
  694. package/hooks/useApiKeyVerification.ts +84 -0
  695. package/hooks/useArrowKeyHistory.tsx +229 -0
  696. package/hooks/useAssistantHistory.ts +250 -0
  697. package/hooks/useAwaySummary.ts +125 -0
  698. package/hooks/useBackgroundTaskNavigation.ts +251 -0
  699. package/hooks/useBlink.ts +34 -0
  700. package/hooks/useCanUseTool.tsx +204 -0
  701. package/hooks/useCancelRequest.ts +276 -0
  702. package/hooks/useChromeExtensionNotification.tsx +50 -0
  703. package/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  704. package/hooks/useClipboardImageHint.ts +77 -0
  705. package/hooks/useCommandKeybindings.tsx +108 -0
  706. package/hooks/useCommandQueue.ts +15 -0
  707. package/hooks/useCopyOnSelect.ts +98 -0
  708. package/hooks/useDeferredHookMessages.ts +46 -0
  709. package/hooks/useDiffData.ts +110 -0
  710. package/hooks/useDiffInIDE.ts +379 -0
  711. package/hooks/useDirectConnect.ts +229 -0
  712. package/hooks/useDoublePress.ts +62 -0
  713. package/hooks/useDynamicConfig.ts +22 -0
  714. package/hooks/useElapsedTime.ts +37 -0
  715. package/hooks/useExitOnCtrlCD.ts +95 -0
  716. package/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  717. package/hooks/useFileHistorySnapshotInit.ts +25 -0
  718. package/hooks/useGlobalKeybindings.tsx +249 -0
  719. package/hooks/useHistorySearch.ts +303 -0
  720. package/hooks/useIDEIntegration.tsx +70 -0
  721. package/hooks/useIdeAtMentioned.ts +76 -0
  722. package/hooks/useIdeConnectionStatus.ts +33 -0
  723. package/hooks/useIdeLogging.ts +41 -0
  724. package/hooks/useIdeSelection.ts +150 -0
  725. package/hooks/useInboxPoller.ts +969 -0
  726. package/hooks/useInputBuffer.ts +132 -0
  727. package/hooks/useIssueFlagBanner.ts +133 -0
  728. package/hooks/useLogMessages.ts +119 -0
  729. package/hooks/useLspPluginRecommendation.tsx +194 -0
  730. package/hooks/useMailboxBridge.ts +21 -0
  731. package/hooks/useMainLoopModel.ts +34 -0
  732. package/hooks/useManagePlugins.ts +304 -0
  733. package/hooks/useMemoryUsage.ts +39 -0
  734. package/hooks/useMergedClients.ts +23 -0
  735. package/hooks/useMergedCommands.ts +15 -0
  736. package/hooks/useMergedTools.ts +44 -0
  737. package/hooks/useMinDisplayTime.ts +35 -0
  738. package/hooks/useNotifyAfterTimeout.ts +65 -0
  739. package/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  740. package/hooks/usePasteHandler.ts +285 -0
  741. package/hooks/usePluginRecommendationBase.tsx +105 -0
  742. package/hooks/usePrStatus.ts +106 -0
  743. package/hooks/usePromptSuggestion.ts +177 -0
  744. package/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  745. package/hooks/useQueueProcessor.ts +68 -0
  746. package/hooks/useRemoteSession.ts +605 -0
  747. package/hooks/useReplBridge.tsx +723 -0
  748. package/hooks/useSSHSession.ts +241 -0
  749. package/hooks/useScheduledTasks.ts +139 -0
  750. package/hooks/useSearchInput.ts +364 -0
  751. package/hooks/useSessionBackgrounding.ts +158 -0
  752. package/hooks/useSettings.ts +17 -0
  753. package/hooks/useSettingsChange.ts +25 -0
  754. package/hooks/useSkillImprovementSurvey.ts +105 -0
  755. package/hooks/useSkillsChange.ts +62 -0
  756. package/hooks/useSwarmInitialization.ts +81 -0
  757. package/hooks/useSwarmPermissionPoller.ts +330 -0
  758. package/hooks/useTaskListWatcher.ts +221 -0
  759. package/hooks/useTasksV2.ts +250 -0
  760. package/hooks/useTeammateViewAutoExit.ts +63 -0
  761. package/hooks/useTeleportResume.tsx +85 -0
  762. package/hooks/useTerminalSize.ts +15 -0
  763. package/hooks/useTextInput.ts +529 -0
  764. package/hooks/useTimeout.ts +14 -0
  765. package/hooks/useTurnDiffs.ts +213 -0
  766. package/hooks/useTypeahead.tsx +1385 -0
  767. package/hooks/useUpdateNotification.ts +34 -0
  768. package/hooks/useVimInput.ts +316 -0
  769. package/hooks/useVirtualScroll.ts +721 -0
  770. package/hooks/useVoice.ts +1144 -0
  771. package/hooks/useVoiceEnabled.ts +25 -0
  772. package/hooks/useVoiceIntegration.tsx +677 -0
  773. package/ink/Ansi.tsx +292 -0
  774. package/ink/bidi.ts +139 -0
  775. package/ink/clearTerminal.ts +74 -0
  776. package/ink/colorize.ts +231 -0
  777. package/ink/components/AlternateScreen.tsx +80 -0
  778. package/ink/components/App.tsx +658 -0
  779. package/ink/components/AppContext.ts +21 -0
  780. package/ink/components/Box.tsx +214 -0
  781. package/ink/components/Button.tsx +192 -0
  782. package/ink/components/ClockContext.tsx +112 -0
  783. package/ink/components/CursorDeclarationContext.ts +32 -0
  784. package/ink/components/ErrorOverview.tsx +109 -0
  785. package/ink/components/Link.tsx +42 -0
  786. package/ink/components/Newline.tsx +39 -0
  787. package/ink/components/NoSelect.tsx +68 -0
  788. package/ink/components/RawAnsi.tsx +57 -0
  789. package/ink/components/ScrollBox.tsx +237 -0
  790. package/ink/components/Spacer.tsx +20 -0
  791. package/ink/components/StdinContext.ts +49 -0
  792. package/ink/components/TerminalFocusContext.tsx +52 -0
  793. package/ink/components/TerminalSizeContext.tsx +7 -0
  794. package/ink/components/Text.tsx +254 -0
  795. package/ink/constants.ts +2 -0
  796. package/ink/dom.ts +484 -0
  797. package/ink/events/click-event.ts +38 -0
  798. package/ink/events/dispatcher.ts +235 -0
  799. package/ink/events/emitter.ts +39 -0
  800. package/ink/events/event-handlers.ts +73 -0
  801. package/ink/events/event.ts +11 -0
  802. package/ink/events/focus-event.ts +21 -0
  803. package/ink/events/input-event.ts +205 -0
  804. package/ink/events/keyboard-event.ts +51 -0
  805. package/ink/events/terminal-event.ts +107 -0
  806. package/ink/events/terminal-focus-event.ts +19 -0
  807. package/ink/focus.ts +181 -0
  808. package/ink/frame.ts +124 -0
  809. package/ink/get-max-width.ts +27 -0
  810. package/ink/global.d.ts +14 -0
  811. package/ink/hit-test.ts +130 -0
  812. package/ink/hooks/use-animation-frame.ts +57 -0
  813. package/ink/hooks/use-app.ts +8 -0
  814. package/ink/hooks/use-declared-cursor.ts +73 -0
  815. package/ink/hooks/use-input.ts +92 -0
  816. package/ink/hooks/use-interval.ts +67 -0
  817. package/ink/hooks/use-search-highlight.ts +53 -0
  818. package/ink/hooks/use-selection.ts +104 -0
  819. package/ink/hooks/use-stdin.ts +8 -0
  820. package/ink/hooks/use-tab-status.ts +72 -0
  821. package/ink/hooks/use-terminal-focus.ts +16 -0
  822. package/ink/hooks/use-terminal-title.ts +31 -0
  823. package/ink/hooks/use-terminal-viewport.ts +96 -0
  824. package/ink/ink.tsx +1723 -0
  825. package/ink/instances.ts +10 -0
  826. package/ink/layout/engine.ts +6 -0
  827. package/ink/layout/geometry.ts +97 -0
  828. package/ink/layout/node.ts +152 -0
  829. package/ink/layout/yoga.ts +308 -0
  830. package/ink/line-width-cache.ts +24 -0
  831. package/ink/log-update.ts +773 -0
  832. package/ink/measure-element.ts +23 -0
  833. package/ink/measure-text.ts +47 -0
  834. package/ink/node-cache.ts +54 -0
  835. package/ink/optimizer.ts +93 -0
  836. package/ink/output.ts +797 -0
  837. package/ink/parse-keypress.ts +801 -0
  838. package/ink/reconciler.ts +512 -0
  839. package/ink/render-border.ts +231 -0
  840. package/ink/render-node-to-output.ts +1462 -0
  841. package/ink/render-to-screen.ts +231 -0
  842. package/ink/renderer.ts +178 -0
  843. package/ink/root.ts +184 -0
  844. package/ink/screen.ts +1486 -0
  845. package/ink/searchHighlight.ts +93 -0
  846. package/ink/selection.ts +917 -0
  847. package/ink/squash-text-nodes.ts +92 -0
  848. package/ink/stringWidth.ts +222 -0
  849. package/ink/styles.ts +771 -0
  850. package/ink/supports-hyperlinks.ts +57 -0
  851. package/ink/tabstops.ts +46 -0
  852. package/ink/terminal-focus-state.ts +47 -0
  853. package/ink/terminal-querier.ts +212 -0
  854. package/ink/terminal.ts +248 -0
  855. package/ink/termio/ansi.ts +75 -0
  856. package/ink/termio/csi.ts +319 -0
  857. package/ink/termio/dec.ts +60 -0
  858. package/ink/termio/esc.ts +67 -0
  859. package/ink/termio/osc.ts +493 -0
  860. package/ink/termio/parser.ts +394 -0
  861. package/ink/termio/sgr.ts +308 -0
  862. package/ink/termio/tokenize.ts +319 -0
  863. package/ink/termio/types.ts +236 -0
  864. package/ink/termio.ts +42 -0
  865. package/ink/useTerminalNotification.ts +126 -0
  866. package/ink/warn.ts +9 -0
  867. package/ink/widest-line.ts +19 -0
  868. package/ink/wrap-text.ts +74 -0
  869. package/ink/wrapAnsi.ts +20 -0
  870. package/ink.ts +85 -0
  871. package/interactiveHelpers.tsx +366 -0
  872. package/main.tsx +4702 -0
  873. package/package.json +95 -0
  874. package/projectOnboardingState.ts +83 -0
  875. package/query/config.ts +46 -0
  876. package/query/deps.ts +40 -0
  877. package/query/stopHooks.ts +473 -0
  878. package/query/tokenBudget.ts +93 -0
  879. package/query.ts +1729 -0
  880. package/replLauncher.tsx +23 -0
  881. package/services/AgentSummary/agentSummary.ts +179 -0
  882. package/services/MagicDocs/magicDocs.ts +254 -0
  883. package/services/MagicDocs/prompts.ts +127 -0
  884. package/services/PromptSuggestion/promptSuggestion.ts +523 -0
  885. package/services/PromptSuggestion/speculation.ts +991 -0
  886. package/services/SessionMemory/prompts.ts +324 -0
  887. package/services/SessionMemory/sessionMemory.ts +495 -0
  888. package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  889. package/services/analytics/config.ts +38 -0
  890. package/services/analytics/datadog.ts +307 -0
  891. package/services/analytics/firstPartyEventLogger.ts +449 -0
  892. package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  893. package/services/analytics/growthbook.ts +1155 -0
  894. package/services/analytics/index.ts +173 -0
  895. package/services/analytics/metadata.ts +973 -0
  896. package/services/analytics/sink.ts +114 -0
  897. package/services/analytics/sinkKillswitch.ts +25 -0
  898. package/services/api/adminRequests.ts +119 -0
  899. package/services/api/bootstrap.ts +141 -0
  900. package/services/api/claude.ts +3419 -0
  901. package/services/api/client.ts +389 -0
  902. package/services/api/dumpPrompts.ts +226 -0
  903. package/services/api/emptyUsage.ts +22 -0
  904. package/services/api/errorUtils.ts +260 -0
  905. package/services/api/errors.ts +1207 -0
  906. package/services/api/filesApi.ts +748 -0
  907. package/services/api/firstTokenDate.ts +60 -0
  908. package/services/api/grove.ts +357 -0
  909. package/services/api/logging.ts +788 -0
  910. package/services/api/metricsOptOut.ts +159 -0
  911. package/services/api/overageCreditGrant.ts +137 -0
  912. package/services/api/promptCacheBreakDetection.ts +727 -0
  913. package/services/api/referral.ts +281 -0
  914. package/services/api/sessionIngress.ts +514 -0
  915. package/services/api/ultrareviewQuota.ts +38 -0
  916. package/services/api/usage.ts +63 -0
  917. package/services/api/withRetry.ts +822 -0
  918. package/services/autoDream/autoDream.ts +324 -0
  919. package/services/autoDream/config.ts +21 -0
  920. package/services/autoDream/consolidationLock.ts +140 -0
  921. package/services/autoDream/consolidationPrompt.ts +65 -0
  922. package/services/awaySummary.ts +74 -0
  923. package/services/claudeAiLimits.ts +515 -0
  924. package/services/claudeAiLimitsHook.ts +23 -0
  925. package/services/compact/apiMicrocompact.ts +153 -0
  926. package/services/compact/autoCompact.ts +351 -0
  927. package/services/compact/compact.ts +1705 -0
  928. package/services/compact/compactWarningHook.ts +16 -0
  929. package/services/compact/compactWarningState.ts +18 -0
  930. package/services/compact/grouping.ts +63 -0
  931. package/services/compact/microCompact.ts +530 -0
  932. package/services/compact/postCompactCleanup.ts +77 -0
  933. package/services/compact/prompt.ts +374 -0
  934. package/services/compact/sessionMemoryCompact.ts +630 -0
  935. package/services/compact/timeBasedMCConfig.ts +43 -0
  936. package/services/diagnosticTracking.ts +397 -0
  937. package/services/extractMemories/extractMemories.ts +615 -0
  938. package/services/extractMemories/prompts.ts +154 -0
  939. package/services/internalLogging.ts +90 -0
  940. package/services/lsp/LSPClient.ts +447 -0
  941. package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  942. package/services/lsp/LSPServerInstance.ts +511 -0
  943. package/services/lsp/LSPServerManager.ts +420 -0
  944. package/services/lsp/config.ts +79 -0
  945. package/services/lsp/manager.ts +289 -0
  946. package/services/lsp/passiveFeedback.ts +328 -0
  947. package/services/mcp/InProcessTransport.ts +63 -0
  948. package/services/mcp/MCPConnectionManager.tsx +73 -0
  949. package/services/mcp/SdkControlTransport.ts +136 -0
  950. package/services/mcp/auth.ts +2465 -0
  951. package/services/mcp/channelAllowlist.ts +76 -0
  952. package/services/mcp/channelNotification.ts +316 -0
  953. package/services/mcp/channelPermissions.ts +240 -0
  954. package/services/mcp/claudeai.ts +164 -0
  955. package/services/mcp/client.ts +3348 -0
  956. package/services/mcp/config.ts +1578 -0
  957. package/services/mcp/elicitationHandler.ts +313 -0
  958. package/services/mcp/envExpansion.ts +38 -0
  959. package/services/mcp/headersHelper.ts +138 -0
  960. package/services/mcp/mcpStringUtils.ts +106 -0
  961. package/services/mcp/normalization.ts +23 -0
  962. package/services/mcp/oauthPort.ts +78 -0
  963. package/services/mcp/officialRegistry.ts +72 -0
  964. package/services/mcp/types.ts +258 -0
  965. package/services/mcp/useManageMCPConnections.ts +1141 -0
  966. package/services/mcp/utils.ts +575 -0
  967. package/services/mcp/vscodeSdkMcp.ts +112 -0
  968. package/services/mcp/xaa.ts +511 -0
  969. package/services/mcp/xaaIdpLogin.ts +487 -0
  970. package/services/mcpServerApproval.tsx +41 -0
  971. package/services/mockRateLimits.ts +882 -0
  972. package/services/notifier.ts +156 -0
  973. package/services/oauth/auth-code-listener.ts +211 -0
  974. package/services/oauth/client.ts +566 -0
  975. package/services/oauth/crypto.ts +23 -0
  976. package/services/oauth/getOauthProfile.ts +53 -0
  977. package/services/oauth/index.ts +198 -0
  978. package/services/plugins/PluginInstallationManager.ts +184 -0
  979. package/services/plugins/pluginCliCommands.ts +344 -0
  980. package/services/plugins/pluginOperations.ts +1088 -0
  981. package/services/policyLimits/index.ts +663 -0
  982. package/services/policyLimits/types.ts +27 -0
  983. package/services/preventSleep.ts +165 -0
  984. package/services/rateLimitMessages.ts +344 -0
  985. package/services/rateLimitMocking.ts +144 -0
  986. package/services/remoteManagedSettings/index.ts +638 -0
  987. package/services/remoteManagedSettings/securityCheck.tsx +74 -0
  988. package/services/remoteManagedSettings/syncCache.ts +112 -0
  989. package/services/remoteManagedSettings/syncCacheState.ts +96 -0
  990. package/services/remoteManagedSettings/types.ts +31 -0
  991. package/services/settingsSync/index.ts +581 -0
  992. package/services/settingsSync/types.ts +67 -0
  993. package/services/teamMemorySync/index.ts +1256 -0
  994. package/services/teamMemorySync/secretScanner.ts +324 -0
  995. package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  996. package/services/teamMemorySync/types.ts +156 -0
  997. package/services/teamMemorySync/watcher.ts +387 -0
  998. package/services/tips/tipHistory.ts +17 -0
  999. package/services/tips/tipRegistry.ts +686 -0
  1000. package/services/tips/tipScheduler.ts +58 -0
  1001. package/services/tokenEstimation.ts +495 -0
  1002. package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1003. package/services/tools/StreamingToolExecutor.ts +530 -0
  1004. package/services/tools/toolExecution.ts +1745 -0
  1005. package/services/tools/toolHooks.ts +650 -0
  1006. package/services/tools/toolOrchestration.ts +188 -0
  1007. package/services/vcr.ts +406 -0
  1008. package/services/voice.ts +525 -0
  1009. package/services/voiceKeyterms.ts +106 -0
  1010. package/services/voiceStreamSTT.ts +544 -0
  1011. package/setup.ts +477 -0
  1012. package/state/AppState.tsx +200 -0
  1013. package/state/AppStateStore.ts +569 -0
  1014. package/state/onChangeAppState.ts +171 -0
  1015. package/state/selectors.ts +76 -0
  1016. package/state/store.ts +34 -0
  1017. package/state/teammateViewHelpers.ts +141 -0
  1018. package/tasks.ts +39 -0
  1019. package/tools/AgentTool/AgentTool.tsx +1398 -0
  1020. package/tools/AgentTool/UI.tsx +872 -0
  1021. package/tools/AgentTool/agentColorManager.ts +66 -0
  1022. package/tools/AgentTool/agentDisplay.ts +104 -0
  1023. package/tools/AgentTool/agentMemory.ts +177 -0
  1024. package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1025. package/tools/AgentTool/agentToolUtils.ts +686 -0
  1026. package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1027. package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1028. package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1029. package/tools/AgentTool/built-in/planAgent.ts +92 -0
  1030. package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1031. package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1032. package/tools/AgentTool/builtInAgents.ts +72 -0
  1033. package/tools/AgentTool/constants.ts +12 -0
  1034. package/tools/AgentTool/forkSubagent.ts +210 -0
  1035. package/tools/AgentTool/loadAgentsDir.ts +755 -0
  1036. package/tools/AgentTool/prompt.ts +287 -0
  1037. package/tools/AgentTool/resumeAgent.ts +265 -0
  1038. package/tools/AgentTool/runAgent.ts +973 -0
  1039. package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1040. package/tools/AskUserQuestionTool/prompt.ts +44 -0
  1041. package/tools/BashTool/BashTool.tsx +1144 -0
  1042. package/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1043. package/tools/BashTool/UI.tsx +185 -0
  1044. package/tools/BashTool/bashCommandHelpers.ts +265 -0
  1045. package/tools/BashTool/bashPermissions.ts +2621 -0
  1046. package/tools/BashTool/bashSecurity.ts +2592 -0
  1047. package/tools/BashTool/commandSemantics.ts +140 -0
  1048. package/tools/BashTool/commentLabel.ts +13 -0
  1049. package/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1050. package/tools/BashTool/modeValidation.ts +115 -0
  1051. package/tools/BashTool/pathValidation.ts +1303 -0
  1052. package/tools/BashTool/prompt.ts +369 -0
  1053. package/tools/BashTool/readOnlyValidation.ts +1990 -0
  1054. package/tools/BashTool/sedEditParser.ts +322 -0
  1055. package/tools/BashTool/sedValidation.ts +684 -0
  1056. package/tools/BashTool/shouldUseSandbox.ts +153 -0
  1057. package/tools/BashTool/toolName.ts +2 -0
  1058. package/tools/BashTool/utils.ts +223 -0
  1059. package/tools/BriefTool/BriefTool.ts +204 -0
  1060. package/tools/BriefTool/UI.tsx +101 -0
  1061. package/tools/BriefTool/attachments.ts +110 -0
  1062. package/tools/BriefTool/prompt.ts +22 -0
  1063. package/tools/BriefTool/upload.ts +174 -0
  1064. package/tools/ConfigTool/ConfigTool.ts +467 -0
  1065. package/tools/ConfigTool/UI.tsx +38 -0
  1066. package/tools/ConfigTool/constants.ts +1 -0
  1067. package/tools/ConfigTool/prompt.ts +93 -0
  1068. package/tools/ConfigTool/supportedSettings.ts +211 -0
  1069. package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1070. package/tools/EnterPlanModeTool/UI.tsx +33 -0
  1071. package/tools/EnterPlanModeTool/constants.ts +1 -0
  1072. package/tools/EnterPlanModeTool/prompt.ts +170 -0
  1073. package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1074. package/tools/EnterWorktreeTool/UI.tsx +20 -0
  1075. package/tools/EnterWorktreeTool/constants.ts +1 -0
  1076. package/tools/EnterWorktreeTool/prompt.ts +30 -0
  1077. package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1078. package/tools/ExitPlanModeTool/UI.tsx +82 -0
  1079. package/tools/ExitPlanModeTool/constants.ts +2 -0
  1080. package/tools/ExitPlanModeTool/prompt.ts +29 -0
  1081. package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1082. package/tools/ExitWorktreeTool/UI.tsx +25 -0
  1083. package/tools/ExitWorktreeTool/constants.ts +1 -0
  1084. package/tools/ExitWorktreeTool/prompt.ts +32 -0
  1085. package/tools/FileEditTool/FileEditTool.ts +625 -0
  1086. package/tools/FileEditTool/UI.tsx +289 -0
  1087. package/tools/FileEditTool/constants.ts +11 -0
  1088. package/tools/FileEditTool/prompt.ts +28 -0
  1089. package/tools/FileEditTool/types.ts +85 -0
  1090. package/tools/FileEditTool/utils.ts +775 -0
  1091. package/tools/FileReadTool/FileReadTool.ts +1183 -0
  1092. package/tools/FileReadTool/UI.tsx +185 -0
  1093. package/tools/FileReadTool/imageProcessor.ts +94 -0
  1094. package/tools/FileReadTool/limits.ts +92 -0
  1095. package/tools/FileReadTool/prompt.ts +49 -0
  1096. package/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1097. package/tools/FileWriteTool/UI.tsx +405 -0
  1098. package/tools/FileWriteTool/prompt.ts +18 -0
  1099. package/tools/GlobTool/GlobTool.ts +198 -0
  1100. package/tools/GlobTool/UI.tsx +63 -0
  1101. package/tools/GlobTool/prompt.ts +7 -0
  1102. package/tools/GrepTool/GrepTool.ts +577 -0
  1103. package/tools/GrepTool/UI.tsx +201 -0
  1104. package/tools/GrepTool/prompt.ts +18 -0
  1105. package/tools/LSPTool/LSPTool.ts +860 -0
  1106. package/tools/LSPTool/UI.tsx +228 -0
  1107. package/tools/LSPTool/formatters.ts +592 -0
  1108. package/tools/LSPTool/prompt.ts +21 -0
  1109. package/tools/LSPTool/schemas.ts +215 -0
  1110. package/tools/LSPTool/symbolContext.ts +90 -0
  1111. package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1112. package/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1113. package/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1114. package/tools/MCPTool/MCPTool.ts +77 -0
  1115. package/tools/MCPTool/UI.tsx +403 -0
  1116. package/tools/MCPTool/classifyForCollapse.ts +604 -0
  1117. package/tools/MCPTool/prompt.ts +3 -0
  1118. package/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1119. package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1120. package/tools/NotebookEditTool/UI.tsx +93 -0
  1121. package/tools/NotebookEditTool/constants.ts +2 -0
  1122. package/tools/NotebookEditTool/prompt.ts +3 -0
  1123. package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1124. package/tools/PowerShellTool/UI.tsx +131 -0
  1125. package/tools/PowerShellTool/clmTypes.ts +211 -0
  1126. package/tools/PowerShellTool/commandSemantics.ts +142 -0
  1127. package/tools/PowerShellTool/commonParameters.ts +30 -0
  1128. package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1129. package/tools/PowerShellTool/gitSafety.ts +176 -0
  1130. package/tools/PowerShellTool/modeValidation.ts +404 -0
  1131. package/tools/PowerShellTool/pathValidation.ts +2049 -0
  1132. package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1133. package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1134. package/tools/PowerShellTool/prompt.ts +145 -0
  1135. package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1136. package/tools/PowerShellTool/toolName.ts +2 -0
  1137. package/tools/REPLTool/constants.ts +46 -0
  1138. package/tools/REPLTool/primitiveTools.ts +39 -0
  1139. package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1140. package/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1141. package/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1142. package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1143. package/tools/RemoteTriggerTool/UI.tsx +17 -0
  1144. package/tools/RemoteTriggerTool/prompt.ts +15 -0
  1145. package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1146. package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1147. package/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1148. package/tools/ScheduleCronTool/UI.tsx +60 -0
  1149. package/tools/ScheduleCronTool/prompt.ts +135 -0
  1150. package/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1151. package/tools/SendMessageTool/UI.tsx +31 -0
  1152. package/tools/SendMessageTool/constants.ts +1 -0
  1153. package/tools/SendMessageTool/prompt.ts +49 -0
  1154. package/tools/SkillTool/SkillTool.ts +1108 -0
  1155. package/tools/SkillTool/UI.tsx +128 -0
  1156. package/tools/SkillTool/constants.ts +1 -0
  1157. package/tools/SkillTool/prompt.ts +241 -0
  1158. package/tools/SleepTool/prompt.ts +17 -0
  1159. package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1160. package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1161. package/tools/TaskCreateTool/constants.ts +1 -0
  1162. package/tools/TaskCreateTool/prompt.ts +56 -0
  1163. package/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1164. package/tools/TaskGetTool/constants.ts +1 -0
  1165. package/tools/TaskGetTool/prompt.ts +24 -0
  1166. package/tools/TaskListTool/TaskListTool.ts +116 -0
  1167. package/tools/TaskListTool/constants.ts +1 -0
  1168. package/tools/TaskListTool/prompt.ts +49 -0
  1169. package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1170. package/tools/TaskOutputTool/constants.ts +1 -0
  1171. package/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1172. package/tools/TaskStopTool/UI.tsx +41 -0
  1173. package/tools/TaskStopTool/prompt.ts +8 -0
  1174. package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1175. package/tools/TaskUpdateTool/constants.ts +1 -0
  1176. package/tools/TaskUpdateTool/prompt.ts +77 -0
  1177. package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1178. package/tools/TeamCreateTool/UI.tsx +6 -0
  1179. package/tools/TeamCreateTool/constants.ts +1 -0
  1180. package/tools/TeamCreateTool/prompt.ts +113 -0
  1181. package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1182. package/tools/TeamDeleteTool/UI.tsx +20 -0
  1183. package/tools/TeamDeleteTool/constants.ts +1 -0
  1184. package/tools/TeamDeleteTool/prompt.ts +16 -0
  1185. package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1186. package/tools/TodoWriteTool/constants.ts +1 -0
  1187. package/tools/TodoWriteTool/prompt.ts +184 -0
  1188. package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1189. package/tools/ToolSearchTool/constants.ts +1 -0
  1190. package/tools/ToolSearchTool/prompt.ts +121 -0
  1191. package/tools/WebFetchTool/UI.tsx +72 -0
  1192. package/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1193. package/tools/WebFetchTool/preapproved.ts +166 -0
  1194. package/tools/WebFetchTool/prompt.ts +46 -0
  1195. package/tools/WebFetchTool/utils.ts +530 -0
  1196. package/tools/WebSearchTool/UI.tsx +101 -0
  1197. package/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1198. package/tools/WebSearchTool/prompt.ts +34 -0
  1199. package/tools/WorkflowTool/constants.ts +5 -0
  1200. package/tools/shared/gitOperationTracking.ts +277 -0
  1201. package/tools/shared/spawnMultiAgent.ts +1093 -0
  1202. package/tools/testing/TestingPermissionTool.tsx +74 -0
  1203. package/tools/utils.ts +40 -0
  1204. package/tools.ts +392 -0
  1205. package/types/command.ts +216 -0
  1206. package/types/connectorText.ts +21 -0
  1207. package/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1208. package/types/generated/events_mono/common/v1/auth.ts +100 -0
  1209. package/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1210. package/types/generated/google/protobuf/timestamp.ts +187 -0
  1211. package/types/hooks.ts +290 -0
  1212. package/types/ids.ts +44 -0
  1213. package/types/logs.ts +330 -0
  1214. package/types/permissions.ts +441 -0
  1215. package/types/plugin.ts +363 -0
  1216. package/types/textInputTypes.ts +387 -0
  1217. package/utils/CircularBuffer.ts +84 -0
  1218. package/utils/Cursor.ts +1530 -0
  1219. package/utils/QueryGuard.ts +121 -0
  1220. package/utils/Shell.ts +474 -0
  1221. package/utils/ShellCommand.ts +465 -0
  1222. package/utils/abortController.ts +99 -0
  1223. package/utils/activityManager.ts +164 -0
  1224. package/utils/advisor.ts +145 -0
  1225. package/utils/agentContext.ts +178 -0
  1226. package/utils/agentId.ts +99 -0
  1227. package/utils/agentSwarmsEnabled.ts +44 -0
  1228. package/utils/agenticSessionSearch.ts +307 -0
  1229. package/utils/analyzeContext.ts +1382 -0
  1230. package/utils/ansiToPng.ts +334 -0
  1231. package/utils/ansiToSvg.ts +272 -0
  1232. package/utils/api.ts +718 -0
  1233. package/utils/apiPreconnect.ts +71 -0
  1234. package/utils/appleTerminalBackup.ts +124 -0
  1235. package/utils/argumentSubstitution.ts +145 -0
  1236. package/utils/array.ts +13 -0
  1237. package/utils/asciicast.ts +239 -0
  1238. package/utils/attachments.ts +3997 -0
  1239. package/utils/attribution.ts +393 -0
  1240. package/utils/auth.ts +2002 -0
  1241. package/utils/authFileDescriptor.ts +196 -0
  1242. package/utils/authPortable.ts +19 -0
  1243. package/utils/autoModeDenials.ts +26 -0
  1244. package/utils/autoRunIssue.tsx +122 -0
  1245. package/utils/autoUpdater.ts +561 -0
  1246. package/utils/aws.ts +74 -0
  1247. package/utils/awsAuthStatusManager.ts +81 -0
  1248. package/utils/background/remote/preconditions.ts +235 -0
  1249. package/utils/background/remote/remoteSession.ts +98 -0
  1250. package/utils/backgroundHousekeeping.ts +94 -0
  1251. package/utils/bash/ParsedCommand.ts +318 -0
  1252. package/utils/bash/ShellSnapshot.ts +582 -0
  1253. package/utils/bash/ast.ts +2679 -0
  1254. package/utils/bash/bashParser.ts +4436 -0
  1255. package/utils/bash/bashPipeCommand.ts +294 -0
  1256. package/utils/bash/commands.ts +1339 -0
  1257. package/utils/bash/heredoc.ts +733 -0
  1258. package/utils/bash/parser.ts +230 -0
  1259. package/utils/bash/prefix.ts +204 -0
  1260. package/utils/bash/registry.ts +53 -0
  1261. package/utils/bash/shellCompletion.ts +259 -0
  1262. package/utils/bash/shellPrefix.ts +28 -0
  1263. package/utils/bash/shellQuote.ts +304 -0
  1264. package/utils/bash/shellQuoting.ts +128 -0
  1265. package/utils/bash/specs/alias.ts +14 -0
  1266. package/utils/bash/specs/index.ts +18 -0
  1267. package/utils/bash/specs/nohup.ts +13 -0
  1268. package/utils/bash/specs/pyright.ts +91 -0
  1269. package/utils/bash/specs/sleep.ts +13 -0
  1270. package/utils/bash/specs/srun.ts +31 -0
  1271. package/utils/bash/specs/time.ts +13 -0
  1272. package/utils/bash/specs/timeout.ts +20 -0
  1273. package/utils/bash/treeSitterAnalysis.ts +506 -0
  1274. package/utils/betas.ts +434 -0
  1275. package/utils/billing.ts +78 -0
  1276. package/utils/binaryCheck.ts +53 -0
  1277. package/utils/browser.ts +68 -0
  1278. package/utils/bufferedWriter.ts +100 -0
  1279. package/utils/bundledMode.ts +22 -0
  1280. package/utils/caCerts.ts +115 -0
  1281. package/utils/caCertsConfig.ts +88 -0
  1282. package/utils/cachePaths.ts +38 -0
  1283. package/utils/classifierApprovals.ts +88 -0
  1284. package/utils/classifierApprovalsHook.ts +17 -0
  1285. package/utils/claudeCodeHints.ts +193 -0
  1286. package/utils/claudeDesktop.ts +152 -0
  1287. package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1288. package/utils/claudeInChrome/common.ts +540 -0
  1289. package/utils/claudeInChrome/mcpServer.ts +293 -0
  1290. package/utils/claudeInChrome/prompt.ts +83 -0
  1291. package/utils/claudeInChrome/setup.ts +400 -0
  1292. package/utils/claudeInChrome/setupPortable.ts +233 -0
  1293. package/utils/claudeInChrome/toolRendering.tsx +262 -0
  1294. package/utils/claudemd.ts +1479 -0
  1295. package/utils/cleanup.ts +602 -0
  1296. package/utils/cleanupRegistry.ts +25 -0
  1297. package/utils/cliArgs.ts +60 -0
  1298. package/utils/cliHighlight.ts +54 -0
  1299. package/utils/codeIndexing.ts +206 -0
  1300. package/utils/collapseBackgroundBashNotifications.ts +84 -0
  1301. package/utils/collapseHookSummaries.ts +59 -0
  1302. package/utils/collapseReadSearch.ts +1109 -0
  1303. package/utils/collapseTeammateShutdowns.ts +55 -0
  1304. package/utils/combinedAbortSignal.ts +47 -0
  1305. package/utils/commandLifecycle.ts +21 -0
  1306. package/utils/commitAttribution.ts +961 -0
  1307. package/utils/completionCache.ts +166 -0
  1308. package/utils/computerUse/appNames.ts +196 -0
  1309. package/utils/computerUse/cleanup.ts +86 -0
  1310. package/utils/computerUse/common.ts +61 -0
  1311. package/utils/computerUse/computerUseLock.ts +215 -0
  1312. package/utils/computerUse/drainRunLoop.ts +79 -0
  1313. package/utils/computerUse/escHotkey.ts +54 -0
  1314. package/utils/computerUse/executor.ts +658 -0
  1315. package/utils/computerUse/gates.ts +72 -0
  1316. package/utils/computerUse/hostAdapter.ts +69 -0
  1317. package/utils/computerUse/inputLoader.ts +30 -0
  1318. package/utils/computerUse/mcpServer.ts +106 -0
  1319. package/utils/computerUse/setup.ts +53 -0
  1320. package/utils/computerUse/swiftLoader.ts +23 -0
  1321. package/utils/computerUse/toolRendering.tsx +125 -0
  1322. package/utils/computerUse/wrapper.tsx +336 -0
  1323. package/utils/concurrentSessions.ts +204 -0
  1324. package/utils/config.ts +1817 -0
  1325. package/utils/configConstants.ts +21 -0
  1326. package/utils/contentArray.ts +51 -0
  1327. package/utils/context.ts +221 -0
  1328. package/utils/contextAnalysis.ts +272 -0
  1329. package/utils/contextSuggestions.ts +235 -0
  1330. package/utils/controlMessageCompat.ts +32 -0
  1331. package/utils/conversationRecovery.ts +597 -0
  1332. package/utils/cron.ts +308 -0
  1333. package/utils/cronJitterConfig.ts +75 -0
  1334. package/utils/cronScheduler.ts +565 -0
  1335. package/utils/cronTasks.ts +458 -0
  1336. package/utils/cronTasksLock.ts +195 -0
  1337. package/utils/crossProjectResume.ts +75 -0
  1338. package/utils/crypto.ts +13 -0
  1339. package/utils/cwd.ts +32 -0
  1340. package/utils/debug.ts +268 -0
  1341. package/utils/debugFilter.ts +157 -0
  1342. package/utils/deepLink/banner.ts +123 -0
  1343. package/utils/deepLink/parseDeepLink.ts +170 -0
  1344. package/utils/deepLink/protocolHandler.ts +136 -0
  1345. package/utils/deepLink/registerProtocol.ts +348 -0
  1346. package/utils/deepLink/terminalLauncher.ts +557 -0
  1347. package/utils/deepLink/terminalPreference.ts +54 -0
  1348. package/utils/desktopDeepLink.ts +236 -0
  1349. package/utils/detectRepository.ts +178 -0
  1350. package/utils/diagLogs.ts +94 -0
  1351. package/utils/diff.ts +177 -0
  1352. package/utils/directMemberMessage.ts +69 -0
  1353. package/utils/displayTags.ts +51 -0
  1354. package/utils/doctorContextWarnings.ts +265 -0
  1355. package/utils/doctorDiagnostic.ts +625 -0
  1356. package/utils/dxt/helpers.ts +88 -0
  1357. package/utils/dxt/zip.ts +226 -0
  1358. package/utils/earlyInput.ts +191 -0
  1359. package/utils/editor.ts +183 -0
  1360. package/utils/effort.ts +329 -0
  1361. package/utils/embeddedTools.ts +29 -0
  1362. package/utils/env.ts +347 -0
  1363. package/utils/envDynamic.ts +151 -0
  1364. package/utils/envUtils.ts +183 -0
  1365. package/utils/envValidation.ts +38 -0
  1366. package/utils/errorLogSink.ts +235 -0
  1367. package/utils/errors.ts +238 -0
  1368. package/utils/exampleCommands.ts +184 -0
  1369. package/utils/execFileNoThrow.ts +150 -0
  1370. package/utils/execFileNoThrowPortable.ts +89 -0
  1371. package/utils/execSyncWrapper.ts +38 -0
  1372. package/utils/exportRenderer.tsx +98 -0
  1373. package/utils/extraUsage.ts +23 -0
  1374. package/utils/fastMode.ts +532 -0
  1375. package/utils/file.ts +584 -0
  1376. package/utils/fileHistory.ts +1115 -0
  1377. package/utils/fileOperationAnalytics.ts +71 -0
  1378. package/utils/filePersistence/filePersistence.ts +287 -0
  1379. package/utils/filePersistence/outputsScanner.ts +126 -0
  1380. package/utils/filePersistence/types.ts +28 -0
  1381. package/utils/fileRead.ts +102 -0
  1382. package/utils/fileReadCache.ts +96 -0
  1383. package/utils/fileStateCache.ts +142 -0
  1384. package/utils/findExecutable.ts +17 -0
  1385. package/utils/fingerprint.ts +76 -0
  1386. package/utils/forkedAgent.ts +689 -0
  1387. package/utils/format.ts +308 -0
  1388. package/utils/formatBriefTimestamp.ts +81 -0
  1389. package/utils/fpsTracker.ts +47 -0
  1390. package/utils/frontmatterParser.ts +370 -0
  1391. package/utils/fsOperations.ts +770 -0
  1392. package/utils/fullscreen.ts +202 -0
  1393. package/utils/generatedFiles.ts +136 -0
  1394. package/utils/generators.ts +88 -0
  1395. package/utils/genericProcessUtils.ts +184 -0
  1396. package/utils/getWorktreePaths.ts +70 -0
  1397. package/utils/getWorktreePathsPortable.ts +27 -0
  1398. package/utils/ghPrStatus.ts +106 -0
  1399. package/utils/git/gitConfigParser.ts +277 -0
  1400. package/utils/git/gitFilesystem.ts +699 -0
  1401. package/utils/git/gitignore.ts +99 -0
  1402. package/utils/git.ts +926 -0
  1403. package/utils/gitDiff.ts +532 -0
  1404. package/utils/gitSettings.ts +18 -0
  1405. package/utils/github/ghAuthStatus.ts +29 -0
  1406. package/utils/githubRepoPathMapping.ts +162 -0
  1407. package/utils/glob.ts +130 -0
  1408. package/utils/gracefulShutdown.ts +529 -0
  1409. package/utils/groupToolUses.ts +182 -0
  1410. package/utils/handlePromptSubmit.ts +610 -0
  1411. package/utils/hash.ts +46 -0
  1412. package/utils/headlessProfiler.ts +178 -0
  1413. package/utils/heapDumpService.ts +303 -0
  1414. package/utils/heatmap.ts +198 -0
  1415. package/utils/highlightMatch.tsx +28 -0
  1416. package/utils/hooks/AsyncHookRegistry.ts +309 -0
  1417. package/utils/hooks/apiQueryHookHelper.ts +141 -0
  1418. package/utils/hooks/execAgentHook.ts +339 -0
  1419. package/utils/hooks/execHttpHook.ts +242 -0
  1420. package/utils/hooks/execPromptHook.ts +211 -0
  1421. package/utils/hooks/fileChangedWatcher.ts +191 -0
  1422. package/utils/hooks/hookEvents.ts +192 -0
  1423. package/utils/hooks/hookHelpers.ts +83 -0
  1424. package/utils/hooks/hooksConfigManager.ts +400 -0
  1425. package/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1426. package/utils/hooks/hooksSettings.ts +271 -0
  1427. package/utils/hooks/postSamplingHooks.ts +70 -0
  1428. package/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1429. package/utils/hooks/registerSkillHooks.ts +64 -0
  1430. package/utils/hooks/sessionHooks.ts +447 -0
  1431. package/utils/hooks/skillImprovement.ts +267 -0
  1432. package/utils/hooks/ssrfGuard.ts +294 -0
  1433. package/utils/hooks.ts +5022 -0
  1434. package/utils/horizontalScroll.ts +137 -0
  1435. package/utils/http.ts +136 -0
  1436. package/utils/hyperlink.ts +39 -0
  1437. package/utils/iTermBackup.ts +73 -0
  1438. package/utils/ide.ts +1494 -0
  1439. package/utils/idePathConversion.ts +90 -0
  1440. package/utils/idleTimeout.ts +53 -0
  1441. package/utils/imagePaste.ts +416 -0
  1442. package/utils/imageResizer.ts +880 -0
  1443. package/utils/imageStore.ts +167 -0
  1444. package/utils/imageValidation.ts +104 -0
  1445. package/utils/immediateCommand.ts +15 -0
  1446. package/utils/inProcessTeammateHelpers.ts +102 -0
  1447. package/utils/ink.ts +26 -0
  1448. package/utils/intl.ts +94 -0
  1449. package/utils/jetbrains.ts +191 -0
  1450. package/utils/json.ts +277 -0
  1451. package/utils/jsonRead.ts +16 -0
  1452. package/utils/keyboardShortcuts.ts +14 -0
  1453. package/utils/lazySchema.ts +8 -0
  1454. package/utils/listSessionsImpl.ts +454 -0
  1455. package/utils/localInstaller.ts +162 -0
  1456. package/utils/lockfile.ts +43 -0
  1457. package/utils/log.ts +362 -0
  1458. package/utils/logoV2Utils.ts +350 -0
  1459. package/utils/mailbox.ts +73 -0
  1460. package/utils/managedEnv.ts +199 -0
  1461. package/utils/managedEnvConstants.ts +191 -0
  1462. package/utils/markdown.ts +381 -0
  1463. package/utils/markdownConfigLoader.ts +600 -0
  1464. package/utils/mcp/dateTimeParser.ts +121 -0
  1465. package/utils/mcp/elicitationValidation.ts +336 -0
  1466. package/utils/mcpInstructionsDelta.ts +130 -0
  1467. package/utils/mcpOutputStorage.ts +189 -0
  1468. package/utils/mcpValidation.ts +208 -0
  1469. package/utils/mcpWebSocketTransport.ts +200 -0
  1470. package/utils/memoize.ts +269 -0
  1471. package/utils/memory/types.ts +12 -0
  1472. package/utils/memory/versions.ts +8 -0
  1473. package/utils/memoryFileDetection.ts +289 -0
  1474. package/utils/messagePredicates.ts +8 -0
  1475. package/utils/messageQueueManager.ts +547 -0
  1476. package/utils/messages/mappers.ts +290 -0
  1477. package/utils/messages/systemInit.ts +96 -0
  1478. package/utils/messages.ts +5512 -0
  1479. package/utils/model/agent.ts +157 -0
  1480. package/utils/model/aliases.ts +25 -0
  1481. package/utils/model/antModels.ts +64 -0
  1482. package/utils/model/bedrock.ts +265 -0
  1483. package/utils/model/check1mAccess.ts +72 -0
  1484. package/utils/model/configs.ts +118 -0
  1485. package/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1486. package/utils/model/deprecation.ts +101 -0
  1487. package/utils/model/model.ts +618 -0
  1488. package/utils/model/modelAllowlist.ts +170 -0
  1489. package/utils/model/modelCapabilities.ts +118 -0
  1490. package/utils/model/modelOptions.ts +540 -0
  1491. package/utils/model/modelStrings.ts +166 -0
  1492. package/utils/model/modelSupportOverrides.ts +50 -0
  1493. package/utils/model/providers.ts +40 -0
  1494. package/utils/model/validateModel.ts +159 -0
  1495. package/utils/modelCost.ts +231 -0
  1496. package/utils/modifiers.ts +36 -0
  1497. package/utils/mtls.ts +179 -0
  1498. package/utils/nativeInstaller/download.ts +523 -0
  1499. package/utils/nativeInstaller/index.ts +18 -0
  1500. package/utils/nativeInstaller/installer.ts +1708 -0
  1501. package/utils/nativeInstaller/packageManagers.ts +336 -0
  1502. package/utils/nativeInstaller/pidLock.ts +433 -0
  1503. package/utils/notebook.ts +224 -0
  1504. package/utils/objectGroupBy.ts +18 -0
  1505. package/utils/pasteStore.ts +104 -0
  1506. package/utils/path.ts +155 -0
  1507. package/utils/pdf.ts +300 -0
  1508. package/utils/pdfUtils.ts +70 -0
  1509. package/utils/peerAddress.ts +21 -0
  1510. package/utils/permissions/PermissionMode.ts +141 -0
  1511. package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1512. package/utils/permissions/PermissionResult.ts +35 -0
  1513. package/utils/permissions/PermissionRule.ts +40 -0
  1514. package/utils/permissions/PermissionUpdate.ts +389 -0
  1515. package/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1516. package/utils/permissions/autoModeState.ts +39 -0
  1517. package/utils/permissions/bashClassifier.ts +61 -0
  1518. package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1519. package/utils/permissions/classifierDecision.ts +98 -0
  1520. package/utils/permissions/classifierShared.ts +39 -0
  1521. package/utils/permissions/dangerousPatterns.ts +80 -0
  1522. package/utils/permissions/denialTracking.ts +45 -0
  1523. package/utils/permissions/filesystem.ts +1777 -0
  1524. package/utils/permissions/getNextPermissionMode.ts +101 -0
  1525. package/utils/permissions/pathValidation.ts +485 -0
  1526. package/utils/permissions/permissionExplainer.ts +250 -0
  1527. package/utils/permissions/permissionRuleParser.ts +198 -0
  1528. package/utils/permissions/permissionSetup.ts +1532 -0
  1529. package/utils/permissions/permissions.ts +1486 -0
  1530. package/utils/permissions/permissionsLoader.ts +296 -0
  1531. package/utils/permissions/shadowedRuleDetection.ts +234 -0
  1532. package/utils/permissions/shellRuleMatching.ts +228 -0
  1533. package/utils/permissions/yoloClassifier.ts +1495 -0
  1534. package/utils/planModeV2.ts +95 -0
  1535. package/utils/plans.ts +397 -0
  1536. package/utils/platform.ts +150 -0
  1537. package/utils/plugins/addDirPluginSettings.ts +71 -0
  1538. package/utils/plugins/cacheUtils.ts +196 -0
  1539. package/utils/plugins/dependencyResolver.ts +305 -0
  1540. package/utils/plugins/fetchTelemetry.ts +135 -0
  1541. package/utils/plugins/gitAvailability.ts +69 -0
  1542. package/utils/plugins/headlessPluginInstall.ts +174 -0
  1543. package/utils/plugins/hintRecommendation.ts +164 -0
  1544. package/utils/plugins/installCounts.ts +292 -0
  1545. package/utils/plugins/installedPluginsManager.ts +1268 -0
  1546. package/utils/plugins/loadPluginAgents.ts +348 -0
  1547. package/utils/plugins/loadPluginCommands.ts +946 -0
  1548. package/utils/plugins/loadPluginHooks.ts +287 -0
  1549. package/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1550. package/utils/plugins/lspPluginIntegration.ts +387 -0
  1551. package/utils/plugins/lspRecommendation.ts +374 -0
  1552. package/utils/plugins/managedPlugins.ts +27 -0
  1553. package/utils/plugins/marketplaceHelpers.ts +592 -0
  1554. package/utils/plugins/marketplaceManager.ts +2643 -0
  1555. package/utils/plugins/mcpPluginIntegration.ts +634 -0
  1556. package/utils/plugins/mcpbHandler.ts +968 -0
  1557. package/utils/plugins/officialMarketplace.ts +25 -0
  1558. package/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1559. package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1560. package/utils/plugins/orphanedPluginFilter.ts +114 -0
  1561. package/utils/plugins/parseMarketplaceInput.ts +162 -0
  1562. package/utils/plugins/performStartupChecks.tsx +70 -0
  1563. package/utils/plugins/pluginAutoupdate.ts +284 -0
  1564. package/utils/plugins/pluginBlocklist.ts +127 -0
  1565. package/utils/plugins/pluginDirectories.ts +178 -0
  1566. package/utils/plugins/pluginFlagging.ts +208 -0
  1567. package/utils/plugins/pluginIdentifier.ts +123 -0
  1568. package/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1569. package/utils/plugins/pluginLoader.ts +3302 -0
  1570. package/utils/plugins/pluginOptionsStorage.ts +400 -0
  1571. package/utils/plugins/pluginPolicy.ts +20 -0
  1572. package/utils/plugins/pluginStartupCheck.ts +341 -0
  1573. package/utils/plugins/pluginVersioning.ts +157 -0
  1574. package/utils/plugins/reconciler.ts +265 -0
  1575. package/utils/plugins/refresh.ts +215 -0
  1576. package/utils/plugins/schemas.ts +1681 -0
  1577. package/utils/plugins/validatePlugin.ts +903 -0
  1578. package/utils/plugins/walkPluginMarkdown.ts +69 -0
  1579. package/utils/plugins/zipCache.ts +406 -0
  1580. package/utils/plugins/zipCacheAdapters.ts +164 -0
  1581. package/utils/powershell/dangerousCmdlets.ts +185 -0
  1582. package/utils/powershell/parser.ts +1804 -0
  1583. package/utils/powershell/staticPrefix.ts +316 -0
  1584. package/utils/preflightChecks.tsx +151 -0
  1585. package/utils/privacyLevel.ts +55 -0
  1586. package/utils/process.ts +68 -0
  1587. package/utils/processUserInput/processBashCommand.tsx +140 -0
  1588. package/utils/processUserInput/processSlashCommand.tsx +922 -0
  1589. package/utils/processUserInput/processTextPrompt.ts +100 -0
  1590. package/utils/processUserInput/processUserInput.ts +605 -0
  1591. package/utils/profilerBase.ts +46 -0
  1592. package/utils/promptCategory.ts +49 -0
  1593. package/utils/promptEditor.ts +188 -0
  1594. package/utils/promptShellExecution.ts +183 -0
  1595. package/utils/proxy.ts +426 -0
  1596. package/utils/queryContext.ts +179 -0
  1597. package/utils/queryHelpers.ts +552 -0
  1598. package/utils/queryProfiler.ts +301 -0
  1599. package/utils/queueProcessor.ts +95 -0
  1600. package/utils/readEditContext.ts +227 -0
  1601. package/utils/readFileInRange.ts +383 -0
  1602. package/utils/releaseNotes.ts +360 -0
  1603. package/utils/renderOptions.ts +77 -0
  1604. package/utils/ripgrep.ts +679 -0
  1605. package/utils/sandbox/sandbox-adapter.ts +987 -0
  1606. package/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1607. package/utils/sanitization.ts +91 -0
  1608. package/utils/screenshotClipboard.ts +121 -0
  1609. package/utils/sdkEventQueue.ts +134 -0
  1610. package/utils/secureStorage/fallbackStorage.ts +70 -0
  1611. package/utils/secureStorage/index.ts +17 -0
  1612. package/utils/secureStorage/keychainPrefetch.ts +116 -0
  1613. package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1614. package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1615. package/utils/secureStorage/plainTextStorage.ts +84 -0
  1616. package/utils/semanticBoolean.ts +29 -0
  1617. package/utils/semanticNumber.ts +36 -0
  1618. package/utils/semver.ts +59 -0
  1619. package/utils/sequential.ts +56 -0
  1620. package/utils/sessionActivity.ts +133 -0
  1621. package/utils/sessionEnvVars.ts +22 -0
  1622. package/utils/sessionEnvironment.ts +166 -0
  1623. package/utils/sessionFileAccessHooks.ts +250 -0
  1624. package/utils/sessionIngressAuth.ts +140 -0
  1625. package/utils/sessionRestore.ts +551 -0
  1626. package/utils/sessionStart.ts +232 -0
  1627. package/utils/sessionState.ts +150 -0
  1628. package/utils/sessionStorage.ts +5105 -0
  1629. package/utils/sessionStoragePortable.ts +793 -0
  1630. package/utils/sessionTitle.ts +129 -0
  1631. package/utils/sessionUrl.ts +64 -0
  1632. package/utils/set.ts +53 -0
  1633. package/utils/settings/allErrors.ts +32 -0
  1634. package/utils/settings/applySettingsChange.ts +92 -0
  1635. package/utils/settings/changeDetector.ts +488 -0
  1636. package/utils/settings/constants.ts +202 -0
  1637. package/utils/settings/internalWrites.ts +37 -0
  1638. package/utils/settings/managedPath.ts +34 -0
  1639. package/utils/settings/mdm/constants.ts +81 -0
  1640. package/utils/settings/mdm/rawRead.ts +130 -0
  1641. package/utils/settings/mdm/settings.ts +316 -0
  1642. package/utils/settings/permissionValidation.ts +262 -0
  1643. package/utils/settings/pluginOnlyPolicy.ts +60 -0
  1644. package/utils/settings/schemaOutput.ts +8 -0
  1645. package/utils/settings/settings.ts +1015 -0
  1646. package/utils/settings/settingsCache.ts +80 -0
  1647. package/utils/settings/toolValidationConfig.ts +103 -0
  1648. package/utils/settings/types.ts +1148 -0
  1649. package/utils/settings/validateEditTool.ts +45 -0
  1650. package/utils/settings/validation.ts +265 -0
  1651. package/utils/settings/validationTips.ts +164 -0
  1652. package/utils/shell/bashProvider.ts +255 -0
  1653. package/utils/shell/outputLimits.ts +14 -0
  1654. package/utils/shell/powershellDetection.ts +107 -0
  1655. package/utils/shell/powershellProvider.ts +123 -0
  1656. package/utils/shell/prefix.ts +367 -0
  1657. package/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1658. package/utils/shell/resolveDefaultShell.ts +14 -0
  1659. package/utils/shell/shellProvider.ts +33 -0
  1660. package/utils/shell/shellToolUtils.ts +22 -0
  1661. package/utils/shell/specPrefix.ts +241 -0
  1662. package/utils/shellConfig.ts +167 -0
  1663. package/utils/sideQuery.ts +222 -0
  1664. package/utils/sideQuestion.ts +155 -0
  1665. package/utils/signal.ts +43 -0
  1666. package/utils/sinks.ts +16 -0
  1667. package/utils/skills/skillChangeDetector.ts +311 -0
  1668. package/utils/slashCommandParsing.ts +60 -0
  1669. package/utils/sleep.ts +84 -0
  1670. package/utils/sliceAnsi.ts +91 -0
  1671. package/utils/slowOperations.ts +286 -0
  1672. package/utils/standaloneAgent.ts +23 -0
  1673. package/utils/startupProfiler.ts +194 -0
  1674. package/utils/staticRender.tsx +116 -0
  1675. package/utils/stats.ts +1061 -0
  1676. package/utils/statsCache.ts +434 -0
  1677. package/utils/status.tsx +362 -0
  1678. package/utils/statusNoticeDefinitions.tsx +198 -0
  1679. package/utils/statusNoticeHelpers.ts +20 -0
  1680. package/utils/stream.ts +76 -0
  1681. package/utils/streamJsonStdoutGuard.ts +123 -0
  1682. package/utils/streamlinedTransform.ts +201 -0
  1683. package/utils/stringUtils.ts +235 -0
  1684. package/utils/subprocessEnv.ts +99 -0
  1685. package/utils/suggestions/commandSuggestions.ts +567 -0
  1686. package/utils/suggestions/directoryCompletion.ts +263 -0
  1687. package/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1688. package/utils/suggestions/skillUsageTracking.ts +55 -0
  1689. package/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1690. package/utils/swarm/It2SetupPrompt.tsx +380 -0
  1691. package/utils/swarm/backends/ITermBackend.ts +370 -0
  1692. package/utils/swarm/backends/InProcessBackend.ts +339 -0
  1693. package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1694. package/utils/swarm/backends/TmuxBackend.ts +764 -0
  1695. package/utils/swarm/backends/detection.ts +128 -0
  1696. package/utils/swarm/backends/it2Setup.ts +245 -0
  1697. package/utils/swarm/backends/registry.ts +464 -0
  1698. package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1699. package/utils/swarm/backends/types.ts +311 -0
  1700. package/utils/swarm/constants.ts +33 -0
  1701. package/utils/swarm/inProcessRunner.ts +1552 -0
  1702. package/utils/swarm/leaderPermissionBridge.ts +54 -0
  1703. package/utils/swarm/permissionSync.ts +928 -0
  1704. package/utils/swarm/reconnection.ts +119 -0
  1705. package/utils/swarm/spawnInProcess.ts +328 -0
  1706. package/utils/swarm/spawnUtils.ts +146 -0
  1707. package/utils/swarm/teamHelpers.ts +683 -0
  1708. package/utils/swarm/teammateInit.ts +129 -0
  1709. package/utils/swarm/teammateLayoutManager.ts +107 -0
  1710. package/utils/swarm/teammateModel.ts +10 -0
  1711. package/utils/swarm/teammatePromptAddendum.ts +18 -0
  1712. package/utils/systemDirectories.ts +74 -0
  1713. package/utils/systemPrompt.ts +123 -0
  1714. package/utils/systemPromptType.ts +14 -0
  1715. package/utils/systemTheme.ts +119 -0
  1716. package/utils/taggedId.ts +54 -0
  1717. package/utils/task/TaskOutput.ts +390 -0
  1718. package/utils/task/diskOutput.ts +451 -0
  1719. package/utils/task/framework.ts +308 -0
  1720. package/utils/task/outputFormatting.ts +38 -0
  1721. package/utils/task/sdkProgress.ts +36 -0
  1722. package/utils/tasks.ts +862 -0
  1723. package/utils/teamDiscovery.ts +81 -0
  1724. package/utils/teamMemoryOps.ts +88 -0
  1725. package/utils/teammate.ts +292 -0
  1726. package/utils/teammateContext.ts +96 -0
  1727. package/utils/teammateMailbox.ts +1183 -0
  1728. package/utils/telemetry/betaSessionTracing.ts +491 -0
  1729. package/utils/telemetry/bigqueryExporter.ts +252 -0
  1730. package/utils/telemetry/events.ts +75 -0
  1731. package/utils/telemetry/instrumentation.ts +825 -0
  1732. package/utils/telemetry/logger.ts +26 -0
  1733. package/utils/telemetry/perfettoTracing.ts +1120 -0
  1734. package/utils/telemetry/pluginTelemetry.ts +289 -0
  1735. package/utils/telemetry/sessionTracing.ts +927 -0
  1736. package/utils/telemetry/skillLoadedEvent.ts +39 -0
  1737. package/utils/telemetryAttributes.ts +71 -0
  1738. package/utils/teleport/api.ts +466 -0
  1739. package/utils/teleport/environmentSelection.ts +77 -0
  1740. package/utils/teleport/environments.ts +120 -0
  1741. package/utils/teleport/gitBundle.ts +292 -0
  1742. package/utils/teleport.tsx +1226 -0
  1743. package/utils/tempfile.ts +31 -0
  1744. package/utils/terminal.ts +131 -0
  1745. package/utils/terminalPanel.ts +191 -0
  1746. package/utils/textHighlighting.ts +166 -0
  1747. package/utils/theme.ts +639 -0
  1748. package/utils/thinking.ts +162 -0
  1749. package/utils/timeouts.ts +39 -0
  1750. package/utils/tmuxSocket.ts +427 -0
  1751. package/utils/todo/types.ts +18 -0
  1752. package/utils/tokenBudget.ts +73 -0
  1753. package/utils/tokens.ts +261 -0
  1754. package/utils/toolErrors.ts +132 -0
  1755. package/utils/toolPool.ts +79 -0
  1756. package/utils/toolResultStorage.ts +1040 -0
  1757. package/utils/toolSchemaCache.ts +26 -0
  1758. package/utils/toolSearch.ts +756 -0
  1759. package/utils/transcriptSearch.ts +202 -0
  1760. package/utils/treeify.ts +170 -0
  1761. package/utils/truncate.ts +179 -0
  1762. package/utils/ultraplan/ccrSession.ts +349 -0
  1763. package/utils/ultraplan/keyword.ts +127 -0
  1764. package/utils/unaryLogging.ts +39 -0
  1765. package/utils/undercover.ts +89 -0
  1766. package/utils/user.ts +194 -0
  1767. package/utils/userAgent.ts +10 -0
  1768. package/utils/userConfig.ts +181 -0
  1769. package/utils/userPromptKeywords.ts +27 -0
  1770. package/utils/uuid.ts +27 -0
  1771. package/utils/warningHandler.ts +121 -0
  1772. package/utils/which.ts +82 -0
  1773. package/utils/windowsPaths.ts +173 -0
  1774. package/utils/withResolvers.ts +13 -0
  1775. package/utils/words.ts +800 -0
  1776. package/utils/workloadContext.ts +57 -0
  1777. package/utils/worktree.ts +1519 -0
  1778. package/utils/worktreeModeEnabled.ts +11 -0
  1779. package/utils/xdg.ts +65 -0
  1780. package/utils/xml.ts +16 -0
  1781. package/utils/yaml.ts +15 -0
  1782. package/utils/zodToJsonSchema.ts +23 -0
@@ -0,0 +1,1382 @@
1
+ import { feature } from 'bun:bundle'
2
+ import type { Anthropic } from '@anthropic-ai/sdk'
3
+ import {
4
+ getSystemPrompt,
5
+ SYSTEM_PROMPT_DYNAMIC_BOUNDARY,
6
+ } from 'src/constants/prompts.js'
7
+ import { microcompactMessages } from 'src/services/compact/microCompact.js'
8
+ import { getSdkBetas } from '../bootstrap/state.js'
9
+ import { getCommandName } from '../commands.js'
10
+ import { getSystemContext } from '../context.js'
11
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from '../services/analytics/growthbook.js'
12
+ import {
13
+ AUTOCOMPACT_BUFFER_TOKENS,
14
+ getEffectiveContextWindowSize,
15
+ isAutoCompactEnabled,
16
+ MANUAL_COMPACT_BUFFER_TOKENS,
17
+ } from '../services/compact/autoCompact.js'
18
+ import {
19
+ countMessagesTokensWithAPI,
20
+ countTokensViaHaikuFallback,
21
+ roughTokenCountEstimation,
22
+ } from '../services/tokenEstimation.js'
23
+ import { estimateSkillFrontmatterTokens } from '../skills/loadSkillsDir.js'
24
+ import {
25
+ findToolByName,
26
+ type Tool,
27
+ type ToolPermissionContext,
28
+ type Tools,
29
+ type ToolUseContext,
30
+ toolMatchesName,
31
+ } from '../Tool.js'
32
+ import type {
33
+ AgentDefinition,
34
+ AgentDefinitionsResult,
35
+ } from '../tools/AgentTool/loadAgentsDir.js'
36
+ import { SKILL_TOOL_NAME } from '../tools/SkillTool/constants.js'
37
+ import {
38
+ getLimitedSkillToolCommands,
39
+ getSkillToolInfo as getSlashCommandInfo,
40
+ } from '../tools/SkillTool/prompt.js'
41
+ import type {
42
+ AssistantMessage,
43
+ AttachmentMessage,
44
+ Message,
45
+ NormalizedAssistantMessage,
46
+ NormalizedUserMessage,
47
+ UserMessage,
48
+ } from '../types/message.js'
49
+ import { toolToAPISchema } from './api.js'
50
+ import { filterInjectedMemoryFiles, getMemoryFiles } from './claudemd.js'
51
+ import { getContextWindowForModel } from './context.js'
52
+ import { getCwd } from './cwd.js'
53
+ import { logForDebugging } from './debug.js'
54
+ import { isEnvTruthy } from './envUtils.js'
55
+ import { errorMessage, toError } from './errors.js'
56
+ import { logError } from './log.js'
57
+ import { normalizeMessagesForAPI } from './messages.js'
58
+ import { getRuntimeMainLoopModel } from './model/model.js'
59
+ import type { SettingSource } from './settings/constants.js'
60
+ import { jsonStringify } from './slowOperations.js'
61
+ import { buildEffectiveSystemPrompt } from './systemPrompt.js'
62
+ import type { Theme } from './theme.js'
63
+ import { getCurrentUsage } from './tokens.js'
64
+
65
+ const RESERVED_CATEGORY_NAME = 'Autocompact buffer'
66
+ const MANUAL_COMPACT_BUFFER_NAME = 'Compact buffer'
67
+
68
+ /**
69
+ * Fixed token overhead added by the API when tools are present.
70
+ * The API adds a tool prompt preamble (~500 tokens) once per API call when tools are present.
71
+ * When we count tools individually via the token counting API, each call includes this overhead,
72
+ * leading to N × overhead instead of 1 × overhead for N tools.
73
+ * We subtract this overhead from per-tool counts to show accurate tool content sizes.
74
+ */
75
+ export const TOOL_TOKEN_COUNT_OVERHEAD = 500
76
+
77
+ async function countTokensWithFallback(
78
+ messages: Anthropic.Beta.Messages.BetaMessageParam[],
79
+ tools: Anthropic.Beta.Messages.BetaToolUnion[],
80
+ ): Promise<number | null> {
81
+ try {
82
+ const result = await countMessagesTokensWithAPI(messages, tools)
83
+ if (result !== null) {
84
+ return result
85
+ }
86
+ logForDebugging(
87
+ `countTokensWithFallback: API returned null, trying haiku fallback (${tools.length} tools)`,
88
+ )
89
+ } catch (err) {
90
+ logForDebugging(`countTokensWithFallback: API failed: ${errorMessage(err)}`)
91
+ logError(err)
92
+ }
93
+
94
+ try {
95
+ const fallbackResult = await countTokensViaHaikuFallback(messages, tools)
96
+ if (fallbackResult === null) {
97
+ logForDebugging(
98
+ `countTokensWithFallback: haiku fallback also returned null (${tools.length} tools)`,
99
+ )
100
+ }
101
+ return fallbackResult
102
+ } catch (err) {
103
+ logForDebugging(
104
+ `countTokensWithFallback: haiku fallback failed: ${errorMessage(err)}`,
105
+ )
106
+ logError(err)
107
+ return null
108
+ }
109
+ }
110
+
111
+ interface ContextCategory {
112
+ name: string
113
+ tokens: number
114
+ color: keyof Theme
115
+ /** When true, these tokens are deferred and don't count toward context usage */
116
+ isDeferred?: boolean
117
+ }
118
+
119
+ interface GridSquare {
120
+ color: keyof Theme
121
+ isFilled: boolean
122
+ categoryName: string
123
+ tokens: number
124
+ percentage: number
125
+ squareFullness: number // 0-1 representing how full this individual square is
126
+ }
127
+
128
+ interface MemoryFile {
129
+ path: string
130
+ type: string
131
+ tokens: number
132
+ }
133
+
134
+ interface McpTool {
135
+ name: string
136
+ serverName: string
137
+ tokens: number
138
+ isLoaded?: boolean
139
+ }
140
+
141
+ export interface DeferredBuiltinTool {
142
+ name: string
143
+ tokens: number
144
+ isLoaded: boolean
145
+ }
146
+
147
+ export interface SystemToolDetail {
148
+ name: string
149
+ tokens: number
150
+ }
151
+
152
+ export interface SystemPromptSectionDetail {
153
+ name: string
154
+ tokens: number
155
+ }
156
+
157
+ interface Agent {
158
+ agentType: string
159
+ source: SettingSource | 'built-in' | 'plugin'
160
+ tokens: number
161
+ }
162
+
163
+ interface SlashCommandInfo {
164
+ readonly totalCommands: number
165
+ readonly includedCommands: number
166
+ readonly tokens: number
167
+ }
168
+
169
+ /** Individual skill detail for context display */
170
+ interface SkillFrontmatter {
171
+ name: string
172
+ source: SettingSource | 'plugin'
173
+ tokens: number
174
+ }
175
+
176
+ /**
177
+ * Information about skills included in the context window.
178
+ */
179
+ interface SkillInfo {
180
+ /** Total number of available skills */
181
+ readonly totalSkills: number
182
+ /** Number of skills included within token budget */
183
+ readonly includedSkills: number
184
+ /** Total tokens consumed by skills */
185
+ readonly tokens: number
186
+ /** Individual skill details */
187
+ readonly skillFrontmatter: SkillFrontmatter[]
188
+ }
189
+
190
+ export interface ContextData {
191
+ readonly categories: ContextCategory[]
192
+ readonly totalTokens: number
193
+ readonly maxTokens: number
194
+ readonly rawMaxTokens: number
195
+ readonly percentage: number
196
+ readonly gridRows: GridSquare[][]
197
+ readonly model: string
198
+ readonly memoryFiles: MemoryFile[]
199
+ readonly mcpTools: McpTool[]
200
+ /** Ant-only: per-tool breakdown of deferred built-in tools */
201
+ readonly deferredBuiltinTools?: DeferredBuiltinTool[]
202
+ /** Ant-only: per-tool breakdown of always-loaded built-in tools */
203
+ readonly systemTools?: SystemToolDetail[]
204
+ /** Ant-only: per-section breakdown of system prompt */
205
+ readonly systemPromptSections?: SystemPromptSectionDetail[]
206
+ readonly agents: Agent[]
207
+ readonly slashCommands?: SlashCommandInfo
208
+ /** Skill statistics */
209
+ readonly skills?: SkillInfo
210
+ readonly autoCompactThreshold?: number
211
+ readonly isAutoCompactEnabled: boolean
212
+ messageBreakdown?: {
213
+ toolCallTokens: number
214
+ toolResultTokens: number
215
+ attachmentTokens: number
216
+ assistantMessageTokens: number
217
+ userMessageTokens: number
218
+ toolCallsByType: Array<{
219
+ name: string
220
+ callTokens: number
221
+ resultTokens: number
222
+ }>
223
+ attachmentsByType: Array<{ name: string; tokens: number }>
224
+ }
225
+ /** Actual token usage from last API response (if available) */
226
+ readonly apiUsage: {
227
+ input_tokens: number
228
+ output_tokens: number
229
+ cache_creation_input_tokens: number
230
+ cache_read_input_tokens: number
231
+ } | null
232
+ }
233
+
234
+ export async function countToolDefinitionTokens(
235
+ tools: Tools,
236
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
237
+ agentInfo: AgentDefinitionsResult | null,
238
+ model?: string,
239
+ ): Promise<number> {
240
+ const toolSchemas = await Promise.all(
241
+ tools.map(tool =>
242
+ toolToAPISchema(tool, {
243
+ getToolPermissionContext,
244
+ tools,
245
+ agents: agentInfo?.activeAgents ?? [],
246
+ model,
247
+ }),
248
+ ),
249
+ )
250
+ const result = await countTokensWithFallback([], toolSchemas)
251
+ if (result === null || result === 0) {
252
+ const toolNames = tools.map(t => t.name).join(', ')
253
+ logForDebugging(
254
+ `countToolDefinitionTokens returned ${result} for ${tools.length} tools: ${toolNames.slice(0, 100)}${toolNames.length > 100 ? '...' : ''}`,
255
+ )
256
+ }
257
+ return result ?? 0
258
+ }
259
+
260
+ /** Extract a human-readable name from a system prompt section's content */
261
+ function extractSectionName(content: string): string {
262
+ // Try to find first markdown heading
263
+ const headingMatch = content.match(/^#+\s+(.+)$/m)
264
+ if (headingMatch) {
265
+ return headingMatch[1]!.trim()
266
+ }
267
+ // Fall back to a truncated preview of the first non-empty line
268
+ const firstLine = content.split('\n').find(l => l.trim().length > 0) ?? ''
269
+ return firstLine.length > 40 ? firstLine.slice(0, 40) + '…' : firstLine
270
+ }
271
+
272
+ async function countSystemTokens(
273
+ effectiveSystemPrompt: readonly string[],
274
+ ): Promise<{
275
+ systemPromptTokens: number
276
+ systemPromptSections: SystemPromptSectionDetail[]
277
+ }> {
278
+ // Get system context (gitStatus, etc.) which is always included
279
+ const systemContext = await getSystemContext()
280
+
281
+ // Build named entries: system prompt parts + system context values
282
+ // Skip empty strings and the global-cache boundary marker
283
+ const namedEntries: Array<{ name: string; content: string }> = [
284
+ ...effectiveSystemPrompt
285
+ .filter(
286
+ content =>
287
+ content.length > 0 && content !== SYSTEM_PROMPT_DYNAMIC_BOUNDARY,
288
+ )
289
+ .map(content => ({ name: extractSectionName(content), content })),
290
+ ...Object.entries(systemContext)
291
+ .filter(([, content]) => content.length > 0)
292
+ .map(([name, content]) => ({ name, content })),
293
+ ]
294
+
295
+ if (namedEntries.length < 1) {
296
+ return { systemPromptTokens: 0, systemPromptSections: [] }
297
+ }
298
+
299
+ const systemTokenCounts = await Promise.all(
300
+ namedEntries.map(({ content }) =>
301
+ countTokensWithFallback([{ role: 'user', content }], []),
302
+ ),
303
+ )
304
+
305
+ const systemPromptSections: SystemPromptSectionDetail[] = namedEntries.map(
306
+ (entry, i) => ({
307
+ name: entry.name,
308
+ tokens: systemTokenCounts[i] || 0,
309
+ }),
310
+ )
311
+
312
+ const systemPromptTokens = systemTokenCounts.reduce(
313
+ (sum: number, tokens) => sum + (tokens || 0),
314
+ 0,
315
+ )
316
+
317
+ return { systemPromptTokens, systemPromptSections }
318
+ }
319
+
320
+ async function countMemoryFileTokens(): Promise<{
321
+ memoryFileDetails: MemoryFile[]
322
+ claudeMdTokens: number
323
+ }> {
324
+ // Simple mode disables CLAUDE.md loading, so don't report tokens for them
325
+ if (isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
326
+ return { memoryFileDetails: [], claudeMdTokens: 0 }
327
+ }
328
+
329
+ const memoryFilesData = filterInjectedMemoryFiles(await getMemoryFiles())
330
+ const memoryFileDetails: MemoryFile[] = []
331
+ let claudeMdTokens = 0
332
+
333
+ if (memoryFilesData.length < 1) {
334
+ return {
335
+ memoryFileDetails: [],
336
+ claudeMdTokens: 0,
337
+ }
338
+ }
339
+
340
+ const claudeMdTokenCounts = await Promise.all(
341
+ memoryFilesData.map(async file => {
342
+ const tokens = await countTokensWithFallback(
343
+ [{ role: 'user', content: file.content }],
344
+ [],
345
+ )
346
+
347
+ return { file, tokens: tokens || 0 }
348
+ }),
349
+ )
350
+
351
+ for (const { file, tokens } of claudeMdTokenCounts) {
352
+ claudeMdTokens += tokens
353
+ memoryFileDetails.push({
354
+ path: file.path,
355
+ type: file.type,
356
+ tokens,
357
+ })
358
+ }
359
+
360
+ return { claudeMdTokens, memoryFileDetails }
361
+ }
362
+
363
+ async function countBuiltInToolTokens(
364
+ tools: Tools,
365
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
366
+ agentInfo: AgentDefinitionsResult | null,
367
+ model?: string,
368
+ messages?: Message[],
369
+ ): Promise<{
370
+ builtInToolTokens: number
371
+ deferredBuiltinDetails: DeferredBuiltinTool[]
372
+ deferredBuiltinTokens: number
373
+ systemToolDetails: SystemToolDetail[]
374
+ }> {
375
+ const builtInTools = tools.filter(tool => !tool.isMcp)
376
+ if (builtInTools.length < 1) {
377
+ return {
378
+ builtInToolTokens: 0,
379
+ deferredBuiltinDetails: [],
380
+ deferredBuiltinTokens: 0,
381
+ systemToolDetails: [],
382
+ }
383
+ }
384
+
385
+ // Check if tool search is enabled
386
+ const { isToolSearchEnabled } = await import('./toolSearch.js')
387
+ const { isDeferredTool } = await import('../tools/ToolSearchTool/prompt.js')
388
+ const isDeferred = await isToolSearchEnabled(
389
+ model ?? '',
390
+ tools,
391
+ getToolPermissionContext,
392
+ agentInfo?.activeAgents ?? [],
393
+ 'analyzeBuiltIn',
394
+ )
395
+
396
+ // Separate always-loaded and deferred builtin tools using dynamic isDeferredTool check
397
+ const alwaysLoadedTools = builtInTools.filter(t => !isDeferredTool(t))
398
+ const deferredBuiltinTools = builtInTools.filter(t => isDeferredTool(t))
399
+
400
+ // Count always-loaded tools
401
+ const alwaysLoadedTokens =
402
+ alwaysLoadedTools.length > 0
403
+ ? await countToolDefinitionTokens(
404
+ alwaysLoadedTools,
405
+ getToolPermissionContext,
406
+ agentInfo,
407
+ model,
408
+ )
409
+ : 0
410
+
411
+ // Build per-tool breakdown for always-loaded tools (ant-only, proportional
412
+ // split of the bulk count based on rough schema size estimation). Excludes
413
+ // SkillTool since its tokens are shown in the separate Skills category.
414
+ let systemToolDetails: SystemToolDetail[] = []
415
+ if (process.env.USER_TYPE === 'ant') {
416
+ const toolsForBreakdown = alwaysLoadedTools.filter(
417
+ t => !toolMatchesName(t, SKILL_TOOL_NAME),
418
+ )
419
+ if (toolsForBreakdown.length > 0) {
420
+ const estimates = toolsForBreakdown.map(t =>
421
+ roughTokenCountEstimation(jsonStringify(t.inputSchema ?? {})),
422
+ )
423
+ const estimateTotal = estimates.reduce((s, e) => s + e, 0) || 1
424
+ const distributable = Math.max(
425
+ 0,
426
+ alwaysLoadedTokens - TOOL_TOKEN_COUNT_OVERHEAD,
427
+ )
428
+ systemToolDetails = toolsForBreakdown
429
+ .map((t, i) => ({
430
+ name: t.name,
431
+ tokens: Math.round((estimates[i]! / estimateTotal) * distributable),
432
+ }))
433
+ .sort((a, b) => b.tokens - a.tokens)
434
+ }
435
+ }
436
+
437
+ // Count deferred builtin tools individually for details
438
+ const deferredBuiltinDetails: DeferredBuiltinTool[] = []
439
+ let loadedDeferredTokens = 0
440
+ let totalDeferredTokens = 0
441
+
442
+ if (deferredBuiltinTools.length > 0 && isDeferred) {
443
+ // Find which deferred tools have been used in messages
444
+ const loadedToolNames = new Set<string>()
445
+ if (messages) {
446
+ const deferredToolNameSet = new Set(deferredBuiltinTools.map(t => t.name))
447
+ for (const msg of messages) {
448
+ if (msg.type === 'assistant') {
449
+ for (const block of msg.message.content) {
450
+ if (
451
+ 'type' in block &&
452
+ block.type === 'tool_use' &&
453
+ 'name' in block &&
454
+ typeof block.name === 'string' &&
455
+ deferredToolNameSet.has(block.name)
456
+ ) {
457
+ loadedToolNames.add(block.name)
458
+ }
459
+ }
460
+ }
461
+ }
462
+ }
463
+
464
+ // Count each deferred tool
465
+ const tokensByTool = await Promise.all(
466
+ deferredBuiltinTools.map(t =>
467
+ countToolDefinitionTokens(
468
+ [t],
469
+ getToolPermissionContext,
470
+ agentInfo,
471
+ model,
472
+ ),
473
+ ),
474
+ )
475
+
476
+ for (const [i, tool] of deferredBuiltinTools.entries()) {
477
+ const tokens = Math.max(
478
+ 0,
479
+ (tokensByTool[i] || 0) - TOOL_TOKEN_COUNT_OVERHEAD,
480
+ )
481
+ const isLoaded = loadedToolNames.has(tool.name)
482
+ deferredBuiltinDetails.push({
483
+ name: tool.name,
484
+ tokens,
485
+ isLoaded,
486
+ })
487
+ totalDeferredTokens += tokens
488
+ if (isLoaded) {
489
+ loadedDeferredTokens += tokens
490
+ }
491
+ }
492
+ } else if (deferredBuiltinTools.length > 0) {
493
+ // Tool search not enabled - count deferred tools as regular
494
+ const deferredTokens = await countToolDefinitionTokens(
495
+ deferredBuiltinTools,
496
+ getToolPermissionContext,
497
+ agentInfo,
498
+ model,
499
+ )
500
+ return {
501
+ builtInToolTokens: alwaysLoadedTokens + deferredTokens,
502
+ deferredBuiltinDetails: [],
503
+ deferredBuiltinTokens: 0,
504
+ systemToolDetails,
505
+ }
506
+ }
507
+
508
+ return {
509
+ // When deferred, only count always-loaded tools + any loaded deferred tools
510
+ builtInToolTokens: alwaysLoadedTokens + loadedDeferredTokens,
511
+ deferredBuiltinDetails,
512
+ deferredBuiltinTokens: totalDeferredTokens - loadedDeferredTokens,
513
+ systemToolDetails,
514
+ }
515
+ }
516
+
517
+ function findSkillTool(tools: Tools): Tool | undefined {
518
+ return findToolByName(tools, SKILL_TOOL_NAME)
519
+ }
520
+
521
+ async function countSlashCommandTokens(
522
+ tools: Tools,
523
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
524
+ agentInfo: AgentDefinitionsResult | null,
525
+ ): Promise<{
526
+ slashCommandTokens: number
527
+ commandInfo: { totalCommands: number; includedCommands: number }
528
+ }> {
529
+ const info = await getSlashCommandInfo(getCwd())
530
+
531
+ const slashCommandTool = findSkillTool(tools)
532
+ if (!slashCommandTool) {
533
+ return {
534
+ slashCommandTokens: 0,
535
+ commandInfo: { totalCommands: 0, includedCommands: 0 },
536
+ }
537
+ }
538
+
539
+ const slashCommandTokens = await countToolDefinitionTokens(
540
+ [slashCommandTool],
541
+ getToolPermissionContext,
542
+ agentInfo,
543
+ )
544
+
545
+ return {
546
+ slashCommandTokens,
547
+ commandInfo: {
548
+ totalCommands: info.totalCommands,
549
+ includedCommands: info.includedCommands,
550
+ },
551
+ }
552
+ }
553
+
554
+ async function countSkillTokens(
555
+ tools: Tools,
556
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
557
+ agentInfo: AgentDefinitionsResult | null,
558
+ ): Promise<{
559
+ skillTokens: number
560
+ skillInfo: {
561
+ totalSkills: number
562
+ includedSkills: number
563
+ skillFrontmatter: SkillFrontmatter[]
564
+ }
565
+ }> {
566
+ try {
567
+ const skills = await getLimitedSkillToolCommands(getCwd())
568
+
569
+ const slashCommandTool = findSkillTool(tools)
570
+ if (!slashCommandTool) {
571
+ return {
572
+ skillTokens: 0,
573
+ skillInfo: { totalSkills: 0, includedSkills: 0, skillFrontmatter: [] },
574
+ }
575
+ }
576
+
577
+ // NOTE: This counts the entire SlashCommandTool (which includes both commands AND skills).
578
+ // This is the same tool counted by countSlashCommandTokens(), but we track it separately
579
+ // here for display purposes. These tokens should NOT be added to context categories
580
+ // to avoid double-counting.
581
+ const skillTokens = await countToolDefinitionTokens(
582
+ [slashCommandTool],
583
+ getToolPermissionContext,
584
+ agentInfo,
585
+ )
586
+
587
+ // Calculate per-skill token estimates based on frontmatter only
588
+ // (name, description, whenToUse) since full content is only loaded on invocation
589
+ const skillFrontmatter: SkillFrontmatter[] = skills.map(skill => ({
590
+ name: getCommandName(skill),
591
+ source: (skill.type === 'prompt' ? skill.source : 'plugin') as
592
+ | SettingSource
593
+ | 'plugin',
594
+ tokens: estimateSkillFrontmatterTokens(skill),
595
+ }))
596
+
597
+ return {
598
+ skillTokens,
599
+ skillInfo: {
600
+ totalSkills: skills.length,
601
+ includedSkills: skills.length,
602
+ skillFrontmatter,
603
+ },
604
+ }
605
+ } catch (error) {
606
+ logError(toError(error))
607
+
608
+ // Return zero values rather than failing the entire context analysis
609
+ return {
610
+ skillTokens: 0,
611
+ skillInfo: { totalSkills: 0, includedSkills: 0, skillFrontmatter: [] },
612
+ }
613
+ }
614
+ }
615
+
616
+ export async function countMcpToolTokens(
617
+ tools: Tools,
618
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
619
+ agentInfo: AgentDefinitionsResult | null,
620
+ model: string,
621
+ messages?: Message[],
622
+ ): Promise<{
623
+ mcpToolTokens: number
624
+ mcpToolDetails: McpTool[]
625
+ deferredToolTokens: number
626
+ loadedMcpToolNames: Set<string>
627
+ }> {
628
+ const mcpTools = tools.filter(tool => tool.isMcp)
629
+ const mcpToolDetails: McpTool[] = []
630
+ // Single bulk API call for all MCP tools (instead of N individual calls)
631
+ const totalTokensRaw = await countToolDefinitionTokens(
632
+ mcpTools,
633
+ getToolPermissionContext,
634
+ agentInfo,
635
+ model,
636
+ )
637
+ // Subtract the single overhead since we made one bulk call
638
+ const totalTokens = Math.max(
639
+ 0,
640
+ (totalTokensRaw || 0) - TOOL_TOKEN_COUNT_OVERHEAD,
641
+ )
642
+
643
+ // Estimate per-tool proportions for display using local estimation.
644
+ // Include name + description + input schema to match what toolToAPISchema
645
+ // sends — otherwise tools with similar schemas but different descriptions
646
+ // get identical counts (MCP tools share the same base Zod inputSchema).
647
+ const estimates = await Promise.all(
648
+ mcpTools.map(async t =>
649
+ roughTokenCountEstimation(
650
+ jsonStringify({
651
+ name: t.name,
652
+ description: await t.prompt({
653
+ getToolPermissionContext,
654
+ tools,
655
+ agents: agentInfo?.activeAgents ?? [],
656
+ }),
657
+ input_schema: t.inputJSONSchema ?? {},
658
+ }),
659
+ ),
660
+ ),
661
+ )
662
+ const estimateTotal = estimates.reduce((s, e) => s + e, 0) || 1
663
+ const mcpToolTokensByTool = estimates.map(e =>
664
+ Math.round((e / estimateTotal) * totalTokens),
665
+ )
666
+
667
+ // Check if tool search is enabled - if so, MCP tools are deferred
668
+ // isToolSearchEnabled handles threshold calculation internally for TstAuto mode
669
+ const { isToolSearchEnabled } = await import('./toolSearch.js')
670
+ const { isDeferredTool } = await import('../tools/ToolSearchTool/prompt.js')
671
+
672
+ const isDeferred = await isToolSearchEnabled(
673
+ model,
674
+ tools,
675
+ getToolPermissionContext,
676
+ agentInfo?.activeAgents ?? [],
677
+ 'analyzeMcp',
678
+ )
679
+
680
+ // Find MCP tools that have been used in messages (loaded via ToolSearchTool)
681
+ const loadedMcpToolNames = new Set<string>()
682
+ if (isDeferred && messages) {
683
+ const mcpToolNameSet = new Set(mcpTools.map(t => t.name))
684
+ for (const msg of messages) {
685
+ if (msg.type === 'assistant') {
686
+ for (const block of msg.message.content) {
687
+ if (
688
+ 'type' in block &&
689
+ block.type === 'tool_use' &&
690
+ 'name' in block &&
691
+ typeof block.name === 'string' &&
692
+ mcpToolNameSet.has(block.name)
693
+ ) {
694
+ loadedMcpToolNames.add(block.name)
695
+ }
696
+ }
697
+ }
698
+ }
699
+ }
700
+
701
+ // Build tool details with isLoaded flag
702
+ for (const [i, tool] of mcpTools.entries()) {
703
+ mcpToolDetails.push({
704
+ name: tool.name,
705
+ serverName: tool.name.split('__')[1] || 'unknown',
706
+ tokens: mcpToolTokensByTool[i]!,
707
+ isLoaded: loadedMcpToolNames.has(tool.name) || !isDeferredTool(tool),
708
+ })
709
+ }
710
+
711
+ // Calculate loaded vs deferred tokens
712
+ let loadedTokens = 0
713
+ let deferredTokens = 0
714
+ for (const detail of mcpToolDetails) {
715
+ if (detail.isLoaded) {
716
+ loadedTokens += detail.tokens
717
+ } else if (isDeferred) {
718
+ deferredTokens += detail.tokens
719
+ }
720
+ }
721
+
722
+ return {
723
+ // When deferred but some tools are loaded, count loaded tokens
724
+ mcpToolTokens: isDeferred ? loadedTokens : totalTokens,
725
+ mcpToolDetails,
726
+ // Track deferred tokens separately for display
727
+ deferredToolTokens: deferredTokens,
728
+ loadedMcpToolNames,
729
+ }
730
+ }
731
+
732
+ async function countCustomAgentTokens(agentDefinitions: {
733
+ activeAgents: AgentDefinition[]
734
+ }): Promise<{
735
+ agentTokens: number
736
+ agentDetails: Agent[]
737
+ }> {
738
+ const customAgents = agentDefinitions.activeAgents.filter(
739
+ a => a.source !== 'built-in',
740
+ )
741
+ const agentDetails: Agent[] = []
742
+ let agentTokens = 0
743
+
744
+ const tokenCounts = await Promise.all(
745
+ customAgents.map(agent =>
746
+ countTokensWithFallback(
747
+ [
748
+ {
749
+ role: 'user',
750
+ content: [agent.agentType, agent.whenToUse].join(' '),
751
+ },
752
+ ],
753
+ [],
754
+ ),
755
+ ),
756
+ )
757
+
758
+ for (const [i, agent] of customAgents.entries()) {
759
+ const tokens = tokenCounts[i] || 0
760
+ agentTokens += tokens || 0
761
+ agentDetails.push({
762
+ agentType: agent.agentType,
763
+ source: agent.source,
764
+ tokens: tokens || 0,
765
+ })
766
+ }
767
+ return { agentTokens, agentDetails }
768
+ }
769
+
770
+ type MessageBreakdown = {
771
+ totalTokens: number
772
+ toolCallTokens: number
773
+ toolResultTokens: number
774
+ attachmentTokens: number
775
+ assistantMessageTokens: number
776
+ userMessageTokens: number
777
+ toolCallsByType: Map<string, number>
778
+ toolResultsByType: Map<string, number>
779
+ attachmentsByType: Map<string, number>
780
+ }
781
+
782
+ function processAssistantMessage(
783
+ msg: AssistantMessage | NormalizedAssistantMessage,
784
+ breakdown: MessageBreakdown,
785
+ ): void {
786
+ // Process each content block individually
787
+ for (const block of msg.message.content) {
788
+ const blockStr = jsonStringify(block)
789
+ const blockTokens = roughTokenCountEstimation(blockStr)
790
+
791
+ if ('type' in block && block.type === 'tool_use') {
792
+ breakdown.toolCallTokens += blockTokens
793
+ const toolName = ('name' in block ? block.name : undefined) || 'unknown'
794
+ breakdown.toolCallsByType.set(
795
+ toolName,
796
+ (breakdown.toolCallsByType.get(toolName) || 0) + blockTokens,
797
+ )
798
+ } else {
799
+ // Text blocks or other non-tool content
800
+ breakdown.assistantMessageTokens += blockTokens
801
+ }
802
+ }
803
+ }
804
+
805
+ function processUserMessage(
806
+ msg: UserMessage | NormalizedUserMessage,
807
+ breakdown: MessageBreakdown,
808
+ toolUseIdToName: Map<string, string>,
809
+ ): void {
810
+ // Handle both string and array content
811
+ if (typeof msg.message.content === 'string') {
812
+ // Simple string content
813
+ const tokens = roughTokenCountEstimation(msg.message.content)
814
+ breakdown.userMessageTokens += tokens
815
+ return
816
+ }
817
+
818
+ // Process each content block individually
819
+ for (const block of msg.message.content) {
820
+ const blockStr = jsonStringify(block)
821
+ const blockTokens = roughTokenCountEstimation(blockStr)
822
+
823
+ if ('type' in block && block.type === 'tool_result') {
824
+ breakdown.toolResultTokens += blockTokens
825
+ const toolUseId = 'tool_use_id' in block ? block.tool_use_id : undefined
826
+ const toolName =
827
+ (toolUseId ? toolUseIdToName.get(toolUseId) : undefined) || 'unknown'
828
+ breakdown.toolResultsByType.set(
829
+ toolName,
830
+ (breakdown.toolResultsByType.get(toolName) || 0) + blockTokens,
831
+ )
832
+ } else {
833
+ // Text blocks or other non-tool content
834
+ breakdown.userMessageTokens += blockTokens
835
+ }
836
+ }
837
+ }
838
+
839
+ function processAttachment(
840
+ msg: AttachmentMessage,
841
+ breakdown: MessageBreakdown,
842
+ ): void {
843
+ const contentStr = jsonStringify(msg.attachment)
844
+ const tokens = roughTokenCountEstimation(contentStr)
845
+ breakdown.attachmentTokens += tokens
846
+ const attachType = msg.attachment.type || 'unknown'
847
+ breakdown.attachmentsByType.set(
848
+ attachType,
849
+ (breakdown.attachmentsByType.get(attachType) || 0) + tokens,
850
+ )
851
+ }
852
+
853
+ async function approximateMessageTokens(
854
+ messages: Message[],
855
+ ): Promise<MessageBreakdown> {
856
+ const microcompactResult = await microcompactMessages(messages)
857
+
858
+ // Initialize tracking
859
+ const breakdown: MessageBreakdown = {
860
+ totalTokens: 0,
861
+ toolCallTokens: 0,
862
+ toolResultTokens: 0,
863
+ attachmentTokens: 0,
864
+ assistantMessageTokens: 0,
865
+ userMessageTokens: 0,
866
+ toolCallsByType: new Map<string, number>(),
867
+ toolResultsByType: new Map<string, number>(),
868
+ attachmentsByType: new Map<string, number>(),
869
+ }
870
+
871
+ // Build a map of tool_use_id to tool_name for easier lookup
872
+ const toolUseIdToName = new Map<string, string>()
873
+ for (const msg of microcompactResult.messages) {
874
+ if (msg.type === 'assistant') {
875
+ for (const block of msg.message.content) {
876
+ if ('type' in block && block.type === 'tool_use') {
877
+ const toolUseId = 'id' in block ? block.id : undefined
878
+ const toolName =
879
+ ('name' in block ? block.name : undefined) || 'unknown'
880
+ if (toolUseId) {
881
+ toolUseIdToName.set(toolUseId, toolName)
882
+ }
883
+ }
884
+ }
885
+ }
886
+ }
887
+
888
+ // Process each message for detailed breakdown
889
+ for (const msg of microcompactResult.messages) {
890
+ if (msg.type === 'assistant') {
891
+ processAssistantMessage(msg, breakdown)
892
+ } else if (msg.type === 'user') {
893
+ processUserMessage(msg, breakdown, toolUseIdToName)
894
+ } else if (msg.type === 'attachment') {
895
+ processAttachment(msg, breakdown)
896
+ }
897
+ }
898
+
899
+ // Calculate total tokens using the API for accuracy
900
+ const approximateMessageTokens = await countTokensWithFallback(
901
+ normalizeMessagesForAPI(microcompactResult.messages).map(_ => {
902
+ if (_.type === 'assistant') {
903
+ return {
904
+ // Important: strip out fields like id, etc. -- the counting API errors if they're present
905
+ role: 'assistant',
906
+ content: _.message.content,
907
+ }
908
+ }
909
+ return _.message
910
+ }),
911
+ [],
912
+ )
913
+
914
+ breakdown.totalTokens = approximateMessageTokens ?? 0
915
+ return breakdown
916
+ }
917
+
918
+ export async function analyzeContextUsage(
919
+ messages: Message[],
920
+ model: string,
921
+ getToolPermissionContext: () => Promise<ToolPermissionContext>,
922
+ tools: Tools,
923
+ agentDefinitions: AgentDefinitionsResult,
924
+ terminalWidth?: number,
925
+ toolUseContext?: Pick<ToolUseContext, 'options'>,
926
+ mainThreadAgentDefinition?: AgentDefinition,
927
+ /** Original messages before microcompact, used to extract API usage */
928
+ originalMessages?: Message[],
929
+ ): Promise<ContextData> {
930
+ const runtimeModel = getRuntimeMainLoopModel({
931
+ permissionMode: (await getToolPermissionContext()).mode,
932
+ mainLoopModel: model,
933
+ })
934
+ // Get context window size
935
+ const contextWindow = getContextWindowForModel(runtimeModel, getSdkBetas())
936
+
937
+ // Build the effective system prompt using the shared utility
938
+ const defaultSystemPrompt = await getSystemPrompt(tools, runtimeModel)
939
+ const effectiveSystemPrompt = buildEffectiveSystemPrompt({
940
+ mainThreadAgentDefinition,
941
+ toolUseContext: toolUseContext ?? {
942
+ options: {} as ToolUseContext['options'],
943
+ },
944
+ customSystemPrompt: toolUseContext?.options.customSystemPrompt,
945
+ defaultSystemPrompt,
946
+ appendSystemPrompt: toolUseContext?.options.appendSystemPrompt,
947
+ })
948
+
949
+ // Critical operations that should not fail due to skills
950
+ const [
951
+ { systemPromptTokens, systemPromptSections },
952
+ { claudeMdTokens, memoryFileDetails },
953
+ {
954
+ builtInToolTokens,
955
+ deferredBuiltinDetails,
956
+ deferredBuiltinTokens,
957
+ systemToolDetails,
958
+ },
959
+ { mcpToolTokens, mcpToolDetails, deferredToolTokens },
960
+ { agentTokens, agentDetails },
961
+ { slashCommandTokens, commandInfo },
962
+ messageBreakdown,
963
+ ] = await Promise.all([
964
+ countSystemTokens(effectiveSystemPrompt),
965
+ countMemoryFileTokens(),
966
+ countBuiltInToolTokens(
967
+ tools,
968
+ getToolPermissionContext,
969
+ agentDefinitions,
970
+ runtimeModel,
971
+ messages,
972
+ ),
973
+ countMcpToolTokens(
974
+ tools,
975
+ getToolPermissionContext,
976
+ agentDefinitions,
977
+ runtimeModel,
978
+ messages,
979
+ ),
980
+ countCustomAgentTokens(agentDefinitions),
981
+ countSlashCommandTokens(tools, getToolPermissionContext, agentDefinitions),
982
+ approximateMessageTokens(messages),
983
+ ])
984
+
985
+ // Count skills separately with error isolation
986
+ const skillResult = await countSkillTokens(
987
+ tools,
988
+ getToolPermissionContext,
989
+ agentDefinitions,
990
+ )
991
+ const skillInfo = skillResult.skillInfo
992
+ // Use sum of individual skill token estimates (matches what's shown in details)
993
+ // rather than skillResult.skillTokens which includes tool schema overhead
994
+ const skillFrontmatterTokens = skillInfo.skillFrontmatter.reduce(
995
+ (sum, skill) => sum + skill.tokens,
996
+ 0,
997
+ )
998
+
999
+ const messageTokens = messageBreakdown.totalTokens
1000
+
1001
+ // Check if autocompact is enabled and calculate threshold
1002
+ const isAutoCompact = isAutoCompactEnabled()
1003
+ const autoCompactThreshold = isAutoCompact
1004
+ ? getEffectiveContextWindowSize(model) - AUTOCOMPACT_BUFFER_TOKENS
1005
+ : undefined
1006
+
1007
+ // Create categories
1008
+ const cats: ContextCategory[] = []
1009
+
1010
+ // System prompt is always shown first (fixed overhead)
1011
+ if (systemPromptTokens > 0) {
1012
+ cats.push({
1013
+ name: 'System prompt',
1014
+ tokens: systemPromptTokens,
1015
+ color: 'promptBorder',
1016
+ })
1017
+ }
1018
+
1019
+ // Built-in tools right after system prompt (skills shown separately below)
1020
+ // Ant users get a per-tool breakdown via systemToolDetails
1021
+ const systemToolsTokens = builtInToolTokens - skillFrontmatterTokens
1022
+ if (systemToolsTokens > 0) {
1023
+ cats.push({
1024
+ name:
1025
+ process.env.USER_TYPE === 'ant'
1026
+ ? '[ANT-ONLY] System tools'
1027
+ : 'System tools',
1028
+ tokens: systemToolsTokens,
1029
+ color: 'inactive',
1030
+ })
1031
+ }
1032
+
1033
+ // MCP tools after system tools
1034
+ if (mcpToolTokens > 0) {
1035
+ cats.push({
1036
+ name: 'MCP tools',
1037
+ tokens: mcpToolTokens,
1038
+ color: 'cyan_FOR_SUBAGENTS_ONLY',
1039
+ })
1040
+ }
1041
+
1042
+ // Show deferred MCP tools (when tool search is enabled)
1043
+ // These don't count toward context usage but we show them for visibility
1044
+ if (deferredToolTokens > 0) {
1045
+ cats.push({
1046
+ name: 'MCP tools (deferred)',
1047
+ tokens: deferredToolTokens,
1048
+ color: 'inactive',
1049
+ isDeferred: true,
1050
+ })
1051
+ }
1052
+
1053
+ // Show deferred builtin tools (when tool search is enabled)
1054
+ if (deferredBuiltinTokens > 0) {
1055
+ cats.push({
1056
+ name: 'System tools (deferred)',
1057
+ tokens: deferredBuiltinTokens,
1058
+ color: 'inactive',
1059
+ isDeferred: true,
1060
+ })
1061
+ }
1062
+
1063
+ // Custom agents after MCP tools
1064
+ if (agentTokens > 0) {
1065
+ cats.push({
1066
+ name: 'Custom agents',
1067
+ tokens: agentTokens,
1068
+ color: 'permission',
1069
+ })
1070
+ }
1071
+
1072
+ // Memory files after custom agents
1073
+ if (claudeMdTokens > 0) {
1074
+ cats.push({
1075
+ name: 'Memory files',
1076
+ tokens: claudeMdTokens,
1077
+ color: 'claude',
1078
+ })
1079
+ }
1080
+
1081
+ // Skills after memory files
1082
+ if (skillFrontmatterTokens > 0) {
1083
+ cats.push({
1084
+ name: 'Skills',
1085
+ tokens: skillFrontmatterTokens,
1086
+ color: 'warning',
1087
+ })
1088
+ }
1089
+
1090
+ if (messageTokens !== null && messageTokens > 0) {
1091
+ cats.push({
1092
+ name: 'Messages',
1093
+ tokens: messageTokens,
1094
+ color: 'purple_FOR_SUBAGENTS_ONLY',
1095
+ })
1096
+ }
1097
+
1098
+ // Calculate actual content usage (before adding reserved buffers)
1099
+ // Exclude deferred categories from the usage calculation
1100
+ const actualUsage = cats.reduce(
1101
+ (sum, cat) => sum + (cat.isDeferred ? 0 : cat.tokens),
1102
+ 0,
1103
+ )
1104
+
1105
+ // Reserved space after messages (not counted in actualUsage shown to user).
1106
+ // Under reactive-only mode (cobalt_raccoon), proactive autocompact never
1107
+ // fires and the reserved buffer is a lie — skip it entirely and let Free
1108
+ // space fill the grid. feature() guard keeps the flag string out of
1109
+ // external builds. Same for context-collapse (marble_origami) — collapse
1110
+ // owns the threshold ladder and autocompact is suppressed in
1111
+ // shouldAutoCompact, so the 33k buffer shown here would be a lie too.
1112
+ let reservedTokens = 0
1113
+ let skipReservedBuffer = false
1114
+ if (feature('REACTIVE_COMPACT')) {
1115
+ if (getFeatureValue_CACHED_MAY_BE_STALE('tengu_cobalt_raccoon', false)) {
1116
+ skipReservedBuffer = true
1117
+ }
1118
+ }
1119
+ if (feature('CONTEXT_COLLAPSE')) {
1120
+ /* eslint-disable @typescript-eslint/no-require-imports */
1121
+ const { isContextCollapseEnabled } =
1122
+ require('../services/contextCollapse/index.js') as typeof import('../services/contextCollapse/index.js')
1123
+ /* eslint-enable @typescript-eslint/no-require-imports */
1124
+ if (isContextCollapseEnabled()) {
1125
+ skipReservedBuffer = true
1126
+ }
1127
+ }
1128
+ if (skipReservedBuffer) {
1129
+ // No buffer category pushed — reactive compaction is transparent and
1130
+ // doesn't need a visible reservation in the grid.
1131
+ } else if (isAutoCompact && autoCompactThreshold !== undefined) {
1132
+ // Autocompact buffer (from effective context)
1133
+ reservedTokens = contextWindow - autoCompactThreshold
1134
+ cats.push({
1135
+ name: RESERVED_CATEGORY_NAME,
1136
+ tokens: reservedTokens,
1137
+ color: 'inactive',
1138
+ })
1139
+ } else if (!isAutoCompact) {
1140
+ // Compact buffer reserve (3k from actual context limit)
1141
+ reservedTokens = MANUAL_COMPACT_BUFFER_TOKENS
1142
+ cats.push({
1143
+ name: MANUAL_COMPACT_BUFFER_NAME,
1144
+ tokens: reservedTokens,
1145
+ color: 'inactive',
1146
+ })
1147
+ }
1148
+
1149
+ // Calculate free space (subtract both actual usage and reserved buffer)
1150
+ const freeTokens = Math.max(0, contextWindow - actualUsage - reservedTokens)
1151
+
1152
+ cats.push({
1153
+ name: 'Free space',
1154
+ tokens: freeTokens,
1155
+ color: 'promptBorder',
1156
+ })
1157
+
1158
+ // Total for display (everything except free space)
1159
+ const totalIncludingReserved = actualUsage
1160
+
1161
+ // Extract API usage from original messages (if provided) to match status line
1162
+ // This uses the same source of truth as the status line for consistency
1163
+ const apiUsage = getCurrentUsage(originalMessages ?? messages)
1164
+
1165
+ // When API usage is available, use it for total to match status line calculation
1166
+ // Status line uses: input_tokens + cache_creation_input_tokens + cache_read_input_tokens
1167
+ const totalFromAPI = apiUsage
1168
+ ? apiUsage.input_tokens +
1169
+ apiUsage.cache_creation_input_tokens +
1170
+ apiUsage.cache_read_input_tokens
1171
+ : null
1172
+
1173
+ // Use API total if available, otherwise fall back to estimated total
1174
+ const finalTotalTokens = totalFromAPI ?? totalIncludingReserved
1175
+
1176
+ // Pre-calculate grid based on model context window and terminal width
1177
+ // For narrow screens (< 80 cols), use 5x5 for 200k models, 5x10 for 1M+ models
1178
+ // For normal screens, use 10x10 for 200k models, 20x10 for 1M+ models
1179
+ const isNarrowScreen = terminalWidth && terminalWidth < 80
1180
+ const GRID_WIDTH =
1181
+ contextWindow >= 1000000
1182
+ ? isNarrowScreen
1183
+ ? 5
1184
+ : 20
1185
+ : isNarrowScreen
1186
+ ? 5
1187
+ : 10
1188
+ const GRID_HEIGHT = contextWindow >= 1000000 ? 10 : isNarrowScreen ? 5 : 10
1189
+ const TOTAL_SQUARES = GRID_WIDTH * GRID_HEIGHT
1190
+
1191
+ // Filter out deferred categories - they don't take up actual context space
1192
+ // (e.g., MCP tools when tool search is enabled)
1193
+ const nonDeferredCats = cats.filter(cat => !cat.isDeferred)
1194
+
1195
+ // Calculate squares per category (use rawEffectiveMax for visualization to show full context)
1196
+ const categorySquares = nonDeferredCats.map(cat => ({
1197
+ ...cat,
1198
+ squares:
1199
+ cat.name === 'Free space'
1200
+ ? Math.round((cat.tokens / contextWindow) * TOTAL_SQUARES)
1201
+ : Math.max(1, Math.round((cat.tokens / contextWindow) * TOTAL_SQUARES)),
1202
+ percentageOfTotal: Math.round((cat.tokens / contextWindow) * 100),
1203
+ }))
1204
+
1205
+ // Helper function to create grid squares for a category
1206
+ function createCategorySquares(
1207
+ category: (typeof categorySquares)[0],
1208
+ ): GridSquare[] {
1209
+ const squares: GridSquare[] = []
1210
+ const exactSquares = (category.tokens / contextWindow) * TOTAL_SQUARES
1211
+ const wholeSquares = Math.floor(exactSquares)
1212
+ const fractionalPart = exactSquares - wholeSquares
1213
+
1214
+ for (let i = 0; i < category.squares; i++) {
1215
+ // Determine fullness: full squares get 1.0, partial square gets fractional amount
1216
+ let squareFullness = 1.0
1217
+ if (i === wholeSquares && fractionalPart > 0) {
1218
+ // This is the partial square
1219
+ squareFullness = fractionalPart
1220
+ }
1221
+
1222
+ squares.push({
1223
+ color: category.color,
1224
+ isFilled: true,
1225
+ categoryName: category.name,
1226
+ tokens: category.tokens,
1227
+ percentage: category.percentageOfTotal,
1228
+ squareFullness,
1229
+ })
1230
+ }
1231
+
1232
+ return squares
1233
+ }
1234
+
1235
+ // Build the grid as an array of squares with full metadata
1236
+ const gridSquares: GridSquare[] = []
1237
+
1238
+ // Separate reserved category for end placement (either autocompact or manual compact buffer)
1239
+ const reservedCategory = categorySquares.find(
1240
+ cat =>
1241
+ cat.name === RESERVED_CATEGORY_NAME ||
1242
+ cat.name === MANUAL_COMPACT_BUFFER_NAME,
1243
+ )
1244
+ const nonReservedCategories = categorySquares.filter(
1245
+ cat =>
1246
+ cat.name !== RESERVED_CATEGORY_NAME &&
1247
+ cat.name !== MANUAL_COMPACT_BUFFER_NAME &&
1248
+ cat.name !== 'Free space',
1249
+ )
1250
+
1251
+ // Add all non-reserved, non-free-space squares first
1252
+ for (const cat of nonReservedCategories) {
1253
+ const squares = createCategorySquares(cat)
1254
+ for (const square of squares) {
1255
+ if (gridSquares.length < TOTAL_SQUARES) {
1256
+ gridSquares.push(square)
1257
+ }
1258
+ }
1259
+ }
1260
+
1261
+ // Calculate how many squares are needed for reserved
1262
+ const reservedSquareCount = reservedCategory ? reservedCategory.squares : 0
1263
+
1264
+ // Fill with free space, leaving room for reserved at the end
1265
+ const freeSpaceCat = cats.find(c => c.name === 'Free space')
1266
+ const freeSpaceTarget = TOTAL_SQUARES - reservedSquareCount
1267
+
1268
+ while (gridSquares.length < freeSpaceTarget) {
1269
+ gridSquares.push({
1270
+ color: 'promptBorder',
1271
+ isFilled: true,
1272
+ categoryName: 'Free space',
1273
+ tokens: freeSpaceCat?.tokens || 0,
1274
+ percentage: freeSpaceCat
1275
+ ? Math.round((freeSpaceCat.tokens / contextWindow) * 100)
1276
+ : 0,
1277
+ squareFullness: 1.0, // Free space is always "full"
1278
+ })
1279
+ }
1280
+
1281
+ // Add reserved squares at the end
1282
+ if (reservedCategory) {
1283
+ const squares = createCategorySquares(reservedCategory)
1284
+ for (const square of squares) {
1285
+ if (gridSquares.length < TOTAL_SQUARES) {
1286
+ gridSquares.push(square)
1287
+ }
1288
+ }
1289
+ }
1290
+
1291
+ // Convert to rows for rendering
1292
+ const gridRows: GridSquare[][] = []
1293
+ for (let i = 0; i < GRID_HEIGHT; i++) {
1294
+ gridRows.push(gridSquares.slice(i * GRID_WIDTH, (i + 1) * GRID_WIDTH))
1295
+ }
1296
+
1297
+ // Format message breakdown (used by context suggestions for all users)
1298
+ // Combine tool calls and results, then get top 5
1299
+ const toolsMap = new Map<
1300
+ string,
1301
+ { callTokens: number; resultTokens: number }
1302
+ >()
1303
+
1304
+ // Add call tokens
1305
+ for (const [name, tokens] of messageBreakdown.toolCallsByType.entries()) {
1306
+ const existing = toolsMap.get(name) || { callTokens: 0, resultTokens: 0 }
1307
+ toolsMap.set(name, { ...existing, callTokens: tokens })
1308
+ }
1309
+
1310
+ // Add result tokens
1311
+ for (const [name, tokens] of messageBreakdown.toolResultsByType.entries()) {
1312
+ const existing = toolsMap.get(name) || { callTokens: 0, resultTokens: 0 }
1313
+ toolsMap.set(name, { ...existing, resultTokens: tokens })
1314
+ }
1315
+
1316
+ // Convert to array and sort by total tokens (calls + results)
1317
+ const toolsByTypeArray = Array.from(toolsMap.entries())
1318
+ .map(([name, { callTokens, resultTokens }]) => ({
1319
+ name,
1320
+ callTokens,
1321
+ resultTokens,
1322
+ }))
1323
+ .sort(
1324
+ (a, b) => b.callTokens + b.resultTokens - (a.callTokens + a.resultTokens),
1325
+ )
1326
+
1327
+ const attachmentsByTypeArray = Array.from(
1328
+ messageBreakdown.attachmentsByType.entries(),
1329
+ )
1330
+ .map(([name, tokens]) => ({ name, tokens }))
1331
+ .sort((a, b) => b.tokens - a.tokens)
1332
+
1333
+ const formattedMessageBreakdown = {
1334
+ toolCallTokens: messageBreakdown.toolCallTokens,
1335
+ toolResultTokens: messageBreakdown.toolResultTokens,
1336
+ attachmentTokens: messageBreakdown.attachmentTokens,
1337
+ assistantMessageTokens: messageBreakdown.assistantMessageTokens,
1338
+ userMessageTokens: messageBreakdown.userMessageTokens,
1339
+ toolCallsByType: toolsByTypeArray,
1340
+ attachmentsByType: attachmentsByTypeArray,
1341
+ }
1342
+
1343
+ return {
1344
+ categories: cats,
1345
+ totalTokens: finalTotalTokens,
1346
+ maxTokens: contextWindow,
1347
+ rawMaxTokens: contextWindow,
1348
+ percentage: Math.round((finalTotalTokens / contextWindow) * 100),
1349
+ gridRows,
1350
+ model: runtimeModel,
1351
+ memoryFiles: memoryFileDetails,
1352
+ mcpTools: mcpToolDetails,
1353
+ deferredBuiltinTools:
1354
+ process.env.USER_TYPE === 'ant' ? deferredBuiltinDetails : undefined,
1355
+ systemTools:
1356
+ process.env.USER_TYPE === 'ant' ? systemToolDetails : undefined,
1357
+ systemPromptSections:
1358
+ process.env.USER_TYPE === 'ant' ? systemPromptSections : undefined,
1359
+ agents: agentDetails,
1360
+ slashCommands:
1361
+ slashCommandTokens > 0
1362
+ ? {
1363
+ totalCommands: commandInfo.totalCommands,
1364
+ includedCommands: commandInfo.includedCommands,
1365
+ tokens: slashCommandTokens,
1366
+ }
1367
+ : undefined,
1368
+ skills:
1369
+ skillFrontmatterTokens > 0
1370
+ ? {
1371
+ totalSkills: skillInfo.totalSkills,
1372
+ includedSkills: skillInfo.includedSkills,
1373
+ tokens: skillFrontmatterTokens,
1374
+ skillFrontmatter: skillInfo.skillFrontmatter,
1375
+ }
1376
+ : undefined,
1377
+ autoCompactThreshold,
1378
+ isAutoCompactEnabled: isAutoCompact,
1379
+ messageBreakdown: formattedMessageBreakdown,
1380
+ apiUsage,
1381
+ }
1382
+ }