yzcode-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1782) hide show
  1. package/QueryEngine.ts +1295 -0
  2. package/Task.ts +125 -0
  3. package/Tool.ts +792 -0
  4. package/bin/yzcode-init.js +31 -0
  5. package/bin/yzcode.js +35 -0
  6. package/cli/exit.ts +31 -0
  7. package/cli/handlers/agents.ts +70 -0
  8. package/cli/handlers/auth.ts +330 -0
  9. package/cli/handlers/autoMode.ts +170 -0
  10. package/cli/handlers/mcp.tsx +362 -0
  11. package/cli/handlers/plugins.ts +878 -0
  12. package/cli/handlers/util.tsx +110 -0
  13. package/cli/ndjsonSafeStringify.ts +32 -0
  14. package/cli/print.ts +5594 -0
  15. package/cli/remoteIO.ts +255 -0
  16. package/cli/structuredIO.ts +859 -0
  17. package/cli/transports/HybridTransport.ts +282 -0
  18. package/cli/transports/SSETransport.ts +711 -0
  19. package/cli/transports/SerialBatchEventUploader.ts +275 -0
  20. package/cli/transports/WebSocketTransport.ts +800 -0
  21. package/cli/transports/WorkerStateUploader.ts +131 -0
  22. package/cli/transports/ccrClient.ts +998 -0
  23. package/cli/transports/transportUtils.ts +45 -0
  24. package/cli/update.ts +422 -0
  25. package/commands/add-dir/add-dir.tsx +126 -0
  26. package/commands/add-dir/index.ts +11 -0
  27. package/commands/add-dir/validation.ts +110 -0
  28. package/commands/advisor.ts +109 -0
  29. package/commands/agents/agents.tsx +12 -0
  30. package/commands/agents/index.ts +10 -0
  31. package/commands/ant-trace/index.js +1 -0
  32. package/commands/autofix-pr/index.js +1 -0
  33. package/commands/backfill-sessions/index.js +1 -0
  34. package/commands/branch/branch.ts +296 -0
  35. package/commands/branch/index.ts +14 -0
  36. package/commands/break-cache/index.js +1 -0
  37. package/commands/bridge/bridge.tsx +509 -0
  38. package/commands/bridge/index.ts +26 -0
  39. package/commands/bridge-kick.ts +200 -0
  40. package/commands/brief.ts +130 -0
  41. package/commands/btw/btw.tsx +243 -0
  42. package/commands/btw/index.ts +13 -0
  43. package/commands/bughunter/index.js +1 -0
  44. package/commands/chrome/chrome.tsx +285 -0
  45. package/commands/chrome/index.ts +13 -0
  46. package/commands/clear/caches.ts +144 -0
  47. package/commands/clear/clear.ts +7 -0
  48. package/commands/clear/conversation.ts +251 -0
  49. package/commands/clear/index.ts +19 -0
  50. package/commands/color/color.ts +93 -0
  51. package/commands/color/index.ts +16 -0
  52. package/commands/commit-push-pr.ts +158 -0
  53. package/commands/commit.ts +92 -0
  54. package/commands/compact/compact.ts +287 -0
  55. package/commands/compact/index.ts +15 -0
  56. package/commands/config/config.tsx +7 -0
  57. package/commands/config/index.ts +11 -0
  58. package/commands/context/context-noninteractive.ts +325 -0
  59. package/commands/context/context.tsx +64 -0
  60. package/commands/context/index.ts +24 -0
  61. package/commands/copy/copy.tsx +371 -0
  62. package/commands/copy/index.ts +15 -0
  63. package/commands/cost/cost.ts +24 -0
  64. package/commands/cost/index.ts +23 -0
  65. package/commands/createMovedToPluginCommand.ts +65 -0
  66. package/commands/ctx_viz/index.js +1 -0
  67. package/commands/debug-tool-call/index.js +1 -0
  68. package/commands/desktop/desktop.tsx +9 -0
  69. package/commands/desktop/index.ts +26 -0
  70. package/commands/diff/diff.tsx +9 -0
  71. package/commands/diff/index.ts +8 -0
  72. package/commands/doctor/doctor.tsx +7 -0
  73. package/commands/doctor/index.ts +12 -0
  74. package/commands/effort/effort.tsx +183 -0
  75. package/commands/effort/index.ts +13 -0
  76. package/commands/env/index.js +1 -0
  77. package/commands/exit/exit.tsx +33 -0
  78. package/commands/exit/index.ts +12 -0
  79. package/commands/export/export.tsx +91 -0
  80. package/commands/export/index.ts +11 -0
  81. package/commands/extra-usage/extra-usage-core.ts +118 -0
  82. package/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  83. package/commands/extra-usage/extra-usage.tsx +17 -0
  84. package/commands/extra-usage/index.ts +31 -0
  85. package/commands/fast/fast.tsx +269 -0
  86. package/commands/fast/index.ts +26 -0
  87. package/commands/feedback/feedback.tsx +25 -0
  88. package/commands/feedback/index.ts +26 -0
  89. package/commands/files/files.ts +19 -0
  90. package/commands/files/index.ts +12 -0
  91. package/commands/good-claude/index.js +1 -0
  92. package/commands/heapdump/heapdump.ts +17 -0
  93. package/commands/heapdump/index.ts +12 -0
  94. package/commands/help/help.tsx +11 -0
  95. package/commands/help/index.ts +10 -0
  96. package/commands/hooks/hooks.tsx +13 -0
  97. package/commands/hooks/index.ts +11 -0
  98. package/commands/ide/ide.tsx +646 -0
  99. package/commands/ide/index.ts +11 -0
  100. package/commands/init-verifiers.ts +262 -0
  101. package/commands/init.ts +256 -0
  102. package/commands/insights.ts +3200 -0
  103. package/commands/install-github-app/ApiKeyStep.tsx +231 -0
  104. package/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  105. package/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  106. package/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  107. package/commands/install-github-app/CreatingStep.tsx +65 -0
  108. package/commands/install-github-app/ErrorStep.tsx +85 -0
  109. package/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  110. package/commands/install-github-app/InstallAppStep.tsx +94 -0
  111. package/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  112. package/commands/install-github-app/SuccessStep.tsx +96 -0
  113. package/commands/install-github-app/WarningsStep.tsx +73 -0
  114. package/commands/install-github-app/index.ts +13 -0
  115. package/commands/install-github-app/install-github-app.tsx +587 -0
  116. package/commands/install-github-app/setupGitHubActions.ts +325 -0
  117. package/commands/install-slack-app/index.ts +12 -0
  118. package/commands/install-slack-app/install-slack-app.ts +30 -0
  119. package/commands/install.tsx +300 -0
  120. package/commands/issue/index.js +1 -0
  121. package/commands/keybindings/index.ts +13 -0
  122. package/commands/keybindings/keybindings.ts +53 -0
  123. package/commands/login/index.ts +14 -0
  124. package/commands/login/login.tsx +104 -0
  125. package/commands/logout/index.ts +10 -0
  126. package/commands/logout/logout.tsx +82 -0
  127. package/commands/mcp/addCommand.ts +280 -0
  128. package/commands/mcp/index.ts +12 -0
  129. package/commands/mcp/mcp.tsx +85 -0
  130. package/commands/mcp/xaaIdpCommand.ts +266 -0
  131. package/commands/memory/index.ts +10 -0
  132. package/commands/memory/memory.tsx +90 -0
  133. package/commands/mobile/index.ts +11 -0
  134. package/commands/mobile/mobile.tsx +274 -0
  135. package/commands/mock-limits/index.js +1 -0
  136. package/commands/model/index.ts +16 -0
  137. package/commands/model/model.tsx +297 -0
  138. package/commands/oauth-refresh/index.js +1 -0
  139. package/commands/onboarding/index.js +1 -0
  140. package/commands/output-style/index.ts +11 -0
  141. package/commands/output-style/output-style.tsx +7 -0
  142. package/commands/passes/index.ts +22 -0
  143. package/commands/passes/passes.tsx +24 -0
  144. package/commands/perf-issue/index.js +1 -0
  145. package/commands/permissions/index.ts +11 -0
  146. package/commands/permissions/permissions.tsx +10 -0
  147. package/commands/plan/index.ts +11 -0
  148. package/commands/plan/plan.tsx +122 -0
  149. package/commands/plugin/AddMarketplace.tsx +162 -0
  150. package/commands/plugin/BrowseMarketplace.tsx +802 -0
  151. package/commands/plugin/DiscoverPlugins.tsx +781 -0
  152. package/commands/plugin/ManageMarketplaces.tsx +838 -0
  153. package/commands/plugin/ManagePlugins.tsx +2215 -0
  154. package/commands/plugin/PluginErrors.tsx +124 -0
  155. package/commands/plugin/PluginOptionsDialog.tsx +357 -0
  156. package/commands/plugin/PluginOptionsFlow.tsx +135 -0
  157. package/commands/plugin/PluginSettings.tsx +1072 -0
  158. package/commands/plugin/PluginTrustWarning.tsx +32 -0
  159. package/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  160. package/commands/plugin/ValidatePlugin.tsx +98 -0
  161. package/commands/plugin/index.tsx +11 -0
  162. package/commands/plugin/parseArgs.ts +103 -0
  163. package/commands/plugin/plugin.tsx +7 -0
  164. package/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  165. package/commands/plugin/usePagination.ts +171 -0
  166. package/commands/pr_comments/index.ts +50 -0
  167. package/commands/privacy-settings/index.ts +14 -0
  168. package/commands/privacy-settings/privacy-settings.tsx +58 -0
  169. package/commands/rate-limit-options/index.ts +19 -0
  170. package/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  171. package/commands/release-notes/index.ts +11 -0
  172. package/commands/release-notes/release-notes.ts +50 -0
  173. package/commands/reload-plugins/index.ts +18 -0
  174. package/commands/reload-plugins/reload-plugins.ts +61 -0
  175. package/commands/remote-env/index.ts +15 -0
  176. package/commands/remote-env/remote-env.tsx +7 -0
  177. package/commands/remote-setup/api.ts +182 -0
  178. package/commands/remote-setup/index.ts +20 -0
  179. package/commands/remote-setup/remote-setup.tsx +187 -0
  180. package/commands/rename/generateSessionName.ts +67 -0
  181. package/commands/rename/index.ts +12 -0
  182. package/commands/rename/rename.ts +87 -0
  183. package/commands/reset-limits/index.js +4 -0
  184. package/commands/resume/index.ts +12 -0
  185. package/commands/resume/resume.tsx +275 -0
  186. package/commands/review/UltrareviewOverageDialog.tsx +96 -0
  187. package/commands/review/reviewRemote.ts +316 -0
  188. package/commands/review/ultrareviewCommand.tsx +58 -0
  189. package/commands/review/ultrareviewEnabled.ts +14 -0
  190. package/commands/review.ts +57 -0
  191. package/commands/rewind/index.ts +13 -0
  192. package/commands/rewind/rewind.ts +13 -0
  193. package/commands/sandbox-toggle/index.ts +50 -0
  194. package/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  195. package/commands/security-review.ts +243 -0
  196. package/commands/session/index.ts +16 -0
  197. package/commands/session/session.tsx +140 -0
  198. package/commands/share/index.js +1 -0
  199. package/commands/skills/index.ts +10 -0
  200. package/commands/skills/skills.tsx +8 -0
  201. package/commands/stats/index.ts +10 -0
  202. package/commands/stats/stats.tsx +7 -0
  203. package/commands/status/index.ts +12 -0
  204. package/commands/status/status.tsx +8 -0
  205. package/commands/statusline.tsx +24 -0
  206. package/commands/stickers/index.ts +11 -0
  207. package/commands/stickers/stickers.ts +16 -0
  208. package/commands/summary/index.js +1 -0
  209. package/commands/tag/index.ts +12 -0
  210. package/commands/tag/tag.tsx +215 -0
  211. package/commands/tasks/index.ts +11 -0
  212. package/commands/tasks/tasks.tsx +8 -0
  213. package/commands/teleport/index.js +1 -0
  214. package/commands/terminalSetup/index.ts +23 -0
  215. package/commands/terminalSetup/terminalSetup.tsx +531 -0
  216. package/commands/theme/index.ts +10 -0
  217. package/commands/theme/theme.tsx +57 -0
  218. package/commands/thinkback/index.ts +13 -0
  219. package/commands/thinkback/thinkback.tsx +554 -0
  220. package/commands/thinkback-play/index.ts +17 -0
  221. package/commands/thinkback-play/thinkback-play.ts +43 -0
  222. package/commands/ultraplan.tsx +471 -0
  223. package/commands/upgrade/index.ts +16 -0
  224. package/commands/upgrade/upgrade.tsx +38 -0
  225. package/commands/usage/index.ts +9 -0
  226. package/commands/usage/usage.tsx +7 -0
  227. package/commands/version.ts +22 -0
  228. package/commands/vim/index.ts +11 -0
  229. package/commands/vim/vim.ts +38 -0
  230. package/commands/voice/index.ts +20 -0
  231. package/commands/voice/voice.ts +150 -0
  232. package/commands.ts +754 -0
  233. package/components/AgentProgressLine.tsx +136 -0
  234. package/components/App.tsx +56 -0
  235. package/components/ApproveApiKey.tsx +123 -0
  236. package/components/AutoModeOptInDialog.tsx +142 -0
  237. package/components/AutoUpdater.tsx +198 -0
  238. package/components/AutoUpdaterWrapper.tsx +91 -0
  239. package/components/AwsAuthStatusBox.tsx +82 -0
  240. package/components/BaseTextInput.tsx +136 -0
  241. package/components/BashModeProgress.tsx +56 -0
  242. package/components/BridgeDialog.tsx +401 -0
  243. package/components/BypassPermissionsModeDialog.tsx +87 -0
  244. package/components/ChannelDowngradeDialog.tsx +102 -0
  245. package/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  246. package/components/ClaudeInChromeOnboarding.tsx +121 -0
  247. package/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  248. package/components/ClickableImageRef.tsx +73 -0
  249. package/components/CompactSummary.tsx +118 -0
  250. package/components/ConfigurableShortcutHint.tsx +57 -0
  251. package/components/ConsoleOAuthFlow.tsx +631 -0
  252. package/components/ContextSuggestions.tsx +47 -0
  253. package/components/ContextVisualization.tsx +489 -0
  254. package/components/CoordinatorAgentStatus.tsx +273 -0
  255. package/components/CostThresholdDialog.tsx +50 -0
  256. package/components/CtrlOToExpand.tsx +51 -0
  257. package/components/CustomSelect/SelectMulti.tsx +213 -0
  258. package/components/CustomSelect/index.ts +3 -0
  259. package/components/CustomSelect/option-map.ts +50 -0
  260. package/components/CustomSelect/select-input-option.tsx +488 -0
  261. package/components/CustomSelect/select-option.tsx +68 -0
  262. package/components/CustomSelect/select.tsx +690 -0
  263. package/components/CustomSelect/use-multi-select-state.ts +414 -0
  264. package/components/CustomSelect/use-select-input.ts +287 -0
  265. package/components/CustomSelect/use-select-navigation.ts +653 -0
  266. package/components/CustomSelect/use-select-state.ts +157 -0
  267. package/components/DesktopHandoff.tsx +193 -0
  268. package/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  269. package/components/DevBar.tsx +49 -0
  270. package/components/DevChannelsDialog.tsx +105 -0
  271. package/components/DiagnosticsDisplay.tsx +95 -0
  272. package/components/EffortCallout.tsx +265 -0
  273. package/components/EffortIndicator.ts +42 -0
  274. package/components/ExitFlow.tsx +48 -0
  275. package/components/ExportDialog.tsx +128 -0
  276. package/components/FallbackToolUseErrorMessage.tsx +116 -0
  277. package/components/FallbackToolUseRejectedMessage.tsx +16 -0
  278. package/components/FastIcon.tsx +46 -0
  279. package/components/Feedback.tsx +592 -0
  280. package/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  281. package/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  282. package/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  283. package/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  284. package/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  285. package/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  286. package/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  287. package/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  288. package/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  289. package/components/FileEditToolDiff.tsx +181 -0
  290. package/components/FileEditToolUpdatedMessage.tsx +124 -0
  291. package/components/FileEditToolUseRejectedMessage.tsx +170 -0
  292. package/components/FilePathLink.tsx +43 -0
  293. package/components/FullscreenLayout.tsx +637 -0
  294. package/components/GlobalSearchDialog.tsx +343 -0
  295. package/components/HelpV2/Commands.tsx +82 -0
  296. package/components/HelpV2/General.tsx +23 -0
  297. package/components/HelpV2/HelpV2.tsx +184 -0
  298. package/components/HighlightedCode/Fallback.tsx +193 -0
  299. package/components/HighlightedCode.tsx +190 -0
  300. package/components/HistorySearchDialog.tsx +118 -0
  301. package/components/IdeAutoConnectDialog.tsx +154 -0
  302. package/components/IdeOnboardingDialog.tsx +167 -0
  303. package/components/IdeStatusIndicator.tsx +58 -0
  304. package/components/IdleReturnDialog.tsx +118 -0
  305. package/components/InterruptedByUser.tsx +15 -0
  306. package/components/InvalidConfigDialog.tsx +156 -0
  307. package/components/InvalidSettingsDialog.tsx +89 -0
  308. package/components/KeybindingWarnings.tsx +55 -0
  309. package/components/LanguagePicker.tsx +86 -0
  310. package/components/LogSelector.tsx +1575 -0
  311. package/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  312. package/components/LogoV2/AnimatedClawd.tsx +124 -0
  313. package/components/LogoV2/ChannelsNotice.tsx +266 -0
  314. package/components/LogoV2/Clawd.tsx +240 -0
  315. package/components/LogoV2/CondensedLogo.tsx +161 -0
  316. package/components/LogoV2/EmergencyTip.tsx +58 -0
  317. package/components/LogoV2/Feed.tsx +112 -0
  318. package/components/LogoV2/FeedColumn.tsx +59 -0
  319. package/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  320. package/components/LogoV2/LogoV2.tsx +543 -0
  321. package/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  322. package/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  323. package/components/LogoV2/VoiceModeNotice.tsx +68 -0
  324. package/components/LogoV2/WelcomeV2.tsx +433 -0
  325. package/components/LogoV2/feedConfigs.tsx +92 -0
  326. package/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  327. package/components/MCPServerApprovalDialog.tsx +115 -0
  328. package/components/MCPServerDesktopImportDialog.tsx +203 -0
  329. package/components/MCPServerDialogCopy.tsx +15 -0
  330. package/components/MCPServerMultiselectDialog.tsx +133 -0
  331. package/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  332. package/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  333. package/components/Markdown.tsx +236 -0
  334. package/components/MarkdownTable.tsx +322 -0
  335. package/components/MemoryUsageIndicator.tsx +37 -0
  336. package/components/Message.tsx +627 -0
  337. package/components/MessageModel.tsx +43 -0
  338. package/components/MessageResponse.tsx +78 -0
  339. package/components/MessageRow.tsx +383 -0
  340. package/components/MessageSelector.tsx +831 -0
  341. package/components/MessageTimestamp.tsx +63 -0
  342. package/components/Messages.tsx +834 -0
  343. package/components/ModelPicker.tsx +448 -0
  344. package/components/NativeAutoUpdater.tsx +193 -0
  345. package/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  346. package/components/OffscreenFreeze.tsx +44 -0
  347. package/components/Onboarding.tsx +244 -0
  348. package/components/OutputStylePicker.tsx +112 -0
  349. package/components/PackageManagerAutoUpdater.tsx +104 -0
  350. package/components/Passes/Passes.tsx +184 -0
  351. package/components/PrBadge.tsx +97 -0
  352. package/components/PressEnterToContinue.tsx +15 -0
  353. package/components/PromptInput/HistorySearchInput.tsx +51 -0
  354. package/components/PromptInput/IssueFlagBanner.tsx +12 -0
  355. package/components/PromptInput/Notifications.tsx +332 -0
  356. package/components/PromptInput/PromptInput.tsx +2339 -0
  357. package/components/PromptInput/PromptInputFooter.tsx +191 -0
  358. package/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  359. package/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  360. package/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  361. package/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  362. package/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  363. package/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  364. package/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  365. package/components/PromptInput/ShimmeredInput.tsx +143 -0
  366. package/components/PromptInput/VoiceIndicator.tsx +137 -0
  367. package/components/PromptInput/inputModes.ts +33 -0
  368. package/components/PromptInput/inputPaste.ts +90 -0
  369. package/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  370. package/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  371. package/components/PromptInput/useShowFastIconHint.ts +31 -0
  372. package/components/PromptInput/useSwarmBanner.ts +155 -0
  373. package/components/PromptInput/utils.ts +60 -0
  374. package/components/QuickOpenDialog.tsx +244 -0
  375. package/components/RemoteCallout.tsx +76 -0
  376. package/components/RemoteEnvironmentDialog.tsx +340 -0
  377. package/components/ResumeTask.tsx +268 -0
  378. package/components/SandboxViolationExpandedView.tsx +99 -0
  379. package/components/ScrollKeybindingHandler.tsx +1012 -0
  380. package/components/SearchBox.tsx +72 -0
  381. package/components/SentryErrorBoundary.ts +28 -0
  382. package/components/SessionBackgroundHint.tsx +108 -0
  383. package/components/SessionPreview.tsx +194 -0
  384. package/components/Settings/Config.tsx +1822 -0
  385. package/components/Settings/Settings.tsx +137 -0
  386. package/components/Settings/Status.tsx +241 -0
  387. package/components/Settings/Usage.tsx +377 -0
  388. package/components/ShowInIDEPrompt.tsx +170 -0
  389. package/components/SkillImprovementSurvey.tsx +152 -0
  390. package/components/Spinner/FlashingChar.tsx +61 -0
  391. package/components/Spinner/GlimmerMessage.tsx +328 -0
  392. package/components/Spinner/ShimmerChar.tsx +36 -0
  393. package/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  394. package/components/Spinner/SpinnerGlyph.tsx +80 -0
  395. package/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  396. package/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  397. package/components/Spinner/index.ts +10 -0
  398. package/components/Spinner/teammateSelectHint.ts +1 -0
  399. package/components/Spinner/useShimmerAnimation.ts +31 -0
  400. package/components/Spinner/useStalledAnimation.ts +75 -0
  401. package/components/Spinner/utils.ts +84 -0
  402. package/components/Spinner.tsx +562 -0
  403. package/components/Stats.tsx +1228 -0
  404. package/components/StatusLine.tsx +324 -0
  405. package/components/StatusNotices.tsx +55 -0
  406. package/components/StructuredDiff/Fallback.tsx +487 -0
  407. package/components/StructuredDiff/colorDiff.ts +37 -0
  408. package/components/StructuredDiff.tsx +190 -0
  409. package/components/StructuredDiffList.tsx +30 -0
  410. package/components/TagTabs.tsx +139 -0
  411. package/components/TaskListV2.tsx +378 -0
  412. package/components/TeammateViewHeader.tsx +82 -0
  413. package/components/TeleportError.tsx +189 -0
  414. package/components/TeleportProgress.tsx +140 -0
  415. package/components/TeleportRepoMismatchDialog.tsx +104 -0
  416. package/components/TeleportResumeWrapper.tsx +167 -0
  417. package/components/TeleportStash.tsx +116 -0
  418. package/components/TextInput.tsx +124 -0
  419. package/components/ThemePicker.tsx +333 -0
  420. package/components/ThinkingToggle.tsx +153 -0
  421. package/components/TokenWarning.tsx +179 -0
  422. package/components/ToolUseLoader.tsx +42 -0
  423. package/components/TrustDialog/TrustDialog.tsx +290 -0
  424. package/components/TrustDialog/utils.ts +245 -0
  425. package/components/ValidationErrorsList.tsx +148 -0
  426. package/components/VimTextInput.tsx +140 -0
  427. package/components/VirtualMessageList.tsx +1082 -0
  428. package/components/WorkflowMultiselectDialog.tsx +128 -0
  429. package/components/WorktreeExitDialog.tsx +231 -0
  430. package/components/agents/AgentDetail.tsx +220 -0
  431. package/components/agents/AgentEditor.tsx +178 -0
  432. package/components/agents/AgentNavigationFooter.tsx +26 -0
  433. package/components/agents/AgentsList.tsx +440 -0
  434. package/components/agents/AgentsMenu.tsx +800 -0
  435. package/components/agents/ColorPicker.tsx +112 -0
  436. package/components/agents/ModelSelector.tsx +68 -0
  437. package/components/agents/ToolSelector.tsx +562 -0
  438. package/components/agents/agentFileUtils.ts +272 -0
  439. package/components/agents/generateAgent.ts +197 -0
  440. package/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  441. package/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  442. package/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  443. package/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  444. package/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  445. package/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  446. package/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  447. package/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  448. package/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  449. package/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  450. package/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  451. package/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  452. package/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  453. package/components/agents/types.ts +27 -0
  454. package/components/agents/utils.ts +18 -0
  455. package/components/agents/validateAgent.ts +109 -0
  456. package/components/design-system/Byline.tsx +77 -0
  457. package/components/design-system/Dialog.tsx +138 -0
  458. package/components/design-system/Divider.tsx +149 -0
  459. package/components/design-system/FuzzyPicker.tsx +312 -0
  460. package/components/design-system/KeyboardShortcutHint.tsx +81 -0
  461. package/components/design-system/ListItem.tsx +244 -0
  462. package/components/design-system/LoadingState.tsx +94 -0
  463. package/components/design-system/Pane.tsx +77 -0
  464. package/components/design-system/ProgressBar.tsx +86 -0
  465. package/components/design-system/Ratchet.tsx +80 -0
  466. package/components/design-system/StatusIcon.tsx +95 -0
  467. package/components/design-system/Tabs.tsx +340 -0
  468. package/components/design-system/ThemeProvider.tsx +170 -0
  469. package/components/design-system/ThemedBox.tsx +156 -0
  470. package/components/design-system/ThemedText.tsx +124 -0
  471. package/components/design-system/color.ts +30 -0
  472. package/components/diff/DiffDetailView.tsx +281 -0
  473. package/components/diff/DiffDialog.tsx +383 -0
  474. package/components/diff/DiffFileList.tsx +292 -0
  475. package/components/grove/Grove.tsx +463 -0
  476. package/components/hooks/HooksConfigMenu.tsx +578 -0
  477. package/components/hooks/PromptDialog.tsx +90 -0
  478. package/components/hooks/SelectEventMode.tsx +127 -0
  479. package/components/hooks/SelectHookMode.tsx +112 -0
  480. package/components/hooks/SelectMatcherMode.tsx +144 -0
  481. package/components/hooks/ViewHookMode.tsx +199 -0
  482. package/components/mcp/CapabilitiesSection.tsx +61 -0
  483. package/components/mcp/ElicitationDialog.tsx +1169 -0
  484. package/components/mcp/MCPAgentServerMenu.tsx +183 -0
  485. package/components/mcp/MCPListPanel.tsx +504 -0
  486. package/components/mcp/MCPReconnect.tsx +167 -0
  487. package/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  488. package/components/mcp/MCPSettings.tsx +398 -0
  489. package/components/mcp/MCPStdioServerMenu.tsx +177 -0
  490. package/components/mcp/MCPToolDetailView.tsx +212 -0
  491. package/components/mcp/MCPToolListView.tsx +141 -0
  492. package/components/mcp/McpParsingWarnings.tsx +213 -0
  493. package/components/mcp/index.ts +9 -0
  494. package/components/mcp/utils/reconnectHelpers.tsx +49 -0
  495. package/components/memory/MemoryFileSelector.tsx +438 -0
  496. package/components/memory/MemoryUpdateNotification.tsx +45 -0
  497. package/components/messageActions.tsx +450 -0
  498. package/components/messages/AdvisorMessage.tsx +158 -0
  499. package/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  500. package/components/messages/AssistantTextMessage.tsx +270 -0
  501. package/components/messages/AssistantThinkingMessage.tsx +86 -0
  502. package/components/messages/AssistantToolUseMessage.tsx +368 -0
  503. package/components/messages/AttachmentMessage.tsx +536 -0
  504. package/components/messages/CollapsedReadSearchContent.tsx +484 -0
  505. package/components/messages/CompactBoundaryMessage.tsx +18 -0
  506. package/components/messages/GroupedToolUseContent.tsx +58 -0
  507. package/components/messages/HighlightedThinkingText.tsx +162 -0
  508. package/components/messages/HookProgressMessage.tsx +116 -0
  509. package/components/messages/PlanApprovalMessage.tsx +222 -0
  510. package/components/messages/RateLimitMessage.tsx +161 -0
  511. package/components/messages/ShutdownMessage.tsx +132 -0
  512. package/components/messages/SystemAPIErrorMessage.tsx +141 -0
  513. package/components/messages/SystemTextMessage.tsx +827 -0
  514. package/components/messages/TaskAssignmentMessage.tsx +76 -0
  515. package/components/messages/UserAgentNotificationMessage.tsx +83 -0
  516. package/components/messages/UserBashInputMessage.tsx +58 -0
  517. package/components/messages/UserBashOutputMessage.tsx +54 -0
  518. package/components/messages/UserChannelMessage.tsx +137 -0
  519. package/components/messages/UserCommandMessage.tsx +108 -0
  520. package/components/messages/UserImageMessage.tsx +59 -0
  521. package/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  522. package/components/messages/UserMemoryInputMessage.tsx +75 -0
  523. package/components/messages/UserPlanMessage.tsx +42 -0
  524. package/components/messages/UserPromptMessage.tsx +80 -0
  525. package/components/messages/UserResourceUpdateMessage.tsx +121 -0
  526. package/components/messages/UserTeammateMessage.tsx +206 -0
  527. package/components/messages/UserTextMessage.tsx +275 -0
  528. package/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  529. package/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  530. package/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  531. package/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  532. package/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  533. package/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  534. package/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  535. package/components/messages/UserToolResultMessage/utils.tsx +44 -0
  536. package/components/messages/nullRenderingAttachments.ts +70 -0
  537. package/components/messages/teamMemCollapsed.tsx +140 -0
  538. package/components/messages/teamMemSaved.ts +19 -0
  539. package/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  540. package/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  541. package/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  542. package/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  543. package/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  544. package/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  545. package/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  546. package/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  547. package/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  548. package/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  549. package/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  550. package/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  551. package/components/permissions/FallbackPermissionRequest.tsx +333 -0
  552. package/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  553. package/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  554. package/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  555. package/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  556. package/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  557. package/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  558. package/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  559. package/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  560. package/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  561. package/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  562. package/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  563. package/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  564. package/components/permissions/PermissionDialog.tsx +72 -0
  565. package/components/permissions/PermissionExplanation.tsx +272 -0
  566. package/components/permissions/PermissionPrompt.tsx +336 -0
  567. package/components/permissions/PermissionRequest.tsx +217 -0
  568. package/components/permissions/PermissionRequestTitle.tsx +66 -0
  569. package/components/permissions/PermissionRuleExplanation.tsx +121 -0
  570. package/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  571. package/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  572. package/components/permissions/SandboxPermissionRequest.tsx +163 -0
  573. package/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  574. package/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  575. package/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  576. package/components/permissions/WorkerBadge.tsx +49 -0
  577. package/components/permissions/WorkerPendingPermission.tsx +105 -0
  578. package/components/permissions/hooks.ts +209 -0
  579. package/components/permissions/rules/AddPermissionRules.tsx +180 -0
  580. package/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  581. package/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  582. package/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  583. package/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  584. package/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  585. package/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  586. package/components/permissions/rules/WorkspaceTab.tsx +150 -0
  587. package/components/permissions/shellPermissionHelpers.tsx +164 -0
  588. package/components/permissions/useShellPermissionFeedback.ts +148 -0
  589. package/components/permissions/utils.ts +25 -0
  590. package/components/sandbox/SandboxConfigTab.tsx +45 -0
  591. package/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  592. package/components/sandbox/SandboxDoctorSection.tsx +46 -0
  593. package/components/sandbox/SandboxOverridesTab.tsx +193 -0
  594. package/components/sandbox/SandboxSettings.tsx +296 -0
  595. package/components/shell/ExpandShellOutputContext.tsx +36 -0
  596. package/components/shell/OutputLine.tsx +118 -0
  597. package/components/shell/ShellProgressMessage.tsx +150 -0
  598. package/components/shell/ShellTimeDisplay.tsx +74 -0
  599. package/components/skills/SkillsMenu.tsx +237 -0
  600. package/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  601. package/components/tasks/BackgroundTask.tsx +345 -0
  602. package/components/tasks/BackgroundTaskStatus.tsx +429 -0
  603. package/components/tasks/BackgroundTasksDialog.tsx +652 -0
  604. package/components/tasks/DreamDetailDialog.tsx +251 -0
  605. package/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  606. package/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  607. package/components/tasks/RemoteSessionProgress.tsx +243 -0
  608. package/components/tasks/ShellDetailDialog.tsx +404 -0
  609. package/components/tasks/ShellProgress.tsx +87 -0
  610. package/components/tasks/renderToolActivity.tsx +33 -0
  611. package/components/tasks/taskStatusUtils.tsx +107 -0
  612. package/components/teams/TeamStatus.tsx +80 -0
  613. package/components/teams/TeamsDialog.tsx +715 -0
  614. package/components/ui/OrderedList.tsx +71 -0
  615. package/components/ui/OrderedListItem.tsx +45 -0
  616. package/components/ui/TreeSelect.tsx +397 -0
  617. package/components/wizard/WizardDialogLayout.tsx +65 -0
  618. package/components/wizard/WizardNavigationFooter.tsx +24 -0
  619. package/components/wizard/WizardProvider.tsx +213 -0
  620. package/components/wizard/index.ts +9 -0
  621. package/components/wizard/useWizard.ts +13 -0
  622. package/constants/apiLimits.ts +94 -0
  623. package/constants/betas.ts +52 -0
  624. package/constants/common.ts +33 -0
  625. package/constants/cyberRiskInstruction.ts +24 -0
  626. package/constants/errorIds.ts +15 -0
  627. package/constants/figures.ts +45 -0
  628. package/constants/files.ts +156 -0
  629. package/constants/github-app.ts +144 -0
  630. package/constants/keys.ts +11 -0
  631. package/constants/messages.ts +1 -0
  632. package/constants/oauth.ts +234 -0
  633. package/constants/outputStyles.ts +216 -0
  634. package/constants/product.ts +76 -0
  635. package/constants/prompts.ts +914 -0
  636. package/constants/spinnerVerbs.ts +204 -0
  637. package/constants/system.ts +95 -0
  638. package/constants/systemPromptSections.ts +68 -0
  639. package/constants/toolLimits.ts +56 -0
  640. package/constants/tools.ts +112 -0
  641. package/constants/turnCompletionVerbs.ts +12 -0
  642. package/constants/xml.ts +86 -0
  643. package/context/QueuedMessageContext.tsx +63 -0
  644. package/context/fpsMetrics.tsx +30 -0
  645. package/context/mailbox.tsx +38 -0
  646. package/context/modalContext.tsx +58 -0
  647. package/context/notifications.tsx +240 -0
  648. package/context/overlayContext.tsx +151 -0
  649. package/context/promptOverlayContext.tsx +125 -0
  650. package/context/stats.tsx +220 -0
  651. package/context/voice.tsx +88 -0
  652. package/context.ts +189 -0
  653. package/cost-tracker.ts +323 -0
  654. package/costHook.ts +22 -0
  655. package/dialogLaunchers.tsx +133 -0
  656. package/entrypoints/agentSdkTypes.ts +443 -0
  657. package/entrypoints/cli.tsx +310 -0
  658. package/entrypoints/init.ts +340 -0
  659. package/entrypoints/mcp.ts +196 -0
  660. package/entrypoints/sandboxTypes.ts +156 -0
  661. package/entrypoints/sdk/controlSchemas.ts +663 -0
  662. package/entrypoints/sdk/coreSchemas.ts +1889 -0
  663. package/entrypoints/sdk/coreTypes.generated.ts +73 -0
  664. package/entrypoints/sdk/coreTypes.ts +62 -0
  665. package/entrypoints/sdk/runtimeTypes.ts +74 -0
  666. package/entrypoints/sdk/toolTypes.ts +12 -0
  667. package/global.d.ts +18 -0
  668. package/history.ts +464 -0
  669. package/hooks/fileSuggestions.ts +811 -0
  670. package/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  671. package/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  672. package/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  673. package/hooks/notifs/useFastModeNotification.tsx +162 -0
  674. package/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  675. package/hooks/notifs/useInstallMessages.tsx +26 -0
  676. package/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  677. package/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  678. package/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  679. package/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  680. package/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  681. package/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  682. package/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  683. package/hooks/notifs/useSettingsErrors.tsx +69 -0
  684. package/hooks/notifs/useStartupNotification.ts +41 -0
  685. package/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  686. package/hooks/renderPlaceholder.ts +51 -0
  687. package/hooks/toolPermission/PermissionContext.ts +388 -0
  688. package/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  689. package/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  690. package/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  691. package/hooks/toolPermission/permissionLogging.ts +238 -0
  692. package/hooks/unifiedSuggestions.ts +202 -0
  693. package/hooks/useAfterFirstRender.ts +17 -0
  694. package/hooks/useApiKeyVerification.ts +84 -0
  695. package/hooks/useArrowKeyHistory.tsx +229 -0
  696. package/hooks/useAssistantHistory.ts +250 -0
  697. package/hooks/useAwaySummary.ts +125 -0
  698. package/hooks/useBackgroundTaskNavigation.ts +251 -0
  699. package/hooks/useBlink.ts +34 -0
  700. package/hooks/useCanUseTool.tsx +204 -0
  701. package/hooks/useCancelRequest.ts +276 -0
  702. package/hooks/useChromeExtensionNotification.tsx +50 -0
  703. package/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  704. package/hooks/useClipboardImageHint.ts +77 -0
  705. package/hooks/useCommandKeybindings.tsx +108 -0
  706. package/hooks/useCommandQueue.ts +15 -0
  707. package/hooks/useCopyOnSelect.ts +98 -0
  708. package/hooks/useDeferredHookMessages.ts +46 -0
  709. package/hooks/useDiffData.ts +110 -0
  710. package/hooks/useDiffInIDE.ts +379 -0
  711. package/hooks/useDirectConnect.ts +229 -0
  712. package/hooks/useDoublePress.ts +62 -0
  713. package/hooks/useDynamicConfig.ts +22 -0
  714. package/hooks/useElapsedTime.ts +37 -0
  715. package/hooks/useExitOnCtrlCD.ts +95 -0
  716. package/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  717. package/hooks/useFileHistorySnapshotInit.ts +25 -0
  718. package/hooks/useGlobalKeybindings.tsx +249 -0
  719. package/hooks/useHistorySearch.ts +303 -0
  720. package/hooks/useIDEIntegration.tsx +70 -0
  721. package/hooks/useIdeAtMentioned.ts +76 -0
  722. package/hooks/useIdeConnectionStatus.ts +33 -0
  723. package/hooks/useIdeLogging.ts +41 -0
  724. package/hooks/useIdeSelection.ts +150 -0
  725. package/hooks/useInboxPoller.ts +969 -0
  726. package/hooks/useInputBuffer.ts +132 -0
  727. package/hooks/useIssueFlagBanner.ts +133 -0
  728. package/hooks/useLogMessages.ts +119 -0
  729. package/hooks/useLspPluginRecommendation.tsx +194 -0
  730. package/hooks/useMailboxBridge.ts +21 -0
  731. package/hooks/useMainLoopModel.ts +34 -0
  732. package/hooks/useManagePlugins.ts +304 -0
  733. package/hooks/useMemoryUsage.ts +39 -0
  734. package/hooks/useMergedClients.ts +23 -0
  735. package/hooks/useMergedCommands.ts +15 -0
  736. package/hooks/useMergedTools.ts +44 -0
  737. package/hooks/useMinDisplayTime.ts +35 -0
  738. package/hooks/useNotifyAfterTimeout.ts +65 -0
  739. package/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  740. package/hooks/usePasteHandler.ts +285 -0
  741. package/hooks/usePluginRecommendationBase.tsx +105 -0
  742. package/hooks/usePrStatus.ts +106 -0
  743. package/hooks/usePromptSuggestion.ts +177 -0
  744. package/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  745. package/hooks/useQueueProcessor.ts +68 -0
  746. package/hooks/useRemoteSession.ts +605 -0
  747. package/hooks/useReplBridge.tsx +723 -0
  748. package/hooks/useSSHSession.ts +241 -0
  749. package/hooks/useScheduledTasks.ts +139 -0
  750. package/hooks/useSearchInput.ts +364 -0
  751. package/hooks/useSessionBackgrounding.ts +158 -0
  752. package/hooks/useSettings.ts +17 -0
  753. package/hooks/useSettingsChange.ts +25 -0
  754. package/hooks/useSkillImprovementSurvey.ts +105 -0
  755. package/hooks/useSkillsChange.ts +62 -0
  756. package/hooks/useSwarmInitialization.ts +81 -0
  757. package/hooks/useSwarmPermissionPoller.ts +330 -0
  758. package/hooks/useTaskListWatcher.ts +221 -0
  759. package/hooks/useTasksV2.ts +250 -0
  760. package/hooks/useTeammateViewAutoExit.ts +63 -0
  761. package/hooks/useTeleportResume.tsx +85 -0
  762. package/hooks/useTerminalSize.ts +15 -0
  763. package/hooks/useTextInput.ts +529 -0
  764. package/hooks/useTimeout.ts +14 -0
  765. package/hooks/useTurnDiffs.ts +213 -0
  766. package/hooks/useTypeahead.tsx +1385 -0
  767. package/hooks/useUpdateNotification.ts +34 -0
  768. package/hooks/useVimInput.ts +316 -0
  769. package/hooks/useVirtualScroll.ts +721 -0
  770. package/hooks/useVoice.ts +1144 -0
  771. package/hooks/useVoiceEnabled.ts +25 -0
  772. package/hooks/useVoiceIntegration.tsx +677 -0
  773. package/ink/Ansi.tsx +292 -0
  774. package/ink/bidi.ts +139 -0
  775. package/ink/clearTerminal.ts +74 -0
  776. package/ink/colorize.ts +231 -0
  777. package/ink/components/AlternateScreen.tsx +80 -0
  778. package/ink/components/App.tsx +658 -0
  779. package/ink/components/AppContext.ts +21 -0
  780. package/ink/components/Box.tsx +214 -0
  781. package/ink/components/Button.tsx +192 -0
  782. package/ink/components/ClockContext.tsx +112 -0
  783. package/ink/components/CursorDeclarationContext.ts +32 -0
  784. package/ink/components/ErrorOverview.tsx +109 -0
  785. package/ink/components/Link.tsx +42 -0
  786. package/ink/components/Newline.tsx +39 -0
  787. package/ink/components/NoSelect.tsx +68 -0
  788. package/ink/components/RawAnsi.tsx +57 -0
  789. package/ink/components/ScrollBox.tsx +237 -0
  790. package/ink/components/Spacer.tsx +20 -0
  791. package/ink/components/StdinContext.ts +49 -0
  792. package/ink/components/TerminalFocusContext.tsx +52 -0
  793. package/ink/components/TerminalSizeContext.tsx +7 -0
  794. package/ink/components/Text.tsx +254 -0
  795. package/ink/constants.ts +2 -0
  796. package/ink/dom.ts +484 -0
  797. package/ink/events/click-event.ts +38 -0
  798. package/ink/events/dispatcher.ts +235 -0
  799. package/ink/events/emitter.ts +39 -0
  800. package/ink/events/event-handlers.ts +73 -0
  801. package/ink/events/event.ts +11 -0
  802. package/ink/events/focus-event.ts +21 -0
  803. package/ink/events/input-event.ts +205 -0
  804. package/ink/events/keyboard-event.ts +51 -0
  805. package/ink/events/terminal-event.ts +107 -0
  806. package/ink/events/terminal-focus-event.ts +19 -0
  807. package/ink/focus.ts +181 -0
  808. package/ink/frame.ts +124 -0
  809. package/ink/get-max-width.ts +27 -0
  810. package/ink/global.d.ts +14 -0
  811. package/ink/hit-test.ts +130 -0
  812. package/ink/hooks/use-animation-frame.ts +57 -0
  813. package/ink/hooks/use-app.ts +8 -0
  814. package/ink/hooks/use-declared-cursor.ts +73 -0
  815. package/ink/hooks/use-input.ts +92 -0
  816. package/ink/hooks/use-interval.ts +67 -0
  817. package/ink/hooks/use-search-highlight.ts +53 -0
  818. package/ink/hooks/use-selection.ts +104 -0
  819. package/ink/hooks/use-stdin.ts +8 -0
  820. package/ink/hooks/use-tab-status.ts +72 -0
  821. package/ink/hooks/use-terminal-focus.ts +16 -0
  822. package/ink/hooks/use-terminal-title.ts +31 -0
  823. package/ink/hooks/use-terminal-viewport.ts +96 -0
  824. package/ink/ink.tsx +1723 -0
  825. package/ink/instances.ts +10 -0
  826. package/ink/layout/engine.ts +6 -0
  827. package/ink/layout/geometry.ts +97 -0
  828. package/ink/layout/node.ts +152 -0
  829. package/ink/layout/yoga.ts +308 -0
  830. package/ink/line-width-cache.ts +24 -0
  831. package/ink/log-update.ts +773 -0
  832. package/ink/measure-element.ts +23 -0
  833. package/ink/measure-text.ts +47 -0
  834. package/ink/node-cache.ts +54 -0
  835. package/ink/optimizer.ts +93 -0
  836. package/ink/output.ts +797 -0
  837. package/ink/parse-keypress.ts +801 -0
  838. package/ink/reconciler.ts +512 -0
  839. package/ink/render-border.ts +231 -0
  840. package/ink/render-node-to-output.ts +1462 -0
  841. package/ink/render-to-screen.ts +231 -0
  842. package/ink/renderer.ts +178 -0
  843. package/ink/root.ts +184 -0
  844. package/ink/screen.ts +1486 -0
  845. package/ink/searchHighlight.ts +93 -0
  846. package/ink/selection.ts +917 -0
  847. package/ink/squash-text-nodes.ts +92 -0
  848. package/ink/stringWidth.ts +222 -0
  849. package/ink/styles.ts +771 -0
  850. package/ink/supports-hyperlinks.ts +57 -0
  851. package/ink/tabstops.ts +46 -0
  852. package/ink/terminal-focus-state.ts +47 -0
  853. package/ink/terminal-querier.ts +212 -0
  854. package/ink/terminal.ts +248 -0
  855. package/ink/termio/ansi.ts +75 -0
  856. package/ink/termio/csi.ts +319 -0
  857. package/ink/termio/dec.ts +60 -0
  858. package/ink/termio/esc.ts +67 -0
  859. package/ink/termio/osc.ts +493 -0
  860. package/ink/termio/parser.ts +394 -0
  861. package/ink/termio/sgr.ts +308 -0
  862. package/ink/termio/tokenize.ts +319 -0
  863. package/ink/termio/types.ts +236 -0
  864. package/ink/termio.ts +42 -0
  865. package/ink/useTerminalNotification.ts +126 -0
  866. package/ink/warn.ts +9 -0
  867. package/ink/widest-line.ts +19 -0
  868. package/ink/wrap-text.ts +74 -0
  869. package/ink/wrapAnsi.ts +20 -0
  870. package/ink.ts +85 -0
  871. package/interactiveHelpers.tsx +366 -0
  872. package/main.tsx +4702 -0
  873. package/package.json +95 -0
  874. package/projectOnboardingState.ts +83 -0
  875. package/query/config.ts +46 -0
  876. package/query/deps.ts +40 -0
  877. package/query/stopHooks.ts +473 -0
  878. package/query/tokenBudget.ts +93 -0
  879. package/query.ts +1729 -0
  880. package/replLauncher.tsx +23 -0
  881. package/services/AgentSummary/agentSummary.ts +179 -0
  882. package/services/MagicDocs/magicDocs.ts +254 -0
  883. package/services/MagicDocs/prompts.ts +127 -0
  884. package/services/PromptSuggestion/promptSuggestion.ts +523 -0
  885. package/services/PromptSuggestion/speculation.ts +991 -0
  886. package/services/SessionMemory/prompts.ts +324 -0
  887. package/services/SessionMemory/sessionMemory.ts +495 -0
  888. package/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  889. package/services/analytics/config.ts +38 -0
  890. package/services/analytics/datadog.ts +307 -0
  891. package/services/analytics/firstPartyEventLogger.ts +449 -0
  892. package/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  893. package/services/analytics/growthbook.ts +1155 -0
  894. package/services/analytics/index.ts +173 -0
  895. package/services/analytics/metadata.ts +973 -0
  896. package/services/analytics/sink.ts +114 -0
  897. package/services/analytics/sinkKillswitch.ts +25 -0
  898. package/services/api/adminRequests.ts +119 -0
  899. package/services/api/bootstrap.ts +141 -0
  900. package/services/api/claude.ts +3419 -0
  901. package/services/api/client.ts +389 -0
  902. package/services/api/dumpPrompts.ts +226 -0
  903. package/services/api/emptyUsage.ts +22 -0
  904. package/services/api/errorUtils.ts +260 -0
  905. package/services/api/errors.ts +1207 -0
  906. package/services/api/filesApi.ts +748 -0
  907. package/services/api/firstTokenDate.ts +60 -0
  908. package/services/api/grove.ts +357 -0
  909. package/services/api/logging.ts +788 -0
  910. package/services/api/metricsOptOut.ts +159 -0
  911. package/services/api/overageCreditGrant.ts +137 -0
  912. package/services/api/promptCacheBreakDetection.ts +727 -0
  913. package/services/api/referral.ts +281 -0
  914. package/services/api/sessionIngress.ts +514 -0
  915. package/services/api/ultrareviewQuota.ts +38 -0
  916. package/services/api/usage.ts +63 -0
  917. package/services/api/withRetry.ts +822 -0
  918. package/services/autoDream/autoDream.ts +324 -0
  919. package/services/autoDream/config.ts +21 -0
  920. package/services/autoDream/consolidationLock.ts +140 -0
  921. package/services/autoDream/consolidationPrompt.ts +65 -0
  922. package/services/awaySummary.ts +74 -0
  923. package/services/claudeAiLimits.ts +515 -0
  924. package/services/claudeAiLimitsHook.ts +23 -0
  925. package/services/compact/apiMicrocompact.ts +153 -0
  926. package/services/compact/autoCompact.ts +351 -0
  927. package/services/compact/compact.ts +1705 -0
  928. package/services/compact/compactWarningHook.ts +16 -0
  929. package/services/compact/compactWarningState.ts +18 -0
  930. package/services/compact/grouping.ts +63 -0
  931. package/services/compact/microCompact.ts +530 -0
  932. package/services/compact/postCompactCleanup.ts +77 -0
  933. package/services/compact/prompt.ts +374 -0
  934. package/services/compact/sessionMemoryCompact.ts +630 -0
  935. package/services/compact/timeBasedMCConfig.ts +43 -0
  936. package/services/diagnosticTracking.ts +397 -0
  937. package/services/extractMemories/extractMemories.ts +615 -0
  938. package/services/extractMemories/prompts.ts +154 -0
  939. package/services/internalLogging.ts +90 -0
  940. package/services/lsp/LSPClient.ts +447 -0
  941. package/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  942. package/services/lsp/LSPServerInstance.ts +511 -0
  943. package/services/lsp/LSPServerManager.ts +420 -0
  944. package/services/lsp/config.ts +79 -0
  945. package/services/lsp/manager.ts +289 -0
  946. package/services/lsp/passiveFeedback.ts +328 -0
  947. package/services/mcp/InProcessTransport.ts +63 -0
  948. package/services/mcp/MCPConnectionManager.tsx +73 -0
  949. package/services/mcp/SdkControlTransport.ts +136 -0
  950. package/services/mcp/auth.ts +2465 -0
  951. package/services/mcp/channelAllowlist.ts +76 -0
  952. package/services/mcp/channelNotification.ts +316 -0
  953. package/services/mcp/channelPermissions.ts +240 -0
  954. package/services/mcp/claudeai.ts +164 -0
  955. package/services/mcp/client.ts +3348 -0
  956. package/services/mcp/config.ts +1578 -0
  957. package/services/mcp/elicitationHandler.ts +313 -0
  958. package/services/mcp/envExpansion.ts +38 -0
  959. package/services/mcp/headersHelper.ts +138 -0
  960. package/services/mcp/mcpStringUtils.ts +106 -0
  961. package/services/mcp/normalization.ts +23 -0
  962. package/services/mcp/oauthPort.ts +78 -0
  963. package/services/mcp/officialRegistry.ts +72 -0
  964. package/services/mcp/types.ts +258 -0
  965. package/services/mcp/useManageMCPConnections.ts +1141 -0
  966. package/services/mcp/utils.ts +575 -0
  967. package/services/mcp/vscodeSdkMcp.ts +112 -0
  968. package/services/mcp/xaa.ts +511 -0
  969. package/services/mcp/xaaIdpLogin.ts +487 -0
  970. package/services/mcpServerApproval.tsx +41 -0
  971. package/services/mockRateLimits.ts +882 -0
  972. package/services/notifier.ts +156 -0
  973. package/services/oauth/auth-code-listener.ts +211 -0
  974. package/services/oauth/client.ts +566 -0
  975. package/services/oauth/crypto.ts +23 -0
  976. package/services/oauth/getOauthProfile.ts +53 -0
  977. package/services/oauth/index.ts +198 -0
  978. package/services/plugins/PluginInstallationManager.ts +184 -0
  979. package/services/plugins/pluginCliCommands.ts +344 -0
  980. package/services/plugins/pluginOperations.ts +1088 -0
  981. package/services/policyLimits/index.ts +663 -0
  982. package/services/policyLimits/types.ts +27 -0
  983. package/services/preventSleep.ts +165 -0
  984. package/services/rateLimitMessages.ts +344 -0
  985. package/services/rateLimitMocking.ts +144 -0
  986. package/services/remoteManagedSettings/index.ts +638 -0
  987. package/services/remoteManagedSettings/securityCheck.tsx +74 -0
  988. package/services/remoteManagedSettings/syncCache.ts +112 -0
  989. package/services/remoteManagedSettings/syncCacheState.ts +96 -0
  990. package/services/remoteManagedSettings/types.ts +31 -0
  991. package/services/settingsSync/index.ts +581 -0
  992. package/services/settingsSync/types.ts +67 -0
  993. package/services/teamMemorySync/index.ts +1256 -0
  994. package/services/teamMemorySync/secretScanner.ts +324 -0
  995. package/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  996. package/services/teamMemorySync/types.ts +156 -0
  997. package/services/teamMemorySync/watcher.ts +387 -0
  998. package/services/tips/tipHistory.ts +17 -0
  999. package/services/tips/tipRegistry.ts +686 -0
  1000. package/services/tips/tipScheduler.ts +58 -0
  1001. package/services/tokenEstimation.ts +495 -0
  1002. package/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1003. package/services/tools/StreamingToolExecutor.ts +530 -0
  1004. package/services/tools/toolExecution.ts +1745 -0
  1005. package/services/tools/toolHooks.ts +650 -0
  1006. package/services/tools/toolOrchestration.ts +188 -0
  1007. package/services/vcr.ts +406 -0
  1008. package/services/voice.ts +525 -0
  1009. package/services/voiceKeyterms.ts +106 -0
  1010. package/services/voiceStreamSTT.ts +544 -0
  1011. package/setup.ts +477 -0
  1012. package/state/AppState.tsx +200 -0
  1013. package/state/AppStateStore.ts +569 -0
  1014. package/state/onChangeAppState.ts +171 -0
  1015. package/state/selectors.ts +76 -0
  1016. package/state/store.ts +34 -0
  1017. package/state/teammateViewHelpers.ts +141 -0
  1018. package/tasks.ts +39 -0
  1019. package/tools/AgentTool/AgentTool.tsx +1398 -0
  1020. package/tools/AgentTool/UI.tsx +872 -0
  1021. package/tools/AgentTool/agentColorManager.ts +66 -0
  1022. package/tools/AgentTool/agentDisplay.ts +104 -0
  1023. package/tools/AgentTool/agentMemory.ts +177 -0
  1024. package/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1025. package/tools/AgentTool/agentToolUtils.ts +686 -0
  1026. package/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1027. package/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1028. package/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1029. package/tools/AgentTool/built-in/planAgent.ts +92 -0
  1030. package/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1031. package/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1032. package/tools/AgentTool/builtInAgents.ts +72 -0
  1033. package/tools/AgentTool/constants.ts +12 -0
  1034. package/tools/AgentTool/forkSubagent.ts +210 -0
  1035. package/tools/AgentTool/loadAgentsDir.ts +755 -0
  1036. package/tools/AgentTool/prompt.ts +287 -0
  1037. package/tools/AgentTool/resumeAgent.ts +265 -0
  1038. package/tools/AgentTool/runAgent.ts +973 -0
  1039. package/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1040. package/tools/AskUserQuestionTool/prompt.ts +44 -0
  1041. package/tools/BashTool/BashTool.tsx +1144 -0
  1042. package/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1043. package/tools/BashTool/UI.tsx +185 -0
  1044. package/tools/BashTool/bashCommandHelpers.ts +265 -0
  1045. package/tools/BashTool/bashPermissions.ts +2621 -0
  1046. package/tools/BashTool/bashSecurity.ts +2592 -0
  1047. package/tools/BashTool/commandSemantics.ts +140 -0
  1048. package/tools/BashTool/commentLabel.ts +13 -0
  1049. package/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1050. package/tools/BashTool/modeValidation.ts +115 -0
  1051. package/tools/BashTool/pathValidation.ts +1303 -0
  1052. package/tools/BashTool/prompt.ts +369 -0
  1053. package/tools/BashTool/readOnlyValidation.ts +1990 -0
  1054. package/tools/BashTool/sedEditParser.ts +322 -0
  1055. package/tools/BashTool/sedValidation.ts +684 -0
  1056. package/tools/BashTool/shouldUseSandbox.ts +153 -0
  1057. package/tools/BashTool/toolName.ts +2 -0
  1058. package/tools/BashTool/utils.ts +223 -0
  1059. package/tools/BriefTool/BriefTool.ts +204 -0
  1060. package/tools/BriefTool/UI.tsx +101 -0
  1061. package/tools/BriefTool/attachments.ts +110 -0
  1062. package/tools/BriefTool/prompt.ts +22 -0
  1063. package/tools/BriefTool/upload.ts +174 -0
  1064. package/tools/ConfigTool/ConfigTool.ts +467 -0
  1065. package/tools/ConfigTool/UI.tsx +38 -0
  1066. package/tools/ConfigTool/constants.ts +1 -0
  1067. package/tools/ConfigTool/prompt.ts +93 -0
  1068. package/tools/ConfigTool/supportedSettings.ts +211 -0
  1069. package/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1070. package/tools/EnterPlanModeTool/UI.tsx +33 -0
  1071. package/tools/EnterPlanModeTool/constants.ts +1 -0
  1072. package/tools/EnterPlanModeTool/prompt.ts +170 -0
  1073. package/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1074. package/tools/EnterWorktreeTool/UI.tsx +20 -0
  1075. package/tools/EnterWorktreeTool/constants.ts +1 -0
  1076. package/tools/EnterWorktreeTool/prompt.ts +30 -0
  1077. package/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1078. package/tools/ExitPlanModeTool/UI.tsx +82 -0
  1079. package/tools/ExitPlanModeTool/constants.ts +2 -0
  1080. package/tools/ExitPlanModeTool/prompt.ts +29 -0
  1081. package/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1082. package/tools/ExitWorktreeTool/UI.tsx +25 -0
  1083. package/tools/ExitWorktreeTool/constants.ts +1 -0
  1084. package/tools/ExitWorktreeTool/prompt.ts +32 -0
  1085. package/tools/FileEditTool/FileEditTool.ts +625 -0
  1086. package/tools/FileEditTool/UI.tsx +289 -0
  1087. package/tools/FileEditTool/constants.ts +11 -0
  1088. package/tools/FileEditTool/prompt.ts +28 -0
  1089. package/tools/FileEditTool/types.ts +85 -0
  1090. package/tools/FileEditTool/utils.ts +775 -0
  1091. package/tools/FileReadTool/FileReadTool.ts +1183 -0
  1092. package/tools/FileReadTool/UI.tsx +185 -0
  1093. package/tools/FileReadTool/imageProcessor.ts +94 -0
  1094. package/tools/FileReadTool/limits.ts +92 -0
  1095. package/tools/FileReadTool/prompt.ts +49 -0
  1096. package/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1097. package/tools/FileWriteTool/UI.tsx +405 -0
  1098. package/tools/FileWriteTool/prompt.ts +18 -0
  1099. package/tools/GlobTool/GlobTool.ts +198 -0
  1100. package/tools/GlobTool/UI.tsx +63 -0
  1101. package/tools/GlobTool/prompt.ts +7 -0
  1102. package/tools/GrepTool/GrepTool.ts +577 -0
  1103. package/tools/GrepTool/UI.tsx +201 -0
  1104. package/tools/GrepTool/prompt.ts +18 -0
  1105. package/tools/LSPTool/LSPTool.ts +860 -0
  1106. package/tools/LSPTool/UI.tsx +228 -0
  1107. package/tools/LSPTool/formatters.ts +592 -0
  1108. package/tools/LSPTool/prompt.ts +21 -0
  1109. package/tools/LSPTool/schemas.ts +215 -0
  1110. package/tools/LSPTool/symbolContext.ts +90 -0
  1111. package/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1112. package/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1113. package/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1114. package/tools/MCPTool/MCPTool.ts +77 -0
  1115. package/tools/MCPTool/UI.tsx +403 -0
  1116. package/tools/MCPTool/classifyForCollapse.ts +604 -0
  1117. package/tools/MCPTool/prompt.ts +3 -0
  1118. package/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1119. package/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1120. package/tools/NotebookEditTool/UI.tsx +93 -0
  1121. package/tools/NotebookEditTool/constants.ts +2 -0
  1122. package/tools/NotebookEditTool/prompt.ts +3 -0
  1123. package/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1124. package/tools/PowerShellTool/UI.tsx +131 -0
  1125. package/tools/PowerShellTool/clmTypes.ts +211 -0
  1126. package/tools/PowerShellTool/commandSemantics.ts +142 -0
  1127. package/tools/PowerShellTool/commonParameters.ts +30 -0
  1128. package/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1129. package/tools/PowerShellTool/gitSafety.ts +176 -0
  1130. package/tools/PowerShellTool/modeValidation.ts +404 -0
  1131. package/tools/PowerShellTool/pathValidation.ts +2049 -0
  1132. package/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1133. package/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1134. package/tools/PowerShellTool/prompt.ts +145 -0
  1135. package/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1136. package/tools/PowerShellTool/toolName.ts +2 -0
  1137. package/tools/REPLTool/constants.ts +46 -0
  1138. package/tools/REPLTool/primitiveTools.ts +39 -0
  1139. package/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1140. package/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1141. package/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1142. package/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1143. package/tools/RemoteTriggerTool/UI.tsx +17 -0
  1144. package/tools/RemoteTriggerTool/prompt.ts +15 -0
  1145. package/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1146. package/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1147. package/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1148. package/tools/ScheduleCronTool/UI.tsx +60 -0
  1149. package/tools/ScheduleCronTool/prompt.ts +135 -0
  1150. package/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1151. package/tools/SendMessageTool/UI.tsx +31 -0
  1152. package/tools/SendMessageTool/constants.ts +1 -0
  1153. package/tools/SendMessageTool/prompt.ts +49 -0
  1154. package/tools/SkillTool/SkillTool.ts +1108 -0
  1155. package/tools/SkillTool/UI.tsx +128 -0
  1156. package/tools/SkillTool/constants.ts +1 -0
  1157. package/tools/SkillTool/prompt.ts +241 -0
  1158. package/tools/SleepTool/prompt.ts +17 -0
  1159. package/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1160. package/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1161. package/tools/TaskCreateTool/constants.ts +1 -0
  1162. package/tools/TaskCreateTool/prompt.ts +56 -0
  1163. package/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1164. package/tools/TaskGetTool/constants.ts +1 -0
  1165. package/tools/TaskGetTool/prompt.ts +24 -0
  1166. package/tools/TaskListTool/TaskListTool.ts +116 -0
  1167. package/tools/TaskListTool/constants.ts +1 -0
  1168. package/tools/TaskListTool/prompt.ts +49 -0
  1169. package/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1170. package/tools/TaskOutputTool/constants.ts +1 -0
  1171. package/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1172. package/tools/TaskStopTool/UI.tsx +41 -0
  1173. package/tools/TaskStopTool/prompt.ts +8 -0
  1174. package/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1175. package/tools/TaskUpdateTool/constants.ts +1 -0
  1176. package/tools/TaskUpdateTool/prompt.ts +77 -0
  1177. package/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1178. package/tools/TeamCreateTool/UI.tsx +6 -0
  1179. package/tools/TeamCreateTool/constants.ts +1 -0
  1180. package/tools/TeamCreateTool/prompt.ts +113 -0
  1181. package/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1182. package/tools/TeamDeleteTool/UI.tsx +20 -0
  1183. package/tools/TeamDeleteTool/constants.ts +1 -0
  1184. package/tools/TeamDeleteTool/prompt.ts +16 -0
  1185. package/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1186. package/tools/TodoWriteTool/constants.ts +1 -0
  1187. package/tools/TodoWriteTool/prompt.ts +184 -0
  1188. package/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1189. package/tools/ToolSearchTool/constants.ts +1 -0
  1190. package/tools/ToolSearchTool/prompt.ts +121 -0
  1191. package/tools/WebFetchTool/UI.tsx +72 -0
  1192. package/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1193. package/tools/WebFetchTool/preapproved.ts +166 -0
  1194. package/tools/WebFetchTool/prompt.ts +46 -0
  1195. package/tools/WebFetchTool/utils.ts +530 -0
  1196. package/tools/WebSearchTool/UI.tsx +101 -0
  1197. package/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1198. package/tools/WebSearchTool/prompt.ts +34 -0
  1199. package/tools/WorkflowTool/constants.ts +5 -0
  1200. package/tools/shared/gitOperationTracking.ts +277 -0
  1201. package/tools/shared/spawnMultiAgent.ts +1093 -0
  1202. package/tools/testing/TestingPermissionTool.tsx +74 -0
  1203. package/tools/utils.ts +40 -0
  1204. package/tools.ts +392 -0
  1205. package/types/command.ts +216 -0
  1206. package/types/connectorText.ts +21 -0
  1207. package/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1208. package/types/generated/events_mono/common/v1/auth.ts +100 -0
  1209. package/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1210. package/types/generated/google/protobuf/timestamp.ts +187 -0
  1211. package/types/hooks.ts +290 -0
  1212. package/types/ids.ts +44 -0
  1213. package/types/logs.ts +330 -0
  1214. package/types/permissions.ts +441 -0
  1215. package/types/plugin.ts +363 -0
  1216. package/types/textInputTypes.ts +387 -0
  1217. package/utils/CircularBuffer.ts +84 -0
  1218. package/utils/Cursor.ts +1530 -0
  1219. package/utils/QueryGuard.ts +121 -0
  1220. package/utils/Shell.ts +474 -0
  1221. package/utils/ShellCommand.ts +465 -0
  1222. package/utils/abortController.ts +99 -0
  1223. package/utils/activityManager.ts +164 -0
  1224. package/utils/advisor.ts +145 -0
  1225. package/utils/agentContext.ts +178 -0
  1226. package/utils/agentId.ts +99 -0
  1227. package/utils/agentSwarmsEnabled.ts +44 -0
  1228. package/utils/agenticSessionSearch.ts +307 -0
  1229. package/utils/analyzeContext.ts +1382 -0
  1230. package/utils/ansiToPng.ts +334 -0
  1231. package/utils/ansiToSvg.ts +272 -0
  1232. package/utils/api.ts +718 -0
  1233. package/utils/apiPreconnect.ts +71 -0
  1234. package/utils/appleTerminalBackup.ts +124 -0
  1235. package/utils/argumentSubstitution.ts +145 -0
  1236. package/utils/array.ts +13 -0
  1237. package/utils/asciicast.ts +239 -0
  1238. package/utils/attachments.ts +3997 -0
  1239. package/utils/attribution.ts +393 -0
  1240. package/utils/auth.ts +2002 -0
  1241. package/utils/authFileDescriptor.ts +196 -0
  1242. package/utils/authPortable.ts +19 -0
  1243. package/utils/autoModeDenials.ts +26 -0
  1244. package/utils/autoRunIssue.tsx +122 -0
  1245. package/utils/autoUpdater.ts +561 -0
  1246. package/utils/aws.ts +74 -0
  1247. package/utils/awsAuthStatusManager.ts +81 -0
  1248. package/utils/background/remote/preconditions.ts +235 -0
  1249. package/utils/background/remote/remoteSession.ts +98 -0
  1250. package/utils/backgroundHousekeeping.ts +94 -0
  1251. package/utils/bash/ParsedCommand.ts +318 -0
  1252. package/utils/bash/ShellSnapshot.ts +582 -0
  1253. package/utils/bash/ast.ts +2679 -0
  1254. package/utils/bash/bashParser.ts +4436 -0
  1255. package/utils/bash/bashPipeCommand.ts +294 -0
  1256. package/utils/bash/commands.ts +1339 -0
  1257. package/utils/bash/heredoc.ts +733 -0
  1258. package/utils/bash/parser.ts +230 -0
  1259. package/utils/bash/prefix.ts +204 -0
  1260. package/utils/bash/registry.ts +53 -0
  1261. package/utils/bash/shellCompletion.ts +259 -0
  1262. package/utils/bash/shellPrefix.ts +28 -0
  1263. package/utils/bash/shellQuote.ts +304 -0
  1264. package/utils/bash/shellQuoting.ts +128 -0
  1265. package/utils/bash/specs/alias.ts +14 -0
  1266. package/utils/bash/specs/index.ts +18 -0
  1267. package/utils/bash/specs/nohup.ts +13 -0
  1268. package/utils/bash/specs/pyright.ts +91 -0
  1269. package/utils/bash/specs/sleep.ts +13 -0
  1270. package/utils/bash/specs/srun.ts +31 -0
  1271. package/utils/bash/specs/time.ts +13 -0
  1272. package/utils/bash/specs/timeout.ts +20 -0
  1273. package/utils/bash/treeSitterAnalysis.ts +506 -0
  1274. package/utils/betas.ts +434 -0
  1275. package/utils/billing.ts +78 -0
  1276. package/utils/binaryCheck.ts +53 -0
  1277. package/utils/browser.ts +68 -0
  1278. package/utils/bufferedWriter.ts +100 -0
  1279. package/utils/bundledMode.ts +22 -0
  1280. package/utils/caCerts.ts +115 -0
  1281. package/utils/caCertsConfig.ts +88 -0
  1282. package/utils/cachePaths.ts +38 -0
  1283. package/utils/classifierApprovals.ts +88 -0
  1284. package/utils/classifierApprovalsHook.ts +17 -0
  1285. package/utils/claudeCodeHints.ts +193 -0
  1286. package/utils/claudeDesktop.ts +152 -0
  1287. package/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1288. package/utils/claudeInChrome/common.ts +540 -0
  1289. package/utils/claudeInChrome/mcpServer.ts +293 -0
  1290. package/utils/claudeInChrome/prompt.ts +83 -0
  1291. package/utils/claudeInChrome/setup.ts +400 -0
  1292. package/utils/claudeInChrome/setupPortable.ts +233 -0
  1293. package/utils/claudeInChrome/toolRendering.tsx +262 -0
  1294. package/utils/claudemd.ts +1479 -0
  1295. package/utils/cleanup.ts +602 -0
  1296. package/utils/cleanupRegistry.ts +25 -0
  1297. package/utils/cliArgs.ts +60 -0
  1298. package/utils/cliHighlight.ts +54 -0
  1299. package/utils/codeIndexing.ts +206 -0
  1300. package/utils/collapseBackgroundBashNotifications.ts +84 -0
  1301. package/utils/collapseHookSummaries.ts +59 -0
  1302. package/utils/collapseReadSearch.ts +1109 -0
  1303. package/utils/collapseTeammateShutdowns.ts +55 -0
  1304. package/utils/combinedAbortSignal.ts +47 -0
  1305. package/utils/commandLifecycle.ts +21 -0
  1306. package/utils/commitAttribution.ts +961 -0
  1307. package/utils/completionCache.ts +166 -0
  1308. package/utils/computerUse/appNames.ts +196 -0
  1309. package/utils/computerUse/cleanup.ts +86 -0
  1310. package/utils/computerUse/common.ts +61 -0
  1311. package/utils/computerUse/computerUseLock.ts +215 -0
  1312. package/utils/computerUse/drainRunLoop.ts +79 -0
  1313. package/utils/computerUse/escHotkey.ts +54 -0
  1314. package/utils/computerUse/executor.ts +658 -0
  1315. package/utils/computerUse/gates.ts +72 -0
  1316. package/utils/computerUse/hostAdapter.ts +69 -0
  1317. package/utils/computerUse/inputLoader.ts +30 -0
  1318. package/utils/computerUse/mcpServer.ts +106 -0
  1319. package/utils/computerUse/setup.ts +53 -0
  1320. package/utils/computerUse/swiftLoader.ts +23 -0
  1321. package/utils/computerUse/toolRendering.tsx +125 -0
  1322. package/utils/computerUse/wrapper.tsx +336 -0
  1323. package/utils/concurrentSessions.ts +204 -0
  1324. package/utils/config.ts +1817 -0
  1325. package/utils/configConstants.ts +21 -0
  1326. package/utils/contentArray.ts +51 -0
  1327. package/utils/context.ts +221 -0
  1328. package/utils/contextAnalysis.ts +272 -0
  1329. package/utils/contextSuggestions.ts +235 -0
  1330. package/utils/controlMessageCompat.ts +32 -0
  1331. package/utils/conversationRecovery.ts +597 -0
  1332. package/utils/cron.ts +308 -0
  1333. package/utils/cronJitterConfig.ts +75 -0
  1334. package/utils/cronScheduler.ts +565 -0
  1335. package/utils/cronTasks.ts +458 -0
  1336. package/utils/cronTasksLock.ts +195 -0
  1337. package/utils/crossProjectResume.ts +75 -0
  1338. package/utils/crypto.ts +13 -0
  1339. package/utils/cwd.ts +32 -0
  1340. package/utils/debug.ts +268 -0
  1341. package/utils/debugFilter.ts +157 -0
  1342. package/utils/deepLink/banner.ts +123 -0
  1343. package/utils/deepLink/parseDeepLink.ts +170 -0
  1344. package/utils/deepLink/protocolHandler.ts +136 -0
  1345. package/utils/deepLink/registerProtocol.ts +348 -0
  1346. package/utils/deepLink/terminalLauncher.ts +557 -0
  1347. package/utils/deepLink/terminalPreference.ts +54 -0
  1348. package/utils/desktopDeepLink.ts +236 -0
  1349. package/utils/detectRepository.ts +178 -0
  1350. package/utils/diagLogs.ts +94 -0
  1351. package/utils/diff.ts +177 -0
  1352. package/utils/directMemberMessage.ts +69 -0
  1353. package/utils/displayTags.ts +51 -0
  1354. package/utils/doctorContextWarnings.ts +265 -0
  1355. package/utils/doctorDiagnostic.ts +625 -0
  1356. package/utils/dxt/helpers.ts +88 -0
  1357. package/utils/dxt/zip.ts +226 -0
  1358. package/utils/earlyInput.ts +191 -0
  1359. package/utils/editor.ts +183 -0
  1360. package/utils/effort.ts +329 -0
  1361. package/utils/embeddedTools.ts +29 -0
  1362. package/utils/env.ts +347 -0
  1363. package/utils/envDynamic.ts +151 -0
  1364. package/utils/envUtils.ts +183 -0
  1365. package/utils/envValidation.ts +38 -0
  1366. package/utils/errorLogSink.ts +235 -0
  1367. package/utils/errors.ts +238 -0
  1368. package/utils/exampleCommands.ts +184 -0
  1369. package/utils/execFileNoThrow.ts +150 -0
  1370. package/utils/execFileNoThrowPortable.ts +89 -0
  1371. package/utils/execSyncWrapper.ts +38 -0
  1372. package/utils/exportRenderer.tsx +98 -0
  1373. package/utils/extraUsage.ts +23 -0
  1374. package/utils/fastMode.ts +532 -0
  1375. package/utils/file.ts +584 -0
  1376. package/utils/fileHistory.ts +1115 -0
  1377. package/utils/fileOperationAnalytics.ts +71 -0
  1378. package/utils/filePersistence/filePersistence.ts +287 -0
  1379. package/utils/filePersistence/outputsScanner.ts +126 -0
  1380. package/utils/filePersistence/types.ts +28 -0
  1381. package/utils/fileRead.ts +102 -0
  1382. package/utils/fileReadCache.ts +96 -0
  1383. package/utils/fileStateCache.ts +142 -0
  1384. package/utils/findExecutable.ts +17 -0
  1385. package/utils/fingerprint.ts +76 -0
  1386. package/utils/forkedAgent.ts +689 -0
  1387. package/utils/format.ts +308 -0
  1388. package/utils/formatBriefTimestamp.ts +81 -0
  1389. package/utils/fpsTracker.ts +47 -0
  1390. package/utils/frontmatterParser.ts +370 -0
  1391. package/utils/fsOperations.ts +770 -0
  1392. package/utils/fullscreen.ts +202 -0
  1393. package/utils/generatedFiles.ts +136 -0
  1394. package/utils/generators.ts +88 -0
  1395. package/utils/genericProcessUtils.ts +184 -0
  1396. package/utils/getWorktreePaths.ts +70 -0
  1397. package/utils/getWorktreePathsPortable.ts +27 -0
  1398. package/utils/ghPrStatus.ts +106 -0
  1399. package/utils/git/gitConfigParser.ts +277 -0
  1400. package/utils/git/gitFilesystem.ts +699 -0
  1401. package/utils/git/gitignore.ts +99 -0
  1402. package/utils/git.ts +926 -0
  1403. package/utils/gitDiff.ts +532 -0
  1404. package/utils/gitSettings.ts +18 -0
  1405. package/utils/github/ghAuthStatus.ts +29 -0
  1406. package/utils/githubRepoPathMapping.ts +162 -0
  1407. package/utils/glob.ts +130 -0
  1408. package/utils/gracefulShutdown.ts +529 -0
  1409. package/utils/groupToolUses.ts +182 -0
  1410. package/utils/handlePromptSubmit.ts +610 -0
  1411. package/utils/hash.ts +46 -0
  1412. package/utils/headlessProfiler.ts +178 -0
  1413. package/utils/heapDumpService.ts +303 -0
  1414. package/utils/heatmap.ts +198 -0
  1415. package/utils/highlightMatch.tsx +28 -0
  1416. package/utils/hooks/AsyncHookRegistry.ts +309 -0
  1417. package/utils/hooks/apiQueryHookHelper.ts +141 -0
  1418. package/utils/hooks/execAgentHook.ts +339 -0
  1419. package/utils/hooks/execHttpHook.ts +242 -0
  1420. package/utils/hooks/execPromptHook.ts +211 -0
  1421. package/utils/hooks/fileChangedWatcher.ts +191 -0
  1422. package/utils/hooks/hookEvents.ts +192 -0
  1423. package/utils/hooks/hookHelpers.ts +83 -0
  1424. package/utils/hooks/hooksConfigManager.ts +400 -0
  1425. package/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1426. package/utils/hooks/hooksSettings.ts +271 -0
  1427. package/utils/hooks/postSamplingHooks.ts +70 -0
  1428. package/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1429. package/utils/hooks/registerSkillHooks.ts +64 -0
  1430. package/utils/hooks/sessionHooks.ts +447 -0
  1431. package/utils/hooks/skillImprovement.ts +267 -0
  1432. package/utils/hooks/ssrfGuard.ts +294 -0
  1433. package/utils/hooks.ts +5022 -0
  1434. package/utils/horizontalScroll.ts +137 -0
  1435. package/utils/http.ts +136 -0
  1436. package/utils/hyperlink.ts +39 -0
  1437. package/utils/iTermBackup.ts +73 -0
  1438. package/utils/ide.ts +1494 -0
  1439. package/utils/idePathConversion.ts +90 -0
  1440. package/utils/idleTimeout.ts +53 -0
  1441. package/utils/imagePaste.ts +416 -0
  1442. package/utils/imageResizer.ts +880 -0
  1443. package/utils/imageStore.ts +167 -0
  1444. package/utils/imageValidation.ts +104 -0
  1445. package/utils/immediateCommand.ts +15 -0
  1446. package/utils/inProcessTeammateHelpers.ts +102 -0
  1447. package/utils/ink.ts +26 -0
  1448. package/utils/intl.ts +94 -0
  1449. package/utils/jetbrains.ts +191 -0
  1450. package/utils/json.ts +277 -0
  1451. package/utils/jsonRead.ts +16 -0
  1452. package/utils/keyboardShortcuts.ts +14 -0
  1453. package/utils/lazySchema.ts +8 -0
  1454. package/utils/listSessionsImpl.ts +454 -0
  1455. package/utils/localInstaller.ts +162 -0
  1456. package/utils/lockfile.ts +43 -0
  1457. package/utils/log.ts +362 -0
  1458. package/utils/logoV2Utils.ts +350 -0
  1459. package/utils/mailbox.ts +73 -0
  1460. package/utils/managedEnv.ts +199 -0
  1461. package/utils/managedEnvConstants.ts +191 -0
  1462. package/utils/markdown.ts +381 -0
  1463. package/utils/markdownConfigLoader.ts +600 -0
  1464. package/utils/mcp/dateTimeParser.ts +121 -0
  1465. package/utils/mcp/elicitationValidation.ts +336 -0
  1466. package/utils/mcpInstructionsDelta.ts +130 -0
  1467. package/utils/mcpOutputStorage.ts +189 -0
  1468. package/utils/mcpValidation.ts +208 -0
  1469. package/utils/mcpWebSocketTransport.ts +200 -0
  1470. package/utils/memoize.ts +269 -0
  1471. package/utils/memory/types.ts +12 -0
  1472. package/utils/memory/versions.ts +8 -0
  1473. package/utils/memoryFileDetection.ts +289 -0
  1474. package/utils/messagePredicates.ts +8 -0
  1475. package/utils/messageQueueManager.ts +547 -0
  1476. package/utils/messages/mappers.ts +290 -0
  1477. package/utils/messages/systemInit.ts +96 -0
  1478. package/utils/messages.ts +5512 -0
  1479. package/utils/model/agent.ts +157 -0
  1480. package/utils/model/aliases.ts +25 -0
  1481. package/utils/model/antModels.ts +64 -0
  1482. package/utils/model/bedrock.ts +265 -0
  1483. package/utils/model/check1mAccess.ts +72 -0
  1484. package/utils/model/configs.ts +118 -0
  1485. package/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1486. package/utils/model/deprecation.ts +101 -0
  1487. package/utils/model/model.ts +618 -0
  1488. package/utils/model/modelAllowlist.ts +170 -0
  1489. package/utils/model/modelCapabilities.ts +118 -0
  1490. package/utils/model/modelOptions.ts +540 -0
  1491. package/utils/model/modelStrings.ts +166 -0
  1492. package/utils/model/modelSupportOverrides.ts +50 -0
  1493. package/utils/model/providers.ts +40 -0
  1494. package/utils/model/validateModel.ts +159 -0
  1495. package/utils/modelCost.ts +231 -0
  1496. package/utils/modifiers.ts +36 -0
  1497. package/utils/mtls.ts +179 -0
  1498. package/utils/nativeInstaller/download.ts +523 -0
  1499. package/utils/nativeInstaller/index.ts +18 -0
  1500. package/utils/nativeInstaller/installer.ts +1708 -0
  1501. package/utils/nativeInstaller/packageManagers.ts +336 -0
  1502. package/utils/nativeInstaller/pidLock.ts +433 -0
  1503. package/utils/notebook.ts +224 -0
  1504. package/utils/objectGroupBy.ts +18 -0
  1505. package/utils/pasteStore.ts +104 -0
  1506. package/utils/path.ts +155 -0
  1507. package/utils/pdf.ts +300 -0
  1508. package/utils/pdfUtils.ts +70 -0
  1509. package/utils/peerAddress.ts +21 -0
  1510. package/utils/permissions/PermissionMode.ts +141 -0
  1511. package/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1512. package/utils/permissions/PermissionResult.ts +35 -0
  1513. package/utils/permissions/PermissionRule.ts +40 -0
  1514. package/utils/permissions/PermissionUpdate.ts +389 -0
  1515. package/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1516. package/utils/permissions/autoModeState.ts +39 -0
  1517. package/utils/permissions/bashClassifier.ts +61 -0
  1518. package/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1519. package/utils/permissions/classifierDecision.ts +98 -0
  1520. package/utils/permissions/classifierShared.ts +39 -0
  1521. package/utils/permissions/dangerousPatterns.ts +80 -0
  1522. package/utils/permissions/denialTracking.ts +45 -0
  1523. package/utils/permissions/filesystem.ts +1777 -0
  1524. package/utils/permissions/getNextPermissionMode.ts +101 -0
  1525. package/utils/permissions/pathValidation.ts +485 -0
  1526. package/utils/permissions/permissionExplainer.ts +250 -0
  1527. package/utils/permissions/permissionRuleParser.ts +198 -0
  1528. package/utils/permissions/permissionSetup.ts +1532 -0
  1529. package/utils/permissions/permissions.ts +1486 -0
  1530. package/utils/permissions/permissionsLoader.ts +296 -0
  1531. package/utils/permissions/shadowedRuleDetection.ts +234 -0
  1532. package/utils/permissions/shellRuleMatching.ts +228 -0
  1533. package/utils/permissions/yoloClassifier.ts +1495 -0
  1534. package/utils/planModeV2.ts +95 -0
  1535. package/utils/plans.ts +397 -0
  1536. package/utils/platform.ts +150 -0
  1537. package/utils/plugins/addDirPluginSettings.ts +71 -0
  1538. package/utils/plugins/cacheUtils.ts +196 -0
  1539. package/utils/plugins/dependencyResolver.ts +305 -0
  1540. package/utils/plugins/fetchTelemetry.ts +135 -0
  1541. package/utils/plugins/gitAvailability.ts +69 -0
  1542. package/utils/plugins/headlessPluginInstall.ts +174 -0
  1543. package/utils/plugins/hintRecommendation.ts +164 -0
  1544. package/utils/plugins/installCounts.ts +292 -0
  1545. package/utils/plugins/installedPluginsManager.ts +1268 -0
  1546. package/utils/plugins/loadPluginAgents.ts +348 -0
  1547. package/utils/plugins/loadPluginCommands.ts +946 -0
  1548. package/utils/plugins/loadPluginHooks.ts +287 -0
  1549. package/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1550. package/utils/plugins/lspPluginIntegration.ts +387 -0
  1551. package/utils/plugins/lspRecommendation.ts +374 -0
  1552. package/utils/plugins/managedPlugins.ts +27 -0
  1553. package/utils/plugins/marketplaceHelpers.ts +592 -0
  1554. package/utils/plugins/marketplaceManager.ts +2643 -0
  1555. package/utils/plugins/mcpPluginIntegration.ts +634 -0
  1556. package/utils/plugins/mcpbHandler.ts +968 -0
  1557. package/utils/plugins/officialMarketplace.ts +25 -0
  1558. package/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1559. package/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1560. package/utils/plugins/orphanedPluginFilter.ts +114 -0
  1561. package/utils/plugins/parseMarketplaceInput.ts +162 -0
  1562. package/utils/plugins/performStartupChecks.tsx +70 -0
  1563. package/utils/plugins/pluginAutoupdate.ts +284 -0
  1564. package/utils/plugins/pluginBlocklist.ts +127 -0
  1565. package/utils/plugins/pluginDirectories.ts +178 -0
  1566. package/utils/plugins/pluginFlagging.ts +208 -0
  1567. package/utils/plugins/pluginIdentifier.ts +123 -0
  1568. package/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1569. package/utils/plugins/pluginLoader.ts +3302 -0
  1570. package/utils/plugins/pluginOptionsStorage.ts +400 -0
  1571. package/utils/plugins/pluginPolicy.ts +20 -0
  1572. package/utils/plugins/pluginStartupCheck.ts +341 -0
  1573. package/utils/plugins/pluginVersioning.ts +157 -0
  1574. package/utils/plugins/reconciler.ts +265 -0
  1575. package/utils/plugins/refresh.ts +215 -0
  1576. package/utils/plugins/schemas.ts +1681 -0
  1577. package/utils/plugins/validatePlugin.ts +903 -0
  1578. package/utils/plugins/walkPluginMarkdown.ts +69 -0
  1579. package/utils/plugins/zipCache.ts +406 -0
  1580. package/utils/plugins/zipCacheAdapters.ts +164 -0
  1581. package/utils/powershell/dangerousCmdlets.ts +185 -0
  1582. package/utils/powershell/parser.ts +1804 -0
  1583. package/utils/powershell/staticPrefix.ts +316 -0
  1584. package/utils/preflightChecks.tsx +151 -0
  1585. package/utils/privacyLevel.ts +55 -0
  1586. package/utils/process.ts +68 -0
  1587. package/utils/processUserInput/processBashCommand.tsx +140 -0
  1588. package/utils/processUserInput/processSlashCommand.tsx +922 -0
  1589. package/utils/processUserInput/processTextPrompt.ts +100 -0
  1590. package/utils/processUserInput/processUserInput.ts +605 -0
  1591. package/utils/profilerBase.ts +46 -0
  1592. package/utils/promptCategory.ts +49 -0
  1593. package/utils/promptEditor.ts +188 -0
  1594. package/utils/promptShellExecution.ts +183 -0
  1595. package/utils/proxy.ts +426 -0
  1596. package/utils/queryContext.ts +179 -0
  1597. package/utils/queryHelpers.ts +552 -0
  1598. package/utils/queryProfiler.ts +301 -0
  1599. package/utils/queueProcessor.ts +95 -0
  1600. package/utils/readEditContext.ts +227 -0
  1601. package/utils/readFileInRange.ts +383 -0
  1602. package/utils/releaseNotes.ts +360 -0
  1603. package/utils/renderOptions.ts +77 -0
  1604. package/utils/ripgrep.ts +679 -0
  1605. package/utils/sandbox/sandbox-adapter.ts +987 -0
  1606. package/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1607. package/utils/sanitization.ts +91 -0
  1608. package/utils/screenshotClipboard.ts +121 -0
  1609. package/utils/sdkEventQueue.ts +134 -0
  1610. package/utils/secureStorage/fallbackStorage.ts +70 -0
  1611. package/utils/secureStorage/index.ts +17 -0
  1612. package/utils/secureStorage/keychainPrefetch.ts +116 -0
  1613. package/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1614. package/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1615. package/utils/secureStorage/plainTextStorage.ts +84 -0
  1616. package/utils/semanticBoolean.ts +29 -0
  1617. package/utils/semanticNumber.ts +36 -0
  1618. package/utils/semver.ts +59 -0
  1619. package/utils/sequential.ts +56 -0
  1620. package/utils/sessionActivity.ts +133 -0
  1621. package/utils/sessionEnvVars.ts +22 -0
  1622. package/utils/sessionEnvironment.ts +166 -0
  1623. package/utils/sessionFileAccessHooks.ts +250 -0
  1624. package/utils/sessionIngressAuth.ts +140 -0
  1625. package/utils/sessionRestore.ts +551 -0
  1626. package/utils/sessionStart.ts +232 -0
  1627. package/utils/sessionState.ts +150 -0
  1628. package/utils/sessionStorage.ts +5105 -0
  1629. package/utils/sessionStoragePortable.ts +793 -0
  1630. package/utils/sessionTitle.ts +129 -0
  1631. package/utils/sessionUrl.ts +64 -0
  1632. package/utils/set.ts +53 -0
  1633. package/utils/settings/allErrors.ts +32 -0
  1634. package/utils/settings/applySettingsChange.ts +92 -0
  1635. package/utils/settings/changeDetector.ts +488 -0
  1636. package/utils/settings/constants.ts +202 -0
  1637. package/utils/settings/internalWrites.ts +37 -0
  1638. package/utils/settings/managedPath.ts +34 -0
  1639. package/utils/settings/mdm/constants.ts +81 -0
  1640. package/utils/settings/mdm/rawRead.ts +130 -0
  1641. package/utils/settings/mdm/settings.ts +316 -0
  1642. package/utils/settings/permissionValidation.ts +262 -0
  1643. package/utils/settings/pluginOnlyPolicy.ts +60 -0
  1644. package/utils/settings/schemaOutput.ts +8 -0
  1645. package/utils/settings/settings.ts +1015 -0
  1646. package/utils/settings/settingsCache.ts +80 -0
  1647. package/utils/settings/toolValidationConfig.ts +103 -0
  1648. package/utils/settings/types.ts +1148 -0
  1649. package/utils/settings/validateEditTool.ts +45 -0
  1650. package/utils/settings/validation.ts +265 -0
  1651. package/utils/settings/validationTips.ts +164 -0
  1652. package/utils/shell/bashProvider.ts +255 -0
  1653. package/utils/shell/outputLimits.ts +14 -0
  1654. package/utils/shell/powershellDetection.ts +107 -0
  1655. package/utils/shell/powershellProvider.ts +123 -0
  1656. package/utils/shell/prefix.ts +367 -0
  1657. package/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1658. package/utils/shell/resolveDefaultShell.ts +14 -0
  1659. package/utils/shell/shellProvider.ts +33 -0
  1660. package/utils/shell/shellToolUtils.ts +22 -0
  1661. package/utils/shell/specPrefix.ts +241 -0
  1662. package/utils/shellConfig.ts +167 -0
  1663. package/utils/sideQuery.ts +222 -0
  1664. package/utils/sideQuestion.ts +155 -0
  1665. package/utils/signal.ts +43 -0
  1666. package/utils/sinks.ts +16 -0
  1667. package/utils/skills/skillChangeDetector.ts +311 -0
  1668. package/utils/slashCommandParsing.ts +60 -0
  1669. package/utils/sleep.ts +84 -0
  1670. package/utils/sliceAnsi.ts +91 -0
  1671. package/utils/slowOperations.ts +286 -0
  1672. package/utils/standaloneAgent.ts +23 -0
  1673. package/utils/startupProfiler.ts +194 -0
  1674. package/utils/staticRender.tsx +116 -0
  1675. package/utils/stats.ts +1061 -0
  1676. package/utils/statsCache.ts +434 -0
  1677. package/utils/status.tsx +362 -0
  1678. package/utils/statusNoticeDefinitions.tsx +198 -0
  1679. package/utils/statusNoticeHelpers.ts +20 -0
  1680. package/utils/stream.ts +76 -0
  1681. package/utils/streamJsonStdoutGuard.ts +123 -0
  1682. package/utils/streamlinedTransform.ts +201 -0
  1683. package/utils/stringUtils.ts +235 -0
  1684. package/utils/subprocessEnv.ts +99 -0
  1685. package/utils/suggestions/commandSuggestions.ts +567 -0
  1686. package/utils/suggestions/directoryCompletion.ts +263 -0
  1687. package/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1688. package/utils/suggestions/skillUsageTracking.ts +55 -0
  1689. package/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1690. package/utils/swarm/It2SetupPrompt.tsx +380 -0
  1691. package/utils/swarm/backends/ITermBackend.ts +370 -0
  1692. package/utils/swarm/backends/InProcessBackend.ts +339 -0
  1693. package/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1694. package/utils/swarm/backends/TmuxBackend.ts +764 -0
  1695. package/utils/swarm/backends/detection.ts +128 -0
  1696. package/utils/swarm/backends/it2Setup.ts +245 -0
  1697. package/utils/swarm/backends/registry.ts +464 -0
  1698. package/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1699. package/utils/swarm/backends/types.ts +311 -0
  1700. package/utils/swarm/constants.ts +33 -0
  1701. package/utils/swarm/inProcessRunner.ts +1552 -0
  1702. package/utils/swarm/leaderPermissionBridge.ts +54 -0
  1703. package/utils/swarm/permissionSync.ts +928 -0
  1704. package/utils/swarm/reconnection.ts +119 -0
  1705. package/utils/swarm/spawnInProcess.ts +328 -0
  1706. package/utils/swarm/spawnUtils.ts +146 -0
  1707. package/utils/swarm/teamHelpers.ts +683 -0
  1708. package/utils/swarm/teammateInit.ts +129 -0
  1709. package/utils/swarm/teammateLayoutManager.ts +107 -0
  1710. package/utils/swarm/teammateModel.ts +10 -0
  1711. package/utils/swarm/teammatePromptAddendum.ts +18 -0
  1712. package/utils/systemDirectories.ts +74 -0
  1713. package/utils/systemPrompt.ts +123 -0
  1714. package/utils/systemPromptType.ts +14 -0
  1715. package/utils/systemTheme.ts +119 -0
  1716. package/utils/taggedId.ts +54 -0
  1717. package/utils/task/TaskOutput.ts +390 -0
  1718. package/utils/task/diskOutput.ts +451 -0
  1719. package/utils/task/framework.ts +308 -0
  1720. package/utils/task/outputFormatting.ts +38 -0
  1721. package/utils/task/sdkProgress.ts +36 -0
  1722. package/utils/tasks.ts +862 -0
  1723. package/utils/teamDiscovery.ts +81 -0
  1724. package/utils/teamMemoryOps.ts +88 -0
  1725. package/utils/teammate.ts +292 -0
  1726. package/utils/teammateContext.ts +96 -0
  1727. package/utils/teammateMailbox.ts +1183 -0
  1728. package/utils/telemetry/betaSessionTracing.ts +491 -0
  1729. package/utils/telemetry/bigqueryExporter.ts +252 -0
  1730. package/utils/telemetry/events.ts +75 -0
  1731. package/utils/telemetry/instrumentation.ts +825 -0
  1732. package/utils/telemetry/logger.ts +26 -0
  1733. package/utils/telemetry/perfettoTracing.ts +1120 -0
  1734. package/utils/telemetry/pluginTelemetry.ts +289 -0
  1735. package/utils/telemetry/sessionTracing.ts +927 -0
  1736. package/utils/telemetry/skillLoadedEvent.ts +39 -0
  1737. package/utils/telemetryAttributes.ts +71 -0
  1738. package/utils/teleport/api.ts +466 -0
  1739. package/utils/teleport/environmentSelection.ts +77 -0
  1740. package/utils/teleport/environments.ts +120 -0
  1741. package/utils/teleport/gitBundle.ts +292 -0
  1742. package/utils/teleport.tsx +1226 -0
  1743. package/utils/tempfile.ts +31 -0
  1744. package/utils/terminal.ts +131 -0
  1745. package/utils/terminalPanel.ts +191 -0
  1746. package/utils/textHighlighting.ts +166 -0
  1747. package/utils/theme.ts +639 -0
  1748. package/utils/thinking.ts +162 -0
  1749. package/utils/timeouts.ts +39 -0
  1750. package/utils/tmuxSocket.ts +427 -0
  1751. package/utils/todo/types.ts +18 -0
  1752. package/utils/tokenBudget.ts +73 -0
  1753. package/utils/tokens.ts +261 -0
  1754. package/utils/toolErrors.ts +132 -0
  1755. package/utils/toolPool.ts +79 -0
  1756. package/utils/toolResultStorage.ts +1040 -0
  1757. package/utils/toolSchemaCache.ts +26 -0
  1758. package/utils/toolSearch.ts +756 -0
  1759. package/utils/transcriptSearch.ts +202 -0
  1760. package/utils/treeify.ts +170 -0
  1761. package/utils/truncate.ts +179 -0
  1762. package/utils/ultraplan/ccrSession.ts +349 -0
  1763. package/utils/ultraplan/keyword.ts +127 -0
  1764. package/utils/unaryLogging.ts +39 -0
  1765. package/utils/undercover.ts +89 -0
  1766. package/utils/user.ts +194 -0
  1767. package/utils/userAgent.ts +10 -0
  1768. package/utils/userConfig.ts +181 -0
  1769. package/utils/userPromptKeywords.ts +27 -0
  1770. package/utils/uuid.ts +27 -0
  1771. package/utils/warningHandler.ts +121 -0
  1772. package/utils/which.ts +82 -0
  1773. package/utils/windowsPaths.ts +173 -0
  1774. package/utils/withResolvers.ts +13 -0
  1775. package/utils/words.ts +800 -0
  1776. package/utils/workloadContext.ts +57 -0
  1777. package/utils/worktree.ts +1519 -0
  1778. package/utils/worktreeModeEnabled.ts +11 -0
  1779. package/utils/xdg.ts +65 -0
  1780. package/utils/xml.ts +16 -0
  1781. package/utils/yaml.ts +15 -0
  1782. package/utils/zodToJsonSchema.ts +23 -0
@@ -0,0 +1,1093 @@
1
+ /**
2
+ * Shared spawn module for teammate creation.
3
+ * Extracted from TeammateTool to allow reuse by AgentTool.
4
+ */
5
+
6
+ import React from 'react'
7
+ import {
8
+ getChromeFlagOverride,
9
+ getFlagSettingsPath,
10
+ getInlinePlugins,
11
+ getMainLoopModelOverride,
12
+ getSessionBypassPermissionsMode,
13
+ getSessionId,
14
+ } from '../../bootstrap/state.js'
15
+ import type { AppState } from '../../state/AppState.js'
16
+ import { createTaskStateBase, generateTaskId } from '../../Task.js'
17
+ import type { ToolUseContext } from '../../Tool.js'
18
+ import type { InProcessTeammateTaskState } from '../../tasks/InProcessTeammateTask/types.js'
19
+ import { formatAgentId } from '../../utils/agentId.js'
20
+ import { quote } from '../../utils/bash/shellQuote.js'
21
+ import { isInBundledMode } from '../../utils/bundledMode.js'
22
+ import { getGlobalConfig } from '../../utils/config.js'
23
+ import { getCwd } from '../../utils/cwd.js'
24
+ import { logForDebugging } from '../../utils/debug.js'
25
+ import { errorMessage } from '../../utils/errors.js'
26
+ import { execFileNoThrow } from '../../utils/execFileNoThrow.js'
27
+ import { parseUserSpecifiedModel } from '../../utils/model/model.js'
28
+ import type { PermissionMode } from '../../utils/permissions/PermissionMode.js'
29
+ import { isTmuxAvailable } from '../../utils/swarm/backends/detection.js'
30
+ import {
31
+ detectAndGetBackend,
32
+ getBackendByType,
33
+ isInProcessEnabled,
34
+ markInProcessFallback,
35
+ resetBackendDetection,
36
+ } from '../../utils/swarm/backends/registry.js'
37
+ import { getTeammateModeFromSnapshot } from '../../utils/swarm/backends/teammateModeSnapshot.js'
38
+ import type { BackendType } from '../../utils/swarm/backends/types.js'
39
+ import { isPaneBackend } from '../../utils/swarm/backends/types.js'
40
+ import {
41
+ SWARM_SESSION_NAME,
42
+ TEAM_LEAD_NAME,
43
+ TEAMMATE_COMMAND_ENV_VAR,
44
+ TMUX_COMMAND,
45
+ } from '../../utils/swarm/constants.js'
46
+ import { It2SetupPrompt } from '../../utils/swarm/It2SetupPrompt.js'
47
+ import { startInProcessTeammate } from '../../utils/swarm/inProcessRunner.js'
48
+ import {
49
+ type InProcessSpawnConfig,
50
+ spawnInProcessTeammate,
51
+ } from '../../utils/swarm/spawnInProcess.js'
52
+ import { buildInheritedEnvVars } from '../../utils/swarm/spawnUtils.js'
53
+ import {
54
+ readTeamFileAsync,
55
+ sanitizeAgentName,
56
+ sanitizeName,
57
+ writeTeamFileAsync,
58
+ } from '../../utils/swarm/teamHelpers.js'
59
+ import {
60
+ assignTeammateColor,
61
+ createTeammatePaneInSwarmView,
62
+ enablePaneBorderStatus,
63
+ isInsideTmux,
64
+ sendCommandToPane,
65
+ } from '../../utils/swarm/teammateLayoutManager.js'
66
+ import { getHardcodedTeammateModelFallback } from '../../utils/swarm/teammateModel.js'
67
+ import { registerTask } from '../../utils/task/framework.js'
68
+ import { writeToMailbox } from '../../utils/teammateMailbox.js'
69
+ import type { CustomAgentDefinition } from '../AgentTool/loadAgentsDir.js'
70
+ import { isCustomAgent } from '../AgentTool/loadAgentsDir.js'
71
+
72
+ function getDefaultTeammateModel(leaderModel: string | null): string {
73
+ const configured = getGlobalConfig().teammateDefaultModel
74
+ if (configured === null) {
75
+ // User picked "Default" in the /config picker — follow the leader.
76
+ return leaderModel ?? getHardcodedTeammateModelFallback()
77
+ }
78
+ if (configured !== undefined) {
79
+ return parseUserSpecifiedModel(configured)
80
+ }
81
+ return getHardcodedTeammateModelFallback()
82
+ }
83
+
84
+ /**
85
+ * Resolve a teammate model value. Handles the 'inherit' alias (from agent
86
+ * frontmatter) by substituting the leader's model. gh-31069: 'inherit' was
87
+ * passed literally to --model, producing "It may not exist or you may not
88
+ * have access". If leader model is null (not yet set), falls through to the
89
+ * default.
90
+ *
91
+ * Exported for testing.
92
+ */
93
+ export function resolveTeammateModel(
94
+ inputModel: string | undefined,
95
+ leaderModel: string | null,
96
+ ): string {
97
+ if (inputModel === 'inherit') {
98
+ return leaderModel ?? getDefaultTeammateModel(leaderModel)
99
+ }
100
+ return inputModel ?? getDefaultTeammateModel(leaderModel)
101
+ }
102
+
103
+ // ============================================================================
104
+ // Types
105
+ // ============================================================================
106
+
107
+ export type SpawnOutput = {
108
+ teammate_id: string
109
+ agent_id: string
110
+ agent_type?: string
111
+ model?: string
112
+ name: string
113
+ color?: string
114
+ tmux_session_name: string
115
+ tmux_window_name: string
116
+ tmux_pane_id: string
117
+ team_name?: string
118
+ is_splitpane?: boolean
119
+ plan_mode_required?: boolean
120
+ }
121
+
122
+ export type SpawnTeammateConfig = {
123
+ name: string
124
+ prompt: string
125
+ team_name?: string
126
+ cwd?: string
127
+ use_splitpane?: boolean
128
+ plan_mode_required?: boolean
129
+ model?: string
130
+ agent_type?: string
131
+ description?: string
132
+ /** request_id of the API call whose response contained the tool_use that
133
+ * spawned this teammate. Threaded through to TeammateAgentContext for
134
+ * lineage tracing on tengu_api_* events. */
135
+ invokingRequestId?: string
136
+ }
137
+
138
+ // Internal input type matching TeammateTool's spawn parameters
139
+ type SpawnInput = {
140
+ name: string
141
+ prompt: string
142
+ team_name?: string
143
+ cwd?: string
144
+ use_splitpane?: boolean
145
+ plan_mode_required?: boolean
146
+ model?: string
147
+ agent_type?: string
148
+ description?: string
149
+ invokingRequestId?: string
150
+ }
151
+
152
+ // ============================================================================
153
+ // Helper Functions
154
+ // ============================================================================
155
+
156
+ /**
157
+ * Checks if a tmux session exists
158
+ */
159
+ async function hasSession(sessionName: string): Promise<boolean> {
160
+ const result = await execFileNoThrow(TMUX_COMMAND, [
161
+ 'has-session',
162
+ '-t',
163
+ sessionName,
164
+ ])
165
+ return result.code === 0
166
+ }
167
+
168
+ /**
169
+ * Creates a new tmux session if it doesn't exist
170
+ */
171
+ async function ensureSession(sessionName: string): Promise<void> {
172
+ const exists = await hasSession(sessionName)
173
+ if (!exists) {
174
+ const result = await execFileNoThrow(TMUX_COMMAND, [
175
+ 'new-session',
176
+ '-d',
177
+ '-s',
178
+ sessionName,
179
+ ])
180
+ if (result.code !== 0) {
181
+ throw new Error(
182
+ `Failed to create tmux session '${sessionName}': ${result.stderr || 'Unknown error'}`,
183
+ )
184
+ }
185
+ }
186
+ }
187
+
188
+ /**
189
+ * Gets the command to spawn a teammate.
190
+ * For native builds (compiled binaries), use process.execPath.
191
+ * For non-native (node/bun running a script), use process.argv[1].
192
+ */
193
+ function getTeammateCommand(): string {
194
+ if (process.env[TEAMMATE_COMMAND_ENV_VAR]) {
195
+ return process.env[TEAMMATE_COMMAND_ENV_VAR]
196
+ }
197
+ return isInBundledMode() ? process.execPath : process.argv[1]!
198
+ }
199
+
200
+ /**
201
+ * Builds CLI flags to propagate from the current session to spawned teammates.
202
+ * This ensures teammates inherit important settings like permission mode,
203
+ * model selection, and plugin configuration from their parent.
204
+ *
205
+ * @param options.planModeRequired - If true, don't inherit bypass permissions (plan mode takes precedence)
206
+ * @param options.permissionMode - Permission mode to propagate
207
+ */
208
+ function buildInheritedCliFlags(options?: {
209
+ planModeRequired?: boolean
210
+ permissionMode?: PermissionMode
211
+ }): string {
212
+ const flags: string[] = []
213
+ const { planModeRequired, permissionMode } = options || {}
214
+
215
+ // Propagate permission mode to teammates, but NOT if plan mode is required
216
+ // Plan mode takes precedence over bypass permissions for safety
217
+ if (planModeRequired) {
218
+ // Don't inherit bypass permissions when plan mode is required
219
+ } else if (
220
+ permissionMode === 'bypassPermissions' ||
221
+ getSessionBypassPermissionsMode()
222
+ ) {
223
+ flags.push('--dangerously-skip-permissions')
224
+ } else if (permissionMode === 'acceptEdits') {
225
+ flags.push('--permission-mode acceptEdits')
226
+ } else if (permissionMode === 'auto') {
227
+ // Teammates inherit auto mode so the classifier auto-approves their tool
228
+ // calls too. The teammate's own startup (permissionSetup.ts) handles
229
+ // GrowthBook gate checks and setAutoModeActive(true) independently.
230
+ flags.push('--permission-mode auto')
231
+ }
232
+
233
+ // Propagate --model if explicitly set via CLI
234
+ const modelOverride = getMainLoopModelOverride()
235
+ if (modelOverride) {
236
+ flags.push(`--model ${quote([modelOverride])}`)
237
+ }
238
+
239
+ // Propagate --settings if set via CLI
240
+ const settingsPath = getFlagSettingsPath()
241
+ if (settingsPath) {
242
+ flags.push(`--settings ${quote([settingsPath])}`)
243
+ }
244
+
245
+ // Propagate --plugin-dir for each inline plugin
246
+ const inlinePlugins = getInlinePlugins()
247
+ for (const pluginDir of inlinePlugins) {
248
+ flags.push(`--plugin-dir ${quote([pluginDir])}`)
249
+ }
250
+
251
+ // Propagate --chrome / --no-chrome if explicitly set on the CLI
252
+ const chromeFlagOverride = getChromeFlagOverride()
253
+ if (chromeFlagOverride === true) {
254
+ flags.push('--chrome')
255
+ } else if (chromeFlagOverride === false) {
256
+ flags.push('--no-chrome')
257
+ }
258
+
259
+ return flags.join(' ')
260
+ }
261
+
262
+ /**
263
+ * Generates a unique teammate name by checking existing team members.
264
+ * If the name already exists, appends a numeric suffix (e.g., tester-2, tester-3).
265
+ * @internal Exported for testing
266
+ */
267
+ export async function generateUniqueTeammateName(
268
+ baseName: string,
269
+ teamName: string | undefined,
270
+ ): Promise<string> {
271
+ if (!teamName) {
272
+ return baseName
273
+ }
274
+
275
+ const teamFile = await readTeamFileAsync(teamName)
276
+ if (!teamFile) {
277
+ return baseName
278
+ }
279
+
280
+ const existingNames = new Set(teamFile.members.map(m => m.name.toLowerCase()))
281
+
282
+ // If the base name doesn't exist, use it as-is
283
+ if (!existingNames.has(baseName.toLowerCase())) {
284
+ return baseName
285
+ }
286
+
287
+ // Find the next available suffix
288
+ let suffix = 2
289
+ while (existingNames.has(`${baseName}-${suffix}`.toLowerCase())) {
290
+ suffix++
291
+ }
292
+
293
+ return `${baseName}-${suffix}`
294
+ }
295
+
296
+ // ============================================================================
297
+ // Spawn Handlers
298
+ // ============================================================================
299
+
300
+ /**
301
+ * Handle spawn operation using split-pane view (default).
302
+ * When inside tmux: Creates teammates in a shared window with leader on left, teammates on right.
303
+ * When outside tmux: Creates a claude-swarm session with all teammates in a tiled layout.
304
+ */
305
+ async function handleSpawnSplitPane(
306
+ input: SpawnInput,
307
+ context: ToolUseContext,
308
+ ): Promise<{ data: SpawnOutput }> {
309
+ const { setAppState, getAppState } = context
310
+ const { name, prompt, agent_type, cwd, plan_mode_required } = input
311
+
312
+ // Resolve model: 'inherit' → leader's model; undefined → default Opus
313
+ const model = resolveTeammateModel(input.model, getAppState().mainLoopModel)
314
+
315
+ if (!name || !prompt) {
316
+ throw new Error('name and prompt are required for spawn operation')
317
+ }
318
+
319
+ // Get team name from input or inherit from leader's team context
320
+ const appState = getAppState()
321
+ const teamName = input.team_name || appState.teamContext?.teamName
322
+
323
+ if (!teamName) {
324
+ throw new Error(
325
+ 'team_name is required for spawn operation. Either provide team_name in input or call spawnTeam first to establish team context.',
326
+ )
327
+ }
328
+
329
+ // Generate unique name if duplicate exists in team
330
+ const uniqueName = await generateUniqueTeammateName(name, teamName)
331
+
332
+ // Sanitize the name to prevent @ in agent IDs (would break agentName@teamName format)
333
+ const sanitizedName = sanitizeAgentName(uniqueName)
334
+
335
+ // Generate deterministic agent ID from name and team
336
+ const teammateId = formatAgentId(sanitizedName, teamName)
337
+ const workingDir = cwd || getCwd()
338
+
339
+ // Detect the appropriate backend and check if setup is needed
340
+ let detectionResult = await detectAndGetBackend()
341
+
342
+ // If in iTerm2 but it2 isn't set up, prompt the user
343
+ if (detectionResult.needsIt2Setup && context.setToolJSX) {
344
+ const tmuxAvailable = await isTmuxAvailable()
345
+
346
+ // Show the setup prompt and wait for user decision
347
+ const setupResult = await new Promise<
348
+ 'installed' | 'use-tmux' | 'cancelled'
349
+ >(resolve => {
350
+ context.setToolJSX!({
351
+ jsx: React.createElement(It2SetupPrompt, {
352
+ onDone: resolve,
353
+ tmuxAvailable,
354
+ }),
355
+ shouldHidePromptInput: true,
356
+ })
357
+ })
358
+
359
+ // Clear the JSX
360
+ context.setToolJSX(null)
361
+
362
+ if (setupResult === 'cancelled') {
363
+ throw new Error('Teammate spawn cancelled - iTerm2 setup required')
364
+ }
365
+
366
+ // If they installed it2 or chose tmux, clear cached detection and re-fetch
367
+ // so the local detectionResult matches the backend that will actually
368
+ // spawn the pane.
369
+ // - 'installed': re-detect to pick up the ITermBackend (it2 is now available)
370
+ // - 'use-tmux': re-detect so needsIt2Setup is false (preferTmux is now saved)
371
+ // and subsequent spawns skip this prompt
372
+ if (setupResult === 'installed' || setupResult === 'use-tmux') {
373
+ resetBackendDetection()
374
+ detectionResult = await detectAndGetBackend()
375
+ }
376
+ }
377
+
378
+ // Check if we're inside tmux to determine session naming
379
+ const insideTmux = await isInsideTmux()
380
+
381
+ // Assign a unique color to this teammate
382
+ const teammateColor = assignTeammateColor(teammateId)
383
+
384
+ // Create a pane in the swarm view
385
+ // - Inside tmux: splits current window (leader on left, teammates on right)
386
+ // - In iTerm2 with it2: uses native iTerm2 split panes
387
+ // - Outside both: creates claude-swarm session with tiled teammates
388
+ const { paneId, isFirstTeammate } = await createTeammatePaneInSwarmView(
389
+ sanitizedName,
390
+ teammateColor,
391
+ )
392
+
393
+ // Enable pane border status on first teammate when inside tmux
394
+ // (outside tmux, this is handled in createTeammatePaneInSwarmView)
395
+ if (isFirstTeammate && insideTmux) {
396
+ await enablePaneBorderStatus()
397
+ }
398
+
399
+ // Build the command to spawn Claude Code with teammate identity
400
+ // Note: We spawn without a prompt - initial instructions are sent via mailbox
401
+ const binaryPath = getTeammateCommand()
402
+
403
+ // Build teammate identity CLI args (replaces CLAUDE_CODE_* env vars)
404
+ const teammateArgs = [
405
+ `--agent-id ${quote([teammateId])}`,
406
+ `--agent-name ${quote([sanitizedName])}`,
407
+ `--team-name ${quote([teamName])}`,
408
+ `--agent-color ${quote([teammateColor])}`,
409
+ `--parent-session-id ${quote([getSessionId()])}`,
410
+ plan_mode_required ? '--plan-mode-required' : '',
411
+ agent_type ? `--agent-type ${quote([agent_type])}` : '',
412
+ ]
413
+ .filter(Boolean)
414
+ .join(' ')
415
+
416
+ // Build CLI flags to propagate to teammate
417
+ // Pass plan_mode_required to prevent inheriting bypass permissions
418
+ let inheritedFlags = buildInheritedCliFlags({
419
+ planModeRequired: plan_mode_required,
420
+ permissionMode: appState.toolPermissionContext.mode,
421
+ })
422
+
423
+ // If teammate has a custom model, add --model flag (or replace inherited one)
424
+ if (model) {
425
+ // Remove any inherited --model flag first
426
+ inheritedFlags = inheritedFlags
427
+ .split(' ')
428
+ .filter((flag, i, arr) => flag !== '--model' && arr[i - 1] !== '--model')
429
+ .join(' ')
430
+ // Add the teammate's model
431
+ inheritedFlags = inheritedFlags
432
+ ? `${inheritedFlags} --model ${quote([model])}`
433
+ : `--model ${quote([model])}`
434
+ }
435
+
436
+ const flagsStr = inheritedFlags ? ` ${inheritedFlags}` : ''
437
+ // Propagate env vars that teammates need but may not inherit from tmux split-window shells.
438
+ // Includes CLAUDECODE, CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, and API provider vars.
439
+ const envStr = buildInheritedEnvVars()
440
+ const spawnCommand = `cd ${quote([workingDir])} && env ${envStr} ${quote([binaryPath])} ${teammateArgs}${flagsStr}`
441
+
442
+ // Send the command to the new pane
443
+ // Use swarm socket when running outside tmux (external swarm session)
444
+ await sendCommandToPane(paneId, spawnCommand, !insideTmux)
445
+
446
+ // Determine session/window names for output
447
+ const sessionName = insideTmux ? 'current' : SWARM_SESSION_NAME
448
+ const windowName = insideTmux ? 'current' : 'swarm-view'
449
+
450
+ // Track the teammate in AppState's teamContext with color
451
+ // If spawning without spawnTeam, set up the leader as team lead
452
+ setAppState(prev => ({
453
+ ...prev,
454
+ teamContext: {
455
+ ...prev.teamContext,
456
+ teamName: teamName ?? prev.teamContext?.teamName ?? 'default',
457
+ teamFilePath: prev.teamContext?.teamFilePath ?? '',
458
+ leadAgentId: prev.teamContext?.leadAgentId ?? '',
459
+ teammates: {
460
+ ...(prev.teamContext?.teammates || {}),
461
+ [teammateId]: {
462
+ name: sanitizedName,
463
+ agentType: agent_type,
464
+ color: teammateColor,
465
+ tmuxSessionName: sessionName,
466
+ tmuxPaneId: paneId,
467
+ cwd: workingDir,
468
+ spawnedAt: Date.now(),
469
+ },
470
+ },
471
+ },
472
+ }))
473
+
474
+ // Register background task so teammates appear in the tasks pill/dialog
475
+ registerOutOfProcessTeammateTask(setAppState, {
476
+ teammateId,
477
+ sanitizedName,
478
+ teamName,
479
+ teammateColor,
480
+ prompt,
481
+ plan_mode_required,
482
+ paneId,
483
+ insideTmux,
484
+ backendType: detectionResult.backend.type,
485
+ toolUseId: context.toolUseId,
486
+ })
487
+
488
+ // Register agent in the team file
489
+ const teamFile = await readTeamFileAsync(teamName)
490
+ if (!teamFile) {
491
+ throw new Error(
492
+ `Team "${teamName}" does not exist. Call spawnTeam first to create the team.`,
493
+ )
494
+ }
495
+ teamFile.members.push({
496
+ agentId: teammateId,
497
+ name: sanitizedName,
498
+ agentType: agent_type,
499
+ model,
500
+ prompt,
501
+ color: teammateColor,
502
+ planModeRequired: plan_mode_required,
503
+ joinedAt: Date.now(),
504
+ tmuxPaneId: paneId,
505
+ cwd: workingDir,
506
+ subscriptions: [],
507
+ backendType: detectionResult.backend.type,
508
+ })
509
+ await writeTeamFileAsync(teamName, teamFile)
510
+
511
+ // Send initial instructions to teammate via mailbox
512
+ // The teammate's inbox poller will pick this up and submit it as their first turn
513
+ await writeToMailbox(
514
+ sanitizedName,
515
+ {
516
+ from: TEAM_LEAD_NAME,
517
+ text: prompt,
518
+ timestamp: new Date().toISOString(),
519
+ },
520
+ teamName,
521
+ )
522
+
523
+ return {
524
+ data: {
525
+ teammate_id: teammateId,
526
+ agent_id: teammateId,
527
+ agent_type,
528
+ model,
529
+ name: sanitizedName,
530
+ color: teammateColor,
531
+ tmux_session_name: sessionName,
532
+ tmux_window_name: windowName,
533
+ tmux_pane_id: paneId,
534
+ team_name: teamName,
535
+ is_splitpane: true,
536
+ plan_mode_required,
537
+ },
538
+ }
539
+ }
540
+
541
+ /**
542
+ * Handle spawn operation using separate windows (legacy behavior).
543
+ * Creates each teammate in its own tmux window.
544
+ */
545
+ async function handleSpawnSeparateWindow(
546
+ input: SpawnInput,
547
+ context: ToolUseContext,
548
+ ): Promise<{ data: SpawnOutput }> {
549
+ const { setAppState, getAppState } = context
550
+ const { name, prompt, agent_type, cwd, plan_mode_required } = input
551
+
552
+ // Resolve model: 'inherit' → leader's model; undefined → default Opus
553
+ const model = resolveTeammateModel(input.model, getAppState().mainLoopModel)
554
+
555
+ if (!name || !prompt) {
556
+ throw new Error('name and prompt are required for spawn operation')
557
+ }
558
+
559
+ // Get team name from input or inherit from leader's team context
560
+ const appState = getAppState()
561
+ const teamName = input.team_name || appState.teamContext?.teamName
562
+
563
+ if (!teamName) {
564
+ throw new Error(
565
+ 'team_name is required for spawn operation. Either provide team_name in input or call spawnTeam first to establish team context.',
566
+ )
567
+ }
568
+
569
+ // Generate unique name if duplicate exists in team
570
+ const uniqueName = await generateUniqueTeammateName(name, teamName)
571
+
572
+ // Sanitize the name to prevent @ in agent IDs (would break agentName@teamName format)
573
+ const sanitizedName = sanitizeAgentName(uniqueName)
574
+
575
+ // Generate deterministic agent ID from name and team
576
+ const teammateId = formatAgentId(sanitizedName, teamName)
577
+ const windowName = `teammate-${sanitizeName(sanitizedName)}`
578
+ const workingDir = cwd || getCwd()
579
+
580
+ // Ensure the swarm session exists
581
+ await ensureSession(SWARM_SESSION_NAME)
582
+
583
+ // Assign a unique color to this teammate
584
+ const teammateColor = assignTeammateColor(teammateId)
585
+
586
+ // Create a new window for this teammate
587
+ const createWindowResult = await execFileNoThrow(TMUX_COMMAND, [
588
+ 'new-window',
589
+ '-t',
590
+ SWARM_SESSION_NAME,
591
+ '-n',
592
+ windowName,
593
+ '-P',
594
+ '-F',
595
+ '#{pane_id}',
596
+ ])
597
+
598
+ if (createWindowResult.code !== 0) {
599
+ throw new Error(
600
+ `Failed to create tmux window: ${createWindowResult.stderr}`,
601
+ )
602
+ }
603
+
604
+ const paneId = createWindowResult.stdout.trim()
605
+
606
+ // Build the command to spawn Claude Code with teammate identity
607
+ // Note: We spawn without a prompt - initial instructions are sent via mailbox
608
+ const binaryPath = getTeammateCommand()
609
+
610
+ // Build teammate identity CLI args (replaces CLAUDE_CODE_* env vars)
611
+ const teammateArgs = [
612
+ `--agent-id ${quote([teammateId])}`,
613
+ `--agent-name ${quote([sanitizedName])}`,
614
+ `--team-name ${quote([teamName])}`,
615
+ `--agent-color ${quote([teammateColor])}`,
616
+ `--parent-session-id ${quote([getSessionId()])}`,
617
+ plan_mode_required ? '--plan-mode-required' : '',
618
+ agent_type ? `--agent-type ${quote([agent_type])}` : '',
619
+ ]
620
+ .filter(Boolean)
621
+ .join(' ')
622
+
623
+ // Build CLI flags to propagate to teammate
624
+ // Pass plan_mode_required to prevent inheriting bypass permissions
625
+ let inheritedFlags = buildInheritedCliFlags({
626
+ planModeRequired: plan_mode_required,
627
+ permissionMode: appState.toolPermissionContext.mode,
628
+ })
629
+
630
+ // If teammate has a custom model, add --model flag (or replace inherited one)
631
+ if (model) {
632
+ // Remove any inherited --model flag first
633
+ inheritedFlags = inheritedFlags
634
+ .split(' ')
635
+ .filter((flag, i, arr) => flag !== '--model' && arr[i - 1] !== '--model')
636
+ .join(' ')
637
+ // Add the teammate's model
638
+ inheritedFlags = inheritedFlags
639
+ ? `${inheritedFlags} --model ${quote([model])}`
640
+ : `--model ${quote([model])}`
641
+ }
642
+
643
+ const flagsStr = inheritedFlags ? ` ${inheritedFlags}` : ''
644
+ // Propagate env vars that teammates need but may not inherit from tmux split-window shells.
645
+ // Includes CLAUDECODE, CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, and API provider vars.
646
+ const envStr = buildInheritedEnvVars()
647
+ const spawnCommand = `cd ${quote([workingDir])} && env ${envStr} ${quote([binaryPath])} ${teammateArgs}${flagsStr}`
648
+
649
+ // Send the command to the new window
650
+ const sendKeysResult = await execFileNoThrow(TMUX_COMMAND, [
651
+ 'send-keys',
652
+ '-t',
653
+ `${SWARM_SESSION_NAME}:${windowName}`,
654
+ spawnCommand,
655
+ 'Enter',
656
+ ])
657
+
658
+ if (sendKeysResult.code !== 0) {
659
+ throw new Error(
660
+ `Failed to send command to tmux window: ${sendKeysResult.stderr}`,
661
+ )
662
+ }
663
+
664
+ // Track the teammate in AppState's teamContext
665
+ setAppState(prev => ({
666
+ ...prev,
667
+ teamContext: {
668
+ ...prev.teamContext,
669
+ teamName: teamName ?? prev.teamContext?.teamName ?? 'default',
670
+ teamFilePath: prev.teamContext?.teamFilePath ?? '',
671
+ leadAgentId: prev.teamContext?.leadAgentId ?? '',
672
+ teammates: {
673
+ ...(prev.teamContext?.teammates || {}),
674
+ [teammateId]: {
675
+ name: sanitizedName,
676
+ agentType: agent_type,
677
+ color: teammateColor,
678
+ tmuxSessionName: SWARM_SESSION_NAME,
679
+ tmuxPaneId: paneId,
680
+ cwd: workingDir,
681
+ spawnedAt: Date.now(),
682
+ },
683
+ },
684
+ },
685
+ }))
686
+
687
+ // Register background task so tmux teammates appear in the tasks pill/dialog
688
+ // Separate window spawns are always outside tmux (external swarm session)
689
+ registerOutOfProcessTeammateTask(setAppState, {
690
+ teammateId,
691
+ sanitizedName,
692
+ teamName,
693
+ teammateColor,
694
+ prompt,
695
+ plan_mode_required,
696
+ paneId,
697
+ insideTmux: false,
698
+ backendType: 'tmux',
699
+ toolUseId: context.toolUseId,
700
+ })
701
+
702
+ // Register agent in the team file
703
+ const teamFile = await readTeamFileAsync(teamName)
704
+ if (!teamFile) {
705
+ throw new Error(
706
+ `Team "${teamName}" does not exist. Call spawnTeam first to create the team.`,
707
+ )
708
+ }
709
+ teamFile.members.push({
710
+ agentId: teammateId,
711
+ name: sanitizedName,
712
+ agentType: agent_type,
713
+ model,
714
+ prompt,
715
+ color: teammateColor,
716
+ planModeRequired: plan_mode_required,
717
+ joinedAt: Date.now(),
718
+ tmuxPaneId: paneId,
719
+ cwd: workingDir,
720
+ subscriptions: [],
721
+ backendType: 'tmux', // This handler always uses tmux directly
722
+ })
723
+ await writeTeamFileAsync(teamName, teamFile)
724
+
725
+ // Send initial instructions to teammate via mailbox
726
+ // The teammate's inbox poller will pick this up and submit it as their first turn
727
+ await writeToMailbox(
728
+ sanitizedName,
729
+ {
730
+ from: TEAM_LEAD_NAME,
731
+ text: prompt,
732
+ timestamp: new Date().toISOString(),
733
+ },
734
+ teamName,
735
+ )
736
+
737
+ return {
738
+ data: {
739
+ teammate_id: teammateId,
740
+ agent_id: teammateId,
741
+ agent_type,
742
+ model,
743
+ name: sanitizedName,
744
+ color: teammateColor,
745
+ tmux_session_name: SWARM_SESSION_NAME,
746
+ tmux_window_name: windowName,
747
+ tmux_pane_id: paneId,
748
+ team_name: teamName,
749
+ is_splitpane: false,
750
+ plan_mode_required,
751
+ },
752
+ }
753
+ }
754
+
755
+ /**
756
+ * Register a background task entry for an out-of-process (tmux/iTerm2) teammate.
757
+ * This makes tmux teammates visible in the background tasks pill and dialog,
758
+ * matching how in-process teammates are tracked.
759
+ */
760
+ function registerOutOfProcessTeammateTask(
761
+ setAppState: (updater: (prev: AppState) => AppState) => void,
762
+ {
763
+ teammateId,
764
+ sanitizedName,
765
+ teamName,
766
+ teammateColor,
767
+ prompt,
768
+ plan_mode_required,
769
+ paneId,
770
+ insideTmux,
771
+ backendType,
772
+ toolUseId,
773
+ }: {
774
+ teammateId: string
775
+ sanitizedName: string
776
+ teamName: string
777
+ teammateColor: string
778
+ prompt: string
779
+ plan_mode_required?: boolean
780
+ paneId: string
781
+ insideTmux: boolean
782
+ backendType: BackendType
783
+ toolUseId?: string
784
+ },
785
+ ): void {
786
+ const taskId = generateTaskId('in_process_teammate')
787
+ const description = `${sanitizedName}: ${prompt.substring(0, 50)}${prompt.length > 50 ? '...' : ''}`
788
+
789
+ const abortController = new AbortController()
790
+
791
+ const taskState: InProcessTeammateTaskState = {
792
+ ...createTaskStateBase(
793
+ taskId,
794
+ 'in_process_teammate',
795
+ description,
796
+ toolUseId,
797
+ ),
798
+ type: 'in_process_teammate',
799
+ status: 'running',
800
+ identity: {
801
+ agentId: teammateId,
802
+ agentName: sanitizedName,
803
+ teamName,
804
+ color: teammateColor,
805
+ planModeRequired: plan_mode_required ?? false,
806
+ parentSessionId: getSessionId(),
807
+ },
808
+ prompt,
809
+ abortController,
810
+ awaitingPlanApproval: false,
811
+ permissionMode: plan_mode_required ? 'plan' : 'default',
812
+ isIdle: false,
813
+ shutdownRequested: false,
814
+ lastReportedToolCount: 0,
815
+ lastReportedTokenCount: 0,
816
+ pendingUserMessages: [],
817
+ }
818
+
819
+ registerTask(taskState, setAppState)
820
+
821
+ // When abort is signaled, kill the pane using the backend that created it
822
+ // (tmux kill-pane for tmux panes, it2 session close for iTerm2 native panes).
823
+ // SDK task_notification bookend is emitted by killInProcessTeammate (the
824
+ // sole abort trigger for this controller).
825
+ abortController.signal.addEventListener(
826
+ 'abort',
827
+ () => {
828
+ if (isPaneBackend(backendType)) {
829
+ void getBackendByType(backendType).killPane(paneId, !insideTmux)
830
+ }
831
+ },
832
+ { once: true },
833
+ )
834
+ }
835
+
836
+ /**
837
+ * Handle spawn operation for in-process teammates.
838
+ * In-process teammates run in the same Node.js process using AsyncLocalStorage.
839
+ */
840
+ async function handleSpawnInProcess(
841
+ input: SpawnInput,
842
+ context: ToolUseContext,
843
+ ): Promise<{ data: SpawnOutput }> {
844
+ const { setAppState, getAppState } = context
845
+ const { name, prompt, agent_type, plan_mode_required } = input
846
+
847
+ // Resolve model: 'inherit' → leader's model; undefined → default Opus
848
+ const model = resolveTeammateModel(input.model, getAppState().mainLoopModel)
849
+
850
+ if (!name || !prompt) {
851
+ throw new Error('name and prompt are required for spawn operation')
852
+ }
853
+
854
+ // Get team name from input or inherit from leader's team context
855
+ const appState = getAppState()
856
+ const teamName = input.team_name || appState.teamContext?.teamName
857
+
858
+ if (!teamName) {
859
+ throw new Error(
860
+ 'team_name is required for spawn operation. Either provide team_name in input or call spawnTeam first to establish team context.',
861
+ )
862
+ }
863
+
864
+ // Generate unique name if duplicate exists in team
865
+ const uniqueName = await generateUniqueTeammateName(name, teamName)
866
+
867
+ // Sanitize the name to prevent @ in agent IDs
868
+ const sanitizedName = sanitizeAgentName(uniqueName)
869
+
870
+ // Generate deterministic agent ID from name and team
871
+ const teammateId = formatAgentId(sanitizedName, teamName)
872
+
873
+ // Assign a unique color to this teammate
874
+ const teammateColor = assignTeammateColor(teammateId)
875
+
876
+ // Look up custom agent definition if agent_type is provided
877
+ let agentDefinition: CustomAgentDefinition | undefined
878
+ if (agent_type) {
879
+ const allAgents = context.options.agentDefinitions.activeAgents
880
+ const foundAgent = allAgents.find(a => a.agentType === agent_type)
881
+ if (foundAgent && isCustomAgent(foundAgent)) {
882
+ agentDefinition = foundAgent
883
+ }
884
+ logForDebugging(
885
+ `[handleSpawnInProcess] agent_type=${agent_type}, found=${!!agentDefinition}`,
886
+ )
887
+ }
888
+
889
+ // Spawn in-process teammate
890
+ const config: InProcessSpawnConfig = {
891
+ name: sanitizedName,
892
+ teamName,
893
+ prompt,
894
+ color: teammateColor,
895
+ planModeRequired: plan_mode_required ?? false,
896
+ model,
897
+ }
898
+
899
+ const result = await spawnInProcessTeammate(config, context)
900
+
901
+ if (!result.success) {
902
+ throw new Error(result.error ?? 'Failed to spawn in-process teammate')
903
+ }
904
+
905
+ // Debug: log what spawn returned
906
+ logForDebugging(
907
+ `[handleSpawnInProcess] spawn result: taskId=${result.taskId}, hasContext=${!!result.teammateContext}, hasAbort=${!!result.abortController}`,
908
+ )
909
+
910
+ // Start the agent execution loop (fire-and-forget)
911
+ if (result.taskId && result.teammateContext && result.abortController) {
912
+ startInProcessTeammate({
913
+ identity: {
914
+ agentId: teammateId,
915
+ agentName: sanitizedName,
916
+ teamName,
917
+ color: teammateColor,
918
+ planModeRequired: plan_mode_required ?? false,
919
+ parentSessionId: result.teammateContext.parentSessionId,
920
+ },
921
+ taskId: result.taskId,
922
+ prompt,
923
+ description: input.description,
924
+ model,
925
+ agentDefinition,
926
+ teammateContext: result.teammateContext,
927
+ // Strip messages: the teammate never reads toolUseContext.messages
928
+ // (it builds its own history via allMessages in inProcessRunner).
929
+ // Passing the parent's full conversation here would pin it for the
930
+ // teammate's lifetime, surviving /clear and auto-compact.
931
+ toolUseContext: { ...context, messages: [] },
932
+ abortController: result.abortController,
933
+ invokingRequestId: input.invokingRequestId,
934
+ })
935
+ logForDebugging(
936
+ `[handleSpawnInProcess] Started agent execution for ${teammateId}`,
937
+ )
938
+ }
939
+
940
+ // Track the teammate in AppState's teamContext
941
+ // Auto-register leader if spawning without prior spawnTeam call
942
+ setAppState(prev => {
943
+ const needsLeaderSetup = !prev.teamContext?.leadAgentId
944
+ const leadAgentId = needsLeaderSetup
945
+ ? formatAgentId(TEAM_LEAD_NAME, teamName)
946
+ : prev.teamContext!.leadAgentId
947
+
948
+ // Build teammates map, including leader if needed for inbox polling
949
+ const existingTeammates = prev.teamContext?.teammates || {}
950
+ const leadEntry = needsLeaderSetup
951
+ ? {
952
+ [leadAgentId]: {
953
+ name: TEAM_LEAD_NAME,
954
+ agentType: TEAM_LEAD_NAME,
955
+ color: assignTeammateColor(leadAgentId),
956
+ tmuxSessionName: 'in-process',
957
+ tmuxPaneId: 'leader',
958
+ cwd: getCwd(),
959
+ spawnedAt: Date.now(),
960
+ },
961
+ }
962
+ : {}
963
+
964
+ return {
965
+ ...prev,
966
+ teamContext: {
967
+ ...prev.teamContext,
968
+ teamName: teamName ?? prev.teamContext?.teamName ?? 'default',
969
+ teamFilePath: prev.teamContext?.teamFilePath ?? '',
970
+ leadAgentId,
971
+ teammates: {
972
+ ...existingTeammates,
973
+ ...leadEntry,
974
+ [teammateId]: {
975
+ name: sanitizedName,
976
+ agentType: agent_type,
977
+ color: teammateColor,
978
+ tmuxSessionName: 'in-process',
979
+ tmuxPaneId: 'in-process',
980
+ cwd: getCwd(),
981
+ spawnedAt: Date.now(),
982
+ },
983
+ },
984
+ },
985
+ }
986
+ })
987
+
988
+ // Register agent in the team file
989
+ const teamFile = await readTeamFileAsync(teamName)
990
+ if (!teamFile) {
991
+ throw new Error(
992
+ `Team "${teamName}" does not exist. Call spawnTeam first to create the team.`,
993
+ )
994
+ }
995
+ teamFile.members.push({
996
+ agentId: teammateId,
997
+ name: sanitizedName,
998
+ agentType: agent_type,
999
+ model,
1000
+ prompt,
1001
+ color: teammateColor,
1002
+ planModeRequired: plan_mode_required,
1003
+ joinedAt: Date.now(),
1004
+ tmuxPaneId: 'in-process',
1005
+ cwd: getCwd(),
1006
+ subscriptions: [],
1007
+ backendType: 'in-process',
1008
+ })
1009
+ await writeTeamFileAsync(teamName, teamFile)
1010
+
1011
+ // Note: Do NOT send the prompt via mailbox for in-process teammates.
1012
+ // In-process teammates receive the prompt directly via startInProcessTeammate().
1013
+ // The mailbox is only needed for tmux-based teammates which poll for their initial message.
1014
+ // Sending via both paths would cause duplicate welcome messages.
1015
+
1016
+ return {
1017
+ data: {
1018
+ teammate_id: teammateId,
1019
+ agent_id: teammateId,
1020
+ agent_type,
1021
+ model,
1022
+ name: sanitizedName,
1023
+ color: teammateColor,
1024
+ tmux_session_name: 'in-process',
1025
+ tmux_window_name: 'in-process',
1026
+ tmux_pane_id: 'in-process',
1027
+ team_name: teamName,
1028
+ is_splitpane: false,
1029
+ plan_mode_required,
1030
+ },
1031
+ }
1032
+ }
1033
+
1034
+ /**
1035
+ * Handle spawn operation - creates a new Claude Code instance.
1036
+ * Uses in-process mode when enabled, otherwise uses tmux/iTerm2 split-pane view.
1037
+ * Falls back to in-process if pane backend detection fails (e.g., iTerm2 without
1038
+ * it2 CLI or tmux installed).
1039
+ */
1040
+ async function handleSpawn(
1041
+ input: SpawnInput,
1042
+ context: ToolUseContext,
1043
+ ): Promise<{ data: SpawnOutput }> {
1044
+ // Check if in-process mode is enabled via feature flag
1045
+ if (isInProcessEnabled()) {
1046
+ return handleSpawnInProcess(input, context)
1047
+ }
1048
+
1049
+ // Pre-flight: ensure a pane backend is available before attempting pane-based spawn.
1050
+ // This handles auto-mode cases like iTerm2 without it2 or tmux installed, where
1051
+ // isInProcessEnabled() returns false but detectAndGetBackend() has no viable backend.
1052
+ // Narrowly scoped so user cancellation and other spawn errors propagate normally.
1053
+ try {
1054
+ await detectAndGetBackend()
1055
+ } catch (error) {
1056
+ // Only fall back silently in auto mode. If the user explicitly configured
1057
+ // teammateMode: 'tmux', let the error propagate so they see the actionable
1058
+ // install instructions from getTmuxInstallInstructions().
1059
+ if (getTeammateModeFromSnapshot() !== 'auto') {
1060
+ throw error
1061
+ }
1062
+ logForDebugging(
1063
+ `[handleSpawn] No pane backend available, falling back to in-process: ${errorMessage(error)}`,
1064
+ )
1065
+ // Record the fallback so isInProcessEnabled() reflects the actual mode
1066
+ // (fixes banner and other UI that would otherwise show tmux attach commands).
1067
+ markInProcessFallback()
1068
+ return handleSpawnInProcess(input, context)
1069
+ }
1070
+
1071
+ // Backend is available (and now cached) - proceed with pane spawning.
1072
+ // Any errors here (user cancellation, validation, etc.) propagate to the caller.
1073
+ const useSplitPane = input.use_splitpane !== false
1074
+ if (useSplitPane) {
1075
+ return handleSpawnSplitPane(input, context)
1076
+ }
1077
+ return handleSpawnSeparateWindow(input, context)
1078
+ }
1079
+
1080
+ // ============================================================================
1081
+ // Main Export
1082
+ // ============================================================================
1083
+
1084
+ /**
1085
+ * Spawns a new teammate with the given configuration.
1086
+ * This is the main entry point for teammate spawning, used by both TeammateTool and AgentTool.
1087
+ */
1088
+ export async function spawnTeammate(
1089
+ config: SpawnTeammateConfig,
1090
+ context: ToolUseContext,
1091
+ ): Promise<{ data: SpawnOutput }> {
1092
+ return handleSpawn(config, context)
1093
+ }