@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,1519 @@
1
+ import { feature } from 'bun:bundle'
2
+ import chalk from 'chalk'
3
+ import { spawnSync } from 'child_process'
4
+ import {
5
+ copyFile,
6
+ mkdir,
7
+ readdir,
8
+ readFile,
9
+ stat,
10
+ symlink,
11
+ utimes,
12
+ } from 'fs/promises'
13
+ import ignore from 'ignore'
14
+ import { basename, dirname, join } from 'path'
15
+ import { saveCurrentProjectConfig } from './config.js'
16
+ import { getCwd } from './cwd.js'
17
+ import { logForDebugging } from './debug.js'
18
+ import { errorMessage, getErrnoCode } from './errors.js'
19
+ import { execFileNoThrow, execFileNoThrowWithCwd } from './execFileNoThrow.js'
20
+ import { parseGitConfigValue } from './git/gitConfigParser.js'
21
+ import {
22
+ getCommonDir,
23
+ readWorktreeHeadSha,
24
+ resolveGitDir,
25
+ resolveRef,
26
+ } from './git/gitFilesystem.js'
27
+ import {
28
+ findCanonicalGitRoot,
29
+ findGitRoot,
30
+ getBranch,
31
+ getDefaultBranch,
32
+ gitExe,
33
+ } from './git.js'
34
+ import {
35
+ executeWorktreeCreateHook,
36
+ executeWorktreeRemoveHook,
37
+ hasWorktreeCreateHook,
38
+ } from './hooks.js'
39
+ import { containsPathTraversal } from './path.js'
40
+ import { getPlatform } from './platform.js'
41
+ import {
42
+ getInitialSettings,
43
+ getRelativeSettingsFilePathForSource,
44
+ } from './settings/settings.js'
45
+ import { sleep } from './sleep.js'
46
+ import { isInITerm2 } from './swarm/backends/detection.js'
47
+
48
+ const VALID_WORKTREE_SLUG_SEGMENT = /^[a-zA-Z0-9._-]+$/
49
+ const MAX_WORKTREE_SLUG_LENGTH = 64
50
+
51
+ /**
52
+ * Validates a worktree slug to prevent path traversal and directory escape.
53
+ *
54
+ * The slug is joined into `.claude/worktrees/<slug>` via path.join, which
55
+ * normalizes `..` segments — so `../../../target` would escape the worktrees
56
+ * directory. Similarly, an absolute path (leading `/` or `C:\`) would discard
57
+ * the prefix entirely.
58
+ *
59
+ * Forward slashes are allowed for nesting (e.g. `asm/feature-foo`); each
60
+ * segment is validated independently against the allowlist, so `.` / `..`
61
+ * segments and drive-spec characters are still rejected.
62
+ *
63
+ * Throws synchronously — callers rely on this running before any side effects
64
+ * (git commands, hook execution, chdir).
65
+ */
66
+ export function validateWorktreeSlug(slug: string): void {
67
+ if (slug.length > MAX_WORKTREE_SLUG_LENGTH) {
68
+ throw new Error(
69
+ `Invalid worktree name: must be ${MAX_WORKTREE_SLUG_LENGTH} characters or fewer (got ${slug.length})`,
70
+ )
71
+ }
72
+ // Leading or trailing `/` would make path.join produce an absolute path
73
+ // or a dangling segment. Splitting and validating each segment rejects
74
+ // both (empty segments fail the regex) while allowing `user/feature`.
75
+ for (const segment of slug.split('/')) {
76
+ if (segment === '.' || segment === '..') {
77
+ throw new Error(
78
+ `Invalid worktree name "${slug}": must not contain "." or ".." path segments`,
79
+ )
80
+ }
81
+ if (!VALID_WORKTREE_SLUG_SEGMENT.test(segment)) {
82
+ throw new Error(
83
+ `Invalid worktree name "${slug}": each "/"-separated segment must be non-empty and contain only letters, digits, dots, underscores, and dashes`,
84
+ )
85
+ }
86
+ }
87
+ }
88
+
89
+ // Helper function to create directories recursively
90
+ async function mkdirRecursive(dirPath: string): Promise<void> {
91
+ await mkdir(dirPath, { recursive: true })
92
+ }
93
+
94
+ /**
95
+ * Symlinks directories from the main repository to avoid duplication.
96
+ * This prevents disk bloat from duplicating node_modules and other large directories.
97
+ *
98
+ * @param repoRootPath - Path to the main repository root
99
+ * @param worktreePath - Path to the worktree directory
100
+ * @param dirsToSymlink - Array of directory names to symlink (e.g., ['node_modules'])
101
+ */
102
+ async function symlinkDirectories(
103
+ repoRootPath: string,
104
+ worktreePath: string,
105
+ dirsToSymlink: string[],
106
+ ): Promise<void> {
107
+ for (const dir of dirsToSymlink) {
108
+ // Validate directory doesn't escape repository boundaries
109
+ if (containsPathTraversal(dir)) {
110
+ logForDebugging(
111
+ `Skipping symlink for "${dir}": path traversal detected`,
112
+ { level: 'warn' },
113
+ )
114
+ continue
115
+ }
116
+
117
+ const sourcePath = join(repoRootPath, dir)
118
+ const destPath = join(worktreePath, dir)
119
+
120
+ try {
121
+ await symlink(sourcePath, destPath, 'dir')
122
+ logForDebugging(
123
+ `Symlinked ${dir} from main repository to worktree to avoid disk bloat`,
124
+ )
125
+ } catch (error) {
126
+ const code = getErrnoCode(error)
127
+ // ENOENT: source doesn't exist yet (expected - skip silently)
128
+ // EEXIST: destination already exists (expected - skip silently)
129
+ if (code !== 'ENOENT' && code !== 'EEXIST') {
130
+ // Unexpected error (e.g., permission denied, unsupported platform)
131
+ logForDebugging(
132
+ `Failed to symlink ${dir} (${code ?? 'unknown'}): ${errorMessage(error)}`,
133
+ { level: 'warn' },
134
+ )
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ export type WorktreeSession = {
141
+ originalCwd: string
142
+ worktreePath: string
143
+ worktreeName: string
144
+ worktreeBranch?: string
145
+ originalBranch?: string
146
+ originalHeadCommit?: string
147
+ sessionId: string
148
+ tmuxSessionName?: string
149
+ hookBased?: boolean
150
+ /** How long worktree creation took (unset when resuming an existing worktree). */
151
+ creationDurationMs?: number
152
+ /** True if git sparse-checkout was applied via settings.worktree.sparsePaths. */
153
+ usedSparsePaths?: boolean
154
+ }
155
+
156
+ let currentWorktreeSession: WorktreeSession | null = null
157
+
158
+ export function getCurrentWorktreeSession(): WorktreeSession | null {
159
+ return currentWorktreeSession
160
+ }
161
+
162
+ /**
163
+ * Restore the worktree session on --resume. The caller must have already
164
+ * verified the directory exists (via process.chdir) and set the bootstrap
165
+ * state (cwd, originalCwd).
166
+ */
167
+ export function restoreWorktreeSession(session: WorktreeSession | null): void {
168
+ currentWorktreeSession = session
169
+ }
170
+
171
+ export function generateTmuxSessionName(
172
+ repoPath: string,
173
+ branch: string,
174
+ ): string {
175
+ const repoName = basename(repoPath)
176
+ const combined = `${repoName}_${branch}`
177
+ return combined.replace(/[/.]/g, '_')
178
+ }
179
+
180
+ type WorktreeCreateResult =
181
+ | {
182
+ worktreePath: string
183
+ worktreeBranch: string
184
+ headCommit: string
185
+ existed: true
186
+ }
187
+ | {
188
+ worktreePath: string
189
+ worktreeBranch: string
190
+ headCommit: string
191
+ baseBranch: string
192
+ existed: false
193
+ }
194
+
195
+ // Env vars to prevent git/SSH from prompting for credentials (which hangs the CLI).
196
+ // GIT_TERMINAL_PROMPT=0 prevents git from opening /dev/tty for credential prompts.
197
+ // GIT_ASKPASS='' disables askpass GUI programs.
198
+ // stdin: 'ignore' closes stdin so interactive prompts can't block.
199
+ const GIT_NO_PROMPT_ENV = {
200
+ GIT_TERMINAL_PROMPT: '0',
201
+ GIT_ASKPASS: '',
202
+ }
203
+
204
+ function worktreesDir(repoRoot: string): string {
205
+ return join(repoRoot, '.claude', 'worktrees')
206
+ }
207
+
208
+ // Flatten nested slugs (`user/feature` → `user+feature`) for both the branch
209
+ // name and the directory path. Nesting in either location is unsafe:
210
+ // - git refs: `worktree-user` (file) vs `worktree-user/feature` (needs dir)
211
+ // is a D/F conflict that git rejects.
212
+ // - directory: `.claude/worktrees/user/feature/` lives inside the `user`
213
+ // worktree; `git worktree remove` on the parent deletes children with
214
+ // uncommitted work.
215
+ // `+` is valid in git branch names and filesystem paths but NOT in the
216
+ // slug-segment allowlist ([a-zA-Z0-9._-]), so the mapping is injective.
217
+ function flattenSlug(slug: string): string {
218
+ return slug.replaceAll('/', '+')
219
+ }
220
+
221
+ export function worktreeBranchName(slug: string): string {
222
+ return `worktree-${flattenSlug(slug)}`
223
+ }
224
+
225
+ function worktreePathFor(repoRoot: string, slug: string): string {
226
+ return join(worktreesDir(repoRoot), flattenSlug(slug))
227
+ }
228
+
229
+ /**
230
+ * Creates a new git worktree for the given slug, or resumes it if it already exists.
231
+ * Named worktrees reuse the same path across invocations, so the existence check
232
+ * prevents unconditionally running `git fetch` (which can hang waiting for credentials)
233
+ * on every resume.
234
+ */
235
+ async function getOrCreateWorktree(
236
+ repoRoot: string,
237
+ slug: string,
238
+ options?: { prNumber?: number },
239
+ ): Promise<WorktreeCreateResult> {
240
+ const worktreePath = worktreePathFor(repoRoot, slug)
241
+ const worktreeBranch = worktreeBranchName(slug)
242
+
243
+ // Fast resume path: if the worktree already exists skip fetch and creation.
244
+ // Read the .git pointer file directly (no subprocess, no upward walk) — a
245
+ // subprocess `rev-parse HEAD` burns ~15ms on spawn overhead even for a 2ms
246
+ // task, and the await yield lets background spawnSyncs pile on (seen at 55ms).
247
+ const existingHead = await readWorktreeHeadSha(worktreePath)
248
+ if (existingHead) {
249
+ return {
250
+ worktreePath,
251
+ worktreeBranch,
252
+ headCommit: existingHead,
253
+ existed: true,
254
+ }
255
+ }
256
+
257
+ // New worktree: fetch base branch then add
258
+ await mkdir(worktreesDir(repoRoot), { recursive: true })
259
+
260
+ const fetchEnv = { ...process.env, ...GIT_NO_PROMPT_ENV }
261
+
262
+ let baseBranch: string
263
+ let baseSha: string | null = null
264
+ if (options?.prNumber) {
265
+ const { code: prFetchCode, stderr: prFetchStderr } =
266
+ await execFileNoThrowWithCwd(
267
+ gitExe(),
268
+ ['fetch', 'origin', `pull/${options.prNumber}/head`],
269
+ { cwd: repoRoot, stdin: 'ignore', env: fetchEnv },
270
+ )
271
+ if (prFetchCode !== 0) {
272
+ throw new Error(
273
+ `Failed to fetch PR #${options.prNumber}: ${prFetchStderr.trim() || 'PR may not exist or the repository may not have a remote named "origin"'}`,
274
+ )
275
+ }
276
+ baseBranch = 'FETCH_HEAD'
277
+ } else {
278
+ // If origin/<branch> already exists locally, skip fetch. In large repos
279
+ // (210k files, 16M objects) fetch burns ~6-8s on a local commit-graph
280
+ // scan before even hitting the network. A slightly stale base is fine —
281
+ // the user can pull in the worktree if they want latest.
282
+ // resolveRef reads the loose/packed ref directly; when it succeeds we
283
+ // already have the SHA, so the later rev-parse is skipped entirely.
284
+ const [defaultBranch, gitDir] = await Promise.all([
285
+ getDefaultBranch(),
286
+ resolveGitDir(repoRoot),
287
+ ])
288
+ const originRef = `origin/${defaultBranch}`
289
+ const originSha = gitDir
290
+ ? await resolveRef(gitDir, `refs/remotes/origin/${defaultBranch}`)
291
+ : null
292
+ if (originSha) {
293
+ baseBranch = originRef
294
+ baseSha = originSha
295
+ } else {
296
+ const { code: fetchCode } = await execFileNoThrowWithCwd(
297
+ gitExe(),
298
+ ['fetch', 'origin', defaultBranch],
299
+ { cwd: repoRoot, stdin: 'ignore', env: fetchEnv },
300
+ )
301
+ baseBranch = fetchCode === 0 ? originRef : 'HEAD'
302
+ }
303
+ }
304
+
305
+ // For the fetch/PR-fetch paths we still need the SHA — the fs-only resolveRef
306
+ // above only covers the "origin/<branch> already exists locally" case.
307
+ if (!baseSha) {
308
+ const { stdout, code: shaCode } = await execFileNoThrowWithCwd(
309
+ gitExe(),
310
+ ['rev-parse', baseBranch],
311
+ { cwd: repoRoot },
312
+ )
313
+ if (shaCode !== 0) {
314
+ throw new Error(
315
+ `Failed to resolve base branch "${baseBranch}": git rev-parse failed`,
316
+ )
317
+ }
318
+ baseSha = stdout.trim()
319
+ }
320
+
321
+ const sparsePaths = getInitialSettings().worktree?.sparsePaths
322
+ const addArgs = ['worktree', 'add']
323
+ if (sparsePaths?.length) {
324
+ addArgs.push('--no-checkout')
325
+ }
326
+ // -B (not -b): reset any orphan branch left behind by a removed worktree dir.
327
+ // Saves a `git branch -D` subprocess (~15ms spawn overhead) on every create.
328
+ addArgs.push('-B', worktreeBranch, worktreePath, baseBranch)
329
+
330
+ const { code: createCode, stderr: createStderr } =
331
+ await execFileNoThrowWithCwd(gitExe(), addArgs, { cwd: repoRoot })
332
+ if (createCode !== 0) {
333
+ throw new Error(`Failed to create worktree: ${createStderr}`)
334
+ }
335
+
336
+ if (sparsePaths?.length) {
337
+ // If sparse-checkout or checkout fail after --no-checkout, the worktree
338
+ // is registered and HEAD is set but the working tree is empty. Next run's
339
+ // fast-resume (rev-parse HEAD) would succeed and present a broken worktree
340
+ // as "resumed". Tear it down before propagating the error.
341
+ const tearDown = async (msg: string): Promise<never> => {
342
+ await execFileNoThrowWithCwd(
343
+ gitExe(),
344
+ ['worktree', 'remove', '--force', worktreePath],
345
+ { cwd: repoRoot },
346
+ )
347
+ throw new Error(msg)
348
+ }
349
+ const { code: sparseCode, stderr: sparseErr } =
350
+ await execFileNoThrowWithCwd(
351
+ gitExe(),
352
+ ['sparse-checkout', 'set', '--cone', '--', ...sparsePaths],
353
+ { cwd: worktreePath },
354
+ )
355
+ if (sparseCode !== 0) {
356
+ await tearDown(`Failed to configure sparse-checkout: ${sparseErr}`)
357
+ }
358
+ const { code: coCode, stderr: coErr } = await execFileNoThrowWithCwd(
359
+ gitExe(),
360
+ ['checkout', 'HEAD'],
361
+ { cwd: worktreePath },
362
+ )
363
+ if (coCode !== 0) {
364
+ await tearDown(`Failed to checkout sparse worktree: ${coErr}`)
365
+ }
366
+ }
367
+
368
+ return {
369
+ worktreePath,
370
+ worktreeBranch,
371
+ headCommit: baseSha,
372
+ baseBranch,
373
+ existed: false,
374
+ }
375
+ }
376
+
377
+ /**
378
+ * Copy gitignored files specified in .worktreeinclude from base repo to worktree.
379
+ *
380
+ * Only copies files that are BOTH:
381
+ * 1. Matched by patterns in .worktreeinclude (uses .gitignore syntax)
382
+ * 2. Gitignored (not tracked by git)
383
+ *
384
+ * Uses `git ls-files --others --ignored --exclude-standard --directory` to list
385
+ * gitignored entries with fully-ignored dirs collapsed to single entries (so large
386
+ * build outputs like node_modules/ don't force a full tree walk), then filters
387
+ * against .worktreeinclude patterns in-process using the `ignore` library. If a
388
+ * .worktreeinclude pattern explicitly targets a path inside a collapsed directory,
389
+ * that directory is expanded with a second scoped `ls-files` call.
390
+ */
391
+ export async function copyWorktreeIncludeFiles(
392
+ repoRoot: string,
393
+ worktreePath: string,
394
+ ): Promise<string[]> {
395
+ let includeContent: string
396
+ try {
397
+ includeContent = await readFile(join(repoRoot, '.worktreeinclude'), 'utf-8')
398
+ } catch {
399
+ return []
400
+ }
401
+
402
+ const patterns = includeContent
403
+ .split(/\r?\n/)
404
+ .map(line => line.trim())
405
+ .filter(line => line.length > 0 && !line.startsWith('#'))
406
+ if (patterns.length === 0) {
407
+ return []
408
+ }
409
+
410
+ // Single pass with --directory: collapses fully-gitignored dirs (node_modules/,
411
+ // .turbo/, etc.) into single entries instead of listing every file inside.
412
+ // In a large repo this cuts ~500k entries/~7s down to ~hundreds of entries/~100ms.
413
+ const gitignored = await execFileNoThrowWithCwd(
414
+ gitExe(),
415
+ ['ls-files', '--others', '--ignored', '--exclude-standard', '--directory'],
416
+ { cwd: repoRoot },
417
+ )
418
+ if (gitignored.code !== 0 || !gitignored.stdout.trim()) {
419
+ return []
420
+ }
421
+
422
+ const entries = gitignored.stdout.trim().split('\n').filter(Boolean)
423
+ const matcher = ignore().add(includeContent)
424
+
425
+ // --directory emits collapsed dirs with a trailing slash; everything else is
426
+ // an individual file.
427
+ const collapsedDirs = entries.filter(e => e.endsWith('/'))
428
+ const files = entries.filter(e => !e.endsWith('/') && matcher.ignores(e))
429
+
430
+ // Edge case: a .worktreeinclude pattern targets a path inside a collapsed dir
431
+ // (e.g. pattern `config/secrets/api.key` when all of `config/secrets/` is
432
+ // gitignored with no tracked siblings). Expand only dirs where a pattern has
433
+ // that dir as its explicit path prefix (stripping redundant leading `/`), the
434
+ // dir falls under an anchored glob's literal prefix (e.g. `config/**/*.key`
435
+ // expands `config/secrets/`), or the dir itself matches a pattern. We don't
436
+ // expand for `**/` or anchorless patterns -- those match files in tracked dirs
437
+ // (already listed individually) and expanding every collapsed dir for them
438
+ // would defeat the perf win.
439
+ const dirsToExpand = collapsedDirs.filter(dir => {
440
+ if (
441
+ patterns.some(p => {
442
+ const normalized = p.startsWith('/') ? p.slice(1) : p
443
+ // Literal prefix match: pattern starts with the collapsed dir path
444
+ if (normalized.startsWith(dir)) return true
445
+ // Anchored glob: dir falls under the pattern's literal (non-glob) prefix
446
+ // e.g. `config/**/*.key` has literal prefix `config/` → expand `config/secrets/`
447
+ const globIdx = normalized.search(/[*?[]/)
448
+ if (globIdx > 0) {
449
+ const literalPrefix = normalized.slice(0, globIdx)
450
+ if (dir.startsWith(literalPrefix)) return true
451
+ }
452
+ return false
453
+ })
454
+ )
455
+ return true
456
+ if (matcher.ignores(dir.slice(0, -1))) return true
457
+ return false
458
+ })
459
+ if (dirsToExpand.length > 0) {
460
+ const expanded = await execFileNoThrowWithCwd(
461
+ gitExe(),
462
+ [
463
+ 'ls-files',
464
+ '--others',
465
+ '--ignored',
466
+ '--exclude-standard',
467
+ '--',
468
+ ...dirsToExpand,
469
+ ],
470
+ { cwd: repoRoot },
471
+ )
472
+ if (expanded.code === 0 && expanded.stdout.trim()) {
473
+ for (const f of expanded.stdout.trim().split('\n').filter(Boolean)) {
474
+ if (matcher.ignores(f)) {
475
+ files.push(f)
476
+ }
477
+ }
478
+ }
479
+ }
480
+ const copied: string[] = []
481
+
482
+ for (const relativePath of files) {
483
+ const srcPath = join(repoRoot, relativePath)
484
+ const destPath = join(worktreePath, relativePath)
485
+ try {
486
+ await mkdir(dirname(destPath), { recursive: true })
487
+ await copyFile(srcPath, destPath)
488
+ copied.push(relativePath)
489
+ } catch (e: unknown) {
490
+ logForDebugging(
491
+ `Failed to copy ${relativePath} to worktree: ${(e as Error).message}`,
492
+ { level: 'warn' },
493
+ )
494
+ }
495
+ }
496
+
497
+ if (copied.length > 0) {
498
+ logForDebugging(
499
+ `Copied ${copied.length} files from .worktreeinclude: ${copied.join(', ')}`,
500
+ )
501
+ }
502
+
503
+ return copied
504
+ }
505
+
506
+ /**
507
+ * Post-creation setup for a newly created worktree.
508
+ * Propagates settings.local.json, configures git hooks, and symlinks directories.
509
+ */
510
+ async function performPostCreationSetup(
511
+ repoRoot: string,
512
+ worktreePath: string,
513
+ ): Promise<void> {
514
+ // Copy settings.local.json to the worktree's .claude directory
515
+ // This propagates local settings (which may contain secrets) to the worktree
516
+ const localSettingsRelativePath =
517
+ getRelativeSettingsFilePathForSource('localSettings')
518
+ const sourceSettingsLocal = join(repoRoot, localSettingsRelativePath)
519
+ try {
520
+ const destSettingsLocal = join(worktreePath, localSettingsRelativePath)
521
+ await mkdirRecursive(dirname(destSettingsLocal))
522
+ await copyFile(sourceSettingsLocal, destSettingsLocal)
523
+ logForDebugging(
524
+ `Copied settings.local.json to worktree: ${destSettingsLocal}`,
525
+ )
526
+ } catch (e: unknown) {
527
+ const code = getErrnoCode(e)
528
+ if (code !== 'ENOENT') {
529
+ logForDebugging(
530
+ `Failed to copy settings.local.json: ${(e as Error).message}`,
531
+ { level: 'warn' },
532
+ )
533
+ }
534
+ }
535
+
536
+ // Configure the worktree to use hooks from the main repository
537
+ // This solves issues with .husky and other git hooks that use relative paths
538
+ const huskyPath = join(repoRoot, '.husky')
539
+ const gitHooksPath = join(repoRoot, '.git', 'hooks')
540
+ let hooksPath: string | null = null
541
+ for (const candidatePath of [huskyPath, gitHooksPath]) {
542
+ try {
543
+ const s = await stat(candidatePath)
544
+ if (s.isDirectory()) {
545
+ hooksPath = candidatePath
546
+ break
547
+ }
548
+ } catch {
549
+ // Path doesn't exist or can't be accessed
550
+ }
551
+ }
552
+ if (hooksPath) {
553
+ // `git config` (no --worktree flag) writes to the main repo's .git/config,
554
+ // shared by all worktrees. Once set, every subsequent worktree create is a
555
+ // no-op — skip the subprocess (~14ms spawn) when the value already matches.
556
+ const gitDir = await resolveGitDir(repoRoot)
557
+ const configDir = gitDir ? ((await getCommonDir(gitDir)) ?? gitDir) : null
558
+ const existing = configDir
559
+ ? await parseGitConfigValue(configDir, 'core', null, 'hooksPath')
560
+ : null
561
+ if (existing !== hooksPath) {
562
+ const { code: configCode, stderr: configError } =
563
+ await execFileNoThrowWithCwd(
564
+ gitExe(),
565
+ ['config', 'core.hooksPath', hooksPath],
566
+ { cwd: worktreePath },
567
+ )
568
+ if (configCode === 0) {
569
+ logForDebugging(
570
+ `Configured worktree to use hooks from main repository: ${hooksPath}`,
571
+ )
572
+ } else {
573
+ logForDebugging(`Failed to configure hooks path: ${configError}`, {
574
+ level: 'error',
575
+ })
576
+ }
577
+ }
578
+ }
579
+
580
+ // Symlink directories to avoid disk bloat (opt-in via settings)
581
+ const settings = getInitialSettings()
582
+ const dirsToSymlink = settings.worktree?.symlinkDirectories ?? []
583
+ if (dirsToSymlink.length > 0) {
584
+ await symlinkDirectories(repoRoot, worktreePath, dirsToSymlink)
585
+ }
586
+
587
+ // Copy gitignored files specified in .worktreeinclude (best-effort)
588
+ await copyWorktreeIncludeFiles(repoRoot, worktreePath)
589
+
590
+ // The core.hooksPath config-set above is fragile: husky's prepare script
591
+ // (`git config core.hooksPath .husky`) runs on every `bun install` and
592
+ // resets the SHARED .git/config value back to relative, causing each
593
+ // worktree to resolve to its OWN .husky/ again. The attribution hook
594
+ // file isn't tracked (it's in .git/info/exclude), so fresh worktrees
595
+ // don't have it. Install it directly into the worktree's .husky/ —
596
+ // husky won't delete it (husky install is additive-only), and for
597
+ // non-husky repos this resolves to the shared .git/hooks/ (idempotent).
598
+ //
599
+ // Pass the worktree-local .husky explicitly: getHooksDir would return
600
+ // the absolute core.hooksPath we just set above (main repo's .husky),
601
+ // not the worktree's — `git rev-parse --git-path hooks` echoes the config
602
+ // value verbatim when it's absolute.
603
+ if (feature('COMMIT_ATTRIBUTION')) {
604
+ const worktreeHooksDir =
605
+ hooksPath === huskyPath ? join(worktreePath, '.husky') : undefined
606
+ void import('./postCommitAttribution.js')
607
+ .then(m =>
608
+ m
609
+ .installPrepareCommitMsgHook(worktreePath, worktreeHooksDir)
610
+ .catch(error => {
611
+ logForDebugging(
612
+ `Failed to install attribution hook in worktree: ${error}`,
613
+ )
614
+ }),
615
+ )
616
+ .catch(error => {
617
+ // Dynamic import() itself rejected (module load failure). The inner
618
+ // .catch above only handles installPrepareCommitMsgHook rejection —
619
+ // without this outer handler an import failure would surface as an
620
+ // unhandled promise rejection.
621
+ logForDebugging(`Failed to load postCommitAttribution module: ${error}`)
622
+ })
623
+ }
624
+ }
625
+
626
+ /**
627
+ * Parses a PR reference from a string.
628
+ * Accepts GitHub-style PR URLs (e.g., https://github.com/owner/repo/pull/123,
629
+ * or GHE equivalents like https://ghe.example.com/owner/repo/pull/123)
630
+ * or `#N` format (e.g., #123).
631
+ * Returns the PR number or null if the string is not a recognized PR reference.
632
+ */
633
+ export function parsePRReference(input: string): number | null {
634
+ // GitHub-style PR URL: https://<host>/owner/repo/pull/123 (with optional trailing slash, query, hash)
635
+ // The /pull/N path shape is specific to GitHub — GitLab uses /-/merge_requests/N,
636
+ // Bitbucket uses /pull-requests/N — so matching any host here is safe.
637
+ const urlMatch = input.match(
638
+ /^https?:\/\/[^/]+\/[^/]+\/[^/]+\/pull\/(\d+)\/?(?:[?#].*)?$/i,
639
+ )
640
+ if (urlMatch?.[1]) {
641
+ return parseInt(urlMatch[1], 10)
642
+ }
643
+
644
+ // #N format
645
+ const hashMatch = input.match(/^#(\d+)$/)
646
+ if (hashMatch?.[1]) {
647
+ return parseInt(hashMatch[1], 10)
648
+ }
649
+
650
+ return null
651
+ }
652
+
653
+ export async function isTmuxAvailable(): Promise<boolean> {
654
+ const { code } = await execFileNoThrow('tmux', ['-V'])
655
+ return code === 0
656
+ }
657
+
658
+ export function getTmuxInstallInstructions(): string {
659
+ const platform = getPlatform()
660
+ switch (platform) {
661
+ case 'macos':
662
+ return 'Install tmux with: brew install tmux'
663
+ case 'linux':
664
+ case 'wsl':
665
+ return 'Install tmux with: sudo apt install tmux (Debian/Ubuntu) or sudo dnf install tmux (Fedora/RHEL)'
666
+ case 'windows':
667
+ return 'tmux is not natively available on Windows. Consider using WSL or Cygwin.'
668
+ default:
669
+ return 'Install tmux using your system package manager.'
670
+ }
671
+ }
672
+
673
+ export async function createTmuxSessionForWorktree(
674
+ sessionName: string,
675
+ worktreePath: string,
676
+ ): Promise<{ created: boolean; error?: string }> {
677
+ const { code, stderr } = await execFileNoThrow('tmux', [
678
+ 'new-session',
679
+ '-d',
680
+ '-s',
681
+ sessionName,
682
+ '-c',
683
+ worktreePath,
684
+ ])
685
+
686
+ if (code !== 0) {
687
+ return { created: false, error: stderr }
688
+ }
689
+
690
+ return { created: true }
691
+ }
692
+
693
+ export async function killTmuxSession(sessionName: string): Promise<boolean> {
694
+ const { code } = await execFileNoThrow('tmux', [
695
+ 'kill-session',
696
+ '-t',
697
+ sessionName,
698
+ ])
699
+ return code === 0
700
+ }
701
+
702
+ export async function createWorktreeForSession(
703
+ sessionId: string,
704
+ slug: string,
705
+ tmuxSessionName?: string,
706
+ options?: { prNumber?: number },
707
+ ): Promise<WorktreeSession> {
708
+ // Must run before the hook branch below — hooks receive the raw slug as an
709
+ // argument, and the git branch builds a path from it via path.join.
710
+ validateWorktreeSlug(slug)
711
+
712
+ const originalCwd = getCwd()
713
+
714
+ // Try hook-based worktree creation first (allows user-configured VCS)
715
+ if (hasWorktreeCreateHook()) {
716
+ const hookResult = await executeWorktreeCreateHook(slug)
717
+ logForDebugging(
718
+ `Created hook-based worktree at: ${hookResult.worktreePath}`,
719
+ )
720
+
721
+ currentWorktreeSession = {
722
+ originalCwd,
723
+ worktreePath: hookResult.worktreePath,
724
+ worktreeName: slug,
725
+ sessionId,
726
+ tmuxSessionName,
727
+ hookBased: true,
728
+ }
729
+ } else {
730
+ // Fall back to git worktree
731
+ const gitRoot = findGitRoot(getCwd())
732
+ if (!gitRoot) {
733
+ throw new Error(
734
+ 'Cannot create a worktree: not in a git repository and no WorktreeCreate hooks are configured. ' +
735
+ 'Configure WorktreeCreate/WorktreeRemove hooks in settings.json to use worktree isolation with other VCS systems.',
736
+ )
737
+ }
738
+
739
+ const originalBranch = await getBranch()
740
+
741
+ const createStart = Date.now()
742
+ const { worktreePath, worktreeBranch, headCommit, existed } =
743
+ await getOrCreateWorktree(gitRoot, slug, options)
744
+
745
+ let creationDurationMs: number | undefined
746
+ if (existed) {
747
+ logForDebugging(`Resuming existing worktree at: ${worktreePath}`)
748
+ } else {
749
+ logForDebugging(
750
+ `Created worktree at: ${worktreePath} on branch: ${worktreeBranch}`,
751
+ )
752
+ await performPostCreationSetup(gitRoot, worktreePath)
753
+ creationDurationMs = Date.now() - createStart
754
+ }
755
+
756
+ currentWorktreeSession = {
757
+ originalCwd,
758
+ worktreePath,
759
+ worktreeName: slug,
760
+ worktreeBranch,
761
+ originalBranch,
762
+ originalHeadCommit: headCommit,
763
+ sessionId,
764
+ tmuxSessionName,
765
+ creationDurationMs,
766
+ usedSparsePaths:
767
+ (getInitialSettings().worktree?.sparsePaths?.length ?? 0) > 0,
768
+ }
769
+ }
770
+
771
+ // Save to project config for persistence
772
+ saveCurrentProjectConfig(current => ({
773
+ ...current,
774
+ activeWorktreeSession: currentWorktreeSession ?? undefined,
775
+ }))
776
+
777
+ return currentWorktreeSession
778
+ }
779
+
780
+ export async function keepWorktree(): Promise<void> {
781
+ if (!currentWorktreeSession) {
782
+ return
783
+ }
784
+
785
+ try {
786
+ const { worktreePath, originalCwd, worktreeBranch } = currentWorktreeSession
787
+
788
+ // Change back to original directory first
789
+ process.chdir(originalCwd)
790
+
791
+ // Clear the session but keep the worktree intact
792
+ currentWorktreeSession = null
793
+
794
+ // Update config
795
+ saveCurrentProjectConfig(current => ({
796
+ ...current,
797
+ activeWorktreeSession: undefined,
798
+ }))
799
+
800
+ logForDebugging(
801
+ `Linked worktree preserved at: ${worktreePath}${worktreeBranch ? ` on branch: ${worktreeBranch}` : ''}`,
802
+ )
803
+ logForDebugging(
804
+ `You can continue working there by running: cd ${worktreePath}`,
805
+ )
806
+ } catch (error) {
807
+ logForDebugging(`Error keeping worktree: ${error}`, {
808
+ level: 'error',
809
+ })
810
+ }
811
+ }
812
+
813
+ export async function cleanupWorktree(): Promise<void> {
814
+ if (!currentWorktreeSession) {
815
+ return
816
+ }
817
+
818
+ try {
819
+ const { worktreePath, originalCwd, worktreeBranch, hookBased } =
820
+ currentWorktreeSession
821
+
822
+ // Change back to original directory first
823
+ process.chdir(originalCwd)
824
+
825
+ if (hookBased) {
826
+ // Hook-based worktree: delegate cleanup to WorktreeRemove hook
827
+ const hookRan = await executeWorktreeRemoveHook(worktreePath)
828
+ if (hookRan) {
829
+ logForDebugging(`Removed hook-based worktree at: ${worktreePath}`)
830
+ } else {
831
+ logForDebugging(
832
+ `No WorktreeRemove hook configured, hook-based worktree left at: ${worktreePath}`,
833
+ { level: 'warn' },
834
+ )
835
+ }
836
+ } else {
837
+ // Git-based worktree: use git worktree remove.
838
+ // Explicit cwd: process.chdir above does NOT update getCwd() (the state
839
+ // CWD that execFileNoThrow defaults to). If the model cd'd to a non-repo
840
+ // dir, the bare execFileNoThrow variant would fail silently here.
841
+ const { code: removeCode, stderr: removeError } =
842
+ await execFileNoThrowWithCwd(
843
+ gitExe(),
844
+ ['worktree', 'remove', '--force', worktreePath],
845
+ { cwd: originalCwd },
846
+ )
847
+
848
+ if (removeCode !== 0) {
849
+ logForDebugging(`Failed to remove linked worktree: ${removeError}`, {
850
+ level: 'error',
851
+ })
852
+ } else {
853
+ logForDebugging(`Removed linked worktree at: ${worktreePath}`)
854
+ }
855
+ }
856
+
857
+ // Clear the session
858
+ currentWorktreeSession = null
859
+
860
+ // Update config
861
+ saveCurrentProjectConfig(current => ({
862
+ ...current,
863
+ activeWorktreeSession: undefined,
864
+ }))
865
+
866
+ // Delete the temporary worktree branch (git-based only)
867
+ if (!hookBased && worktreeBranch) {
868
+ // Wait a bit to ensure git has released all locks
869
+ await sleep(100)
870
+
871
+ const { code: deleteBranchCode, stderr: deleteBranchError } =
872
+ await execFileNoThrowWithCwd(
873
+ gitExe(),
874
+ ['branch', '-D', worktreeBranch],
875
+ { cwd: originalCwd },
876
+ )
877
+
878
+ if (deleteBranchCode !== 0) {
879
+ logForDebugging(
880
+ `Could not delete worktree branch: ${deleteBranchError}`,
881
+ { level: 'error' },
882
+ )
883
+ } else {
884
+ logForDebugging(`Deleted worktree branch: ${worktreeBranch}`)
885
+ }
886
+ }
887
+
888
+ logForDebugging('Linked worktree cleaned up completely')
889
+ } catch (error) {
890
+ logForDebugging(`Error cleaning up worktree: ${error}`, {
891
+ level: 'error',
892
+ })
893
+ }
894
+ }
895
+
896
+ /**
897
+ * Create a lightweight worktree for a subagent.
898
+ * Reuses getOrCreateWorktree/performPostCreationSetup but does NOT touch
899
+ * global session state (currentWorktreeSession, process.chdir, project config).
900
+ * Falls back to hook-based creation if not in a git repository.
901
+ */
902
+ export async function createAgentWorktree(slug: string): Promise<{
903
+ worktreePath: string
904
+ worktreeBranch?: string
905
+ headCommit?: string
906
+ gitRoot?: string
907
+ hookBased?: boolean
908
+ }> {
909
+ validateWorktreeSlug(slug)
910
+
911
+ // Try hook-based worktree creation first (allows user-configured VCS)
912
+ if (hasWorktreeCreateHook()) {
913
+ const hookResult = await executeWorktreeCreateHook(slug)
914
+ logForDebugging(
915
+ `Created hook-based agent worktree at: ${hookResult.worktreePath}`,
916
+ )
917
+
918
+ return { worktreePath: hookResult.worktreePath, hookBased: true }
919
+ }
920
+
921
+ // Fall back to git worktree
922
+ // findCanonicalGitRoot (not findGitRoot) so agent worktrees always land in
923
+ // the main repo's .claude/worktrees/ even when spawned from inside a session
924
+ // worktree — otherwise they nest at <worktree>/.claude/worktrees/ and the
925
+ // periodic cleanup (which scans the canonical root) never finds them.
926
+ const gitRoot = findCanonicalGitRoot(getCwd())
927
+ if (!gitRoot) {
928
+ throw new Error(
929
+ 'Cannot create agent worktree: not in a git repository and no WorktreeCreate hooks are configured. ' +
930
+ 'Configure WorktreeCreate/WorktreeRemove hooks in settings.json to use worktree isolation with other VCS systems.',
931
+ )
932
+ }
933
+
934
+ const { worktreePath, worktreeBranch, headCommit, existed } =
935
+ await getOrCreateWorktree(gitRoot, slug)
936
+
937
+ if (!existed) {
938
+ logForDebugging(
939
+ `Created agent worktree at: ${worktreePath} on branch: ${worktreeBranch}`,
940
+ )
941
+ await performPostCreationSetup(gitRoot, worktreePath)
942
+ } else {
943
+ // Bump mtime so the periodic stale-worktree cleanup doesn't consider this
944
+ // worktree stale — the fast-resume path is read-only and leaves the original
945
+ // creation-time mtime intact, which can be past the 30-day cutoff.
946
+ const now = new Date()
947
+ await utimes(worktreePath, now, now)
948
+ logForDebugging(`Resuming existing agent worktree at: ${worktreePath}`)
949
+ }
950
+
951
+ return { worktreePath, worktreeBranch, headCommit, gitRoot }
952
+ }
953
+
954
+ /**
955
+ * Remove a worktree created by createAgentWorktree.
956
+ * For git-based worktrees, removes the worktree directory and deletes the temporary branch.
957
+ * For hook-based worktrees, delegates to the WorktreeRemove hook.
958
+ * Must be called with the main repo's git root (for git worktrees), not the worktree path,
959
+ * since the worktree directory is deleted during this operation.
960
+ */
961
+ export async function removeAgentWorktree(
962
+ worktreePath: string,
963
+ worktreeBranch?: string,
964
+ gitRoot?: string,
965
+ hookBased?: boolean,
966
+ ): Promise<boolean> {
967
+ if (hookBased) {
968
+ const hookRan = await executeWorktreeRemoveHook(worktreePath)
969
+ if (hookRan) {
970
+ logForDebugging(`Removed hook-based agent worktree at: ${worktreePath}`)
971
+ } else {
972
+ logForDebugging(
973
+ `No WorktreeRemove hook configured, hook-based agent worktree left at: ${worktreePath}`,
974
+ { level: 'warn' },
975
+ )
976
+ }
977
+ return hookRan
978
+ }
979
+
980
+ if (!gitRoot) {
981
+ logForDebugging('Cannot remove agent worktree: no git root provided', {
982
+ level: 'error',
983
+ })
984
+ return false
985
+ }
986
+
987
+ // Run from the main repo root, not the worktree (which we're about to delete)
988
+ const { code: removeCode, stderr: removeError } =
989
+ await execFileNoThrowWithCwd(
990
+ gitExe(),
991
+ ['worktree', 'remove', '--force', worktreePath],
992
+ { cwd: gitRoot },
993
+ )
994
+
995
+ if (removeCode !== 0) {
996
+ logForDebugging(`Failed to remove agent worktree: ${removeError}`, {
997
+ level: 'error',
998
+ })
999
+ return false
1000
+ }
1001
+ logForDebugging(`Removed agent worktree at: ${worktreePath}`)
1002
+
1003
+ if (!worktreeBranch) {
1004
+ return true
1005
+ }
1006
+
1007
+ // Delete the temporary worktree branch from the main repo
1008
+ const { code: deleteBranchCode, stderr: deleteBranchError } =
1009
+ await execFileNoThrowWithCwd(gitExe(), ['branch', '-D', worktreeBranch], {
1010
+ cwd: gitRoot,
1011
+ })
1012
+
1013
+ if (deleteBranchCode !== 0) {
1014
+ logForDebugging(
1015
+ `Could not delete agent worktree branch: ${deleteBranchError}`,
1016
+ { level: 'error' },
1017
+ )
1018
+ }
1019
+ return true
1020
+ }
1021
+
1022
+ /**
1023
+ * Slug patterns for throwaway worktrees created by AgentTool (`agent-a<7hex>`,
1024
+ * from earlyAgentId.slice(0,8)), WorkflowTool (`wf_<runId>-<idx>` where runId
1025
+ * is randomUUID().slice(0,12) = 8 hex + `-` + 3 hex), and bridgeMain
1026
+ * (`bridge-<safeFilenameId>`). These leak when the parent process is killed
1027
+ * (Ctrl+C, ESC, crash) before their in-process cleanup runs. Exact-shape
1028
+ * patterns avoid sweeping user-named EnterWorktree slugs like `wf-myfeature`.
1029
+ */
1030
+ const EPHEMERAL_WORKTREE_PATTERNS = [
1031
+ /^agent-a[0-9a-f]{7}$/,
1032
+ /^wf_[0-9a-f]{8}-[0-9a-f]{3}-\d+$/,
1033
+ // Legacy wf-<idx> slugs from before workflowRunId disambiguation — kept so
1034
+ // the 30-day sweep still cleans up worktrees leaked by older builds.
1035
+ /^wf-\d+$/,
1036
+ // Real bridge slugs are `bridge-${safeFilenameId(sessionId)}`.
1037
+ /^bridge-[A-Za-z0-9_]+(-[A-Za-z0-9_]+)*$/,
1038
+ // Template job worktrees: job-<templateName>-<8hex>. Prefix distinguishes
1039
+ // from user-named EnterWorktree slugs that happen to end in 8 hex.
1040
+ /^job-[a-zA-Z0-9._-]{1,55}-[0-9a-f]{8}$/,
1041
+ ]
1042
+
1043
+ /**
1044
+ * Remove stale agent/workflow worktrees older than cutoffDate.
1045
+ *
1046
+ * Safety:
1047
+ * - Only touches slugs matching ephemeral patterns (never user-named worktrees)
1048
+ * - Skips the current session's worktree
1049
+ * - Fail-closed: skips if git status fails or shows tracked changes
1050
+ * (-uno: untracked files in a 30-day-old crashed agent worktree are build
1051
+ * artifacts; skipping the untracked scan is 5-10× faster on large repos)
1052
+ * - Fail-closed: skips if any commits aren't reachable from a remote
1053
+ *
1054
+ * `git worktree remove --force` handles both the directory and git's internal
1055
+ * worktree tracking. If git doesn't recognize the path as a worktree (orphaned
1056
+ * dir), it's left in place — a later readdir finding it stale again is harmless.
1057
+ */
1058
+ export async function cleanupStaleAgentWorktrees(
1059
+ cutoffDate: Date,
1060
+ ): Promise<number> {
1061
+ const gitRoot = findCanonicalGitRoot(getCwd())
1062
+ if (!gitRoot) {
1063
+ return 0
1064
+ }
1065
+
1066
+ const dir = worktreesDir(gitRoot)
1067
+ let entries: string[]
1068
+ try {
1069
+ entries = await readdir(dir)
1070
+ } catch {
1071
+ return 0
1072
+ }
1073
+
1074
+ const cutoffMs = cutoffDate.getTime()
1075
+ const currentPath = currentWorktreeSession?.worktreePath
1076
+ let removed = 0
1077
+
1078
+ for (const slug of entries) {
1079
+ if (!EPHEMERAL_WORKTREE_PATTERNS.some(p => p.test(slug))) {
1080
+ continue
1081
+ }
1082
+
1083
+ const worktreePath = join(dir, slug)
1084
+ if (currentPath === worktreePath) {
1085
+ continue
1086
+ }
1087
+
1088
+ let mtimeMs: number
1089
+ try {
1090
+ mtimeMs = (await stat(worktreePath)).mtimeMs
1091
+ } catch {
1092
+ continue
1093
+ }
1094
+ if (mtimeMs >= cutoffMs) {
1095
+ continue
1096
+ }
1097
+
1098
+ // Both checks must succeed with empty output. Non-zero exit (corrupted
1099
+ // worktree, git not recognizing it, etc.) means skip — we don't know
1100
+ // what's in there.
1101
+ const [status, unpushed] = await Promise.all([
1102
+ execFileNoThrowWithCwd(
1103
+ gitExe(),
1104
+ ['--no-optional-locks', 'status', '--porcelain', '-uno'],
1105
+ { cwd: worktreePath },
1106
+ ),
1107
+ execFileNoThrowWithCwd(
1108
+ gitExe(),
1109
+ ['rev-list', '--max-count=1', 'HEAD', '--not', '--remotes'],
1110
+ { cwd: worktreePath },
1111
+ ),
1112
+ ])
1113
+ if (status.code !== 0 || status.stdout.trim().length > 0) {
1114
+ continue
1115
+ }
1116
+ if (unpushed.code !== 0 || unpushed.stdout.trim().length > 0) {
1117
+ continue
1118
+ }
1119
+
1120
+ if (
1121
+ await removeAgentWorktree(worktreePath, worktreeBranchName(slug), gitRoot)
1122
+ ) {
1123
+ removed++
1124
+ }
1125
+ }
1126
+
1127
+ if (removed > 0) {
1128
+ await execFileNoThrowWithCwd(gitExe(), ['worktree', 'prune'], {
1129
+ cwd: gitRoot,
1130
+ })
1131
+ logForDebugging(
1132
+ `cleanupStaleAgentWorktrees: removed ${removed} stale worktree(s)`,
1133
+ )
1134
+ }
1135
+ return removed
1136
+ }
1137
+
1138
+ /**
1139
+ * Check whether a worktree has uncommitted changes or new commits since creation.
1140
+ * Returns true if there are uncommitted changes (dirty working tree), if commits
1141
+ * were made on the worktree branch since `headCommit`, or if git commands fail
1142
+ * — callers use this to decide whether to remove a worktree, so fail-closed.
1143
+ */
1144
+ export async function hasWorktreeChanges(
1145
+ worktreePath: string,
1146
+ headCommit: string,
1147
+ ): Promise<boolean> {
1148
+ const { code: statusCode, stdout: statusOutput } =
1149
+ await execFileNoThrowWithCwd(gitExe(), ['status', '--porcelain'], {
1150
+ cwd: worktreePath,
1151
+ })
1152
+ if (statusCode !== 0) {
1153
+ return true
1154
+ }
1155
+ if (statusOutput.trim().length > 0) {
1156
+ return true
1157
+ }
1158
+
1159
+ const { code: revListCode, stdout: revListOutput } =
1160
+ await execFileNoThrowWithCwd(
1161
+ gitExe(),
1162
+ ['rev-list', '--count', `${headCommit}..HEAD`],
1163
+ { cwd: worktreePath },
1164
+ )
1165
+ if (revListCode !== 0) {
1166
+ return true
1167
+ }
1168
+ if (parseInt(revListOutput.trim(), 10) > 0) {
1169
+ return true
1170
+ }
1171
+
1172
+ return false
1173
+ }
1174
+
1175
+ /**
1176
+ * Fast-path handler for --worktree --tmux.
1177
+ * Creates the worktree and execs into tmux running Claude inside.
1178
+ * This is called early in cli.tsx before loading the full CLI.
1179
+ */
1180
+ export async function execIntoTmuxWorktree(args: string[]): Promise<{
1181
+ handled: boolean
1182
+ error?: string
1183
+ }> {
1184
+ // Check platform - tmux doesn't work on Windows
1185
+ if (process.platform === 'win32') {
1186
+ return {
1187
+ handled: false,
1188
+ error: 'Error: --tmux is not supported on Windows',
1189
+ }
1190
+ }
1191
+
1192
+ // Check if tmux is available
1193
+ const tmuxCheck = spawnSync('tmux', ['-V'], { encoding: 'utf-8' })
1194
+ if (tmuxCheck.status !== 0) {
1195
+ const installHint =
1196
+ process.platform === 'darwin'
1197
+ ? 'Install tmux with: brew install tmux'
1198
+ : 'Install tmux with: sudo apt install tmux'
1199
+ return {
1200
+ handled: false,
1201
+ error: `Error: tmux is not installed. ${installHint}`,
1202
+ }
1203
+ }
1204
+
1205
+ // Parse worktree name and tmux mode from args
1206
+ let worktreeName: string | undefined
1207
+ let forceClassicTmux = false
1208
+ for (let i = 0; i < args.length; i++) {
1209
+ const arg = args[i]
1210
+ if (!arg) continue
1211
+ if (arg === '-w' || arg === '--worktree') {
1212
+ // Check if next arg exists and isn't another flag
1213
+ const next = args[i + 1]
1214
+ if (next && !next.startsWith('-')) {
1215
+ worktreeName = next
1216
+ }
1217
+ } else if (arg.startsWith('--worktree=')) {
1218
+ worktreeName = arg.slice('--worktree='.length)
1219
+ } else if (arg === '--tmux=classic') {
1220
+ forceClassicTmux = true
1221
+ }
1222
+ }
1223
+
1224
+ // Check if worktree name is a PR reference
1225
+ let prNumber: number | null = null
1226
+ if (worktreeName) {
1227
+ prNumber = parsePRReference(worktreeName)
1228
+ if (prNumber !== null) {
1229
+ worktreeName = `pr-${prNumber}`
1230
+ }
1231
+ }
1232
+
1233
+ // Generate a slug if no name provided
1234
+ if (!worktreeName) {
1235
+ const adjectives = ['swift', 'bright', 'calm', 'keen', 'bold']
1236
+ const nouns = ['fox', 'owl', 'elm', 'oak', 'ray']
1237
+ const adj = adjectives[Math.floor(Math.random() * adjectives.length)]
1238
+ const noun = nouns[Math.floor(Math.random() * nouns.length)]
1239
+ const suffix = Math.random().toString(36).slice(2, 6)
1240
+ worktreeName = `${adj}-${noun}-${suffix}`
1241
+ }
1242
+
1243
+ // worktreeName is joined into worktreeDir via path.join below; apply the
1244
+ // same allowlist used by the in-session worktree tool so the constraint
1245
+ // holds uniformly regardless of entry point.
1246
+ try {
1247
+ validateWorktreeSlug(worktreeName)
1248
+ } catch (e) {
1249
+ return {
1250
+ handled: false,
1251
+ error: `Error: ${(e as Error).message}`,
1252
+ }
1253
+ }
1254
+
1255
+ // Mirror createWorktreeForSession(): hook takes precedence over git so the
1256
+ // WorktreeCreate hook substitutes the VCS backend for this fast-path too
1257
+ // (anthropics/claude-code#39281). Git path below runs only when no hook.
1258
+ let worktreeDir: string
1259
+ let repoName: string
1260
+ if (hasWorktreeCreateHook()) {
1261
+ try {
1262
+ const hookResult = await executeWorktreeCreateHook(worktreeName)
1263
+ worktreeDir = hookResult.worktreePath
1264
+ } catch (error) {
1265
+ return {
1266
+ handled: false,
1267
+ error: `Error: ${errorMessage(error)}`,
1268
+ }
1269
+ }
1270
+ repoName = basename(findCanonicalGitRoot(getCwd()) ?? getCwd())
1271
+ // biome-ignore lint/suspicious/noConsole: intentional console output
1272
+ console.log(`Using worktree via hook: ${worktreeDir}`)
1273
+ } else {
1274
+ // Get main git repo root (resolves through worktrees)
1275
+ const repoRoot = findCanonicalGitRoot(getCwd())
1276
+ if (!repoRoot) {
1277
+ return {
1278
+ handled: false,
1279
+ error: 'Error: --worktree requires a git repository',
1280
+ }
1281
+ }
1282
+
1283
+ repoName = basename(repoRoot)
1284
+ worktreeDir = worktreePathFor(repoRoot, worktreeName)
1285
+
1286
+ // Create or resume worktree
1287
+ try {
1288
+ const result = await getOrCreateWorktree(
1289
+ repoRoot,
1290
+ worktreeName,
1291
+ prNumber !== null ? { prNumber } : undefined,
1292
+ )
1293
+ if (!result.existed) {
1294
+ // biome-ignore lint/suspicious/noConsole: intentional console output
1295
+ console.log(
1296
+ `Created worktree: ${worktreeDir} (based on ${result.baseBranch})`,
1297
+ )
1298
+ await performPostCreationSetup(repoRoot, worktreeDir)
1299
+ }
1300
+ } catch (error) {
1301
+ return {
1302
+ handled: false,
1303
+ error: `Error: ${errorMessage(error)}`,
1304
+ }
1305
+ }
1306
+ }
1307
+
1308
+ // Sanitize for tmux session name (replace / and . with _)
1309
+ const tmuxSessionName =
1310
+ `${repoName}_${worktreeBranchName(worktreeName)}`.replace(/[/.]/g, '_')
1311
+
1312
+ // Build new args without --tmux and --worktree (we're already in the worktree)
1313
+ const newArgs: string[] = []
1314
+ for (let i = 0; i < args.length; i++) {
1315
+ const arg = args[i]
1316
+ if (!arg) continue
1317
+ if (arg === '--tmux' || arg === '--tmux=classic') continue
1318
+ if (arg === '-w' || arg === '--worktree') {
1319
+ // Skip the flag and its value if present
1320
+ const next = args[i + 1]
1321
+ if (next && !next.startsWith('-')) {
1322
+ i++ // Skip the value too
1323
+ }
1324
+ continue
1325
+ }
1326
+ if (arg.startsWith('--worktree=')) continue
1327
+ newArgs.push(arg)
1328
+ }
1329
+
1330
+ // Get tmux prefix for user guidance
1331
+ let tmuxPrefix = 'C-b' // default
1332
+ const prefixResult = spawnSync('tmux', ['show-options', '-g', 'prefix'], {
1333
+ encoding: 'utf-8',
1334
+ })
1335
+ if (prefixResult.status === 0 && prefixResult.stdout) {
1336
+ const match = prefixResult.stdout.match(/prefix\s+(\S+)/)
1337
+ if (match?.[1]) {
1338
+ tmuxPrefix = match[1]
1339
+ }
1340
+ }
1341
+
1342
+ // Check if tmux prefix conflicts with Claude keybindings
1343
+ // Claude binds: ctrl+b (task:background), ctrl+c, ctrl+d, ctrl+t, ctrl+o, ctrl+r, ctrl+s, ctrl+g, ctrl+e
1344
+ const claudeBindings = [
1345
+ 'C-b',
1346
+ 'C-c',
1347
+ 'C-d',
1348
+ 'C-t',
1349
+ 'C-o',
1350
+ 'C-r',
1351
+ 'C-s',
1352
+ 'C-g',
1353
+ 'C-e',
1354
+ ]
1355
+ const prefixConflicts = claudeBindings.includes(tmuxPrefix)
1356
+
1357
+ // Set env vars for the inner Claude to display tmux info in welcome message
1358
+ const tmuxEnv = {
1359
+ ...process.env,
1360
+ CLAUDE_CODE_TMUX_SESSION: tmuxSessionName,
1361
+ CLAUDE_CODE_TMUX_PREFIX: tmuxPrefix,
1362
+ CLAUDE_CODE_TMUX_PREFIX_CONFLICTS: prefixConflicts ? '1' : '',
1363
+ }
1364
+
1365
+ // Check if session already exists
1366
+ const hasSessionResult = spawnSync(
1367
+ 'tmux',
1368
+ ['has-session', '-t', tmuxSessionName],
1369
+ { encoding: 'utf-8' },
1370
+ )
1371
+ const sessionExists = hasSessionResult.status === 0
1372
+
1373
+ // Check if we're already inside a tmux session
1374
+ const isAlreadyInTmux = Boolean(process.env.TMUX)
1375
+
1376
+ // Use tmux control mode (-CC) for native iTerm2 tab/pane integration
1377
+ // This lets users use iTerm2's UI instead of learning tmux keybindings
1378
+ // Use --tmux=classic to force traditional tmux even in iTerm2
1379
+ // Control mode doesn't make sense when already in tmux (would need to switch-client)
1380
+ const useControlMode = isInITerm2() && !forceClassicTmux && !isAlreadyInTmux
1381
+ const tmuxGlobalArgs = useControlMode ? ['-CC'] : []
1382
+
1383
+ // Print hint about iTerm2 preferences when using control mode
1384
+ if (useControlMode && !sessionExists) {
1385
+ const y = chalk.yellow
1386
+ // biome-ignore lint/suspicious/noConsole: intentional user guidance
1387
+ console.log(
1388
+ `\n${y('╭─ iTerm2 Tip ────────────────────────────────────────────────────────╮')}\n` +
1389
+ `${y('│')} To open as a tab instead of a new window: ${y('│')}\n` +
1390
+ `${y('│')} iTerm2 > Settings > General > tmux > "Tabs in attaching window" ${y('│')}\n` +
1391
+ `${y('╰─────────────────────────────────────────────────────────────────────╯')}\n`,
1392
+ )
1393
+ }
1394
+
1395
+ // For ants in claude-cli-internal, set up dev panes (watch + start)
1396
+ const isAnt = process.env.USER_TYPE === 'ant'
1397
+ const isClaudeCliInternal = repoName === 'claude-cli-internal'
1398
+ const shouldSetupDevPanes = isAnt && isClaudeCliInternal && !sessionExists
1399
+
1400
+ if (shouldSetupDevPanes) {
1401
+ // Create detached session with Claude in first pane
1402
+ spawnSync(
1403
+ 'tmux',
1404
+ [
1405
+ 'new-session',
1406
+ '-d', // detached
1407
+ '-s',
1408
+ tmuxSessionName,
1409
+ '-c',
1410
+ worktreeDir,
1411
+ '--',
1412
+ process.execPath,
1413
+ ...newArgs,
1414
+ ],
1415
+ { cwd: worktreeDir, env: tmuxEnv },
1416
+ )
1417
+
1418
+ // Split horizontally and run watch
1419
+ spawnSync(
1420
+ 'tmux',
1421
+ ['split-window', '-h', '-t', tmuxSessionName, '-c', worktreeDir],
1422
+ { cwd: worktreeDir },
1423
+ )
1424
+ spawnSync(
1425
+ 'tmux',
1426
+ ['send-keys', '-t', tmuxSessionName, 'bun run watch', 'Enter'],
1427
+ { cwd: worktreeDir },
1428
+ )
1429
+
1430
+ // Split vertically and run start
1431
+ spawnSync(
1432
+ 'tmux',
1433
+ ['split-window', '-v', '-t', tmuxSessionName, '-c', worktreeDir],
1434
+ { cwd: worktreeDir },
1435
+ )
1436
+ spawnSync('tmux', ['send-keys', '-t', tmuxSessionName, 'bun run start'], {
1437
+ cwd: worktreeDir,
1438
+ })
1439
+
1440
+ // Select the first pane (Claude)
1441
+ spawnSync('tmux', ['select-pane', '-t', `${tmuxSessionName}:0.0`], {
1442
+ cwd: worktreeDir,
1443
+ })
1444
+
1445
+ // Attach or switch to the session
1446
+ if (isAlreadyInTmux) {
1447
+ // Switch to sibling session (avoid nesting)
1448
+ spawnSync('tmux', ['switch-client', '-t', tmuxSessionName], {
1449
+ stdio: 'inherit',
1450
+ })
1451
+ } else {
1452
+ // Attach to the session
1453
+ spawnSync(
1454
+ 'tmux',
1455
+ [...tmuxGlobalArgs, 'attach-session', '-t', tmuxSessionName],
1456
+ {
1457
+ stdio: 'inherit',
1458
+ cwd: worktreeDir,
1459
+ },
1460
+ )
1461
+ }
1462
+ } else {
1463
+ // Standard behavior: create or attach
1464
+ if (isAlreadyInTmux) {
1465
+ // Already in tmux - create detached session, then switch to it (sibling)
1466
+ // Check if session already exists first
1467
+ if (sessionExists) {
1468
+ // Just switch to existing session
1469
+ spawnSync('tmux', ['switch-client', '-t', tmuxSessionName], {
1470
+ stdio: 'inherit',
1471
+ })
1472
+ } else {
1473
+ // Create new detached session
1474
+ spawnSync(
1475
+ 'tmux',
1476
+ [
1477
+ 'new-session',
1478
+ '-d', // detached
1479
+ '-s',
1480
+ tmuxSessionName,
1481
+ '-c',
1482
+ worktreeDir,
1483
+ '--',
1484
+ process.execPath,
1485
+ ...newArgs,
1486
+ ],
1487
+ { cwd: worktreeDir, env: tmuxEnv },
1488
+ )
1489
+
1490
+ // Switch to the new session
1491
+ spawnSync('tmux', ['switch-client', '-t', tmuxSessionName], {
1492
+ stdio: 'inherit',
1493
+ })
1494
+ }
1495
+ } else {
1496
+ // Not in tmux - create and attach (original behavior)
1497
+ const tmuxArgs = [
1498
+ ...tmuxGlobalArgs,
1499
+ 'new-session',
1500
+ '-A', // Attach if exists, create if not
1501
+ '-s',
1502
+ tmuxSessionName,
1503
+ '-c',
1504
+ worktreeDir,
1505
+ '--', // Separator before command
1506
+ process.execPath,
1507
+ ...newArgs,
1508
+ ]
1509
+
1510
+ spawnSync('tmux', tmuxArgs, {
1511
+ stdio: 'inherit',
1512
+ cwd: worktreeDir,
1513
+ env: tmuxEnv,
1514
+ })
1515
+ }
1516
+ }
1517
+
1518
+ return { handled: true }
1519
+ }