@xelauvas/xela-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1920) hide show
  1. package/README.md +200 -0
  2. package/bin/xela +100 -0
  3. package/package.json +88 -0
  4. package/src/QueryEngine.ts +1295 -0
  5. package/src/Task.ts +125 -0
  6. package/src/Tool.ts +792 -0
  7. package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
  8. package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
  9. package/src/_shims/bun_bundle.js +9 -0
  10. package/src/_shims/cjs_stub.cjs +23 -0
  11. package/src/_shims/empty_stub.js +33 -0
  12. package/src/_shims/loader.js +352 -0
  13. package/src/_shims/openai_adapter.ts +486 -0
  14. package/src/_shims/react_compiler_runtime.js +17 -0
  15. package/src/_shims/register.js +148 -0
  16. package/src/assistant/sessionHistory.ts +87 -0
  17. package/src/bootstrap/state.ts +1759 -0
  18. package/src/bridge/bridgeApi.ts +539 -0
  19. package/src/bridge/bridgeConfig.ts +48 -0
  20. package/src/bridge/bridgeDebug.ts +135 -0
  21. package/src/bridge/bridgeEnabled.ts +202 -0
  22. package/src/bridge/bridgeMain.ts +2999 -0
  23. package/src/bridge/bridgeMessaging.ts +461 -0
  24. package/src/bridge/bridgePermissionCallbacks.ts +43 -0
  25. package/src/bridge/bridgePointer.ts +210 -0
  26. package/src/bridge/bridgeStatusUtil.ts +163 -0
  27. package/src/bridge/bridgeUI.ts +530 -0
  28. package/src/bridge/capacityWake.ts +56 -0
  29. package/src/bridge/codeSessionApi.ts +168 -0
  30. package/src/bridge/createSession.ts +384 -0
  31. package/src/bridge/debugUtils.ts +141 -0
  32. package/src/bridge/envLessBridgeConfig.ts +165 -0
  33. package/src/bridge/flushGate.ts +71 -0
  34. package/src/bridge/inboundAttachments.ts +175 -0
  35. package/src/bridge/inboundMessages.ts +80 -0
  36. package/src/bridge/initReplBridge.ts +569 -0
  37. package/src/bridge/jwtUtils.ts +256 -0
  38. package/src/bridge/pollConfig.ts +110 -0
  39. package/src/bridge/pollConfigDefaults.ts +82 -0
  40. package/src/bridge/remoteBridgeCore.ts +1008 -0
  41. package/src/bridge/replBridge.ts +2406 -0
  42. package/src/bridge/replBridgeHandle.ts +36 -0
  43. package/src/bridge/replBridgeTransport.ts +370 -0
  44. package/src/bridge/sessionIdCompat.ts +57 -0
  45. package/src/bridge/sessionRunner.ts +550 -0
  46. package/src/bridge/trustedDevice.ts +210 -0
  47. package/src/bridge/types.ts +262 -0
  48. package/src/bridge/workSecret.ts +127 -0
  49. package/src/buddy/CompanionSprite.tsx +371 -0
  50. package/src/buddy/companion.ts +133 -0
  51. package/src/buddy/prompt.ts +36 -0
  52. package/src/buddy/sprites.ts +514 -0
  53. package/src/buddy/types.ts +148 -0
  54. package/src/buddy/useBuddyNotification.tsx +98 -0
  55. package/src/cli/exit.ts +31 -0
  56. package/src/cli/handlers/agents.ts +70 -0
  57. package/src/cli/handlers/auth.ts +330 -0
  58. package/src/cli/handlers/autoMode.ts +170 -0
  59. package/src/cli/handlers/mcp.tsx +362 -0
  60. package/src/cli/handlers/plugins.ts +878 -0
  61. package/src/cli/handlers/util.tsx +110 -0
  62. package/src/cli/ndjsonSafeStringify.ts +32 -0
  63. package/src/cli/print.ts +5594 -0
  64. package/src/cli/remoteIO.ts +255 -0
  65. package/src/cli/structuredIO.ts +859 -0
  66. package/src/cli/transports/HybridTransport.ts +282 -0
  67. package/src/cli/transports/SSETransport.ts +711 -0
  68. package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
  69. package/src/cli/transports/WebSocketTransport.ts +800 -0
  70. package/src/cli/transports/WorkerStateUploader.ts +131 -0
  71. package/src/cli/transports/ccrClient.ts +998 -0
  72. package/src/cli/transports/transportUtils.ts +45 -0
  73. package/src/cli/update.ts +422 -0
  74. package/src/commands/add-dir/add-dir.tsx +126 -0
  75. package/src/commands/add-dir/index.ts +11 -0
  76. package/src/commands/add-dir/validation.ts +110 -0
  77. package/src/commands/advisor.ts +109 -0
  78. package/src/commands/agents/agents.tsx +12 -0
  79. package/src/commands/agents/index.ts +10 -0
  80. package/src/commands/ant-trace/index.js +1 -0
  81. package/src/commands/autofix-pr/index.js +1 -0
  82. package/src/commands/backfill-sessions/index.js +1 -0
  83. package/src/commands/branch/branch.ts +296 -0
  84. package/src/commands/branch/index.ts +14 -0
  85. package/src/commands/break-cache/index.js +1 -0
  86. package/src/commands/bridge/bridge.tsx +509 -0
  87. package/src/commands/bridge/index.ts +26 -0
  88. package/src/commands/bridge-kick.ts +200 -0
  89. package/src/commands/brief.ts +130 -0
  90. package/src/commands/btw/btw.tsx +243 -0
  91. package/src/commands/btw/index.ts +13 -0
  92. package/src/commands/bughunter/index.js +1 -0
  93. package/src/commands/chrome/chrome.tsx +285 -0
  94. package/src/commands/chrome/index.ts +13 -0
  95. package/src/commands/clear/caches.ts +144 -0
  96. package/src/commands/clear/clear.ts +7 -0
  97. package/src/commands/clear/conversation.ts +251 -0
  98. package/src/commands/clear/index.ts +19 -0
  99. package/src/commands/color/color.ts +93 -0
  100. package/src/commands/color/index.ts +16 -0
  101. package/src/commands/commit-push-pr.ts +158 -0
  102. package/src/commands/commit.ts +92 -0
  103. package/src/commands/compact/compact.ts +287 -0
  104. package/src/commands/compact/index.ts +15 -0
  105. package/src/commands/config/config.tsx +7 -0
  106. package/src/commands/config/index.ts +11 -0
  107. package/src/commands/context/context-noninteractive.ts +325 -0
  108. package/src/commands/context/context.tsx +64 -0
  109. package/src/commands/context/index.ts +24 -0
  110. package/src/commands/copy/copy.tsx +371 -0
  111. package/src/commands/copy/index.ts +15 -0
  112. package/src/commands/cost/cost.ts +24 -0
  113. package/src/commands/cost/index.ts +23 -0
  114. package/src/commands/createMovedToPluginCommand.ts +65 -0
  115. package/src/commands/ctx_viz/index.js +1 -0
  116. package/src/commands/debug-tool-call/index.js +1 -0
  117. package/src/commands/desktop/desktop.tsx +9 -0
  118. package/src/commands/desktop/index.ts +26 -0
  119. package/src/commands/diff/diff.tsx +9 -0
  120. package/src/commands/diff/index.ts +8 -0
  121. package/src/commands/doctor/doctor.tsx +7 -0
  122. package/src/commands/doctor/index.ts +12 -0
  123. package/src/commands/effort/effort.tsx +183 -0
  124. package/src/commands/effort/index.ts +13 -0
  125. package/src/commands/env/index.js +1 -0
  126. package/src/commands/exit/exit.tsx +33 -0
  127. package/src/commands/exit/index.ts +12 -0
  128. package/src/commands/export/export.tsx +91 -0
  129. package/src/commands/export/index.ts +11 -0
  130. package/src/commands/extra-usage/extra-usage-core.ts +118 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  132. package/src/commands/extra-usage/extra-usage.tsx +17 -0
  133. package/src/commands/extra-usage/index.ts +31 -0
  134. package/src/commands/fast/fast.tsx +269 -0
  135. package/src/commands/fast/index.ts +26 -0
  136. package/src/commands/feedback/feedback.tsx +25 -0
  137. package/src/commands/feedback/index.ts +26 -0
  138. package/src/commands/files/files.ts +19 -0
  139. package/src/commands/files/index.ts +12 -0
  140. package/src/commands/good-claude/index.js +1 -0
  141. package/src/commands/heapdump/heapdump.ts +17 -0
  142. package/src/commands/heapdump/index.ts +12 -0
  143. package/src/commands/help/help.tsx +11 -0
  144. package/src/commands/help/index.ts +10 -0
  145. package/src/commands/hooks/hooks.tsx +13 -0
  146. package/src/commands/hooks/index.ts +11 -0
  147. package/src/commands/ide/ide.tsx +646 -0
  148. package/src/commands/ide/index.ts +11 -0
  149. package/src/commands/init-verifiers.ts +262 -0
  150. package/src/commands/init.ts +256 -0
  151. package/src/commands/insights.ts +3200 -0
  152. package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
  153. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  154. package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  155. package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  156. package/src/commands/install-github-app/CreatingStep.tsx +65 -0
  157. package/src/commands/install-github-app/ErrorStep.tsx +85 -0
  158. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  159. package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
  160. package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  161. package/src/commands/install-github-app/SuccessStep.tsx +96 -0
  162. package/src/commands/install-github-app/WarningsStep.tsx +73 -0
  163. package/src/commands/install-github-app/index.ts +13 -0
  164. package/src/commands/install-github-app/install-github-app.tsx +587 -0
  165. package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
  166. package/src/commands/install-slack-app/index.ts +12 -0
  167. package/src/commands/install-slack-app/install-slack-app.ts +30 -0
  168. package/src/commands/install.tsx +300 -0
  169. package/src/commands/issue/index.js +1 -0
  170. package/src/commands/keybindings/index.ts +13 -0
  171. package/src/commands/keybindings/keybindings.ts +53 -0
  172. package/src/commands/login/index.ts +14 -0
  173. package/src/commands/login/login.tsx +104 -0
  174. package/src/commands/logout/index.ts +10 -0
  175. package/src/commands/logout/logout.tsx +82 -0
  176. package/src/commands/mcp/addCommand.ts +280 -0
  177. package/src/commands/mcp/index.ts +12 -0
  178. package/src/commands/mcp/mcp.tsx +85 -0
  179. package/src/commands/mcp/xaaIdpCommand.ts +266 -0
  180. package/src/commands/memory/index.ts +10 -0
  181. package/src/commands/memory/memory.tsx +90 -0
  182. package/src/commands/mobile/index.ts +11 -0
  183. package/src/commands/mobile/mobile.tsx +274 -0
  184. package/src/commands/mock-limits/index.js +1 -0
  185. package/src/commands/model/index.ts +16 -0
  186. package/src/commands/model/model.tsx +297 -0
  187. package/src/commands/oauth-refresh/index.js +1 -0
  188. package/src/commands/onboarding/index.js +1 -0
  189. package/src/commands/output-style/index.ts +11 -0
  190. package/src/commands/output-style/output-style.tsx +7 -0
  191. package/src/commands/passes/index.ts +22 -0
  192. package/src/commands/passes/passes.tsx +24 -0
  193. package/src/commands/perf-issue/index.js +1 -0
  194. package/src/commands/permissions/index.ts +11 -0
  195. package/src/commands/permissions/permissions.tsx +10 -0
  196. package/src/commands/plan/index.ts +11 -0
  197. package/src/commands/plan/plan.tsx +122 -0
  198. package/src/commands/plugin/AddMarketplace.tsx +162 -0
  199. package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
  200. package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
  201. package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
  202. package/src/commands/plugin/ManagePlugins.tsx +2215 -0
  203. package/src/commands/plugin/PluginErrors.tsx +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
  205. package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
  206. package/src/commands/plugin/PluginSettings.tsx +1072 -0
  207. package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  209. package/src/commands/plugin/ValidatePlugin.tsx +98 -0
  210. package/src/commands/plugin/index.tsx +11 -0
  211. package/src/commands/plugin/parseArgs.ts +103 -0
  212. package/src/commands/plugin/plugin.tsx +7 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  214. package/src/commands/plugin/usePagination.ts +171 -0
  215. package/src/commands/pr_comments/index.ts +50 -0
  216. package/src/commands/privacy-settings/index.ts +14 -0
  217. package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
  218. package/src/commands/rate-limit-options/index.ts +19 -0
  219. package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  220. package/src/commands/release-notes/index.ts +11 -0
  221. package/src/commands/release-notes/release-notes.ts +50 -0
  222. package/src/commands/reload-plugins/index.ts +18 -0
  223. package/src/commands/reload-plugins/reload-plugins.ts +61 -0
  224. package/src/commands/remote-env/index.ts +15 -0
  225. package/src/commands/remote-env/remote-env.tsx +7 -0
  226. package/src/commands/remote-setup/api.ts +182 -0
  227. package/src/commands/remote-setup/index.ts +20 -0
  228. package/src/commands/remote-setup/remote-setup.tsx +187 -0
  229. package/src/commands/rename/generateSessionName.ts +67 -0
  230. package/src/commands/rename/index.ts +12 -0
  231. package/src/commands/rename/rename.ts +87 -0
  232. package/src/commands/reset-limits/index.js +4 -0
  233. package/src/commands/resume/index.ts +12 -0
  234. package/src/commands/resume/resume.tsx +275 -0
  235. package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
  236. package/src/commands/review/reviewRemote.ts +316 -0
  237. package/src/commands/review/ultrareviewCommand.tsx +58 -0
  238. package/src/commands/review/ultrareviewEnabled.ts +14 -0
  239. package/src/commands/review.ts +57 -0
  240. package/src/commands/rewind/index.ts +13 -0
  241. package/src/commands/rewind/rewind.ts +13 -0
  242. package/src/commands/sandbox-toggle/index.ts +50 -0
  243. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  244. package/src/commands/security-review.ts +243 -0
  245. package/src/commands/session/index.ts +16 -0
  246. package/src/commands/session/session.tsx +140 -0
  247. package/src/commands/share/index.js +1 -0
  248. package/src/commands/skills/index.ts +10 -0
  249. package/src/commands/skills/skills.tsx +8 -0
  250. package/src/commands/stats/index.ts +10 -0
  251. package/src/commands/stats/stats.tsx +7 -0
  252. package/src/commands/status/index.ts +12 -0
  253. package/src/commands/status/status.tsx +8 -0
  254. package/src/commands/statusline.tsx +24 -0
  255. package/src/commands/stickers/index.ts +11 -0
  256. package/src/commands/stickers/stickers.ts +16 -0
  257. package/src/commands/summary/index.js +1 -0
  258. package/src/commands/tag/index.ts +12 -0
  259. package/src/commands/tag/tag.tsx +215 -0
  260. package/src/commands/tasks/index.ts +11 -0
  261. package/src/commands/tasks/tasks.tsx +8 -0
  262. package/src/commands/teleport/index.js +1 -0
  263. package/src/commands/terminalSetup/index.ts +23 -0
  264. package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
  265. package/src/commands/theme/index.ts +10 -0
  266. package/src/commands/theme/theme.tsx +57 -0
  267. package/src/commands/thinkback/index.ts +13 -0
  268. package/src/commands/thinkback/thinkback.tsx +554 -0
  269. package/src/commands/thinkback-play/index.ts +17 -0
  270. package/src/commands/thinkback-play/thinkback-play.ts +43 -0
  271. package/src/commands/ultraplan.tsx +471 -0
  272. package/src/commands/upgrade/index.ts +16 -0
  273. package/src/commands/upgrade/upgrade.tsx +38 -0
  274. package/src/commands/usage/index.ts +9 -0
  275. package/src/commands/usage/usage.tsx +7 -0
  276. package/src/commands/version.ts +22 -0
  277. package/src/commands/vim/index.ts +11 -0
  278. package/src/commands/vim/vim.ts +38 -0
  279. package/src/commands/voice/index.ts +20 -0
  280. package/src/commands/voice/voice.ts +150 -0
  281. package/src/commands.ts +754 -0
  282. package/src/components/AgentProgressLine.tsx +136 -0
  283. package/src/components/App.tsx +56 -0
  284. package/src/components/ApproveApiKey.tsx +123 -0
  285. package/src/components/AutoModeOptInDialog.tsx +142 -0
  286. package/src/components/AutoUpdater.tsx +198 -0
  287. package/src/components/AutoUpdaterWrapper.tsx +91 -0
  288. package/src/components/AwsAuthStatusBox.tsx +82 -0
  289. package/src/components/BaseTextInput.tsx +136 -0
  290. package/src/components/BashModeProgress.tsx +56 -0
  291. package/src/components/BridgeDialog.tsx +401 -0
  292. package/src/components/BypassPermissionsModeDialog.tsx +87 -0
  293. package/src/components/ChannelDowngradeDialog.tsx +102 -0
  294. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  295. package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
  296. package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  297. package/src/components/ClickableImageRef.tsx +73 -0
  298. package/src/components/CompactSummary.tsx +118 -0
  299. package/src/components/ConfigurableShortcutHint.tsx +57 -0
  300. package/src/components/ConsoleOAuthFlow.tsx +631 -0
  301. package/src/components/ContextSuggestions.tsx +47 -0
  302. package/src/components/ContextVisualization.tsx +489 -0
  303. package/src/components/CoordinatorAgentStatus.tsx +273 -0
  304. package/src/components/CostThresholdDialog.tsx +50 -0
  305. package/src/components/CtrlOToExpand.tsx +51 -0
  306. package/src/components/CustomSelect/SelectMulti.tsx +213 -0
  307. package/src/components/CustomSelect/index.ts +3 -0
  308. package/src/components/CustomSelect/option-map.ts +50 -0
  309. package/src/components/CustomSelect/select-input-option.tsx +488 -0
  310. package/src/components/CustomSelect/select-option.tsx +68 -0
  311. package/src/components/CustomSelect/select.tsx +690 -0
  312. package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
  313. package/src/components/CustomSelect/use-select-input.ts +287 -0
  314. package/src/components/CustomSelect/use-select-navigation.ts +653 -0
  315. package/src/components/CustomSelect/use-select-state.ts +157 -0
  316. package/src/components/DesktopHandoff.tsx +193 -0
  317. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  318. package/src/components/DevBar.tsx +49 -0
  319. package/src/components/DevChannelsDialog.tsx +105 -0
  320. package/src/components/DiagnosticsDisplay.tsx +95 -0
  321. package/src/components/EffortCallout.tsx +265 -0
  322. package/src/components/EffortIndicator.ts +42 -0
  323. package/src/components/ExitFlow.tsx +48 -0
  324. package/src/components/ExportDialog.tsx +128 -0
  325. package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
  326. package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
  327. package/src/components/FastIcon.tsx +46 -0
  328. package/src/components/Feedback.tsx +592 -0
  329. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  330. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  331. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  332. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  333. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  334. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  335. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  336. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  337. package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  338. package/src/components/FileEditToolDiff.tsx +181 -0
  339. package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
  340. package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
  341. package/src/components/FilePathLink.tsx +43 -0
  342. package/src/components/FullscreenLayout.tsx +637 -0
  343. package/src/components/GlobalSearchDialog.tsx +343 -0
  344. package/src/components/HelpV2/Commands.tsx +82 -0
  345. package/src/components/HelpV2/General.tsx +23 -0
  346. package/src/components/HelpV2/HelpV2.tsx +184 -0
  347. package/src/components/HighlightedCode/Fallback.tsx +193 -0
  348. package/src/components/HighlightedCode.tsx +190 -0
  349. package/src/components/HistorySearchDialog.tsx +118 -0
  350. package/src/components/IdeAutoConnectDialog.tsx +154 -0
  351. package/src/components/IdeOnboardingDialog.tsx +167 -0
  352. package/src/components/IdeStatusIndicator.tsx +58 -0
  353. package/src/components/IdleReturnDialog.tsx +118 -0
  354. package/src/components/InterruptedByUser.tsx +15 -0
  355. package/src/components/InvalidConfigDialog.tsx +156 -0
  356. package/src/components/InvalidSettingsDialog.tsx +89 -0
  357. package/src/components/KeybindingWarnings.tsx +55 -0
  358. package/src/components/LanguagePicker.tsx +86 -0
  359. package/src/components/LogSelector.tsx +1575 -0
  360. package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  361. package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
  362. package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
  363. package/src/components/LogoV2/Clawd.tsx +240 -0
  364. package/src/components/LogoV2/CondensedLogo.tsx +161 -0
  365. package/src/components/LogoV2/EmergencyTip.tsx +58 -0
  366. package/src/components/LogoV2/Feed.tsx +112 -0
  367. package/src/components/LogoV2/FeedColumn.tsx +59 -0
  368. package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  369. package/src/components/LogoV2/LogoV2.tsx +543 -0
  370. package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  371. package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  372. package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
  373. package/src/components/LogoV2/WelcomeV2.tsx +433 -0
  374. package/src/components/LogoV2/feedConfigs.tsx +92 -0
  375. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  376. package/src/components/MCPServerApprovalDialog.tsx +115 -0
  377. package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
  378. package/src/components/MCPServerDialogCopy.tsx +15 -0
  379. package/src/components/MCPServerMultiselectDialog.tsx +133 -0
  380. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  381. package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  382. package/src/components/Markdown.tsx +236 -0
  383. package/src/components/MarkdownTable.tsx +322 -0
  384. package/src/components/MemoryUsageIndicator.tsx +37 -0
  385. package/src/components/Message.tsx +627 -0
  386. package/src/components/MessageModel.tsx +43 -0
  387. package/src/components/MessageResponse.tsx +78 -0
  388. package/src/components/MessageRow.tsx +383 -0
  389. package/src/components/MessageSelector.tsx +831 -0
  390. package/src/components/MessageTimestamp.tsx +63 -0
  391. package/src/components/Messages.tsx +834 -0
  392. package/src/components/ModelPicker.tsx +448 -0
  393. package/src/components/NativeAutoUpdater.tsx +193 -0
  394. package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  395. package/src/components/OffscreenFreeze.tsx +44 -0
  396. package/src/components/Onboarding.tsx +244 -0
  397. package/src/components/OutputStylePicker.tsx +112 -0
  398. package/src/components/PackageManagerAutoUpdater.tsx +104 -0
  399. package/src/components/Passes/Passes.tsx +184 -0
  400. package/src/components/PrBadge.tsx +97 -0
  401. package/src/components/PressEnterToContinue.tsx +15 -0
  402. package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
  403. package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
  404. package/src/components/PromptInput/Notifications.tsx +332 -0
  405. package/src/components/PromptInput/PromptInput.tsx +2339 -0
  406. package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
  407. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  408. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  409. package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  410. package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  411. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  412. package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  413. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  414. package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
  415. package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
  416. package/src/components/PromptInput/inputModes.ts +33 -0
  417. package/src/components/PromptInput/inputPaste.ts +90 -0
  418. package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  419. package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  420. package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
  421. package/src/components/PromptInput/useSwarmBanner.ts +155 -0
  422. package/src/components/PromptInput/utils.ts +60 -0
  423. package/src/components/QuickOpenDialog.tsx +244 -0
  424. package/src/components/RemoteCallout.tsx +76 -0
  425. package/src/components/RemoteEnvironmentDialog.tsx +340 -0
  426. package/src/components/ResumeTask.tsx +268 -0
  427. package/src/components/SandboxViolationExpandedView.tsx +99 -0
  428. package/src/components/ScrollKeybindingHandler.tsx +1012 -0
  429. package/src/components/SearchBox.tsx +72 -0
  430. package/src/components/SentryErrorBoundary.ts +28 -0
  431. package/src/components/SessionBackgroundHint.tsx +108 -0
  432. package/src/components/SessionPreview.tsx +194 -0
  433. package/src/components/Settings/Config.tsx +1822 -0
  434. package/src/components/Settings/Settings.tsx +137 -0
  435. package/src/components/Settings/Status.tsx +241 -0
  436. package/src/components/Settings/Usage.tsx +377 -0
  437. package/src/components/ShowInIDEPrompt.tsx +170 -0
  438. package/src/components/SkillImprovementSurvey.tsx +152 -0
  439. package/src/components/Spinner/FlashingChar.tsx +61 -0
  440. package/src/components/Spinner/GlimmerMessage.tsx +328 -0
  441. package/src/components/Spinner/ShimmerChar.tsx +36 -0
  442. package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  443. package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
  444. package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  445. package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  446. package/src/components/Spinner/index.ts +10 -0
  447. package/src/components/Spinner/teammateSelectHint.ts +1 -0
  448. package/src/components/Spinner/useShimmerAnimation.ts +31 -0
  449. package/src/components/Spinner/useStalledAnimation.ts +75 -0
  450. package/src/components/Spinner/utils.ts +84 -0
  451. package/src/components/Spinner.tsx +562 -0
  452. package/src/components/Stats.tsx +1228 -0
  453. package/src/components/StatusLine.tsx +324 -0
  454. package/src/components/StatusNotices.tsx +55 -0
  455. package/src/components/StructuredDiff/Fallback.tsx +487 -0
  456. package/src/components/StructuredDiff/colorDiff.ts +37 -0
  457. package/src/components/StructuredDiff.tsx +190 -0
  458. package/src/components/StructuredDiffList.tsx +30 -0
  459. package/src/components/TagTabs.tsx +139 -0
  460. package/src/components/TaskListV2.tsx +378 -0
  461. package/src/components/TeammateViewHeader.tsx +82 -0
  462. package/src/components/TeleportError.tsx +189 -0
  463. package/src/components/TeleportProgress.tsx +140 -0
  464. package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
  465. package/src/components/TeleportResumeWrapper.tsx +167 -0
  466. package/src/components/TeleportStash.tsx +116 -0
  467. package/src/components/TextInput.tsx +124 -0
  468. package/src/components/ThemePicker.tsx +333 -0
  469. package/src/components/ThinkingToggle.tsx +153 -0
  470. package/src/components/TokenWarning.tsx +179 -0
  471. package/src/components/ToolUseLoader.tsx +42 -0
  472. package/src/components/TrustDialog/TrustDialog.tsx +290 -0
  473. package/src/components/TrustDialog/utils.ts +245 -0
  474. package/src/components/ValidationErrorsList.tsx +148 -0
  475. package/src/components/VimTextInput.tsx +140 -0
  476. package/src/components/VirtualMessageList.tsx +1082 -0
  477. package/src/components/WorkflowMultiselectDialog.tsx +128 -0
  478. package/src/components/WorktreeExitDialog.tsx +231 -0
  479. package/src/components/agents/AgentDetail.tsx +220 -0
  480. package/src/components/agents/AgentEditor.tsx +178 -0
  481. package/src/components/agents/AgentNavigationFooter.tsx +26 -0
  482. package/src/components/agents/AgentsList.tsx +440 -0
  483. package/src/components/agents/AgentsMenu.tsx +800 -0
  484. package/src/components/agents/ColorPicker.tsx +112 -0
  485. package/src/components/agents/ModelSelector.tsx +68 -0
  486. package/src/components/agents/ToolSelector.tsx +562 -0
  487. package/src/components/agents/agentFileUtils.ts +272 -0
  488. package/src/components/agents/generateAgent.ts +197 -0
  489. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  490. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  491. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  492. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  493. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  494. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  495. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  496. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  497. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  498. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  499. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  502. package/src/components/agents/types.ts +27 -0
  503. package/src/components/agents/utils.ts +18 -0
  504. package/src/components/agents/validateAgent.ts +109 -0
  505. package/src/components/design-system/Byline.tsx +77 -0
  506. package/src/components/design-system/Dialog.tsx +138 -0
  507. package/src/components/design-system/Divider.tsx +149 -0
  508. package/src/components/design-system/FuzzyPicker.tsx +312 -0
  509. package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
  510. package/src/components/design-system/ListItem.tsx +244 -0
  511. package/src/components/design-system/LoadingState.tsx +94 -0
  512. package/src/components/design-system/Pane.tsx +77 -0
  513. package/src/components/design-system/ProgressBar.tsx +86 -0
  514. package/src/components/design-system/Ratchet.tsx +80 -0
  515. package/src/components/design-system/StatusIcon.tsx +95 -0
  516. package/src/components/design-system/Tabs.tsx +340 -0
  517. package/src/components/design-system/ThemeProvider.tsx +174 -0
  518. package/src/components/design-system/ThemedBox.tsx +156 -0
  519. package/src/components/design-system/ThemedText.tsx +124 -0
  520. package/src/components/design-system/color.ts +30 -0
  521. package/src/components/diff/DiffDetailView.tsx +281 -0
  522. package/src/components/diff/DiffDialog.tsx +383 -0
  523. package/src/components/diff/DiffFileList.tsx +292 -0
  524. package/src/components/grove/Grove.tsx +463 -0
  525. package/src/components/hooks/HooksConfigMenu.tsx +578 -0
  526. package/src/components/hooks/PromptDialog.tsx +90 -0
  527. package/src/components/hooks/SelectEventMode.tsx +127 -0
  528. package/src/components/hooks/SelectHookMode.tsx +112 -0
  529. package/src/components/hooks/SelectMatcherMode.tsx +144 -0
  530. package/src/components/hooks/ViewHookMode.tsx +199 -0
  531. package/src/components/mcp/CapabilitiesSection.tsx +61 -0
  532. package/src/components/mcp/ElicitationDialog.tsx +1169 -0
  533. package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
  534. package/src/components/mcp/MCPListPanel.tsx +504 -0
  535. package/src/components/mcp/MCPReconnect.tsx +167 -0
  536. package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  537. package/src/components/mcp/MCPSettings.tsx +398 -0
  538. package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
  539. package/src/components/mcp/MCPToolDetailView.tsx +212 -0
  540. package/src/components/mcp/MCPToolListView.tsx +141 -0
  541. package/src/components/mcp/McpParsingWarnings.tsx +213 -0
  542. package/src/components/mcp/index.ts +9 -0
  543. package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
  544. package/src/components/memory/MemoryFileSelector.tsx +438 -0
  545. package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
  546. package/src/components/messageActions.tsx +450 -0
  547. package/src/components/messages/AdvisorMessage.tsx +158 -0
  548. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  549. package/src/components/messages/AssistantTextMessage.tsx +270 -0
  550. package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
  551. package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
  552. package/src/components/messages/AttachmentMessage.tsx +536 -0
  553. package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
  554. package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
  555. package/src/components/messages/GroupedToolUseContent.tsx +58 -0
  556. package/src/components/messages/HighlightedThinkingText.tsx +162 -0
  557. package/src/components/messages/HookProgressMessage.tsx +116 -0
  558. package/src/components/messages/PlanApprovalMessage.tsx +222 -0
  559. package/src/components/messages/RateLimitMessage.tsx +161 -0
  560. package/src/components/messages/ShutdownMessage.tsx +132 -0
  561. package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
  562. package/src/components/messages/SystemTextMessage.tsx +827 -0
  563. package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
  564. package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
  565. package/src/components/messages/UserBashInputMessage.tsx +58 -0
  566. package/src/components/messages/UserBashOutputMessage.tsx +54 -0
  567. package/src/components/messages/UserChannelMessage.tsx +137 -0
  568. package/src/components/messages/UserCommandMessage.tsx +108 -0
  569. package/src/components/messages/UserImageMessage.tsx +59 -0
  570. package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  571. package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
  572. package/src/components/messages/UserPlanMessage.tsx +42 -0
  573. package/src/components/messages/UserPromptMessage.tsx +80 -0
  574. package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
  575. package/src/components/messages/UserTeammateMessage.tsx +206 -0
  576. package/src/components/messages/UserTextMessage.tsx +275 -0
  577. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  578. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  579. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  580. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  581. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  582. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  583. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  584. package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
  585. package/src/components/messages/nullRenderingAttachments.ts +70 -0
  586. package/src/components/messages/teamMemCollapsed.tsx +140 -0
  587. package/src/components/messages/teamMemSaved.ts +19 -0
  588. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  589. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  590. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  591. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  592. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  593. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  594. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  595. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  596. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  597. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  598. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  599. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  600. package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
  601. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  602. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  603. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  604. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  605. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  606. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  607. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  608. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  609. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  610. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  611. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  612. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  613. package/src/components/permissions/PermissionDialog.tsx +72 -0
  614. package/src/components/permissions/PermissionExplanation.tsx +272 -0
  615. package/src/components/permissions/PermissionPrompt.tsx +336 -0
  616. package/src/components/permissions/PermissionRequest.tsx +217 -0
  617. package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
  618. package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
  619. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  620. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  621. package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
  622. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  623. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  624. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  625. package/src/components/permissions/WorkerBadge.tsx +49 -0
  626. package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
  627. package/src/components/permissions/hooks.ts +209 -0
  628. package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
  629. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  630. package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  631. package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  632. package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  633. package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  634. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  635. package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
  636. package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
  637. package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
  638. package/src/components/permissions/utils.ts +25 -0
  639. package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
  640. package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  641. package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
  642. package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
  643. package/src/components/sandbox/SandboxSettings.tsx +296 -0
  644. package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
  645. package/src/components/shell/OutputLine.tsx +118 -0
  646. package/src/components/shell/ShellProgressMessage.tsx +150 -0
  647. package/src/components/shell/ShellTimeDisplay.tsx +74 -0
  648. package/src/components/skills/SkillsMenu.tsx +237 -0
  649. package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  650. package/src/components/tasks/BackgroundTask.tsx +345 -0
  651. package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
  652. package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
  653. package/src/components/tasks/DreamDetailDialog.tsx +251 -0
  654. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  655. package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  656. package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
  657. package/src/components/tasks/ShellDetailDialog.tsx +404 -0
  658. package/src/components/tasks/ShellProgress.tsx +87 -0
  659. package/src/components/tasks/renderToolActivity.tsx +33 -0
  660. package/src/components/tasks/taskStatusUtils.tsx +107 -0
  661. package/src/components/teams/TeamStatus.tsx +80 -0
  662. package/src/components/teams/TeamsDialog.tsx +715 -0
  663. package/src/components/ui/OrderedList.tsx +71 -0
  664. package/src/components/ui/OrderedListItem.tsx +45 -0
  665. package/src/components/ui/TreeSelect.tsx +397 -0
  666. package/src/components/wizard/WizardDialogLayout.tsx +65 -0
  667. package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
  668. package/src/components/wizard/WizardProvider.tsx +213 -0
  669. package/src/components/wizard/index.ts +9 -0
  670. package/src/components/wizard/useWizard.ts +13 -0
  671. package/src/constants/apiLimits.ts +94 -0
  672. package/src/constants/betas.ts +52 -0
  673. package/src/constants/common.ts +33 -0
  674. package/src/constants/cyberRiskInstruction.ts +24 -0
  675. package/src/constants/errorIds.ts +15 -0
  676. package/src/constants/figures.ts +45 -0
  677. package/src/constants/files.ts +156 -0
  678. package/src/constants/github-app.ts +144 -0
  679. package/src/constants/keys.ts +11 -0
  680. package/src/constants/messages.ts +1 -0
  681. package/src/constants/oauth.ts +234 -0
  682. package/src/constants/outputStyles.ts +216 -0
  683. package/src/constants/product.ts +76 -0
  684. package/src/constants/prompts.ts +914 -0
  685. package/src/constants/spinnerVerbs.ts +204 -0
  686. package/src/constants/system.ts +95 -0
  687. package/src/constants/systemPromptSections.ts +68 -0
  688. package/src/constants/toolLimits.ts +56 -0
  689. package/src/constants/tools.ts +112 -0
  690. package/src/constants/turnCompletionVerbs.ts +12 -0
  691. package/src/constants/xml.ts +86 -0
  692. package/src/context/QueuedMessageContext.tsx +63 -0
  693. package/src/context/fpsMetrics.tsx +30 -0
  694. package/src/context/mailbox.tsx +38 -0
  695. package/src/context/modalContext.tsx +58 -0
  696. package/src/context/notifications.tsx +240 -0
  697. package/src/context/overlayContext.tsx +151 -0
  698. package/src/context/promptOverlayContext.tsx +125 -0
  699. package/src/context/stats.tsx +220 -0
  700. package/src/context/voice.tsx +88 -0
  701. package/src/context.ts +189 -0
  702. package/src/coordinator/coordinatorMode.ts +369 -0
  703. package/src/cost-tracker.ts +323 -0
  704. package/src/costHook.ts +22 -0
  705. package/src/dialogLaunchers.tsx +133 -0
  706. package/src/entrypoints/agentSdkTypes.ts +443 -0
  707. package/src/entrypoints/cli.tsx +303 -0
  708. package/src/entrypoints/init.ts +340 -0
  709. package/src/entrypoints/mcp.ts +196 -0
  710. package/src/entrypoints/sandboxTypes.ts +156 -0
  711. package/src/entrypoints/sdk/controlSchemas.ts +663 -0
  712. package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
  713. package/src/entrypoints/sdk/coreTypes.ts +62 -0
  714. package/src/history.ts +464 -0
  715. package/src/hooks/fileSuggestions.ts +811 -0
  716. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  717. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  718. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  719. package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
  720. package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  721. package/src/hooks/notifs/useInstallMessages.tsx +26 -0
  722. package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  723. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  724. package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  725. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  726. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  727. package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  728. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  729. package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
  730. package/src/hooks/notifs/useStartupNotification.ts +41 -0
  731. package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  732. package/src/hooks/renderPlaceholder.ts +51 -0
  733. package/src/hooks/toolPermission/PermissionContext.ts +388 -0
  734. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  735. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  736. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  737. package/src/hooks/toolPermission/permissionLogging.ts +238 -0
  738. package/src/hooks/unifiedSuggestions.ts +202 -0
  739. package/src/hooks/useAfterFirstRender.ts +17 -0
  740. package/src/hooks/useApiKeyVerification.ts +84 -0
  741. package/src/hooks/useArrowKeyHistory.tsx +229 -0
  742. package/src/hooks/useAssistantHistory.ts +250 -0
  743. package/src/hooks/useAwaySummary.ts +125 -0
  744. package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
  745. package/src/hooks/useBlink.ts +34 -0
  746. package/src/hooks/useCanUseTool.tsx +204 -0
  747. package/src/hooks/useCancelRequest.ts +276 -0
  748. package/src/hooks/useChromeExtensionNotification.tsx +50 -0
  749. package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  750. package/src/hooks/useClipboardImageHint.ts +77 -0
  751. package/src/hooks/useCommandKeybindings.tsx +108 -0
  752. package/src/hooks/useCommandQueue.ts +15 -0
  753. package/src/hooks/useCopyOnSelect.ts +98 -0
  754. package/src/hooks/useDeferredHookMessages.ts +46 -0
  755. package/src/hooks/useDiffData.ts +110 -0
  756. package/src/hooks/useDiffInIDE.ts +379 -0
  757. package/src/hooks/useDirectConnect.ts +229 -0
  758. package/src/hooks/useDoublePress.ts +62 -0
  759. package/src/hooks/useDynamicConfig.ts +22 -0
  760. package/src/hooks/useElapsedTime.ts +37 -0
  761. package/src/hooks/useExitOnCtrlCD.ts +95 -0
  762. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  763. package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
  764. package/src/hooks/useGlobalKeybindings.tsx +249 -0
  765. package/src/hooks/useHistorySearch.ts +303 -0
  766. package/src/hooks/useIDEIntegration.tsx +70 -0
  767. package/src/hooks/useIdeAtMentioned.ts +76 -0
  768. package/src/hooks/useIdeConnectionStatus.ts +33 -0
  769. package/src/hooks/useIdeLogging.ts +41 -0
  770. package/src/hooks/useIdeSelection.ts +150 -0
  771. package/src/hooks/useInboxPoller.ts +969 -0
  772. package/src/hooks/useInputBuffer.ts +132 -0
  773. package/src/hooks/useIssueFlagBanner.ts +133 -0
  774. package/src/hooks/useLogMessages.ts +119 -0
  775. package/src/hooks/useLspPluginRecommendation.tsx +194 -0
  776. package/src/hooks/useMailboxBridge.ts +21 -0
  777. package/src/hooks/useMainLoopModel.ts +34 -0
  778. package/src/hooks/useManagePlugins.ts +304 -0
  779. package/src/hooks/useMemoryUsage.ts +39 -0
  780. package/src/hooks/useMergedClients.ts +23 -0
  781. package/src/hooks/useMergedCommands.ts +15 -0
  782. package/src/hooks/useMergedTools.ts +44 -0
  783. package/src/hooks/useMinDisplayTime.ts +35 -0
  784. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  785. package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  786. package/src/hooks/usePasteHandler.ts +285 -0
  787. package/src/hooks/usePluginRecommendationBase.tsx +105 -0
  788. package/src/hooks/usePrStatus.ts +106 -0
  789. package/src/hooks/usePromptSuggestion.ts +177 -0
  790. package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  791. package/src/hooks/useQueueProcessor.ts +68 -0
  792. package/src/hooks/useRemoteSession.ts +605 -0
  793. package/src/hooks/useReplBridge.tsx +723 -0
  794. package/src/hooks/useSSHSession.ts +241 -0
  795. package/src/hooks/useScheduledTasks.ts +139 -0
  796. package/src/hooks/useSearchInput.ts +364 -0
  797. package/src/hooks/useSessionBackgrounding.ts +158 -0
  798. package/src/hooks/useSettings.ts +17 -0
  799. package/src/hooks/useSettingsChange.ts +25 -0
  800. package/src/hooks/useSkillImprovementSurvey.ts +105 -0
  801. package/src/hooks/useSkillsChange.ts +62 -0
  802. package/src/hooks/useSwarmInitialization.ts +81 -0
  803. package/src/hooks/useSwarmPermissionPoller.ts +330 -0
  804. package/src/hooks/useTaskListWatcher.ts +221 -0
  805. package/src/hooks/useTasksV2.ts +250 -0
  806. package/src/hooks/useTeammateViewAutoExit.ts +63 -0
  807. package/src/hooks/useTeleportResume.tsx +85 -0
  808. package/src/hooks/useTerminalSize.ts +15 -0
  809. package/src/hooks/useTextInput.ts +529 -0
  810. package/src/hooks/useTimeout.ts +14 -0
  811. package/src/hooks/useTurnDiffs.ts +213 -0
  812. package/src/hooks/useTypeahead.tsx +1385 -0
  813. package/src/hooks/useUpdateNotification.ts +34 -0
  814. package/src/hooks/useVimInput.ts +316 -0
  815. package/src/hooks/useVirtualScroll.ts +721 -0
  816. package/src/hooks/useVoice.ts +1144 -0
  817. package/src/hooks/useVoiceEnabled.ts +25 -0
  818. package/src/hooks/useVoiceIntegration.tsx +677 -0
  819. package/src/ink/Ansi.tsx +292 -0
  820. package/src/ink/bidi.ts +139 -0
  821. package/src/ink/clearTerminal.ts +74 -0
  822. package/src/ink/colorize.ts +231 -0
  823. package/src/ink/components/AlternateScreen.tsx +80 -0
  824. package/src/ink/components/App.tsx +659 -0
  825. package/src/ink/components/AppContext.ts +21 -0
  826. package/src/ink/components/Box.tsx +214 -0
  827. package/src/ink/components/Button.tsx +192 -0
  828. package/src/ink/components/ClockContext.tsx +112 -0
  829. package/src/ink/components/CursorDeclarationContext.ts +32 -0
  830. package/src/ink/components/ErrorOverview.tsx +109 -0
  831. package/src/ink/components/Link.tsx +42 -0
  832. package/src/ink/components/Newline.tsx +39 -0
  833. package/src/ink/components/NoSelect.tsx +68 -0
  834. package/src/ink/components/RawAnsi.tsx +57 -0
  835. package/src/ink/components/ScrollBox.tsx +237 -0
  836. package/src/ink/components/Spacer.tsx +20 -0
  837. package/src/ink/components/StdinContext.ts +49 -0
  838. package/src/ink/components/TerminalFocusContext.tsx +52 -0
  839. package/src/ink/components/TerminalSizeContext.tsx +7 -0
  840. package/src/ink/components/Text.tsx +254 -0
  841. package/src/ink/constants.ts +2 -0
  842. package/src/ink/dom.ts +484 -0
  843. package/src/ink/events/click-event.ts +38 -0
  844. package/src/ink/events/dispatcher.ts +233 -0
  845. package/src/ink/events/emitter.ts +39 -0
  846. package/src/ink/events/event-handlers.ts +73 -0
  847. package/src/ink/events/event.ts +11 -0
  848. package/src/ink/events/focus-event.ts +21 -0
  849. package/src/ink/events/input-event.ts +205 -0
  850. package/src/ink/events/keyboard-event.ts +51 -0
  851. package/src/ink/events/terminal-event.ts +107 -0
  852. package/src/ink/events/terminal-focus-event.ts +19 -0
  853. package/src/ink/focus.ts +181 -0
  854. package/src/ink/frame.ts +124 -0
  855. package/src/ink/get-max-width.ts +27 -0
  856. package/src/ink/hit-test.ts +130 -0
  857. package/src/ink/hooks/use-animation-frame.ts +57 -0
  858. package/src/ink/hooks/use-app.ts +8 -0
  859. package/src/ink/hooks/use-declared-cursor.ts +73 -0
  860. package/src/ink/hooks/use-input.ts +92 -0
  861. package/src/ink/hooks/use-interval.ts +67 -0
  862. package/src/ink/hooks/use-search-highlight.ts +53 -0
  863. package/src/ink/hooks/use-selection.ts +104 -0
  864. package/src/ink/hooks/use-stdin.ts +8 -0
  865. package/src/ink/hooks/use-tab-status.ts +72 -0
  866. package/src/ink/hooks/use-terminal-focus.ts +16 -0
  867. package/src/ink/hooks/use-terminal-title.ts +31 -0
  868. package/src/ink/hooks/use-terminal-viewport.ts +96 -0
  869. package/src/ink/ink.tsx +1728 -0
  870. package/src/ink/instances.ts +10 -0
  871. package/src/ink/layout/engine.ts +6 -0
  872. package/src/ink/layout/geometry.ts +97 -0
  873. package/src/ink/layout/node.ts +152 -0
  874. package/src/ink/layout/yoga.ts +308 -0
  875. package/src/ink/line-width-cache.ts +24 -0
  876. package/src/ink/log-update.ts +773 -0
  877. package/src/ink/measure-element.ts +23 -0
  878. package/src/ink/measure-text.ts +47 -0
  879. package/src/ink/node-cache.ts +54 -0
  880. package/src/ink/optimizer.ts +93 -0
  881. package/src/ink/output.ts +797 -0
  882. package/src/ink/parse-keypress.ts +801 -0
  883. package/src/ink/reconciler.ts +512 -0
  884. package/src/ink/render-border.ts +231 -0
  885. package/src/ink/render-node-to-output.ts +1462 -0
  886. package/src/ink/render-to-screen.ts +231 -0
  887. package/src/ink/renderer.ts +178 -0
  888. package/src/ink/root.ts +184 -0
  889. package/src/ink/screen.ts +1486 -0
  890. package/src/ink/searchHighlight.ts +93 -0
  891. package/src/ink/selection.ts +917 -0
  892. package/src/ink/squash-text-nodes.ts +92 -0
  893. package/src/ink/stringWidth.ts +222 -0
  894. package/src/ink/styles.ts +771 -0
  895. package/src/ink/supports-hyperlinks.ts +57 -0
  896. package/src/ink/tabstops.ts +46 -0
  897. package/src/ink/terminal-focus-state.ts +47 -0
  898. package/src/ink/terminal-querier.ts +212 -0
  899. package/src/ink/terminal.ts +248 -0
  900. package/src/ink/termio/ansi.ts +75 -0
  901. package/src/ink/termio/csi.ts +319 -0
  902. package/src/ink/termio/dec.ts +60 -0
  903. package/src/ink/termio/esc.ts +67 -0
  904. package/src/ink/termio/osc.ts +493 -0
  905. package/src/ink/termio/parser.ts +394 -0
  906. package/src/ink/termio/sgr.ts +308 -0
  907. package/src/ink/termio/tokenize.ts +319 -0
  908. package/src/ink/termio/types.ts +236 -0
  909. package/src/ink/termio.ts +42 -0
  910. package/src/ink/useTerminalNotification.ts +126 -0
  911. package/src/ink/warn.ts +9 -0
  912. package/src/ink/widest-line.ts +19 -0
  913. package/src/ink/wrap-text.ts +74 -0
  914. package/src/ink/wrapAnsi.ts +20 -0
  915. package/src/ink.ts +85 -0
  916. package/src/interactiveHelpers.tsx +367 -0
  917. package/src/keybindings/KeybindingContext.tsx +243 -0
  918. package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
  919. package/src/keybindings/defaultBindings.ts +340 -0
  920. package/src/keybindings/loadUserBindings.ts +472 -0
  921. package/src/keybindings/match.ts +120 -0
  922. package/src/keybindings/parser.ts +203 -0
  923. package/src/keybindings/reservedShortcuts.ts +127 -0
  924. package/src/keybindings/resolver.ts +244 -0
  925. package/src/keybindings/schema.ts +236 -0
  926. package/src/keybindings/shortcutFormat.ts +63 -0
  927. package/src/keybindings/template.ts +52 -0
  928. package/src/keybindings/useKeybinding.ts +196 -0
  929. package/src/keybindings/useShortcutDisplay.ts +59 -0
  930. package/src/keybindings/validate.ts +498 -0
  931. package/src/main.tsx +4684 -0
  932. package/src/memdir/findRelevantMemories.ts +141 -0
  933. package/src/memdir/memdir.ts +507 -0
  934. package/src/memdir/memoryAge.ts +53 -0
  935. package/src/memdir/memoryScan.ts +94 -0
  936. package/src/memdir/memoryTypes.ts +271 -0
  937. package/src/memdir/paths.ts +278 -0
  938. package/src/memdir/teamMemPaths.ts +292 -0
  939. package/src/memdir/teamMemPrompts.ts +100 -0
  940. package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  941. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  942. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  943. package/src/migrations/migrateFennecToOpus.ts +45 -0
  944. package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  945. package/src/migrations/migrateOpusToOpus1m.ts +43 -0
  946. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  947. package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  948. package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  949. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  950. package/src/migrations/resetProToOpusDefault.ts +51 -0
  951. package/src/moreright/useMoreRight.tsx +26 -0
  952. package/src/native-ts/color-diff/index.ts +999 -0
  953. package/src/native-ts/file-index/index.ts +370 -0
  954. package/src/native-ts/yoga-layout/enums.ts +134 -0
  955. package/src/native-ts/yoga-layout/index.ts +2578 -0
  956. package/src/outputStyles/loadOutputStylesDir.ts +98 -0
  957. package/src/plugins/builtinPlugins.ts +159 -0
  958. package/src/plugins/bundled/index.ts +23 -0
  959. package/src/projectOnboardingState.ts +83 -0
  960. package/src/query/config.ts +46 -0
  961. package/src/query/deps.ts +40 -0
  962. package/src/query/stopHooks.ts +473 -0
  963. package/src/query/tokenBudget.ts +93 -0
  964. package/src/query.ts +1729 -0
  965. package/src/remote/RemoteSessionManager.ts +343 -0
  966. package/src/remote/SessionsWebSocket.ts +404 -0
  967. package/src/remote/remotePermissionBridge.ts +78 -0
  968. package/src/remote/sdkMessageAdapter.ts +302 -0
  969. package/src/replLauncher.tsx +23 -0
  970. package/src/schemas/hooks.ts +222 -0
  971. package/src/screens/Doctor.tsx +575 -0
  972. package/src/screens/REPL.tsx +5006 -0
  973. package/src/screens/ResumeConversation.tsx +399 -0
  974. package/src/server/createDirectConnectSession.ts +88 -0
  975. package/src/server/directConnectManager.ts +213 -0
  976. package/src/server/types.ts +57 -0
  977. package/src/services/AgentSummary/agentSummary.ts +179 -0
  978. package/src/services/MagicDocs/magicDocs.ts +254 -0
  979. package/src/services/MagicDocs/prompts.ts +127 -0
  980. package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
  981. package/src/services/PromptSuggestion/speculation.ts +991 -0
  982. package/src/services/SessionMemory/prompts.ts +324 -0
  983. package/src/services/SessionMemory/sessionMemory.ts +495 -0
  984. package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  985. package/src/services/analytics/config.ts +38 -0
  986. package/src/services/analytics/datadog.ts +307 -0
  987. package/src/services/analytics/firstPartyEventLogger.ts +449 -0
  988. package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  989. package/src/services/analytics/growthbook.ts +1157 -0
  990. package/src/services/analytics/index.ts +173 -0
  991. package/src/services/analytics/metadata.ts +973 -0
  992. package/src/services/analytics/sink.ts +114 -0
  993. package/src/services/analytics/sinkKillswitch.ts +25 -0
  994. package/src/services/api/adminRequests.ts +119 -0
  995. package/src/services/api/bootstrap.ts +142 -0
  996. package/src/services/api/claude.ts +3433 -0
  997. package/src/services/api/client.ts +395 -0
  998. package/src/services/api/dumpPrompts.ts +226 -0
  999. package/src/services/api/emptyUsage.ts +22 -0
  1000. package/src/services/api/errorUtils.ts +260 -0
  1001. package/src/services/api/errors.ts +1207 -0
  1002. package/src/services/api/filesApi.ts +748 -0
  1003. package/src/services/api/firstTokenDate.ts +60 -0
  1004. package/src/services/api/grove.ts +357 -0
  1005. package/src/services/api/logging.ts +788 -0
  1006. package/src/services/api/metricsOptOut.ts +159 -0
  1007. package/src/services/api/overageCreditGrant.ts +137 -0
  1008. package/src/services/api/promptCacheBreakDetection.ts +727 -0
  1009. package/src/services/api/referral.ts +281 -0
  1010. package/src/services/api/sessionIngress.ts +514 -0
  1011. package/src/services/api/ultrareviewQuota.ts +38 -0
  1012. package/src/services/api/usage.ts +63 -0
  1013. package/src/services/api/withRetry.ts +826 -0
  1014. package/src/services/autoDream/autoDream.ts +324 -0
  1015. package/src/services/autoDream/config.ts +21 -0
  1016. package/src/services/autoDream/consolidationLock.ts +140 -0
  1017. package/src/services/autoDream/consolidationPrompt.ts +65 -0
  1018. package/src/services/awaySummary.ts +74 -0
  1019. package/src/services/claudeAiLimits.ts +515 -0
  1020. package/src/services/claudeAiLimitsHook.ts +23 -0
  1021. package/src/services/compact/apiMicrocompact.ts +153 -0
  1022. package/src/services/compact/autoCompact.ts +351 -0
  1023. package/src/services/compact/compact.ts +1705 -0
  1024. package/src/services/compact/compactWarningHook.ts +16 -0
  1025. package/src/services/compact/compactWarningState.ts +18 -0
  1026. package/src/services/compact/grouping.ts +63 -0
  1027. package/src/services/compact/microCompact.ts +530 -0
  1028. package/src/services/compact/postCompactCleanup.ts +77 -0
  1029. package/src/services/compact/prompt.ts +374 -0
  1030. package/src/services/compact/sessionMemoryCompact.ts +630 -0
  1031. package/src/services/compact/timeBasedMCConfig.ts +43 -0
  1032. package/src/services/diagnosticTracking.ts +397 -0
  1033. package/src/services/extractMemories/extractMemories.ts +615 -0
  1034. package/src/services/extractMemories/prompts.ts +154 -0
  1035. package/src/services/internalLogging.ts +90 -0
  1036. package/src/services/lsp/LSPClient.ts +447 -0
  1037. package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  1038. package/src/services/lsp/LSPServerInstance.ts +511 -0
  1039. package/src/services/lsp/LSPServerManager.ts +420 -0
  1040. package/src/services/lsp/config.ts +79 -0
  1041. package/src/services/lsp/manager.ts +289 -0
  1042. package/src/services/lsp/passiveFeedback.ts +328 -0
  1043. package/src/services/mcp/InProcessTransport.ts +63 -0
  1044. package/src/services/mcp/MCPConnectionManager.tsx +73 -0
  1045. package/src/services/mcp/SdkControlTransport.ts +136 -0
  1046. package/src/services/mcp/auth.ts +2465 -0
  1047. package/src/services/mcp/channelAllowlist.ts +76 -0
  1048. package/src/services/mcp/channelNotification.ts +316 -0
  1049. package/src/services/mcp/channelPermissions.ts +240 -0
  1050. package/src/services/mcp/claudeai.ts +164 -0
  1051. package/src/services/mcp/client.ts +3348 -0
  1052. package/src/services/mcp/config.ts +1578 -0
  1053. package/src/services/mcp/elicitationHandler.ts +313 -0
  1054. package/src/services/mcp/envExpansion.ts +38 -0
  1055. package/src/services/mcp/headersHelper.ts +138 -0
  1056. package/src/services/mcp/mcpStringUtils.ts +106 -0
  1057. package/src/services/mcp/normalization.ts +23 -0
  1058. package/src/services/mcp/oauthPort.ts +78 -0
  1059. package/src/services/mcp/officialRegistry.ts +72 -0
  1060. package/src/services/mcp/types.ts +258 -0
  1061. package/src/services/mcp/useManageMCPConnections.ts +1141 -0
  1062. package/src/services/mcp/utils.ts +575 -0
  1063. package/src/services/mcp/vscodeSdkMcp.ts +112 -0
  1064. package/src/services/mcp/xaa.ts +511 -0
  1065. package/src/services/mcp/xaaIdpLogin.ts +487 -0
  1066. package/src/services/mcpServerApproval.tsx +41 -0
  1067. package/src/services/mockRateLimits.ts +882 -0
  1068. package/src/services/notifier.ts +156 -0
  1069. package/src/services/oauth/auth-code-listener.ts +211 -0
  1070. package/src/services/oauth/client.ts +566 -0
  1071. package/src/services/oauth/crypto.ts +23 -0
  1072. package/src/services/oauth/getOauthProfile.ts +53 -0
  1073. package/src/services/oauth/index.ts +198 -0
  1074. package/src/services/plugins/PluginInstallationManager.ts +184 -0
  1075. package/src/services/plugins/pluginCliCommands.ts +344 -0
  1076. package/src/services/plugins/pluginOperations.ts +1088 -0
  1077. package/src/services/policyLimits/index.ts +664 -0
  1078. package/src/services/policyLimits/types.ts +27 -0
  1079. package/src/services/preventSleep.ts +165 -0
  1080. package/src/services/rateLimitMessages.ts +344 -0
  1081. package/src/services/rateLimitMocking.ts +144 -0
  1082. package/src/services/remoteManagedSettings/index.ts +639 -0
  1083. package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
  1084. package/src/services/remoteManagedSettings/syncCache.ts +112 -0
  1085. package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
  1086. package/src/services/remoteManagedSettings/types.ts +31 -0
  1087. package/src/services/settingsSync/index.ts +581 -0
  1088. package/src/services/settingsSync/types.ts +67 -0
  1089. package/src/services/teamMemorySync/index.ts +1256 -0
  1090. package/src/services/teamMemorySync/secretScanner.ts +324 -0
  1091. package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  1092. package/src/services/teamMemorySync/types.ts +156 -0
  1093. package/src/services/teamMemorySync/watcher.ts +387 -0
  1094. package/src/services/tips/tipHistory.ts +17 -0
  1095. package/src/services/tips/tipRegistry.ts +686 -0
  1096. package/src/services/tips/tipScheduler.ts +58 -0
  1097. package/src/services/tokenEstimation.ts +495 -0
  1098. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1099. package/src/services/tools/StreamingToolExecutor.ts +530 -0
  1100. package/src/services/tools/toolExecution.ts +1745 -0
  1101. package/src/services/tools/toolHooks.ts +650 -0
  1102. package/src/services/tools/toolOrchestration.ts +188 -0
  1103. package/src/services/vcr.ts +406 -0
  1104. package/src/services/voice.ts +525 -0
  1105. package/src/services/voiceKeyterms.ts +106 -0
  1106. package/src/services/voiceStreamSTT.ts +544 -0
  1107. package/src/setup.ts +477 -0
  1108. package/src/skills/bundled/batch.ts +124 -0
  1109. package/src/skills/bundled/claudeApi.ts +196 -0
  1110. package/src/skills/bundled/claudeApiContent.ts +75 -0
  1111. package/src/skills/bundled/claudeInChrome.ts +34 -0
  1112. package/src/skills/bundled/debug.ts +103 -0
  1113. package/src/skills/bundled/index.ts +79 -0
  1114. package/src/skills/bundled/keybindings.ts +339 -0
  1115. package/src/skills/bundled/loop.ts +92 -0
  1116. package/src/skills/bundled/loremIpsum.ts +282 -0
  1117. package/src/skills/bundled/remember.ts +82 -0
  1118. package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
  1119. package/src/skills/bundled/simplify.ts +69 -0
  1120. package/src/skills/bundled/skillify.ts +197 -0
  1121. package/src/skills/bundled/stuck.ts +79 -0
  1122. package/src/skills/bundled/updateConfig.ts +475 -0
  1123. package/src/skills/bundled/verify.ts +30 -0
  1124. package/src/skills/bundled/verifyContent.ts +13 -0
  1125. package/src/skills/bundledSkills.ts +220 -0
  1126. package/src/skills/loadSkillsDir.ts +1086 -0
  1127. package/src/skills/mcpSkillBuilders.ts +44 -0
  1128. package/src/state/AppState.tsx +200 -0
  1129. package/src/state/AppStateStore.ts +569 -0
  1130. package/src/state/onChangeAppState.ts +171 -0
  1131. package/src/state/selectors.ts +76 -0
  1132. package/src/state/store.ts +34 -0
  1133. package/src/state/teammateViewHelpers.ts +141 -0
  1134. package/src/tasks/DreamTask/DreamTask.ts +157 -0
  1135. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  1136. package/src/tasks/InProcessTeammateTask/types.ts +121 -0
  1137. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  1138. package/src/tasks/LocalMainSessionTask.ts +479 -0
  1139. package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  1140. package/src/tasks/LocalShellTask/guards.ts +41 -0
  1141. package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
  1142. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  1143. package/src/tasks/pillLabel.ts +82 -0
  1144. package/src/tasks/stopTask.ts +100 -0
  1145. package/src/tasks/types.ts +46 -0
  1146. package/src/tasks.ts +39 -0
  1147. package/src/tools/AgentTool/AgentTool.tsx +1398 -0
  1148. package/src/tools/AgentTool/UI.tsx +872 -0
  1149. package/src/tools/AgentTool/agentColorManager.ts +66 -0
  1150. package/src/tools/AgentTool/agentDisplay.ts +104 -0
  1151. package/src/tools/AgentTool/agentMemory.ts +177 -0
  1152. package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1153. package/src/tools/AgentTool/agentToolUtils.ts +686 -0
  1154. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1155. package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1156. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1157. package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
  1158. package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1159. package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1160. package/src/tools/AgentTool/builtInAgents.ts +72 -0
  1161. package/src/tools/AgentTool/constants.ts +12 -0
  1162. package/src/tools/AgentTool/forkSubagent.ts +210 -0
  1163. package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
  1164. package/src/tools/AgentTool/prompt.ts +287 -0
  1165. package/src/tools/AgentTool/resumeAgent.ts +265 -0
  1166. package/src/tools/AgentTool/runAgent.ts +973 -0
  1167. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1168. package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
  1169. package/src/tools/BashTool/BashTool.tsx +1144 -0
  1170. package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1171. package/src/tools/BashTool/UI.tsx +185 -0
  1172. package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
  1173. package/src/tools/BashTool/bashPermissions.ts +2621 -0
  1174. package/src/tools/BashTool/bashSecurity.ts +2592 -0
  1175. package/src/tools/BashTool/commandSemantics.ts +140 -0
  1176. package/src/tools/BashTool/commentLabel.ts +13 -0
  1177. package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1178. package/src/tools/BashTool/modeValidation.ts +115 -0
  1179. package/src/tools/BashTool/pathValidation.ts +1303 -0
  1180. package/src/tools/BashTool/prompt.ts +369 -0
  1181. package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
  1182. package/src/tools/BashTool/sedEditParser.ts +322 -0
  1183. package/src/tools/BashTool/sedValidation.ts +684 -0
  1184. package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
  1185. package/src/tools/BashTool/toolName.ts +2 -0
  1186. package/src/tools/BashTool/utils.ts +223 -0
  1187. package/src/tools/BriefTool/BriefTool.ts +204 -0
  1188. package/src/tools/BriefTool/UI.tsx +101 -0
  1189. package/src/tools/BriefTool/attachments.ts +110 -0
  1190. package/src/tools/BriefTool/prompt.ts +22 -0
  1191. package/src/tools/BriefTool/upload.ts +174 -0
  1192. package/src/tools/ConfigTool/ConfigTool.ts +467 -0
  1193. package/src/tools/ConfigTool/UI.tsx +38 -0
  1194. package/src/tools/ConfigTool/constants.ts +1 -0
  1195. package/src/tools/ConfigTool/prompt.ts +93 -0
  1196. package/src/tools/ConfigTool/supportedSettings.ts +211 -0
  1197. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1198. package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
  1199. package/src/tools/EnterPlanModeTool/constants.ts +1 -0
  1200. package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
  1201. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1202. package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
  1203. package/src/tools/EnterWorktreeTool/constants.ts +1 -0
  1204. package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
  1205. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1206. package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
  1207. package/src/tools/ExitPlanModeTool/constants.ts +2 -0
  1208. package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
  1209. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1210. package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
  1211. package/src/tools/ExitWorktreeTool/constants.ts +1 -0
  1212. package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
  1213. package/src/tools/FileEditTool/FileEditTool.ts +625 -0
  1214. package/src/tools/FileEditTool/UI.tsx +289 -0
  1215. package/src/tools/FileEditTool/constants.ts +11 -0
  1216. package/src/tools/FileEditTool/prompt.ts +28 -0
  1217. package/src/tools/FileEditTool/types.ts +85 -0
  1218. package/src/tools/FileEditTool/utils.ts +775 -0
  1219. package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
  1220. package/src/tools/FileReadTool/UI.tsx +185 -0
  1221. package/src/tools/FileReadTool/imageProcessor.ts +94 -0
  1222. package/src/tools/FileReadTool/limits.ts +92 -0
  1223. package/src/tools/FileReadTool/prompt.ts +49 -0
  1224. package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1225. package/src/tools/FileWriteTool/UI.tsx +405 -0
  1226. package/src/tools/FileWriteTool/prompt.ts +18 -0
  1227. package/src/tools/GlobTool/GlobTool.ts +198 -0
  1228. package/src/tools/GlobTool/UI.tsx +63 -0
  1229. package/src/tools/GlobTool/prompt.ts +7 -0
  1230. package/src/tools/GrepTool/GrepTool.ts +577 -0
  1231. package/src/tools/GrepTool/UI.tsx +201 -0
  1232. package/src/tools/GrepTool/prompt.ts +18 -0
  1233. package/src/tools/LSPTool/LSPTool.ts +860 -0
  1234. package/src/tools/LSPTool/UI.tsx +228 -0
  1235. package/src/tools/LSPTool/formatters.ts +592 -0
  1236. package/src/tools/LSPTool/prompt.ts +21 -0
  1237. package/src/tools/LSPTool/schemas.ts +215 -0
  1238. package/src/tools/LSPTool/symbolContext.ts +90 -0
  1239. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1240. package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1241. package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1242. package/src/tools/MCPTool/MCPTool.ts +77 -0
  1243. package/src/tools/MCPTool/UI.tsx +403 -0
  1244. package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
  1245. package/src/tools/MCPTool/prompt.ts +3 -0
  1246. package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1247. package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1248. package/src/tools/NotebookEditTool/UI.tsx +93 -0
  1249. package/src/tools/NotebookEditTool/constants.ts +2 -0
  1250. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  1251. package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1252. package/src/tools/PowerShellTool/UI.tsx +131 -0
  1253. package/src/tools/PowerShellTool/clmTypes.ts +211 -0
  1254. package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
  1255. package/src/tools/PowerShellTool/commonParameters.ts +30 -0
  1256. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1257. package/src/tools/PowerShellTool/gitSafety.ts +176 -0
  1258. package/src/tools/PowerShellTool/modeValidation.ts +404 -0
  1259. package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
  1260. package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1261. package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1262. package/src/tools/PowerShellTool/prompt.ts +145 -0
  1263. package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1264. package/src/tools/PowerShellTool/toolName.ts +2 -0
  1265. package/src/tools/REPLTool/constants.ts +46 -0
  1266. package/src/tools/REPLTool/primitiveTools.ts +39 -0
  1267. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1268. package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1269. package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1270. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1271. package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
  1272. package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
  1273. package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1274. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1275. package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1276. package/src/tools/ScheduleCronTool/UI.tsx +60 -0
  1277. package/src/tools/ScheduleCronTool/prompt.ts +135 -0
  1278. package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1279. package/src/tools/SendMessageTool/UI.tsx +31 -0
  1280. package/src/tools/SendMessageTool/constants.ts +1 -0
  1281. package/src/tools/SendMessageTool/prompt.ts +49 -0
  1282. package/src/tools/SkillTool/SkillTool.ts +1108 -0
  1283. package/src/tools/SkillTool/UI.tsx +128 -0
  1284. package/src/tools/SkillTool/constants.ts +1 -0
  1285. package/src/tools/SkillTool/prompt.ts +241 -0
  1286. package/src/tools/SleepTool/prompt.ts +17 -0
  1287. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1288. package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1289. package/src/tools/TaskCreateTool/constants.ts +1 -0
  1290. package/src/tools/TaskCreateTool/prompt.ts +56 -0
  1291. package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1292. package/src/tools/TaskGetTool/constants.ts +1 -0
  1293. package/src/tools/TaskGetTool/prompt.ts +24 -0
  1294. package/src/tools/TaskListTool/TaskListTool.ts +116 -0
  1295. package/src/tools/TaskListTool/constants.ts +1 -0
  1296. package/src/tools/TaskListTool/prompt.ts +49 -0
  1297. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1298. package/src/tools/TaskOutputTool/constants.ts +1 -0
  1299. package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1300. package/src/tools/TaskStopTool/UI.tsx +41 -0
  1301. package/src/tools/TaskStopTool/prompt.ts +8 -0
  1302. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1303. package/src/tools/TaskUpdateTool/constants.ts +1 -0
  1304. package/src/tools/TaskUpdateTool/prompt.ts +77 -0
  1305. package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1306. package/src/tools/TeamCreateTool/UI.tsx +6 -0
  1307. package/src/tools/TeamCreateTool/constants.ts +1 -0
  1308. package/src/tools/TeamCreateTool/prompt.ts +113 -0
  1309. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1310. package/src/tools/TeamDeleteTool/UI.tsx +20 -0
  1311. package/src/tools/TeamDeleteTool/constants.ts +1 -0
  1312. package/src/tools/TeamDeleteTool/prompt.ts +16 -0
  1313. package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1314. package/src/tools/TodoWriteTool/constants.ts +1 -0
  1315. package/src/tools/TodoWriteTool/prompt.ts +184 -0
  1316. package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1317. package/src/tools/ToolSearchTool/constants.ts +1 -0
  1318. package/src/tools/ToolSearchTool/prompt.ts +121 -0
  1319. package/src/tools/TungstenTool/TungstenTool.js +2 -0
  1320. package/src/tools/TungstenTool/TungstenTool.ts +1 -0
  1321. package/src/tools/WebFetchTool/UI.tsx +72 -0
  1322. package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1323. package/src/tools/WebFetchTool/preapproved.ts +166 -0
  1324. package/src/tools/WebFetchTool/prompt.ts +46 -0
  1325. package/src/tools/WebFetchTool/utils.ts +530 -0
  1326. package/src/tools/WebSearchTool/UI.tsx +101 -0
  1327. package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1328. package/src/tools/WebSearchTool/prompt.ts +34 -0
  1329. package/src/tools/shared/gitOperationTracking.ts +277 -0
  1330. package/src/tools/shared/spawnMultiAgent.ts +1093 -0
  1331. package/src/tools/testing/TestingPermissionTool.tsx +74 -0
  1332. package/src/tools/utils.ts +40 -0
  1333. package/src/tools.ts +389 -0
  1334. package/src/types/command.ts +216 -0
  1335. package/src/types/connectorText.js +5 -0
  1336. package/src/types/connectorText.ts +1 -0
  1337. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1338. package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
  1339. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1340. package/src/types/generated/google/protobuf/timestamp.ts +187 -0
  1341. package/src/types/hooks.ts +290 -0
  1342. package/src/types/ids.ts +44 -0
  1343. package/src/types/logs.ts +330 -0
  1344. package/src/types/permissions.ts +441 -0
  1345. package/src/types/plugin.ts +363 -0
  1346. package/src/types/textInputTypes.ts +387 -0
  1347. package/src/upstreamproxy/relay.ts +455 -0
  1348. package/src/upstreamproxy/upstreamproxy.ts +285 -0
  1349. package/src/utils/CircularBuffer.ts +84 -0
  1350. package/src/utils/Cursor.ts +1530 -0
  1351. package/src/utils/QueryGuard.ts +121 -0
  1352. package/src/utils/Shell.ts +474 -0
  1353. package/src/utils/ShellCommand.ts +465 -0
  1354. package/src/utils/abortController.ts +99 -0
  1355. package/src/utils/activityManager.ts +164 -0
  1356. package/src/utils/advisor.ts +145 -0
  1357. package/src/utils/agentContext.ts +178 -0
  1358. package/src/utils/agentId.ts +99 -0
  1359. package/src/utils/agentSwarmsEnabled.ts +44 -0
  1360. package/src/utils/agenticSessionSearch.ts +307 -0
  1361. package/src/utils/analyzeContext.ts +1382 -0
  1362. package/src/utils/ansiToPng.ts +334 -0
  1363. package/src/utils/ansiToSvg.ts +272 -0
  1364. package/src/utils/api.ts +718 -0
  1365. package/src/utils/apiPreconnect.ts +72 -0
  1366. package/src/utils/appleTerminalBackup.ts +124 -0
  1367. package/src/utils/argumentSubstitution.ts +145 -0
  1368. package/src/utils/array.ts +13 -0
  1369. package/src/utils/asciicast.ts +239 -0
  1370. package/src/utils/attachments.ts +3997 -0
  1371. package/src/utils/attribution.ts +393 -0
  1372. package/src/utils/auth.ts +2007 -0
  1373. package/src/utils/authFileDescriptor.ts +196 -0
  1374. package/src/utils/authPortable.ts +19 -0
  1375. package/src/utils/autoModeDenials.ts +26 -0
  1376. package/src/utils/autoRunIssue.tsx +122 -0
  1377. package/src/utils/autoUpdater.ts +562 -0
  1378. package/src/utils/aws.ts +74 -0
  1379. package/src/utils/awsAuthStatusManager.ts +81 -0
  1380. package/src/utils/background/remote/preconditions.ts +235 -0
  1381. package/src/utils/background/remote/remoteSession.ts +98 -0
  1382. package/src/utils/backgroundHousekeeping.ts +94 -0
  1383. package/src/utils/bash/ParsedCommand.ts +318 -0
  1384. package/src/utils/bash/ShellSnapshot.ts +582 -0
  1385. package/src/utils/bash/ast.ts +2679 -0
  1386. package/src/utils/bash/bashParser.ts +4436 -0
  1387. package/src/utils/bash/bashPipeCommand.ts +294 -0
  1388. package/src/utils/bash/commands.ts +1339 -0
  1389. package/src/utils/bash/heredoc.ts +733 -0
  1390. package/src/utils/bash/parser.ts +230 -0
  1391. package/src/utils/bash/prefix.ts +204 -0
  1392. package/src/utils/bash/registry.ts +53 -0
  1393. package/src/utils/bash/shellCompletion.ts +259 -0
  1394. package/src/utils/bash/shellPrefix.ts +28 -0
  1395. package/src/utils/bash/shellQuote.ts +304 -0
  1396. package/src/utils/bash/shellQuoting.ts +128 -0
  1397. package/src/utils/bash/specs/alias.ts +14 -0
  1398. package/src/utils/bash/specs/index.ts +18 -0
  1399. package/src/utils/bash/specs/nohup.ts +13 -0
  1400. package/src/utils/bash/specs/pyright.ts +91 -0
  1401. package/src/utils/bash/specs/sleep.ts +13 -0
  1402. package/src/utils/bash/specs/srun.ts +31 -0
  1403. package/src/utils/bash/specs/time.ts +13 -0
  1404. package/src/utils/bash/specs/timeout.ts +20 -0
  1405. package/src/utils/bash/treeSitterAnalysis.ts +506 -0
  1406. package/src/utils/betas.ts +438 -0
  1407. package/src/utils/billing.ts +78 -0
  1408. package/src/utils/binaryCheck.ts +53 -0
  1409. package/src/utils/browser.ts +68 -0
  1410. package/src/utils/bufferedWriter.ts +100 -0
  1411. package/src/utils/bundledMode.ts +22 -0
  1412. package/src/utils/caCerts.ts +115 -0
  1413. package/src/utils/caCertsConfig.ts +88 -0
  1414. package/src/utils/cachePaths.ts +38 -0
  1415. package/src/utils/classifierApprovals.ts +88 -0
  1416. package/src/utils/classifierApprovalsHook.ts +17 -0
  1417. package/src/utils/claudeCodeHints.ts +193 -0
  1418. package/src/utils/claudeDesktop.ts +152 -0
  1419. package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1420. package/src/utils/claudeInChrome/common.ts +540 -0
  1421. package/src/utils/claudeInChrome/mcpServer.ts +293 -0
  1422. package/src/utils/claudeInChrome/prompt.ts +83 -0
  1423. package/src/utils/claudeInChrome/setup.ts +400 -0
  1424. package/src/utils/claudeInChrome/setupPortable.ts +233 -0
  1425. package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
  1426. package/src/utils/claudemd.ts +1479 -0
  1427. package/src/utils/cleanup.ts +602 -0
  1428. package/src/utils/cleanupRegistry.ts +25 -0
  1429. package/src/utils/cliArgs.ts +60 -0
  1430. package/src/utils/cliHighlight.ts +54 -0
  1431. package/src/utils/codeIndexing.ts +206 -0
  1432. package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
  1433. package/src/utils/collapseHookSummaries.ts +59 -0
  1434. package/src/utils/collapseReadSearch.ts +1109 -0
  1435. package/src/utils/collapseTeammateShutdowns.ts +55 -0
  1436. package/src/utils/combinedAbortSignal.ts +47 -0
  1437. package/src/utils/commandLifecycle.ts +21 -0
  1438. package/src/utils/commitAttribution.ts +961 -0
  1439. package/src/utils/completionCache.ts +166 -0
  1440. package/src/utils/computerUse/appNames.ts +196 -0
  1441. package/src/utils/computerUse/cleanup.ts +86 -0
  1442. package/src/utils/computerUse/common.ts +61 -0
  1443. package/src/utils/computerUse/computerUseLock.ts +215 -0
  1444. package/src/utils/computerUse/drainRunLoop.ts +79 -0
  1445. package/src/utils/computerUse/escHotkey.ts +54 -0
  1446. package/src/utils/computerUse/executor.ts +658 -0
  1447. package/src/utils/computerUse/gates.ts +72 -0
  1448. package/src/utils/computerUse/hostAdapter.ts +69 -0
  1449. package/src/utils/computerUse/inputLoader.ts +30 -0
  1450. package/src/utils/computerUse/mcpServer.ts +106 -0
  1451. package/src/utils/computerUse/setup.ts +53 -0
  1452. package/src/utils/computerUse/swiftLoader.ts +23 -0
  1453. package/src/utils/computerUse/toolRendering.tsx +125 -0
  1454. package/src/utils/computerUse/wrapper.tsx +336 -0
  1455. package/src/utils/concurrentSessions.ts +204 -0
  1456. package/src/utils/config.ts +1817 -0
  1457. package/src/utils/configConstants.ts +21 -0
  1458. package/src/utils/contentArray.ts +51 -0
  1459. package/src/utils/context.ts +221 -0
  1460. package/src/utils/contextAnalysis.ts +272 -0
  1461. package/src/utils/contextSuggestions.ts +235 -0
  1462. package/src/utils/controlMessageCompat.ts +32 -0
  1463. package/src/utils/conversationRecovery.ts +597 -0
  1464. package/src/utils/cron.ts +308 -0
  1465. package/src/utils/cronJitterConfig.ts +75 -0
  1466. package/src/utils/cronScheduler.ts +565 -0
  1467. package/src/utils/cronTasks.ts +458 -0
  1468. package/src/utils/cronTasksLock.ts +195 -0
  1469. package/src/utils/crossProjectResume.ts +75 -0
  1470. package/src/utils/crypto.ts +13 -0
  1471. package/src/utils/cwd.ts +32 -0
  1472. package/src/utils/debug.ts +268 -0
  1473. package/src/utils/debugFilter.ts +157 -0
  1474. package/src/utils/deepLink/banner.ts +123 -0
  1475. package/src/utils/deepLink/parseDeepLink.ts +170 -0
  1476. package/src/utils/deepLink/protocolHandler.ts +136 -0
  1477. package/src/utils/deepLink/registerProtocol.ts +348 -0
  1478. package/src/utils/deepLink/terminalLauncher.ts +557 -0
  1479. package/src/utils/deepLink/terminalPreference.ts +54 -0
  1480. package/src/utils/desktopDeepLink.ts +236 -0
  1481. package/src/utils/detectRepository.ts +178 -0
  1482. package/src/utils/diagLogs.ts +94 -0
  1483. package/src/utils/diff.ts +177 -0
  1484. package/src/utils/directMemberMessage.ts +69 -0
  1485. package/src/utils/displayTags.ts +51 -0
  1486. package/src/utils/doctorContextWarnings.ts +265 -0
  1487. package/src/utils/doctorDiagnostic.ts +625 -0
  1488. package/src/utils/dxt/helpers.ts +88 -0
  1489. package/src/utils/dxt/zip.ts +226 -0
  1490. package/src/utils/earlyInput.ts +191 -0
  1491. package/src/utils/editor.ts +183 -0
  1492. package/src/utils/effort.ts +329 -0
  1493. package/src/utils/embeddedTools.ts +29 -0
  1494. package/src/utils/env.ts +347 -0
  1495. package/src/utils/envDynamic.ts +151 -0
  1496. package/src/utils/envUtils.ts +183 -0
  1497. package/src/utils/envValidation.ts +38 -0
  1498. package/src/utils/errorLogSink.ts +235 -0
  1499. package/src/utils/errors.ts +238 -0
  1500. package/src/utils/exampleCommands.ts +184 -0
  1501. package/src/utils/execFileNoThrow.ts +150 -0
  1502. package/src/utils/execFileNoThrowPortable.ts +89 -0
  1503. package/src/utils/execSyncWrapper.ts +38 -0
  1504. package/src/utils/exportRenderer.tsx +98 -0
  1505. package/src/utils/extraUsage.ts +23 -0
  1506. package/src/utils/fastMode.ts +532 -0
  1507. package/src/utils/file.ts +584 -0
  1508. package/src/utils/fileHistory.ts +1115 -0
  1509. package/src/utils/fileOperationAnalytics.ts +71 -0
  1510. package/src/utils/filePersistence/filePersistence.ts +287 -0
  1511. package/src/utils/filePersistence/outputsScanner.ts +126 -0
  1512. package/src/utils/fileRead.ts +102 -0
  1513. package/src/utils/fileReadCache.ts +96 -0
  1514. package/src/utils/fileStateCache.ts +142 -0
  1515. package/src/utils/findExecutable.ts +17 -0
  1516. package/src/utils/fingerprint.ts +76 -0
  1517. package/src/utils/forkedAgent.ts +689 -0
  1518. package/src/utils/format.ts +308 -0
  1519. package/src/utils/formatBriefTimestamp.ts +81 -0
  1520. package/src/utils/fpsTracker.ts +47 -0
  1521. package/src/utils/frontmatterParser.ts +370 -0
  1522. package/src/utils/fsOperations.ts +770 -0
  1523. package/src/utils/fullscreen.ts +202 -0
  1524. package/src/utils/generatedFiles.ts +136 -0
  1525. package/src/utils/generators.ts +88 -0
  1526. package/src/utils/genericProcessUtils.ts +184 -0
  1527. package/src/utils/getWorktreePaths.ts +70 -0
  1528. package/src/utils/getWorktreePathsPortable.ts +27 -0
  1529. package/src/utils/ghPrStatus.ts +106 -0
  1530. package/src/utils/git/gitConfigParser.ts +277 -0
  1531. package/src/utils/git/gitFilesystem.ts +699 -0
  1532. package/src/utils/git/gitignore.ts +99 -0
  1533. package/src/utils/git.ts +926 -0
  1534. package/src/utils/gitDiff.ts +532 -0
  1535. package/src/utils/gitSettings.ts +18 -0
  1536. package/src/utils/github/ghAuthStatus.ts +29 -0
  1537. package/src/utils/githubRepoPathMapping.ts +162 -0
  1538. package/src/utils/glob.ts +130 -0
  1539. package/src/utils/gracefulShutdown.ts +529 -0
  1540. package/src/utils/groupToolUses.ts +182 -0
  1541. package/src/utils/handlePromptSubmit.ts +610 -0
  1542. package/src/utils/hash.ts +46 -0
  1543. package/src/utils/headlessProfiler.ts +178 -0
  1544. package/src/utils/heapDumpService.ts +303 -0
  1545. package/src/utils/heatmap.ts +198 -0
  1546. package/src/utils/highlightMatch.tsx +28 -0
  1547. package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
  1548. package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
  1549. package/src/utils/hooks/execAgentHook.ts +339 -0
  1550. package/src/utils/hooks/execHttpHook.ts +242 -0
  1551. package/src/utils/hooks/execPromptHook.ts +211 -0
  1552. package/src/utils/hooks/fileChangedWatcher.ts +191 -0
  1553. package/src/utils/hooks/hookEvents.ts +192 -0
  1554. package/src/utils/hooks/hookHelpers.ts +83 -0
  1555. package/src/utils/hooks/hooksConfigManager.ts +400 -0
  1556. package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1557. package/src/utils/hooks/hooksSettings.ts +271 -0
  1558. package/src/utils/hooks/postSamplingHooks.ts +70 -0
  1559. package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1560. package/src/utils/hooks/registerSkillHooks.ts +64 -0
  1561. package/src/utils/hooks/sessionHooks.ts +447 -0
  1562. package/src/utils/hooks/skillImprovement.ts +267 -0
  1563. package/src/utils/hooks/ssrfGuard.ts +294 -0
  1564. package/src/utils/hooks.ts +5022 -0
  1565. package/src/utils/horizontalScroll.ts +137 -0
  1566. package/src/utils/http.ts +136 -0
  1567. package/src/utils/hyperlink.ts +39 -0
  1568. package/src/utils/iTermBackup.ts +73 -0
  1569. package/src/utils/ide.ts +1494 -0
  1570. package/src/utils/idePathConversion.ts +90 -0
  1571. package/src/utils/idleTimeout.ts +53 -0
  1572. package/src/utils/imagePaste.ts +416 -0
  1573. package/src/utils/imageResizer.ts +880 -0
  1574. package/src/utils/imageStore.ts +167 -0
  1575. package/src/utils/imageValidation.ts +104 -0
  1576. package/src/utils/immediateCommand.ts +15 -0
  1577. package/src/utils/inProcessTeammateHelpers.ts +102 -0
  1578. package/src/utils/ink.ts +26 -0
  1579. package/src/utils/intl.ts +94 -0
  1580. package/src/utils/jetbrains.ts +191 -0
  1581. package/src/utils/json.ts +277 -0
  1582. package/src/utils/jsonRead.ts +16 -0
  1583. package/src/utils/keyboardShortcuts.ts +14 -0
  1584. package/src/utils/lazySchema.ts +8 -0
  1585. package/src/utils/listSessionsImpl.ts +454 -0
  1586. package/src/utils/localInstaller.ts +162 -0
  1587. package/src/utils/lockfile.ts +43 -0
  1588. package/src/utils/log.ts +362 -0
  1589. package/src/utils/logoV2Utils.ts +350 -0
  1590. package/src/utils/mailbox.ts +73 -0
  1591. package/src/utils/managedEnv.ts +199 -0
  1592. package/src/utils/managedEnvConstants.ts +191 -0
  1593. package/src/utils/markdown.ts +381 -0
  1594. package/src/utils/markdownConfigLoader.ts +600 -0
  1595. package/src/utils/mcp/dateTimeParser.ts +121 -0
  1596. package/src/utils/mcp/elicitationValidation.ts +336 -0
  1597. package/src/utils/mcpInstructionsDelta.ts +130 -0
  1598. package/src/utils/mcpOutputStorage.ts +189 -0
  1599. package/src/utils/mcpValidation.ts +208 -0
  1600. package/src/utils/mcpWebSocketTransport.ts +200 -0
  1601. package/src/utils/memoize.ts +269 -0
  1602. package/src/utils/memory/types.ts +12 -0
  1603. package/src/utils/memory/versions.ts +8 -0
  1604. package/src/utils/memoryFileDetection.ts +289 -0
  1605. package/src/utils/messagePredicates.ts +8 -0
  1606. package/src/utils/messageQueueManager.ts +547 -0
  1607. package/src/utils/messages/mappers.ts +290 -0
  1608. package/src/utils/messages/systemInit.ts +96 -0
  1609. package/src/utils/messages.ts +5512 -0
  1610. package/src/utils/model/agent.ts +157 -0
  1611. package/src/utils/model/aliases.ts +25 -0
  1612. package/src/utils/model/antModels.ts +64 -0
  1613. package/src/utils/model/bedrock.ts +265 -0
  1614. package/src/utils/model/check1mAccess.ts +72 -0
  1615. package/src/utils/model/configs.ts +118 -0
  1616. package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1617. package/src/utils/model/deprecation.ts +101 -0
  1618. package/src/utils/model/model.ts +634 -0
  1619. package/src/utils/model/modelAllowlist.ts +170 -0
  1620. package/src/utils/model/modelCapabilities.ts +118 -0
  1621. package/src/utils/model/modelOptions.ts +540 -0
  1622. package/src/utils/model/modelStrings.ts +166 -0
  1623. package/src/utils/model/modelSupportOverrides.ts +50 -0
  1624. package/src/utils/model/providers.ts +46 -0
  1625. package/src/utils/model/validateModel.ts +159 -0
  1626. package/src/utils/modelCost.ts +235 -0
  1627. package/src/utils/modifiers.ts +36 -0
  1628. package/src/utils/mtls.ts +179 -0
  1629. package/src/utils/nativeInstaller/download.ts +523 -0
  1630. package/src/utils/nativeInstaller/index.ts +18 -0
  1631. package/src/utils/nativeInstaller/installer.ts +1708 -0
  1632. package/src/utils/nativeInstaller/packageManagers.ts +336 -0
  1633. package/src/utils/nativeInstaller/pidLock.ts +433 -0
  1634. package/src/utils/notebook.ts +224 -0
  1635. package/src/utils/objectGroupBy.ts +18 -0
  1636. package/src/utils/pasteStore.ts +104 -0
  1637. package/src/utils/path.ts +155 -0
  1638. package/src/utils/pdf.ts +300 -0
  1639. package/src/utils/pdfUtils.ts +70 -0
  1640. package/src/utils/peerAddress.ts +21 -0
  1641. package/src/utils/permissions/PermissionMode.ts +141 -0
  1642. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1643. package/src/utils/permissions/PermissionResult.ts +35 -0
  1644. package/src/utils/permissions/PermissionRule.ts +40 -0
  1645. package/src/utils/permissions/PermissionUpdate.ts +389 -0
  1646. package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1647. package/src/utils/permissions/autoModeState.ts +39 -0
  1648. package/src/utils/permissions/bashClassifier.ts +61 -0
  1649. package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1650. package/src/utils/permissions/classifierDecision.ts +98 -0
  1651. package/src/utils/permissions/classifierShared.ts +39 -0
  1652. package/src/utils/permissions/dangerousPatterns.ts +80 -0
  1653. package/src/utils/permissions/denialTracking.ts +45 -0
  1654. package/src/utils/permissions/filesystem.ts +1777 -0
  1655. package/src/utils/permissions/getNextPermissionMode.ts +101 -0
  1656. package/src/utils/permissions/pathValidation.ts +485 -0
  1657. package/src/utils/permissions/permissionExplainer.ts +250 -0
  1658. package/src/utils/permissions/permissionRuleParser.ts +198 -0
  1659. package/src/utils/permissions/permissionSetup.ts +1532 -0
  1660. package/src/utils/permissions/permissions.ts +1486 -0
  1661. package/src/utils/permissions/permissionsLoader.ts +296 -0
  1662. package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
  1663. package/src/utils/permissions/shellRuleMatching.ts +228 -0
  1664. package/src/utils/permissions/yoloClassifier.ts +1495 -0
  1665. package/src/utils/planModeV2.ts +95 -0
  1666. package/src/utils/plans.ts +397 -0
  1667. package/src/utils/platform.ts +150 -0
  1668. package/src/utils/plugins/addDirPluginSettings.ts +71 -0
  1669. package/src/utils/plugins/cacheUtils.ts +196 -0
  1670. package/src/utils/plugins/dependencyResolver.ts +305 -0
  1671. package/src/utils/plugins/fetchTelemetry.ts +135 -0
  1672. package/src/utils/plugins/gitAvailability.ts +69 -0
  1673. package/src/utils/plugins/headlessPluginInstall.ts +174 -0
  1674. package/src/utils/plugins/hintRecommendation.ts +164 -0
  1675. package/src/utils/plugins/installCounts.ts +292 -0
  1676. package/src/utils/plugins/installedPluginsManager.ts +1268 -0
  1677. package/src/utils/plugins/loadPluginAgents.ts +348 -0
  1678. package/src/utils/plugins/loadPluginCommands.ts +946 -0
  1679. package/src/utils/plugins/loadPluginHooks.ts +287 -0
  1680. package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1681. package/src/utils/plugins/lspPluginIntegration.ts +387 -0
  1682. package/src/utils/plugins/lspRecommendation.ts +374 -0
  1683. package/src/utils/plugins/managedPlugins.ts +27 -0
  1684. package/src/utils/plugins/marketplaceHelpers.ts +592 -0
  1685. package/src/utils/plugins/marketplaceManager.ts +2643 -0
  1686. package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
  1687. package/src/utils/plugins/mcpbHandler.ts +968 -0
  1688. package/src/utils/plugins/officialMarketplace.ts +25 -0
  1689. package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1690. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1691. package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
  1692. package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
  1693. package/src/utils/plugins/performStartupChecks.tsx +70 -0
  1694. package/src/utils/plugins/pluginAutoupdate.ts +284 -0
  1695. package/src/utils/plugins/pluginBlocklist.ts +127 -0
  1696. package/src/utils/plugins/pluginDirectories.ts +178 -0
  1697. package/src/utils/plugins/pluginFlagging.ts +208 -0
  1698. package/src/utils/plugins/pluginIdentifier.ts +123 -0
  1699. package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1700. package/src/utils/plugins/pluginLoader.ts +3302 -0
  1701. package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
  1702. package/src/utils/plugins/pluginPolicy.ts +20 -0
  1703. package/src/utils/plugins/pluginStartupCheck.ts +341 -0
  1704. package/src/utils/plugins/pluginVersioning.ts +157 -0
  1705. package/src/utils/plugins/reconciler.ts +265 -0
  1706. package/src/utils/plugins/refresh.ts +215 -0
  1707. package/src/utils/plugins/schemas.ts +1681 -0
  1708. package/src/utils/plugins/validatePlugin.ts +903 -0
  1709. package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
  1710. package/src/utils/plugins/zipCache.ts +406 -0
  1711. package/src/utils/plugins/zipCacheAdapters.ts +164 -0
  1712. package/src/utils/powershell/dangerousCmdlets.ts +185 -0
  1713. package/src/utils/powershell/parser.ts +1804 -0
  1714. package/src/utils/powershell/staticPrefix.ts +316 -0
  1715. package/src/utils/preflightChecks.tsx +151 -0
  1716. package/src/utils/privacyLevel.ts +55 -0
  1717. package/src/utils/process.ts +68 -0
  1718. package/src/utils/processUserInput/processBashCommand.tsx +140 -0
  1719. package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
  1720. package/src/utils/processUserInput/processTextPrompt.ts +100 -0
  1721. package/src/utils/processUserInput/processUserInput.ts +605 -0
  1722. package/src/utils/profilerBase.ts +46 -0
  1723. package/src/utils/promptCategory.ts +49 -0
  1724. package/src/utils/promptEditor.ts +188 -0
  1725. package/src/utils/promptShellExecution.ts +183 -0
  1726. package/src/utils/proxy.ts +426 -0
  1727. package/src/utils/queryContext.ts +179 -0
  1728. package/src/utils/queryHelpers.ts +552 -0
  1729. package/src/utils/queryProfiler.ts +301 -0
  1730. package/src/utils/queueProcessor.ts +95 -0
  1731. package/src/utils/readEditContext.ts +227 -0
  1732. package/src/utils/readFileInRange.ts +383 -0
  1733. package/src/utils/releaseNotes.ts +360 -0
  1734. package/src/utils/renderOptions.ts +77 -0
  1735. package/src/utils/ripgrep.ts +679 -0
  1736. package/src/utils/sandbox/sandbox-adapter.ts +985 -0
  1737. package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1738. package/src/utils/sanitization.ts +91 -0
  1739. package/src/utils/screenshotClipboard.ts +121 -0
  1740. package/src/utils/sdkEventQueue.ts +134 -0
  1741. package/src/utils/secureStorage/fallbackStorage.ts +70 -0
  1742. package/src/utils/secureStorage/index.ts +17 -0
  1743. package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
  1744. package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1745. package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1746. package/src/utils/secureStorage/plainTextStorage.ts +84 -0
  1747. package/src/utils/semanticBoolean.ts +29 -0
  1748. package/src/utils/semanticNumber.ts +36 -0
  1749. package/src/utils/semver.ts +59 -0
  1750. package/src/utils/sequential.ts +56 -0
  1751. package/src/utils/sessionActivity.ts +133 -0
  1752. package/src/utils/sessionEnvVars.ts +22 -0
  1753. package/src/utils/sessionEnvironment.ts +166 -0
  1754. package/src/utils/sessionFileAccessHooks.ts +250 -0
  1755. package/src/utils/sessionIngressAuth.ts +140 -0
  1756. package/src/utils/sessionRestore.ts +551 -0
  1757. package/src/utils/sessionStart.ts +232 -0
  1758. package/src/utils/sessionState.ts +150 -0
  1759. package/src/utils/sessionStorage.ts +5105 -0
  1760. package/src/utils/sessionStoragePortable.ts +793 -0
  1761. package/src/utils/sessionTitle.ts +129 -0
  1762. package/src/utils/sessionUrl.ts +64 -0
  1763. package/src/utils/set.ts +53 -0
  1764. package/src/utils/settings/allErrors.ts +32 -0
  1765. package/src/utils/settings/applySettingsChange.ts +92 -0
  1766. package/src/utils/settings/changeDetector.ts +488 -0
  1767. package/src/utils/settings/constants.ts +202 -0
  1768. package/src/utils/settings/internalWrites.ts +37 -0
  1769. package/src/utils/settings/managedPath.ts +34 -0
  1770. package/src/utils/settings/mdm/constants.ts +81 -0
  1771. package/src/utils/settings/mdm/rawRead.ts +130 -0
  1772. package/src/utils/settings/mdm/settings.ts +316 -0
  1773. package/src/utils/settings/permissionValidation.ts +262 -0
  1774. package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
  1775. package/src/utils/settings/schemaOutput.ts +8 -0
  1776. package/src/utils/settings/settings.ts +1015 -0
  1777. package/src/utils/settings/settingsCache.ts +80 -0
  1778. package/src/utils/settings/toolValidationConfig.ts +103 -0
  1779. package/src/utils/settings/types.ts +1148 -0
  1780. package/src/utils/settings/validateEditTool.ts +45 -0
  1781. package/src/utils/settings/validation.ts +265 -0
  1782. package/src/utils/settings/validationTips.ts +164 -0
  1783. package/src/utils/shell/bashProvider.ts +255 -0
  1784. package/src/utils/shell/outputLimits.ts +14 -0
  1785. package/src/utils/shell/powershellDetection.ts +107 -0
  1786. package/src/utils/shell/powershellProvider.ts +123 -0
  1787. package/src/utils/shell/prefix.ts +367 -0
  1788. package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1789. package/src/utils/shell/resolveDefaultShell.ts +14 -0
  1790. package/src/utils/shell/shellProvider.ts +33 -0
  1791. package/src/utils/shell/shellToolUtils.ts +22 -0
  1792. package/src/utils/shell/specPrefix.ts +241 -0
  1793. package/src/utils/shellConfig.ts +167 -0
  1794. package/src/utils/sideQuery.ts +222 -0
  1795. package/src/utils/sideQuestion.ts +155 -0
  1796. package/src/utils/signal.ts +43 -0
  1797. package/src/utils/sinks.ts +16 -0
  1798. package/src/utils/skills/skillChangeDetector.ts +311 -0
  1799. package/src/utils/slashCommandParsing.ts +60 -0
  1800. package/src/utils/sleep.ts +84 -0
  1801. package/src/utils/sliceAnsi.ts +91 -0
  1802. package/src/utils/slowOperations.ts +286 -0
  1803. package/src/utils/standaloneAgent.ts +23 -0
  1804. package/src/utils/startupProfiler.ts +194 -0
  1805. package/src/utils/staticRender.tsx +116 -0
  1806. package/src/utils/stats.ts +1061 -0
  1807. package/src/utils/statsCache.ts +434 -0
  1808. package/src/utils/status.tsx +362 -0
  1809. package/src/utils/statusNoticeDefinitions.tsx +198 -0
  1810. package/src/utils/statusNoticeHelpers.ts +20 -0
  1811. package/src/utils/stream.ts +76 -0
  1812. package/src/utils/streamJsonStdoutGuard.ts +123 -0
  1813. package/src/utils/streamlinedTransform.ts +201 -0
  1814. package/src/utils/stringUtils.ts +235 -0
  1815. package/src/utils/subprocessEnv.ts +99 -0
  1816. package/src/utils/suggestions/commandSuggestions.ts +567 -0
  1817. package/src/utils/suggestions/directoryCompletion.ts +263 -0
  1818. package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1819. package/src/utils/suggestions/skillUsageTracking.ts +55 -0
  1820. package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1821. package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
  1822. package/src/utils/swarm/backends/ITermBackend.ts +370 -0
  1823. package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
  1824. package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1825. package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
  1826. package/src/utils/swarm/backends/detection.ts +128 -0
  1827. package/src/utils/swarm/backends/it2Setup.ts +245 -0
  1828. package/src/utils/swarm/backends/registry.ts +464 -0
  1829. package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1830. package/src/utils/swarm/backends/types.ts +311 -0
  1831. package/src/utils/swarm/constants.ts +33 -0
  1832. package/src/utils/swarm/inProcessRunner.ts +1552 -0
  1833. package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
  1834. package/src/utils/swarm/permissionSync.ts +928 -0
  1835. package/src/utils/swarm/reconnection.ts +119 -0
  1836. package/src/utils/swarm/spawnInProcess.ts +328 -0
  1837. package/src/utils/swarm/spawnUtils.ts +146 -0
  1838. package/src/utils/swarm/teamHelpers.ts +683 -0
  1839. package/src/utils/swarm/teammateInit.ts +129 -0
  1840. package/src/utils/swarm/teammateLayoutManager.ts +107 -0
  1841. package/src/utils/swarm/teammateModel.ts +10 -0
  1842. package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
  1843. package/src/utils/systemDirectories.ts +74 -0
  1844. package/src/utils/systemPrompt.ts +123 -0
  1845. package/src/utils/systemPromptType.ts +14 -0
  1846. package/src/utils/systemTheme.ts +119 -0
  1847. package/src/utils/taggedId.ts +54 -0
  1848. package/src/utils/task/TaskOutput.ts +390 -0
  1849. package/src/utils/task/diskOutput.ts +451 -0
  1850. package/src/utils/task/framework.ts +308 -0
  1851. package/src/utils/task/outputFormatting.ts +38 -0
  1852. package/src/utils/task/sdkProgress.ts +36 -0
  1853. package/src/utils/tasks.ts +862 -0
  1854. package/src/utils/teamDiscovery.ts +81 -0
  1855. package/src/utils/teamMemoryOps.ts +88 -0
  1856. package/src/utils/teammate.ts +292 -0
  1857. package/src/utils/teammateContext.ts +96 -0
  1858. package/src/utils/teammateMailbox.ts +1183 -0
  1859. package/src/utils/telemetry/betaSessionTracing.ts +491 -0
  1860. package/src/utils/telemetry/bigqueryExporter.ts +252 -0
  1861. package/src/utils/telemetry/events.ts +75 -0
  1862. package/src/utils/telemetry/instrumentation.ts +825 -0
  1863. package/src/utils/telemetry/logger.ts +26 -0
  1864. package/src/utils/telemetry/perfettoTracing.ts +1120 -0
  1865. package/src/utils/telemetry/pluginTelemetry.ts +289 -0
  1866. package/src/utils/telemetry/sessionTracing.ts +927 -0
  1867. package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
  1868. package/src/utils/telemetryAttributes.ts +71 -0
  1869. package/src/utils/teleport/api.ts +466 -0
  1870. package/src/utils/teleport/environmentSelection.ts +77 -0
  1871. package/src/utils/teleport/environments.ts +120 -0
  1872. package/src/utils/teleport/gitBundle.ts +292 -0
  1873. package/src/utils/teleport.tsx +1226 -0
  1874. package/src/utils/tempfile.ts +31 -0
  1875. package/src/utils/terminal.ts +131 -0
  1876. package/src/utils/terminalPanel.ts +191 -0
  1877. package/src/utils/textHighlighting.ts +166 -0
  1878. package/src/utils/theme.ts +639 -0
  1879. package/src/utils/thinking.ts +162 -0
  1880. package/src/utils/timeouts.ts +39 -0
  1881. package/src/utils/tmuxSocket.ts +427 -0
  1882. package/src/utils/todo/types.ts +18 -0
  1883. package/src/utils/tokenBudget.ts +73 -0
  1884. package/src/utils/tokens.ts +261 -0
  1885. package/src/utils/toolErrors.ts +132 -0
  1886. package/src/utils/toolPool.ts +79 -0
  1887. package/src/utils/toolResultStorage.ts +1040 -0
  1888. package/src/utils/toolSchemaCache.ts +26 -0
  1889. package/src/utils/toolSearch.ts +756 -0
  1890. package/src/utils/transcriptSearch.ts +202 -0
  1891. package/src/utils/treeify.ts +170 -0
  1892. package/src/utils/truncate.ts +179 -0
  1893. package/src/utils/ultraplan/ccrSession.ts +349 -0
  1894. package/src/utils/ultraplan/keyword.ts +127 -0
  1895. package/src/utils/ultraplan/prompt.txt +1 -0
  1896. package/src/utils/unaryLogging.ts +39 -0
  1897. package/src/utils/undercover.ts +89 -0
  1898. package/src/utils/user.ts +194 -0
  1899. package/src/utils/userAgent.ts +10 -0
  1900. package/src/utils/userPromptKeywords.ts +27 -0
  1901. package/src/utils/uuid.ts +27 -0
  1902. package/src/utils/warningHandler.ts +121 -0
  1903. package/src/utils/which.ts +82 -0
  1904. package/src/utils/windowsPaths.ts +173 -0
  1905. package/src/utils/withResolvers.ts +13 -0
  1906. package/src/utils/words.ts +800 -0
  1907. package/src/utils/workloadContext.ts +57 -0
  1908. package/src/utils/worktree.ts +1519 -0
  1909. package/src/utils/worktreeModeEnabled.ts +11 -0
  1910. package/src/utils/xdg.ts +65 -0
  1911. package/src/utils/xml.ts +16 -0
  1912. package/src/utils/yaml.ts +15 -0
  1913. package/src/utils/zodToJsonSchema.ts +23 -0
  1914. package/src/vim/motions.ts +82 -0
  1915. package/src/vim/operators.ts +556 -0
  1916. package/src/vim/textObjects.ts +186 -0
  1917. package/src/vim/transitions.ts +490 -0
  1918. package/src/vim/types.ts +199 -0
  1919. package/src/voice/voiceModeEnabled.ts +54 -0
  1920. package/start.js +1 -0
@@ -0,0 +1,1705 @@
1
+ import { feature } from 'bun:bundle'
2
+ import type { UUID } from 'crypto'
3
+ import uniqBy from 'lodash-es/uniqBy.js'
4
+
5
+ /* eslint-disable @typescript-eslint/no-require-imports */
6
+ const sessionTranscriptModule = feature('KAIROS')
7
+ ? (require('../sessionTranscript/sessionTranscript.js') as typeof import('../sessionTranscript/sessionTranscript.js'))
8
+ : null
9
+
10
+ import { APIUserAbortError } from '@anthropic-ai/sdk'
11
+ import { markPostCompaction } from 'src/bootstrap/state.js'
12
+ import { getInvokedSkillsForAgent } from '../../bootstrap/state.js'
13
+ import type { QuerySource } from '../../constants/querySource.js'
14
+ import type { CanUseToolFn } from '../../hooks/useCanUseTool.js'
15
+ import type { Tool, ToolUseContext } from '../../Tool.js'
16
+ import type { LocalAgentTaskState } from '../../tasks/LocalAgentTask/LocalAgentTask.js'
17
+ import { FileReadTool } from '../../tools/FileReadTool/FileReadTool.js'
18
+ import {
19
+ FILE_READ_TOOL_NAME,
20
+ FILE_UNCHANGED_STUB,
21
+ } from '../../tools/FileReadTool/prompt.js'
22
+ import { ToolSearchTool } from '../../tools/ToolSearchTool/ToolSearchTool.js'
23
+ import type { AgentId } from '../../types/ids.js'
24
+ import type {
25
+ AssistantMessage,
26
+ AttachmentMessage,
27
+ HookResultMessage,
28
+ Message,
29
+ PartialCompactDirection,
30
+ SystemCompactBoundaryMessage,
31
+ SystemMessage,
32
+ UserMessage,
33
+ } from '../../types/message.js'
34
+ import {
35
+ createAttachmentMessage,
36
+ generateFileAttachment,
37
+ getAgentListingDeltaAttachment,
38
+ getDeferredToolsDeltaAttachment,
39
+ getMcpInstructionsDeltaAttachment,
40
+ } from '../../utils/attachments.js'
41
+ import { getMemoryPath } from '../../utils/config.js'
42
+ import { COMPACT_MAX_OUTPUT_TOKENS } from '../../utils/context.js'
43
+ import {
44
+ analyzeContext,
45
+ tokenStatsToStatsigMetrics,
46
+ } from '../../utils/contextAnalysis.js'
47
+ import { logForDebugging } from '../../utils/debug.js'
48
+ import { hasExactErrorMessage } from '../../utils/errors.js'
49
+ import { cacheToObject } from '../../utils/fileStateCache.js'
50
+ import {
51
+ type CacheSafeParams,
52
+ runForkedAgent,
53
+ } from '../../utils/forkedAgent.js'
54
+ import {
55
+ executePostCompactHooks,
56
+ executePreCompactHooks,
57
+ } from '../../utils/hooks.js'
58
+ import { logError } from '../../utils/log.js'
59
+ import { MEMORY_TYPE_VALUES } from '../../utils/memory/types.js'
60
+ import {
61
+ createCompactBoundaryMessage,
62
+ createUserMessage,
63
+ getAssistantMessageText,
64
+ getLastAssistantMessage,
65
+ getMessagesAfterCompactBoundary,
66
+ isCompactBoundaryMessage,
67
+ normalizeMessagesForAPI,
68
+ } from '../../utils/messages.js'
69
+ import { expandPath } from '../../utils/path.js'
70
+ import { getPlan, getPlanFilePath } from '../../utils/plans.js'
71
+ import {
72
+ isSessionActivityTrackingActive,
73
+ sendSessionActivitySignal,
74
+ } from '../../utils/sessionActivity.js'
75
+ import { processSessionStartHooks } from '../../utils/sessionStart.js'
76
+ import {
77
+ getTranscriptPath,
78
+ reAppendSessionMetadata,
79
+ } from '../../utils/sessionStorage.js'
80
+ import { sleep } from '../../utils/sleep.js'
81
+ import { jsonStringify } from '../../utils/slowOperations.js'
82
+ /* eslint-enable @typescript-eslint/no-require-imports */
83
+ import { asSystemPrompt } from '../../utils/systemPromptType.js'
84
+ import { getTaskOutputPath } from '../../utils/task/diskOutput.js'
85
+ import {
86
+ getTokenUsage,
87
+ tokenCountFromLastAPIResponse,
88
+ tokenCountWithEstimation,
89
+ } from '../../utils/tokens.js'
90
+ import {
91
+ extractDiscoveredToolNames,
92
+ isToolSearchEnabled,
93
+ } from '../../utils/toolSearch.js'
94
+ import { getFeatureValue_CACHED_MAY_BE_STALE } from '../analytics/growthbook.js'
95
+ import {
96
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
97
+ logEvent,
98
+ } from '../analytics/index.js'
99
+ import {
100
+ getMaxOutputTokensForModel,
101
+ queryModelWithStreaming,
102
+ } from '../api/claude.js'
103
+ import {
104
+ getPromptTooLongTokenGap,
105
+ PROMPT_TOO_LONG_ERROR_MESSAGE,
106
+ startsWithApiErrorPrefix,
107
+ } from '../api/errors.js'
108
+ import { notifyCompaction } from '../api/promptCacheBreakDetection.js'
109
+ import { getRetryDelay } from '../api/withRetry.js'
110
+ import { logPermissionContextForAnts } from '../internalLogging.js'
111
+ import {
112
+ roughTokenCountEstimation,
113
+ roughTokenCountEstimationForMessages,
114
+ } from '../tokenEstimation.js'
115
+ import { groupMessagesByApiRound } from './grouping.js'
116
+ import {
117
+ getCompactPrompt,
118
+ getCompactUserSummaryMessage,
119
+ getPartialCompactPrompt,
120
+ } from './prompt.js'
121
+
122
+ export const POST_COMPACT_MAX_FILES_TO_RESTORE = 5
123
+ export const POST_COMPACT_TOKEN_BUDGET = 50_000
124
+ export const POST_COMPACT_MAX_TOKENS_PER_FILE = 5_000
125
+ // Skills can be large (verify=18.7KB, claude-api=20.1KB). Previously re-injected
126
+ // unbounded on every compact → 5-10K tok/compact. Per-skill truncation beats
127
+ // dropping — instructions at the top of a skill file are usually the critical
128
+ // part. Budget sized to hold ~5 skills at the per-skill cap.
129
+ export const POST_COMPACT_MAX_TOKENS_PER_SKILL = 5_000
130
+ export const POST_COMPACT_SKILLS_TOKEN_BUDGET = 25_000
131
+ const MAX_COMPACT_STREAMING_RETRIES = 2
132
+
133
+ /**
134
+ * Strip image blocks from user messages before sending for compaction.
135
+ * Images are not needed for generating a conversation summary and can
136
+ * cause the compaction API call itself to hit the prompt-too-long limit,
137
+ * especially in CCD sessions where users frequently attach images.
138
+ * Replaces image blocks with a text marker so the summary still notes
139
+ * that an image was shared.
140
+ *
141
+ * Note: Only user messages contain images (either directly attached or within
142
+ * tool_result content from tools). Assistant messages contain text, tool_use,
143
+ * and thinking blocks but not images.
144
+ */
145
+ export function stripImagesFromMessages(messages: Message[]): Message[] {
146
+ return messages.map(message => {
147
+ if (message.type !== 'user') {
148
+ return message
149
+ }
150
+
151
+ const content = message.message.content
152
+ if (!Array.isArray(content)) {
153
+ return message
154
+ }
155
+
156
+ let hasMediaBlock = false
157
+ const newContent = content.flatMap(block => {
158
+ if (block.type === 'image') {
159
+ hasMediaBlock = true
160
+ return [{ type: 'text' as const, text: '[image]' }]
161
+ }
162
+ if (block.type === 'document') {
163
+ hasMediaBlock = true
164
+ return [{ type: 'text' as const, text: '[document]' }]
165
+ }
166
+ // Also strip images/documents nested inside tool_result content arrays
167
+ if (block.type === 'tool_result' && Array.isArray(block.content)) {
168
+ let toolHasMedia = false
169
+ const newToolContent = block.content.map(item => {
170
+ if (item.type === 'image') {
171
+ toolHasMedia = true
172
+ return { type: 'text' as const, text: '[image]' }
173
+ }
174
+ if (item.type === 'document') {
175
+ toolHasMedia = true
176
+ return { type: 'text' as const, text: '[document]' }
177
+ }
178
+ return item
179
+ })
180
+ if (toolHasMedia) {
181
+ hasMediaBlock = true
182
+ return [{ ...block, content: newToolContent }]
183
+ }
184
+ }
185
+ return [block]
186
+ })
187
+
188
+ if (!hasMediaBlock) {
189
+ return message
190
+ }
191
+
192
+ return {
193
+ ...message,
194
+ message: {
195
+ ...message.message,
196
+ content: newContent,
197
+ },
198
+ } as typeof message
199
+ })
200
+ }
201
+
202
+ /**
203
+ * Strip attachment types that are re-injected post-compaction anyway.
204
+ * skill_discovery/skill_listing are re-surfaced by resetSentSkillNames()
205
+ * + the next turn's discovery signal, so feeding them to the summarizer
206
+ * wastes tokens and pollutes the summary with stale skill suggestions.
207
+ *
208
+ * No-op when EXPERIMENTAL_SKILL_SEARCH is off (the attachment types
209
+ * don't exist on external builds).
210
+ */
211
+ export function stripReinjectedAttachments(messages: Message[]): Message[] {
212
+ if (feature('EXPERIMENTAL_SKILL_SEARCH')) {
213
+ return messages.filter(
214
+ m =>
215
+ !(
216
+ m.type === 'attachment' &&
217
+ (m.attachment.type === 'skill_discovery' ||
218
+ m.attachment.type === 'skill_listing')
219
+ ),
220
+ )
221
+ }
222
+ return messages
223
+ }
224
+
225
+ export const ERROR_MESSAGE_NOT_ENOUGH_MESSAGES =
226
+ 'Not enough messages to compact.'
227
+ const MAX_PTL_RETRIES = 3
228
+ const PTL_RETRY_MARKER = '[earlier conversation truncated for compaction retry]'
229
+
230
+ /**
231
+ * Drops the oldest API-round groups from messages until tokenGap is covered.
232
+ * Falls back to dropping 20% of groups when the gap is unparseable (some
233
+ * Vertex/Bedrock error formats). Returns null when nothing can be dropped
234
+ * without leaving an empty summarize set.
235
+ *
236
+ * This is the last-resort escape hatch for CC-1180 — when the compact request
237
+ * itself hits prompt-too-long, the user is otherwise stuck. Dropping the
238
+ * oldest context is lossy but unblocks them. The reactive-compact path
239
+ * (compactMessages.ts) has the proper retry loop that peels from the tail;
240
+ * this helper is the dumb-but-safe fallback for the proactive/manual path
241
+ * that wasn't migrated in bfdb472f's unification.
242
+ */
243
+ export function truncateHeadForPTLRetry(
244
+ messages: Message[],
245
+ ptlResponse: AssistantMessage,
246
+ ): Message[] | null {
247
+ // Strip our own synthetic marker from a previous retry before grouping.
248
+ // Otherwise it becomes its own group 0 and the 20% fallback stalls
249
+ // (drops only the marker, re-adds it, zero progress on retry 2+).
250
+ const input =
251
+ messages[0]?.type === 'user' &&
252
+ messages[0].isMeta &&
253
+ messages[0].message.content === PTL_RETRY_MARKER
254
+ ? messages.slice(1)
255
+ : messages
256
+
257
+ const groups = groupMessagesByApiRound(input)
258
+ if (groups.length < 2) return null
259
+
260
+ const tokenGap = getPromptTooLongTokenGap(ptlResponse)
261
+ let dropCount: number
262
+ if (tokenGap !== undefined) {
263
+ let acc = 0
264
+ dropCount = 0
265
+ for (const g of groups) {
266
+ acc += roughTokenCountEstimationForMessages(g)
267
+ dropCount++
268
+ if (acc >= tokenGap) break
269
+ }
270
+ } else {
271
+ dropCount = Math.max(1, Math.floor(groups.length * 0.2))
272
+ }
273
+
274
+ // Keep at least one group so there's something to summarize.
275
+ dropCount = Math.min(dropCount, groups.length - 1)
276
+ if (dropCount < 1) return null
277
+
278
+ const sliced = groups.slice(dropCount).flat()
279
+ // groupMessagesByApiRound puts the preamble in group 0 and starts every
280
+ // subsequent group with an assistant message. Dropping group 0 leaves an
281
+ // assistant-first sequence which the API rejects (first message must be
282
+ // role=user). Prepend a synthetic user marker — ensureToolResultPairing
283
+ // already handles any orphaned tool_results this creates.
284
+ if (sliced[0]?.type === 'assistant') {
285
+ return [
286
+ createUserMessage({ content: PTL_RETRY_MARKER, isMeta: true }),
287
+ ...sliced,
288
+ ]
289
+ }
290
+ return sliced
291
+ }
292
+
293
+ export const ERROR_MESSAGE_PROMPT_TOO_LONG =
294
+ 'Conversation too long. Press esc twice to go up a few messages and try again.'
295
+ export const ERROR_MESSAGE_USER_ABORT = 'API Error: Request was aborted.'
296
+ export const ERROR_MESSAGE_INCOMPLETE_RESPONSE =
297
+ 'Compaction interrupted · This may be due to network issues — please try again.'
298
+
299
+ export interface CompactionResult {
300
+ boundaryMarker: SystemMessage
301
+ summaryMessages: UserMessage[]
302
+ attachments: AttachmentMessage[]
303
+ hookResults: HookResultMessage[]
304
+ messagesToKeep?: Message[]
305
+ userDisplayMessage?: string
306
+ preCompactTokenCount?: number
307
+ postCompactTokenCount?: number
308
+ truePostCompactTokenCount?: number
309
+ compactionUsage?: ReturnType<typeof getTokenUsage>
310
+ }
311
+
312
+ /**
313
+ * Diagnosis context passed from autoCompactIfNeeded into compactConversation.
314
+ * Lets the tengu_compact event disambiguate same-chain loops (H2) from
315
+ * cross-agent (H1/H5) and manual-vs-auto (H3) compactions without joins.
316
+ */
317
+ export type RecompactionInfo = {
318
+ isRecompactionInChain: boolean
319
+ turnsSincePreviousCompact: number
320
+ previousCompactTurnId?: string
321
+ autoCompactThreshold: number
322
+ querySource?: QuerySource
323
+ }
324
+
325
+ /**
326
+ * Build the base post-compact messages array from a CompactionResult.
327
+ * This ensures consistent ordering across all compaction paths.
328
+ * Order: boundaryMarker, summaryMessages, messagesToKeep, attachments, hookResults
329
+ */
330
+ export function buildPostCompactMessages(result: CompactionResult): Message[] {
331
+ return [
332
+ result.boundaryMarker,
333
+ ...result.summaryMessages,
334
+ ...(result.messagesToKeep ?? []),
335
+ ...result.attachments,
336
+ ...result.hookResults,
337
+ ]
338
+ }
339
+
340
+ /**
341
+ * Annotate a compact boundary with relink metadata for messagesToKeep.
342
+ * Preserved messages keep their original parentUuids on disk (dedup-skipped);
343
+ * the loader uses this to patch head→anchor and anchor's-other-children→tail.
344
+ *
345
+ * `anchorUuid` = what sits immediately before keep[0] in the desired chain:
346
+ * - suffix-preserving (reactive/session-memory): last summary message
347
+ * - prefix-preserving (partial compact): the boundary itself
348
+ */
349
+ export function annotateBoundaryWithPreservedSegment(
350
+ boundary: SystemCompactBoundaryMessage,
351
+ anchorUuid: UUID,
352
+ messagesToKeep: readonly Message[] | undefined,
353
+ ): SystemCompactBoundaryMessage {
354
+ const keep = messagesToKeep ?? []
355
+ if (keep.length === 0) return boundary
356
+ return {
357
+ ...boundary,
358
+ compactMetadata: {
359
+ ...boundary.compactMetadata,
360
+ preservedSegment: {
361
+ headUuid: keep[0]!.uuid,
362
+ anchorUuid,
363
+ tailUuid: keep.at(-1)!.uuid,
364
+ },
365
+ },
366
+ }
367
+ }
368
+
369
+ /**
370
+ * Merges user-supplied custom instructions with hook-provided instructions.
371
+ * User instructions come first; hook instructions are appended.
372
+ * Empty strings normalize to undefined.
373
+ */
374
+ export function mergeHookInstructions(
375
+ userInstructions: string | undefined,
376
+ hookInstructions: string | undefined,
377
+ ): string | undefined {
378
+ if (!hookInstructions) return userInstructions || undefined
379
+ if (!userInstructions) return hookInstructions
380
+ return `${userInstructions}\n\n${hookInstructions}`
381
+ }
382
+
383
+ /**
384
+ * Creates a compact version of a conversation by summarizing older messages
385
+ * and preserving recent conversation history.
386
+ */
387
+ export async function compactConversation(
388
+ messages: Message[],
389
+ context: ToolUseContext,
390
+ cacheSafeParams: CacheSafeParams,
391
+ suppressFollowUpQuestions: boolean,
392
+ customInstructions?: string,
393
+ isAutoCompact: boolean = false,
394
+ recompactionInfo?: RecompactionInfo,
395
+ ): Promise<CompactionResult> {
396
+ try {
397
+ if (messages.length === 0) {
398
+ throw new Error(ERROR_MESSAGE_NOT_ENOUGH_MESSAGES)
399
+ }
400
+
401
+ const preCompactTokenCount = tokenCountWithEstimation(messages)
402
+
403
+ const appState = context.getAppState()
404
+ void logPermissionContextForAnts(appState.toolPermissionContext, 'summary')
405
+
406
+ context.onCompactProgress?.({
407
+ type: 'hooks_start',
408
+ hookType: 'pre_compact',
409
+ })
410
+
411
+ // Execute PreCompact hooks
412
+ context.setSDKStatus?.('compacting')
413
+ const hookResult = await executePreCompactHooks(
414
+ {
415
+ trigger: isAutoCompact ? 'auto' : 'manual',
416
+ customInstructions: customInstructions ?? null,
417
+ },
418
+ context.abortController.signal,
419
+ )
420
+ customInstructions = mergeHookInstructions(
421
+ customInstructions,
422
+ hookResult.newCustomInstructions,
423
+ )
424
+ const userDisplayMessage = hookResult.userDisplayMessage
425
+
426
+ // Show requesting mode with up arrow and custom message
427
+ context.setStreamMode?.('requesting')
428
+ context.setResponseLength?.(() => 0)
429
+ context.onCompactProgress?.({ type: 'compact_start' })
430
+
431
+ // 3P default: true — forked-agent path reuses main conversation's prompt cache.
432
+ // Experiment (Jan 2026) confirmed: false path is 98% cache miss, costs ~0.76% of
433
+ // fleet cache_creation (~38B tok/day), concentrated in ephemeral envs (CCR/GHA/SDK)
434
+ // with cold GB cache and 3P providers where GB is disabled. GB gate kept as kill-switch.
435
+ const promptCacheSharingEnabled = getFeatureValue_CACHED_MAY_BE_STALE(
436
+ 'tengu_compact_cache_prefix',
437
+ true,
438
+ )
439
+
440
+ const compactPrompt = getCompactPrompt(customInstructions)
441
+ const summaryRequest = createUserMessage({
442
+ content: compactPrompt,
443
+ })
444
+
445
+ let messagesToSummarize = messages
446
+ let retryCacheSafeParams = cacheSafeParams
447
+ let summaryResponse: AssistantMessage
448
+ let summary: string | null
449
+ let ptlAttempts = 0
450
+ for (;;) {
451
+ summaryResponse = await streamCompactSummary({
452
+ messages: messagesToSummarize,
453
+ summaryRequest,
454
+ appState,
455
+ context,
456
+ preCompactTokenCount,
457
+ cacheSafeParams: retryCacheSafeParams,
458
+ })
459
+ summary = getAssistantMessageText(summaryResponse)
460
+ if (!summary?.startsWith(PROMPT_TOO_LONG_ERROR_MESSAGE)) break
461
+
462
+ // CC-1180: compact request itself hit prompt-too-long. Truncate the
463
+ // oldest API-round groups and retry rather than leaving the user stuck.
464
+ ptlAttempts++
465
+ const truncated =
466
+ ptlAttempts <= MAX_PTL_RETRIES
467
+ ? truncateHeadForPTLRetry(messagesToSummarize, summaryResponse)
468
+ : null
469
+ if (!truncated) {
470
+ logEvent('tengu_compact_failed', {
471
+ reason:
472
+ 'prompt_too_long' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
473
+ preCompactTokenCount,
474
+ promptCacheSharingEnabled,
475
+ ptlAttempts,
476
+ })
477
+ throw new Error(ERROR_MESSAGE_PROMPT_TOO_LONG)
478
+ }
479
+ logEvent('tengu_compact_ptl_retry', {
480
+ attempt: ptlAttempts,
481
+ droppedMessages: messagesToSummarize.length - truncated.length,
482
+ remainingMessages: truncated.length,
483
+ })
484
+ messagesToSummarize = truncated
485
+ // The forked-agent path reads from cacheSafeParams.forkContextMessages,
486
+ // not the messages param — thread the truncated set through both paths.
487
+ retryCacheSafeParams = {
488
+ ...retryCacheSafeParams,
489
+ forkContextMessages: truncated,
490
+ }
491
+ }
492
+
493
+ if (!summary) {
494
+ logForDebugging(
495
+ `Compact failed: no summary text in response. Response: ${jsonStringify(summaryResponse)}`,
496
+ { level: 'error' },
497
+ )
498
+ logEvent('tengu_compact_failed', {
499
+ reason:
500
+ 'no_summary' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
501
+ preCompactTokenCount,
502
+ promptCacheSharingEnabled,
503
+ })
504
+ throw new Error(
505
+ `Failed to generate conversation summary - response did not contain valid text content`,
506
+ )
507
+ } else if (startsWithApiErrorPrefix(summary)) {
508
+ logEvent('tengu_compact_failed', {
509
+ reason:
510
+ 'api_error' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
511
+ preCompactTokenCount,
512
+ promptCacheSharingEnabled,
513
+ })
514
+ throw new Error(summary)
515
+ }
516
+
517
+ // Store the current file state before clearing
518
+ const preCompactReadFileState = cacheToObject(context.readFileState)
519
+
520
+ // Clear the cache
521
+ context.readFileState.clear()
522
+ context.loadedNestedMemoryPaths?.clear()
523
+
524
+ // Intentionally NOT resetting sentSkillNames: re-injecting the full
525
+ // skill_listing (~4K tokens) post-compact is pure cache_creation with
526
+ // marginal benefit. The model still has SkillTool in its schema and
527
+ // invoked_skills attachment (below) preserves used-skill content. Ants
528
+ // with EXPERIMENTAL_SKILL_SEARCH already skip re-injection via the
529
+ // early-return in getSkillListingAttachments.
530
+
531
+ // Run async attachment generation in parallel
532
+ const [fileAttachments, asyncAgentAttachments] = await Promise.all([
533
+ createPostCompactFileAttachments(
534
+ preCompactReadFileState,
535
+ context,
536
+ POST_COMPACT_MAX_FILES_TO_RESTORE,
537
+ ),
538
+ createAsyncAgentAttachmentsIfNeeded(context),
539
+ ])
540
+
541
+ const postCompactFileAttachments: AttachmentMessage[] = [
542
+ ...fileAttachments,
543
+ ...asyncAgentAttachments,
544
+ ]
545
+ const planAttachment = createPlanAttachmentIfNeeded(context.agentId)
546
+ if (planAttachment) {
547
+ postCompactFileAttachments.push(planAttachment)
548
+ }
549
+
550
+ // Add plan mode instructions if currently in plan mode, so the model
551
+ // continues operating in plan mode after compaction
552
+ const planModeAttachment = await createPlanModeAttachmentIfNeeded(context)
553
+ if (planModeAttachment) {
554
+ postCompactFileAttachments.push(planModeAttachment)
555
+ }
556
+
557
+ // Add skill attachment if skills were invoked in this session
558
+ const skillAttachment = createSkillAttachmentIfNeeded(context.agentId)
559
+ if (skillAttachment) {
560
+ postCompactFileAttachments.push(skillAttachment)
561
+ }
562
+
563
+ // Compaction ate prior delta attachments. Re-announce from the current
564
+ // state so the model has tool/instruction context on the first
565
+ // post-compact turn. Empty message history → diff against nothing →
566
+ // announces the full set.
567
+ for (const att of getDeferredToolsDeltaAttachment(
568
+ context.options.tools,
569
+ context.options.mainLoopModel,
570
+ [],
571
+ { callSite: 'compact_full' },
572
+ )) {
573
+ postCompactFileAttachments.push(createAttachmentMessage(att))
574
+ }
575
+ for (const att of getAgentListingDeltaAttachment(context, [])) {
576
+ postCompactFileAttachments.push(createAttachmentMessage(att))
577
+ }
578
+ for (const att of getMcpInstructionsDeltaAttachment(
579
+ context.options.mcpClients,
580
+ context.options.tools,
581
+ context.options.mainLoopModel,
582
+ [],
583
+ )) {
584
+ postCompactFileAttachments.push(createAttachmentMessage(att))
585
+ }
586
+
587
+ context.onCompactProgress?.({
588
+ type: 'hooks_start',
589
+ hookType: 'session_start',
590
+ })
591
+ // Execute SessionStart hooks after successful compaction
592
+ const hookMessages = await processSessionStartHooks('compact', {
593
+ model: context.options.mainLoopModel,
594
+ })
595
+
596
+ // Create the compact boundary marker and summary messages before the
597
+ // event so we can compute the true resulting-context size.
598
+ const boundaryMarker = createCompactBoundaryMessage(
599
+ isAutoCompact ? 'auto' : 'manual',
600
+ preCompactTokenCount ?? 0,
601
+ messages.at(-1)?.uuid,
602
+ )
603
+ // Carry loaded-tool state — the summary doesn't preserve tool_reference
604
+ // blocks, so the post-compact schema filter needs this to keep sending
605
+ // already-loaded deferred tool schemas to the API.
606
+ const preCompactDiscovered = extractDiscoveredToolNames(messages)
607
+ if (preCompactDiscovered.size > 0) {
608
+ boundaryMarker.compactMetadata.preCompactDiscoveredTools = [
609
+ ...preCompactDiscovered,
610
+ ].sort()
611
+ }
612
+
613
+ const transcriptPath = getTranscriptPath()
614
+ const summaryMessages: UserMessage[] = [
615
+ createUserMessage({
616
+ content: getCompactUserSummaryMessage(
617
+ summary,
618
+ suppressFollowUpQuestions,
619
+ transcriptPath,
620
+ ),
621
+ isCompactSummary: true,
622
+ isVisibleInTranscriptOnly: true,
623
+ }),
624
+ ]
625
+
626
+ // Previously "postCompactTokenCount" — renamed because this is the
627
+ // compact API call's total usage (input_tokens ≈ preCompactTokenCount),
628
+ // NOT the size of the resulting context. Kept for event-field continuity.
629
+ const compactionCallTotalTokens = tokenCountFromLastAPIResponse([
630
+ summaryResponse,
631
+ ])
632
+
633
+ // Message-payload estimate of the resulting context. The next iteration's
634
+ // shouldAutoCompact will see this PLUS ~20-40K for system prompt + tools +
635
+ // userContext (via API usage.input_tokens). So `willRetriggerNextTurn: true`
636
+ // is a strong signal; `false` may still retrigger when this is close to threshold.
637
+ const truePostCompactTokenCount = roughTokenCountEstimationForMessages([
638
+ boundaryMarker,
639
+ ...summaryMessages,
640
+ ...postCompactFileAttachments,
641
+ ...hookMessages,
642
+ ])
643
+
644
+ // Extract compaction API usage metrics
645
+ const compactionUsage = getTokenUsage(summaryResponse)
646
+
647
+ const querySourceForEvent =
648
+ recompactionInfo?.querySource ?? context.options.querySource ?? 'unknown'
649
+
650
+ logEvent('tengu_compact', {
651
+ preCompactTokenCount,
652
+ // Kept for continuity — semantically the compact API call's total usage
653
+ postCompactTokenCount: compactionCallTotalTokens,
654
+ truePostCompactTokenCount,
655
+ autoCompactThreshold: recompactionInfo?.autoCompactThreshold ?? -1,
656
+ willRetriggerNextTurn:
657
+ recompactionInfo !== undefined &&
658
+ truePostCompactTokenCount >= recompactionInfo.autoCompactThreshold,
659
+ isAutoCompact,
660
+ querySource:
661
+ querySourceForEvent as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
662
+ queryChainId: (context.queryTracking?.chainId ??
663
+ '') as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
664
+ queryDepth: context.queryTracking?.depth ?? -1,
665
+ isRecompactionInChain: recompactionInfo?.isRecompactionInChain ?? false,
666
+ turnsSincePreviousCompact:
667
+ recompactionInfo?.turnsSincePreviousCompact ?? -1,
668
+ previousCompactTurnId: (recompactionInfo?.previousCompactTurnId ??
669
+ '') as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
670
+ compactionInputTokens: compactionUsage?.input_tokens,
671
+ compactionOutputTokens: compactionUsage?.output_tokens,
672
+ compactionCacheReadTokens: compactionUsage?.cache_read_input_tokens ?? 0,
673
+ compactionCacheCreationTokens:
674
+ compactionUsage?.cache_creation_input_tokens ?? 0,
675
+ compactionTotalTokens: compactionUsage
676
+ ? compactionUsage.input_tokens +
677
+ (compactionUsage.cache_creation_input_tokens ?? 0) +
678
+ (compactionUsage.cache_read_input_tokens ?? 0) +
679
+ compactionUsage.output_tokens
680
+ : 0,
681
+ promptCacheSharingEnabled,
682
+ // analyzeContext walks every content block (~11ms on a 4.5K-message
683
+ // session) purely for this telemetry breakdown. Computed here, past
684
+ // the compaction-API await, so the sync walk doesn't starve the
685
+ // render loop before compaction even starts. Same deferral pattern
686
+ // as reactiveCompact.ts.
687
+ ...(() => {
688
+ try {
689
+ return tokenStatsToStatsigMetrics(analyzeContext(messages))
690
+ } catch (error) {
691
+ logError(error as Error)
692
+ return {}
693
+ }
694
+ })(),
695
+ })
696
+
697
+ // Reset cache read baseline so the post-compact drop isn't flagged as a break
698
+ if (feature('PROMPT_CACHE_BREAK_DETECTION')) {
699
+ notifyCompaction(
700
+ context.options.querySource ?? 'compact',
701
+ context.agentId,
702
+ )
703
+ }
704
+ markPostCompaction()
705
+
706
+ // Re-append session metadata (custom title, tag) so it stays within
707
+ // the 16KB tail window that readLiteMetadata reads for --resume display.
708
+ // Without this, enough post-compaction messages push the metadata entry
709
+ // out of the window, causing --resume to show the auto-generated title
710
+ // instead of the user-set session name.
711
+ reAppendSessionMetadata()
712
+
713
+ // Write a reduced transcript segment for the pre-compaction messages
714
+ // (assistant mode only). Fire-and-forget — errors are logged internally.
715
+ if (feature('KAIROS')) {
716
+ void sessionTranscriptModule?.writeSessionTranscriptSegment(messages)
717
+ }
718
+
719
+ context.onCompactProgress?.({
720
+ type: 'hooks_start',
721
+ hookType: 'post_compact',
722
+ })
723
+ const postCompactHookResult = await executePostCompactHooks(
724
+ {
725
+ trigger: isAutoCompact ? 'auto' : 'manual',
726
+ compactSummary: summary,
727
+ },
728
+ context.abortController.signal,
729
+ )
730
+
731
+ const combinedUserDisplayMessage = [
732
+ userDisplayMessage,
733
+ postCompactHookResult.userDisplayMessage,
734
+ ]
735
+ .filter(Boolean)
736
+ .join('\n')
737
+
738
+ return {
739
+ boundaryMarker,
740
+ summaryMessages,
741
+ attachments: postCompactFileAttachments,
742
+ hookResults: hookMessages,
743
+ userDisplayMessage: combinedUserDisplayMessage || undefined,
744
+ preCompactTokenCount,
745
+ postCompactTokenCount: compactionCallTotalTokens,
746
+ truePostCompactTokenCount,
747
+ compactionUsage,
748
+ }
749
+ } catch (error) {
750
+ // Only show the error notification for manual /compact.
751
+ // Auto-compact failures are retried on the next turn and the
752
+ // notification is confusing when compaction eventually succeeds.
753
+ if (!isAutoCompact) {
754
+ addErrorNotificationIfNeeded(error, context)
755
+ }
756
+ throw error
757
+ } finally {
758
+ context.setStreamMode?.('requesting')
759
+ context.setResponseLength?.(() => 0)
760
+ context.onCompactProgress?.({ type: 'compact_end' })
761
+ context.setSDKStatus?.(null)
762
+ }
763
+ }
764
+
765
+ /**
766
+ * Performs a partial compaction around the selected message index.
767
+ * Direction 'from': summarizes messages after the index, keeps earlier ones.
768
+ * Prompt cache for kept (earlier) messages is preserved.
769
+ * Direction 'up_to': summarizes messages before the index, keeps later ones.
770
+ * Prompt cache is invalidated since the summary precedes the kept messages.
771
+ */
772
+ export async function partialCompactConversation(
773
+ allMessages: Message[],
774
+ pivotIndex: number,
775
+ context: ToolUseContext,
776
+ cacheSafeParams: CacheSafeParams,
777
+ userFeedback?: string,
778
+ direction: PartialCompactDirection = 'from',
779
+ ): Promise<CompactionResult> {
780
+ try {
781
+ const messagesToSummarize =
782
+ direction === 'up_to'
783
+ ? allMessages.slice(0, pivotIndex)
784
+ : allMessages.slice(pivotIndex)
785
+ // 'up_to' must strip old compact boundaries/summaries: for 'up_to',
786
+ // summary_B sits BEFORE kept, so a stale boundary_A in kept wins
787
+ // findLastCompactBoundaryIndex's backward scan and drops summary_B.
788
+ // 'from' keeps them: summary_B sits AFTER kept (backward scan still
789
+ // works), and removing an old summary would lose its covered history.
790
+ const messagesToKeep =
791
+ direction === 'up_to'
792
+ ? allMessages
793
+ .slice(pivotIndex)
794
+ .filter(
795
+ m =>
796
+ m.type !== 'progress' &&
797
+ !isCompactBoundaryMessage(m) &&
798
+ !(m.type === 'user' && m.isCompactSummary),
799
+ )
800
+ : allMessages.slice(0, pivotIndex).filter(m => m.type !== 'progress')
801
+
802
+ if (messagesToSummarize.length === 0) {
803
+ throw new Error(
804
+ direction === 'up_to'
805
+ ? 'Nothing to summarize before the selected message.'
806
+ : 'Nothing to summarize after the selected message.',
807
+ )
808
+ }
809
+
810
+ const preCompactTokenCount = tokenCountWithEstimation(allMessages)
811
+
812
+ context.onCompactProgress?.({
813
+ type: 'hooks_start',
814
+ hookType: 'pre_compact',
815
+ })
816
+
817
+ context.setSDKStatus?.('compacting')
818
+ const hookResult = await executePreCompactHooks(
819
+ {
820
+ trigger: 'manual',
821
+ customInstructions: null,
822
+ },
823
+ context.abortController.signal,
824
+ )
825
+
826
+ // Merge hook instructions with user feedback
827
+ let customInstructions: string | undefined
828
+ if (hookResult.newCustomInstructions && userFeedback) {
829
+ customInstructions = `${hookResult.newCustomInstructions}\n\nUser context: ${userFeedback}`
830
+ } else if (hookResult.newCustomInstructions) {
831
+ customInstructions = hookResult.newCustomInstructions
832
+ } else if (userFeedback) {
833
+ customInstructions = `User context: ${userFeedback}`
834
+ }
835
+
836
+ context.setStreamMode?.('requesting')
837
+ context.setResponseLength?.(() => 0)
838
+ context.onCompactProgress?.({ type: 'compact_start' })
839
+
840
+ const compactPrompt = getPartialCompactPrompt(customInstructions, direction)
841
+ const summaryRequest = createUserMessage({
842
+ content: compactPrompt,
843
+ })
844
+
845
+ const failureMetadata = {
846
+ preCompactTokenCount,
847
+ direction:
848
+ direction as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
849
+ messagesSummarized: messagesToSummarize.length,
850
+ }
851
+
852
+ // 'up_to' prefix hits cache directly; 'from' sends all (tail wouldn't cache).
853
+ // PTL retry breaks the cache prefix but unblocks the user (CC-1180).
854
+ let apiMessages = direction === 'up_to' ? messagesToSummarize : allMessages
855
+ let retryCacheSafeParams =
856
+ direction === 'up_to'
857
+ ? { ...cacheSafeParams, forkContextMessages: messagesToSummarize }
858
+ : cacheSafeParams
859
+ let summaryResponse: AssistantMessage
860
+ let summary: string | null
861
+ let ptlAttempts = 0
862
+ for (;;) {
863
+ summaryResponse = await streamCompactSummary({
864
+ messages: apiMessages,
865
+ summaryRequest,
866
+ appState: context.getAppState(),
867
+ context,
868
+ preCompactTokenCount,
869
+ cacheSafeParams: retryCacheSafeParams,
870
+ })
871
+ summary = getAssistantMessageText(summaryResponse)
872
+ if (!summary?.startsWith(PROMPT_TOO_LONG_ERROR_MESSAGE)) break
873
+
874
+ ptlAttempts++
875
+ const truncated =
876
+ ptlAttempts <= MAX_PTL_RETRIES
877
+ ? truncateHeadForPTLRetry(apiMessages, summaryResponse)
878
+ : null
879
+ if (!truncated) {
880
+ logEvent('tengu_partial_compact_failed', {
881
+ reason:
882
+ 'prompt_too_long' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
883
+ ...failureMetadata,
884
+ ptlAttempts,
885
+ })
886
+ throw new Error(ERROR_MESSAGE_PROMPT_TOO_LONG)
887
+ }
888
+ logEvent('tengu_compact_ptl_retry', {
889
+ attempt: ptlAttempts,
890
+ droppedMessages: apiMessages.length - truncated.length,
891
+ remainingMessages: truncated.length,
892
+ path: 'partial' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
893
+ })
894
+ apiMessages = truncated
895
+ retryCacheSafeParams = {
896
+ ...retryCacheSafeParams,
897
+ forkContextMessages: truncated,
898
+ }
899
+ }
900
+ if (!summary) {
901
+ logEvent('tengu_partial_compact_failed', {
902
+ reason:
903
+ 'no_summary' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
904
+ ...failureMetadata,
905
+ })
906
+ throw new Error(
907
+ 'Failed to generate conversation summary - response did not contain valid text content',
908
+ )
909
+ } else if (startsWithApiErrorPrefix(summary)) {
910
+ logEvent('tengu_partial_compact_failed', {
911
+ reason:
912
+ 'api_error' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
913
+ ...failureMetadata,
914
+ })
915
+ throw new Error(summary)
916
+ }
917
+
918
+ // Store the current file state before clearing
919
+ const preCompactReadFileState = cacheToObject(context.readFileState)
920
+ context.readFileState.clear()
921
+ context.loadedNestedMemoryPaths?.clear()
922
+ // Intentionally NOT resetting sentSkillNames — see compactConversation()
923
+ // for rationale (~4K tokens saved per compact event).
924
+
925
+ const [fileAttachments, asyncAgentAttachments] = await Promise.all([
926
+ createPostCompactFileAttachments(
927
+ preCompactReadFileState,
928
+ context,
929
+ POST_COMPACT_MAX_FILES_TO_RESTORE,
930
+ messagesToKeep,
931
+ ),
932
+ createAsyncAgentAttachmentsIfNeeded(context),
933
+ ])
934
+
935
+ const postCompactFileAttachments: AttachmentMessage[] = [
936
+ ...fileAttachments,
937
+ ...asyncAgentAttachments,
938
+ ]
939
+ const planAttachment = createPlanAttachmentIfNeeded(context.agentId)
940
+ if (planAttachment) {
941
+ postCompactFileAttachments.push(planAttachment)
942
+ }
943
+
944
+ // Add plan mode instructions if currently in plan mode
945
+ const planModeAttachment = await createPlanModeAttachmentIfNeeded(context)
946
+ if (planModeAttachment) {
947
+ postCompactFileAttachments.push(planModeAttachment)
948
+ }
949
+
950
+ const skillAttachment = createSkillAttachmentIfNeeded(context.agentId)
951
+ if (skillAttachment) {
952
+ postCompactFileAttachments.push(skillAttachment)
953
+ }
954
+
955
+ // Re-announce only what was in the summarized portion — messagesToKeep
956
+ // is scanned, so anything already announced there is skipped.
957
+ for (const att of getDeferredToolsDeltaAttachment(
958
+ context.options.tools,
959
+ context.options.mainLoopModel,
960
+ messagesToKeep,
961
+ { callSite: 'compact_partial' },
962
+ )) {
963
+ postCompactFileAttachments.push(createAttachmentMessage(att))
964
+ }
965
+ for (const att of getAgentListingDeltaAttachment(context, messagesToKeep)) {
966
+ postCompactFileAttachments.push(createAttachmentMessage(att))
967
+ }
968
+ for (const att of getMcpInstructionsDeltaAttachment(
969
+ context.options.mcpClients,
970
+ context.options.tools,
971
+ context.options.mainLoopModel,
972
+ messagesToKeep,
973
+ )) {
974
+ postCompactFileAttachments.push(createAttachmentMessage(att))
975
+ }
976
+
977
+ context.onCompactProgress?.({
978
+ type: 'hooks_start',
979
+ hookType: 'session_start',
980
+ })
981
+ const hookMessages = await processSessionStartHooks('compact', {
982
+ model: context.options.mainLoopModel,
983
+ })
984
+
985
+ const postCompactTokenCount = tokenCountFromLastAPIResponse([
986
+ summaryResponse,
987
+ ])
988
+ const compactionUsage = getTokenUsage(summaryResponse)
989
+
990
+ logEvent('tengu_partial_compact', {
991
+ preCompactTokenCount,
992
+ postCompactTokenCount,
993
+ messagesKept: messagesToKeep.length,
994
+ messagesSummarized: messagesToSummarize.length,
995
+ direction:
996
+ direction as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
997
+ hasUserFeedback: !!userFeedback,
998
+ trigger:
999
+ 'message_selector' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1000
+ compactionInputTokens: compactionUsage?.input_tokens,
1001
+ compactionOutputTokens: compactionUsage?.output_tokens,
1002
+ compactionCacheReadTokens: compactionUsage?.cache_read_input_tokens ?? 0,
1003
+ compactionCacheCreationTokens:
1004
+ compactionUsage?.cache_creation_input_tokens ?? 0,
1005
+ })
1006
+
1007
+ // Progress messages aren't loggable, so forkSessionImpl would null out
1008
+ // a logicalParentUuid pointing at one. Both directions skip them.
1009
+ const lastPreCompactUuid =
1010
+ direction === 'up_to'
1011
+ ? allMessages.slice(0, pivotIndex).findLast(m => m.type !== 'progress')
1012
+ ?.uuid
1013
+ : messagesToKeep.at(-1)?.uuid
1014
+ const boundaryMarker = createCompactBoundaryMessage(
1015
+ 'manual',
1016
+ preCompactTokenCount ?? 0,
1017
+ lastPreCompactUuid,
1018
+ userFeedback,
1019
+ messagesToSummarize.length,
1020
+ )
1021
+ // allMessages not just messagesToSummarize — set union is idempotent,
1022
+ // simpler than tracking which half each tool lived in.
1023
+ const preCompactDiscovered = extractDiscoveredToolNames(allMessages)
1024
+ if (preCompactDiscovered.size > 0) {
1025
+ boundaryMarker.compactMetadata.preCompactDiscoveredTools = [
1026
+ ...preCompactDiscovered,
1027
+ ].sort()
1028
+ }
1029
+
1030
+ const transcriptPath = getTranscriptPath()
1031
+ const summaryMessages: UserMessage[] = [
1032
+ createUserMessage({
1033
+ content: getCompactUserSummaryMessage(summary, false, transcriptPath),
1034
+ isCompactSummary: true,
1035
+ ...(messagesToKeep.length > 0
1036
+ ? {
1037
+ summarizeMetadata: {
1038
+ messagesSummarized: messagesToSummarize.length,
1039
+ userContext: userFeedback,
1040
+ direction,
1041
+ },
1042
+ }
1043
+ : { isVisibleInTranscriptOnly: true as const }),
1044
+ }),
1045
+ ]
1046
+
1047
+ if (feature('PROMPT_CACHE_BREAK_DETECTION')) {
1048
+ notifyCompaction(
1049
+ context.options.querySource ?? 'compact',
1050
+ context.agentId,
1051
+ )
1052
+ }
1053
+ markPostCompaction()
1054
+
1055
+ // Re-append session metadata (custom title, tag) so it stays within
1056
+ // the 16KB tail window that readLiteMetadata reads for --resume display.
1057
+ reAppendSessionMetadata()
1058
+
1059
+ if (feature('KAIROS')) {
1060
+ void sessionTranscriptModule?.writeSessionTranscriptSegment(
1061
+ messagesToSummarize,
1062
+ )
1063
+ }
1064
+
1065
+ context.onCompactProgress?.({
1066
+ type: 'hooks_start',
1067
+ hookType: 'post_compact',
1068
+ })
1069
+ const postCompactHookResult = await executePostCompactHooks(
1070
+ {
1071
+ trigger: 'manual',
1072
+ compactSummary: summary,
1073
+ },
1074
+ context.abortController.signal,
1075
+ )
1076
+
1077
+ // 'from': prefix-preserving → boundary; 'up_to': suffix → last summary
1078
+ const anchorUuid =
1079
+ direction === 'up_to'
1080
+ ? (summaryMessages.at(-1)?.uuid ?? boundaryMarker.uuid)
1081
+ : boundaryMarker.uuid
1082
+ return {
1083
+ boundaryMarker: annotateBoundaryWithPreservedSegment(
1084
+ boundaryMarker,
1085
+ anchorUuid,
1086
+ messagesToKeep,
1087
+ ),
1088
+ summaryMessages,
1089
+ messagesToKeep,
1090
+ attachments: postCompactFileAttachments,
1091
+ hookResults: hookMessages,
1092
+ userDisplayMessage: postCompactHookResult.userDisplayMessage,
1093
+ preCompactTokenCount,
1094
+ postCompactTokenCount,
1095
+ compactionUsage,
1096
+ }
1097
+ } catch (error) {
1098
+ addErrorNotificationIfNeeded(error, context)
1099
+ throw error
1100
+ } finally {
1101
+ context.setStreamMode?.('requesting')
1102
+ context.setResponseLength?.(() => 0)
1103
+ context.onCompactProgress?.({ type: 'compact_end' })
1104
+ context.setSDKStatus?.(null)
1105
+ }
1106
+ }
1107
+
1108
+ function addErrorNotificationIfNeeded(
1109
+ error: unknown,
1110
+ context: Pick<ToolUseContext, 'addNotification'>,
1111
+ ) {
1112
+ if (
1113
+ !hasExactErrorMessage(error, ERROR_MESSAGE_USER_ABORT) &&
1114
+ !hasExactErrorMessage(error, ERROR_MESSAGE_NOT_ENOUGH_MESSAGES)
1115
+ ) {
1116
+ context.addNotification?.({
1117
+ key: 'error-compacting-conversation',
1118
+ text: 'Error compacting conversation',
1119
+ priority: 'immediate',
1120
+ color: 'error',
1121
+ })
1122
+ }
1123
+ }
1124
+
1125
+ export function createCompactCanUseTool(): CanUseToolFn {
1126
+ return async () => ({
1127
+ behavior: 'deny' as const,
1128
+ message: 'Tool use is not allowed during compaction',
1129
+ decisionReason: {
1130
+ type: 'other' as const,
1131
+ reason: 'compaction agent should only produce text summary',
1132
+ },
1133
+ })
1134
+ }
1135
+
1136
+ async function streamCompactSummary({
1137
+ messages,
1138
+ summaryRequest,
1139
+ appState,
1140
+ context,
1141
+ preCompactTokenCount,
1142
+ cacheSafeParams,
1143
+ }: {
1144
+ messages: Message[]
1145
+ summaryRequest: UserMessage
1146
+ appState: Awaited<ReturnType<ToolUseContext['getAppState']>>
1147
+ context: ToolUseContext
1148
+ preCompactTokenCount: number
1149
+ cacheSafeParams: CacheSafeParams
1150
+ }): Promise<AssistantMessage> {
1151
+ // When prompt cache sharing is enabled, use forked agent to reuse the
1152
+ // main conversation's cached prefix (system prompt, tools, context messages).
1153
+ // Falls back to regular streaming path on failure.
1154
+ // 3P default: true — see comment at the other tengu_compact_cache_prefix read above.
1155
+ const promptCacheSharingEnabled = getFeatureValue_CACHED_MAY_BE_STALE(
1156
+ 'tengu_compact_cache_prefix',
1157
+ true,
1158
+ )
1159
+ // Send keep-alive signals during compaction to prevent remote session
1160
+ // WebSocket idle timeouts from dropping bridge connections. Compaction
1161
+ // API calls can take 5-10+ seconds, during which no other messages
1162
+ // flow through the transport — without keep-alives, the server may
1163
+ // close the WebSocket for inactivity.
1164
+ // Two signals: (1) PUT /worker heartbeat via sessionActivity, and
1165
+ // (2) re-emit 'compacting' status so the SDK event stream stays active
1166
+ // and the server doesn't consider the session stale.
1167
+ const activityInterval = isSessionActivityTrackingActive()
1168
+ ? setInterval(
1169
+ (statusSetter?: (status: 'compacting' | null) => void) => {
1170
+ sendSessionActivitySignal()
1171
+ statusSetter?.('compacting')
1172
+ },
1173
+ 30_000,
1174
+ context.setSDKStatus,
1175
+ )
1176
+ : undefined
1177
+
1178
+ try {
1179
+ if (promptCacheSharingEnabled) {
1180
+ try {
1181
+ // DO NOT set maxOutputTokens here. The fork piggybacks on the main thread's
1182
+ // prompt cache by sending identical cache-key params (system, tools, model,
1183
+ // messages prefix, thinking config). Setting maxOutputTokens would clamp
1184
+ // budget_tokens via Math.min(budget, maxOutputTokens-1) in claude.ts,
1185
+ // creating a thinking config mismatch that invalidates the cache.
1186
+ // The streaming fallback path (below) can safely set maxOutputTokensOverride
1187
+ // since it doesn't share cache with the main thread.
1188
+ const result = await runForkedAgent({
1189
+ promptMessages: [summaryRequest],
1190
+ cacheSafeParams,
1191
+ canUseTool: createCompactCanUseTool(),
1192
+ querySource: 'compact',
1193
+ forkLabel: 'compact',
1194
+ maxTurns: 1,
1195
+ skipCacheWrite: true,
1196
+ // Pass the compact context's abortController so user Esc aborts the
1197
+ // fork — same signal the streaming fallback uses at
1198
+ // `signal: context.abortController.signal` below.
1199
+ overrides: { abortController: context.abortController },
1200
+ })
1201
+ const assistantMsg = getLastAssistantMessage(result.messages)
1202
+ const assistantText = assistantMsg
1203
+ ? getAssistantMessageText(assistantMsg)
1204
+ : null
1205
+ // Guard isApiErrorMessage: query() catches API errors (including
1206
+ // APIUserAbortError on ESC) and yields them as synthetic assistant
1207
+ // messages. Without this check, an aborted compact "succeeds" with
1208
+ // "Request was aborted." as the summary — the text doesn't start with
1209
+ // "API Error" so the caller's startsWithApiErrorPrefix guard misses it.
1210
+ if (assistantMsg && assistantText && !assistantMsg.isApiErrorMessage) {
1211
+ // Skip success logging for PTL error text — it's returned so the
1212
+ // caller's retry loop catches it, but it's not a successful summary.
1213
+ if (!assistantText.startsWith(PROMPT_TOO_LONG_ERROR_MESSAGE)) {
1214
+ logEvent('tengu_compact_cache_sharing_success', {
1215
+ preCompactTokenCount,
1216
+ outputTokens: result.totalUsage.output_tokens,
1217
+ cacheReadInputTokens: result.totalUsage.cache_read_input_tokens,
1218
+ cacheCreationInputTokens:
1219
+ result.totalUsage.cache_creation_input_tokens,
1220
+ cacheHitRate:
1221
+ result.totalUsage.cache_read_input_tokens > 0
1222
+ ? result.totalUsage.cache_read_input_tokens /
1223
+ (result.totalUsage.cache_read_input_tokens +
1224
+ result.totalUsage.cache_creation_input_tokens +
1225
+ result.totalUsage.input_tokens)
1226
+ : 0,
1227
+ })
1228
+ }
1229
+ return assistantMsg
1230
+ }
1231
+ logForDebugging(
1232
+ `Compact cache sharing: no text in response, falling back. Response: ${jsonStringify(assistantMsg)}`,
1233
+ { level: 'warn' },
1234
+ )
1235
+ logEvent('tengu_compact_cache_sharing_fallback', {
1236
+ reason:
1237
+ 'no_text_response' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1238
+ preCompactTokenCount,
1239
+ })
1240
+ } catch (error) {
1241
+ logError(error)
1242
+ logEvent('tengu_compact_cache_sharing_fallback', {
1243
+ reason:
1244
+ 'error' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1245
+ preCompactTokenCount,
1246
+ })
1247
+ }
1248
+ }
1249
+
1250
+ // Regular streaming path (fallback when cache sharing fails or is disabled)
1251
+ const retryEnabled = getFeatureValue_CACHED_MAY_BE_STALE(
1252
+ 'tengu_compact_streaming_retry',
1253
+ false,
1254
+ )
1255
+ const maxAttempts = retryEnabled ? MAX_COMPACT_STREAMING_RETRIES : 1
1256
+
1257
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
1258
+ // Reset state for retry
1259
+ let hasStartedStreaming = false
1260
+ let response: AssistantMessage | undefined
1261
+ context.setResponseLength?.(() => 0)
1262
+
1263
+ // Check if tool search is enabled using the main loop's tools list.
1264
+ // context.options.tools includes MCP tools merged via useMergedTools.
1265
+ const useToolSearch = await isToolSearchEnabled(
1266
+ context.options.mainLoopModel,
1267
+ context.options.tools,
1268
+ async () => appState.toolPermissionContext,
1269
+ context.options.agentDefinitions.activeAgents,
1270
+ 'compact',
1271
+ )
1272
+
1273
+ // When tool search is enabled, include ToolSearchTool and MCP tools. They get
1274
+ // defer_loading: true and don't count against context - the API filters them out
1275
+ // of system_prompt_tools before token counting (see api/token_count_api/counting.py:188
1276
+ // and api/public_api/messages/handler.py:324).
1277
+ // Filter MCP tools from context.options.tools (not appState.mcp.tools) so we
1278
+ // get the permission-filtered set from useMergedTools — same source used for
1279
+ // isToolSearchEnabled above and normalizeMessagesForAPI below.
1280
+ // Deduplicate by name to avoid API errors when MCP tools share names with built-in tools.
1281
+ const tools: Tool[] = useToolSearch
1282
+ ? uniqBy(
1283
+ [
1284
+ FileReadTool,
1285
+ ToolSearchTool,
1286
+ ...context.options.tools.filter(t => t.isMcp),
1287
+ ],
1288
+ 'name',
1289
+ )
1290
+ : [FileReadTool]
1291
+
1292
+ const streamingGen = queryModelWithStreaming({
1293
+ messages: normalizeMessagesForAPI(
1294
+ stripImagesFromMessages(
1295
+ stripReinjectedAttachments([
1296
+ ...getMessagesAfterCompactBoundary(messages),
1297
+ summaryRequest,
1298
+ ]),
1299
+ ),
1300
+ context.options.tools,
1301
+ ),
1302
+ systemPrompt: asSystemPrompt([
1303
+ 'You are a helpful AI assistant tasked with summarizing conversations.',
1304
+ ]),
1305
+ thinkingConfig: { type: 'disabled' as const },
1306
+ tools,
1307
+ signal: context.abortController.signal,
1308
+ options: {
1309
+ async getToolPermissionContext() {
1310
+ const appState = context.getAppState()
1311
+ return appState.toolPermissionContext
1312
+ },
1313
+ model: context.options.mainLoopModel,
1314
+ toolChoice: undefined,
1315
+ isNonInteractiveSession: context.options.isNonInteractiveSession,
1316
+ hasAppendSystemPrompt: !!context.options.appendSystemPrompt,
1317
+ maxOutputTokensOverride: Math.min(
1318
+ COMPACT_MAX_OUTPUT_TOKENS,
1319
+ getMaxOutputTokensForModel(context.options.mainLoopModel),
1320
+ ),
1321
+ querySource: 'compact',
1322
+ agents: context.options.agentDefinitions.activeAgents,
1323
+ mcpTools: [],
1324
+ effortValue: appState.effortValue,
1325
+ },
1326
+ })
1327
+ const streamIter = streamingGen[Symbol.asyncIterator]()
1328
+ let next = await streamIter.next()
1329
+
1330
+ while (!next.done) {
1331
+ const event = next.value
1332
+
1333
+ if (
1334
+ !hasStartedStreaming &&
1335
+ event.type === 'stream_event' &&
1336
+ event.event.type === 'content_block_start' &&
1337
+ event.event.content_block.type === 'text'
1338
+ ) {
1339
+ hasStartedStreaming = true
1340
+ context.setStreamMode?.('responding')
1341
+ }
1342
+
1343
+ if (
1344
+ event.type === 'stream_event' &&
1345
+ event.event.type === 'content_block_delta' &&
1346
+ event.event.delta.type === 'text_delta'
1347
+ ) {
1348
+ const charactersStreamed = event.event.delta.text.length
1349
+ context.setResponseLength?.(length => length + charactersStreamed)
1350
+ }
1351
+
1352
+ if (event.type === 'assistant') {
1353
+ response = event
1354
+ }
1355
+
1356
+ next = await streamIter.next()
1357
+ }
1358
+
1359
+ if (response) {
1360
+ return response
1361
+ }
1362
+
1363
+ if (attempt < maxAttempts) {
1364
+ logEvent('tengu_compact_streaming_retry', {
1365
+ attempt,
1366
+ preCompactTokenCount,
1367
+ hasStartedStreaming,
1368
+ })
1369
+ await sleep(getRetryDelay(attempt), context.abortController.signal, {
1370
+ abortError: () => new APIUserAbortError(),
1371
+ })
1372
+ continue
1373
+ }
1374
+
1375
+ logForDebugging(
1376
+ `Compact streaming failed after ${attempt} attempts. hasStartedStreaming=${hasStartedStreaming}`,
1377
+ { level: 'error' },
1378
+ )
1379
+ logEvent('tengu_compact_failed', {
1380
+ reason:
1381
+ 'no_streaming_response' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
1382
+ preCompactTokenCount,
1383
+ hasStartedStreaming,
1384
+ retryEnabled,
1385
+ attempts: attempt,
1386
+ promptCacheSharingEnabled,
1387
+ })
1388
+ throw new Error(ERROR_MESSAGE_INCOMPLETE_RESPONSE)
1389
+ }
1390
+
1391
+ // This should never be reached due to the throw above, but TypeScript needs it
1392
+ throw new Error(ERROR_MESSAGE_INCOMPLETE_RESPONSE)
1393
+ } finally {
1394
+ clearInterval(activityInterval)
1395
+ }
1396
+ }
1397
+
1398
+ /**
1399
+ * Creates attachment messages for recently accessed files to restore them after compaction.
1400
+ * This prevents the model from having to re-read files that were recently accessed.
1401
+ * Re-reads files using FileReadTool to get fresh content with proper validation.
1402
+ * Files are selected based on recency, but constrained by both file count and token budget limits.
1403
+ *
1404
+ * Files already present as Read tool results in preservedMessages are skipped —
1405
+ * re-injecting identical content the model can already see in the preserved tail
1406
+ * is pure waste (up to 25K tok/compact). Mirrors the diff-against-preserved
1407
+ * pattern that getDeferredToolsDeltaAttachment uses at the same call sites.
1408
+ *
1409
+ * @param readFileState The current file state tracking recently read files
1410
+ * @param toolUseContext The tool use context for calling FileReadTool
1411
+ * @param maxFiles Maximum number of files to restore (default: 5)
1412
+ * @param preservedMessages Messages kept post-compact; Read results here are skipped
1413
+ * @returns Array of attachment messages for the most recently accessed files that fit within token budget
1414
+ */
1415
+ export async function createPostCompactFileAttachments(
1416
+ readFileState: Record<string, { content: string; timestamp: number }>,
1417
+ toolUseContext: ToolUseContext,
1418
+ maxFiles: number,
1419
+ preservedMessages: Message[] = [],
1420
+ ): Promise<AttachmentMessage[]> {
1421
+ const preservedReadPaths = collectReadToolFilePaths(preservedMessages)
1422
+ const recentFiles = Object.entries(readFileState)
1423
+ .map(([filename, state]) => ({ filename, ...state }))
1424
+ .filter(
1425
+ file =>
1426
+ !shouldExcludeFromPostCompactRestore(
1427
+ file.filename,
1428
+ toolUseContext.agentId,
1429
+ ) && !preservedReadPaths.has(expandPath(file.filename)),
1430
+ )
1431
+ .sort((a, b) => b.timestamp - a.timestamp)
1432
+ .slice(0, maxFiles)
1433
+
1434
+ const results = await Promise.all(
1435
+ recentFiles.map(async file => {
1436
+ const attachment = await generateFileAttachment(
1437
+ file.filename,
1438
+ {
1439
+ ...toolUseContext,
1440
+ fileReadingLimits: {
1441
+ maxTokens: POST_COMPACT_MAX_TOKENS_PER_FILE,
1442
+ },
1443
+ },
1444
+ 'tengu_post_compact_file_restore_success',
1445
+ 'tengu_post_compact_file_restore_error',
1446
+ 'compact',
1447
+ )
1448
+ return attachment ? createAttachmentMessage(attachment) : null
1449
+ }),
1450
+ )
1451
+
1452
+ let usedTokens = 0
1453
+ return results.filter((result): result is AttachmentMessage => {
1454
+ if (result === null) {
1455
+ return false
1456
+ }
1457
+ const attachmentTokens = roughTokenCountEstimation(jsonStringify(result))
1458
+ if (usedTokens + attachmentTokens <= POST_COMPACT_TOKEN_BUDGET) {
1459
+ usedTokens += attachmentTokens
1460
+ return true
1461
+ }
1462
+ return false
1463
+ })
1464
+ }
1465
+
1466
+ /**
1467
+ * Creates a plan file attachment if a plan file exists for the current session.
1468
+ * This ensures the plan is preserved after compaction.
1469
+ */
1470
+ export function createPlanAttachmentIfNeeded(
1471
+ agentId?: AgentId,
1472
+ ): AttachmentMessage | null {
1473
+ const planContent = getPlan(agentId)
1474
+
1475
+ if (!planContent) {
1476
+ return null
1477
+ }
1478
+
1479
+ const planFilePath = getPlanFilePath(agentId)
1480
+
1481
+ return createAttachmentMessage({
1482
+ type: 'plan_file_reference',
1483
+ planFilePath,
1484
+ planContent,
1485
+ })
1486
+ }
1487
+
1488
+ /**
1489
+ * Creates an attachment for invoked skills to preserve their content across compaction.
1490
+ * Only includes skills scoped to the given agent (or main session when agentId is null/undefined).
1491
+ * This ensures skill guidelines remain available after the conversation is summarized
1492
+ * without leaking skills from other agent contexts.
1493
+ */
1494
+ export function createSkillAttachmentIfNeeded(
1495
+ agentId?: string,
1496
+ ): AttachmentMessage | null {
1497
+ const invokedSkills = getInvokedSkillsForAgent(agentId)
1498
+
1499
+ if (invokedSkills.size === 0) {
1500
+ return null
1501
+ }
1502
+
1503
+ // Sorted most-recent-first so budget pressure drops the least-relevant skills.
1504
+ // Per-skill truncation keeps the head of each file (where setup/usage
1505
+ // instructions typically live) rather than dropping whole skills.
1506
+ let usedTokens = 0
1507
+ const skills = Array.from(invokedSkills.values())
1508
+ .sort((a, b) => b.invokedAt - a.invokedAt)
1509
+ .map(skill => ({
1510
+ name: skill.skillName,
1511
+ path: skill.skillPath,
1512
+ content: truncateToTokens(
1513
+ skill.content,
1514
+ POST_COMPACT_MAX_TOKENS_PER_SKILL,
1515
+ ),
1516
+ }))
1517
+ .filter(skill => {
1518
+ const tokens = roughTokenCountEstimation(skill.content)
1519
+ if (usedTokens + tokens > POST_COMPACT_SKILLS_TOKEN_BUDGET) {
1520
+ return false
1521
+ }
1522
+ usedTokens += tokens
1523
+ return true
1524
+ })
1525
+
1526
+ if (skills.length === 0) {
1527
+ return null
1528
+ }
1529
+
1530
+ return createAttachmentMessage({
1531
+ type: 'invoked_skills',
1532
+ skills,
1533
+ })
1534
+ }
1535
+
1536
+ /**
1537
+ * Creates a plan_mode attachment if the user is currently in plan mode.
1538
+ * This ensures the model continues to operate in plan mode after compaction
1539
+ * (otherwise it would lose the plan mode instructions since those are
1540
+ * normally only injected on tool-use turns via getAttachmentMessages).
1541
+ */
1542
+ export async function createPlanModeAttachmentIfNeeded(
1543
+ context: ToolUseContext,
1544
+ ): Promise<AttachmentMessage | null> {
1545
+ const appState = context.getAppState()
1546
+ if (appState.toolPermissionContext.mode !== 'plan') {
1547
+ return null
1548
+ }
1549
+
1550
+ const planFilePath = getPlanFilePath(context.agentId)
1551
+ const planExists = getPlan(context.agentId) !== null
1552
+
1553
+ return createAttachmentMessage({
1554
+ type: 'plan_mode',
1555
+ reminderType: 'full',
1556
+ isSubAgent: !!context.agentId,
1557
+ planFilePath,
1558
+ planExists,
1559
+ })
1560
+ }
1561
+
1562
+ /**
1563
+ * Creates attachments for async agents so the model knows about them after
1564
+ * compaction. Covers both agents still running in the background (so the model
1565
+ * doesn't spawn a duplicate) and agents that have finished but whose results
1566
+ * haven't been retrieved yet.
1567
+ */
1568
+ export async function createAsyncAgentAttachmentsIfNeeded(
1569
+ context: ToolUseContext,
1570
+ ): Promise<AttachmentMessage[]> {
1571
+ const appState = context.getAppState()
1572
+ const asyncAgents = Object.values(appState.tasks).filter(
1573
+ (task): task is LocalAgentTaskState => task.type === 'local_agent',
1574
+ )
1575
+
1576
+ return asyncAgents.flatMap(agent => {
1577
+ if (
1578
+ agent.retrieved ||
1579
+ agent.status === 'pending' ||
1580
+ agent.agentId === context.agentId
1581
+ ) {
1582
+ return []
1583
+ }
1584
+ return [
1585
+ createAttachmentMessage({
1586
+ type: 'task_status',
1587
+ taskId: agent.agentId,
1588
+ taskType: 'local_agent',
1589
+ description: agent.description,
1590
+ status: agent.status,
1591
+ deltaSummary:
1592
+ agent.status === 'running'
1593
+ ? (agent.progress?.summary ?? null)
1594
+ : (agent.error ?? null),
1595
+ outputFilePath: getTaskOutputPath(agent.agentId),
1596
+ }),
1597
+ ]
1598
+ })
1599
+ }
1600
+
1601
+ /**
1602
+ * Scan messages for Read tool_use blocks and collect their file_path inputs
1603
+ * (normalized via expandPath). Used to dedup post-compact file restoration
1604
+ * against what's already visible in the preserved tail.
1605
+ *
1606
+ * Skips Reads whose tool_result is a dedup stub — the stub points at an
1607
+ * earlier full Read that may have been compacted away, so we want
1608
+ * createPostCompactFileAttachments to re-inject the real content.
1609
+ */
1610
+ function collectReadToolFilePaths(messages: Message[]): Set<string> {
1611
+ const stubIds = new Set<string>()
1612
+ for (const message of messages) {
1613
+ if (message.type !== 'user' || !Array.isArray(message.message.content)) {
1614
+ continue
1615
+ }
1616
+ for (const block of message.message.content) {
1617
+ if (
1618
+ block.type === 'tool_result' &&
1619
+ typeof block.content === 'string' &&
1620
+ block.content.startsWith(FILE_UNCHANGED_STUB)
1621
+ ) {
1622
+ stubIds.add(block.tool_use_id)
1623
+ }
1624
+ }
1625
+ }
1626
+
1627
+ const paths = new Set<string>()
1628
+ for (const message of messages) {
1629
+ if (
1630
+ message.type !== 'assistant' ||
1631
+ !Array.isArray(message.message.content)
1632
+ ) {
1633
+ continue
1634
+ }
1635
+ for (const block of message.message.content) {
1636
+ if (
1637
+ block.type !== 'tool_use' ||
1638
+ block.name !== FILE_READ_TOOL_NAME ||
1639
+ stubIds.has(block.id)
1640
+ ) {
1641
+ continue
1642
+ }
1643
+ const input = block.input
1644
+ if (
1645
+ input &&
1646
+ typeof input === 'object' &&
1647
+ 'file_path' in input &&
1648
+ typeof input.file_path === 'string'
1649
+ ) {
1650
+ paths.add(expandPath(input.file_path))
1651
+ }
1652
+ }
1653
+ }
1654
+ return paths
1655
+ }
1656
+
1657
+ const SKILL_TRUNCATION_MARKER =
1658
+ '\n\n[... skill content truncated for compaction; use Read on the skill path if you need the full text]'
1659
+
1660
+ /**
1661
+ * Truncate content to roughly maxTokens, keeping the head. roughTokenCountEstimation
1662
+ * uses ~4 chars/token (its default bytesPerToken), so char budget = maxTokens * 4
1663
+ * minus the marker so the result stays within budget. Marker tells the model it
1664
+ * can Read the full file if needed.
1665
+ */
1666
+ function truncateToTokens(content: string, maxTokens: number): string {
1667
+ if (roughTokenCountEstimation(content) <= maxTokens) {
1668
+ return content
1669
+ }
1670
+ const charBudget = maxTokens * 4 - SKILL_TRUNCATION_MARKER.length
1671
+ return content.slice(0, charBudget) + SKILL_TRUNCATION_MARKER
1672
+ }
1673
+
1674
+ function shouldExcludeFromPostCompactRestore(
1675
+ filename: string,
1676
+ agentId?: AgentId,
1677
+ ): boolean {
1678
+ const normalizedFilename = expandPath(filename)
1679
+ // Exclude plan files
1680
+ try {
1681
+ const planFilePath = expandPath(getPlanFilePath(agentId))
1682
+ if (normalizedFilename === planFilePath) {
1683
+ return true
1684
+ }
1685
+ } catch {
1686
+ // If we can't get plan file path, continue with other checks
1687
+ }
1688
+
1689
+ // Exclude all types of claude.md files
1690
+ // TODO: Refactor to use isMemoryFilePath() from claudemd.ts for consistency
1691
+ // and to also match child directory memory files (.claude/rules/*.md, etc.)
1692
+ try {
1693
+ const normalizedMemoryPaths = new Set(
1694
+ MEMORY_TYPE_VALUES.map(type => expandPath(getMemoryPath(type))),
1695
+ )
1696
+
1697
+ if (normalizedMemoryPaths.has(normalizedFilename)) {
1698
+ return true
1699
+ }
1700
+ } catch {
1701
+ // If we can't get memory paths, continue
1702
+ }
1703
+
1704
+ return false
1705
+ }