@iaforged/context-code 1.0.72 → 1.0.74

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 (2050) hide show
  1. package/context-bootstrap.js +7 -8
  2. package/dist/src/QueryEngine.js +928 -0
  3. package/dist/src/Task.js +49 -0
  4. package/dist/src/Tool.js +56 -0
  5. package/dist/src/assistant/AssistantSessionChooser.js +16 -0
  6. package/dist/src/assistant/index.js +16 -0
  7. package/dist/src/assistant/sessionDiscovery.js +16 -0
  8. package/dist/src/assistant/sessionHistory.js +47 -0
  9. package/dist/src/bootstrap/state.js +1165 -0
  10. package/dist/src/bridge/bridgeApi.js +304 -0
  11. package/dist/src/bridge/bridgeConfig.js +39 -0
  12. package/dist/src/bridge/bridgeDebug.js +73 -0
  13. package/dist/src/bridge/bridgeEnabled.js +187 -0
  14. package/dist/src/bridge/bridgeMain.js +2289 -0
  15. package/dist/src/bridge/bridgeMessaging.js +353 -0
  16. package/dist/src/bridge/bridgePermissionCallbacks.js +10 -0
  17. package/dist/src/bridge/bridgePointer.js +175 -0
  18. package/dist/src/bridge/bridgeStatusUtil.js +105 -0
  19. package/dist/src/bridge/bridgeUI.js +412 -0
  20. package/dist/src/bridge/capacityWake.js +35 -0
  21. package/dist/src/bridge/codeSessionApi.js +111 -0
  22. package/dist/src/bridge/createSession.js +273 -0
  23. package/dist/src/bridge/debugUtils.js +115 -0
  24. package/dist/src/bridge/envLessBridgeConfig.js +121 -0
  25. package/dist/src/bridge/flushGate.js +65 -0
  26. package/dist/src/bridge/inboundAttachments.js +152 -0
  27. package/dist/src/bridge/inboundMessages.js +63 -0
  28. package/dist/src/bridge/initReplBridge.js +428 -0
  29. package/dist/src/bridge/jwtUtils.js +185 -0
  30. package/dist/src/bridge/pollConfig.js +85 -0
  31. package/dist/src/bridge/pollConfigDefaults.js +62 -0
  32. package/dist/src/bridge/remoteBridgeCore.js +712 -0
  33. package/dist/src/bridge/replBridge.js +1720 -0
  34. package/dist/src/bridge/replBridgeHandle.js +30 -0
  35. package/dist/src/bridge/replBridgeTransport.js +236 -0
  36. package/dist/src/bridge/sessionIdCompat.js +56 -0
  37. package/dist/src/bridge/sessionRunner.js +421 -0
  38. package/dist/src/bridge/trustedDevice.js +172 -0
  39. package/dist/src/bridge/types.js +9 -0
  40. package/dist/src/bridge/workSecret.js +99 -0
  41. package/dist/src/buddy/CompanionSprite.js +349 -0
  42. package/dist/src/buddy/companion.js +107 -0
  43. package/dist/src/buddy/prompt.js +33 -0
  44. package/dist/src/buddy/sprites.js +488 -0
  45. package/dist/src/buddy/types.js +90 -0
  46. package/dist/src/buddy/useBuddyNotification.js +90 -0
  47. package/dist/src/cli/bg.js +16 -0
  48. package/dist/src/cli/exit.js +30 -0
  49. package/dist/src/cli/handlers/agents.js +55 -0
  50. package/dist/src/cli/handlers/ant.js +16 -0
  51. package/dist/src/cli/handlers/auth.js +315 -0
  52. package/dist/src/cli/handlers/autoMode.js +128 -0
  53. package/dist/src/cli/handlers/mcp.js +334 -0
  54. package/dist/src/cli/handlers/plugins.js +634 -0
  55. package/dist/src/cli/handlers/projects_bridge.js +40 -0
  56. package/dist/src/cli/handlers/provider.js +42 -0
  57. package/dist/src/cli/handlers/templateJobs.js +16 -0
  58. package/dist/src/cli/handlers/util.js +76 -0
  59. package/dist/src/cli/ndjsonSafeStringify.js +27 -0
  60. package/dist/src/cli/print.js +4225 -0
  61. package/dist/src/cli/remoteIO.js +208 -0
  62. package/dist/src/cli/rollback.js +16 -0
  63. package/dist/src/cli/structuredIO.js +644 -0
  64. package/dist/src/cli/transports/HybridTransport.js +233 -0
  65. package/dist/src/cli/transports/SSETransport.js +538 -0
  66. package/dist/src/cli/transports/SerialBatchEventUploader.js +224 -0
  67. package/dist/src/cli/transports/Transport.js +1 -0
  68. package/dist/src/cli/transports/WebSocketTransport.js +613 -0
  69. package/dist/src/cli/transports/WorkerStateUploader.js +88 -0
  70. package/dist/src/cli/transports/ccrClient.js +711 -0
  71. package/dist/src/cli/transports/transportUtils.js +39 -0
  72. package/dist/src/cli/up.js +16 -0
  73. package/dist/src/cli/update.js +315 -0
  74. package/dist/src/commands/add-dir/add-dir.js +121 -0
  75. package/dist/src/commands/add-dir/index.js +8 -0
  76. package/dist/src/commands/add-dir/validation.js +76 -0
  77. package/dist/src/commands/advisor.js +88 -0
  78. package/dist/src/commands/agent/agent.js +283 -0
  79. package/dist/src/commands/agent/agentStore.js +120 -0
  80. package/dist/src/commands/agent/index.js +9 -0
  81. package/dist/src/commands/agents/agents.js +9 -0
  82. package/dist/src/commands/agents/index.js +7 -0
  83. package/dist/src/commands/ant-trace/index.js +1 -0
  84. package/dist/src/commands/assistant/assistant.js +16 -0
  85. package/dist/src/commands/autofix-pr/index.js +1 -0
  86. package/dist/src/commands/backfill-sessions/index.js +1 -0
  87. package/dist/src/commands/branch/branch.js +205 -0
  88. package/dist/src/commands/branch/index.js +11 -0
  89. package/dist/src/commands/break-cache/index.js +1 -0
  90. package/dist/src/commands/bridge/bridge.js +512 -0
  91. package/dist/src/commands/bridge/index.js +22 -0
  92. package/dist/src/commands/bridge-kick.js +179 -0
  93. package/dist/src/commands/brief.js +94 -0
  94. package/dist/src/commands/btw/btw.js +234 -0
  95. package/dist/src/commands/btw/index.js +9 -0
  96. package/dist/src/commands/bughunter/index.js +1 -0
  97. package/dist/src/commands/chrome/chrome.js +291 -0
  98. package/dist/src/commands/chrome/index.js +11 -0
  99. package/dist/src/commands/clear/caches.js +116 -0
  100. package/dist/src/commands/clear/clear.js +5 -0
  101. package/dist/src/commands/clear/conversation.js +191 -0
  102. package/dist/src/commands/clear/index.js +9 -0
  103. package/dist/src/commands/color/color.js +58 -0
  104. package/dist/src/commands/color/index.js +9 -0
  105. package/dist/src/commands/commit-push-pr.js +137 -0
  106. package/dist/src/commands/commit.js +80 -0
  107. package/dist/src/commands/compact/compact.js +196 -0
  108. package/dist/src/commands/compact/index.js +11 -0
  109. package/dist/src/commands/config/config.js +5 -0
  110. package/dist/src/commands/config/index.js +8 -0
  111. package/dist/src/commands/context/context-noninteractive.js +221 -0
  112. package/dist/src/commands/context/context.js +46 -0
  113. package/dist/src/commands/context/index.js +21 -0
  114. package/dist/src/commands/copy/copy.js +366 -0
  115. package/dist/src/commands/copy/index.js +7 -0
  116. package/dist/src/commands/cost/cost.js +21 -0
  117. package/dist/src/commands/cost/index.js +16 -0
  118. package/dist/src/commands/createMovedToPluginCommand.js +33 -0
  119. package/dist/src/commands/ctx_viz/index.js +1 -0
  120. package/dist/src/commands/debug-tool-call/index.js +1 -0
  121. package/dist/src/commands/desktop/desktop.js +5 -0
  122. package/dist/src/commands/desktop/index.js +22 -0
  123. package/dist/src/commands/diff/diff.js +5 -0
  124. package/dist/src/commands/diff/index.js +6 -0
  125. package/dist/src/commands/doctor/doctor.js +5 -0
  126. package/dist/src/commands/doctor/index.js +9 -0
  127. package/dist/src/commands/effort/effort.js +166 -0
  128. package/dist/src/commands/effort/index.js +11 -0
  129. package/dist/src/commands/env/index.js +1 -0
  130. package/dist/src/commands/exit/exit.js +31 -0
  131. package/dist/src/commands/exit/index.js +9 -0
  132. package/dist/src/commands/export/export.js +86 -0
  133. package/dist/src/commands/export/index.js +8 -0
  134. package/dist/src/commands/extra-usage/extra-usage-core.js +99 -0
  135. package/dist/src/commands/extra-usage/extra-usage-noninteractive.js +13 -0
  136. package/dist/src/commands/extra-usage/extra-usage.js +14 -0
  137. package/dist/src/commands/extra-usage/index.js +27 -0
  138. package/dist/src/commands/fast/fast.js +275 -0
  139. package/dist/src/commands/fast/index.js +20 -0
  140. package/dist/src/commands/feedback/feedback.js +10 -0
  141. package/dist/src/commands/feedback/index.js +21 -0
  142. package/dist/src/commands/files/files.js +11 -0
  143. package/dist/src/commands/files/index.js +9 -0
  144. package/dist/src/commands/good-claude/index.js +1 -0
  145. package/dist/src/commands/heapdump/heapdump.js +14 -0
  146. package/dist/src/commands/heapdump/index.js +9 -0
  147. package/dist/src/commands/help/help.js +5 -0
  148. package/dist/src/commands/help/index.js +7 -0
  149. package/dist/src/commands/hooks/hooks.js +11 -0
  150. package/dist/src/commands/hooks/index.js +8 -0
  151. package/dist/src/commands/ide/ide.js +615 -0
  152. package/dist/src/commands/ide/index.js +8 -0
  153. package/dist/src/commands/init-verifiers.js +258 -0
  154. package/dist/src/commands/init.js +249 -0
  155. package/dist/src/commands/insights.js +2555 -0
  156. package/dist/src/commands/install-github-app/ApiKeyStep.js +230 -0
  157. package/dist/src/commands/install-github-app/CheckExistingSecretStep.js +194 -0
  158. package/dist/src/commands/install-github-app/CheckGitHubStep.js +15 -0
  159. package/dist/src/commands/install-github-app/ChooseRepoStep.js +211 -0
  160. package/dist/src/commands/install-github-app/CreatingStep.js +52 -0
  161. package/dist/src/commands/install-github-app/ErrorStep.js +83 -0
  162. package/dist/src/commands/install-github-app/ExistingWorkflowStep.js +104 -0
  163. package/dist/src/commands/install-github-app/InstallAppStep.js +96 -0
  164. package/dist/src/commands/install-github-app/OAuthFlowStep.js +190 -0
  165. package/dist/src/commands/install-github-app/SuccessStep.js +93 -0
  166. package/dist/src/commands/install-github-app/WarningsStep.js +70 -0
  167. package/dist/src/commands/install-github-app/index.js +10 -0
  168. package/dist/src/commands/install-github-app/install-github-app.js +593 -0
  169. package/dist/src/commands/install-github-app/setupGitHubActions.js +227 -0
  170. package/dist/src/commands/install-slack-app/index.js +9 -0
  171. package/dist/src/commands/install-slack-app/install-slack-app.js +25 -0
  172. package/dist/src/commands/install.js +118 -0
  173. package/dist/src/commands/issue/index.js +1 -0
  174. package/dist/src/commands/keybindings/index.js +10 -0
  175. package/dist/src/commands/keybindings/keybindings.js +47 -0
  176. package/dist/src/commands/limites/index.js +8 -0
  177. package/dist/src/commands/limites/limites.js +214 -0
  178. package/dist/src/commands/login/index.js +11 -0
  179. package/dist/src/commands/login/login.js +120 -0
  180. package/dist/src/commands/login-openai/index.js +7 -0
  181. package/dist/src/commands/login-openai/login-openai.js +54 -0
  182. package/dist/src/commands/logout/index.js +8 -0
  183. package/dist/src/commands/logout/logout.js +72 -0
  184. package/dist/src/commands/mcp/addCommand.js +183 -0
  185. package/dist/src/commands/mcp/index.js +9 -0
  186. package/dist/src/commands/mcp/mcp.js +78 -0
  187. package/dist/src/commands/mcp/xaaIdpCommand.js +193 -0
  188. package/dist/src/commands/memory/index.js +7 -0
  189. package/dist/src/commands/memory/memory.js +71 -0
  190. package/dist/src/commands/mobile/index.js +9 -0
  191. package/dist/src/commands/mobile/mobile.js +278 -0
  192. package/dist/src/commands/mock-limits/index.js +1 -0
  193. package/dist/src/commands/model/index.js +14 -0
  194. package/dist/src/commands/model/model.js +297 -0
  195. package/dist/src/commands/oauth-refresh/index.js +1 -0
  196. package/dist/src/commands/onboarding/index.js +1 -0
  197. package/dist/src/commands/orchestrate/index.js +8 -0
  198. package/dist/src/commands/orchestrate/orchestrate.js +542 -0
  199. package/dist/src/commands/output-style/index.js +8 -0
  200. package/dist/src/commands/output-style/output-style.js +6 -0
  201. package/dist/src/commands/passes/index.js +17 -0
  202. package/dist/src/commands/passes/passes.js +22 -0
  203. package/dist/src/commands/perf-issue/index.js +1 -0
  204. package/dist/src/commands/permissions/index.js +8 -0
  205. package/dist/src/commands/permissions/permissions.js +8 -0
  206. package/dist/src/commands/plan/index.js +8 -0
  207. package/dist/src/commands/plan/plan.js +115 -0
  208. package/dist/src/commands/plugin/AddMarketplace.js +95 -0
  209. package/dist/src/commands/plugin/BrowseMarketplace.js +576 -0
  210. package/dist/src/commands/plugin/DiscoverPlugins.js +613 -0
  211. package/dist/src/commands/plugin/ManageMarketplaces.js +582 -0
  212. package/dist/src/commands/plugin/ManagePlugins.js +1783 -0
  213. package/dist/src/commands/plugin/PluginErrors.js +124 -0
  214. package/dist/src/commands/plugin/PluginOptionsDialog.js +367 -0
  215. package/dist/src/commands/plugin/PluginOptionsFlow.js +97 -0
  216. package/dist/src/commands/plugin/PluginSettings.js +1042 -0
  217. package/dist/src/commands/plugin/PluginTrustWarning.js +34 -0
  218. package/dist/src/commands/plugin/UnifiedInstalledCell.js +615 -0
  219. package/dist/src/commands/plugin/ValidatePlugin.js +95 -0
  220. package/dist/src/commands/plugin/index.js +10 -0
  221. package/dist/src/commands/plugin/parseArgs.js +71 -0
  222. package/dist/src/commands/plugin/plugin.js +5 -0
  223. package/dist/src/commands/plugin/pluginDetailsHelpers.js +89 -0
  224. package/dist/src/commands/plugin/usePagination.js +89 -0
  225. package/dist/src/commands/policy/index.js +9 -0
  226. package/dist/src/commands/policy/policy.js +84 -0
  227. package/dist/src/commands/pr_comments/index.js +49 -0
  228. package/dist/src/commands/privacy-settings/index.js +11 -0
  229. package/dist/src/commands/privacy-settings/privacy-settings.js +54 -0
  230. package/dist/src/commands/profile/index.js +9 -0
  231. package/dist/src/commands/profile/profile.js +482 -0
  232. package/dist/src/commands/provider/index.js +8 -0
  233. package/dist/src/commands/provider/provider.js +457 -0
  234. package/dist/src/commands/rate-limit-options/index.js +15 -0
  235. package/dist/src/commands/rate-limit-options/rate-limit-options.js +213 -0
  236. package/dist/src/commands/release-notes/index.js +9 -0
  237. package/dist/src/commands/release-notes/release-notes.js +38 -0
  238. package/dist/src/commands/reload-plugins/index.js +11 -0
  239. package/dist/src/commands/reload-plugins/reload-plugins.js +52 -0
  240. package/dist/src/commands/remote-env/index.js +12 -0
  241. package/dist/src/commands/remote-env/remote-env.js +5 -0
  242. package/dist/src/commands/remote-setup/api.js +155 -0
  243. package/dist/src/commands/remote-setup/index.js +15 -0
  244. package/dist/src/commands/remote-setup/remote-setup.js +149 -0
  245. package/dist/src/commands/rename/generateSessionName.js +58 -0
  246. package/dist/src/commands/rename/index.js +9 -0
  247. package/dist/src/commands/rename/rename.js +52 -0
  248. package/dist/src/commands/reset-limits/index.js +4 -0
  249. package/dist/src/commands/resume/index.js +9 -0
  250. package/dist/src/commands/resume/resume.js +239 -0
  251. package/dist/src/commands/review/UltrareviewOverageDialog.js +97 -0
  252. package/dist/src/commands/review/reviewRemote.js +259 -0
  253. package/dist/src/commands/review/ultrareviewCommand.js +57 -0
  254. package/dist/src/commands/review/ultrareviewEnabled.js +10 -0
  255. package/dist/src/commands/review.js +50 -0
  256. package/dist/src/commands/rewind/index.js +10 -0
  257. package/dist/src/commands/rewind/rewind.js +7 -0
  258. package/dist/src/commands/run/index.js +9 -0
  259. package/dist/src/commands/run/run.js +1126 -0
  260. package/dist/src/commands/sandbox-toggle/index.js +41 -0
  261. package/dist/src/commands/sandbox-toggle/sandbox-toggle.js +72 -0
  262. package/dist/src/commands/security-review.js +231 -0
  263. package/dist/src/commands/session/index.js +13 -0
  264. package/dist/src/commands/session/session.js +142 -0
  265. package/dist/src/commands/share/index.js +1 -0
  266. package/dist/src/commands/skills/index.js +8 -0
  267. package/dist/src/commands/skills/skills.js +97 -0
  268. package/dist/src/commands/stats/index.js +7 -0
  269. package/dist/src/commands/stats/stats.js +5 -0
  270. package/dist/src/commands/status/index.js +8 -0
  271. package/dist/src/commands/status/status.js +5 -0
  272. package/dist/src/commands/statusline.js +22 -0
  273. package/dist/src/commands/stickers/index.js +9 -0
  274. package/dist/src/commands/stickers/stickers.js +14 -0
  275. package/dist/src/commands/summary/index.js +1 -0
  276. package/dist/src/commands/tag/index.js +9 -0
  277. package/dist/src/commands/tag/tag.js +215 -0
  278. package/dist/src/commands/tasks/index.js +8 -0
  279. package/dist/src/commands/tasks/tasks.js +5 -0
  280. package/dist/src/commands/team/index.js +9 -0
  281. package/dist/src/commands/team/team.js +582 -0
  282. package/dist/src/commands/team-auto/index.js +9 -0
  283. package/dist/src/commands/team-auto/teamAuto.js +340 -0
  284. package/dist/src/commands/telegram/index.js +9 -0
  285. package/dist/src/commands/telegram/telegram.js +118 -0
  286. package/dist/src/commands/teleport/index.js +1 -0
  287. package/dist/src/commands/terminalSetup/index.js +18 -0
  288. package/dist/src/commands/terminalSetup/terminalSetup.js +491 -0
  289. package/dist/src/commands/theme/index.js +7 -0
  290. package/dist/src/commands/theme/theme.js +50 -0
  291. package/dist/src/commands/thinkback/index.js +9 -0
  292. package/dist/src/commands/thinkback/thinkback.js +527 -0
  293. package/dist/src/commands/thinkback-play/index.js +13 -0
  294. package/dist/src/commands/thinkback-play/thinkback-play.js +34 -0
  295. package/dist/src/commands/ultraplan.js +418 -0
  296. package/dist/src/commands/upgrade/index.js +12 -0
  297. package/dist/src/commands/upgrade/upgrade.js +37 -0
  298. package/dist/src/commands/version.js +18 -0
  299. package/dist/src/commands/vim/index.js +8 -0
  300. package/dist/src/commands/vim/vim.js +25 -0
  301. package/dist/src/commands/voice/index.js +14 -0
  302. package/dist/src/commands/voice/voice.js +130 -0
  303. package/dist/src/commands/whatsapp/index.js +9 -0
  304. package/dist/src/commands/whatsapp/whatsapp.js +326 -0
  305. package/dist/src/commands/workspace/index.js +9 -0
  306. package/dist/src/commands/workspace/workspace.js +701 -0
  307. package/dist/src/commands.js +635 -0
  308. package/dist/src/components/AgentProgressLine.js +111 -0
  309. package/dist/src/components/App.js +45 -0
  310. package/dist/src/components/ApproveApiKey.js +124 -0
  311. package/dist/src/components/AutoModeOptInDialog.js +140 -0
  312. package/dist/src/components/AutoUpdater.js +157 -0
  313. package/dist/src/components/AutoUpdaterWrapper.js +78 -0
  314. package/dist/src/components/AwsAuthStatusBox.js +88 -0
  315. package/dist/src/components/BaseTextInput.js +105 -0
  316. package/dist/src/components/BashModeProgress.js +48 -0
  317. package/dist/src/components/BridgeDialog.js +414 -0
  318. package/dist/src/components/BypassPermissionsModeDialog.js +87 -0
  319. package/dist/src/components/ChannelDowngradeDialog.js +100 -0
  320. package/dist/src/components/ClaudeCodeHint/PluginHintMenu.js +37 -0
  321. package/dist/src/components/ClaudeInChromeOnboarding.js +126 -0
  322. package/dist/src/components/ClaudeMdExternalIncludesDialog.js +137 -0
  323. package/dist/src/components/ClickableImageRef.js +64 -0
  324. package/dist/src/components/CompactSummary.js +119 -0
  325. package/dist/src/components/ConfigurableShortcutHint.js +34 -0
  326. package/dist/src/components/ConsoleOAuthFlow.js +758 -0
  327. package/dist/src/components/ContextSuggestions.js +43 -0
  328. package/dist/src/components/ContextVisualization.js +483 -0
  329. package/dist/src/components/CoordinatorAgentStatus.js +261 -0
  330. package/dist/src/components/CostThresholdDialog.js +48 -0
  331. package/dist/src/components/CtrlOToExpand.js +50 -0
  332. package/dist/src/components/CustomSelect/SelectMulti.js +149 -0
  333. package/dist/src/components/CustomSelect/index.js +2 -0
  334. package/dist/src/components/CustomSelect/option-map.js +32 -0
  335. package/dist/src/components/CustomSelect/select-input-option.js +426 -0
  336. package/dist/src/components/CustomSelect/select-option.js +23 -0
  337. package/dist/src/components/CustomSelect/select.js +518 -0
  338. package/dist/src/components/CustomSelect/use-multi-select-state.js +214 -0
  339. package/dist/src/components/CustomSelect/use-select-input.js +170 -0
  340. package/dist/src/components/CustomSelect/use-select-navigation.js +366 -0
  341. package/dist/src/components/CustomSelect/use-select-state.js +22 -0
  342. package/dist/src/components/DesktopHandoff.js +195 -0
  343. package/dist/src/components/DesktopUpsell/DesktopUpsellStartup.js +173 -0
  344. package/dist/src/components/DevBar.js +50 -0
  345. package/dist/src/components/DevChannelsDialog.js +103 -0
  346. package/dist/src/components/DiagnosticsDisplay.js +91 -0
  347. package/dist/src/components/EffortCallout.js +264 -0
  348. package/dist/src/components/EffortIndicator.js +29 -0
  349. package/dist/src/components/ExitFlow.js +40 -0
  350. package/dist/src/components/ExportDialog.js +101 -0
  351. package/dist/src/components/FallbackToolUseErrorMessage.js +115 -0
  352. package/dist/src/components/FallbackToolUseRejectedMessage.js +16 -0
  353. package/dist/src/components/FastIcon.js +42 -0
  354. package/dist/src/components/Feedback.js +439 -0
  355. package/dist/src/components/FeedbackSurvey/FeedbackSurvey.js +150 -0
  356. package/dist/src/components/FeedbackSurvey/FeedbackSurveyView.js +103 -0
  357. package/dist/src/components/FeedbackSurvey/TranscriptSharePrompt.js +83 -0
  358. package/dist/src/components/FeedbackSurvey/submitTranscriptShare.js +81 -0
  359. package/dist/src/components/FeedbackSurvey/useDebouncedDigitInput.js +51 -0
  360. package/dist/src/components/FeedbackSurvey/useFeedbackSurvey.js +258 -0
  361. package/dist/src/components/FeedbackSurvey/useMemorySurvey.js +191 -0
  362. package/dist/src/components/FeedbackSurvey/usePostCompactSurvey.js +202 -0
  363. package/dist/src/components/FeedbackSurvey/useSurveyState.js +80 -0
  364. package/dist/src/components/FileEditToolDiff.js +166 -0
  365. package/dist/src/components/FileEditToolUpdatedMessage.js +111 -0
  366. package/dist/src/components/FileEditToolUseRejectedMessage.js +157 -0
  367. package/dist/src/components/FilePathLink.js +34 -0
  368. package/dist/src/components/FullscreenLayout.js +578 -0
  369. package/dist/src/components/GlobalSearchDialog.js +339 -0
  370. package/dist/src/components/HelpV2/Commands.js +65 -0
  371. package/dist/src/components/HelpV2/General.js +24 -0
  372. package/dist/src/components/HelpV2/HelpV2.js +186 -0
  373. package/dist/src/components/HighlightedCode/Fallback.js +193 -0
  374. package/dist/src/components/HighlightedCode.js +184 -0
  375. package/dist/src/components/HistorySearchDialog.js +92 -0
  376. package/dist/src/components/IdeAutoConnectDialog.js +153 -0
  377. package/dist/src/components/IdeOnboardingDialog.js +174 -0
  378. package/dist/src/components/IdeStatusIndicator.js +49 -0
  379. package/dist/src/components/IdleReturnDialog.js +116 -0
  380. package/dist/src/components/InterruptedByUser.js +15 -0
  381. package/dist/src/components/InvalidConfigDialog.js +134 -0
  382. package/dist/src/components/InvalidSettingsDialog.js +84 -0
  383. package/dist/src/components/KeybindingWarnings.js +54 -0
  384. package/dist/src/components/LanguagePicker.js +84 -0
  385. package/dist/src/components/LogSelector.js +1579 -0
  386. package/dist/src/components/LogoV2/AnimatedAsterisk.js +42 -0
  387. package/dist/src/components/LogoV2/AnimatedClawd.js +111 -0
  388. package/dist/src/components/LogoV2/ChannelsNotice.js +258 -0
  389. package/dist/src/components/LogoV2/Clawd.js +12 -0
  390. package/dist/src/components/LogoV2/CondensedLogo.js +144 -0
  391. package/dist/src/components/LogoV2/EmergencyTip.js +47 -0
  392. package/dist/src/components/LogoV2/Feed.js +84 -0
  393. package/dist/src/components/LogoV2/FeedColumn.js +55 -0
  394. package/dist/src/components/LogoV2/GuestPassesUpsell.js +71 -0
  395. package/dist/src/components/LogoV2/LogoV2.js +564 -0
  396. package/dist/src/components/LogoV2/Opus1mMergeNotice.js +56 -0
  397. package/dist/src/components/LogoV2/OverageCreditUpsell.js +160 -0
  398. package/dist/src/components/LogoV2/VoiceModeNotice.js +70 -0
  399. package/dist/src/components/LogoV2/WelcomeV2.js +8 -0
  400. package/dist/src/components/LogoV2/feedConfigs.js +78 -0
  401. package/dist/src/components/LspRecommendation/LspRecommendationMenu.js +46 -0
  402. package/dist/src/components/MCPServerApprovalDialog.js +113 -0
  403. package/dist/src/components/MCPServerDesktopImportDialog.js +206 -0
  404. package/dist/src/components/MCPServerDialogCopy.js +15 -0
  405. package/dist/src/components/MCPServerMultiselectDialog.js +133 -0
  406. package/dist/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.js +149 -0
  407. package/dist/src/components/ManagedSettingsSecurityDialog/utils.js +105 -0
  408. package/dist/src/components/Markdown.js +217 -0
  409. package/dist/src/components/MarkdownTable.js +279 -0
  410. package/dist/src/components/MemoryUsageIndicator.js +27 -0
  411. package/dist/src/components/Message.js +566 -0
  412. package/dist/src/components/MessageModel.js +36 -0
  413. package/dist/src/components/MessageResponse.js +73 -0
  414. package/dist/src/components/MessageRow.js +346 -0
  415. package/dist/src/components/MessageSelector.js +743 -0
  416. package/dist/src/components/MessageTimestamp.js +57 -0
  417. package/dist/src/components/Messages.js +637 -0
  418. package/dist/src/components/ModelPicker.js +493 -0
  419. package/dist/src/components/NativeAutoUpdater.js +153 -0
  420. package/dist/src/components/NotebookEditToolUseRejectedMessage.js +83 -0
  421. package/dist/src/components/OffscreenFreeze.js +35 -0
  422. package/dist/src/components/Onboarding.js +174 -0
  423. package/dist/src/components/OutputStylePicker.js +102 -0
  424. package/dist/src/components/PackageManagerAutoUpdater.js +100 -0
  425. package/dist/src/components/Passes/Passes.js +113 -0
  426. package/dist/src/components/PrBadge.js +90 -0
  427. package/dist/src/components/PressEnterToContinue.js +15 -0
  428. package/dist/src/components/PromptInput/HistorySearchInput.js +44 -0
  429. package/dist/src/components/PromptInput/IssueFlagBanner.js +8 -0
  430. package/dist/src/components/PromptInput/Notifications.js +221 -0
  431. package/dist/src/components/PromptInput/PromptInput.js +1998 -0
  432. package/dist/src/components/PromptInput/PromptInputFooter.js +84 -0
  433. package/dist/src/components/PromptInput/PromptInputFooterLeftSide.js +409 -0
  434. package/dist/src/components/PromptInput/PromptInputFooterSuggestions.js +280 -0
  435. package/dist/src/components/PromptInput/PromptInputHelpMenu.js +379 -0
  436. package/dist/src/components/PromptInput/PromptInputModeIndicator.js +72 -0
  437. package/dist/src/components/PromptInput/PromptInputQueuedCommands.js +105 -0
  438. package/dist/src/components/PromptInput/PromptInputStashNotice.js +20 -0
  439. package/dist/src/components/PromptInput/SandboxPromptFooterHint.js +65 -0
  440. package/dist/src/components/PromptInput/ShimmeredInput.js +132 -0
  441. package/dist/src/components/PromptInput/VoiceIndicator.js +136 -0
  442. package/dist/src/components/PromptInput/inputModes.js +24 -0
  443. package/dist/src/components/PromptInput/inputPaste.js +62 -0
  444. package/dist/src/components/PromptInput/useMaybeTruncateInput.js +33 -0
  445. package/dist/src/components/PromptInput/usePromptInputPlaceholder.js +55 -0
  446. package/dist/src/components/PromptInput/useShowFastIconHint.js +23 -0
  447. package/dist/src/components/PromptInput/useSwarmBanner.js +112 -0
  448. package/dist/src/components/PromptInput/utils.js +50 -0
  449. package/dist/src/components/QuickOpenDialog.js +243 -0
  450. package/dist/src/components/RemoteCallout.js +53 -0
  451. package/dist/src/components/RemoteEnvironmentDialog.js +345 -0
  452. package/dist/src/components/ResumeTask.js +173 -0
  453. package/dist/src/components/SandboxViolationExpandedView.js +102 -0
  454. package/dist/src/components/ScrollKeybindingHandler.js +982 -0
  455. package/dist/src/components/SearchBox.js +55 -0
  456. package/dist/src/components/SentryErrorBoundary.js +16 -0
  457. package/dist/src/components/SessionBackgroundHint.js +104 -0
  458. package/dist/src/components/SessionPreview.js +200 -0
  459. package/dist/src/components/Settings/Config.js +1628 -0
  460. package/dist/src/components/Settings/Settings.js +129 -0
  461. package/dist/src/components/Settings/Status.js +239 -0
  462. package/dist/src/components/Settings/Usage.js +341 -0
  463. package/dist/src/components/ShowInIDEPrompt.js +151 -0
  464. package/dist/src/components/SkillImprovementSurvey.js +130 -0
  465. package/dist/src/components/Spinner/FlashingChar.js +51 -0
  466. package/dist/src/components/Spinner/GlimmerMessage.js +328 -0
  467. package/dist/src/components/Spinner/ShimmerChar.js +22 -0
  468. package/dist/src/components/Spinner/SpinnerAnimationRow.js +169 -0
  469. package/dist/src/components/Spinner/SpinnerGlyph.js +69 -0
  470. package/dist/src/components/Spinner/TeammateSpinnerLine.js +170 -0
  471. package/dist/src/components/Spinner/TeammateSpinnerTree.js +268 -0
  472. package/dist/src/components/Spinner/index.js +11 -0
  473. package/dist/src/components/Spinner/teammateSelectHint.js +1 -0
  474. package/dist/src/components/Spinner/useShimmerAnimation.js +22 -0
  475. package/dist/src/components/Spinner/useStalledAnimation.js +63 -0
  476. package/dist/src/components/Spinner/utils.js +77 -0
  477. package/dist/src/components/Spinner.js +470 -0
  478. package/dist/src/components/Stats.js +1000 -0
  479. package/dist/src/components/StatusLine.js +288 -0
  480. package/dist/src/components/StatusNotices.js +50 -0
  481. package/dist/src/components/StructuredDiff/Fallback.js +335 -0
  482. package/dist/src/components/StructuredDiff/colorDiff.js +26 -0
  483. package/dist/src/components/StructuredDiff.js +152 -0
  484. package/dist/src/components/StructuredDiffList.js +8 -0
  485. package/dist/src/components/TagTabs.js +100 -0
  486. package/dist/src/components/TaskListV2.js +333 -0
  487. package/dist/src/components/TeammateViewHeader.js +87 -0
  488. package/dist/src/components/TeleportError.js +191 -0
  489. package/dist/src/components/TeleportProgress.js +130 -0
  490. package/dist/src/components/TeleportRepoMismatchDialog.js +98 -0
  491. package/dist/src/components/TeleportResumeWrapper.js +158 -0
  492. package/dist/src/components/TeleportStash.js +82 -0
  493. package/dist/src/components/TextInput.js +108 -0
  494. package/dist/src/components/ThemePicker.js +330 -0
  495. package/dist/src/components/ThinkingToggle.js +153 -0
  496. package/dist/src/components/TokenWarning.js +172 -0
  497. package/dist/src/components/ToolUseLoader.js +34 -0
  498. package/dist/src/components/TrustDialog/TrustDialog.js +113 -0
  499. package/dist/src/components/TrustDialog/utils.js +199 -0
  500. package/dist/src/components/ValidationErrorsList.js +146 -0
  501. package/dist/src/components/VimTextInput.js +136 -0
  502. package/dist/src/components/VirtualMessageList.js +892 -0
  503. package/dist/src/components/WorkflowMultiselectDialog.js +118 -0
  504. package/dist/src/components/WorktreeExitDialog.js +222 -0
  505. package/dist/src/components/agents/AgentDetail.js +226 -0
  506. package/dist/src/components/agents/AgentEditor.js +146 -0
  507. package/dist/src/components/agents/AgentNavigationFooter.js +21 -0
  508. package/dist/src/components/agents/AgentsList.js +436 -0
  509. package/dist/src/components/agents/AgentsMenu.js +848 -0
  510. package/dist/src/components/agents/ColorPicker.js +110 -0
  511. package/dist/src/components/agents/ModelSelector.js +62 -0
  512. package/dist/src/components/agents/SnapshotUpdateDialog.js +16 -0
  513. package/dist/src/components/agents/ToolSelector.js +557 -0
  514. package/dist/src/components/agents/agentFileUtils.js +187 -0
  515. package/dist/src/components/agents/generateAgent.js +161 -0
  516. package/dist/src/components/agents/new-agent-creation/CreateAgentWizard.js +88 -0
  517. package/dist/src/components/agents/new-agent-creation/wizard-steps/ColorStep.js +80 -0
  518. package/dist/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.js +386 -0
  519. package/dist/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.js +63 -0
  520. package/dist/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.js +126 -0
  521. package/dist/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.js +118 -0
  522. package/dist/src/components/agents/new-agent-creation/wizard-steps/LocationStep.js +92 -0
  523. package/dist/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.js +120 -0
  524. package/dist/src/components/agents/new-agent-creation/wizard-steps/MethodStep.js +79 -0
  525. package/dist/src/components/agents/new-agent-creation/wizard-steps/ModelStep.js +48 -0
  526. package/dist/src/components/agents/new-agent-creation/wizard-steps/PromptStep.js +131 -0
  527. package/dist/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.js +51 -0
  528. package/dist/src/components/agents/new-agent-creation/wizard-steps/TypeStep.js +100 -0
  529. package/dist/src/components/agents/types.js +4 -0
  530. package/dist/src/components/agents/utils.js +14 -0
  531. package/dist/src/components/agents/validateAgent.js +79 -0
  532. package/dist/src/components/design-system/Byline.js +72 -0
  533. package/dist/src/components/design-system/Dialog.js +116 -0
  534. package/dist/src/components/design-system/Divider.js +109 -0
  535. package/dist/src/components/design-system/FuzzyPicker.js +187 -0
  536. package/dist/src/components/design-system/KeyboardShortcutHint.js +67 -0
  537. package/dist/src/components/design-system/ListItem.js +183 -0
  538. package/dist/src/components/design-system/LoadingState.js +68 -0
  539. package/dist/src/components/design-system/Pane.js +68 -0
  540. package/dist/src/components/design-system/ProgressBar.js +62 -0
  541. package/dist/src/components/design-system/Ratchet.js +71 -0
  542. package/dist/src/components/design-system/StatusIcon.js +69 -0
  543. package/dist/src/components/design-system/Tabs.js +269 -0
  544. package/dist/src/components/design-system/ThemeProvider.js +137 -0
  545. package/dist/src/components/design-system/ThemedBox.js +125 -0
  546. package/dist/src/components/design-system/ThemedText.js +60 -0
  547. package/dist/src/components/design-system/color.js +22 -0
  548. package/dist/src/components/diff/DiffDetailView.js +284 -0
  549. package/dist/src/components/diff/DiffDialog.js +387 -0
  550. package/dist/src/components/diff/DiffFileList.js +291 -0
  551. package/dist/src/components/grove/Grove.js +483 -0
  552. package/dist/src/components/hooks/HooksConfigMenu.js +570 -0
  553. package/dist/src/components/hooks/PromptDialog.js +81 -0
  554. package/dist/src/components/hooks/SelectEventMode.js +117 -0
  555. package/dist/src/components/hooks/SelectHookMode.js +93 -0
  556. package/dist/src/components/hooks/SelectMatcherMode.js +124 -0
  557. package/dist/src/components/hooks/ViewHookMode.js +197 -0
  558. package/dist/src/components/mcp/CapabilitiesSection.js +55 -0
  559. package/dist/src/components/mcp/ElicitationDialog.js +945 -0
  560. package/dist/src/components/mcp/MCPAgentServerMenu.js +95 -0
  561. package/dist/src/components/mcp/MCPListPanel.js +504 -0
  562. package/dist/src/components/mcp/MCPReconnect.js +168 -0
  563. package/dist/src/components/mcp/MCPRemoteServerMenu.js +460 -0
  564. package/dist/src/components/mcp/MCPSettings.js +414 -0
  565. package/dist/src/components/mcp/MCPStdioServerMenu.js +95 -0
  566. package/dist/src/components/mcp/MCPToolDetailView.js +219 -0
  567. package/dist/src/components/mcp/MCPToolListView.js +136 -0
  568. package/dist/src/components/mcp/McpParsingWarnings.js +211 -0
  569. package/dist/src/components/mcp/index.js +8 -0
  570. package/dist/src/components/mcp/types.js +3 -0
  571. package/dist/src/components/mcp/utils/reconnectHelpers.js +35 -0
  572. package/dist/src/components/memory/MemoryFileSelector.js +455 -0
  573. package/dist/src/components/memory/MemoryUpdateNotification.js +42 -0
  574. package/dist/src/components/messageActions.js +418 -0
  575. package/dist/src/components/messages/AdvisorMessage.js +151 -0
  576. package/dist/src/components/messages/AssistantRedactedThinkingMessage.js +27 -0
  577. package/dist/src/components/messages/AssistantTextMessage.js +274 -0
  578. package/dist/src/components/messages/AssistantThinkingMessage.js +69 -0
  579. package/dist/src/components/messages/AssistantToolUseMessage.js +323 -0
  580. package/dist/src/components/messages/AttachmentMessage.js +418 -0
  581. package/dist/src/components/messages/CollapsedReadSearchContent.js +362 -0
  582. package/dist/src/components/messages/CompactBoundaryMessage.js +18 -0
  583. package/dist/src/components/messages/GroupedToolUseContent.js +37 -0
  584. package/dist/src/components/messages/HighlightedThinkingText.js +164 -0
  585. package/dist/src/components/messages/HookProgressMessage.js +110 -0
  586. package/dist/src/components/messages/PlanApprovalMessage.js +212 -0
  587. package/dist/src/components/messages/RateLimitMessage.js +149 -0
  588. package/dist/src/components/messages/ShutdownMessage.js +123 -0
  589. package/dist/src/components/messages/SystemAPIErrorMessage.js +135 -0
  590. package/dist/src/components/messages/SystemTextMessage.js +843 -0
  591. package/dist/src/components/messages/TaskAssignmentMessage.js +71 -0
  592. package/dist/src/components/messages/UserAgentNotificationMessage.js +77 -0
  593. package/dist/src/components/messages/UserBashInputMessage.js +51 -0
  594. package/dist/src/components/messages/UserBashOutputMessage.js +54 -0
  595. package/dist/src/components/messages/UserChannelMessage.js +129 -0
  596. package/dist/src/components/messages/UserCommandMessage.js +106 -0
  597. package/dist/src/components/messages/UserImageMessage.js +53 -0
  598. package/dist/src/components/messages/UserLocalCommandOutputMessage.js +169 -0
  599. package/dist/src/components/messages/UserMemoryInputMessage.js +72 -0
  600. package/dist/src/components/messages/UserPlanMessage.js +37 -0
  601. package/dist/src/components/messages/UserPromptMessage.js +63 -0
  602. package/dist/src/components/messages/UserResourceUpdateMessage.js +101 -0
  603. package/dist/src/components/messages/UserTeammateMessage.js +156 -0
  604. package/dist/src/components/messages/UserTextMessage.js +271 -0
  605. package/dist/src/components/messages/UserToolResultMessage/RejectedPlanMessage.js +27 -0
  606. package/dist/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.js +16 -0
  607. package/dist/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +16 -0
  608. package/dist/src/components/messages/UserToolResultMessage/UserToolErrorMessage.js +91 -0
  609. package/dist/src/components/messages/UserToolResultMessage/UserToolRejectMessage.js +73 -0
  610. package/dist/src/components/messages/UserToolResultMessage/UserToolResultMessage.js +83 -0
  611. package/dist/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +58 -0
  612. package/dist/src/components/messages/UserToolResultMessage/utils.js +43 -0
  613. package/dist/src/components/messages/nullRenderingAttachments.js +58 -0
  614. package/dist/src/components/messages/teamMemCollapsed.js +142 -0
  615. package/dist/src/components/messages/teamMemSaved.js +17 -0
  616. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +654 -0
  617. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.js +219 -0
  618. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.js +227 -0
  619. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.js +174 -0
  620. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.js +444 -0
  621. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.js +136 -0
  622. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.js +100 -0
  623. package/dist/src/components/permissions/BashPermissionRequest/BashPermissionRequest.js +404 -0
  624. package/dist/src/components/permissions/BashPermissionRequest/bashToolUseOptions.js +110 -0
  625. package/dist/src/components/permissions/ComputerUseApproval/ComputerUseApproval.js +448 -0
  626. package/dist/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.js +125 -0
  627. package/dist/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.js +649 -0
  628. package/dist/src/components/permissions/FallbackPermissionRequest.js +348 -0
  629. package/dist/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +184 -0
  630. package/dist/src/components/permissions/FilePermissionDialog/FilePermissionDialog.js +108 -0
  631. package/dist/src/components/permissions/FilePermissionDialog/ideDiffConfig.js +13 -0
  632. package/dist/src/components/permissions/FilePermissionDialog/permissionOptions.js +136 -0
  633. package/dist/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.js +131 -0
  634. package/dist/src/components/permissions/FilePermissionDialog/usePermissionHandler.js +86 -0
  635. package/dist/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +163 -0
  636. package/dist/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +78 -0
  637. package/dist/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +112 -0
  638. package/dist/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.js +163 -0
  639. package/dist/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.js +217 -0
  640. package/dist/src/components/permissions/PermissionDecisionDebugInfo.js +466 -0
  641. package/dist/src/components/permissions/PermissionDialog.js +54 -0
  642. package/dist/src/components/permissions/PermissionExplanation.js +269 -0
  643. package/dist/src/components/permissions/PermissionPrompt.js +316 -0
  644. package/dist/src/components/permissions/PermissionRequest.js +160 -0
  645. package/dist/src/components/permissions/PermissionRequestTitle.js +57 -0
  646. package/dist/src/components/permissions/PermissionRuleExplanation.js +116 -0
  647. package/dist/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.js +178 -0
  648. package/dist/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.js +73 -0
  649. package/dist/src/components/permissions/SandboxPermissionRequest.js +161 -0
  650. package/dist/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.js +228 -0
  651. package/dist/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.js +384 -0
  652. package/dist/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.js +258 -0
  653. package/dist/src/components/permissions/WorkerBadge.js +43 -0
  654. package/dist/src/components/permissions/WorkerPendingPermission.js +106 -0
  655. package/dist/src/components/permissions/hooks.js +163 -0
  656. package/dist/src/components/permissions/rules/AddPermissionRules.js +172 -0
  657. package/dist/src/components/permissions/rules/AddWorkspaceDirectory.js +334 -0
  658. package/dist/src/components/permissions/rules/PermissionRuleDescription.js +77 -0
  659. package/dist/src/components/permissions/rules/PermissionRuleInput.js +135 -0
  660. package/dist/src/components/permissions/rules/PermissionRuleList.js +1189 -0
  661. package/dist/src/components/permissions/rules/RecentDenialsTab.js +204 -0
  662. package/dist/src/components/permissions/rules/RemoveWorkspaceDirectory.js +102 -0
  663. package/dist/src/components/permissions/rules/WorkspaceTab.js +132 -0
  664. package/dist/src/components/permissions/shellPermissionHelpers.js +111 -0
  665. package/dist/src/components/permissions/useShellPermissionFeedback.js +108 -0
  666. package/dist/src/components/permissions/utils.js +14 -0
  667. package/dist/src/components/sandbox/SandboxConfigTab.js +47 -0
  668. package/dist/src/components/sandbox/SandboxDependenciesTab.js +122 -0
  669. package/dist/src/components/sandbox/SandboxDoctorSection.js +46 -0
  670. package/dist/src/components/sandbox/SandboxOverridesTab.js +192 -0
  671. package/dist/src/components/sandbox/SandboxSettings.js +296 -0
  672. package/dist/src/components/shell/ExpandShellOutputContext.js +33 -0
  673. package/dist/src/components/shell/OutputLine.js +110 -0
  674. package/dist/src/components/shell/ShellProgressMessage.js +143 -0
  675. package/dist/src/components/shell/ShellTimeDisplay.js +71 -0
  676. package/dist/src/components/skills/SkillsMenu.js +238 -0
  677. package/dist/src/components/tasks/AsyncAgentDetailDialog.js +234 -0
  678. package/dist/src/components/tasks/BackgroundTask.js +363 -0
  679. package/dist/src/components/tasks/BackgroundTaskStatus.js +419 -0
  680. package/dist/src/components/tasks/BackgroundTasksDialog.js +496 -0
  681. package/dist/src/components/tasks/DreamDetailDialog.js +250 -0
  682. package/dist/src/components/tasks/InProcessTeammateDetailDialog.js +274 -0
  683. package/dist/src/components/tasks/RemoteSessionDetailDialog.js +868 -0
  684. package/dist/src/components/tasks/RemoteSessionProgress.js +249 -0
  685. package/dist/src/components/tasks/ShellDetailDialog.js +403 -0
  686. package/dist/src/components/tasks/ShellProgress.js +76 -0
  687. package/dist/src/components/tasks/renderToolActivity.js +28 -0
  688. package/dist/src/components/tasks/taskStatusUtils.js +94 -0
  689. package/dist/src/components/teams/TeamStatus.js +76 -0
  690. package/dist/src/components/teams/TeamsDialog.js +672 -0
  691. package/dist/src/components/ui/ContextCard.js +5 -0
  692. package/dist/src/components/ui/OrderedList.js +66 -0
  693. package/dist/src/components/ui/OrderedListItem.js +41 -0
  694. package/dist/src/components/ui/TreeSelect.js +300 -0
  695. package/dist/src/components/wizard/WizardDialogLayout.js +47 -0
  696. package/dist/src/components/wizard/WizardNavigationFooter.js +10 -0
  697. package/dist/src/components/wizard/WizardProvider.js +217 -0
  698. package/dist/src/components/wizard/index.js +4 -0
  699. package/dist/src/components/wizard/useWizard.js +9 -0
  700. package/dist/src/constants/apiLimits.js +81 -0
  701. package/dist/src/constants/betas.js +45 -0
  702. package/dist/src/constants/common.js +29 -0
  703. package/dist/src/constants/cyberRiskInstruction.js +24 -0
  704. package/dist/src/constants/errorIds.js +14 -0
  705. package/dist/src/constants/figures.js +38 -0
  706. package/dist/src/constants/files.js +150 -0
  707. package/dist/src/constants/github-app.js +139 -0
  708. package/dist/src/constants/keys.js +10 -0
  709. package/dist/src/constants/messages.js +1 -0
  710. package/dist/src/constants/oauth.js +221 -0
  711. package/dist/src/constants/outputStyles.js +162 -0
  712. package/dist/src/constants/product.js +56 -0
  713. package/dist/src/constants/prompts.js +752 -0
  714. package/dist/src/constants/spinnerVerbs.js +202 -0
  715. package/dist/src/constants/system.js +77 -0
  716. package/dist/src/constants/systemPromptSections.js +39 -0
  717. package/dist/src/constants/toolLimits.js +50 -0
  718. package/dist/src/constants/tools.js +103 -0
  719. package/dist/src/constants/turnCompletionVerbs.js +12 -0
  720. package/dist/src/constants/xml.js +73 -0
  721. package/dist/src/context/QueuedMessageContext.js +51 -0
  722. package/dist/src/context/fpsMetrics.js +22 -0
  723. package/dist/src/context/mailbox.js +35 -0
  724. package/dist/src/context/modalContext.js +34 -0
  725. package/dist/src/context/notifications.js +199 -0
  726. package/dist/src/context/overlayContext.js +149 -0
  727. package/dist/src/context/promptOverlayContext.js +118 -0
  728. package/dist/src/context/stats.js +207 -0
  729. package/dist/src/context/voice.js +74 -0
  730. package/dist/src/context.js +146 -0
  731. package/dist/src/coordinator/coordinatorMode.js +349 -0
  732. package/dist/src/cost-tracker.js +208 -0
  733. package/dist/src/costHook.js +17 -0
  734. package/dist/src/daemon/main.js +16 -0
  735. package/dist/src/daemon/workerRegistry.js +16 -0
  736. package/dist/src/dialogLaunchers.js +68 -0
  737. package/dist/src/entrypoints/agentSdkTypes.js +202 -0
  738. package/dist/src/entrypoints/cli.js +252 -0
  739. package/dist/src/entrypoints/init.js +265 -0
  740. package/dist/src/entrypoints/mcp.js +142 -0
  741. package/dist/src/entrypoints/sandboxTypes.js +112 -0
  742. package/dist/src/entrypoints/sdk/controlSchemas.js +452 -0
  743. package/dist/src/entrypoints/sdk/controlTypes.js +1 -0
  744. package/dist/src/entrypoints/sdk/coreSchemas.js +1331 -0
  745. package/dist/src/entrypoints/sdk/coreTypes.generated.js +1 -0
  746. package/dist/src/entrypoints/sdk/coreTypes.js +49 -0
  747. package/dist/src/entrypoints/sdk/runtimeTypes.js +1 -0
  748. package/dist/src/entrypoints/sdk/toolTypes.js +1 -0
  749. package/dist/src/environment-runner/main.js +16 -0
  750. package/dist/src/history.js +386 -0
  751. package/dist/src/hooks/fileSuggestions.js +635 -0
  752. package/dist/src/hooks/notifs/useAutoModeUnavailableNotification.js +47 -0
  753. package/dist/src/hooks/notifs/useCanSwitchToExistingSubscription.js +57 -0
  754. package/dist/src/hooks/notifs/useDeprecationWarningNotification.js +43 -0
  755. package/dist/src/hooks/notifs/useFastModeNotification.js +164 -0
  756. package/dist/src/hooks/notifs/useIDEStatusIndicator.js +174 -0
  757. package/dist/src/hooks/notifs/useInstallMessages.js +27 -0
  758. package/dist/src/hooks/notifs/useLspInitializationNotification.js +144 -0
  759. package/dist/src/hooks/notifs/useMcpConnectivityStatus.js +80 -0
  760. package/dist/src/hooks/notifs/useModelMigrationNotifications.js +53 -0
  761. package/dist/src/hooks/notifs/useNpmDeprecationNotification.js +24 -0
  762. package/dist/src/hooks/notifs/usePluginAutoupdateNotification.js +82 -0
  763. package/dist/src/hooks/notifs/usePluginInstallationStatus.js +127 -0
  764. package/dist/src/hooks/notifs/useRateLimitWarningNotification.js +118 -0
  765. package/dist/src/hooks/notifs/useSettingsErrors.js +64 -0
  766. package/dist/src/hooks/notifs/useStartupNotification.js +33 -0
  767. package/dist/src/hooks/notifs/useTeammateShutdownNotification.js +64 -0
  768. package/dist/src/hooks/renderPlaceholder.js +26 -0
  769. package/dist/src/hooks/toolPermission/PermissionContext.js +211 -0
  770. package/dist/src/hooks/toolPermission/handlers/coordinatorHandler.js +44 -0
  771. package/dist/src/hooks/toolPermission/handlers/interactiveHandler.js +397 -0
  772. package/dist/src/hooks/toolPermission/handlers/swarmWorkerHandler.js +108 -0
  773. package/dist/src/hooks/toolPermission/permissionLogging.js +145 -0
  774. package/dist/src/hooks/unifiedSuggestions.js +130 -0
  775. package/dist/src/hooks/useAfterFirstRender.js +12 -0
  776. package/dist/src/hooks/useApiKeyVerification.js +63 -0
  777. package/dist/src/hooks/useArrowKeyHistory.js +203 -0
  778. package/dist/src/hooks/useAssistantHistory.js +194 -0
  779. package/dist/src/hooks/useAwaySummary.js +105 -0
  780. package/dist/src/hooks/useBackgroundTaskNavigation.js +204 -0
  781. package/dist/src/hooks/useBlink.js +28 -0
  782. package/dist/src/hooks/useCanUseTool.js +192 -0
  783. package/dist/src/hooks/useCancelRequest.js +195 -0
  784. package/dist/src/hooks/useChromeExtensionNotification.js +49 -0
  785. package/dist/src/hooks/useClaudeCodeHintRecommendation.js +117 -0
  786. package/dist/src/hooks/useClipboardImageHint.js +59 -0
  787. package/dist/src/hooks/useCommandKeybindings.js +87 -0
  788. package/dist/src/hooks/useCommandQueue.js +10 -0
  789. package/dist/src/hooks/useCopyOnSelect.js +88 -0
  790. package/dist/src/hooks/useDeferredHookMessages.js +43 -0
  791. package/dist/src/hooks/useDiffData.js +69 -0
  792. package/dist/src/hooks/useDiffInIDE.js +252 -0
  793. package/dist/src/hooks/useDirectConnect.js +150 -0
  794. package/dist/src/hooks/useDoublePress.js +44 -0
  795. package/dist/src/hooks/useDynamicConfig.js +17 -0
  796. package/dist/src/hooks/useElapsedTime.js +25 -0
  797. package/dist/src/hooks/useExitOnCtrlCD.js +57 -0
  798. package/dist/src/hooks/useExitOnCtrlCDWithKeybindings.js +17 -0
  799. package/dist/src/hooks/useFileHistorySnapshotInit.js +14 -0
  800. package/dist/src/hooks/useGlobalKeybindings.js +215 -0
  801. package/dist/src/hooks/useHistorySearch.js +241 -0
  802. package/dist/src/hooks/useIDEIntegration.js +56 -0
  803. package/dist/src/hooks/useIdeAtMentioned.js +51 -0
  804. package/dist/src/hooks/useIdeConnectionStatus.js +21 -0
  805. package/dist/src/hooks/useIdeLogging.js +29 -0
  806. package/dist/src/hooks/useIdeSelection.js +106 -0
  807. package/dist/src/hooks/useInboxPoller.js +709 -0
  808. package/dist/src/hooks/useInputBuffer.js +73 -0
  809. package/dist/src/hooks/useIssueFlagBanner.js +115 -0
  810. package/dist/src/hooks/useLogMessages.js +98 -0
  811. package/dist/src/hooks/useLspPluginRecommendation.js +176 -0
  812. package/dist/src/hooks/useMailboxBridge.js +15 -0
  813. package/dist/src/hooks/useMainLoopModel.js +25 -0
  814. package/dist/src/hooks/useManagePlugins.js +261 -0
  815. package/dist/src/hooks/useMemoryUsage.js +28 -0
  816. package/dist/src/hooks/useMergedClients.js +11 -0
  817. package/dist/src/hooks/useMergedCommands.js +10 -0
  818. package/dist/src/hooks/useMergedTools.js +32 -0
  819. package/dist/src/hooks/useMinDisplayTime.js +26 -0
  820. package/dist/src/hooks/useNotifyAfterTimeout.js +51 -0
  821. package/dist/src/hooks/useOfficialMarketplaceNotification.js +46 -0
  822. package/dist/src/hooks/usePasteHandler.js +188 -0
  823. package/dist/src/hooks/usePluginRecommendationBase.js +101 -0
  824. package/dist/src/hooks/usePrStatus.js +91 -0
  825. package/dist/src/hooks/usePromptSuggestion.js +128 -0
  826. package/dist/src/hooks/usePromptsFromClaudeInChrome.js +66 -0
  827. package/dist/src/hooks/useQueueProcessor.js +46 -0
  828. package/dist/src/hooks/useRemoteSession.js +431 -0
  829. package/dist/src/hooks/useReplBridge.js +717 -0
  830. package/dist/src/hooks/useSSHSession.js +167 -0
  831. package/dist/src/hooks/useScheduledTasks.js +104 -0
  832. package/dist/src/hooks/useSearchInput.js +302 -0
  833. package/dist/src/hooks/useSessionBackgrounding.js +132 -0
  834. package/dist/src/hooks/useSettings.js +10 -0
  835. package/dist/src/hooks/useSettingsChange.js +13 -0
  836. package/dist/src/hooks/useSkillImprovementSurvey.js +69 -0
  837. package/dist/src/hooks/useSkillsChange.js +51 -0
  838. package/dist/src/hooks/useSwarmInitialization.js +67 -0
  839. package/dist/src/hooks/useSwarmPermissionPoller.js +215 -0
  840. package/dist/src/hooks/useTaskListWatcher.js +157 -0
  841. package/dist/src/hooks/useTasksV2.js +220 -0
  842. package/dist/src/hooks/useTeammateViewAutoExit.js +55 -0
  843. package/dist/src/hooks/useTelegramMirror.js +47 -0
  844. package/dist/src/hooks/useTeleportResume.js +81 -0
  845. package/dist/src/hooks/useTerminalSize.js +9 -0
  846. package/dist/src/hooks/useTextInput.js +397 -0
  847. package/dist/src/hooks/useTimeout.js +10 -0
  848. package/dist/src/hooks/useTurnDiffs.js +160 -0
  849. package/dist/src/hooks/useTypeahead.js +1617 -0
  850. package/dist/src/hooks/useUpdateNotification.js +22 -0
  851. package/dist/src/hooks/useVimInput.js +232 -0
  852. package/dist/src/hooks/useVirtualScroll.js +627 -0
  853. package/dist/src/hooks/useVoice.js +954 -0
  854. package/dist/src/hooks/useVoiceEnabled.js +21 -0
  855. package/dist/src/hooks/useVoiceIntegration.js +631 -0
  856. package/dist/src/hooks/useWhatsAppMirror.js +46 -0
  857. package/dist/src/index.js +18 -0
  858. package/dist/src/ink/Ansi.js +269 -0
  859. package/dist/src/ink/bidi.js +117 -0
  860. package/dist/src/ink/clearTerminal.js +58 -0
  861. package/dist/src/ink/colorize.js +198 -0
  862. package/dist/src/ink/components/AlternateScreen.js +74 -0
  863. package/dist/src/ink/components/App.js +558 -0
  864. package/dist/src/ink/components/AppContext.js +11 -0
  865. package/dist/src/ink/components/Box.js +153 -0
  866. package/dist/src/ink/components/Button.js +166 -0
  867. package/dist/src/ink/components/ClockContext.js +108 -0
  868. package/dist/src/ink/components/CursorDeclarationContext.js +3 -0
  869. package/dist/src/ink/components/ErrorOverview.js +49 -0
  870. package/dist/src/ink/components/Link.js +33 -0
  871. package/dist/src/ink/components/Newline.js +29 -0
  872. package/dist/src/ink/components/NoSelect.js +56 -0
  873. package/dist/src/ink/components/RawAnsi.js +45 -0
  874. package/dist/src/ink/components/ScrollBox.js +170 -0
  875. package/dist/src/ink/components/Spacer.js +19 -0
  876. package/dist/src/ink/components/StdinContext.js +16 -0
  877. package/dist/src/ink/components/TerminalFocusContext.js +45 -0
  878. package/dist/src/ink/components/TerminalSizeContext.js +3 -0
  879. package/dist/src/ink/components/Text.js +194 -0
  880. package/dist/src/ink/constants.js +2 -0
  881. package/dist/src/ink/devtools.js +16 -0
  882. package/dist/src/ink/dom.js +298 -0
  883. package/dist/src/ink/events/click-event.js +36 -0
  884. package/dist/src/ink/events/dispatcher.js +172 -0
  885. package/dist/src/ink/events/emitter.js +31 -0
  886. package/dist/src/ink/events/event-handlers.js +30 -0
  887. package/dist/src/ink/events/event.js +9 -0
  888. package/dist/src/ink/events/focus-event.js +16 -0
  889. package/dist/src/ink/events/input-event.js +161 -0
  890. package/dist/src/ink/events/keyboard-event.js +45 -0
  891. package/dist/src/ink/events/terminal-event.js +78 -0
  892. package/dist/src/ink/events/terminal-focus-event.js +15 -0
  893. package/dist/src/ink/focus.js +158 -0
  894. package/dist/src/ink/frame.js +30 -0
  895. package/dist/src/ink/get-max-width.js +23 -0
  896. package/dist/src/ink/hit-test.js +113 -0
  897. package/dist/src/ink/hooks/use-animation-frame.js +48 -0
  898. package/dist/src/ink/hooks/use-app.js +7 -0
  899. package/dist/src/ink/hooks/use-declared-cursor.js +60 -0
  900. package/dist/src/ink/hooks/use-input.js +70 -0
  901. package/dist/src/ink/hooks/use-interval.js +54 -0
  902. package/dist/src/ink/hooks/use-search-highlight.js +32 -0
  903. package/dist/src/ink/hooks/use-selection.js +60 -0
  904. package/dist/src/ink/hooks/use-stdin.js +7 -0
  905. package/dist/src/ink/hooks/use-tab-status.js +57 -0
  906. package/dist/src/ink/hooks/use-terminal-focus.js +15 -0
  907. package/dist/src/ink/hooks/use-terminal-title.js +29 -0
  908. package/dist/src/ink/hooks/use-terminal-viewport.js +77 -0
  909. package/dist/src/ink/ink.js +1644 -0
  910. package/dist/src/ink/instances.js +7 -0
  911. package/dist/src/ink/layout/engine.js +4 -0
  912. package/dist/src/ink/layout/geometry.js +61 -0
  913. package/dist/src/ink/layout/node.js +62 -0
  914. package/dist/src/ink/layout/yoga.js +237 -0
  915. package/dist/src/ink/line-width-cache.js +19 -0
  916. package/dist/src/ink/log-update.js +583 -0
  917. package/dist/src/ink/measure-element.js +8 -0
  918. package/dist/src/ink/measure-text.js +35 -0
  919. package/dist/src/ink/node-cache.js +30 -0
  920. package/dist/src/ink/optimizer.js +81 -0
  921. package/dist/src/ink/output.js +556 -0
  922. package/dist/src/ink/parse-keypress.js +695 -0
  923. package/dist/src/ink/reconciler.js +384 -0
  924. package/dist/src/ink/render-border.js +134 -0
  925. package/dist/src/ink/render-node-to-output.js +1216 -0
  926. package/dist/src/ink/render-to-screen.js +171 -0
  927. package/dist/src/ink/renderer.js +129 -0
  928. package/dist/src/ink/root.js +80 -0
  929. package/dist/src/ink/screen.js +1132 -0
  930. package/dist/src/ink/searchHighlight.js +78 -0
  931. package/dist/src/ink/selection.js +792 -0
  932. package/dist/src/ink/squash-text-nodes.js +56 -0
  933. package/dist/src/ink/stringWidth.js +200 -0
  934. package/dist/src/ink/styles.js +299 -0
  935. package/dist/src/ink/supports-hyperlinks.js +40 -0
  936. package/dist/src/ink/tabstops.js +39 -0
  937. package/dist/src/ink/terminal-focus-state.js +35 -0
  938. package/dist/src/ink/terminal-querier.js +173 -0
  939. package/dist/src/ink/terminal.js +208 -0
  940. package/dist/src/ink/termio/ansi.js +70 -0
  941. package/dist/src/ink/termio/csi.js +260 -0
  942. package/dist/src/ink/termio/dec.js +53 -0
  943. package/dist/src/ink/termio/esc.js +55 -0
  944. package/dist/src/ink/termio/osc.js +432 -0
  945. package/dist/src/ink/termio/parser.js +356 -0
  946. package/dist/src/ink/termio/sgr.js +292 -0
  947. package/dist/src/ink/termio/tokenize.js +264 -0
  948. package/dist/src/ink/termio/types.js +55 -0
  949. package/dist/src/ink/termio.js +24 -0
  950. package/dist/src/ink/useTerminalNotification.js +57 -0
  951. package/dist/src/ink/warn.js +10 -0
  952. package/dist/src/ink/widest-line.js +14 -0
  953. package/dist/src/ink/wrap-text.js +54 -0
  954. package/dist/src/ink/wrapAnsi.js +6 -0
  955. package/dist/src/ink.js +50 -0
  956. package/dist/src/interactiveHelpers.js +317 -0
  957. package/dist/src/keybindings/KeybindingContext.js +184 -0
  958. package/dist/src/keybindings/KeybindingProviderSetup.js +259 -0
  959. package/dist/src/keybindings/defaultBindings.js +333 -0
  960. package/dist/src/keybindings/loadUserBindings.js +393 -0
  961. package/dist/src/keybindings/match.js +111 -0
  962. package/dist/src/keybindings/parser.js +184 -0
  963. package/dist/src/keybindings/reservedShortcuts.js +109 -0
  964. package/dist/src/keybindings/resolver.js +182 -0
  965. package/dist/src/keybindings/schema.js +205 -0
  966. package/dist/src/keybindings/shortcutFormat.js +48 -0
  967. package/dist/src/keybindings/template.js +40 -0
  968. package/dist/src/keybindings/useKeybinding.js +161 -0
  969. package/dist/src/keybindings/useShortcutDisplay.js +43 -0
  970. package/dist/src/keybindings/validate.js +395 -0
  971. package/dist/src/main.js +4080 -0
  972. package/dist/src/memdir/findRelevantMemories.js +101 -0
  973. package/dist/src/memdir/memdir.js +408 -0
  974. package/dist/src/memdir/memoryAge.js +52 -0
  975. package/dist/src/memdir/memoryScan.js +65 -0
  976. package/dist/src/memdir/memoryTypes.js +260 -0
  977. package/dist/src/memdir/paths.js +236 -0
  978. package/dist/src/memdir/teamMemPaths.js +261 -0
  979. package/dist/src/memdir/teamMemPrompts.js +82 -0
  980. package/dist/src/migrations/migrateAutoUpdatesToSettings.js +47 -0
  981. package/dist/src/migrations/migrateBypassPermissionsAcceptedToSettings.js +32 -0
  982. package/dist/src/migrations/migrateEnableAllProjectMcpServersToSettings.js +83 -0
  983. package/dist/src/migrations/migrateFennecToOpus.js +39 -0
  984. package/dist/src/migrations/migrateLegacyOpusToCurrent.js +44 -0
  985. package/dist/src/migrations/migrateOpusToOpus1m.js +31 -0
  986. package/dist/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.js +23 -0
  987. package/dist/src/migrations/migrateSonnet1mToSonnet45.js +38 -0
  988. package/dist/src/migrations/migrateSonnet45ToSonnet46.js +48 -0
  989. package/dist/src/migrations/resetAutoModeOptInForDefaultOffer.js +47 -0
  990. package/dist/src/migrations/resetProToOpusDefault.js +46 -0
  991. package/dist/src/mirrors/shared.js +186 -0
  992. package/dist/src/moreright/useMoreRight.js +13 -0
  993. package/dist/src/native-ts/color-diff/index.js +821 -0
  994. package/dist/src/native-ts/file-index/index.js +328 -0
  995. package/dist/src/native-ts/yoga-layout/enums.js +101 -0
  996. package/dist/src/native-ts/yoga-layout/index.js +2113 -0
  997. package/dist/src/outputStyles/loadOutputStylesDir.js +73 -0
  998. package/dist/src/plugins/builtinPlugins.js +132 -0
  999. package/dist/src/plugins/bundled/index.js +22 -0
  1000. package/dist/src/projectOnboardingState.js +61 -0
  1001. package/dist/src/query/config.js +17 -0
  1002. package/dist/src/query/deps.js +12 -0
  1003. package/dist/src/query/stopHooks.js +334 -0
  1004. package/dist/src/query/tokenBudget.js +49 -0
  1005. package/dist/src/query.js +1330 -0
  1006. package/dist/src/recovery/bunBundleShim.js +11 -0
  1007. package/dist/src/remote/RemoteSessionManager.js +195 -0
  1008. package/dist/src/remote/SessionsWebSocket.js +305 -0
  1009. package/dist/src/remote/remotePermissionBridge.js +70 -0
  1010. package/dist/src/remote/sdkMessageAdapter.js +227 -0
  1011. package/dist/src/replLauncher.js +6 -0
  1012. package/dist/src/schemas/hooks.js +174 -0
  1013. package/dist/src/screens/Doctor.js +581 -0
  1014. package/dist/src/screens/REPL.js +4434 -0
  1015. package/dist/src/screens/ResumeConversation.js +341 -0
  1016. package/dist/src/self-hosted-runner/main.js +16 -0
  1017. package/dist/src/server/backends/dangerousBackend.js +16 -0
  1018. package/dist/src/server/connectHeadless.js +16 -0
  1019. package/dist/src/server/createDirectConnectSession.js +62 -0
  1020. package/dist/src/server/directConnectManager.js +153 -0
  1021. package/dist/src/server/lockfile.js +16 -0
  1022. package/dist/src/server/parseConnectUrl.js +16 -0
  1023. package/dist/src/server/server.js +16 -0
  1024. package/dist/src/server/serverBanner.js +16 -0
  1025. package/dist/src/server/serverLog.js +16 -0
  1026. package/dist/src/server/sessionManager.js +16 -0
  1027. package/dist/src/server/types.js +7 -0
  1028. package/dist/src/services/AgentSummary/agentSummary.js +147 -0
  1029. package/dist/src/services/MagicDocs/magicDocs.js +193 -0
  1030. package/dist/src/services/MagicDocs/prompts.js +110 -0
  1031. package/dist/src/services/PromptSuggestion/promptSuggestion.js +402 -0
  1032. package/dist/src/services/PromptSuggestion/speculation.js +643 -0
  1033. package/dist/src/services/SessionMemory/prompts.js +254 -0
  1034. package/dist/src/services/SessionMemory/sessionMemory.js +358 -0
  1035. package/dist/src/services/SessionMemory/sessionMemoryUtils.js +157 -0
  1036. package/dist/src/services/analytics/config.js +33 -0
  1037. package/dist/src/services/analytics/datadog.js +259 -0
  1038. package/dist/src/services/analytics/firstPartyEventLogger.js +342 -0
  1039. package/dist/src/services/analytics/firstPartyEventLoggingExporter.js +594 -0
  1040. package/dist/src/services/analytics/growthbook.js +952 -0
  1041. package/dist/src/services/analytics/index.js +114 -0
  1042. package/dist/src/services/analytics/metadata.js +698 -0
  1043. package/dist/src/services/analytics/sink.js +95 -0
  1044. package/dist/src/services/analytics/sinkKillswitch.js +19 -0
  1045. package/dist/src/services/api/adminRequests.js +57 -0
  1046. package/dist/src/services/api/bootstrap.js +149 -0
  1047. package/dist/src/services/api/claude.js +2461 -0
  1048. package/dist/src/services/api/client.js +325 -0
  1049. package/dist/src/services/api/dumpPrompts.js +174 -0
  1050. package/dist/src/services/api/emptyUsage.js +20 -0
  1051. package/dist/src/services/api/errorUtils.js +203 -0
  1052. package/dist/src/services/api/errors.js +934 -0
  1053. package/dist/src/services/api/filesApi.js +523 -0
  1054. package/dist/src/services/api/firstTokenDate.js +49 -0
  1055. package/dist/src/services/api/grove.js +272 -0
  1056. package/dist/src/services/api/index.js +23 -0
  1057. package/dist/src/services/api/logging.js +484 -0
  1058. package/dist/src/services/api/metricsOptOut.js +129 -0
  1059. package/dist/src/services/api/openai.js +1187 -0
  1060. package/dist/src/services/api/openrouter.js +30 -0
  1061. package/dist/src/services/api/overageCreditGrant.js +123 -0
  1062. package/dist/src/services/api/promptCacheBreakDetection.js +510 -0
  1063. package/dist/src/services/api/referral.js +219 -0
  1064. package/dist/src/services/api/sessionIngress.js +358 -0
  1065. package/dist/src/services/api/ultrareviewQuota.js +29 -0
  1066. package/dist/src/services/api/usage.js +31 -0
  1067. package/dist/src/services/api/withRetry.js +599 -0
  1068. package/dist/src/services/autoDream/autoDream.js +244 -0
  1069. package/dist/src/services/autoDream/config.js +17 -0
  1070. package/dist/src/services/autoDream/consolidationLock.js +122 -0
  1071. package/dist/src/services/autoDream/consolidationPrompt.js +56 -0
  1072. package/dist/src/services/awaySummary.js +61 -0
  1073. package/dist/src/services/claudeAiLimits.js +331 -0
  1074. package/dist/src/services/claudeAiLimitsHook.js +15 -0
  1075. package/dist/src/services/compact/apiMicrocompact.js +97 -0
  1076. package/dist/src/services/compact/autoCompact.js +236 -0
  1077. package/dist/src/services/compact/cachedMicrocompact.js +16 -0
  1078. package/dist/src/services/compact/compact.js +1258 -0
  1079. package/dist/src/services/compact/compactWarningHook.js +12 -0
  1080. package/dist/src/services/compact/compactWarningState.js +15 -0
  1081. package/dist/src/services/compact/grouping.js +58 -0
  1082. package/dist/src/services/compact/microCompact.js +414 -0
  1083. package/dist/src/services/compact/postCompactCleanup.js +72 -0
  1084. package/dist/src/services/compact/prompt.js +327 -0
  1085. package/dist/src/services/compact/sessionMemoryCompact.js +467 -0
  1086. package/dist/src/services/compact/timeBasedMCConfig.js +11 -0
  1087. package/dist/src/services/diagnosticTracking.js +282 -0
  1088. package/dist/src/services/extractMemories/extractMemories.js +444 -0
  1089. package/dist/src/services/extractMemories/prompts.js +129 -0
  1090. package/dist/src/services/internalLogging.js +68 -0
  1091. package/dist/src/services/limits/adapters/claude.js +219 -0
  1092. package/dist/src/services/limits/adapters/minimax.js +177 -0
  1093. package/dist/src/services/limits/adapters/ollama.js +189 -0
  1094. package/dist/src/services/limits/adapters/openai.js +167 -0
  1095. package/dist/src/services/limits/adapters/openrouter.js +166 -0
  1096. package/dist/src/services/limits/adapters/zai.js +154 -0
  1097. package/dist/src/services/limits/index.js +2 -0
  1098. package/dist/src/services/limits/registry.js +179 -0
  1099. package/dist/src/services/limits/sessionCounter.js +168 -0
  1100. package/dist/src/services/limits/types.js +1 -0
  1101. package/dist/src/services/lsp/LSPClient.js +306 -0
  1102. package/dist/src/services/lsp/LSPDiagnosticRegistry.js +277 -0
  1103. package/dist/src/services/lsp/LSPServerInstance.js +390 -0
  1104. package/dist/src/services/lsp/LSPServerManager.js +305 -0
  1105. package/dist/src/services/lsp/config.js +57 -0
  1106. package/dist/src/services/lsp/manager.js +246 -0
  1107. package/dist/src/services/lsp/passiveFeedback.js +226 -0
  1108. package/dist/src/services/mcp/InProcessTransport.js +54 -0
  1109. package/dist/src/services/mcp/MCPConnectionManager.js +50 -0
  1110. package/dist/src/services/mcp/SdkControlTransport.js +115 -0
  1111. package/dist/src/services/mcp/auth.js +1882 -0
  1112. package/dist/src/services/mcp/channelAllowlist.js +57 -0
  1113. package/dist/src/services/mcp/channelNotification.js +236 -0
  1114. package/dist/src/services/mcp/channelPermissions.js +192 -0
  1115. package/dist/src/services/mcp/claudeai.js +123 -0
  1116. package/dist/src/services/mcp/client.js +2480 -0
  1117. package/dist/src/services/mcp/config.js +1277 -0
  1118. package/dist/src/services/mcp/elicitationHandler.js +192 -0
  1119. package/dist/src/services/mcp/envExpansion.js +30 -0
  1120. package/dist/src/services/mcp/headersHelper.js +94 -0
  1121. package/dist/src/services/mcp/mcpStringUtils.js +85 -0
  1122. package/dist/src/services/mcp/normalization.js +21 -0
  1123. package/dist/src/services/mcp/oauthPort.js +69 -0
  1124. package/dist/src/services/mcp/officialRegistry.js +58 -0
  1125. package/dist/src/services/mcp/types.js +94 -0
  1126. package/dist/src/services/mcp/useManageMCPConnections.js +820 -0
  1127. package/dist/src/services/mcp/utils.js +433 -0
  1128. package/dist/src/services/mcp/vscodeSdkMcp.js +69 -0
  1129. package/dist/src/services/mcp/xaa.js +342 -0
  1130. package/dist/src/services/mcp/xaaIdpLogin.js +377 -0
  1131. package/dist/src/services/mcpServerApproval.js +29 -0
  1132. package/dist/src/services/mockRateLimits.js +666 -0
  1133. package/dist/src/services/notifier.js +114 -0
  1134. package/dist/src/services/oauth/auth-code-listener.js +236 -0
  1135. package/dist/src/services/oauth/client.js +545 -0
  1136. package/dist/src/services/oauth/crypto.js +19 -0
  1137. package/dist/src/services/oauth/getOauthProfile.js +48 -0
  1138. package/dist/src/services/oauth/index.js +152 -0
  1139. package/dist/src/services/oauth/types.js +1 -0
  1140. package/dist/src/services/orchestration/execution/AgentTaskExecutor.js +315 -0
  1141. package/dist/src/services/orchestration/execution/OrchestrationExecutionRuntime.js +1147 -0
  1142. package/dist/src/services/orchestration/execution/index.js +2 -0
  1143. package/dist/src/services/orchestration/execution/types.js +1 -0
  1144. package/dist/src/services/orchestration/global/GlobalOrchestratorRuntime.js +140 -0
  1145. package/dist/src/services/orchestration/global/index.js +3 -0
  1146. package/dist/src/services/orchestration/global/reporting.js +541 -0
  1147. package/dist/src/services/orchestration/global/types.js +1 -0
  1148. package/dist/src/services/orchestration/index.js +4 -0
  1149. package/dist/src/services/orchestration/policy/index.js +2 -0
  1150. package/dist/src/services/orchestration/policy/scoring.js +291 -0
  1151. package/dist/src/services/orchestration/policy/types.js +1 -0
  1152. package/dist/src/services/orchestration/squad/SquadOrchestratorRuntime.js +198 -0
  1153. package/dist/src/services/orchestration/squad/index.js +3 -0
  1154. package/dist/src/services/orchestration/squad/reporting.js +525 -0
  1155. package/dist/src/services/orchestration/squad/types.js +1 -0
  1156. package/dist/src/services/plugins/PluginInstallationManager.js +139 -0
  1157. package/dist/src/services/plugins/pluginCliCommands.js +230 -0
  1158. package/dist/src/services/plugins/pluginOperations.js +826 -0
  1159. package/dist/src/services/policyLimits/index.js +547 -0
  1160. package/dist/src/services/policyLimits/types.js +9 -0
  1161. package/dist/src/services/preventSleep.js +143 -0
  1162. package/dist/src/services/rateLimitMessages.js +271 -0
  1163. package/dist/src/services/rateLimitMocking.js +91 -0
  1164. package/dist/src/services/remoteManagedSettings/index.js +534 -0
  1165. package/dist/src/services/remoteManagedSettings/securityCheck.js +59 -0
  1166. package/dist/src/services/remoteManagedSettings/syncCache.js +90 -0
  1167. package/dist/src/services/remoteManagedSettings/syncCacheState.js +89 -0
  1168. package/dist/src/services/remoteManagedSettings/types.js +12 -0
  1169. package/dist/src/services/settingsSync/index.js +478 -0
  1170. package/dist/src/services/settingsSync/types.js +35 -0
  1171. package/dist/src/services/teamMemorySync/index.js +976 -0
  1172. package/dist/src/services/teamMemorySync/secretScanner.js +275 -0
  1173. package/dist/src/services/teamMemorySync/teamMemSecretGuard.js +35 -0
  1174. package/dist/src/services/teamMemorySync/types.js +47 -0
  1175. package/dist/src/services/teamMemorySync/watcher.js +326 -0
  1176. package/dist/src/services/tips/tipHistory.js +17 -0
  1177. package/dist/src/services/tips/tipRegistry.js +589 -0
  1178. package/dist/src/services/tips/tipScheduler.js +40 -0
  1179. package/dist/src/services/tokenEstimation.js +365 -0
  1180. package/dist/src/services/toolUseSummary/toolUseSummaryGenerator.js +87 -0
  1181. package/dist/src/services/tools/StreamingToolExecutor.js +413 -0
  1182. package/dist/src/services/tools/toolExecution.js +1218 -0
  1183. package/dist/src/services/tools/toolHooks.js +454 -0
  1184. package/dist/src/services/tools/toolOrchestration.js +110 -0
  1185. package/dist/src/services/vcr.js +291 -0
  1186. package/dist/src/services/voice.js +394 -0
  1187. package/dist/src/services/voiceKeyterms.js +94 -0
  1188. package/dist/src/services/voiceStreamSTT.js +406 -0
  1189. package/dist/src/setup.js +349 -0
  1190. package/dist/src/skills/bundled/batch.js +114 -0
  1191. package/dist/src/skills/bundled/claudeApi.js +145 -0
  1192. package/dist/src/skills/bundled/claudeApiContent.js +14 -0
  1193. package/dist/src/skills/bundled/claudeInChrome.js +27 -0
  1194. package/dist/src/skills/bundled/debug.js +99 -0
  1195. package/dist/src/skills/bundled/index.js +5 -0
  1196. package/dist/src/skills/bundled/keybindings.js +292 -0
  1197. package/dist/src/skills/bundled/loop.js +81 -0
  1198. package/dist/src/skills/bundled/loremIpsum.js +266 -0
  1199. package/dist/src/skills/bundled/remember.js +75 -0
  1200. package/dist/src/skills/bundled/scheduleRemoteAgents.js +373 -0
  1201. package/dist/src/skills/bundled/simplify.js +66 -0
  1202. package/dist/src/skills/bundled/skillify.js +184 -0
  1203. package/dist/src/skills/bundled/stuck.js +75 -0
  1204. package/dist/src/skills/bundled/updateConfig.js +463 -0
  1205. package/dist/src/skills/bundled/verify.js +25 -0
  1206. package/dist/src/skills/bundled/verifyContent.js +7 -0
  1207. package/dist/src/skills/bundledSkills.js +159 -0
  1208. package/dist/src/skills/loadSkillsDir.js +751 -0
  1209. package/dist/src/skills/mcpSkillBuilders.js +10 -0
  1210. package/dist/src/ssh/createSSHSession.js +16 -0
  1211. package/dist/src/state/AppState.js +184 -0
  1212. package/dist/src/state/AppStateStore.js +120 -0
  1213. package/dist/src/state/onChangeAppState.js +132 -0
  1214. package/dist/src/state/selectors.js +51 -0
  1215. package/dist/src/state/store.js +21 -0
  1216. package/dist/src/state/teammateViewHelpers.js +124 -0
  1217. package/dist/src/tasks/DreamTask/DreamTask.js +99 -0
  1218. package/dist/src/tasks/InProcessTeammateTask/InProcessTeammateTask.js +116 -0
  1219. package/dist/src/tasks/InProcessTeammateTask/types.js +35 -0
  1220. package/dist/src/tasks/LocalAgentTask/LocalAgentTask.js +507 -0
  1221. package/dist/src/tasks/LocalMainSessionTask.js +338 -0
  1222. package/dist/src/tasks/LocalShellTask/LocalShellTask.js +475 -0
  1223. package/dist/src/tasks/LocalShellTask/guards.js +9 -0
  1224. package/dist/src/tasks/LocalShellTask/killShellTasks.js +59 -0
  1225. package/dist/src/tasks/RemoteAgentTask/RemoteAgentTask.js +742 -0
  1226. package/dist/src/tasks/pillLabel.js +69 -0
  1227. package/dist/src/tasks/stopTask.js +67 -0
  1228. package/dist/src/tasks/types.js +18 -0
  1229. package/dist/src/tasks.js +39 -0
  1230. package/dist/src/telegram/bridge.js +329 -0
  1231. package/dist/src/telegram/config.js +89 -0
  1232. package/dist/src/telegram/mirror.js +91 -0
  1233. package/dist/src/tools/AgentTool/AgentTool.js +1222 -0
  1234. package/dist/src/tools/AgentTool/UI.js +592 -0
  1235. package/dist/src/tools/AgentTool/agentColorManager.js +43 -0
  1236. package/dist/src/tools/AgentTool/agentDisplay.js +72 -0
  1237. package/dist/src/tools/AgentTool/agentMemory.js +139 -0
  1238. package/dist/src/tools/AgentTool/agentMemorySnapshot.js +136 -0
  1239. package/dist/src/tools/AgentTool/agentToolUtils.js +456 -0
  1240. package/dist/src/tools/AgentTool/built-in/claudeCodeGuideAgent.js +175 -0
  1241. package/dist/src/tools/AgentTool/built-in/exploreAgent.js +76 -0
  1242. package/dist/src/tools/AgentTool/built-in/generalPurposeAgent.js +28 -0
  1243. package/dist/src/tools/AgentTool/built-in/planAgent.js +87 -0
  1244. package/dist/src/tools/AgentTool/built-in/statuslineSetup.js +140 -0
  1245. package/dist/src/tools/AgentTool/built-in/verificationAgent.js +146 -0
  1246. package/dist/src/tools/AgentTool/builtInAgents.js +59 -0
  1247. package/dist/src/tools/AgentTool/constants.js +11 -0
  1248. package/dist/src/tools/AgentTool/forkSubagent.js +177 -0
  1249. package/dist/src/tools/AgentTool/loadAgentsDir.js +497 -0
  1250. package/dist/src/tools/AgentTool/prompt.js +262 -0
  1251. package/dist/src/tools/AgentTool/resumeAgent.js +182 -0
  1252. package/dist/src/tools/AgentTool/runAgent.js +629 -0
  1253. package/dist/src/tools/AskUserQuestionTool/AskUserQuestionTool.js +237 -0
  1254. package/dist/src/tools/AskUserQuestionTool/prompt.js +38 -0
  1255. package/dist/src/tools/BashTool/BashTool.js +1008 -0
  1256. package/dist/src/tools/BashTool/BashToolResultMessage.js +168 -0
  1257. package/dist/src/tools/BashTool/UI.js +133 -0
  1258. package/dist/src/tools/BashTool/bashCommandHelpers.js +184 -0
  1259. package/dist/src/tools/BashTool/bashPermissions.js +2023 -0
  1260. package/dist/src/tools/BashTool/bashSecurity.js +2267 -0
  1261. package/dist/src/tools/BashTool/commandSemantics.js +105 -0
  1262. package/dist/src/tools/BashTool/commentLabel.js +14 -0
  1263. package/dist/src/tools/BashTool/destructiveCommandWarning.js +88 -0
  1264. package/dist/src/tools/BashTool/modeValidation.js +86 -0
  1265. package/dist/src/tools/BashTool/pathValidation.js +1080 -0
  1266. package/dist/src/tools/BashTool/prompt.js +334 -0
  1267. package/dist/src/tools/BashTool/readOnlyValidation.js +1794 -0
  1268. package/dist/src/tools/BashTool/sedEditParser.js +282 -0
  1269. package/dist/src/tools/BashTool/sedValidation.js +580 -0
  1270. package/dist/src/tools/BashTool/shouldUseSandbox.js +125 -0
  1271. package/dist/src/tools/BashTool/toolName.js +2 -0
  1272. package/dist/src/tools/BashTool/utils.js +180 -0
  1273. package/dist/src/tools/BriefTool/BriefTool.js +172 -0
  1274. package/dist/src/tools/BriefTool/UI.js +66 -0
  1275. package/dist/src/tools/BriefTool/attachments.js +86 -0
  1276. package/dist/src/tools/BriefTool/prompt.js +19 -0
  1277. package/dist/src/tools/BriefTool/upload.js +136 -0
  1278. package/dist/src/tools/ConfigTool/ConfigTool.js +398 -0
  1279. package/dist/src/tools/ConfigTool/UI.js +24 -0
  1280. package/dist/src/tools/ConfigTool/constants.js +1 -0
  1281. package/dist/src/tools/ConfigTool/prompt.js +82 -0
  1282. package/dist/src/tools/ConfigTool/supportedSettings.js +180 -0
  1283. package/dist/src/tools/EnterPlanModeTool/EnterPlanModeTool.js +98 -0
  1284. package/dist/src/tools/EnterPlanModeTool/UI.js +13 -0
  1285. package/dist/src/tools/EnterPlanModeTool/constants.js +1 -0
  1286. package/dist/src/tools/EnterPlanModeTool/prompt.js +164 -0
  1287. package/dist/src/tools/EnterWorktreeTool/EnterWorktreeTool.js +104 -0
  1288. package/dist/src/tools/EnterWorktreeTool/UI.js +8 -0
  1289. package/dist/src/tools/EnterWorktreeTool/constants.js +1 -0
  1290. package/dist/src/tools/EnterWorktreeTool/prompt.js +30 -0
  1291. package/dist/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.js +385 -0
  1292. package/dist/src/tools/ExitPlanModeTool/UI.js +31 -0
  1293. package/dist/src/tools/ExitPlanModeTool/constants.js +2 -0
  1294. package/dist/src/tools/ExitPlanModeTool/prompt.js +27 -0
  1295. package/dist/src/tools/ExitWorktreeTool/ExitWorktreeTool.js +257 -0
  1296. package/dist/src/tools/ExitWorktreeTool/UI.js +9 -0
  1297. package/dist/src/tools/ExitWorktreeTool/constants.js +1 -0
  1298. package/dist/src/tools/ExitWorktreeTool/prompt.js +32 -0
  1299. package/dist/src/tools/FileEditTool/FileEditTool.js +480 -0
  1300. package/dist/src/tools/FileEditTool/UI.js +201 -0
  1301. package/dist/src/tools/FileEditTool/constants.js +7 -0
  1302. package/dist/src/tools/FileEditTool/prompt.js +24 -0
  1303. package/dist/src/tools/FileEditTool/types.js +50 -0
  1304. package/dist/src/tools/FileEditTool/utils.js +579 -0
  1305. package/dist/src/tools/FileReadTool/FileReadTool.js +889 -0
  1306. package/dist/src/tools/FileReadTool/UI.js +125 -0
  1307. package/dist/src/tools/FileReadTool/imageProcessor.js +46 -0
  1308. package/dist/src/tools/FileReadTool/limits.js +70 -0
  1309. package/dist/src/tools/FileReadTool/prompt.js +31 -0
  1310. package/dist/src/tools/FileWriteTool/FileWriteTool.js +341 -0
  1311. package/dist/src/tools/FileWriteTool/UI.js +338 -0
  1312. package/dist/src/tools/FileWriteTool/prompt.js +15 -0
  1313. package/dist/src/tools/GlobTool/GlobTool.js +161 -0
  1314. package/dist/src/tools/GlobTool/UI.js +39 -0
  1315. package/dist/src/tools/GlobTool/prompt.js +6 -0
  1316. package/dist/src/tools/GrepTool/GrepTool.js +439 -0
  1317. package/dist/src/tools/GrepTool/UI.js +154 -0
  1318. package/dist/src/tools/GrepTool/prompt.js +16 -0
  1319. package/dist/src/tools/LSPTool/LSPTool.js +660 -0
  1320. package/dist/src/tools/LSPTool/UI.js +204 -0
  1321. package/dist/src/tools/LSPTool/formatters.js +445 -0
  1322. package/dist/src/tools/LSPTool/prompt.js +20 -0
  1323. package/dist/src/tools/LSPTool/schemas.js +197 -0
  1324. package/dist/src/tools/LSPTool/symbolContext.js +75 -0
  1325. package/dist/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +100 -0
  1326. package/dist/src/tools/ListMcpResourcesTool/UI.js +16 -0
  1327. package/dist/src/tools/ListMcpResourcesTool/prompt.js +18 -0
  1328. package/dist/src/tools/MCPTool/MCPTool.js +60 -0
  1329. package/dist/src/tools/MCPTool/UI.js +342 -0
  1330. package/dist/src/tools/MCPTool/classifyForCollapse.js +597 -0
  1331. package/dist/src/tools/MCPTool/prompt.js +3 -0
  1332. package/dist/src/tools/McpAuthTool/McpAuthTool.js +162 -0
  1333. package/dist/src/tools/NotebookEditTool/NotebookEditTool.js +421 -0
  1334. package/dist/src/tools/NotebookEditTool/UI.js +40 -0
  1335. package/dist/src/tools/NotebookEditTool/constants.js +2 -0
  1336. package/dist/src/tools/NotebookEditTool/prompt.js +2 -0
  1337. package/dist/src/tools/PowerShellTool/PowerShellTool.js +899 -0
  1338. package/dist/src/tools/PowerShellTool/UI.js +57 -0
  1339. package/dist/src/tools/PowerShellTool/clmTypes.js +207 -0
  1340. package/dist/src/tools/PowerShellTool/commandSemantics.js +115 -0
  1341. package/dist/src/tools/PowerShellTool/commonParameters.js +27 -0
  1342. package/dist/src/tools/PowerShellTool/destructiveCommandWarning.js +92 -0
  1343. package/dist/src/tools/PowerShellTool/gitSafety.js +185 -0
  1344. package/dist/src/tools/PowerShellTool/modeValidation.js +357 -0
  1345. package/dist/src/tools/PowerShellTool/pathValidation.js +1712 -0
  1346. package/dist/src/tools/PowerShellTool/powershellPermissions.js +1351 -0
  1347. package/dist/src/tools/PowerShellTool/powershellSecurity.js +942 -0
  1348. package/dist/src/tools/PowerShellTool/prompt.js +134 -0
  1349. package/dist/src/tools/PowerShellTool/readOnlyValidation.js +1633 -0
  1350. package/dist/src/tools/PowerShellTool/toolName.js +2 -0
  1351. package/dist/src/tools/REPLTool/constants.js +43 -0
  1352. package/dist/src/tools/REPLTool/primitiveTools.js +36 -0
  1353. package/dist/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +112 -0
  1354. package/dist/src/tools/ReadMcpResourceTool/UI.js +23 -0
  1355. package/dist/src/tools/ReadMcpResourceTool/prompt.js +15 -0
  1356. package/dist/src/tools/RemoteTriggerTool/RemoteTriggerTool.js +142 -0
  1357. package/dist/src/tools/RemoteTriggerTool/UI.js +11 -0
  1358. package/dist/src/tools/RemoteTriggerTool/prompt.js +12 -0
  1359. package/dist/src/tools/ScheduleCronTool/CronCreateTool.js +120 -0
  1360. package/dist/src/tools/ScheduleCronTool/CronDeleteTool.js +74 -0
  1361. package/dist/src/tools/ScheduleCronTool/CronListTool.js +77 -0
  1362. package/dist/src/tools/ScheduleCronTool/UI.js +28 -0
  1363. package/dist/src/tools/ScheduleCronTool/prompt.js +115 -0
  1364. package/dist/src/tools/SendMessageTool/SendMessageTool.js +675 -0
  1365. package/dist/src/tools/SendMessageTool/UI.js +23 -0
  1366. package/dist/src/tools/SendMessageTool/constants.js +1 -0
  1367. package/dist/src/tools/SendMessageTool/prompt.js +47 -0
  1368. package/dist/src/tools/SkillTool/SkillTool.js +827 -0
  1369. package/dist/src/tools/SkillTool/UI.js +60 -0
  1370. package/dist/src/tools/SkillTool/constants.js +1 -0
  1371. package/dist/src/tools/SkillTool/prompt.js +184 -0
  1372. package/dist/src/tools/SleepTool/prompt.js +14 -0
  1373. package/dist/src/tools/SyntheticOutputTool/SyntheticOutputTool.js +138 -0
  1374. package/dist/src/tools/TaskCreateTool/TaskCreateTool.js +104 -0
  1375. package/dist/src/tools/TaskCreateTool/constants.js +1 -0
  1376. package/dist/src/tools/TaskCreateTool/prompt.js +52 -0
  1377. package/dist/src/tools/TaskGetTool/TaskGetTool.js +106 -0
  1378. package/dist/src/tools/TaskGetTool/constants.js +1 -0
  1379. package/dist/src/tools/TaskGetTool/prompt.js +23 -0
  1380. package/dist/src/tools/TaskListTool/TaskListTool.js +89 -0
  1381. package/dist/src/tools/TaskListTool/constants.js +1 -0
  1382. package/dist/src/tools/TaskListTool/prompt.js +44 -0
  1383. package/dist/src/tools/TaskOutputTool/TaskOutputTool.js +535 -0
  1384. package/dist/src/tools/TaskOutputTool/constants.js +1 -0
  1385. package/dist/src/tools/TaskStopTool/TaskStopTool.js +110 -0
  1386. package/dist/src/tools/TaskStopTool/UI.js +30 -0
  1387. package/dist/src/tools/TaskStopTool/prompt.js +7 -0
  1388. package/dist/src/tools/TaskUpdateTool/TaskUpdateTool.js +301 -0
  1389. package/dist/src/tools/TaskUpdateTool/constants.js +1 -0
  1390. package/dist/src/tools/TaskUpdateTool/prompt.js +76 -0
  1391. package/dist/src/tools/TeamCreateTool/TeamCreateTool.js +177 -0
  1392. package/dist/src/tools/TeamCreateTool/UI.js +4 -0
  1393. package/dist/src/tools/TeamCreateTool/constants.js +1 -0
  1394. package/dist/src/tools/TeamCreateTool/prompt.js +113 -0
  1395. package/dist/src/tools/TeamDeleteTool/TeamDeleteTool.js +102 -0
  1396. package/dist/src/tools/TeamDeleteTool/UI.js +13 -0
  1397. package/dist/src/tools/TeamDeleteTool/constants.js +1 -0
  1398. package/dist/src/tools/TeamDeleteTool/prompt.js +16 -0
  1399. package/dist/src/tools/TodoWriteTool/TodoWriteTool.js +99 -0
  1400. package/dist/src/tools/TodoWriteTool/constants.js +1 -0
  1401. package/dist/src/tools/TodoWriteTool/prompt.js +181 -0
  1402. package/dist/src/tools/ToolSearchTool/ToolSearchTool.js +357 -0
  1403. package/dist/src/tools/ToolSearchTool/constants.js +1 -0
  1404. package/dist/src/tools/ToolSearchTool/prompt.js +99 -0
  1405. package/dist/src/tools/TungstenTool/TungstenLiveMonitor.js +7 -0
  1406. package/dist/src/tools/TungstenTool/TungstenTool.js +3 -0
  1407. package/dist/src/tools/WebFetchTool/UI.js +30 -0
  1408. package/dist/src/tools/WebFetchTool/WebFetchTool.js +246 -0
  1409. package/dist/src/tools/WebFetchTool/preapproved.js +155 -0
  1410. package/dist/src/tools/WebFetchTool/prompt.js +39 -0
  1411. package/dist/src/tools/WebFetchTool/utils.js +381 -0
  1412. package/dist/src/tools/WebSearchTool/UI.js +66 -0
  1413. package/dist/src/tools/WebSearchTool/WebSearchTool.js +352 -0
  1414. package/dist/src/tools/WebSearchTool/prompt.js +32 -0
  1415. package/dist/src/tools/WorkflowTool/constants.js +2 -0
  1416. package/dist/src/tools/shared/gitOperationTracking.js +220 -0
  1417. package/dist/src/tools/shared/spawnMultiAgent.js +805 -0
  1418. package/dist/src/tools/testing/TestingPermissionTool.js +72 -0
  1419. package/dist/src/tools/utils.js +24 -0
  1420. package/dist/src/tools.js +332 -0
  1421. package/dist/src/types/command.js +10 -0
  1422. package/dist/src/types/connectorText.js +2 -0
  1423. package/dist/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.js +673 -0
  1424. package/dist/src/types/generated/events_mono/common/v1/auth.js +49 -0
  1425. package/dist/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.js +147 -0
  1426. package/dist/src/types/generated/google/protobuf/timestamp.js +38 -0
  1427. package/dist/src/types/hooks.js +153 -0
  1428. package/dist/src/types/ids.js +27 -0
  1429. package/dist/src/types/logs.js +11 -0
  1430. package/dist/src/types/message.js +1 -0
  1431. package/dist/src/types/permissions.js +25 -0
  1432. package/dist/src/types/plugin.js +72 -0
  1433. package/dist/src/types/textInputTypes.js +20 -0
  1434. package/dist/src/types/utils.js +5 -0
  1435. package/dist/src/upstreamproxy/relay.js +346 -0
  1436. package/dist/src/upstreamproxy/upstreamproxy.js +236 -0
  1437. package/dist/src/utils/CircularBuffer.js +75 -0
  1438. package/dist/src/utils/Cursor.js +1229 -0
  1439. package/dist/src/utils/QueryGuard.js +115 -0
  1440. package/dist/src/utils/Shell.js +374 -0
  1441. package/dist/src/utils/ShellCommand.js +338 -0
  1442. package/dist/src/utils/abortController.js +74 -0
  1443. package/dist/src/utils/activityManager.js +127 -0
  1444. package/dist/src/utils/advisor.js +77 -0
  1445. package/dist/src/utils/agentContext.js +91 -0
  1446. package/dist/src/utils/agentId.js +83 -0
  1447. package/dist/src/utils/agentSwarmsEnabled.js +37 -0
  1448. package/dist/src/utils/agenticSessionSearch.js +255 -0
  1449. package/dist/src/utils/analyzeContext.js +848 -0
  1450. package/dist/src/utils/ansiToPng.js +259 -0
  1451. package/dist/src/utils/ansiToSvg.js +207 -0
  1452. package/dist/src/utils/api.js +555 -0
  1453. package/dist/src/utils/apiPreconnect.js +62 -0
  1454. package/dist/src/utils/appleTerminalBackup.js +95 -0
  1455. package/dist/src/utils/argumentSubstitution.js +114 -0
  1456. package/dist/src/utils/array.js +12 -0
  1457. package/dist/src/utils/asciicast.js +200 -0
  1458. package/dist/src/utils/attachments.js +2514 -0
  1459. package/dist/src/utils/attribution.js +308 -0
  1460. package/dist/src/utils/attributionHooks.js +16 -0
  1461. package/dist/src/utils/attributionTrailer.js +16 -0
  1462. package/dist/src/utils/auth.js +2022 -0
  1463. package/dist/src/utils/authFileDescriptor.js +152 -0
  1464. package/dist/src/utils/authPortable.js +14 -0
  1465. package/dist/src/utils/autoModeDenials.js +15 -0
  1466. package/dist/src/utils/autoRunIssue.js +112 -0
  1467. package/dist/src/utils/autoUpdater.js +461 -0
  1468. package/dist/src/utils/aws.js +44 -0
  1469. package/dist/src/utils/awsAuthStatusManager.js +66 -0
  1470. package/dist/src/utils/background/remote/preconditions.js +175 -0
  1471. package/dist/src/utils/background/remote/remoteSession.js +53 -0
  1472. package/dist/src/utils/backgroundHousekeeping.js +66 -0
  1473. package/dist/src/utils/bash/ParsedCommand.js +241 -0
  1474. package/dist/src/utils/bash/ShellSnapshot.js +489 -0
  1475. package/dist/src/utils/bash/ast.js +2590 -0
  1476. package/dist/src/utils/bash/bashParser.js +4355 -0
  1477. package/dist/src/utils/bash/bashPipeCommand.js +249 -0
  1478. package/dist/src/utils/bash/commands.js +1131 -0
  1479. package/dist/src/utils/bash/heredoc.js +647 -0
  1480. package/dist/src/utils/bash/parser.js +195 -0
  1481. package/dist/src/utils/bash/prefix.js +154 -0
  1482. package/dist/src/utils/bash/registry.js +23 -0
  1483. package/dist/src/utils/bash/shellCompletion.js +196 -0
  1484. package/dist/src/utils/bash/shellPrefix.js +25 -0
  1485. package/dist/src/utils/bash/shellQuote.js +253 -0
  1486. package/dist/src/utils/bash/shellQuoting.js +106 -0
  1487. package/dist/src/utils/bash/specs/alias.js +11 -0
  1488. package/dist/src/utils/bash/specs/index.js +16 -0
  1489. package/dist/src/utils/bash/specs/nohup.js +10 -0
  1490. package/dist/src/utils/bash/specs/pyright.js +88 -0
  1491. package/dist/src/utils/bash/specs/sleep.js +10 -0
  1492. package/dist/src/utils/bash/specs/srun.js +28 -0
  1493. package/dist/src/utils/bash/specs/time.js +10 -0
  1494. package/dist/src/utils/bash/specs/timeout.js +17 -0
  1495. package/dist/src/utils/bash/treeSitterAnalysis.js +407 -0
  1496. package/dist/src/utils/betas.js +332 -0
  1497. package/dist/src/utils/billing.js +54 -0
  1498. package/dist/src/utils/binaryCheck.js +40 -0
  1499. package/dist/src/utils/browser.js +58 -0
  1500. package/dist/src/utils/bufferedWriter.js +77 -0
  1501. package/dist/src/utils/bundledMode.js +19 -0
  1502. package/dist/src/utils/caCerts.js +93 -0
  1503. package/dist/src/utils/caCertsConfig.js +77 -0
  1504. package/dist/src/utils/cachePaths.js +28 -0
  1505. package/dist/src/utils/ccshareResume.js +16 -0
  1506. package/dist/src/utils/classifierApprovals.js +66 -0
  1507. package/dist/src/utils/classifierApprovalsHook.js +10 -0
  1508. package/dist/src/utils/claudeCodeHints.js +142 -0
  1509. package/dist/src/utils/claudeDesktop.js +108 -0
  1510. package/dist/src/utils/claudeInChrome/chromeNativeHost.js +416 -0
  1511. package/dist/src/utils/claudeInChrome/common.js +466 -0
  1512. package/dist/src/utils/claudeInChrome/mcpServer.js +237 -0
  1513. package/dist/src/utils/claudeInChrome/prompt.js +79 -0
  1514. package/dist/src/utils/claudeInChrome/setup.js +320 -0
  1515. package/dist/src/utils/claudeInChrome/setupPortable.js +172 -0
  1516. package/dist/src/utils/claudeInChrome/toolRendering.js +234 -0
  1517. package/dist/src/utils/claudemd.js +1054 -0
  1518. package/dist/src/utils/cleanup.js +514 -0
  1519. package/dist/src/utils/cleanupRegistry.js +22 -0
  1520. package/dist/src/utils/cliArgs.js +53 -0
  1521. package/dist/src/utils/cliHighlight.js +45 -0
  1522. package/dist/src/utils/codeIndexing.js +149 -0
  1523. package/dist/src/utils/collapseBackgroundBashNotifications.js +70 -0
  1524. package/dist/src/utils/collapseHookSummaries.js +48 -0
  1525. package/dist/src/utils/collapseReadSearch.js +871 -0
  1526. package/dist/src/utils/collapseTeammateShutdowns.js +44 -0
  1527. package/dist/src/utils/combinedAbortSignal.js +40 -0
  1528. package/dist/src/utils/commandLifecycle.js +7 -0
  1529. package/dist/src/utils/commitAttribution.js +720 -0
  1530. package/dist/src/utils/completionCache.js +138 -0
  1531. package/dist/src/utils/computerUse/appNames.js +170 -0
  1532. package/dist/src/utils/computerUse/cleanup.js +66 -0
  1533. package/dist/src/utils/computerUse/common.js +56 -0
  1534. package/dist/src/utils/computerUse/computerUseLock.js +183 -0
  1535. package/dist/src/utils/computerUse/drainRunLoop.js +71 -0
  1536. package/dist/src/utils/computerUse/escHotkey.js +53 -0
  1537. package/dist/src/utils/computerUse/executor.js +480 -0
  1538. package/dist/src/utils/computerUse/gates.js +55 -0
  1539. package/dist/src/utils/computerUse/hostAdapter.js +62 -0
  1540. package/dist/src/utils/computerUse/inputLoader.js +27 -0
  1541. package/dist/src/utils/computerUse/mcpServer.js +84 -0
  1542. package/dist/src/utils/computerUse/setup.js +42 -0
  1543. package/dist/src/utils/computerUse/swiftLoader.js +20 -0
  1544. package/dist/src/utils/computerUse/toolRendering.js +100 -0
  1545. package/dist/src/utils/computerUse/wrapper.js +318 -0
  1546. package/dist/src/utils/concurrentSessions.js +179 -0
  1547. package/dist/src/utils/config.js +1084 -0
  1548. package/dist/src/utils/configConstants.js +18 -0
  1549. package/dist/src/utils/contentArray.js +45 -0
  1550. package/dist/src/utils/context.js +185 -0
  1551. package/dist/src/utils/contextAnalysis.js +171 -0
  1552. package/dist/src/utils/contextSuggestions.js +158 -0
  1553. package/dist/src/utils/controlMessageCompat.js +31 -0
  1554. package/dist/src/utils/conversationRecovery.js +436 -0
  1555. package/dist/src/utils/cron.js +260 -0
  1556. package/dist/src/utils/cronJitterConfig.js +62 -0
  1557. package/dist/src/utils/cronScheduler.js +388 -0
  1558. package/dist/src/utils/cronTasks.js +332 -0
  1559. package/dist/src/utils/cronTasksLock.js +164 -0
  1560. package/dist/src/utils/crossProjectResume.js +46 -0
  1561. package/dist/src/utils/crypto.js +13 -0
  1562. package/dist/src/utils/cwd.js +29 -0
  1563. package/dist/src/utils/databaseMcp/common.js +48 -0
  1564. package/dist/src/utils/databaseMcp/mcpServer.js +2 -0
  1565. package/dist/src/utils/databaseMcp/server/connection.js +243 -0
  1566. package/dist/src/utils/databaseMcp/server/index.js +1442 -0
  1567. package/dist/src/utils/databaseMcp/server/queries.js +683 -0
  1568. package/dist/src/utils/databaseMcp/server/types.js +7 -0
  1569. package/dist/src/utils/databaseMcp/setup.js +28 -0
  1570. package/dist/src/utils/debug.js +220 -0
  1571. package/dist/src/utils/debugFilter.js +125 -0
  1572. package/dist/src/utils/deepLink/banner.js +103 -0
  1573. package/dist/src/utils/deepLink/parseDeepLink.js +138 -0
  1574. package/dist/src/utils/deepLink/protocolHandler.js +119 -0
  1575. package/dist/src/utils/deepLink/registerProtocol.js +291 -0
  1576. package/dist/src/utils/deepLink/terminalLauncher.js +455 -0
  1577. package/dist/src/utils/deepLink/terminalPreference.js +51 -0
  1578. package/dist/src/utils/desktopDeepLink.js +208 -0
  1579. package/dist/src/utils/detectRepository.js +157 -0
  1580. package/dist/src/utils/diagLogs.js +74 -0
  1581. package/dist/src/utils/diff.js +108 -0
  1582. package/dist/src/utils/directMemberMessage.js +34 -0
  1583. package/dist/src/utils/displayTags.js +46 -0
  1584. package/dist/src/utils/doctorContextWarnings.js +179 -0
  1585. package/dist/src/utils/doctorDiagnostic.js +495 -0
  1586. package/dist/src/utils/dxt/helpers.js +64 -0
  1587. package/dist/src/utils/dxt/zip.js +167 -0
  1588. package/dist/src/utils/earlyInput.js +166 -0
  1589. package/dist/src/utils/editor.js +163 -0
  1590. package/dist/src/utils/effort.js +278 -0
  1591. package/dist/src/utils/embeddedTools.js +26 -0
  1592. package/dist/src/utils/env.js +358 -0
  1593. package/dist/src/utils/envDynamic.js +130 -0
  1594. package/dist/src/utils/envUtils.js +192 -0
  1595. package/dist/src/utils/envValidation.js +26 -0
  1596. package/dist/src/utils/errorLogSink.js +197 -0
  1597. package/dist/src/utils/errors.js +207 -0
  1598. package/dist/src/utils/eventLoopStallDetector.js +16 -0
  1599. package/dist/src/utils/exampleCommands.js +165 -0
  1600. package/dist/src/utils/execFileNoThrow.js +93 -0
  1601. package/dist/src/utils/execFileNoThrowPortable.js +111 -0
  1602. package/dist/src/utils/execSyncWrapper.js +68 -0
  1603. package/dist/src/utils/exportRenderer.js +71 -0
  1604. package/dist/src/utils/extraUsage.js +19 -0
  1605. package/dist/src/utils/fastMode.js +393 -0
  1606. package/dist/src/utils/file.js +467 -0
  1607. package/dist/src/utils/fileHistory.js +851 -0
  1608. package/dist/src/utils/fileOperationAnalytics.js +45 -0
  1609. package/dist/src/utils/filePersistence/filePersistence.js +212 -0
  1610. package/dist/src/utils/filePersistence/outputsScanner.js +104 -0
  1611. package/dist/src/utils/filePersistence/types.js +5 -0
  1612. package/dist/src/utils/fileRead.js +81 -0
  1613. package/dist/src/utils/fileReadCache.js +78 -0
  1614. package/dist/src/utils/fileStateCache.js +99 -0
  1615. package/dist/src/utils/findExecutable.js +13 -0
  1616. package/dist/src/utils/fingerprint.js +59 -0
  1617. package/dist/src/utils/forkedAgent.js +410 -0
  1618. package/dist/src/utils/format.js +238 -0
  1619. package/dist/src/utils/formatBriefTimestamp.js +72 -0
  1620. package/dist/src/utils/fpsTracker.js +34 -0
  1621. package/dist/src/utils/frontmatterParser.js +260 -0
  1622. package/dist/src/utils/fsOperations.js +834 -0
  1623. package/dist/src/utils/fullscreen.js +194 -0
  1624. package/dist/src/utils/generatedFiles.js +122 -0
  1625. package/dist/src/utils/generators.js +67 -0
  1626. package/dist/src/utils/genericProcessUtils.js +155 -0
  1627. package/dist/src/utils/getWorktreePaths.js +56 -0
  1628. package/dist/src/utils/getWorktreePathsPortable.js +23 -0
  1629. package/dist/src/utils/ghPrStatus.js +71 -0
  1630. package/dist/src/utils/git/gitConfigParser.js +226 -0
  1631. package/dist/src/utils/git/gitFilesystem.js +606 -0
  1632. package/dist/src/utils/git/gitignore.js +84 -0
  1633. package/dist/src/utils/git.js +725 -0
  1634. package/dist/src/utils/gitDiff.js +395 -0
  1635. package/dist/src/utils/gitSettings.js +18 -0
  1636. package/dist/src/utils/github/ghAuthStatus.js +23 -0
  1637. package/dist/src/utils/githubRepoPathMapping.js +135 -0
  1638. package/dist/src/utils/glob.js +90 -0
  1639. package/dist/src/utils/gracefulShutdown.js +447 -0
  1640. package/dist/src/utils/groupToolUses.js +126 -0
  1641. package/dist/src/utils/handlePromptSubmit.js +398 -0
  1642. package/dist/src/utils/hash.js +46 -0
  1643. package/dist/src/utils/headlessProfiler.js +147 -0
  1644. package/dist/src/utils/heapDumpService.js +202 -0
  1645. package/dist/src/utils/heatmap.js +151 -0
  1646. package/dist/src/utils/highlightMatch.js +28 -0
  1647. package/dist/src/utils/hooks/AsyncHookRegistry.js +187 -0
  1648. package/dist/src/utils/hooks/apiQueryHookHelper.js +77 -0
  1649. package/dist/src/utils/hooks/execAgentHook.js +257 -0
  1650. package/dist/src/utils/hooks/execHttpHook.js +184 -0
  1651. package/dist/src/utils/hooks/execPromptHook.js +171 -0
  1652. package/dist/src/utils/hooks/fileChangedWatcher.js +161 -0
  1653. package/dist/src/utils/hooks/hookEvents.js +111 -0
  1654. package/dist/src/utils/hooks/hookHelpers.js +60 -0
  1655. package/dist/src/utils/hooks/hooksConfigManager.js +323 -0
  1656. package/dist/src/utils/hooks/hooksConfigSnapshot.js +114 -0
  1657. package/dist/src/utils/hooks/hooksSettings.js +204 -0
  1658. package/dist/src/utils/hooks/postSamplingHooks.js +39 -0
  1659. package/dist/src/utils/hooks/registerFrontmatterHooks.js +47 -0
  1660. package/dist/src/utils/hooks/registerSkillHooks.js +40 -0
  1661. package/dist/src/utils/hooks/sessionHooks.js +252 -0
  1662. package/dist/src/utils/hooks/skillImprovement.js +211 -0
  1663. package/dist/src/utils/hooks/ssrfGuard.js +258 -0
  1664. package/dist/src/utils/hooks.js +3668 -0
  1665. package/dist/src/utils/horizontalScroll.js +108 -0
  1666. package/dist/src/utils/http.js +121 -0
  1667. package/dist/src/utils/hyperlink.js +28 -0
  1668. package/dist/src/utils/iTermBackup.js +48 -0
  1669. package/dist/src/utils/ide.js +1235 -0
  1670. package/dist/src/utils/idePathConversion.js +66 -0
  1671. package/dist/src/utils/idleTimeout.js +44 -0
  1672. package/dist/src/utils/imagePaste.js +329 -0
  1673. package/dist/src/utils/imageResizer.js +664 -0
  1674. package/dist/src/utils/imageStore.js +150 -0
  1675. package/dist/src/utils/imageValidation.js +92 -0
  1676. package/dist/src/utils/immediateCommand.js +12 -0
  1677. package/dist/src/utils/inProcessTeammateHelpers.js +71 -0
  1678. package/dist/src/utils/ink.js +20 -0
  1679. package/dist/src/utils/intl.js +83 -0
  1680. package/dist/src/utils/jetbrains.js +152 -0
  1681. package/dist/src/utils/json.js +295 -0
  1682. package/dist/src/utils/jsonRead.js +14 -0
  1683. package/dist/src/utils/keyboardShortcuts.js +11 -0
  1684. package/dist/src/utils/lazySchema.js +8 -0
  1685. package/dist/src/utils/listSessionsImpl.js +332 -0
  1686. package/dist/src/utils/localInstaller.js +131 -0
  1687. package/dist/src/utils/lockfile.js +22 -0
  1688. package/dist/src/utils/log.js +280 -0
  1689. package/dist/src/utils/logoV2Utils.js +290 -0
  1690. package/dist/src/utils/mailbox.js +50 -0
  1691. package/dist/src/utils/managedEnv.js +160 -0
  1692. package/dist/src/utils/managedEnvConstants.js +200 -0
  1693. package/dist/src/utils/markdown.js +300 -0
  1694. package/dist/src/utils/markdownConfigLoader.js +494 -0
  1695. package/dist/src/utils/mcp/dateTimeParser.js +102 -0
  1696. package/dist/src/utils/mcp/elicitationValidation.js +259 -0
  1697. package/dist/src/utils/mcpInstructionsDelta.js +97 -0
  1698. package/dist/src/utils/mcpOutputStorage.js +159 -0
  1699. package/dist/src/utils/mcpValidation.js +165 -0
  1700. package/dist/src/utils/mcpWebSocketTransport.js +180 -0
  1701. package/dist/src/utils/memoize.js +205 -0
  1702. package/dist/src/utils/memory/types.js +9 -0
  1703. package/dist/src/utils/memory/versions.js +7 -0
  1704. package/dist/src/utils/memoryFileDetection.js +247 -0
  1705. package/dist/src/utils/messagePredicates.js +6 -0
  1706. package/dist/src/utils/messageQueueManager.js +430 -0
  1707. package/dist/src/utils/messages/mappers.js +240 -0
  1708. package/dist/src/utils/messages/systemInit.js +74 -0
  1709. package/dist/src/utils/messages.js +4273 -0
  1710. package/dist/src/utils/model/agent.js +128 -0
  1711. package/dist/src/utils/model/aliases.js +21 -0
  1712. package/dist/src/utils/model/antModels.js +25 -0
  1713. package/dist/src/utils/model/bedrock.js +220 -0
  1714. package/dist/src/utils/model/check1mAccess.js +64 -0
  1715. package/dist/src/utils/model/configs.js +93 -0
  1716. package/dist/src/utils/model/contextWindowUpgradeCheck.js +41 -0
  1717. package/dist/src/utils/model/deprecation.js +72 -0
  1718. package/dist/src/utils/model/model.js +641 -0
  1719. package/dist/src/utils/model/modelAllowlist.js +148 -0
  1720. package/dist/src/utils/model/modelCapabilities.js +107 -0
  1721. package/dist/src/utils/model/modelOptions.js +645 -0
  1722. package/dist/src/utils/model/modelStrings.js +144 -0
  1723. package/dist/src/utils/model/modelSupportOverrides.js +40 -0
  1724. package/dist/src/utils/model/openrouter.js +51 -0
  1725. package/dist/src/utils/model/providerBaseUrls.js +77 -0
  1726. package/dist/src/utils/model/providerCatalog.js +81 -0
  1727. package/dist/src/utils/model/providerModels.js +334 -0
  1728. package/dist/src/utils/model/providerProfiles.js +392 -0
  1729. package/dist/src/utils/model/providerProfilesDb.js +886 -0
  1730. package/dist/src/utils/model/providerSwitch.js +50 -0
  1731. package/dist/src/utils/model/providerWorkspaces.js +36 -0
  1732. package/dist/src/utils/model/providers.js +199 -0
  1733. package/dist/src/utils/model/validateModel.js +257 -0
  1734. package/dist/src/utils/modelCost.js +160 -0
  1735. package/dist/src/utils/modifiers.js +35 -0
  1736. package/dist/src/utils/mtls.js +134 -0
  1737. package/dist/src/utils/nativeInstaller/download.js +370 -0
  1738. package/dist/src/utils/nativeInstaller/index.js +8 -0
  1739. package/dist/src/utils/nativeInstaller/installer.js +1396 -0
  1740. package/dist/src/utils/nativeInstaller/packageManagers.js +258 -0
  1741. package/dist/src/utils/nativeInstaller/pidLock.js +347 -0
  1742. package/dist/src/utils/notebook.js +176 -0
  1743. package/dist/src/utils/objectGroupBy.js +15 -0
  1744. package/dist/src/utils/orchestration/store/index.js +6 -0
  1745. package/dist/src/utils/orchestration/store/orchestrationDb.js +42 -0
  1746. package/dist/src/utils/orchestration/store/providerAgentStore.js +244 -0
  1747. package/dist/src/utils/orchestration/store/providerWorkspaceStore.js +125 -0
  1748. package/dist/src/utils/orchestration/store/runStore.js +486 -0
  1749. package/dist/src/utils/orchestration/store/teamStore.js +285 -0
  1750. package/dist/src/utils/orchestration/store/types.js +1 -0
  1751. package/dist/src/utils/pasteStore.js +93 -0
  1752. package/dist/src/utils/path.js +140 -0
  1753. package/dist/src/utils/pdf.js +236 -0
  1754. package/dist/src/utils/pdfUtils.js +61 -0
  1755. package/dist/src/utils/peerAddress.js +20 -0
  1756. package/dist/src/utils/permissions/PermissionMode.js +95 -0
  1757. package/dist/src/utils/permissions/PermissionPromptToolResultSchema.js +85 -0
  1758. package/dist/src/utils/permissions/PermissionResult.js +11 -0
  1759. package/dist/src/utils/permissions/PermissionRule.js +19 -0
  1760. package/dist/src/utils/permissions/PermissionUpdate.js +330 -0
  1761. package/dist/src/utils/permissions/PermissionUpdateSchema.js +61 -0
  1762. package/dist/src/utils/permissions/autoModeState.js +34 -0
  1763. package/dist/src/utils/permissions/bashClassifier.js +30 -0
  1764. package/dist/src/utils/permissions/bypassPermissionsKillswitch.js +115 -0
  1765. package/dist/src/utils/permissions/classifierDecision.js +88 -0
  1766. package/dist/src/utils/permissions/classifierShared.js +28 -0
  1767. package/dist/src/utils/permissions/dangerousPatterns.js +78 -0
  1768. package/dist/src/utils/permissions/denialTracking.js +34 -0
  1769. package/dist/src/utils/permissions/filesystem.js +1426 -0
  1770. package/dist/src/utils/permissions/getNextPermissionMode.js +74 -0
  1771. package/dist/src/utils/permissions/pathValidation.js +351 -0
  1772. package/dist/src/utils/permissions/permissionExplainer.js +188 -0
  1773. package/dist/src/utils/permissions/permissionRuleParser.js +177 -0
  1774. package/dist/src/utils/permissions/permissionSetup.js +1164 -0
  1775. package/dist/src/utils/permissions/permissions.js +1106 -0
  1776. package/dist/src/utils/permissions/permissionsDb.js +322 -0
  1777. package/dist/src/utils/permissions/permissionsLoader.js +217 -0
  1778. package/dist/src/utils/permissions/shadowedRuleDetection.js +149 -0
  1779. package/dist/src/utils/permissions/shellRuleMatching.js +174 -0
  1780. package/dist/src/utils/permissions/yoloClassifier.js +1195 -0
  1781. package/dist/src/utils/planModeV2.js +75 -0
  1782. package/dist/src/utils/plans.js +334 -0
  1783. package/dist/src/utils/platform.js +122 -0
  1784. package/dist/src/utils/plugins/addDirPluginSettings.js +53 -0
  1785. package/dist/src/utils/plugins/cacheUtils.js +174 -0
  1786. package/dist/src/utils/plugins/dependencyResolver.js +244 -0
  1787. package/dist/src/utils/plugins/fetchTelemetry.js +108 -0
  1788. package/dist/src/utils/plugins/gitAvailability.js +65 -0
  1789. package/dist/src/utils/plugins/headlessPluginInstall.js +136 -0
  1790. package/dist/src/utils/plugins/hintRecommendation.js +136 -0
  1791. package/dist/src/utils/plugins/installCounts.js +218 -0
  1792. package/dist/src/utils/plugins/installedPluginsManager.js +1003 -0
  1793. package/dist/src/utils/plugins/loadPluginAgents.js +219 -0
  1794. package/dist/src/utils/plugins/loadPluginCommands.js +595 -0
  1795. package/dist/src/utils/plugins/loadPluginHooks.js +239 -0
  1796. package/dist/src/utils/plugins/loadPluginOutputStyles.js +112 -0
  1797. package/dist/src/utils/plugins/lspPluginIntegration.js +293 -0
  1798. package/dist/src/utils/plugins/lspRecommendation.js +278 -0
  1799. package/dist/src/utils/plugins/managedPlugins.js +26 -0
  1800. package/dist/src/utils/plugins/marketplaceHelpers.js +470 -0
  1801. package/dist/src/utils/plugins/marketplaceManager.js +1939 -0
  1802. package/dist/src/utils/plugins/mcpPluginIntegration.js +465 -0
  1803. package/dist/src/utils/plugins/mcpbHandler.js +708 -0
  1804. package/dist/src/utils/plugins/officialMarketplace.js +21 -0
  1805. package/dist/src/utils/plugins/officialMarketplaceGcs.js +195 -0
  1806. package/dist/src/utils/plugins/officialMarketplaceStartupCheck.js +338 -0
  1807. package/dist/src/utils/plugins/orphanedPluginFilter.js +96 -0
  1808. package/dist/src/utils/plugins/parseMarketplaceInput.js +143 -0
  1809. package/dist/src/utils/plugins/performStartupChecks.js +66 -0
  1810. package/dist/src/utils/plugins/pluginAutoupdate.js +210 -0
  1811. package/dist/src/utils/plugins/pluginBlocklist.js +93 -0
  1812. package/dist/src/utils/plugins/pluginDirectories.js +172 -0
  1813. package/dist/src/utils/plugins/pluginFlagging.js +173 -0
  1814. package/dist/src/utils/plugins/pluginIdentifier.js +78 -0
  1815. package/dist/src/utils/plugins/pluginInstallationHelpers.js +400 -0
  1816. package/dist/src/utils/plugins/pluginLoader.js +2426 -0
  1817. package/dist/src/utils/plugins/pluginOptionsStorage.js +311 -0
  1818. package/dist/src/utils/plugins/pluginPolicy.js +18 -0
  1819. package/dist/src/utils/plugins/pluginStartupCheck.js +261 -0
  1820. package/dist/src/utils/plugins/pluginVersioning.js +128 -0
  1821. package/dist/src/utils/plugins/reconciler.js +181 -0
  1822. package/dist/src/utils/plugins/refresh.js +162 -0
  1823. package/dist/src/utils/plugins/schemas.js +1283 -0
  1824. package/dist/src/utils/plugins/validatePlugin.js +765 -0
  1825. package/dist/src/utils/plugins/walkPluginMarkdown.js +49 -0
  1826. package/dist/src/utils/plugins/zipCache.js +346 -0
  1827. package/dist/src/utils/plugins/zipCacheAdapters.js +133 -0
  1828. package/dist/src/utils/postCommitAttribution.js +16 -0
  1829. package/dist/src/utils/powershell/dangerousCmdlets.js +174 -0
  1830. package/dist/src/utils/powershell/parser.js +1357 -0
  1831. package/dist/src/utils/powershell/staticPrefix.js +277 -0
  1832. package/dist/src/utils/preflightChecks.js +147 -0
  1833. package/dist/src/utils/privacyLevel.js +49 -0
  1834. package/dist/src/utils/process.js +56 -0
  1835. package/dist/src/utils/processUserInput/processBashCommand.js +119 -0
  1836. package/dist/src/utils/processUserInput/processSlashCommand.js +859 -0
  1837. package/dist/src/utils/processUserInput/processTextPrompt.js +68 -0
  1838. package/dist/src/utils/processUserInput/processUserInput.js +326 -0
  1839. package/dist/src/utils/profilerBase.js +29 -0
  1840. package/dist/src/utils/promptCategory.js +39 -0
  1841. package/dist/src/utils/promptEditor.js +151 -0
  1842. package/dist/src/utils/promptShellExecution.js +119 -0
  1843. package/dist/src/utils/proxy.js +347 -0
  1844. package/dist/src/utils/queryContext.js +110 -0
  1845. package/dist/src/utils/queryHelpers.js +436 -0
  1846. package/dist/src/utils/queryProfiler.js +242 -0
  1847. package/dist/src/utils/queueProcessor.js +70 -0
  1848. package/dist/src/utils/readEditContext.js +176 -0
  1849. package/dist/src/utils/readFileInRange.js +278 -0
  1850. package/dist/src/utils/releaseNotes.js +304 -0
  1851. package/dist/src/utils/renderOptions.js +67 -0
  1852. package/dist/src/utils/ripgrep.js +540 -0
  1853. package/dist/src/utils/sandbox/sandbox-adapter.js +751 -0
  1854. package/dist/src/utils/sandbox/sandbox-ui-utils.js +11 -0
  1855. package/dist/src/utils/sanitization.js +72 -0
  1856. package/dist/src/utils/screenshotClipboard.js +89 -0
  1857. package/dist/src/utils/sdkEventQueue.js +49 -0
  1858. package/dist/src/utils/sdkHeapDumpMonitor.js +16 -0
  1859. package/dist/src/utils/secureStorage/fallbackStorage.js +59 -0
  1860. package/dist/src/utils/secureStorage/index.js +14 -0
  1861. package/dist/src/utils/secureStorage/keychainPrefetch.js +91 -0
  1862. package/dist/src/utils/secureStorage/macOsKeychainHelpers.js +91 -0
  1863. package/dist/src/utils/secureStorage/macOsKeychainStorage.js +192 -0
  1864. package/dist/src/utils/secureStorage/plainTextStorage.js +81 -0
  1865. package/dist/src/utils/secureStorage/secureStoreDefs.js +1 -0
  1866. package/dist/src/utils/secureStorage/sqliteStorage.js +224 -0
  1867. package/dist/src/utils/secureStorage/types.js +1 -0
  1868. package/dist/src/utils/semanticBoolean.js +23 -0
  1869. package/dist/src/utils/semanticNumber.js +34 -0
  1870. package/dist/src/utils/semver.js +53 -0
  1871. package/dist/src/utils/sequential.js +43 -0
  1872. package/dist/src/utils/sessionActivity.js +120 -0
  1873. package/dist/src/utils/sessionDataUploader.js +16 -0
  1874. package/dist/src/utils/sessionEnvVars.js +18 -0
  1875. package/dist/src/utils/sessionEnvironment.js +131 -0
  1876. package/dist/src/utils/sessionFileAccessHooks.js +207 -0
  1877. package/dist/src/utils/sessionIngressAuth.js +113 -0
  1878. package/dist/src/utils/sessionRestore.js +359 -0
  1879. package/dist/src/utils/sessionStart.js +165 -0
  1880. package/dist/src/utils/sessionState.js +76 -0
  1881. package/dist/src/utils/sessionStorage.js +4162 -0
  1882. package/dist/src/utils/sessionStoragePortable.js +665 -0
  1883. package/dist/src/utils/sessionTitle.js +120 -0
  1884. package/dist/src/utils/sessionUrl.js +50 -0
  1885. package/dist/src/utils/set.js +50 -0
  1886. package/dist/src/utils/settings/allErrors.js +29 -0
  1887. package/dist/src/utils/settings/applySettingsChange.js +65 -0
  1888. package/dist/src/utils/settings/changeDetector.js +409 -0
  1889. package/dist/src/utils/settings/constants.js +166 -0
  1890. package/dist/src/utils/settings/internalWrites.js +33 -0
  1891. package/dist/src/utils/settings/managedPath.js +29 -0
  1892. package/dist/src/utils/settings/mdm/constants.js +62 -0
  1893. package/dist/src/utils/settings/mdm/rawRead.js +97 -0
  1894. package/dist/src/utils/settings/mdm/settings.js +254 -0
  1895. package/dist/src/utils/settings/permissionValidation.js +224 -0
  1896. package/dist/src/utils/settings/pluginOnlyPolicy.js +53 -0
  1897. package/dist/src/utils/settings/schemaOutput.js +7 -0
  1898. package/dist/src/utils/settings/settings.js +844 -0
  1899. package/dist/src/utils/settings/settingsCache.js +47 -0
  1900. package/dist/src/utils/settings/toolValidationConfig.js +76 -0
  1901. package/dist/src/utils/settings/types.js +846 -0
  1902. package/dist/src/utils/settings/validateEditTool.js +34 -0
  1903. package/dist/src/utils/settings/validation.js +192 -0
  1904. package/dist/src/utils/settings/validationTips.js +111 -0
  1905. package/dist/src/utils/shell/bashProvider.js +202 -0
  1906. package/dist/src/utils/shell/outputLimits.js +7 -0
  1907. package/dist/src/utils/shell/powershellDetection.js +96 -0
  1908. package/dist/src/utils/shell/powershellProvider.js +104 -0
  1909. package/dist/src/utils/shell/prefix.js +246 -0
  1910. package/dist/src/utils/shell/readOnlyCommandValidation.js +1776 -0
  1911. package/dist/src/utils/shell/resolveDefaultShell.js +13 -0
  1912. package/dist/src/utils/shell/shellProvider.js +2 -0
  1913. package/dist/src/utils/shell/shellToolUtils.js +21 -0
  1914. package/dist/src/utils/shell/specPrefix.js +198 -0
  1915. package/dist/src/utils/shellConfig.js +136 -0
  1916. package/dist/src/utils/sideQuery.js +195 -0
  1917. package/dist/src/utils/sideQuestion.js +121 -0
  1918. package/dist/src/utils/signal.js +34 -0
  1919. package/dist/src/utils/sinks.js +15 -0
  1920. package/dist/src/utils/skills/skillChangeDetector.js +266 -0
  1921. package/dist/src/utils/slashCommandParsing.js +46 -0
  1922. package/dist/src/utils/sleep.js +72 -0
  1923. package/dist/src/utils/sliceAnsi.js +74 -0
  1924. package/dist/src/utils/slowOperations.js +323 -0
  1925. package/dist/src/utils/standaloneAgent.js +20 -0
  1926. package/dist/src/utils/startupProfiler.js +158 -0
  1927. package/dist/src/utils/staticRender.js +103 -0
  1928. package/dist/src/utils/stats.js +802 -0
  1929. package/dist/src/utils/statsCache.js +330 -0
  1930. package/dist/src/utils/status.js +552 -0
  1931. package/dist/src/utils/statusNoticeDefinitions.js +112 -0
  1932. package/dist/src/utils/statusNoticeHelpers.js +15 -0
  1933. package/dist/src/utils/stream.js +73 -0
  1934. package/dist/src/utils/streamJsonStdoutGuard.js +107 -0
  1935. package/dist/src/utils/streamlinedTransform.js +162 -0
  1936. package/dist/src/utils/stringUtils.js +202 -0
  1937. package/dist/src/utils/subprocessEnv.js +87 -0
  1938. package/dist/src/utils/suggestions/commandSuggestions.js +458 -0
  1939. package/dist/src/utils/suggestions/directoryCompletion.js +191 -0
  1940. package/dist/src/utils/suggestions/shellHistoryCompletion.js +95 -0
  1941. package/dist/src/utils/suggestions/skillUsageTracking.js +50 -0
  1942. package/dist/src/utils/suggestions/slackChannelSuggestions.js +169 -0
  1943. package/dist/src/utils/swarm/It2SetupPrompt.js +386 -0
  1944. package/dist/src/utils/swarm/backends/ITermBackend.js +276 -0
  1945. package/dist/src/utils/swarm/backends/InProcessBackend.js +237 -0
  1946. package/dist/src/utils/swarm/backends/PaneBackendExecutor.js +250 -0
  1947. package/dist/src/utils/swarm/backends/TmuxBackend.js +574 -0
  1948. package/dist/src/utils/swarm/backends/detection.js +112 -0
  1949. package/dist/src/utils/swarm/backends/it2Setup.js +185 -0
  1950. package/dist/src/utils/swarm/backends/registry.js +369 -0
  1951. package/dist/src/utils/swarm/backends/teammateModeSnapshot.js +68 -0
  1952. package/dist/src/utils/swarm/backends/types.js +9 -0
  1953. package/dist/src/utils/swarm/constants.js +29 -0
  1954. package/dist/src/utils/swarm/inProcessRunner.js +1021 -0
  1955. package/dist/src/utils/swarm/leaderPermissionBridge.js +31 -0
  1956. package/dist/src/utils/swarm/permissionSync.js +667 -0
  1957. package/dist/src/utils/swarm/reconnection.js +82 -0
  1958. package/dist/src/utils/swarm/spawnInProcess.js +218 -0
  1959. package/dist/src/utils/swarm/spawnUtils.js +123 -0
  1960. package/dist/src/utils/swarm/teamHelpers.js +484 -0
  1961. package/dist/src/utils/swarm/teammateInit.js +87 -0
  1962. package/dist/src/utils/swarm/teammateLayoutManager.js +82 -0
  1963. package/dist/src/utils/swarm/teammateModel.js +9 -0
  1964. package/dist/src/utils/swarm/teammatePromptAddendum.js +17 -0
  1965. package/dist/src/utils/systemDirectories.js +51 -0
  1966. package/dist/src/utils/systemPrompt.js +91 -0
  1967. package/dist/src/utils/systemPromptType.js +9 -0
  1968. package/dist/src/utils/systemTheme.js +108 -0
  1969. package/dist/src/utils/systemThemeWatcher.js +16 -0
  1970. package/dist/src/utils/taggedId.js +49 -0
  1971. package/dist/src/utils/task/TaskOutput.js +320 -0
  1972. package/dist/src/utils/task/diskOutput.js +387 -0
  1973. package/dist/src/utils/task/framework.js +236 -0
  1974. package/dist/src/utils/task/outputFormatting.js +24 -0
  1975. package/dist/src/utils/task/sdkProgress.js +24 -0
  1976. package/dist/src/utils/tasks.js +672 -0
  1977. package/dist/src/utils/teamDiscovery.js +48 -0
  1978. package/dist/src/utils/teamMemoryOps.js +67 -0
  1979. package/dist/src/utils/teammate.js +237 -0
  1980. package/dist/src/utils/teammateContext.js +56 -0
  1981. package/dist/src/utils/teammateMailbox.js +793 -0
  1982. package/dist/src/utils/telemetry/betaSessionTracing.js +371 -0
  1983. package/dist/src/utils/telemetry/bigqueryExporter.js +181 -0
  1984. package/dist/src/utils/telemetry/events.js +57 -0
  1985. package/dist/src/utils/telemetry/instrumentation.js +617 -0
  1986. package/dist/src/utils/telemetry/logger.js +25 -0
  1987. package/dist/src/utils/telemetry/perfettoTracing.js +882 -0
  1988. package/dist/src/utils/telemetry/pluginTelemetry.js +157 -0
  1989. package/dist/src/utils/telemetry/sessionTracing.js +693 -0
  1990. package/dist/src/utils/telemetry/skillLoadedEvent.js +26 -0
  1991. package/dist/src/utils/telemetryAttributes.js +57 -0
  1992. package/dist/src/utils/teleport/api.js +299 -0
  1993. package/dist/src/utils/teleport/environmentSelection.js +55 -0
  1994. package/dist/src/utils/teleport/environments.js +84 -0
  1995. package/dist/src/utils/teleport/gitBundle.js +192 -0
  1996. package/dist/src/utils/teleport.js +1041 -0
  1997. package/dist/src/utils/tempfile.js +26 -0
  1998. package/dist/src/utils/terminal.js +105 -0
  1999. package/dist/src/utils/terminalPanel.js +155 -0
  2000. package/dist/src/utils/textHighlighting.js +113 -0
  2001. package/dist/src/utils/theme.js +525 -0
  2002. package/dist/src/utils/thinking.js +130 -0
  2003. package/dist/src/utils/timeouts.js +35 -0
  2004. package/dist/src/utils/tmuxSocket.js +373 -0
  2005. package/dist/src/utils/todo/types.js +9 -0
  2006. package/dist/src/utils/tokenBudget.js +62 -0
  2007. package/dist/src/utils/tokens.js +223 -0
  2008. package/dist/src/utils/toolErrors.js +101 -0
  2009. package/dist/src/utils/toolPool.js +63 -0
  2010. package/dist/src/utils/toolResultStorage.js +769 -0
  2011. package/dist/src/utils/toolSchemaCache.js +7 -0
  2012. package/dist/src/utils/toolSearch.js +551 -0
  2013. package/dist/src/utils/transcriptSearch.js +200 -0
  2014. package/dist/src/utils/treeify.js +111 -0
  2015. package/dist/src/utils/truncate.js +164 -0
  2016. package/dist/src/utils/udsClient.js +16 -0
  2017. package/dist/src/utils/udsMessaging.js +16 -0
  2018. package/dist/src/utils/ultraplan/ccrSession.js +264 -0
  2019. package/dist/src/utils/ultraplan/keyword.js +122 -0
  2020. package/dist/src/utils/ultraplan/prompt.txt +1 -0
  2021. package/dist/src/utils/unaryLogging.js +16 -0
  2022. package/dist/src/utils/undercover.js +89 -0
  2023. package/dist/src/utils/user.js +138 -0
  2024. package/dist/src/utils/userAgent.js +13 -0
  2025. package/dist/src/utils/userPromptKeywords.js +21 -0
  2026. package/dist/src/utils/uuid.js +22 -0
  2027. package/dist/src/utils/warningHandler.js +97 -0
  2028. package/dist/src/utils/which.js +75 -0
  2029. package/dist/src/utils/windowsPaths.js +150 -0
  2030. package/dist/src/utils/withResolvers.js +13 -0
  2031. package/dist/src/utils/words.js +793 -0
  2032. package/dist/src/utils/workloadContext.js +42 -0
  2033. package/dist/src/utils/worktree.js +1145 -0
  2034. package/dist/src/utils/worktreeModeEnabled.js +11 -0
  2035. package/dist/src/utils/xdg.js +52 -0
  2036. package/dist/src/utils/xml.js +15 -0
  2037. package/dist/src/utils/yaml.js +16 -0
  2038. package/dist/src/utils/zodToJsonSchema.js +19 -0
  2039. package/dist/src/vim/motions.js +73 -0
  2040. package/dist/src/vim/operators.js +401 -0
  2041. package/dist/src/vim/textObjects.js +153 -0
  2042. package/dist/src/vim/transitions.js +340 -0
  2043. package/dist/src/vim/types.js +93 -0
  2044. package/dist/src/voice/voiceModeEnabled.js +48 -0
  2045. package/dist/src/whatsapp/bridge.js +267 -0
  2046. package/dist/src/whatsapp/config.js +153 -0
  2047. package/dist/src/whatsapp/markdown.js +37 -0
  2048. package/dist/src/whatsapp/mirror.js +74 -0
  2049. package/dist/src/whatsapp/session.js +142 -0
  2050. package/package.json +2 -1
@@ -0,0 +1,1998 @@
1
+ import { feature } from '../../recovery/bunBundleShim.js';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import chalk from 'chalk';
4
+ import * as path from 'path';
5
+ import * as React from 'react';
6
+ import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
7
+ import { useNotifications } from '../../context/notifications.js';
8
+ import { useCommandQueue } from '../../hooks/useCommandQueue.js';
9
+ import { useIdeAtMentioned } from '../../hooks/useIdeAtMentioned.js';
10
+ import { logEvent } from '../../services/analytics/index.js';
11
+ import { useAppState, useAppStateStore, useSetAppState } from '../../state/AppState.js';
12
+ import { getCwd } from '../../utils/cwd.js';
13
+ import { isQueuedCommandEditable, popAllEditable } from '../../utils/messageQueueManager.js';
14
+ import stripAnsi from 'strip-ansi';
15
+ import { companionReservedColumns } from '../../buddy/CompanionSprite.js';
16
+ import { findBuddyTriggerPositions, useBuddyNotification } from '../../buddy/useBuddyNotification.js';
17
+ import { FastModePicker } from '../../commands/fast/fast.js';
18
+ import { isUltrareviewEnabled } from '../../commands/review/ultrareviewEnabled.js';
19
+ import { getNativeCSIuTerminalDisplayName } from '../../commands/terminalSetup/terminalSetup.js';
20
+ import { hasCommand } from '../../commands.js';
21
+ import { useIsModalOverlayActive } from '../../context/overlayContext.js';
22
+ import { useSetPromptOverlayDialog } from '../../context/promptOverlayContext.js';
23
+ import { formatImageRef, formatPastedTextRef, getPastedTextRefNumLines, parseReferences } from '../../history.js';
24
+ import { useArrowKeyHistory } from '../../hooks/useArrowKeyHistory.js';
25
+ import { useDoublePress } from '../../hooks/useDoublePress.js';
26
+ import { useHistorySearch } from '../../hooks/useHistorySearch.js';
27
+ import { useInputBuffer } from '../../hooks/useInputBuffer.js';
28
+ import { useMainLoopModel } from '../../hooks/useMainLoopModel.js';
29
+ import { usePromptSuggestion } from '../../hooks/usePromptSuggestion.js';
30
+ import { useTerminalSize } from '../../hooks/useTerminalSize.js';
31
+ import { useTypeahead } from '../../hooks/useTypeahead.js';
32
+ import { stringWidth } from '../../ink/stringWidth.js';
33
+ import { Box, Text, useInput } from '../../ink.js';
34
+ import { useOptionalKeybindingContext } from '../../keybindings/KeybindingContext.js';
35
+ import { getShortcutDisplay } from '../../keybindings/shortcutFormat.js';
36
+ import { useKeybinding, useKeybindings } from '../../keybindings/useKeybinding.js';
37
+ import { abortPromptSuggestion, logSuggestionSuppressed } from '../../services/PromptSuggestion/promptSuggestion.js';
38
+ import { abortSpeculation } from '../../services/PromptSuggestion/speculation.js';
39
+ import { getActiveAgentForInput, getViewedTeammateTask } from '../../state/selectors.js';
40
+ import { enterTeammateView, exitTeammateView, stopOrDismissAgent } from '../../state/teammateViewHelpers.js';
41
+ import { getRunningTeammatesSorted } from '../../tasks/InProcessTeammateTask/InProcessTeammateTask.js';
42
+ import { isPanelAgentTask } from '../../tasks/LocalAgentTask/LocalAgentTask.js';
43
+ import { isBackgroundTask } from '../../tasks/types.js';
44
+ import { AGENT_COLOR_TO_THEME_COLOR, AGENT_COLORS } from '../../tools/AgentTool/agentColorManager.js';
45
+ import { isAgentSwarmsEnabled } from '../../utils/agentSwarmsEnabled.js';
46
+ import { count } from '../../utils/array.js';
47
+ import { Cursor } from '../../utils/Cursor.js';
48
+ import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js';
49
+ import { logForDebugging } from '../../utils/debug.js';
50
+ import { parseDirectMemberMessage, sendDirectMemberMessage } from '../../utils/directMemberMessage.js';
51
+ import { env } from '../../utils/env.js';
52
+ import { errorMessage } from '../../utils/errors.js';
53
+ import { isBilledAsExtraUsage } from '../../utils/extraUsage.js';
54
+ import { getFastModeUnavailableReason, isFastModeAvailable, isFastModeCooldown, isFastModeEnabled, isFastModeSupportedByModel } from '../../utils/fastMode.js';
55
+ import { isFullscreenEnvEnabled } from '../../utils/fullscreen.js';
56
+ import { getImageFromClipboard, PASTE_THRESHOLD } from '../../utils/imagePaste.js';
57
+ import { cacheImagePath, storeImage } from '../../utils/imageStore.js';
58
+ import { isMacosOptionChar, MACOS_OPTION_SPECIAL_CHARS } from '../../utils/keyboardShortcuts.js';
59
+ import { logError } from '../../utils/log.js';
60
+ import { isOpus1mMergeEnabled, modelDisplayString } from '../../utils/model/model.js';
61
+ import { setAutoModeActive } from '../../utils/permissions/autoModeState.js';
62
+ import { cyclePermissionMode, getNextPermissionMode } from '../../utils/permissions/getNextPermissionMode.js';
63
+ import { transitionPermissionMode } from '../../utils/permissions/permissionSetup.js';
64
+ import { getPlatform } from '../../utils/platform.js';
65
+ import { editPromptInEditor } from '../../utils/promptEditor.js';
66
+ import { hasAutoModeOptIn } from '../../utils/settings/settings.js';
67
+ import { findBtwTriggerPositions } from '../../utils/sideQuestion.js';
68
+ import { findSlashCommandPositions } from '../../utils/suggestions/commandSuggestions.js';
69
+ import { findSlackChannelPositions, getKnownChannelsVersion, hasSlackMcpServer, subscribeKnownChannels } from '../../utils/suggestions/slackChannelSuggestions.js';
70
+ import { isInProcessEnabled } from '../../utils/swarm/backends/registry.js';
71
+ import { syncTeammateMode } from '../../utils/swarm/teamHelpers.js';
72
+ import { getTeammateColor } from '../../utils/teammate.js';
73
+ import { isInProcessTeammate } from '../../utils/teammateContext.js';
74
+ import { writeToMailbox } from '../../utils/teammateMailbox.js';
75
+ import { findThinkingTriggerPositions, getRainbowColor, isUltrathinkEnabled } from '../../utils/thinking.js';
76
+ import { findTokenBudgetPositions } from '../../utils/tokenBudget.js';
77
+ import { findUltraplanTriggerPositions, findUltrareviewTriggerPositions } from '../../utils/ultraplan/keyword.js';
78
+ import { AutoModeOptInDialog } from '../AutoModeOptInDialog.js';
79
+ import { BridgeDialog } from '../BridgeDialog.js';
80
+ import { ConfigurableShortcutHint } from '../ConfigurableShortcutHint.js';
81
+ import { getVisibleAgentTasks, useCoordinatorTaskCount } from '../CoordinatorAgentStatus.js';
82
+ import { getEffortNotificationText } from '../EffortIndicator.js';
83
+ import { getFastIconString } from '../FastIcon.js';
84
+ import { GlobalSearchDialog } from '../GlobalSearchDialog.js';
85
+ import { HistorySearchDialog } from '../HistorySearchDialog.js';
86
+ import { ModelPicker } from '../ModelPicker.js';
87
+ import { QuickOpenDialog } from '../QuickOpenDialog.js';
88
+ import TextInput from '../TextInput.js';
89
+ import { ThinkingToggle } from '../ThinkingToggle.js';
90
+ import { BackgroundTasksDialog } from '../tasks/BackgroundTasksDialog.js';
91
+ import { shouldHideTasksFooter } from '../tasks/taskStatusUtils.js';
92
+ import { TeamsDialog } from '../teams/TeamsDialog.js';
93
+ import VimTextInput from '../VimTextInput.js';
94
+ import { getModeFromInput, getValueFromInput } from './inputModes.js';
95
+ import { FOOTER_TEMPORARY_STATUS_TIMEOUT, Notifications } from './Notifications.js';
96
+ import PromptInputFooter from './PromptInputFooter.js';
97
+ import { PromptInputModeIndicator } from './PromptInputModeIndicator.js';
98
+ import { PromptInputQueuedCommands } from './PromptInputQueuedCommands.js';
99
+ import { PromptInputStashNotice } from './PromptInputStashNotice.js';
100
+ import { useMaybeTruncateInput } from './useMaybeTruncateInput.js';
101
+ import { usePromptInputPlaceholder } from './usePromptInputPlaceholder.js';
102
+ import { useShowFastIconHint } from './useShowFastIconHint.js';
103
+ import { useSwarmBanner } from './useSwarmBanner.js';
104
+ import { isNonSpacePrintable, isVimModeEnabled } from './utils.js';
105
+ // Bottom slot has maxHeight="50%"; reserve lines for footer, border, status.
106
+ const PROMPT_FOOTER_LINES = 5;
107
+ const MIN_INPUT_VIEWPORT_LINES = 3;
108
+ function PromptInput({ debug, ideSelection, toolPermissionContext, setToolPermissionContext, apiKeyStatus, commands, agents, isLoading, verbose, messages, onAutoUpdaterResult, autoUpdaterResult, input, onInputChange, mode, onModeChange, stashedPrompt, setStashedPrompt, submitCount, onShowMessageSelector, onMessageActionsEnter, mcpClients, pastedContents, setPastedContents, vimMode, setVimMode, showBashesDialog, setShowBashesDialog, onExit, getToolUseContext, onSubmit: onSubmitProp, onAgentSubmit, isSearchingHistory, setIsSearchingHistory, onDismissSideQuestion, isSideQuestionVisible, helpOpen, setHelpOpen, hasSuppressedDialogs, isLocalJSXCommandActive = false, insertTextRef, voiceInterimRange }) {
109
+ const mainLoopModel = useMainLoopModel();
110
+ // A local-jsx command (e.g., /mcp while agent is running) renders a full-
111
+ // screen dialog on top of PromptInput via the immediate-command path with
112
+ // shouldHidePromptInput: false. Those dialogs don't register in the overlay
113
+ // system, so treat them as a modal overlay here to stop navigation keys from
114
+ // leaking into TextInput/footer handlers and stacking a second dialog.
115
+ const isModalOverlayActive = useIsModalOverlayActive() || isLocalJSXCommandActive;
116
+ const [isAutoUpdating, setIsAutoUpdating] = useState(false);
117
+ const [exitMessage, setExitMessage] = useState({
118
+ show: false
119
+ });
120
+ const [cursorOffset, setCursorOffset] = useState(input.length);
121
+ // Track the last input value set via internal handlers so we can detect
122
+ // external input changes (e.g. speech-to-text injection) and move cursor to end.
123
+ const lastInternalInputRef = React.useRef(input);
124
+ if (input !== lastInternalInputRef.current) {
125
+ // Input changed externally (not through any internal handler) — move cursor to end
126
+ setCursorOffset(input.length);
127
+ lastInternalInputRef.current = input;
128
+ }
129
+ // Wrap onInputChange to track internal changes before they trigger re-render
130
+ const trackAndSetInput = React.useCallback((value) => {
131
+ lastInternalInputRef.current = value;
132
+ onInputChange(value);
133
+ }, [onInputChange]);
134
+ // Expose an insertText function so callers (e.g. STT) can splice text at the
135
+ // current cursor position instead of replacing the entire input.
136
+ if (insertTextRef) {
137
+ insertTextRef.current = {
138
+ cursorOffset,
139
+ insert: (text) => {
140
+ const needsSpace = cursorOffset === input.length && input.length > 0 && !/\s$/.test(input);
141
+ const insertText = needsSpace ? ' ' + text : text;
142
+ const newValue = input.slice(0, cursorOffset) + insertText + input.slice(cursorOffset);
143
+ lastInternalInputRef.current = newValue;
144
+ onInputChange(newValue);
145
+ setCursorOffset(cursorOffset + insertText.length);
146
+ },
147
+ setInputWithCursor: (value, cursor) => {
148
+ lastInternalInputRef.current = value;
149
+ onInputChange(value);
150
+ setCursorOffset(cursor);
151
+ }
152
+ };
153
+ }
154
+ const store = useAppStateStore();
155
+ const setAppState = useSetAppState();
156
+ const tasks = useAppState(s => s.tasks);
157
+ const replBridgeConnected = useAppState(s => s.replBridgeConnected);
158
+ const replBridgeExplicit = useAppState(s => s.replBridgeExplicit);
159
+ const replBridgeReconnecting = useAppState(s => s.replBridgeReconnecting);
160
+ // Must match BridgeStatusIndicator's render condition (PromptInputFooter.tsx) —
161
+ // the pill returns null for implicit-and-not-reconnecting, so nav must too,
162
+ // otherwise bridge becomes an invisible selection stop.
163
+ const bridgeFooterVisible = replBridgeConnected && (replBridgeExplicit || replBridgeReconnecting);
164
+ // Tmux pill (ant-only) — visible when there's an active tungsten session
165
+ const hasTungstenSession = useAppState(s => "external" === 'ant' && s.tungstenActiveSession !== undefined);
166
+ const tmuxFooterVisible = "external" === 'ant' && hasTungstenSession;
167
+ // WebBrowser pill — visible when a browser is open
168
+ const bagelFooterVisible = useAppState(s => false);
169
+ const teamContext = useAppState(s => s.teamContext);
170
+ const queuedCommands = useCommandQueue();
171
+ const promptSuggestionState = useAppState(s => s.promptSuggestion);
172
+ const speculation = useAppState(s => s.speculation);
173
+ const speculationSessionTimeSavedMs = useAppState(s => s.speculationSessionTimeSavedMs);
174
+ const viewingAgentTaskId = useAppState(s => s.viewingAgentTaskId);
175
+ const viewSelectionMode = useAppState(s => s.viewSelectionMode);
176
+ const showSpinnerTree = useAppState(s => s.expandedView) === 'teammates';
177
+ const { companion: _companion, companionMuted } = feature('BUDDY') ? getGlobalConfig() : {
178
+ companion: undefined,
179
+ companionMuted: undefined
180
+ };
181
+ const companionFooterVisible = !!_companion && !companionMuted;
182
+ // Brief mode: BriefSpinner/BriefIdleStatus own the 2-row footprint above
183
+ // the input. Dropping marginTop here lets the spinner sit flush against
184
+ // the input bar. viewingAgentTaskId mirrors the gate on both (Spinner.tsx,
185
+ // REPL.tsx) — teammate view falls back to SpinnerWithVerbInner which has
186
+ // its own marginTop, so the gap stays even without ours.
187
+ const briefOwnsGap = feature('KAIROS') || feature('KAIROS_BRIEF') ?
188
+ // biome-ignore lint/correctness/useHookAtTopLevel: feature() is a compile-time constant
189
+ useAppState(s => s.isBriefOnly) && !viewingAgentTaskId : false;
190
+ const mainLoopModel_ = useAppState(s => s.mainLoopModel);
191
+ const mainLoopModelForSession = useAppState(s => s.mainLoopModelForSession);
192
+ const thinkingEnabled = useAppState(s => s.thinkingEnabled);
193
+ const isFastMode = useAppState(s => isFastModeEnabled() ? s.fastMode : false);
194
+ const effortValue = useAppState(s => s.effortValue);
195
+ const viewedTeammate = getViewedTeammateTask(store.getState());
196
+ const viewingAgentName = viewedTeammate?.identity.agentName;
197
+ // identity.color is typed as `string | undefined` (not AgentColorName) because
198
+ // teammate identity comes from file-based config. Validate before casting to
199
+ // ensure we only use valid color names (falls back to cyan if invalid).
200
+ const viewingAgentColor = viewedTeammate?.identity.color && AGENT_COLORS.includes(viewedTeammate.identity.color) ? viewedTeammate.identity.color : undefined;
201
+ // In-process teammates sorted alphabetically for footer team selector
202
+ const inProcessTeammates = useMemo(() => getRunningTeammatesSorted(tasks), [tasks]);
203
+ // Team mode: all background tasks are in-process teammates
204
+ const isTeammateMode = inProcessTeammates.length > 0 || viewedTeammate !== undefined;
205
+ // When viewing a teammate, show their permission mode in the footer instead of the leader's
206
+ const effectiveToolPermissionContext = useMemo(() => {
207
+ if (viewedTeammate) {
208
+ return {
209
+ ...toolPermissionContext,
210
+ mode: viewedTeammate.permissionMode
211
+ };
212
+ }
213
+ return toolPermissionContext;
214
+ }, [viewedTeammate, toolPermissionContext]);
215
+ const { historyQuery, setHistoryQuery, historyMatch, historyFailedMatch } = useHistorySearch(entry => {
216
+ setPastedContents(entry.pastedContents);
217
+ void onSubmit(entry.display);
218
+ }, input, trackAndSetInput, setCursorOffset, cursorOffset, onModeChange, mode, isSearchingHistory, setIsSearchingHistory, setPastedContents, pastedContents);
219
+ // Counter for paste IDs (shared between images and text).
220
+ // Compute initial value once from existing messages (for --continue/--resume).
221
+ // useRef(fn()) evaluates fn() on every render and discards the result after
222
+ // mount — getInitialPasteId walks all messages + regex-scans text blocks,
223
+ // so guard with a lazy-init pattern to run it exactly once.
224
+ const nextPasteIdRef = useRef(-1);
225
+ if (nextPasteIdRef.current === -1) {
226
+ nextPasteIdRef.current = getInitialPasteId(messages);
227
+ }
228
+ // Armed by onImagePaste; if the very next keystroke is a non-space
229
+ // printable, inputFilter prepends a space before it. Any other input
230
+ // (arrow, escape, backspace, paste, space) disarms without inserting.
231
+ const pendingSpaceAfterPillRef = useRef(false);
232
+ const [showTeamsDialog, setShowTeamsDialog] = useState(false);
233
+ const [showBridgeDialog, setShowBridgeDialog] = useState(false);
234
+ const [teammateFooterIndex, setTeammateFooterIndex] = useState(0);
235
+ // -1 sentinel: tasks pill is selected but no specific agent row is selected yet.
236
+ // First ↓ selects the pill, second ↓ moves to row 0. Prevents double-select
237
+ // of pill + row when both bg tasks (pill) and forked agents (rows) are visible.
238
+ const coordinatorTaskIndex = useAppState(s => s.coordinatorTaskIndex);
239
+ const setCoordinatorTaskIndex = useCallback((v) => setAppState(prev => {
240
+ const next = typeof v === 'function' ? v(prev.coordinatorTaskIndex) : v;
241
+ if (next === prev.coordinatorTaskIndex)
242
+ return prev;
243
+ return {
244
+ ...prev,
245
+ coordinatorTaskIndex: next
246
+ };
247
+ }), [setAppState]);
248
+ const coordinatorTaskCount = useCoordinatorTaskCount();
249
+ // The pill (BackgroundTaskStatus) only renders when non-local_agent bg tasks
250
+ // exist. When only local_agent tasks are running (coordinator/fork mode), the
251
+ // pill is absent, so the -1 sentinel would leave nothing visually selected.
252
+ // In that case, skip -1 and treat 0 as the minimum selectable index.
253
+ const hasBgTaskPill = useMemo(() => Object.values(tasks).some(t => isBackgroundTask(t) && !("external" === 'ant' && isPanelAgentTask(t))), [tasks]);
254
+ const minCoordinatorIndex = hasBgTaskPill ? -1 : 0;
255
+ // Clamp index when tasks complete and the list shrinks beneath the cursor
256
+ useEffect(() => {
257
+ if (coordinatorTaskIndex >= coordinatorTaskCount) {
258
+ setCoordinatorTaskIndex(Math.max(minCoordinatorIndex, coordinatorTaskCount - 1));
259
+ }
260
+ else if (coordinatorTaskIndex < minCoordinatorIndex) {
261
+ setCoordinatorTaskIndex(minCoordinatorIndex);
262
+ }
263
+ }, [coordinatorTaskCount, coordinatorTaskIndex, minCoordinatorIndex]);
264
+ const [isPasting, setIsPasting] = useState(false);
265
+ const [isExternalEditorActive, setIsExternalEditorActive] = useState(false);
266
+ const [showModelPicker, setShowModelPicker] = useState(false);
267
+ const [showQuickOpen, setShowQuickOpen] = useState(false);
268
+ const [showGlobalSearch, setShowGlobalSearch] = useState(false);
269
+ const [showHistoryPicker, setShowHistoryPicker] = useState(false);
270
+ const [showFastModePicker, setShowFastModePicker] = useState(false);
271
+ const [showThinkingToggle, setShowThinkingToggle] = useState(false);
272
+ const [showAutoModeOptIn, setShowAutoModeOptIn] = useState(false);
273
+ const [previousModeBeforeAuto, setPreviousModeBeforeAuto] = useState(null);
274
+ const autoModeOptInTimeoutRef = useRef(null);
275
+ // Check if cursor is on the first line of input
276
+ const isCursorOnFirstLine = useMemo(() => {
277
+ const firstNewlineIndex = input.indexOf('\n');
278
+ if (firstNewlineIndex === -1) {
279
+ return true; // No newlines, cursor is always on first line
280
+ }
281
+ return cursorOffset <= firstNewlineIndex;
282
+ }, [input, cursorOffset]);
283
+ const isCursorOnLastLine = useMemo(() => {
284
+ const lastNewlineIndex = input.lastIndexOf('\n');
285
+ if (lastNewlineIndex === -1) {
286
+ return true; // No newlines, cursor is always on last line
287
+ }
288
+ return cursorOffset > lastNewlineIndex;
289
+ }, [input, cursorOffset]);
290
+ // Derive team info from teamContext (no filesystem I/O needed)
291
+ // A session can only lead one team at a time
292
+ const cachedTeams = useMemo(() => {
293
+ if (!isAgentSwarmsEnabled())
294
+ return [];
295
+ // In-process mode uses Shift+Down/Up navigation instead of footer menu
296
+ if (isInProcessEnabled())
297
+ return [];
298
+ if (!teamContext) {
299
+ return [];
300
+ }
301
+ const teammateCount = count(Object.values(teamContext.teammates), t => t.name !== 'team-lead');
302
+ return [{
303
+ name: teamContext.teamName,
304
+ memberCount: teammateCount,
305
+ runningCount: 0,
306
+ idleCount: 0
307
+ }];
308
+ }, [teamContext]);
309
+ // ─── Footer pill navigation ─────────────────────────────────────────────
310
+ // Which pills render below the input box. Order here IS the nav order
311
+ // (down/right = forward, up/left = back). Selection lives in AppState so
312
+ // pills rendered outside PromptInput (CompanionSprite) can read focus.
313
+ const runningTaskCount = useMemo(() => count(Object.values(tasks), t => t.status === 'running'), [tasks]);
314
+ // Panel shows retained-completed agents too (getVisibleAgentTasks), so the
315
+ // pill must stay navigable whenever the panel has rows — not just when
316
+ // something is running.
317
+ const tasksFooterVisible = (runningTaskCount > 0 || "external" === 'ant' && coordinatorTaskCount > 0) && !shouldHideTasksFooter(tasks, showSpinnerTree);
318
+ const teamsFooterVisible = cachedTeams.length > 0;
319
+ const footerItems = useMemo(() => [tasksFooterVisible && 'tasks', tmuxFooterVisible && 'tmux', bagelFooterVisible && 'bagel', teamsFooterVisible && 'teams', bridgeFooterVisible && 'bridge', companionFooterVisible && 'companion'].filter(Boolean), [tasksFooterVisible, tmuxFooterVisible, bagelFooterVisible, teamsFooterVisible, bridgeFooterVisible, companionFooterVisible]);
320
+ // Effective selection: null if the selected pill stopped rendering (bridge
321
+ // disconnected, task finished). The derivation makes the UI correct
322
+ // immediately; the useEffect below clears the raw state so it doesn't
323
+ // resurrect when the same pill reappears (new task starts → focus stolen).
324
+ const rawFooterSelection = useAppState(s => s.footerSelection);
325
+ const footerItemSelected = rawFooterSelection && footerItems.includes(rawFooterSelection) ? rawFooterSelection : null;
326
+ useEffect(() => {
327
+ if (rawFooterSelection && !footerItemSelected) {
328
+ setAppState(prev => prev.footerSelection === null ? prev : {
329
+ ...prev,
330
+ footerSelection: null
331
+ });
332
+ }
333
+ }, [rawFooterSelection, footerItemSelected, setAppState]);
334
+ const tasksSelected = footerItemSelected === 'tasks';
335
+ const tmuxSelected = footerItemSelected === 'tmux';
336
+ const bagelSelected = footerItemSelected === 'bagel';
337
+ const teamsSelected = footerItemSelected === 'teams';
338
+ const bridgeSelected = footerItemSelected === 'bridge';
339
+ function selectFooterItem(item) {
340
+ setAppState(prev => prev.footerSelection === item ? prev : {
341
+ ...prev,
342
+ footerSelection: item
343
+ });
344
+ if (item === 'tasks') {
345
+ setTeammateFooterIndex(0);
346
+ setCoordinatorTaskIndex(minCoordinatorIndex);
347
+ }
348
+ }
349
+ // delta: +1 = down/right, -1 = up/left. Returns true if nav happened
350
+ // (including deselecting at the start), false if at a boundary.
351
+ function navigateFooter(delta, exitAtStart = false) {
352
+ const idx = footerItemSelected ? footerItems.indexOf(footerItemSelected) : -1;
353
+ const next = footerItems[idx + delta];
354
+ if (next) {
355
+ selectFooterItem(next);
356
+ return true;
357
+ }
358
+ if (delta < 0 && exitAtStart) {
359
+ selectFooterItem(null);
360
+ return true;
361
+ }
362
+ return false;
363
+ }
364
+ // Prompt suggestion hook - reads suggestions generated by forked agent in query loop
365
+ const { suggestion: promptSuggestion, markAccepted, logOutcomeAtSubmission, markShown } = usePromptSuggestion({
366
+ inputValue: input,
367
+ isAssistantResponding: isLoading
368
+ });
369
+ const displayedValue = useMemo(() => isSearchingHistory && historyMatch ? getValueFromInput(typeof historyMatch === 'string' ? historyMatch : historyMatch.display) : input, [isSearchingHistory, historyMatch, input]);
370
+ const thinkTriggers = useMemo(() => findThinkingTriggerPositions(displayedValue), [displayedValue]);
371
+ const ultraplanSessionUrl = useAppState(s => s.ultraplanSessionUrl);
372
+ const ultraplanLaunching = useAppState(s => s.ultraplanLaunching);
373
+ const ultraplanTriggers = useMemo(() => feature('ULTRAPLAN') && !ultraplanSessionUrl && !ultraplanLaunching ? findUltraplanTriggerPositions(displayedValue) : [], [displayedValue, ultraplanSessionUrl, ultraplanLaunching]);
374
+ const ultrareviewTriggers = useMemo(() => isUltrareviewEnabled() ? findUltrareviewTriggerPositions(displayedValue) : [], [displayedValue]);
375
+ const btwTriggers = useMemo(() => findBtwTriggerPositions(displayedValue), [displayedValue]);
376
+ const buddyTriggers = useMemo(() => findBuddyTriggerPositions(displayedValue), [displayedValue]);
377
+ const slashCommandTriggers = useMemo(() => {
378
+ const positions = findSlashCommandPositions(displayedValue);
379
+ // Only highlight valid commands
380
+ return positions.filter(pos => {
381
+ const commandName = displayedValue.slice(pos.start + 1, pos.end); // +1 to skip "/"
382
+ return hasCommand(commandName, commands);
383
+ });
384
+ }, [displayedValue, commands]);
385
+ const tokenBudgetTriggers = useMemo(() => feature('TOKEN_BUDGET') ? findTokenBudgetPositions(displayedValue) : [], [displayedValue]);
386
+ const knownChannelsVersion = useSyncExternalStore(subscribeKnownChannels, getKnownChannelsVersion);
387
+ const slackChannelTriggers = useMemo(() => hasSlackMcpServer(store.getState().mcp.clients) ? findSlackChannelPositions(displayedValue) : [],
388
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- store is a stable ref
389
+ [displayedValue, knownChannelsVersion]);
390
+ // Find @name mentions and highlight with team member's color
391
+ const memberMentionHighlights = useMemo(() => {
392
+ if (!isAgentSwarmsEnabled())
393
+ return [];
394
+ if (!teamContext?.teammates)
395
+ return [];
396
+ const highlights = [];
397
+ const members = teamContext.teammates;
398
+ if (!members)
399
+ return highlights;
400
+ // Find all @name patterns in the input
401
+ const regex = /(^|\s)@([\w-]+)/g;
402
+ const memberValues = Object.values(members);
403
+ let match;
404
+ while ((match = regex.exec(displayedValue)) !== null) {
405
+ const leadingSpace = match[1] ?? '';
406
+ const nameStart = match.index + leadingSpace.length;
407
+ const fullMatch = match[0].trimStart();
408
+ const name = match[2];
409
+ // Check if this name matches a team member
410
+ const member = memberValues.find(t => t.name === name);
411
+ if (member?.color) {
412
+ const themeColor = AGENT_COLOR_TO_THEME_COLOR[member.color];
413
+ if (themeColor) {
414
+ highlights.push({
415
+ start: nameStart,
416
+ end: nameStart + fullMatch.length,
417
+ themeColor
418
+ });
419
+ }
420
+ }
421
+ }
422
+ return highlights;
423
+ }, [displayedValue, teamContext]);
424
+ const imageRefPositions = useMemo(() => parseReferences(displayedValue).filter(r => r.match.startsWith('[Image')).map(r => ({
425
+ start: r.index,
426
+ end: r.index + r.match.length
427
+ })), [displayedValue]);
428
+ // chip.start is the "selected" state: the inverted chip IS the cursor.
429
+ // chip.end stays a normal position so you can park the cursor right after
430
+ // `]` like any other character.
431
+ const cursorAtImageChip = imageRefPositions.some(r => r.start === cursorOffset);
432
+ // up/down movement or a fullscreen click can land the cursor strictly
433
+ // inside a chip; snap to the nearer boundary so it's never editable
434
+ // char-by-char.
435
+ useEffect(() => {
436
+ const inside = imageRefPositions.find(r => cursorOffset > r.start && cursorOffset < r.end);
437
+ if (inside) {
438
+ const mid = (inside.start + inside.end) / 2;
439
+ setCursorOffset(cursorOffset < mid ? inside.start : inside.end);
440
+ }
441
+ }, [cursorOffset, imageRefPositions, setCursorOffset]);
442
+ const combinedHighlights = useMemo(() => {
443
+ const highlights = [];
444
+ // Invert the [Image #N] chip when the cursor is at chip.start (the
445
+ // "selected" state) so backspace-to-delete is visually obvious.
446
+ for (const ref of imageRefPositions) {
447
+ if (cursorOffset === ref.start) {
448
+ highlights.push({
449
+ start: ref.start,
450
+ end: ref.end,
451
+ color: undefined,
452
+ inverse: true,
453
+ priority: 8
454
+ });
455
+ }
456
+ }
457
+ if (isSearchingHistory && historyMatch && !historyFailedMatch) {
458
+ highlights.push({
459
+ start: cursorOffset,
460
+ end: cursorOffset + historyQuery.length,
461
+ color: 'warning',
462
+ priority: 20
463
+ });
464
+ }
465
+ // Add "btw" highlighting (solid yellow)
466
+ for (const trigger of btwTriggers) {
467
+ highlights.push({
468
+ start: trigger.start,
469
+ end: trigger.end,
470
+ color: 'warning',
471
+ priority: 15
472
+ });
473
+ }
474
+ // Add /command highlighting (blue)
475
+ for (const trigger of slashCommandTriggers) {
476
+ highlights.push({
477
+ start: trigger.start,
478
+ end: trigger.end,
479
+ color: 'suggestion',
480
+ priority: 5
481
+ });
482
+ }
483
+ // Add token budget highlighting (blue)
484
+ for (const trigger of tokenBudgetTriggers) {
485
+ highlights.push({
486
+ start: trigger.start,
487
+ end: trigger.end,
488
+ color: 'suggestion',
489
+ priority: 5
490
+ });
491
+ }
492
+ for (const trigger of slackChannelTriggers) {
493
+ highlights.push({
494
+ start: trigger.start,
495
+ end: trigger.end,
496
+ color: 'suggestion',
497
+ priority: 5
498
+ });
499
+ }
500
+ // Add @name highlighting with team member's color
501
+ for (const mention of memberMentionHighlights) {
502
+ highlights.push({
503
+ start: mention.start,
504
+ end: mention.end,
505
+ color: mention.themeColor,
506
+ priority: 5
507
+ });
508
+ }
509
+ // Dim interim voice dictation text
510
+ if (voiceInterimRange) {
511
+ highlights.push({
512
+ start: voiceInterimRange.start,
513
+ end: voiceInterimRange.end,
514
+ color: undefined,
515
+ dimColor: true,
516
+ priority: 1
517
+ });
518
+ }
519
+ // Rainbow highlighting for ultrathink keyword (per-character cycling colors)
520
+ if (isUltrathinkEnabled()) {
521
+ for (const trigger of thinkTriggers) {
522
+ for (let i = trigger.start; i < trigger.end; i++) {
523
+ highlights.push({
524
+ start: i,
525
+ end: i + 1,
526
+ color: getRainbowColor(i - trigger.start),
527
+ shimmerColor: getRainbowColor(i - trigger.start, true),
528
+ priority: 10
529
+ });
530
+ }
531
+ }
532
+ }
533
+ // Same rainbow treatment for the ultraplan keyword
534
+ if (feature('ULTRAPLAN')) {
535
+ for (const trigger of ultraplanTriggers) {
536
+ for (let i = trigger.start; i < trigger.end; i++) {
537
+ highlights.push({
538
+ start: i,
539
+ end: i + 1,
540
+ color: getRainbowColor(i - trigger.start),
541
+ shimmerColor: getRainbowColor(i - trigger.start, true),
542
+ priority: 10
543
+ });
544
+ }
545
+ }
546
+ }
547
+ // Same rainbow treatment for the ultrareview keyword
548
+ for (const trigger of ultrareviewTriggers) {
549
+ for (let i = trigger.start; i < trigger.end; i++) {
550
+ highlights.push({
551
+ start: i,
552
+ end: i + 1,
553
+ color: getRainbowColor(i - trigger.start),
554
+ shimmerColor: getRainbowColor(i - trigger.start, true),
555
+ priority: 10
556
+ });
557
+ }
558
+ }
559
+ // Rainbow for /buddy
560
+ for (const trigger of buddyTriggers) {
561
+ for (let i = trigger.start; i < trigger.end; i++) {
562
+ highlights.push({
563
+ start: i,
564
+ end: i + 1,
565
+ color: getRainbowColor(i - trigger.start),
566
+ shimmerColor: getRainbowColor(i - trigger.start, true),
567
+ priority: 10
568
+ });
569
+ }
570
+ }
571
+ return highlights;
572
+ }, [isSearchingHistory, historyQuery, historyMatch, historyFailedMatch, cursorOffset, btwTriggers, imageRefPositions, memberMentionHighlights, slashCommandTriggers, tokenBudgetTriggers, slackChannelTriggers, displayedValue, voiceInterimRange, thinkTriggers, ultraplanTriggers, ultrareviewTriggers, buddyTriggers]);
573
+ const { addNotification, removeNotification } = useNotifications();
574
+ // Show ultrathink notification
575
+ useEffect(() => {
576
+ if (thinkTriggers.length && isUltrathinkEnabled()) {
577
+ addNotification({
578
+ key: 'ultrathink-active',
579
+ text: 'Effort set to high for this turn',
580
+ priority: 'immediate',
581
+ timeoutMs: 5000
582
+ });
583
+ }
584
+ else {
585
+ removeNotification('ultrathink-active');
586
+ }
587
+ }, [addNotification, removeNotification, thinkTriggers.length]);
588
+ useEffect(() => {
589
+ if (feature('ULTRAPLAN') && ultraplanTriggers.length) {
590
+ addNotification({
591
+ key: 'ultraplan-active',
592
+ text: 'This prompt will launch an ultraplan session in Context Code on the web',
593
+ priority: 'immediate',
594
+ timeoutMs: 5000
595
+ });
596
+ }
597
+ else {
598
+ removeNotification('ultraplan-active');
599
+ }
600
+ }, [addNotification, removeNotification, ultraplanTriggers.length]);
601
+ useEffect(() => {
602
+ if (isUltrareviewEnabled() && ultrareviewTriggers.length) {
603
+ addNotification({
604
+ key: 'ultrareview-active',
605
+ text: 'Run /ultrareview after Claude finishes to review these changes in the cloud',
606
+ priority: 'immediate',
607
+ timeoutMs: 5000
608
+ });
609
+ }
610
+ }, [addNotification, ultrareviewTriggers.length]);
611
+ // Track input length for stash hint
612
+ const prevInputLengthRef = useRef(input.length);
613
+ const peakInputLengthRef = useRef(input.length);
614
+ // Dismiss stash hint when user makes any input change
615
+ const dismissStashHint = useCallback(() => {
616
+ removeNotification('stash-hint');
617
+ }, [removeNotification]);
618
+ // Show stash hint when user gradually clears substantial input
619
+ useEffect(() => {
620
+ const prevLength = prevInputLengthRef.current;
621
+ const peakLength = peakInputLengthRef.current;
622
+ const currentLength = input.length;
623
+ prevInputLengthRef.current = currentLength;
624
+ // Update peak when input grows
625
+ if (currentLength > peakLength) {
626
+ peakInputLengthRef.current = currentLength;
627
+ return;
628
+ }
629
+ // Reset state when input is empty
630
+ if (currentLength === 0) {
631
+ peakInputLengthRef.current = 0;
632
+ return;
633
+ }
634
+ // Detect gradual clear: peak was high, current is low, but this wasn't a single big jump
635
+ // (rapid clears like esc-esc go from 20+ to 0 in one step)
636
+ const clearedSubstantialInput = peakLength >= 20 && currentLength <= 5;
637
+ const wasRapidClear = prevLength >= 20 && currentLength <= 5;
638
+ if (clearedSubstantialInput && !wasRapidClear) {
639
+ const config = getGlobalConfig();
640
+ if (!config.hasUsedStash) {
641
+ addNotification({
642
+ key: 'stash-hint',
643
+ jsx: _jsxs(Text, { dimColor: true, children: ["Tip:", ' ', _jsx(ConfigurableShortcutHint, { action: "chat:stash", context: "Chat", fallback: "ctrl+s", description: "stash" })] }),
644
+ priority: 'immediate',
645
+ timeoutMs: FOOTER_TEMPORARY_STATUS_TIMEOUT
646
+ });
647
+ }
648
+ peakInputLengthRef.current = currentLength;
649
+ }
650
+ }, [input.length, addNotification]);
651
+ // Initialize input buffer for undo functionality
652
+ const { pushToBuffer, undo, canUndo, clearBuffer } = useInputBuffer({
653
+ maxBufferSize: 50,
654
+ debounceMs: 1000
655
+ });
656
+ useMaybeTruncateInput({
657
+ input,
658
+ pastedContents,
659
+ onInputChange: trackAndSetInput,
660
+ setCursorOffset,
661
+ setPastedContents
662
+ });
663
+ const defaultPlaceholder = usePromptInputPlaceholder({
664
+ input,
665
+ submitCount,
666
+ viewingAgentName
667
+ });
668
+ const onChange = useCallback((value) => {
669
+ if (value === '?') {
670
+ logEvent('tengu_help_toggled', {});
671
+ setHelpOpen(v => !v);
672
+ return;
673
+ }
674
+ setHelpOpen(false);
675
+ // Dismiss stash hint when user makes any input change
676
+ dismissStashHint();
677
+ // Cancel any pending prompt suggestion and speculation when user types
678
+ abortPromptSuggestion();
679
+ abortSpeculation(setAppState);
680
+ // Check if this is a single character insertion at the start
681
+ const isSingleCharInsertion = value.length === input.length + 1;
682
+ const insertedAtStart = cursorOffset === 0;
683
+ const mode = getModeFromInput(value);
684
+ if (insertedAtStart && mode !== 'prompt') {
685
+ if (isSingleCharInsertion) {
686
+ onModeChange(mode);
687
+ return;
688
+ }
689
+ // Multi-char insertion into empty input (e.g. tab-accepting "! gcloud auth login")
690
+ if (input.length === 0) {
691
+ onModeChange(mode);
692
+ const valueWithoutMode = getValueFromInput(value).replaceAll('\t', ' ');
693
+ pushToBuffer(input, cursorOffset, pastedContents);
694
+ trackAndSetInput(valueWithoutMode);
695
+ setCursorOffset(valueWithoutMode.length);
696
+ return;
697
+ }
698
+ }
699
+ const processedValue = value.replaceAll('\t', ' ');
700
+ // Push current state to buffer before making changes
701
+ if (input !== processedValue) {
702
+ pushToBuffer(input, cursorOffset, pastedContents);
703
+ }
704
+ // Deselect footer items when user types
705
+ setAppState(prev => prev.footerSelection === null ? prev : {
706
+ ...prev,
707
+ footerSelection: null
708
+ });
709
+ trackAndSetInput(processedValue);
710
+ }, [trackAndSetInput, onModeChange, input, cursorOffset, pushToBuffer, pastedContents, dismissStashHint, setAppState]);
711
+ const { resetHistory, onHistoryUp, onHistoryDown, dismissSearchHint, historyIndex } = useArrowKeyHistory((value, historyMode, pastedContents) => {
712
+ onChange(value);
713
+ onModeChange(historyMode);
714
+ setPastedContents(pastedContents);
715
+ }, input, pastedContents, setCursorOffset, mode);
716
+ // Dismiss search hint when user starts searching
717
+ useEffect(() => {
718
+ if (isSearchingHistory) {
719
+ dismissSearchHint();
720
+ }
721
+ }, [isSearchingHistory, dismissSearchHint]);
722
+ // Only use history navigation when there are 0 or 1 slash command suggestions.
723
+ // Footer nav is NOT here — when a pill is selected, TextInput focus=false so
724
+ // these never fire. The Footer keybinding context handles ↑/↓ instead.
725
+ function handleHistoryUp() {
726
+ if (suggestions.length > 1) {
727
+ return;
728
+ }
729
+ // Only navigate history when cursor is on the first line.
730
+ // In multiline inputs, up arrow should move the cursor (handled by TextInput)
731
+ // and only trigger history when at the top of the input.
732
+ if (!isCursorOnFirstLine) {
733
+ return;
734
+ }
735
+ // If there's an editable queued command, move it to the input for editing when UP is pressed
736
+ const hasEditableCommand = queuedCommands.some(isQueuedCommandEditable);
737
+ if (hasEditableCommand) {
738
+ void popAllCommandsFromQueue();
739
+ return;
740
+ }
741
+ onHistoryUp();
742
+ }
743
+ function handleHistoryDown() {
744
+ if (suggestions.length > 1) {
745
+ return;
746
+ }
747
+ // Only navigate history/footer when cursor is on the last line.
748
+ // In multiline inputs, down arrow should move the cursor (handled by TextInput)
749
+ // and only trigger navigation when at the bottom of the input.
750
+ if (!isCursorOnLastLine) {
751
+ return;
752
+ }
753
+ // At bottom of history → enter footer at first visible pill
754
+ if (onHistoryDown() && footerItems.length > 0) {
755
+ const first = footerItems[0];
756
+ selectFooterItem(first);
757
+ if (first === 'tasks' && !getGlobalConfig().hasSeenTasksHint) {
758
+ saveGlobalConfig(c => c.hasSeenTasksHint ? c : {
759
+ ...c,
760
+ hasSeenTasksHint: true
761
+ });
762
+ }
763
+ }
764
+ }
765
+ // Create a suggestions state directly - we'll sync it with useTypeahead later
766
+ const [suggestionsState, setSuggestionsStateRaw] = useState({
767
+ suggestions: [],
768
+ selectedSuggestion: -1,
769
+ commandArgumentHint: undefined
770
+ });
771
+ // Setter for suggestions state
772
+ const setSuggestionsState = useCallback((updater) => {
773
+ setSuggestionsStateRaw(prev => typeof updater === 'function' ? updater(prev) : updater);
774
+ }, []);
775
+ const onSubmit = useCallback(async (inputParam, isSubmittingSlashCommand = false) => {
776
+ inputParam = inputParam.trimEnd();
777
+ // Don't submit if a footer indicator is being opened. Read fresh from
778
+ // store — footer:openSelected calls selectFooterItem(null) then onSubmit
779
+ // in the same tick, and the closure value hasn't updated yet. Apply the
780
+ // same "still visible?" derivation as footerItemSelected so a stale
781
+ // selection (pill disappeared) doesn't swallow Enter.
782
+ const state = store.getState();
783
+ if (state.footerSelection && footerItems.includes(state.footerSelection)) {
784
+ return;
785
+ }
786
+ // Enter in selection modes confirms selection (useBackgroundTaskNavigation).
787
+ // BaseTextInput's useInput registers before that hook (child effects fire first),
788
+ // so without this guard Enter would double-fire and auto-submit the suggestion.
789
+ if (state.viewSelectionMode === 'selecting-agent') {
790
+ return;
791
+ }
792
+ // Check for images early - we need this for suggestion logic below
793
+ const hasImages = Object.values(pastedContents).some(c => c.type === 'image');
794
+ // If input is empty OR matches the suggestion, submit it
795
+ // But if there are images attached, don't auto-accept the suggestion -
796
+ // the user wants to submit just the image(s).
797
+ // Only in leader view — promptSuggestion is leader-context, not teammate.
798
+ const suggestionText = promptSuggestionState.text;
799
+ const inputMatchesSuggestion = inputParam.trim() === '' || inputParam === suggestionText;
800
+ if (inputMatchesSuggestion && suggestionText && !hasImages && !state.viewingAgentTaskId) {
801
+ // If speculation is active, inject messages immediately as they stream
802
+ if (speculation.status === 'active') {
803
+ markAccepted();
804
+ // skipReset: resetSuggestion would abort the speculation before we accept it
805
+ logOutcomeAtSubmission(suggestionText, {
806
+ skipReset: true
807
+ });
808
+ void onSubmitProp(suggestionText, {
809
+ setCursorOffset,
810
+ clearBuffer,
811
+ resetHistory
812
+ }, {
813
+ state: speculation,
814
+ speculationSessionTimeSavedMs: speculationSessionTimeSavedMs,
815
+ setAppState
816
+ });
817
+ return; // Skip normal query - speculation handled it
818
+ }
819
+ // Regular suggestion acceptance (requires shownAt > 0)
820
+ if (promptSuggestionState.shownAt > 0) {
821
+ markAccepted();
822
+ inputParam = suggestionText;
823
+ }
824
+ }
825
+ // Handle @name direct message
826
+ if (isAgentSwarmsEnabled()) {
827
+ const directMessage = parseDirectMemberMessage(inputParam);
828
+ if (directMessage) {
829
+ const result = await sendDirectMemberMessage(directMessage.recipientName, directMessage.message, teamContext, writeToMailbox);
830
+ if (result.success) {
831
+ addNotification({
832
+ key: 'direct-message-sent',
833
+ text: `Sent to @${result.recipientName}`,
834
+ priority: 'immediate',
835
+ timeoutMs: 3000
836
+ });
837
+ trackAndSetInput('');
838
+ setCursorOffset(0);
839
+ clearBuffer();
840
+ resetHistory();
841
+ return;
842
+ }
843
+ else if (result.error === 'no_team_context') {
844
+ // No team context - fall through to normal prompt submission
845
+ }
846
+ else {
847
+ // Unknown recipient - fall through to normal prompt submission
848
+ // This allows e.g. "@utils explain this code" to be sent as a prompt
849
+ }
850
+ }
851
+ }
852
+ // Allow submission if there are images attached, even without text
853
+ if (inputParam.trim() === '' && !hasImages) {
854
+ return;
855
+ }
856
+ // PromptInput UX: Check if suggestions dropdown is showing
857
+ // For directory suggestions, allow submission (Tab is used for completion)
858
+ const hasDirectorySuggestions = suggestionsState.suggestions.length > 0 && suggestionsState.suggestions.every(s => s.description === 'directory');
859
+ if (suggestionsState.suggestions.length > 0 && !isSubmittingSlashCommand && !hasDirectorySuggestions) {
860
+ logForDebugging(`[onSubmit] early return: suggestions showing (count=${suggestionsState.suggestions.length})`);
861
+ return; // Don't submit, user needs to clear suggestions first
862
+ }
863
+ // Log suggestion outcome if one exists
864
+ if (promptSuggestionState.text && promptSuggestionState.shownAt > 0) {
865
+ logOutcomeAtSubmission(inputParam);
866
+ }
867
+ // Clear stash hint notification on submit
868
+ removeNotification('stash-hint');
869
+ // Route input to viewed agent (in-process teammate or named local_agent).
870
+ const activeAgent = getActiveAgentForInput(store.getState());
871
+ if (activeAgent.type !== 'leader' && onAgentSubmit) {
872
+ logEvent('tengu_transcript_input_to_teammate', {});
873
+ await onAgentSubmit(inputParam, activeAgent.task, {
874
+ setCursorOffset,
875
+ clearBuffer,
876
+ resetHistory
877
+ });
878
+ return;
879
+ }
880
+ // Normal leader submission
881
+ await onSubmitProp(inputParam, {
882
+ setCursorOffset,
883
+ clearBuffer,
884
+ resetHistory
885
+ });
886
+ }, [promptSuggestionState, speculation, speculationSessionTimeSavedMs, teamContext, store, footerItems, suggestionsState.suggestions, onSubmitProp, onAgentSubmit, clearBuffer, resetHistory, logOutcomeAtSubmission, setAppState, markAccepted, pastedContents, removeNotification]);
887
+ const { suggestions, selectedSuggestion, commandArgumentHint, inlineGhostText, maxColumnWidth } = useTypeahead({
888
+ commands,
889
+ onInputChange: trackAndSetInput,
890
+ onSubmit,
891
+ setCursorOffset,
892
+ input,
893
+ cursorOffset,
894
+ mode,
895
+ agents,
896
+ setSuggestionsState,
897
+ suggestionsState,
898
+ suppressSuggestions: isSearchingHistory || historyIndex > 0,
899
+ markAccepted,
900
+ onModeChange
901
+ });
902
+ // Track if prompt suggestion should be shown (computed later with terminal width).
903
+ // Hidden in teammate view — suggestion is leader-context only.
904
+ const showPromptSuggestion = mode === 'prompt' && suggestions.length === 0 && promptSuggestion && !viewingAgentTaskId;
905
+ if (showPromptSuggestion) {
906
+ markShown();
907
+ }
908
+ // If suggestion was generated but can't be shown due to timing, log suppression.
909
+ // Exclude teammate view: markShown() is gated above, so shownAt stays 0 there —
910
+ // but that's not a timing failure, the suggestion is valid when returning to leader.
911
+ if (promptSuggestionState.text && !promptSuggestion && promptSuggestionState.shownAt === 0 && !viewingAgentTaskId) {
912
+ logSuggestionSuppressed('timing', promptSuggestionState.text);
913
+ setAppState(prev => ({
914
+ ...prev,
915
+ promptSuggestion: {
916
+ text: null,
917
+ promptId: null,
918
+ shownAt: 0,
919
+ acceptedAt: 0,
920
+ generationRequestId: null
921
+ }
922
+ }));
923
+ }
924
+ function onImagePaste(image, mediaType, filename, dimensions, sourcePath) {
925
+ logEvent('tengu_paste_image', {});
926
+ onModeChange('prompt');
927
+ const pasteId = nextPasteIdRef.current++;
928
+ const newContent = {
929
+ id: pasteId,
930
+ type: 'image',
931
+ content: image,
932
+ mediaType: mediaType || 'image/png',
933
+ // default to PNG if not provided
934
+ filename: filename || 'Pasted image',
935
+ dimensions,
936
+ sourcePath
937
+ };
938
+ // Cache path immediately (fast) so links work on render
939
+ cacheImagePath(newContent);
940
+ // Store image to disk in background
941
+ void storeImage(newContent);
942
+ // Update UI
943
+ setPastedContents(prev => ({
944
+ ...prev,
945
+ [pasteId]: newContent
946
+ }));
947
+ // Multi-image paste calls onImagePaste in a loop. If the ref is already
948
+ // armed, the previous pill's lazy space fires now (before this pill)
949
+ // rather than being lost.
950
+ const prefix = pendingSpaceAfterPillRef.current ? ' ' : '';
951
+ insertTextAtCursor(prefix + formatImageRef(pasteId));
952
+ pendingSpaceAfterPillRef.current = true;
953
+ }
954
+ // Prune images whose [Image #N] placeholder is no longer in the input text.
955
+ // Covers pill backspace, Ctrl+U, char-by-char deletion — any edit that drops
956
+ // the ref. onImagePaste batches setPastedContents + insertTextAtCursor in the
957
+ // same event, so this effect sees the placeholder already present.
958
+ useEffect(() => {
959
+ const referencedIds = new Set(parseReferences(input).map(r => r.id));
960
+ setPastedContents(prev => {
961
+ const orphaned = Object.values(prev).filter(c => c.type === 'image' && !referencedIds.has(c.id));
962
+ if (orphaned.length === 0)
963
+ return prev;
964
+ const next = {
965
+ ...prev
966
+ };
967
+ for (const img of orphaned)
968
+ delete next[img.id];
969
+ return next;
970
+ });
971
+ }, [input, setPastedContents]);
972
+ function onTextPaste(rawText) {
973
+ pendingSpaceAfterPillRef.current = false;
974
+ // Clean up pasted text - strip ANSI escape codes and normalize line endings and tabs
975
+ let text = stripAnsi(rawText).replace(/\r/g, '\n').replaceAll('\t', ' ');
976
+ // Match typed/auto-suggest: `!cmd` pasted into empty input enters bash mode.
977
+ if (input.length === 0) {
978
+ const pastedMode = getModeFromInput(text);
979
+ if (pastedMode !== 'prompt') {
980
+ onModeChange(pastedMode);
981
+ text = getValueFromInput(text);
982
+ }
983
+ }
984
+ const numLines = getPastedTextRefNumLines(text);
985
+ // Limit the number of lines to show in the input
986
+ // If the overall layout is too high then Ink will repaint
987
+ // the entire terminal.
988
+ // The actual required height is dependent on the content, this
989
+ // is just an estimate.
990
+ const maxLines = Math.min(rows - 10, 2);
991
+ // Use special handling for long pasted text (>PASTE_THRESHOLD chars)
992
+ // or if it exceeds the number of lines we want to show
993
+ if (text.length > PASTE_THRESHOLD || numLines > maxLines) {
994
+ const pasteId = nextPasteIdRef.current++;
995
+ const newContent = {
996
+ id: pasteId,
997
+ type: 'text',
998
+ content: text
999
+ };
1000
+ setPastedContents(prev => ({
1001
+ ...prev,
1002
+ [pasteId]: newContent
1003
+ }));
1004
+ insertTextAtCursor(formatPastedTextRef(pasteId, numLines));
1005
+ }
1006
+ else {
1007
+ // For shorter pastes, just insert the text normally
1008
+ insertTextAtCursor(text);
1009
+ }
1010
+ }
1011
+ const lazySpaceInputFilter = useCallback((input, key) => {
1012
+ if (!pendingSpaceAfterPillRef.current)
1013
+ return input;
1014
+ pendingSpaceAfterPillRef.current = false;
1015
+ if (isNonSpacePrintable(input, key))
1016
+ return ' ' + input;
1017
+ return input;
1018
+ }, []);
1019
+ function insertTextAtCursor(text) {
1020
+ // Push current state to buffer before inserting
1021
+ pushToBuffer(input, cursorOffset, pastedContents);
1022
+ const newInput = input.slice(0, cursorOffset) + text + input.slice(cursorOffset);
1023
+ trackAndSetInput(newInput);
1024
+ setCursorOffset(cursorOffset + text.length);
1025
+ }
1026
+ const doublePressEscFromEmpty = useDoublePress(() => { }, () => onShowMessageSelector());
1027
+ // Function to get the queued command for editing. Returns true if commands were popped.
1028
+ const popAllCommandsFromQueue = useCallback(() => {
1029
+ const result = popAllEditable(input, cursorOffset);
1030
+ if (!result) {
1031
+ return false;
1032
+ }
1033
+ trackAndSetInput(result.text);
1034
+ onModeChange('prompt'); // Always prompt mode for queued commands
1035
+ setCursorOffset(result.cursorOffset);
1036
+ // Restore images from queued commands to pastedContents
1037
+ if (result.images.length > 0) {
1038
+ setPastedContents(prev => {
1039
+ const newContents = {
1040
+ ...prev
1041
+ };
1042
+ for (const image of result.images) {
1043
+ newContents[image.id] = image;
1044
+ }
1045
+ return newContents;
1046
+ });
1047
+ }
1048
+ return true;
1049
+ }, [trackAndSetInput, onModeChange, input, cursorOffset, setPastedContents]);
1050
+ // Insert the at-mentioned reference (the file and, optionally, a line range) when
1051
+ // we receive an at-mentioned notification the IDE.
1052
+ const onIdeAtMentioned = function (atMentioned) {
1053
+ logEvent('tengu_ext_at_mentioned', {});
1054
+ let atMentionedText;
1055
+ const relativePath = path.relative(getCwd(), atMentioned.filePath);
1056
+ if (atMentioned.lineStart && atMentioned.lineEnd) {
1057
+ atMentionedText = atMentioned.lineStart === atMentioned.lineEnd ? `@${relativePath}#L${atMentioned.lineStart} ` : `@${relativePath}#L${atMentioned.lineStart}-${atMentioned.lineEnd} `;
1058
+ }
1059
+ else {
1060
+ atMentionedText = `@${relativePath} `;
1061
+ }
1062
+ const cursorChar = input[cursorOffset - 1] ?? ' ';
1063
+ if (!/\s/.test(cursorChar)) {
1064
+ atMentionedText = ` ${atMentionedText}`;
1065
+ }
1066
+ insertTextAtCursor(atMentionedText);
1067
+ };
1068
+ useIdeAtMentioned(mcpClients, onIdeAtMentioned);
1069
+ // Handler for chat:undo - undo last edit
1070
+ const handleUndo = useCallback(() => {
1071
+ if (canUndo) {
1072
+ const previousState = undo();
1073
+ if (previousState) {
1074
+ trackAndSetInput(previousState.text);
1075
+ setCursorOffset(previousState.cursorOffset);
1076
+ setPastedContents(previousState.pastedContents);
1077
+ }
1078
+ }
1079
+ }, [canUndo, undo, trackAndSetInput, setPastedContents]);
1080
+ // Handler for chat:newline - insert a newline at the cursor position
1081
+ const handleNewline = useCallback(() => {
1082
+ pushToBuffer(input, cursorOffset, pastedContents);
1083
+ const newInput = input.slice(0, cursorOffset) + '\n' + input.slice(cursorOffset);
1084
+ trackAndSetInput(newInput);
1085
+ setCursorOffset(cursorOffset + 1);
1086
+ }, [input, cursorOffset, trackAndSetInput, setCursorOffset, pushToBuffer, pastedContents]);
1087
+ // Handler for chat:externalEditor - edit in $EDITOR
1088
+ const handleExternalEditor = useCallback(async () => {
1089
+ logEvent('tengu_external_editor_used', {});
1090
+ setIsExternalEditorActive(true);
1091
+ try {
1092
+ // Pass pastedContents to expand collapsed text references
1093
+ const result = await editPromptInEditor(input, pastedContents);
1094
+ if (result.error) {
1095
+ addNotification({
1096
+ key: 'external-editor-error',
1097
+ text: result.error,
1098
+ color: 'warning',
1099
+ priority: 'high'
1100
+ });
1101
+ }
1102
+ if (result.content !== null && result.content !== input) {
1103
+ // Push current state to buffer before making changes
1104
+ pushToBuffer(input, cursorOffset, pastedContents);
1105
+ trackAndSetInput(result.content);
1106
+ setCursorOffset(result.content.length);
1107
+ }
1108
+ }
1109
+ catch (err) {
1110
+ if (err instanceof Error) {
1111
+ logError(err);
1112
+ }
1113
+ addNotification({
1114
+ key: 'external-editor-error',
1115
+ text: `External editor failed: ${errorMessage(err)}`,
1116
+ color: 'warning',
1117
+ priority: 'high'
1118
+ });
1119
+ }
1120
+ finally {
1121
+ setIsExternalEditorActive(false);
1122
+ }
1123
+ }, [input, cursorOffset, pastedContents, pushToBuffer, trackAndSetInput, addNotification]);
1124
+ // Handler for chat:stash - stash/unstash prompt
1125
+ const handleStash = useCallback(() => {
1126
+ if (input.trim() === '' && stashedPrompt !== undefined) {
1127
+ // Pop stash when input is empty
1128
+ trackAndSetInput(stashedPrompt.text);
1129
+ setCursorOffset(stashedPrompt.cursorOffset);
1130
+ setPastedContents(stashedPrompt.pastedContents);
1131
+ setStashedPrompt(undefined);
1132
+ }
1133
+ else if (input.trim() !== '') {
1134
+ // Push to stash (save text, cursor position, and pasted contents)
1135
+ setStashedPrompt({
1136
+ text: input,
1137
+ cursorOffset,
1138
+ pastedContents
1139
+ });
1140
+ trackAndSetInput('');
1141
+ setCursorOffset(0);
1142
+ setPastedContents({});
1143
+ // Track usage for /discover and stop showing hint
1144
+ saveGlobalConfig(c => {
1145
+ if (c.hasUsedStash)
1146
+ return c;
1147
+ return {
1148
+ ...c,
1149
+ hasUsedStash: true
1150
+ };
1151
+ });
1152
+ }
1153
+ }, [input, cursorOffset, stashedPrompt, trackAndSetInput, setStashedPrompt, pastedContents, setPastedContents]);
1154
+ // Handler for chat:modelPicker - toggle model picker
1155
+ const handleModelPicker = useCallback(() => {
1156
+ setShowModelPicker(prev => !prev);
1157
+ if (helpOpen) {
1158
+ setHelpOpen(false);
1159
+ }
1160
+ }, [helpOpen]);
1161
+ // Handler for chat:fastMode - toggle fast mode picker
1162
+ const handleFastModePicker = useCallback(() => {
1163
+ setShowFastModePicker(prev => !prev);
1164
+ if (helpOpen) {
1165
+ setHelpOpen(false);
1166
+ }
1167
+ }, [helpOpen]);
1168
+ // Handler for chat:thinkingToggle - toggle thinking mode
1169
+ const handleThinkingToggle = useCallback(() => {
1170
+ setShowThinkingToggle(prev => !prev);
1171
+ if (helpOpen) {
1172
+ setHelpOpen(false);
1173
+ }
1174
+ }, [helpOpen]);
1175
+ // Handler for chat:cycleMode - cycle through permission modes
1176
+ const handleCycleMode = useCallback(() => {
1177
+ // When viewing a teammate, cycle their mode instead of the leader's
1178
+ if (isAgentSwarmsEnabled() && viewedTeammate && viewingAgentTaskId) {
1179
+ const teammateContext = {
1180
+ ...toolPermissionContext,
1181
+ mode: viewedTeammate.permissionMode
1182
+ };
1183
+ // Pass undefined for teamContext (unused but kept for API compatibility)
1184
+ const nextMode = getNextPermissionMode(teammateContext, undefined);
1185
+ logEvent('tengu_mode_cycle', {
1186
+ to: nextMode
1187
+ });
1188
+ const teammateTaskId = viewingAgentTaskId;
1189
+ setAppState(prev => {
1190
+ const task = prev.tasks[teammateTaskId];
1191
+ if (!task || task.type !== 'in_process_teammate') {
1192
+ return prev;
1193
+ }
1194
+ if (task.permissionMode === nextMode) {
1195
+ return prev;
1196
+ }
1197
+ return {
1198
+ ...prev,
1199
+ tasks: {
1200
+ ...prev.tasks,
1201
+ [teammateTaskId]: {
1202
+ ...task,
1203
+ permissionMode: nextMode
1204
+ }
1205
+ }
1206
+ };
1207
+ });
1208
+ if (helpOpen) {
1209
+ setHelpOpen(false);
1210
+ }
1211
+ return;
1212
+ }
1213
+ // Compute the next mode without triggering side effects first
1214
+ logForDebugging(`[auto-mode] handleCycleMode: currentMode=${toolPermissionContext.mode} isAutoModeAvailable=${toolPermissionContext.isAutoModeAvailable} showAutoModeOptIn=${showAutoModeOptIn} timeoutPending=${!!autoModeOptInTimeoutRef.current}`);
1215
+ const nextMode = getNextPermissionMode(toolPermissionContext, teamContext);
1216
+ // Check if user is entering auto mode for the first time. Gated on the
1217
+ // persistent settings flag (hasAutoModeOptIn) rather than the broader
1218
+ // hasAutoModeOptInAnySource so that --enable-auto-mode users still see
1219
+ // the warning dialog once — the CLI flag should grant carousel access,
1220
+ // not bypass the safety text.
1221
+ let isEnteringAutoModeFirstTime = false;
1222
+ if (feature('TRANSCRIPT_CLASSIFIER')) {
1223
+ isEnteringAutoModeFirstTime = nextMode === 'auto' && toolPermissionContext.mode !== 'auto' && !hasAutoModeOptIn() && !viewingAgentTaskId; // Only show for primary agent, not subagents
1224
+ }
1225
+ if (feature('TRANSCRIPT_CLASSIFIER')) {
1226
+ if (isEnteringAutoModeFirstTime) {
1227
+ // Store previous mode so we can revert if user declines
1228
+ setPreviousModeBeforeAuto(toolPermissionContext.mode);
1229
+ // Only update the UI mode label — do NOT call transitionPermissionMode
1230
+ // or cyclePermissionMode yet; we haven't confirmed with the user.
1231
+ setAppState(prev => ({
1232
+ ...prev,
1233
+ toolPermissionContext: {
1234
+ ...prev.toolPermissionContext,
1235
+ mode: 'auto'
1236
+ }
1237
+ }));
1238
+ setToolPermissionContext({
1239
+ ...toolPermissionContext,
1240
+ mode: 'auto'
1241
+ });
1242
+ // Show opt-in dialog after 400ms debounce
1243
+ if (autoModeOptInTimeoutRef.current) {
1244
+ clearTimeout(autoModeOptInTimeoutRef.current);
1245
+ }
1246
+ autoModeOptInTimeoutRef.current = setTimeout((setShowAutoModeOptIn, autoModeOptInTimeoutRef) => {
1247
+ setShowAutoModeOptIn(true);
1248
+ autoModeOptInTimeoutRef.current = null;
1249
+ }, 400, setShowAutoModeOptIn, autoModeOptInTimeoutRef);
1250
+ if (helpOpen) {
1251
+ setHelpOpen(false);
1252
+ }
1253
+ return;
1254
+ }
1255
+ }
1256
+ // Dismiss auto mode opt-in dialog if showing or pending (user is cycling away).
1257
+ // Do NOT revert to previousModeBeforeAuto here — shift+tab means "advance the
1258
+ // carousel", not "decline". Reverting causes a ping-pong loop: auto reverts to
1259
+ // the prior mode, whose next mode is auto again, forever.
1260
+ // The dialog's own decline button (handleAutoModeOptInDecline) handles revert.
1261
+ if (feature('TRANSCRIPT_CLASSIFIER')) {
1262
+ if (showAutoModeOptIn || autoModeOptInTimeoutRef.current) {
1263
+ if (showAutoModeOptIn) {
1264
+ logEvent('tengu_auto_mode_opt_in_dialog_decline', {});
1265
+ }
1266
+ setShowAutoModeOptIn(false);
1267
+ if (autoModeOptInTimeoutRef.current) {
1268
+ clearTimeout(autoModeOptInTimeoutRef.current);
1269
+ autoModeOptInTimeoutRef.current = null;
1270
+ }
1271
+ setPreviousModeBeforeAuto(null);
1272
+ // Fall through — mode is 'auto', cyclePermissionMode below goes to 'default'.
1273
+ }
1274
+ }
1275
+ // Now that we know this is NOT the first-time auto mode path,
1276
+ // call cyclePermissionMode to apply side effects (e.g. strip
1277
+ // dangerous permissions, activate classifier)
1278
+ const { context: preparedContext } = cyclePermissionMode(toolPermissionContext, teamContext);
1279
+ logEvent('tengu_mode_cycle', {
1280
+ to: nextMode
1281
+ });
1282
+ // Track when user enters plan mode
1283
+ if (nextMode === 'plan') {
1284
+ saveGlobalConfig(current => ({
1285
+ ...current,
1286
+ lastPlanModeUse: Date.now()
1287
+ }));
1288
+ }
1289
+ // Set the mode via setAppState directly because setToolPermissionContext
1290
+ // intentionally preserves the existing mode (to prevent coordinator mode
1291
+ // corruption from workers). Then call setToolPermissionContext to trigger
1292
+ // recheck of queued permission prompts.
1293
+ setAppState(prev => ({
1294
+ ...prev,
1295
+ toolPermissionContext: {
1296
+ ...preparedContext,
1297
+ mode: nextMode
1298
+ }
1299
+ }));
1300
+ setToolPermissionContext({
1301
+ ...preparedContext,
1302
+ mode: nextMode
1303
+ });
1304
+ // If this is a teammate, update config.json so team lead sees the change
1305
+ syncTeammateMode(nextMode, teamContext?.teamName);
1306
+ // Close help tips if they're open when mode is cycled
1307
+ if (helpOpen) {
1308
+ setHelpOpen(false);
1309
+ }
1310
+ }, [toolPermissionContext, teamContext, viewingAgentTaskId, viewedTeammate, setAppState, setToolPermissionContext, helpOpen, showAutoModeOptIn]);
1311
+ // Handler for auto mode opt-in dialog acceptance
1312
+ const handleAutoModeOptInAccept = useCallback(() => {
1313
+ if (feature('TRANSCRIPT_CLASSIFIER')) {
1314
+ setShowAutoModeOptIn(false);
1315
+ setPreviousModeBeforeAuto(null);
1316
+ // Now that the user accepted, apply the full transition: activate the
1317
+ // auto mode backend (classifier, beta headers) and strip dangerous
1318
+ // permissions (e.g. Bash(*) always-allow rules).
1319
+ const strippedContext = transitionPermissionMode(previousModeBeforeAuto ?? toolPermissionContext.mode, 'auto', toolPermissionContext);
1320
+ setAppState(prev => ({
1321
+ ...prev,
1322
+ toolPermissionContext: {
1323
+ ...strippedContext,
1324
+ mode: 'auto'
1325
+ }
1326
+ }));
1327
+ setToolPermissionContext({
1328
+ ...strippedContext,
1329
+ mode: 'auto'
1330
+ });
1331
+ // Close help tips if they're open when auto mode is enabled
1332
+ if (helpOpen) {
1333
+ setHelpOpen(false);
1334
+ }
1335
+ }
1336
+ }, [helpOpen, setHelpOpen, previousModeBeforeAuto, toolPermissionContext, setAppState, setToolPermissionContext]);
1337
+ // Handler for auto mode opt-in dialog decline
1338
+ const handleAutoModeOptInDecline = useCallback(() => {
1339
+ if (feature('TRANSCRIPT_CLASSIFIER')) {
1340
+ logForDebugging(`[auto-mode] handleAutoModeOptInDecline: reverting to ${previousModeBeforeAuto}, setting isAutoModeAvailable=false`);
1341
+ setShowAutoModeOptIn(false);
1342
+ if (autoModeOptInTimeoutRef.current) {
1343
+ clearTimeout(autoModeOptInTimeoutRef.current);
1344
+ autoModeOptInTimeoutRef.current = null;
1345
+ }
1346
+ // Revert to previous mode and remove auto from the carousel
1347
+ // for the rest of this session
1348
+ if (previousModeBeforeAuto) {
1349
+ setAutoModeActive(false);
1350
+ setAppState(prev => ({
1351
+ ...prev,
1352
+ toolPermissionContext: {
1353
+ ...prev.toolPermissionContext,
1354
+ mode: previousModeBeforeAuto,
1355
+ isAutoModeAvailable: false
1356
+ }
1357
+ }));
1358
+ setToolPermissionContext({
1359
+ ...toolPermissionContext,
1360
+ mode: previousModeBeforeAuto,
1361
+ isAutoModeAvailable: false
1362
+ });
1363
+ setPreviousModeBeforeAuto(null);
1364
+ }
1365
+ }
1366
+ }, [previousModeBeforeAuto, toolPermissionContext, setAppState, setToolPermissionContext]);
1367
+ // Handler for chat:imagePaste - paste image from clipboard
1368
+ const handleImagePaste = useCallback(() => {
1369
+ void getImageFromClipboard().then(imageData => {
1370
+ if (imageData) {
1371
+ onImagePaste(imageData.base64, imageData.mediaType);
1372
+ }
1373
+ else {
1374
+ const shortcutDisplay = getShortcutDisplay('chat:imagePaste', 'Chat', 'ctrl+v');
1375
+ const message = env.isSSH() ? "No image found in clipboard. You're SSH'd; try scp?" : `No image found in clipboard. Use ${shortcutDisplay} to paste images.`;
1376
+ addNotification({
1377
+ key: 'no-image-in-clipboard',
1378
+ text: message,
1379
+ priority: 'immediate',
1380
+ timeoutMs: 1000
1381
+ });
1382
+ }
1383
+ });
1384
+ }, [addNotification, onImagePaste]);
1385
+ // Register chat:submit handler directly in the handler registry (not via
1386
+ // useKeybindings) so that only the ChordInterceptor can invoke it for chord
1387
+ // completions (e.g., "ctrl+e s"). The default Enter binding for submit is
1388
+ // handled by TextInput directly (via onSubmit prop) and useTypeahead (for
1389
+ // autocomplete acceptance). Using useKeybindings would cause
1390
+ // stopImmediatePropagation on Enter, blocking autocomplete from seeing the key.
1391
+ const keybindingContext = useOptionalKeybindingContext();
1392
+ useEffect(() => {
1393
+ if (!keybindingContext || isModalOverlayActive)
1394
+ return;
1395
+ return keybindingContext.registerHandler({
1396
+ action: 'chat:submit',
1397
+ context: 'Chat',
1398
+ handler: () => {
1399
+ void onSubmit(input);
1400
+ }
1401
+ });
1402
+ }, [keybindingContext, isModalOverlayActive, onSubmit, input]);
1403
+ // Chat context keybindings for editing shortcuts
1404
+ // Note: history:previous/history:next are NOT handled here. They are passed as
1405
+ // onHistoryUp/onHistoryDown props to TextInput, so that useTextInput's
1406
+ // upOrHistoryUp/downOrHistoryDown can try cursor movement first and only
1407
+ // fall through to history when the cursor can't move further.
1408
+ const chatHandlers = useMemo(() => ({
1409
+ 'chat:undo': handleUndo,
1410
+ 'chat:newline': handleNewline,
1411
+ 'chat:externalEditor': handleExternalEditor,
1412
+ 'chat:stash': handleStash,
1413
+ 'chat:modelPicker': handleModelPicker,
1414
+ 'chat:thinkingToggle': handleThinkingToggle,
1415
+ 'chat:cycleMode': handleCycleMode,
1416
+ 'chat:imagePaste': handleImagePaste
1417
+ }), [handleUndo, handleNewline, handleExternalEditor, handleStash, handleModelPicker, handleThinkingToggle, handleCycleMode, handleImagePaste]);
1418
+ useKeybindings(chatHandlers, {
1419
+ context: 'Chat',
1420
+ isActive: !isModalOverlayActive
1421
+ });
1422
+ // Shift+↑ enters message-actions cursor. Separate isActive so ctrl+r search
1423
+ // doesn't leave stale isSearchingHistory on cursor-exit remount.
1424
+ useKeybinding('chat:messageActions', () => onMessageActionsEnter?.(), {
1425
+ context: 'Chat',
1426
+ isActive: !isModalOverlayActive && !isSearchingHistory
1427
+ });
1428
+ // Fast mode keybinding is only active when fast mode is enabled and available
1429
+ useKeybinding('chat:fastMode', handleFastModePicker, {
1430
+ context: 'Chat',
1431
+ isActive: !isModalOverlayActive && isFastModeEnabled() && isFastModeAvailable()
1432
+ });
1433
+ // Handle help:dismiss keybinding (ESC closes help menu)
1434
+ // This is registered separately from Chat context so it has priority over
1435
+ // CancelRequestHandler when help menu is open
1436
+ useKeybinding('help:dismiss', () => {
1437
+ setHelpOpen(false);
1438
+ }, {
1439
+ context: 'Help',
1440
+ isActive: helpOpen
1441
+ });
1442
+ // Quick Open / Global Search. Hook calls are unconditional (Rules of Hooks);
1443
+ // the handler body is feature()-gated so the setState calls and component
1444
+ // references get tree-shaken in external builds.
1445
+ const quickSearchActive = feature('QUICK_SEARCH') ? !isModalOverlayActive : false;
1446
+ useKeybinding('app:quickOpen', () => {
1447
+ if (feature('QUICK_SEARCH')) {
1448
+ setShowQuickOpen(true);
1449
+ setHelpOpen(false);
1450
+ }
1451
+ }, {
1452
+ context: 'Global',
1453
+ isActive: quickSearchActive
1454
+ });
1455
+ useKeybinding('app:globalSearch', () => {
1456
+ if (feature('QUICK_SEARCH')) {
1457
+ setShowGlobalSearch(true);
1458
+ setHelpOpen(false);
1459
+ }
1460
+ }, {
1461
+ context: 'Global',
1462
+ isActive: quickSearchActive
1463
+ });
1464
+ useKeybinding('history:search', () => {
1465
+ if (feature('HISTORY_PICKER')) {
1466
+ setShowHistoryPicker(true);
1467
+ setHelpOpen(false);
1468
+ }
1469
+ }, {
1470
+ context: 'Global',
1471
+ isActive: feature('HISTORY_PICKER') ? !isModalOverlayActive : false
1472
+ });
1473
+ // Handle Ctrl+C to abort speculation when idle (not loading)
1474
+ // CancelRequestHandler only handles Ctrl+C during active tasks
1475
+ useKeybinding('app:interrupt', () => {
1476
+ abortSpeculation(setAppState);
1477
+ }, {
1478
+ context: 'Global',
1479
+ isActive: !isLoading && speculation.status === 'active'
1480
+ });
1481
+ // Footer indicator navigation keybindings. ↑/↓ live here (not in
1482
+ // handleHistoryUp/Down) because TextInput focus=false when a pill is
1483
+ // selected — its useInput is inactive, so this is the only path.
1484
+ useKeybindings({
1485
+ 'footer:up': () => {
1486
+ // ↑ scrolls within the coordinator task list before leaving the pill
1487
+ if (tasksSelected && "external" === 'ant' && coordinatorTaskCount > 0 && coordinatorTaskIndex > minCoordinatorIndex) {
1488
+ setCoordinatorTaskIndex(prev => prev - 1);
1489
+ return;
1490
+ }
1491
+ navigateFooter(-1, true);
1492
+ },
1493
+ 'footer:down': () => {
1494
+ // ↓ scrolls within the coordinator task list, never leaves the pill
1495
+ if (tasksSelected && "external" === 'ant' && coordinatorTaskCount > 0) {
1496
+ if (coordinatorTaskIndex < coordinatorTaskCount - 1) {
1497
+ setCoordinatorTaskIndex(prev => prev + 1);
1498
+ }
1499
+ return;
1500
+ }
1501
+ if (tasksSelected && !isTeammateMode) {
1502
+ setShowBashesDialog(true);
1503
+ selectFooterItem(null);
1504
+ return;
1505
+ }
1506
+ navigateFooter(1);
1507
+ },
1508
+ 'footer:next': () => {
1509
+ // Teammate mode: ←/→ cycles within the team member list
1510
+ if (tasksSelected && isTeammateMode) {
1511
+ const totalAgents = 1 + inProcessTeammates.length;
1512
+ setTeammateFooterIndex(prev => (prev + 1) % totalAgents);
1513
+ return;
1514
+ }
1515
+ navigateFooter(1);
1516
+ },
1517
+ 'footer:previous': () => {
1518
+ if (tasksSelected && isTeammateMode) {
1519
+ const totalAgents = 1 + inProcessTeammates.length;
1520
+ setTeammateFooterIndex(prev => (prev - 1 + totalAgents) % totalAgents);
1521
+ return;
1522
+ }
1523
+ navigateFooter(-1);
1524
+ },
1525
+ 'footer:openSelected': () => {
1526
+ if (viewSelectionMode === 'selecting-agent') {
1527
+ return;
1528
+ }
1529
+ switch (footerItemSelected) {
1530
+ case 'companion':
1531
+ if (feature('BUDDY')) {
1532
+ selectFooterItem(null);
1533
+ void onSubmit('/buddy');
1534
+ }
1535
+ break;
1536
+ case 'tasks':
1537
+ if (isTeammateMode) {
1538
+ // Enter switches to the selected agent's view
1539
+ if (teammateFooterIndex === 0) {
1540
+ exitTeammateView(setAppState);
1541
+ }
1542
+ else {
1543
+ const teammate = inProcessTeammates[teammateFooterIndex - 1];
1544
+ if (teammate)
1545
+ enterTeammateView(teammate.id, setAppState);
1546
+ }
1547
+ }
1548
+ else if (coordinatorTaskIndex === 0 && coordinatorTaskCount > 0) {
1549
+ exitTeammateView(setAppState);
1550
+ }
1551
+ else {
1552
+ const selectedTaskId = getVisibleAgentTasks(tasks)[coordinatorTaskIndex - 1]?.id;
1553
+ if (selectedTaskId) {
1554
+ enterTeammateView(selectedTaskId, setAppState);
1555
+ }
1556
+ else {
1557
+ setShowBashesDialog(true);
1558
+ selectFooterItem(null);
1559
+ }
1560
+ }
1561
+ break;
1562
+ case 'tmux':
1563
+ if ("external" === 'ant') {
1564
+ setAppState(prev => prev.tungstenPanelAutoHidden ? {
1565
+ ...prev,
1566
+ tungstenPanelAutoHidden: false
1567
+ } : {
1568
+ ...prev,
1569
+ tungstenPanelVisible: !(prev.tungstenPanelVisible ?? true)
1570
+ });
1571
+ }
1572
+ break;
1573
+ case 'bagel':
1574
+ break;
1575
+ case 'teams':
1576
+ setShowTeamsDialog(true);
1577
+ selectFooterItem(null);
1578
+ break;
1579
+ case 'bridge':
1580
+ setShowBridgeDialog(true);
1581
+ selectFooterItem(null);
1582
+ break;
1583
+ }
1584
+ },
1585
+ 'footer:clearSelection': () => {
1586
+ selectFooterItem(null);
1587
+ },
1588
+ 'footer:close': () => {
1589
+ if (tasksSelected && coordinatorTaskIndex >= 1) {
1590
+ const task = getVisibleAgentTasks(tasks)[coordinatorTaskIndex - 1];
1591
+ if (!task)
1592
+ return false;
1593
+ // When the selected row IS the viewed agent, 'x' types into the
1594
+ // steering input. Any other row — dismiss it.
1595
+ if (viewSelectionMode === 'viewing-agent' && task.id === viewingAgentTaskId) {
1596
+ onChange(input.slice(0, cursorOffset) + 'x' + input.slice(cursorOffset));
1597
+ setCursorOffset(cursorOffset + 1);
1598
+ return;
1599
+ }
1600
+ stopOrDismissAgent(task.id, setAppState);
1601
+ if (task.status !== 'running') {
1602
+ setCoordinatorTaskIndex(i => Math.max(minCoordinatorIndex, i - 1));
1603
+ }
1604
+ return;
1605
+ }
1606
+ // Not handled — let 'x' fall through to type-to-exit
1607
+ return false;
1608
+ }
1609
+ }, {
1610
+ context: 'Footer',
1611
+ isActive: !!footerItemSelected && !isModalOverlayActive
1612
+ });
1613
+ useInput((char, key) => {
1614
+ // Skip all input handling when a full-screen dialog is open. These dialogs
1615
+ // render via early return, but hooks run unconditionally — so without this
1616
+ // guard, Escape inside a dialog leaks to the double-press message-selector.
1617
+ if (showTeamsDialog || showQuickOpen || showGlobalSearch || showHistoryPicker) {
1618
+ return;
1619
+ }
1620
+ // Detect failed Alt shortcuts on macOS (Option key produces special characters)
1621
+ if (getPlatform() === 'macos' && isMacosOptionChar(char)) {
1622
+ const shortcut = MACOS_OPTION_SPECIAL_CHARS[char];
1623
+ const terminalName = getNativeCSIuTerminalDisplayName();
1624
+ const jsx = terminalName ? _jsxs(Text, { dimColor: true, children: ["To enable ", shortcut, ", set ", _jsx(Text, { bold: true, children: "Option as Meta" }), " in", ' ', terminalName, " preferences (\u2318,)"] }) : _jsxs(Text, { dimColor: true, children: ["To enable ", shortcut, ", run /terminal-setup"] });
1625
+ addNotification({
1626
+ key: 'option-meta-hint',
1627
+ jsx,
1628
+ priority: 'immediate',
1629
+ timeoutMs: 5000
1630
+ });
1631
+ // Don't return - let the character be typed so user sees the issue
1632
+ }
1633
+ // Footer navigation is handled via useKeybindings above (Footer context)
1634
+ // NOTE: ctrl+_, ctrl+g, ctrl+s are handled via Chat context keybindings above
1635
+ // Type-to-exit footer: printable chars while a pill is selected refocus
1636
+ // the input and type the char. Nav keys are captured by useKeybindings
1637
+ // above, so anything reaching here is genuinely not a footer action.
1638
+ // onChange clears footerSelection, so no explicit deselect.
1639
+ if (footerItemSelected && char && !key.ctrl && !key.meta && !key.escape && !key.return) {
1640
+ onChange(input.slice(0, cursorOffset) + char + input.slice(cursorOffset));
1641
+ setCursorOffset(cursorOffset + char.length);
1642
+ return;
1643
+ }
1644
+ // Exit special modes when backspace/escape/delete/ctrl+u is pressed at cursor position 0
1645
+ if (cursorOffset === 0 && (key.escape || key.backspace || key.delete || key.ctrl && char === 'u')) {
1646
+ onModeChange('prompt');
1647
+ setHelpOpen(false);
1648
+ }
1649
+ // Exit help mode when backspace is pressed and input is empty
1650
+ if (helpOpen && input === '' && (key.backspace || key.delete)) {
1651
+ setHelpOpen(false);
1652
+ }
1653
+ // esc is a little overloaded:
1654
+ // - when we're loading a response, it's used to cancel the request
1655
+ // - otherwise, it's used to show the message selector
1656
+ // - when double pressed, it's used to clear the input
1657
+ // - when input is empty, pop from command queue
1658
+ // Handle ESC key press
1659
+ if (key.escape) {
1660
+ // Abort active speculation
1661
+ if (speculation.status === 'active') {
1662
+ abortSpeculation(setAppState);
1663
+ return;
1664
+ }
1665
+ // Dismiss side question response if visible
1666
+ if (isSideQuestionVisible && onDismissSideQuestion) {
1667
+ onDismissSideQuestion();
1668
+ return;
1669
+ }
1670
+ // Close help menu if open
1671
+ if (helpOpen) {
1672
+ setHelpOpen(false);
1673
+ return;
1674
+ }
1675
+ // Footer selection clearing is now handled via Footer context keybindings
1676
+ // (footer:clearSelection action bound to escape)
1677
+ // If a footer item is selected, let the Footer keybinding handle it
1678
+ if (footerItemSelected) {
1679
+ return;
1680
+ }
1681
+ // If there's an editable queued command, move it to the input for editing when ESC is pressed
1682
+ const hasEditableCommand = queuedCommands.some(isQueuedCommandEditable);
1683
+ if (hasEditableCommand) {
1684
+ void popAllCommandsFromQueue();
1685
+ return;
1686
+ }
1687
+ if (messages.length > 0 && !input && !isLoading) {
1688
+ doublePressEscFromEmpty();
1689
+ }
1690
+ }
1691
+ if (key.return && helpOpen) {
1692
+ setHelpOpen(false);
1693
+ }
1694
+ });
1695
+ const swarmBanner = useSwarmBanner();
1696
+ const fastModeCooldown = isFastModeEnabled() ? isFastModeCooldown() : false;
1697
+ const showFastIcon = isFastModeEnabled() ? isFastMode && (isFastModeAvailable() || fastModeCooldown) : false;
1698
+ const showFastIconHint = useShowFastIconHint(showFastIcon ?? false);
1699
+ // Show effort notification on startup and when effort changes.
1700
+ // Suppressed in brief/assistant mode — the value reflects the local
1701
+ // client's effort, not the connected agent's.
1702
+ const effortNotificationText = briefOwnsGap ? undefined : getEffortNotificationText(effortValue, mainLoopModel);
1703
+ useEffect(() => {
1704
+ if (!effortNotificationText) {
1705
+ removeNotification('effort-level');
1706
+ return;
1707
+ }
1708
+ addNotification({
1709
+ key: 'effort-level',
1710
+ text: effortNotificationText,
1711
+ priority: 'high',
1712
+ timeoutMs: 12_000
1713
+ });
1714
+ }, [effortNotificationText, addNotification, removeNotification]);
1715
+ useBuddyNotification();
1716
+ const companionSpeaking = feature('BUDDY') ?
1717
+ // biome-ignore lint/correctness/useHookAtTopLevel: feature() is a compile-time constant
1718
+ useAppState(s => s.companionReaction !== undefined) : false;
1719
+ const { columns, rows } = useTerminalSize();
1720
+ const textInputColumns = columns - 3 - companionReservedColumns(columns, companionSpeaking);
1721
+ // POC: click-to-position-cursor. Mouse tracking is only enabled inside
1722
+ // <AlternateScreen>, so this is dormant in the normal main-screen REPL.
1723
+ // localCol/localRow are relative to the onClick Box's top-left; the Box
1724
+ // tightly wraps the text input so they map directly to (column, line)
1725
+ // in the Cursor wrap model. MeasuredText.getOffsetFromPosition handles
1726
+ // wide chars, wrapped lines, and clamps past-end clicks to line end.
1727
+ const maxVisibleLines = isFullscreenEnvEnabled() ? Math.max(MIN_INPUT_VIEWPORT_LINES, Math.floor(rows / 2) - PROMPT_FOOTER_LINES) : undefined;
1728
+ const handleInputClick = useCallback((e) => {
1729
+ // During history search the displayed text is historyMatch, not
1730
+ // input, and showCursor is false anyway — skip rather than
1731
+ // compute an offset against the wrong string.
1732
+ if (!input || isSearchingHistory)
1733
+ return;
1734
+ const c = Cursor.fromText(input, textInputColumns, cursorOffset);
1735
+ const viewportStart = c.getViewportStartLine(maxVisibleLines);
1736
+ const offset = c.measuredText.getOffsetFromPosition({
1737
+ line: e.localRow + viewportStart,
1738
+ column: e.localCol
1739
+ });
1740
+ setCursorOffset(offset);
1741
+ }, [input, textInputColumns, isSearchingHistory, cursorOffset, maxVisibleLines]);
1742
+ const handleOpenTasksDialog = useCallback((taskId) => setShowBashesDialog(taskId ?? true), [setShowBashesDialog]);
1743
+ const placeholder = showPromptSuggestion && promptSuggestion ? promptSuggestion : defaultPlaceholder;
1744
+ // Calculate if input has multiple lines
1745
+ const isInputWrapped = useMemo(() => input.includes('\n'), [input]);
1746
+ // Memoized callbacks for model picker to prevent re-renders when unrelated
1747
+ // state (like notifications) changes. This prevents the inline model picker
1748
+ // from visually "jumping" when notifications arrive.
1749
+ const handleModelSelect = useCallback((model, _effort) => {
1750
+ let wasFastModeDisabled = false;
1751
+ setAppState(prev => {
1752
+ wasFastModeDisabled = isFastModeEnabled() && !isFastModeSupportedByModel(model) && !!prev.fastMode;
1753
+ return {
1754
+ ...prev,
1755
+ mainLoopModel: model,
1756
+ mainLoopModelForSession: null,
1757
+ // Turn off fast mode if switching to a model that doesn't support it
1758
+ ...(wasFastModeDisabled && {
1759
+ fastMode: false
1760
+ })
1761
+ };
1762
+ });
1763
+ setShowModelPicker(false);
1764
+ const effectiveFastMode = (isFastMode ?? false) && !wasFastModeDisabled;
1765
+ let message = `Model set to ${modelDisplayString(model)}`;
1766
+ if (isBilledAsExtraUsage(model, effectiveFastMode, isOpus1mMergeEnabled())) {
1767
+ message += ' · Billed as extra usage';
1768
+ }
1769
+ if (wasFastModeDisabled) {
1770
+ message += ' · Fast mode OFF';
1771
+ }
1772
+ addNotification({
1773
+ key: 'model-switched',
1774
+ jsx: _jsx(Text, { children: message }),
1775
+ priority: 'immediate',
1776
+ timeoutMs: 3000
1777
+ });
1778
+ logEvent('tengu_model_picker_hotkey', {
1779
+ model: model
1780
+ });
1781
+ }, [setAppState, addNotification, isFastMode]);
1782
+ const handleModelCancel = useCallback(() => {
1783
+ setShowModelPicker(false);
1784
+ }, []);
1785
+ // Memoize the model picker element to prevent unnecessary re-renders
1786
+ // when AppState changes for unrelated reasons (e.g., notifications arriving)
1787
+ const modelPickerElement = useMemo(() => {
1788
+ if (!showModelPicker)
1789
+ return null;
1790
+ return _jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(ModelPicker, { initial: mainLoopModel_, sessionModel: mainLoopModelForSession, onSelect: handleModelSelect, onCancel: handleModelCancel, isStandaloneCommand: true, showFastModeNotice: isFastModeEnabled() && isFastMode && isFastModeSupportedByModel(mainLoopModel_) && isFastModeAvailable() }) });
1791
+ }, [showModelPicker, mainLoopModel_, mainLoopModelForSession, handleModelSelect, handleModelCancel]);
1792
+ const handleFastModeSelect = useCallback((result) => {
1793
+ setShowFastModePicker(false);
1794
+ if (result) {
1795
+ addNotification({
1796
+ key: 'fast-mode-toggled',
1797
+ jsx: _jsx(Text, { children: result }),
1798
+ priority: 'immediate',
1799
+ timeoutMs: 3000
1800
+ });
1801
+ }
1802
+ }, [addNotification]);
1803
+ // Memoize the fast mode picker element
1804
+ const fastModePickerElement = useMemo(() => {
1805
+ if (!showFastModePicker)
1806
+ return null;
1807
+ return _jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(FastModePicker, { onDone: handleFastModeSelect, unavailableReason: getFastModeUnavailableReason() }) });
1808
+ }, [showFastModePicker, handleFastModeSelect]);
1809
+ // Memoized callbacks for thinking toggle
1810
+ const handleThinkingSelect = useCallback((enabled) => {
1811
+ setAppState(prev => ({
1812
+ ...prev,
1813
+ thinkingEnabled: enabled
1814
+ }));
1815
+ setShowThinkingToggle(false);
1816
+ logEvent('tengu_thinking_toggled_hotkey', {
1817
+ enabled
1818
+ });
1819
+ addNotification({
1820
+ key: 'thinking-toggled-hotkey',
1821
+ jsx: _jsxs(Text, { color: enabled ? 'suggestion' : undefined, dimColor: !enabled, children: ["Thinking ", enabled ? 'on' : 'off'] }),
1822
+ priority: 'immediate',
1823
+ timeoutMs: 3000
1824
+ });
1825
+ }, [setAppState, addNotification]);
1826
+ const handleThinkingCancel = useCallback(() => {
1827
+ setShowThinkingToggle(false);
1828
+ }, []);
1829
+ // Memoize the thinking toggle element
1830
+ const thinkingToggleElement = useMemo(() => {
1831
+ if (!showThinkingToggle)
1832
+ return null;
1833
+ return _jsx(Box, { flexDirection: "column", marginTop: 1, children: _jsx(ThinkingToggle, { currentValue: thinkingEnabled ?? true, onSelect: handleThinkingSelect, onCancel: handleThinkingCancel, isMidConversation: messages.some(m => m.type === 'assistant') }) });
1834
+ }, [showThinkingToggle, thinkingEnabled, handleThinkingSelect, handleThinkingCancel, messages.length]);
1835
+ // Portal dialog to DialogOverlay in fullscreen so it escapes the bottom
1836
+ // slot's overflowY:hidden clip (same pattern as SuggestionsOverlay).
1837
+ // Must be called before early returns below to satisfy rules-of-hooks.
1838
+ // Memoized so the portal useEffect doesn't churn on every PromptInput render.
1839
+ const autoModeOptInDialog = useMemo(() => feature('TRANSCRIPT_CLASSIFIER') && showAutoModeOptIn ? _jsx(AutoModeOptInDialog, { onAccept: handleAutoModeOptInAccept, onDecline: handleAutoModeOptInDecline }) : null, [showAutoModeOptIn, handleAutoModeOptInAccept, handleAutoModeOptInDecline]);
1840
+ useSetPromptOverlayDialog(isFullscreenEnvEnabled() ? autoModeOptInDialog : null);
1841
+ if (showBashesDialog) {
1842
+ return _jsx(BackgroundTasksDialog, { onDone: () => setShowBashesDialog(false), toolUseContext: getToolUseContext(messages, [], new AbortController(), mainLoopModel), initialDetailTaskId: typeof showBashesDialog === 'string' ? showBashesDialog : undefined });
1843
+ }
1844
+ if (isAgentSwarmsEnabled() && showTeamsDialog) {
1845
+ return _jsx(TeamsDialog, { initialTeams: cachedTeams, onDone: () => {
1846
+ setShowTeamsDialog(false);
1847
+ } });
1848
+ }
1849
+ if (feature('QUICK_SEARCH')) {
1850
+ const insertWithSpacing = (text) => {
1851
+ const cursorChar = input[cursorOffset - 1] ?? ' ';
1852
+ insertTextAtCursor(/\s/.test(cursorChar) ? text : ` ${text}`);
1853
+ };
1854
+ if (showQuickOpen) {
1855
+ return _jsx(QuickOpenDialog, { onDone: () => setShowQuickOpen(false), onInsert: insertWithSpacing });
1856
+ }
1857
+ if (showGlobalSearch) {
1858
+ return _jsx(GlobalSearchDialog, { onDone: () => setShowGlobalSearch(false), onInsert: insertWithSpacing });
1859
+ }
1860
+ }
1861
+ if (feature('HISTORY_PICKER') && showHistoryPicker) {
1862
+ return _jsx(HistorySearchDialog, { initialQuery: input, onSelect: entry => {
1863
+ const entryMode = getModeFromInput(entry.display);
1864
+ const value = getValueFromInput(entry.display);
1865
+ onModeChange(entryMode);
1866
+ trackAndSetInput(value);
1867
+ setPastedContents(entry.pastedContents);
1868
+ setCursorOffset(value.length);
1869
+ setShowHistoryPicker(false);
1870
+ }, onCancel: () => setShowHistoryPicker(false) });
1871
+ }
1872
+ // Show loop mode menu when requested (ant-only, eliminated from external builds)
1873
+ if (modelPickerElement) {
1874
+ return modelPickerElement;
1875
+ }
1876
+ if (fastModePickerElement) {
1877
+ return fastModePickerElement;
1878
+ }
1879
+ if (thinkingToggleElement) {
1880
+ return thinkingToggleElement;
1881
+ }
1882
+ if (showBridgeDialog) {
1883
+ return _jsx(BridgeDialog, { onDone: () => {
1884
+ setShowBridgeDialog(false);
1885
+ selectFooterItem(null);
1886
+ } });
1887
+ }
1888
+ const baseProps = {
1889
+ multiline: true,
1890
+ onSubmit,
1891
+ onChange,
1892
+ value: historyMatch ? getValueFromInput(typeof historyMatch === 'string' ? historyMatch : historyMatch.display) : input,
1893
+ // History navigation is handled via TextInput props (onHistoryUp/onHistoryDown),
1894
+ // NOT via useKeybindings. This allows useTextInput's upOrHistoryUp/downOrHistoryDown
1895
+ // to try cursor movement first and only fall through to history navigation when the
1896
+ // cursor can't move further (important for wrapped text and multi-line input).
1897
+ onHistoryUp: handleHistoryUp,
1898
+ onHistoryDown: handleHistoryDown,
1899
+ onHistoryReset: resetHistory,
1900
+ placeholder,
1901
+ onExit,
1902
+ onExitMessage: (show, key) => setExitMessage({
1903
+ show,
1904
+ key
1905
+ }),
1906
+ onImagePaste,
1907
+ columns: textInputColumns,
1908
+ maxVisibleLines,
1909
+ disableCursorMovementForUpDownKeys: suggestions.length > 0 || !!footerItemSelected,
1910
+ disableEscapeDoublePress: suggestions.length > 0,
1911
+ cursorOffset,
1912
+ onChangeCursorOffset: setCursorOffset,
1913
+ onPaste: onTextPaste,
1914
+ onIsPastingChange: setIsPasting,
1915
+ focus: !isSearchingHistory && !isModalOverlayActive && !footerItemSelected,
1916
+ showCursor: !footerItemSelected && !isSearchingHistory && !cursorAtImageChip,
1917
+ argumentHint: commandArgumentHint,
1918
+ onUndo: canUndo ? () => {
1919
+ const previousState = undo();
1920
+ if (previousState) {
1921
+ trackAndSetInput(previousState.text);
1922
+ setCursorOffset(previousState.cursorOffset);
1923
+ setPastedContents(previousState.pastedContents);
1924
+ }
1925
+ } : undefined,
1926
+ highlights: combinedHighlights,
1927
+ inlineGhostText,
1928
+ inputFilter: lazySpaceInputFilter
1929
+ };
1930
+ const getBorderColor = () => {
1931
+ const modeColors = {
1932
+ bash: 'bashBorder'
1933
+ };
1934
+ // Mode colors take priority, then teammate color, then default
1935
+ if (modeColors[mode]) {
1936
+ return modeColors[mode];
1937
+ }
1938
+ // In-process teammates run headless - don't apply teammate colors to leader UI
1939
+ if (isInProcessTeammate()) {
1940
+ return 'promptBorder';
1941
+ }
1942
+ // Check for teammate color from environment
1943
+ const teammateColorName = getTeammateColor();
1944
+ if (teammateColorName && AGENT_COLORS.includes(teammateColorName)) {
1945
+ return AGENT_COLOR_TO_THEME_COLOR[teammateColorName];
1946
+ }
1947
+ return 'promptBorder';
1948
+ };
1949
+ if (isExternalEditorActive) {
1950
+ return _jsx(Box, { flexDirection: "row", alignItems: "center", justifyContent: "center", borderColor: getBorderColor(), borderStyle: "round", borderLeft: false, borderRight: false, borderBottom: true, width: "100%", children: _jsx(Text, { dimColor: true, italic: true, children: "Save and close editor to continue..." }) });
1951
+ }
1952
+ const textInputElement = isVimModeEnabled() ? _jsx(VimTextInput, { ...baseProps, initialMode: vimMode, onModeChange: setVimMode }) : _jsx(TextInput, { ...baseProps });
1953
+ return _jsxs(Box, { flexDirection: "column", marginTop: briefOwnsGap ? 0 : 1, children: [!isFullscreenEnvEnabled() && _jsx(PromptInputQueuedCommands, {}), hasSuppressedDialogs && _jsx(Box, { marginTop: 1, marginLeft: 2, children: _jsx(Text, { dimColor: true, children: "Waiting for permission\u2026" }) }), _jsx(PromptInputStashNotice, { hasStash: stashedPrompt !== undefined }), swarmBanner ? _jsxs(_Fragment, { children: [_jsx(Text, { color: swarmBanner.bgColor, children: swarmBanner.text ? _jsxs(_Fragment, { children: ['─'.repeat(Math.max(0, columns - stringWidth(swarmBanner.text) - 4)), _jsxs(Text, { backgroundColor: swarmBanner.bgColor, color: "inverseText", children: [' ', swarmBanner.text, ' '] }), '──'] }) : '─'.repeat(columns) }), _jsxs(Box, { flexDirection: "row", width: "100%", children: [_jsx(PromptInputModeIndicator, { mode: mode, isLoading: isLoading, viewingAgentName: viewingAgentName, viewingAgentColor: viewingAgentColor }), _jsx(Box, { flexGrow: 1, flexShrink: 1, onClick: handleInputClick, children: textInputElement })] }), _jsx(Text, { color: swarmBanner.bgColor, children: '─'.repeat(columns) })] }) : _jsxs(Box, { flexDirection: "row", alignItems: "flex-start", justifyContent: "flex-start", borderColor: getBorderColor(), borderStyle: "round", borderLeft: false, borderRight: false, borderBottom: true, width: "100%", borderText: buildBorderText(showFastIcon ?? false, showFastIconHint, fastModeCooldown), children: [_jsx(PromptInputModeIndicator, { mode: mode, isLoading: isLoading, viewingAgentName: viewingAgentName, viewingAgentColor: viewingAgentColor }), _jsx(Box, { flexGrow: 1, flexShrink: 1, onClick: handleInputClick, children: textInputElement })] }), _jsx(PromptInputFooter, { apiKeyStatus: apiKeyStatus, debug: debug, exitMessage: exitMessage, vimMode: isVimModeEnabled() ? vimMode : undefined, mode: mode, autoUpdaterResult: autoUpdaterResult, isAutoUpdating: isAutoUpdating, verbose: verbose, onAutoUpdaterResult: onAutoUpdaterResult, onChangeIsUpdating: setIsAutoUpdating, suggestions: suggestions, selectedSuggestion: selectedSuggestion, maxColumnWidth: maxColumnWidth, toolPermissionContext: effectiveToolPermissionContext, helpOpen: helpOpen, suppressHint: input.length > 0, isLoading: isLoading, tasksSelected: tasksSelected, teamsSelected: teamsSelected, bridgeSelected: bridgeSelected, tmuxSelected: tmuxSelected, teammateFooterIndex: teammateFooterIndex, ideSelection: ideSelection, mcpClients: mcpClients, isPasting: isPasting, isInputWrapped: isInputWrapped, messages: messages, isSearching: isSearchingHistory, historyQuery: historyQuery, setHistoryQuery: setHistoryQuery, historyFailedMatch: historyFailedMatch, onOpenTasksDialog: isFullscreenEnvEnabled() ? handleOpenTasksDialog : undefined }), isFullscreenEnvEnabled() ? null : autoModeOptInDialog, isFullscreenEnvEnabled() ?
1954
+ _jsx(Box, { position: "absolute", marginTop: briefOwnsGap ? -2 : -1, height: suggestions.length === 0 && !showAutoModeOptIn ? 1 : 0, width: "100%", paddingLeft: 2, paddingRight: 1, flexDirection: "column", justifyContent: "flex-end", overflow: "hidden", children: _jsx(Notifications, { apiKeyStatus: apiKeyStatus, autoUpdaterResult: autoUpdaterResult, debug: debug, isAutoUpdating: isAutoUpdating, verbose: verbose, messages: messages, onAutoUpdaterResult: onAutoUpdaterResult, onChangeIsUpdating: setIsAutoUpdating, ideSelection: ideSelection, mcpClients: mcpClients, isInputWrapped: isInputWrapped }) }) : null] });
1955
+ }
1956
+ /**
1957
+ * Compute the initial paste ID by finding the max ID used in existing messages.
1958
+ * This handles --continue/--resume scenarios where we need to avoid ID collisions.
1959
+ */
1960
+ function getInitialPasteId(messages) {
1961
+ let maxId = 0;
1962
+ for (const message of messages) {
1963
+ if (message.type === 'user') {
1964
+ // Check image paste IDs
1965
+ if (message.imagePasteIds) {
1966
+ for (const id of message.imagePasteIds) {
1967
+ if (id > maxId)
1968
+ maxId = id;
1969
+ }
1970
+ }
1971
+ // Check text paste references in message content
1972
+ if (Array.isArray(message.message.content)) {
1973
+ for (const block of message.message.content) {
1974
+ if (block.type === 'text') {
1975
+ const refs = parseReferences(block.text);
1976
+ for (const ref of refs) {
1977
+ if (ref.id > maxId)
1978
+ maxId = ref.id;
1979
+ }
1980
+ }
1981
+ }
1982
+ }
1983
+ }
1984
+ }
1985
+ return maxId + 1;
1986
+ }
1987
+ function buildBorderText(showFastIcon, showFastIconHint, fastModeCooldown) {
1988
+ if (!showFastIcon)
1989
+ return undefined;
1990
+ const fastSeg = showFastIconHint ? `${getFastIconString(true, fastModeCooldown)} ${chalk.dim('/fast')}` : getFastIconString(true, fastModeCooldown);
1991
+ return {
1992
+ content: ` ${fastSeg} `,
1993
+ position: 'top',
1994
+ align: 'end',
1995
+ offset: 0
1996
+ };
1997
+ }
1998
+ export default React.memo(PromptInput);