@xortex/xcode 3.0.1 → 3.0.3

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 (969) hide show
  1. package/QueryEngine.ts +1331 -0
  2. package/Task.ts +125 -0
  3. package/Tool.ts +792 -0
  4. package/assistant/sessionHistory.ts +87 -0
  5. package/bin/xcode +57 -25
  6. package/bridge/bridgeApi.ts +539 -0
  7. package/bridge/bridgeConfig.ts +48 -0
  8. package/bridge/bridgeDebug.ts +135 -0
  9. package/bridge/bridgeEnabled.ts +202 -0
  10. package/bridge/bridgeMain.ts +2999 -0
  11. package/bridge/bridgeMessaging.ts +461 -0
  12. package/bridge/bridgePermissionCallbacks.ts +43 -0
  13. package/bridge/bridgePointer.ts +210 -0
  14. package/bridge/bridgeStatusUtil.ts +163 -0
  15. package/bridge/bridgeUI.ts +530 -0
  16. package/bridge/capacityWake.ts +56 -0
  17. package/bridge/codeSessionApi.ts +168 -0
  18. package/bridge/createSession.ts +384 -0
  19. package/bridge/debugUtils.ts +141 -0
  20. package/bridge/envLessBridgeConfig.ts +165 -0
  21. package/bridge/flushGate.ts +71 -0
  22. package/bridge/inboundAttachments.ts +175 -0
  23. package/bridge/inboundMessages.ts +80 -0
  24. package/bridge/initReplBridge.ts +569 -0
  25. package/bridge/jwtUtils.ts +256 -0
  26. package/bridge/pollConfig.ts +110 -0
  27. package/bridge/pollConfigDefaults.ts +82 -0
  28. package/bridge/remoteBridgeCore.ts +1008 -0
  29. package/bridge/replBridge.ts +2406 -0
  30. package/bridge/replBridgeHandle.ts +36 -0
  31. package/bridge/replBridgeTransport.ts +370 -0
  32. package/bridge/sessionIdCompat.ts +57 -0
  33. package/bridge/sessionRunner.ts +550 -0
  34. package/bridge/trustedDevice.ts +210 -0
  35. package/bridge/types.ts +262 -0
  36. package/bridge/workSecret.ts +127 -0
  37. package/buddy/CompanionSprite.tsx +371 -0
  38. package/buddy/companion.ts +133 -0
  39. package/buddy/prompt.ts +36 -0
  40. package/buddy/sprites.ts +514 -0
  41. package/buddy/types.ts +148 -0
  42. package/buddy/useBuddyNotification.tsx +98 -0
  43. package/cli/exit.ts +31 -0
  44. package/cli/handlers/agents.ts +70 -0
  45. package/cli/handlers/auth.ts +330 -0
  46. package/cli/handlers/autoMode.ts +170 -0
  47. package/cli/handlers/mcp.tsx +362 -0
  48. package/cli/handlers/plugins.ts +878 -0
  49. package/cli/handlers/util.tsx +110 -0
  50. package/cli/ndjsonSafeStringify.ts +32 -0
  51. package/cli/print.ts +5594 -0
  52. package/cli/remoteIO.ts +255 -0
  53. package/cli/structuredIO.ts +859 -0
  54. package/cli/transports/HybridTransport.ts +282 -0
  55. package/cli/transports/SSETransport.ts +711 -0
  56. package/cli/transports/SerialBatchEventUploader.ts +275 -0
  57. package/cli/transports/WebSocketTransport.ts +800 -0
  58. package/cli/transports/WorkerStateUploader.ts +131 -0
  59. package/cli/transports/ccrClient.ts +998 -0
  60. package/cli/transports/transportUtils.ts +45 -0
  61. package/cli/update.ts +422 -0
  62. package/commands/add-dir/add-dir.tsx +126 -0
  63. package/commands/add-dir/index.ts +11 -0
  64. package/commands/add-dir/validation.ts +110 -0
  65. package/commands/advisor.ts +109 -0
  66. package/commands/agents/agents.tsx +12 -0
  67. package/commands/agents/index.ts +10 -0
  68. package/commands/ant-trace/index.js +1 -0
  69. package/commands/autofix-pr/index.js +1 -0
  70. package/commands/backfill-sessions/index.js +1 -0
  71. package/commands/branch/branch.ts +296 -0
  72. package/commands/branch/index.ts +14 -0
  73. package/commands/break-cache/index.js +1 -0
  74. package/commands/bridge/bridge.tsx +509 -0
  75. package/commands/bridge/index.ts +26 -0
  76. package/commands/bridge-kick.ts +200 -0
  77. package/commands/brief.ts +130 -0
  78. package/commands/btw/btw.tsx +243 -0
  79. package/commands/btw/index.ts +13 -0
  80. package/commands/bughunter/index.js +1 -0
  81. package/commands/chrome/chrome.tsx +285 -0
  82. package/commands/chrome/index.ts +13 -0
  83. package/commands/clear/caches.ts +144 -0
  84. package/commands/clear/clear.ts +7 -0
  85. package/commands/clear/conversation.ts +251 -0
  86. package/commands/clear/index.ts +19 -0
  87. package/commands/color/color.ts +93 -0
  88. package/commands/color/index.ts +16 -0
  89. package/commands/commit-push-pr.ts +158 -0
  90. package/commands/commit.ts +92 -0
  91. package/commands/compact/compact.ts +287 -0
  92. package/commands/compact/index.ts +15 -0
  93. package/commands/config/config.tsx +7 -0
  94. package/commands/config/index.ts +11 -0
  95. package/commands/context/context-noninteractive.ts +325 -0
  96. package/commands/context/context.tsx +64 -0
  97. package/commands/context/index.ts +24 -0
  98. package/commands/copy/copy.tsx +371 -0
  99. package/commands/copy/index.ts +15 -0
  100. package/commands/cost/cost.ts +24 -0
  101. package/commands/cost/index.ts +23 -0
  102. package/commands/createMovedToPluginCommand.ts +65 -0
  103. package/commands/ctx_viz/index.js +1 -0
  104. package/commands/debug-tool-call/index.js +1 -0
  105. package/commands/desktop/desktop.tsx +9 -0
  106. package/commands/desktop/index.ts +26 -0
  107. package/commands/diff/diff.tsx +9 -0
  108. package/commands/diff/index.ts +8 -0
  109. package/commands/doctor/doctor.tsx +7 -0
  110. package/commands/doctor/index.ts +12 -0
  111. package/commands/effort/effort.tsx +183 -0
  112. package/commands/effort/index.ts +13 -0
  113. package/commands/env/index.js +1 -0
  114. package/commands/exit/exit.tsx +33 -0
  115. package/commands/exit/index.ts +12 -0
  116. package/commands/export/export.tsx +91 -0
  117. package/commands/export/index.ts +11 -0
  118. package/commands/extra-usage/extra-usage-core.ts +118 -0
  119. package/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  120. package/commands/extra-usage/extra-usage.tsx +17 -0
  121. package/commands/extra-usage/index.ts +31 -0
  122. package/commands/fast/fast.tsx +269 -0
  123. package/commands/fast/index.ts +26 -0
  124. package/commands/feedback/feedback.tsx +25 -0
  125. package/commands/feedback/index.ts +26 -0
  126. package/commands/files/files.ts +19 -0
  127. package/commands/files/index.ts +12 -0
  128. package/commands/good-claude/index.js +1 -0
  129. package/commands/heapdump/heapdump.ts +17 -0
  130. package/commands/heapdump/index.ts +12 -0
  131. package/commands/help/help.tsx +11 -0
  132. package/commands/help/index.ts +10 -0
  133. package/commands/hooks/hooks.tsx +13 -0
  134. package/commands/hooks/index.ts +11 -0
  135. package/commands/ide/ide.tsx +646 -0
  136. package/commands/ide/index.ts +11 -0
  137. package/commands/init-verifiers.ts +262 -0
  138. package/commands/init.ts +256 -0
  139. package/commands/insights.ts +3200 -0
  140. package/commands/install-github-app/ApiKeyStep.tsx +231 -0
  141. package/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  142. package/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  143. package/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  144. package/commands/install-github-app/CreatingStep.tsx +65 -0
  145. package/commands/install-github-app/ErrorStep.tsx +85 -0
  146. package/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  147. package/commands/install-github-app/InstallAppStep.tsx +94 -0
  148. package/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  149. package/commands/install-github-app/SuccessStep.tsx +96 -0
  150. package/commands/install-github-app/WarningsStep.tsx +73 -0
  151. package/commands/install-github-app/index.ts +13 -0
  152. package/commands/install-github-app/install-github-app.tsx +587 -0
  153. package/commands/install-github-app/setupGitHubActions.ts +325 -0
  154. package/commands/install-slack-app/index.ts +12 -0
  155. package/commands/install-slack-app/install-slack-app.ts +30 -0
  156. package/commands/install.tsx +300 -0
  157. package/commands/issue/index.js +1 -0
  158. package/commands/keybindings/index.ts +13 -0
  159. package/commands/keybindings/keybindings.ts +53 -0
  160. package/commands/login/index.ts +14 -0
  161. package/commands/login/login.tsx +104 -0
  162. package/commands/logout/index.ts +10 -0
  163. package/commands/logout/logout.tsx +82 -0
  164. package/commands/mcp/addCommand.ts +280 -0
  165. package/commands/mcp/index.ts +12 -0
  166. package/commands/mcp/mcp.tsx +85 -0
  167. package/commands/mcp/xaaIdpCommand.ts +266 -0
  168. package/commands/memory/index.ts +10 -0
  169. package/commands/memory/memory.tsx +90 -0
  170. package/commands/mobile/index.ts +11 -0
  171. package/commands/mobile/mobile.tsx +274 -0
  172. package/commands/mock-limits/index.js +1 -0
  173. package/commands/model/index.ts +16 -0
  174. package/commands/model/model.tsx +297 -0
  175. package/commands/oauth-refresh/index.js +1 -0
  176. package/commands/onboarding/index.js +1 -0
  177. package/commands/output-style/index.ts +11 -0
  178. package/commands/output-style/output-style.tsx +7 -0
  179. package/commands/passes/index.ts +22 -0
  180. package/commands/passes/passes.tsx +24 -0
  181. package/commands/perf-issue/index.js +1 -0
  182. package/commands/permissions/index.ts +11 -0
  183. package/commands/permissions/permissions.tsx +10 -0
  184. package/commands/plan/index.ts +11 -0
  185. package/commands/plan/plan.tsx +122 -0
  186. package/commands/plugin/AddMarketplace.tsx +162 -0
  187. package/commands/plugin/BrowseMarketplace.tsx +802 -0
  188. package/commands/plugin/DiscoverPlugins.tsx +781 -0
  189. package/commands/plugin/ManageMarketplaces.tsx +838 -0
  190. package/commands/plugin/ManagePlugins.tsx +2215 -0
  191. package/commands/plugin/PluginErrors.tsx +124 -0
  192. package/commands/plugin/PluginOptionsDialog.tsx +357 -0
  193. package/commands/plugin/PluginOptionsFlow.tsx +135 -0
  194. package/commands/plugin/PluginSettings.tsx +1072 -0
  195. package/commands/plugin/PluginTrustWarning.tsx +32 -0
  196. package/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  197. package/commands/plugin/ValidatePlugin.tsx +98 -0
  198. package/commands/plugin/index.tsx +11 -0
  199. package/commands/plugin/parseArgs.ts +103 -0
  200. package/commands/plugin/plugin.tsx +7 -0
  201. package/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  202. package/commands/plugin/usePagination.ts +171 -0
  203. package/commands/pr_comments/index.ts +50 -0
  204. package/commands/privacy-settings/index.ts +14 -0
  205. package/commands/privacy-settings/privacy-settings.tsx +58 -0
  206. package/commands/rate-limit-options/index.ts +19 -0
  207. package/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  208. package/commands/release-notes/index.ts +11 -0
  209. package/commands/release-notes/release-notes.ts +50 -0
  210. package/commands/reload-plugins/index.ts +18 -0
  211. package/commands/reload-plugins/reload-plugins.ts +61 -0
  212. package/commands/remote-env/index.ts +15 -0
  213. package/commands/remote-env/remote-env.tsx +7 -0
  214. package/commands/remote-setup/api.ts +182 -0
  215. package/commands/remote-setup/index.ts +20 -0
  216. package/commands/remote-setup/remote-setup.tsx +187 -0
  217. package/commands/rename/generateSessionName.ts +67 -0
  218. package/commands/rename/index.ts +12 -0
  219. package/commands/rename/rename.ts +87 -0
  220. package/commands/reset-limits/index.js +4 -0
  221. package/commands/resume/index.ts +12 -0
  222. package/commands/resume/resume.tsx +275 -0
  223. package/commands/review/UltrareviewOverageDialog.tsx +96 -0
  224. package/commands/review/reviewRemote.ts +316 -0
  225. package/commands/review/ultrareviewCommand.tsx +58 -0
  226. package/commands/review/ultrareviewEnabled.ts +14 -0
  227. package/commands/review.ts +57 -0
  228. package/commands/rewind/index.ts +13 -0
  229. package/commands/rewind/rewind.ts +13 -0
  230. package/commands/sandbox-toggle/index.ts +50 -0
  231. package/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  232. package/commands/security-review.ts +243 -0
  233. package/commands/session/index.ts +16 -0
  234. package/commands/session/session.tsx +140 -0
  235. package/commands/share/index.js +1 -0
  236. package/commands/skills/index.ts +10 -0
  237. package/commands/skills/skills.tsx +8 -0
  238. package/commands/stats/index.ts +10 -0
  239. package/commands/stats/stats.tsx +7 -0
  240. package/commands/status/index.ts +12 -0
  241. package/commands/status/status.tsx +8 -0
  242. package/commands/statusline.tsx +24 -0
  243. package/commands/stickers/index.ts +11 -0
  244. package/commands/stickers/stickers.ts +16 -0
  245. package/commands/summary/index.js +1 -0
  246. package/commands/tag/index.ts +12 -0
  247. package/commands/tag/tag.tsx +215 -0
  248. package/commands/tasks/index.ts +11 -0
  249. package/commands/tasks/tasks.tsx +8 -0
  250. package/commands/teleport/index.js +1 -0
  251. package/commands/terminalSetup/index.ts +23 -0
  252. package/commands/terminalSetup/terminalSetup.tsx +531 -0
  253. package/commands/theme/index.ts +10 -0
  254. package/commands/theme/theme.tsx +57 -0
  255. package/commands/thinkback/index.ts +13 -0
  256. package/commands/thinkback/thinkback.tsx +554 -0
  257. package/commands/thinkback-play/index.ts +17 -0
  258. package/commands/thinkback-play/thinkback-play.ts +43 -0
  259. package/commands/ultraplan.tsx +471 -0
  260. package/commands/upgrade/index.ts +16 -0
  261. package/commands/upgrade/upgrade.tsx +38 -0
  262. package/commands/usage/index.ts +9 -0
  263. package/commands/usage/usage.tsx +7 -0
  264. package/commands/version.ts +22 -0
  265. package/commands/vim/index.ts +11 -0
  266. package/commands/vim/vim.ts +38 -0
  267. package/commands/voice/index.ts +20 -0
  268. package/commands/voice/voice.ts +150 -0
  269. package/commands/xingest/index.ts +11 -0
  270. package/commands/xingest/xingest.ts +90 -0
  271. package/commands/xsearch/index.ts +11 -0
  272. package/commands/xsearch/xsearch.ts +56 -0
  273. package/commands.ts +758 -0
  274. package/components/AgentProgressLine.tsx +136 -0
  275. package/components/App.tsx +56 -0
  276. package/components/ApproveApiKey.tsx +123 -0
  277. package/components/AutoModeOptInDialog.tsx +142 -0
  278. package/components/AutoUpdater.tsx +198 -0
  279. package/components/AutoUpdaterWrapper.tsx +91 -0
  280. package/components/AwsAuthStatusBox.tsx +82 -0
  281. package/components/BaseTextInput.tsx +136 -0
  282. package/components/BashModeProgress.tsx +56 -0
  283. package/components/BridgeDialog.tsx +401 -0
  284. package/components/BypassPermissionsModeDialog.tsx +87 -0
  285. package/components/ChannelDowngradeDialog.tsx +102 -0
  286. package/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  287. package/components/ClaudeInChromeOnboarding.tsx +121 -0
  288. package/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  289. package/components/ClickableImageRef.tsx +73 -0
  290. package/components/CompactSummary.tsx +118 -0
  291. package/components/ConfigurableShortcutHint.tsx +57 -0
  292. package/components/ConsoleOAuthFlow.tsx +631 -0
  293. package/components/ContextSuggestions.tsx +47 -0
  294. package/components/ContextVisualization.tsx +489 -0
  295. package/components/CoordinatorAgentStatus.tsx +273 -0
  296. package/components/CostThresholdDialog.tsx +50 -0
  297. package/components/CtrlOToExpand.tsx +51 -0
  298. package/components/CustomSelect/SelectMulti.tsx +213 -0
  299. package/components/CustomSelect/index.ts +3 -0
  300. package/components/CustomSelect/option-map.ts +50 -0
  301. package/components/CustomSelect/select-input-option.tsx +488 -0
  302. package/components/CustomSelect/select-option.tsx +68 -0
  303. package/components/CustomSelect/select.tsx +690 -0
  304. package/components/CustomSelect/use-multi-select-state.ts +414 -0
  305. package/components/CustomSelect/use-select-input.ts +287 -0
  306. package/components/CustomSelect/use-select-navigation.ts +653 -0
  307. package/components/CustomSelect/use-select-state.ts +157 -0
  308. package/components/DesktopHandoff.tsx +193 -0
  309. package/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  310. package/components/DevBar.tsx +49 -0
  311. package/components/DevChannelsDialog.tsx +105 -0
  312. package/components/DiagnosticsDisplay.tsx +95 -0
  313. package/components/EffortCallout.tsx +265 -0
  314. package/components/EffortIndicator.ts +42 -0
  315. package/components/ExitFlow.tsx +48 -0
  316. package/components/ExportDialog.tsx +128 -0
  317. package/components/FallbackToolUseErrorMessage.tsx +116 -0
  318. package/components/FallbackToolUseRejectedMessage.tsx +16 -0
  319. package/components/FastIcon.tsx +46 -0
  320. package/components/Feedback.tsx +592 -0
  321. package/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  322. package/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  323. package/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  324. package/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  325. package/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  326. package/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  327. package/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  328. package/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  329. package/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  330. package/components/FileEditToolDiff.tsx +181 -0
  331. package/components/FileEditToolUpdatedMessage.tsx +124 -0
  332. package/components/FileEditToolUseRejectedMessage.tsx +170 -0
  333. package/components/FilePathLink.tsx +43 -0
  334. package/components/FullscreenLayout.tsx +645 -0
  335. package/components/GlobalSearchDialog.tsx +343 -0
  336. package/components/HelpV2/Commands.tsx +82 -0
  337. package/components/HelpV2/General.tsx +23 -0
  338. package/components/HelpV2/HelpV2.tsx +184 -0
  339. package/components/HighlightedCode/Fallback.tsx +193 -0
  340. package/components/HighlightedCode.tsx +190 -0
  341. package/components/HistorySearchDialog.tsx +118 -0
  342. package/components/IdeAutoConnectDialog.tsx +154 -0
  343. package/components/IdeOnboardingDialog.tsx +167 -0
  344. package/components/IdeStatusIndicator.tsx +58 -0
  345. package/components/IdleReturnDialog.tsx +118 -0
  346. package/components/InterruptedByUser.tsx +15 -0
  347. package/components/InvalidConfigDialog.tsx +156 -0
  348. package/components/InvalidSettingsDialog.tsx +89 -0
  349. package/components/KeybindingWarnings.tsx +55 -0
  350. package/components/LanguagePicker.tsx +86 -0
  351. package/components/LogSelector.tsx +1575 -0
  352. package/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  353. package/components/LogoV2/AnimatedClawd.tsx +124 -0
  354. package/components/LogoV2/ChannelsNotice.tsx +266 -0
  355. package/components/LogoV2/Clawd.tsx +14 -0
  356. package/components/LogoV2/CondensedLogo.tsx +161 -0
  357. package/components/LogoV2/EmergencyTip.tsx +58 -0
  358. package/components/LogoV2/Feed.tsx +112 -0
  359. package/components/LogoV2/FeedColumn.tsx +59 -0
  360. package/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  361. package/components/LogoV2/LogoV2.tsx +543 -0
  362. package/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  363. package/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  364. package/components/LogoV2/VoiceModeNotice.tsx +68 -0
  365. package/components/LogoV2/WelcomeV2.tsx +433 -0
  366. package/components/LogoV2/feedConfigs.tsx +92 -0
  367. package/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  368. package/components/MCPServerApprovalDialog.tsx +115 -0
  369. package/components/MCPServerDesktopImportDialog.tsx +203 -0
  370. package/components/MCPServerDialogCopy.tsx +15 -0
  371. package/components/MCPServerMultiselectDialog.tsx +133 -0
  372. package/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  373. package/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  374. package/components/Markdown.tsx +236 -0
  375. package/components/MarkdownTable.tsx +322 -0
  376. package/components/MemoryUsageIndicator.tsx +37 -0
  377. package/components/Message.tsx +627 -0
  378. package/components/MessageModel.tsx +43 -0
  379. package/components/MessageResponse.tsx +78 -0
  380. package/components/MessageRow.tsx +383 -0
  381. package/components/MessageSelector.tsx +831 -0
  382. package/components/MessageTimestamp.tsx +63 -0
  383. package/components/Messages.tsx +834 -0
  384. package/components/ModelPicker.tsx +448 -0
  385. package/components/NativeAutoUpdater.tsx +193 -0
  386. package/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  387. package/components/OffscreenFreeze.tsx +44 -0
  388. package/components/Onboarding.tsx +244 -0
  389. package/components/OutputStylePicker.tsx +112 -0
  390. package/components/PackageManagerAutoUpdater.tsx +104 -0
  391. package/components/Passes/Passes.tsx +184 -0
  392. package/components/PrBadge.tsx +97 -0
  393. package/components/PressEnterToContinue.tsx +15 -0
  394. package/components/PromptInput/HistorySearchInput.tsx +51 -0
  395. package/components/PromptInput/IssueFlagBanner.tsx +12 -0
  396. package/components/PromptInput/Notifications.tsx +332 -0
  397. package/components/PromptInput/PromptInput.tsx +2350 -0
  398. package/components/PromptInput/PromptInputFooter.tsx +191 -0
  399. package/components/PromptInput/PromptInputFooterLeftSide.tsx +524 -0
  400. package/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  401. package/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  402. package/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  403. package/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  404. package/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  405. package/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  406. package/components/PromptInput/ShimmeredInput.tsx +143 -0
  407. package/components/PromptInput/VoiceIndicator.tsx +137 -0
  408. package/components/PromptInput/inputModes.ts +33 -0
  409. package/components/PromptInput/inputPaste.ts +90 -0
  410. package/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  411. package/components/PromptInput/usePromptInputPlaceholder.ts +78 -0
  412. package/components/PromptInput/useShowFastIconHint.ts +31 -0
  413. package/components/PromptInput/useSwarmBanner.ts +155 -0
  414. package/components/PromptInput/utils.ts +60 -0
  415. package/components/QuickOpenDialog.tsx +244 -0
  416. package/components/RemoteCallout.tsx +76 -0
  417. package/components/RemoteEnvironmentDialog.tsx +340 -0
  418. package/components/ResumeTask.tsx +268 -0
  419. package/components/SandboxViolationExpandedView.tsx +99 -0
  420. package/components/ScrollKeybindingHandler.tsx +1012 -0
  421. package/components/SearchBox.tsx +72 -0
  422. package/components/SentryErrorBoundary.ts +28 -0
  423. package/components/SessionBackgroundHint.tsx +108 -0
  424. package/components/SessionPreview.tsx +194 -0
  425. package/components/Settings/Config.tsx +1822 -0
  426. package/components/Settings/Settings.tsx +137 -0
  427. package/components/Settings/Status.tsx +241 -0
  428. package/components/Settings/Usage.tsx +377 -0
  429. package/components/ShowInIDEPrompt.tsx +170 -0
  430. package/components/SkillImprovementSurvey.tsx +152 -0
  431. package/components/Spinner/FlashingChar.tsx +61 -0
  432. package/components/Spinner/GlimmerMessage.tsx +328 -0
  433. package/components/Spinner/ShimmerChar.tsx +36 -0
  434. package/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  435. package/components/Spinner/SpinnerGlyph.tsx +80 -0
  436. package/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  437. package/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  438. package/components/Spinner/index.ts +10 -0
  439. package/components/Spinner/teammateSelectHint.ts +1 -0
  440. package/components/Spinner/useShimmerAnimation.ts +31 -0
  441. package/components/Spinner/useStalledAnimation.ts +75 -0
  442. package/components/Spinner/utils.ts +84 -0
  443. package/components/Spinner.tsx +562 -0
  444. package/components/Stats.tsx +1228 -0
  445. package/components/StatusLine.tsx +324 -0
  446. package/components/StatusNotices.tsx +55 -0
  447. package/components/StructuredDiff/Fallback.tsx +487 -0
  448. package/components/StructuredDiff/colorDiff.ts +37 -0
  449. package/components/StructuredDiff.tsx +190 -0
  450. package/components/StructuredDiffList.tsx +30 -0
  451. package/components/TagTabs.tsx +139 -0
  452. package/components/TaskListV2.tsx +378 -0
  453. package/components/TeammateViewHeader.tsx +82 -0
  454. package/components/TeleportError.tsx +189 -0
  455. package/components/TeleportProgress.tsx +140 -0
  456. package/components/TeleportRepoMismatchDialog.tsx +104 -0
  457. package/components/TeleportResumeWrapper.tsx +167 -0
  458. package/components/TeleportStash.tsx +116 -0
  459. package/components/TextInput.tsx +124 -0
  460. package/components/ThemePicker.tsx +333 -0
  461. package/components/ThinkingToggle.tsx +153 -0
  462. package/components/TokenWarning.tsx +179 -0
  463. package/components/ToolUseLoader.tsx +42 -0
  464. package/components/TrustDialog/TrustDialog.tsx +290 -0
  465. package/components/TrustDialog/utils.ts +245 -0
  466. package/components/ValidationErrorsList.tsx +148 -0
  467. package/components/VimTextInput.tsx +140 -0
  468. package/components/VirtualMessageList.tsx +1082 -0
  469. package/components/WorkflowMultiselectDialog.tsx +128 -0
  470. package/components/WorktreeExitDialog.tsx +231 -0
  471. package/components/agents/AgentDetail.tsx +220 -0
  472. package/components/agents/AgentEditor.tsx +178 -0
  473. package/components/agents/AgentNavigationFooter.tsx +26 -0
  474. package/components/agents/AgentsList.tsx +440 -0
  475. package/components/agents/AgentsMenu.tsx +800 -0
  476. package/components/agents/ColorPicker.tsx +112 -0
  477. package/components/agents/ModelSelector.tsx +68 -0
  478. package/components/agents/ToolSelector.tsx +562 -0
  479. package/components/agents/agentFileUtils.ts +272 -0
  480. package/components/agents/generateAgent.ts +197 -0
  481. package/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  482. package/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  483. package/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  484. package/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  485. package/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  486. package/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  487. package/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  488. package/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  489. package/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  490. package/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  491. package/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  492. package/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  493. package/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  494. package/components/agents/types.ts +27 -0
  495. package/components/agents/utils.ts +18 -0
  496. package/components/agents/validateAgent.ts +109 -0
  497. package/components/design-system/Byline.tsx +77 -0
  498. package/components/design-system/Dialog.tsx +138 -0
  499. package/components/design-system/Divider.tsx +149 -0
  500. package/components/design-system/FuzzyPicker.tsx +312 -0
  501. package/components/design-system/KeyboardShortcutHint.tsx +81 -0
  502. package/components/design-system/ListItem.tsx +244 -0
  503. package/components/design-system/LoadingState.tsx +94 -0
  504. package/components/design-system/Pane.tsx +77 -0
  505. package/components/design-system/ProgressBar.tsx +86 -0
  506. package/components/design-system/Ratchet.tsx +80 -0
  507. package/components/design-system/StatusIcon.tsx +95 -0
  508. package/components/design-system/Tabs.tsx +340 -0
  509. package/components/design-system/ThemeProvider.tsx +170 -0
  510. package/components/design-system/ThemedBox.tsx +156 -0
  511. package/components/design-system/ThemedText.tsx +124 -0
  512. package/components/design-system/color.ts +30 -0
  513. package/components/diff/DiffDetailView.tsx +281 -0
  514. package/components/diff/DiffDialog.tsx +383 -0
  515. package/components/diff/DiffFileList.tsx +292 -0
  516. package/components/grove/Grove.tsx +463 -0
  517. package/components/hooks/HooksConfigMenu.tsx +578 -0
  518. package/components/hooks/PromptDialog.tsx +90 -0
  519. package/components/hooks/SelectEventMode.tsx +127 -0
  520. package/components/hooks/SelectHookMode.tsx +112 -0
  521. package/components/hooks/SelectMatcherMode.tsx +144 -0
  522. package/components/hooks/ViewHookMode.tsx +199 -0
  523. package/components/mcp/CapabilitiesSection.tsx +61 -0
  524. package/components/mcp/ElicitationDialog.tsx +1169 -0
  525. package/components/mcp/MCPAgentServerMenu.tsx +183 -0
  526. package/components/mcp/MCPListPanel.tsx +504 -0
  527. package/components/mcp/MCPReconnect.tsx +167 -0
  528. package/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  529. package/components/mcp/MCPSettings.tsx +398 -0
  530. package/components/mcp/MCPStdioServerMenu.tsx +177 -0
  531. package/components/mcp/MCPToolDetailView.tsx +212 -0
  532. package/components/mcp/MCPToolListView.tsx +141 -0
  533. package/components/mcp/McpParsingWarnings.tsx +213 -0
  534. package/components/mcp/index.ts +9 -0
  535. package/components/mcp/utils/reconnectHelpers.tsx +49 -0
  536. package/components/memory/MemoryFileSelector.tsx +438 -0
  537. package/components/memory/MemoryUpdateNotification.tsx +45 -0
  538. package/components/messageActions.tsx +450 -0
  539. package/components/messages/AdvisorMessage.tsx +158 -0
  540. package/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  541. package/components/messages/AssistantTextMessage.tsx +270 -0
  542. package/components/messages/AssistantThinkingMessage.tsx +86 -0
  543. package/components/messages/AssistantToolUseMessage.tsx +368 -0
  544. package/components/messages/AttachmentMessage.tsx +536 -0
  545. package/components/messages/CollapsedReadSearchContent.tsx +484 -0
  546. package/components/messages/CompactBoundaryMessage.tsx +18 -0
  547. package/components/messages/GroupedToolUseContent.tsx +58 -0
  548. package/components/messages/HighlightedThinkingText.tsx +162 -0
  549. package/components/messages/HookProgressMessage.tsx +116 -0
  550. package/components/messages/PlanApprovalMessage.tsx +222 -0
  551. package/components/messages/RateLimitMessage.tsx +161 -0
  552. package/components/messages/ShutdownMessage.tsx +132 -0
  553. package/components/messages/SystemAPIErrorMessage.tsx +141 -0
  554. package/components/messages/SystemTextMessage.tsx +827 -0
  555. package/components/messages/TaskAssignmentMessage.tsx +76 -0
  556. package/components/messages/UserAgentNotificationMessage.tsx +83 -0
  557. package/components/messages/UserBashInputMessage.tsx +58 -0
  558. package/components/messages/UserBashOutputMessage.tsx +54 -0
  559. package/components/messages/UserChannelMessage.tsx +137 -0
  560. package/components/messages/UserCommandMessage.tsx +108 -0
  561. package/components/messages/UserImageMessage.tsx +59 -0
  562. package/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  563. package/components/messages/UserMemoryInputMessage.tsx +75 -0
  564. package/components/messages/UserPlanMessage.tsx +42 -0
  565. package/components/messages/UserPromptMessage.tsx +80 -0
  566. package/components/messages/UserResourceUpdateMessage.tsx +121 -0
  567. package/components/messages/UserTeammateMessage.tsx +206 -0
  568. package/components/messages/UserTextMessage.tsx +275 -0
  569. package/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  570. package/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  571. package/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  572. package/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  573. package/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  574. package/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  575. package/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  576. package/components/messages/UserToolResultMessage/utils.tsx +44 -0
  577. package/components/messages/nullRenderingAttachments.ts +70 -0
  578. package/components/messages/teamMemCollapsed.tsx +140 -0
  579. package/components/messages/teamMemSaved.ts +19 -0
  580. package/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  581. package/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  582. package/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  583. package/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  584. package/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  585. package/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  586. package/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  587. package/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  588. package/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  589. package/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  590. package/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  591. package/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  592. package/components/permissions/FallbackPermissionRequest.tsx +333 -0
  593. package/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  594. package/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  595. package/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  596. package/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  597. package/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  598. package/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  599. package/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  600. package/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  601. package/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  602. package/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  603. package/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  604. package/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  605. package/components/permissions/PermissionDialog.tsx +72 -0
  606. package/components/permissions/PermissionExplanation.tsx +272 -0
  607. package/components/permissions/PermissionPrompt.tsx +336 -0
  608. package/components/permissions/PermissionRequest.tsx +217 -0
  609. package/components/permissions/PermissionRequestTitle.tsx +66 -0
  610. package/components/permissions/PermissionRuleExplanation.tsx +121 -0
  611. package/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  612. package/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  613. package/components/permissions/SandboxPermissionRequest.tsx +163 -0
  614. package/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  615. package/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  616. package/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  617. package/components/permissions/WorkerBadge.tsx +49 -0
  618. package/components/permissions/WorkerPendingPermission.tsx +105 -0
  619. package/components/permissions/hooks.ts +209 -0
  620. package/components/permissions/rules/AddPermissionRules.tsx +180 -0
  621. package/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  622. package/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  623. package/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  624. package/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  625. package/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  626. package/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  627. package/components/permissions/rules/WorkspaceTab.tsx +150 -0
  628. package/components/permissions/shellPermissionHelpers.tsx +164 -0
  629. package/components/permissions/useShellPermissionFeedback.ts +148 -0
  630. package/components/permissions/utils.ts +25 -0
  631. package/components/sandbox/SandboxConfigTab.tsx +45 -0
  632. package/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  633. package/components/sandbox/SandboxDoctorSection.tsx +46 -0
  634. package/components/sandbox/SandboxOverridesTab.tsx +193 -0
  635. package/components/sandbox/SandboxSettings.tsx +296 -0
  636. package/components/shell/ExpandShellOutputContext.tsx +36 -0
  637. package/components/shell/OutputLine.tsx +118 -0
  638. package/components/shell/ShellProgressMessage.tsx +150 -0
  639. package/components/shell/ShellTimeDisplay.tsx +74 -0
  640. package/components/skills/SkillsMenu.tsx +237 -0
  641. package/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  642. package/components/tasks/BackgroundTask.tsx +345 -0
  643. package/components/tasks/BackgroundTaskStatus.tsx +429 -0
  644. package/components/tasks/BackgroundTasksDialog.tsx +652 -0
  645. package/components/tasks/DreamDetailDialog.tsx +251 -0
  646. package/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  647. package/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  648. package/components/tasks/RemoteSessionProgress.tsx +243 -0
  649. package/components/tasks/ShellDetailDialog.tsx +404 -0
  650. package/components/tasks/ShellProgress.tsx +87 -0
  651. package/components/tasks/renderToolActivity.tsx +33 -0
  652. package/components/tasks/taskStatusUtils.tsx +107 -0
  653. package/components/teams/TeamStatus.tsx +80 -0
  654. package/components/teams/TeamsDialog.tsx +715 -0
  655. package/components/ui/OrderedList.tsx +71 -0
  656. package/components/ui/OrderedListItem.tsx +45 -0
  657. package/components/ui/TreeSelect.tsx +397 -0
  658. package/components/wizard/WizardDialogLayout.tsx +65 -0
  659. package/components/wizard/WizardNavigationFooter.tsx +24 -0
  660. package/components/wizard/WizardProvider.tsx +213 -0
  661. package/components/wizard/index.ts +9 -0
  662. package/components/wizard/useWizard.ts +13 -0
  663. package/context.ts +189 -0
  664. package/cost-tracker.ts +323 -0
  665. package/entrypoints/cli.tsx +1 -1
  666. package/history.ts +464 -0
  667. package/hooks/fileSuggestions.ts +811 -0
  668. package/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  669. package/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  670. package/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  671. package/hooks/notifs/useFastModeNotification.tsx +162 -0
  672. package/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  673. package/hooks/notifs/useInstallMessages.tsx +26 -0
  674. package/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  675. package/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  676. package/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  677. package/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  678. package/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  679. package/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  680. package/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  681. package/hooks/notifs/useSettingsErrors.tsx +69 -0
  682. package/hooks/notifs/useStartupNotification.ts +41 -0
  683. package/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  684. package/hooks/renderPlaceholder.ts +51 -0
  685. package/hooks/toolPermission/PermissionContext.ts +388 -0
  686. package/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  687. package/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  688. package/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  689. package/hooks/toolPermission/permissionLogging.ts +238 -0
  690. package/hooks/unifiedSuggestions.ts +202 -0
  691. package/hooks/useAfterFirstRender.ts +17 -0
  692. package/hooks/useApiKeyVerification.ts +84 -0
  693. package/hooks/useArrowKeyHistory.tsx +229 -0
  694. package/hooks/useAssistantHistory.ts +250 -0
  695. package/hooks/useAwaySummary.ts +125 -0
  696. package/hooks/useBackgroundTaskNavigation.ts +251 -0
  697. package/hooks/useBlink.ts +34 -0
  698. package/hooks/useCanUseTool.tsx +204 -0
  699. package/hooks/useCancelRequest.ts +276 -0
  700. package/hooks/useChromeExtensionNotification.tsx +50 -0
  701. package/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  702. package/hooks/useClipboardImageHint.ts +77 -0
  703. package/hooks/useCommandKeybindings.tsx +108 -0
  704. package/hooks/useCommandQueue.ts +15 -0
  705. package/hooks/useCopyOnSelect.ts +98 -0
  706. package/hooks/useDeferredHookMessages.ts +46 -0
  707. package/hooks/useDiffData.ts +110 -0
  708. package/hooks/useDiffInIDE.ts +379 -0
  709. package/hooks/useDirectConnect.ts +229 -0
  710. package/hooks/useDoublePress.ts +62 -0
  711. package/hooks/useDynamicConfig.ts +22 -0
  712. package/hooks/useElapsedTime.ts +37 -0
  713. package/hooks/useExitOnCtrlCD.ts +95 -0
  714. package/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  715. package/hooks/useFileHistorySnapshotInit.ts +25 -0
  716. package/hooks/useGlobalKeybindings.tsx +249 -0
  717. package/hooks/useHistorySearch.ts +303 -0
  718. package/hooks/useIDEIntegration.tsx +70 -0
  719. package/hooks/useIdeAtMentioned.ts +76 -0
  720. package/hooks/useIdeConnectionStatus.ts +33 -0
  721. package/hooks/useIdeLogging.ts +41 -0
  722. package/hooks/useIdeSelection.ts +150 -0
  723. package/hooks/useInboxPoller.ts +969 -0
  724. package/hooks/useInputBuffer.ts +132 -0
  725. package/hooks/useIssueFlagBanner.ts +133 -0
  726. package/hooks/useLogMessages.ts +119 -0
  727. package/hooks/useLspPluginRecommendation.tsx +194 -0
  728. package/hooks/useMailboxBridge.ts +21 -0
  729. package/hooks/useMainLoopModel.ts +34 -0
  730. package/hooks/useManagePlugins.ts +304 -0
  731. package/hooks/useMemoryUsage.ts +39 -0
  732. package/hooks/useMergedClients.ts +23 -0
  733. package/hooks/useMergedCommands.ts +15 -0
  734. package/hooks/useMergedTools.ts +44 -0
  735. package/hooks/useMinDisplayTime.ts +35 -0
  736. package/hooks/useNotifyAfterTimeout.ts +65 -0
  737. package/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  738. package/hooks/usePasteHandler.ts +285 -0
  739. package/hooks/usePluginRecommendationBase.tsx +105 -0
  740. package/hooks/usePrStatus.ts +106 -0
  741. package/hooks/usePromptSuggestion.ts +177 -0
  742. package/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  743. package/hooks/useQueueProcessor.ts +68 -0
  744. package/hooks/useRemoteSession.ts +605 -0
  745. package/hooks/useReplBridge.tsx +723 -0
  746. package/hooks/useSSHSession.ts +241 -0
  747. package/hooks/useScheduledTasks.ts +139 -0
  748. package/hooks/useSearchInput.ts +364 -0
  749. package/hooks/useSessionBackgrounding.ts +158 -0
  750. package/hooks/useSettings.ts +17 -0
  751. package/hooks/useSettingsChange.ts +25 -0
  752. package/hooks/useSkillImprovementSurvey.ts +105 -0
  753. package/hooks/useSkillsChange.ts +62 -0
  754. package/hooks/useSwarmInitialization.ts +81 -0
  755. package/hooks/useSwarmPermissionPoller.ts +330 -0
  756. package/hooks/useTaskListWatcher.ts +221 -0
  757. package/hooks/useTasksV2.ts +250 -0
  758. package/hooks/useTeammateViewAutoExit.ts +63 -0
  759. package/hooks/useTeleportResume.tsx +85 -0
  760. package/hooks/useTerminalSize.ts +15 -0
  761. package/hooks/useTextInput.ts +529 -0
  762. package/hooks/useTimeout.ts +14 -0
  763. package/hooks/useTurnDiffs.ts +213 -0
  764. package/hooks/useTypeahead.tsx +1385 -0
  765. package/hooks/useUpdateNotification.ts +34 -0
  766. package/hooks/useVimInput.ts +316 -0
  767. package/hooks/useVirtualScroll.ts +721 -0
  768. package/hooks/useVoice.ts +1144 -0
  769. package/hooks/useVoiceEnabled.ts +25 -0
  770. package/hooks/useVoiceIntegration.tsx +677 -0
  771. package/ink/Ansi.tsx +292 -0
  772. package/ink/bidi.ts +139 -0
  773. package/ink/clearTerminal.ts +74 -0
  774. package/ink/colorize.ts +231 -0
  775. package/ink/components/AlternateScreen.tsx +80 -0
  776. package/ink/components/App.tsx +658 -0
  777. package/ink/components/AppContext.ts +21 -0
  778. package/ink/components/Box.tsx +214 -0
  779. package/ink/components/Button.tsx +192 -0
  780. package/ink/components/ClockContext.tsx +112 -0
  781. package/ink/components/CursorDeclarationContext.ts +32 -0
  782. package/ink/components/ErrorOverview.tsx +109 -0
  783. package/ink/components/Link.tsx +42 -0
  784. package/ink/components/Newline.tsx +39 -0
  785. package/ink/components/NoSelect.tsx +68 -0
  786. package/ink/components/RawAnsi.tsx +57 -0
  787. package/ink/components/ScrollBox.tsx +237 -0
  788. package/ink/components/Spacer.tsx +20 -0
  789. package/ink/components/StdinContext.ts +49 -0
  790. package/ink/components/TerminalFocusContext.tsx +52 -0
  791. package/ink/components/TerminalSizeContext.tsx +7 -0
  792. package/ink/components/Text.tsx +254 -0
  793. package/ink/constants.ts +2 -0
  794. package/ink/dom.ts +484 -0
  795. package/ink/events/click-event.ts +38 -0
  796. package/ink/events/dispatcher.ts +233 -0
  797. package/ink/events/emitter.ts +39 -0
  798. package/ink/events/event-handlers.ts +73 -0
  799. package/ink/events/event.ts +11 -0
  800. package/ink/events/focus-event.ts +21 -0
  801. package/ink/events/input-event.ts +205 -0
  802. package/ink/events/keyboard-event.ts +51 -0
  803. package/ink/events/terminal-event.ts +107 -0
  804. package/ink/events/terminal-focus-event.ts +19 -0
  805. package/ink/focus.ts +181 -0
  806. package/ink/frame.ts +124 -0
  807. package/ink/get-max-width.ts +27 -0
  808. package/ink/global.d.ts +26 -0
  809. package/ink/hit-test.ts +130 -0
  810. package/ink/hooks/use-animation-frame.ts +57 -0
  811. package/ink/hooks/use-app.ts +8 -0
  812. package/ink/hooks/use-declared-cursor.ts +73 -0
  813. package/ink/hooks/use-input.ts +92 -0
  814. package/ink/hooks/use-interval.ts +67 -0
  815. package/ink/hooks/use-search-highlight.ts +53 -0
  816. package/ink/hooks/use-selection.ts +104 -0
  817. package/ink/hooks/use-stdin.ts +8 -0
  818. package/ink/hooks/use-tab-status.ts +72 -0
  819. package/ink/hooks/use-terminal-focus.ts +16 -0
  820. package/ink/hooks/use-terminal-title.ts +31 -0
  821. package/ink/hooks/use-terminal-viewport.ts +96 -0
  822. package/ink/ink.tsx +1754 -0
  823. package/ink/instances.ts +10 -0
  824. package/ink/layout/engine.ts +6 -0
  825. package/ink/layout/geometry.ts +97 -0
  826. package/ink/layout/node.ts +152 -0
  827. package/ink/layout/yoga.ts +308 -0
  828. package/ink/line-width-cache.ts +24 -0
  829. package/ink/log-update.ts +773 -0
  830. package/ink/measure-element.ts +23 -0
  831. package/ink/measure-text.ts +47 -0
  832. package/ink/node-cache.ts +54 -0
  833. package/ink/optimizer.ts +93 -0
  834. package/ink/output.ts +797 -0
  835. package/ink/parse-keypress.ts +801 -0
  836. package/ink/reconciler.ts +512 -0
  837. package/ink/render-border.ts +231 -0
  838. package/ink/render-node-to-output.ts +1462 -0
  839. package/ink/render-to-screen.ts +231 -0
  840. package/ink/renderer.ts +178 -0
  841. package/ink/root.ts +184 -0
  842. package/ink/screen.ts +1486 -0
  843. package/ink/searchHighlight.ts +93 -0
  844. package/ink/selection.ts +917 -0
  845. package/ink/squash-text-nodes.ts +92 -0
  846. package/ink/stringWidth.ts +223 -0
  847. package/ink/styles.ts +771 -0
  848. package/ink/supports-hyperlinks.ts +57 -0
  849. package/ink/tabstops.ts +46 -0
  850. package/ink/terminal-focus-state.ts +47 -0
  851. package/ink/terminal-querier.ts +212 -0
  852. package/ink/terminal.ts +248 -0
  853. package/ink/termio/ansi.ts +75 -0
  854. package/ink/termio/csi.ts +319 -0
  855. package/ink/termio/dec.ts +60 -0
  856. package/ink/termio/esc.ts +67 -0
  857. package/ink/termio/osc.ts +493 -0
  858. package/ink/termio/parser.ts +394 -0
  859. package/ink/termio/sgr.ts +308 -0
  860. package/ink/termio/tokenize.ts +319 -0
  861. package/ink/termio/types.ts +236 -0
  862. package/ink/termio.ts +42 -0
  863. package/ink/useTerminalNotification.ts +126 -0
  864. package/ink/warn.ts +9 -0
  865. package/ink/widest-line.ts +19 -0
  866. package/ink/wrap-text.ts +74 -0
  867. package/ink/wrapAnsi.ts +20 -0
  868. package/inspect.js +7 -0
  869. package/keybindings/KeybindingContext.tsx +243 -0
  870. package/keybindings/KeybindingProviderSetup.tsx +308 -0
  871. package/keybindings/defaultBindings.ts +340 -0
  872. package/keybindings/loadUserBindings.ts +472 -0
  873. package/keybindings/match.ts +120 -0
  874. package/keybindings/parser.ts +203 -0
  875. package/keybindings/reservedShortcuts.ts +127 -0
  876. package/keybindings/resolver.ts +244 -0
  877. package/keybindings/schema.ts +236 -0
  878. package/keybindings/shortcutFormat.ts +63 -0
  879. package/keybindings/template.ts +52 -0
  880. package/keybindings/useKeybinding.ts +196 -0
  881. package/keybindings/useShortcutDisplay.ts +59 -0
  882. package/keybindings/validate.ts +498 -0
  883. package/macro.ts +24 -0
  884. package/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  885. package/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  886. package/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  887. package/migrations/migrateFennecToOpus.ts +45 -0
  888. package/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  889. package/migrations/migrateOpusToOpus1m.ts +43 -0
  890. package/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  891. package/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  892. package/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  893. package/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  894. package/migrations/resetProToOpusDefault.ts +51 -0
  895. package/package.json +29 -3
  896. package/patch-box.js +54 -0
  897. package/patch-compact.js +13 -0
  898. package/patch-condensed-center.js +13 -0
  899. package/patch-condensed-row.js +13 -0
  900. package/patch-condensed.js +13 -0
  901. package/patch-final.js +58 -0
  902. package/patch-input-body.js +46 -0
  903. package/patch-input-body2.js +35 -0
  904. package/patch-input-style.js +13 -0
  905. package/patch-input-width.js +13 -0
  906. package/patch-layout.js +87 -0
  907. package/patch-logo-row.js +12 -0
  908. package/patch-width.js +13 -0
  909. package/patch-width2.js +13 -0
  910. package/patch2.js +74 -0
  911. package/patch3.js +13 -0
  912. package/query.ts +1750 -0
  913. package/remote/RemoteSessionManager.ts +343 -0
  914. package/remote/SessionsWebSocket.ts +404 -0
  915. package/remote/remotePermissionBridge.ts +78 -0
  916. package/remote/sdkMessageAdapter.ts +302 -0
  917. package/skills/bundled/batch.ts +124 -0
  918. package/skills/bundled/claudeApi.ts +196 -0
  919. package/skills/bundled/claudeApiContent.ts +75 -0
  920. package/skills/bundled/claudeInChrome.ts +34 -0
  921. package/skills/bundled/debug.ts +103 -0
  922. package/skills/bundled/index.ts +79 -0
  923. package/skills/bundled/keybindings.ts +339 -0
  924. package/skills/bundled/loop.ts +92 -0
  925. package/skills/bundled/loremIpsum.ts +282 -0
  926. package/skills/bundled/remember.ts +82 -0
  927. package/skills/bundled/scheduleRemoteAgents.ts +447 -0
  928. package/skills/bundled/simplify.ts +69 -0
  929. package/skills/bundled/skillify.ts +197 -0
  930. package/skills/bundled/stuck.ts +79 -0
  931. package/skills/bundled/updateConfig.ts +475 -0
  932. package/skills/bundled/verify/SKILL.md +3 -0
  933. package/skills/bundled/verify/examples/cli.md +3 -0
  934. package/skills/bundled/verify/examples/server.md +3 -0
  935. package/skills/bundled/verify.ts +30 -0
  936. package/skills/bundled/verifyContent.ts +13 -0
  937. package/skills/bundledSkills.ts +220 -0
  938. package/skills/loadSkillsDir.ts +1086 -0
  939. package/skills/mcpSkillBuilders.ts +44 -0
  940. package/state/AppState.tsx +200 -0
  941. package/state/AppStateStore.ts +569 -0
  942. package/state/onChangeAppState.ts +171 -0
  943. package/state/selectors.ts +76 -0
  944. package/state/store.ts +34 -0
  945. package/state/teammateViewHelpers.ts +141 -0
  946. package/tasks/DreamTask/DreamTask.ts +157 -0
  947. package/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  948. package/tasks/InProcessTeammateTask/types.ts +121 -0
  949. package/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  950. package/tasks/LocalMainSessionTask.ts +479 -0
  951. package/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  952. package/tasks/LocalShellTask/guards.ts +41 -0
  953. package/tasks/LocalShellTask/killShellTasks.ts +76 -0
  954. package/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  955. package/tasks/pillLabel.ts +82 -0
  956. package/tasks/stopTask.ts +100 -0
  957. package/tasks/types.ts +46 -0
  958. package/types/command.ts +216 -0
  959. package/types/connectorText.ts +13 -0
  960. package/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  961. package/types/generated/events_mono/common/v1/auth.ts +100 -0
  962. package/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  963. package/types/generated/google/protobuf/timestamp.ts +187 -0
  964. package/types/hooks.ts +290 -0
  965. package/types/ids.ts +44 -0
  966. package/types/logs.ts +330 -0
  967. package/types/permissions.ts +441 -0
  968. package/types/plugin.ts +363 -0
  969. package/types/textInputTypes.ts +387 -0
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Zod schema for keybindings.json configuration.
3
+ * Used for validation and JSON schema generation.
4
+ */
5
+
6
+ import { z } from 'zod/v4'
7
+ import { lazySchema } from '../utils/lazySchema.js'
8
+
9
+ /**
10
+ * Valid context names where keybindings can be applied.
11
+ */
12
+ export const KEYBINDING_CONTEXTS = [
13
+ 'Global',
14
+ 'Chat',
15
+ 'Autocomplete',
16
+ 'Confirmation',
17
+ 'Help',
18
+ 'Transcript',
19
+ 'HistorySearch',
20
+ 'Task',
21
+ 'ThemePicker',
22
+ 'Settings',
23
+ 'Tabs',
24
+ // New contexts for keybindings migration
25
+ 'Attachments',
26
+ 'Footer',
27
+ 'MessageSelector',
28
+ 'DiffDialog',
29
+ 'ModelPicker',
30
+ 'Select',
31
+ 'Plugin',
32
+ ] as const
33
+
34
+ /**
35
+ * Human-readable descriptions for each keybinding context.
36
+ */
37
+ export const KEYBINDING_CONTEXT_DESCRIPTIONS: Record<
38
+ (typeof KEYBINDING_CONTEXTS)[number],
39
+ string
40
+ > = {
41
+ Global: 'Active everywhere, regardless of focus',
42
+ Chat: 'When the chat input is focused',
43
+ Autocomplete: 'When autocomplete menu is visible',
44
+ Confirmation: 'When a confirmation/permission dialog is shown',
45
+ Help: 'When the help overlay is open',
46
+ Transcript: 'When viewing the transcript',
47
+ HistorySearch: 'When searching command history (ctrl+r)',
48
+ Task: 'When a task/agent is running in the foreground',
49
+ ThemePicker: 'When the theme picker is open',
50
+ Settings: 'When the settings menu is open',
51
+ Tabs: 'When tab navigation is active',
52
+ Attachments: 'When navigating image attachments in a select dialog',
53
+ Footer: 'When footer indicators are focused',
54
+ MessageSelector: 'When the message selector (rewind) is open',
55
+ DiffDialog: 'When the diff dialog is open',
56
+ ModelPicker: 'When the model picker is open',
57
+ Select: 'When a select/list component is focused',
58
+ Plugin: 'When the plugin dialog is open',
59
+ }
60
+
61
+ /**
62
+ * All valid keybinding action identifiers.
63
+ */
64
+ export const KEYBINDING_ACTIONS = [
65
+ // App-level actions (Global context)
66
+ 'app:interrupt',
67
+ 'app:exit',
68
+ 'app:toggleTodos',
69
+ 'app:toggleTranscript',
70
+ 'app:toggleBrief',
71
+ 'app:toggleTeammatePreview',
72
+ 'app:toggleTerminal',
73
+ 'app:redraw',
74
+ 'app:globalSearch',
75
+ 'app:quickOpen',
76
+ // History navigation
77
+ 'history:search',
78
+ 'history:previous',
79
+ 'history:next',
80
+ // Chat input actions
81
+ 'chat:cancel',
82
+ 'chat:killAgents',
83
+ 'chat:cycleMode',
84
+ 'chat:modelPicker',
85
+ 'chat:fastMode',
86
+ 'chat:thinkingToggle',
87
+ 'chat:submit',
88
+ 'chat:newline',
89
+ 'chat:undo',
90
+ 'chat:externalEditor',
91
+ 'chat:stash',
92
+ 'chat:imagePaste',
93
+ 'chat:messageActions',
94
+ // Autocomplete menu actions
95
+ 'autocomplete:accept',
96
+ 'autocomplete:dismiss',
97
+ 'autocomplete:previous',
98
+ 'autocomplete:next',
99
+ // Confirmation dialog actions
100
+ 'confirm:yes',
101
+ 'confirm:no',
102
+ 'confirm:previous',
103
+ 'confirm:next',
104
+ 'confirm:nextField',
105
+ 'confirm:previousField',
106
+ 'confirm:cycleMode',
107
+ 'confirm:toggle',
108
+ 'confirm:toggleExplanation',
109
+ // Tabs navigation actions
110
+ 'tabs:next',
111
+ 'tabs:previous',
112
+ // Transcript viewer actions
113
+ 'transcript:toggleShowAll',
114
+ 'transcript:exit',
115
+ // History search actions
116
+ 'historySearch:next',
117
+ 'historySearch:accept',
118
+ 'historySearch:cancel',
119
+ 'historySearch:execute',
120
+ // Task/agent actions
121
+ 'task:background',
122
+ // Theme picker actions
123
+ 'theme:toggleSyntaxHighlighting',
124
+ // Help menu actions
125
+ 'help:dismiss',
126
+ // Attachment navigation (select dialog image attachments)
127
+ 'attachments:next',
128
+ 'attachments:previous',
129
+ 'attachments:remove',
130
+ 'attachments:exit',
131
+ // Footer indicator actions
132
+ 'footer:up',
133
+ 'footer:down',
134
+ 'footer:next',
135
+ 'footer:previous',
136
+ 'footer:openSelected',
137
+ 'footer:clearSelection',
138
+ 'footer:close',
139
+ // Message selector (rewind) actions
140
+ 'messageSelector:up',
141
+ 'messageSelector:down',
142
+ 'messageSelector:top',
143
+ 'messageSelector:bottom',
144
+ 'messageSelector:select',
145
+ // Diff dialog actions
146
+ 'diff:dismiss',
147
+ 'diff:previousSource',
148
+ 'diff:nextSource',
149
+ 'diff:back',
150
+ 'diff:viewDetails',
151
+ 'diff:previousFile',
152
+ 'diff:nextFile',
153
+ // Model picker actions (ant-only)
154
+ 'modelPicker:decreaseEffort',
155
+ 'modelPicker:increaseEffort',
156
+ // Select component actions (distinct from confirm: to avoid collisions)
157
+ 'select:next',
158
+ 'select:previous',
159
+ 'select:accept',
160
+ 'select:cancel',
161
+ // Plugin dialog actions
162
+ 'plugin:toggle',
163
+ 'plugin:install',
164
+ // Permission dialog actions
165
+ 'permission:toggleDebug',
166
+ // Settings config panel actions
167
+ 'settings:search',
168
+ 'settings:retry',
169
+ 'settings:close',
170
+ // Voice actions
171
+ 'voice:pushToTalk',
172
+ ] as const
173
+
174
+ /**
175
+ * Schema for a single keybinding block.
176
+ */
177
+ export const KeybindingBlockSchema = lazySchema(() =>
178
+ z
179
+ .object({
180
+ context: z
181
+ .enum(KEYBINDING_CONTEXTS)
182
+ .describe(
183
+ 'UI context where these bindings apply. Global bindings work everywhere.',
184
+ ),
185
+ bindings: z
186
+ .record(
187
+ z
188
+ .string()
189
+ .describe('Keystroke pattern (e.g., "ctrl+k", "shift+tab")'),
190
+ z
191
+ .union([
192
+ z.enum(KEYBINDING_ACTIONS),
193
+ z
194
+ .string()
195
+ .regex(/^command:[a-zA-Z0-9:\-_]+$/)
196
+ .describe(
197
+ 'Command binding (e.g., "command:help", "command:compact"). Executes the slash command as if typed.',
198
+ ),
199
+ z.null().describe('Set to null to unbind a default shortcut'),
200
+ ])
201
+ .describe(
202
+ 'Action to trigger, command to invoke, or null to unbind',
203
+ ),
204
+ )
205
+ .describe('Map of keystroke patterns to actions'),
206
+ })
207
+ .describe('A block of keybindings for a specific context'),
208
+ )
209
+
210
+ /**
211
+ * Schema for the entire keybindings.json file.
212
+ * Uses object wrapper format with optional $schema and $docs metadata.
213
+ */
214
+ export const KeybindingsSchema = lazySchema(() =>
215
+ z
216
+ .object({
217
+ $schema: z
218
+ .string()
219
+ .optional()
220
+ .describe('JSON Schema URL for editor validation'),
221
+ $docs: z.string().optional().describe('Documentation URL'),
222
+ bindings: z
223
+ .array(KeybindingBlockSchema())
224
+ .describe('Array of keybinding blocks by context'),
225
+ })
226
+ .describe(
227
+ 'Claude Code keybindings configuration. Customize keyboard shortcuts by context.',
228
+ ),
229
+ )
230
+
231
+ /**
232
+ * TypeScript types derived from the schema.
233
+ */
234
+ export type KeybindingsSchemaType = z.infer<
235
+ ReturnType<typeof KeybindingsSchema>
236
+ >
@@ -0,0 +1,63 @@
1
+ import {
2
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
3
+ logEvent,
4
+ } from '../services/analytics/index.js'
5
+ import { loadKeybindingsSync } from './loadUserBindings.js'
6
+ import { getBindingDisplayText } from './resolver.js'
7
+ import type { KeybindingContextName } from './types.js'
8
+
9
+ // TODO(keybindings-migration): Remove fallback parameter after migration is
10
+ // complete and we've confirmed no 'keybinding_fallback_used' events are being
11
+ // logged. The fallback exists as a safety net during migration - if bindings
12
+ // fail to load or an action isn't found, we fall back to hardcoded values.
13
+ // Once stable, callers should be able to trust that getBindingDisplayText
14
+ // always returns a value for known actions, and we can remove this defensive
15
+ // pattern.
16
+
17
+ // Track which action+context pairs have already logged a fallback event
18
+ // to avoid duplicate events from repeated calls in non-React contexts.
19
+ const LOGGED_FALLBACKS = new Set<string>()
20
+
21
+ /**
22
+ * Get the display text for a configured shortcut without React hooks.
23
+ * Use this in non-React contexts (commands, services, etc.).
24
+ *
25
+ * This lives in its own module (not useShortcutDisplay.ts) so that
26
+ * non-React callers like query/stopHooks.ts don't pull React into their
27
+ * module graph via the sibling hook.
28
+ *
29
+ * @param action - The action name (e.g., 'app:toggleTranscript')
30
+ * @param context - The keybinding context (e.g., 'Global')
31
+ * @param fallback - Fallback text if binding not found
32
+ * @returns The configured shortcut display text
33
+ *
34
+ * @example
35
+ * const expandShortcut = getShortcutDisplay('app:toggleTranscript', 'Global', 'ctrl+o')
36
+ * // Returns the user's configured binding, or 'ctrl+o' as default
37
+ */
38
+ export function getShortcutDisplay(
39
+ action: string,
40
+ context: KeybindingContextName,
41
+ fallback: string,
42
+ ): string {
43
+ const bindings = loadKeybindingsSync()
44
+ const resolved = getBindingDisplayText(action, context, bindings)
45
+ if (resolved === undefined) {
46
+ const key = `${action}:${context}`
47
+ if (!LOGGED_FALLBACKS.has(key)) {
48
+ LOGGED_FALLBACKS.add(key)
49
+ logEvent('tengu_keybinding_fallback_used', {
50
+ action:
51
+ action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
52
+ context:
53
+ context as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
54
+ fallback:
55
+ fallback as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
56
+ reason:
57
+ 'action_not_found' as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
58
+ })
59
+ }
60
+ return fallback
61
+ }
62
+ return resolved
63
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Keybindings template generator.
3
+ * Generates a well-documented template file for ~/.claude/keybindings.json
4
+ */
5
+
6
+ import { jsonStringify } from '../utils/slowOperations.js'
7
+ import { DEFAULT_BINDINGS } from './defaultBindings.js'
8
+ import {
9
+ NON_REBINDABLE,
10
+ normalizeKeyForComparison,
11
+ } from './reservedShortcuts.js'
12
+ import type { KeybindingBlock } from './types.js'
13
+
14
+ /**
15
+ * Filter out reserved shortcuts that cannot be rebound.
16
+ * These would cause /doctor to warn, so we exclude them from the template.
17
+ */
18
+ function filterReservedShortcuts(blocks: KeybindingBlock[]): KeybindingBlock[] {
19
+ const reservedKeys = new Set(
20
+ NON_REBINDABLE.map(r => normalizeKeyForComparison(r.key)),
21
+ )
22
+
23
+ return blocks
24
+ .map(block => {
25
+ const filteredBindings: Record<string, string | null> = {}
26
+ for (const [key, action] of Object.entries(block.bindings)) {
27
+ if (!reservedKeys.has(normalizeKeyForComparison(key))) {
28
+ filteredBindings[key] = action
29
+ }
30
+ }
31
+ return { context: block.context, bindings: filteredBindings }
32
+ })
33
+ .filter(block => Object.keys(block.bindings).length > 0)
34
+ }
35
+
36
+ /**
37
+ * Generate a template keybindings.json file content.
38
+ * Creates a fully valid JSON file with all default bindings that users can customize.
39
+ */
40
+ export function generateKeybindingsTemplate(): string {
41
+ // Filter out reserved shortcuts that cannot be rebound
42
+ const bindings = filterReservedShortcuts(DEFAULT_BINDINGS)
43
+
44
+ // Format as object wrapper with bindings array
45
+ const config = {
46
+ $schema: 'https://www.schemastore.org/claude-code-keybindings.json',
47
+ $docs: 'https://code.claude.com/docs/en/keybindings',
48
+ bindings,
49
+ }
50
+
51
+ return jsonStringify(config, null, 2) + '\n'
52
+ }
@@ -0,0 +1,196 @@
1
+ import { useCallback, useEffect } from 'react'
2
+ import type { InputEvent } from '../ink/events/input-event.js'
3
+ import { type Key, useInput } from '../ink.js'
4
+ import { useOptionalKeybindingContext } from './KeybindingContext.js'
5
+ import type { KeybindingContextName } from './types.js'
6
+
7
+ type Options = {
8
+ /** Which context this binding belongs to (default: 'Global') */
9
+ context?: KeybindingContextName
10
+ /** Only handle when active (like useInput's isActive) */
11
+ isActive?: boolean
12
+ }
13
+
14
+ /**
15
+ * Ink-native hook for handling a keybinding.
16
+ *
17
+ * The handler stays in the component (React way).
18
+ * The binding (keystroke → action) comes from config.
19
+ *
20
+ * Supports chord sequences (e.g., "ctrl+k ctrl+s"). When a chord is started,
21
+ * the hook will manage the pending state automatically.
22
+ *
23
+ * Uses stopImmediatePropagation() to prevent other handlers from firing
24
+ * once this binding is handled.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * useKeybinding('app:toggleTodos', () => {
29
+ * setShowTodos(prev => !prev)
30
+ * }, { context: 'Global' })
31
+ * ```
32
+ */
33
+ export function useKeybinding(
34
+ action: string,
35
+ handler: () => void | false | Promise<void>,
36
+ options: Options = {},
37
+ ): void {
38
+ const { context = 'Global', isActive = true } = options
39
+ const keybindingContext = useOptionalKeybindingContext()
40
+
41
+ // Register handler with the context for ChordInterceptor to invoke
42
+ useEffect(() => {
43
+ if (!keybindingContext || !isActive) return
44
+ return keybindingContext.registerHandler({ action, context, handler })
45
+ }, [action, context, handler, keybindingContext, isActive])
46
+
47
+ const handleInput = useCallback(
48
+ (input: string, key: Key, event: InputEvent) => {
49
+ // If no keybinding context available, skip resolution
50
+ if (!keybindingContext) return
51
+
52
+ // Build context list: registered active contexts + this context + Global
53
+ // More specific contexts (registered ones) take precedence over Global
54
+ const contextsToCheck: KeybindingContextName[] = [
55
+ ...keybindingContext.activeContexts,
56
+ context,
57
+ 'Global',
58
+ ]
59
+ // Deduplicate while preserving order (first occurrence wins for priority)
60
+ const uniqueContexts = [...new Set(contextsToCheck)]
61
+
62
+ const result = keybindingContext.resolve(input, key, uniqueContexts)
63
+
64
+ switch (result.type) {
65
+ case 'match':
66
+ // Chord completed (if any) - clear pending state
67
+ keybindingContext.setPendingChord(null)
68
+ if (result.action === action) {
69
+ if (handler() !== false) {
70
+ event.stopImmediatePropagation()
71
+ }
72
+ }
73
+ break
74
+ case 'chord_started':
75
+ // User started a chord sequence - update pending state
76
+ keybindingContext.setPendingChord(result.pending)
77
+ event.stopImmediatePropagation()
78
+ break
79
+ case 'chord_cancelled':
80
+ // Chord was cancelled (escape or invalid key)
81
+ keybindingContext.setPendingChord(null)
82
+ break
83
+ case 'unbound':
84
+ // Explicitly unbound - clear any pending chord
85
+ keybindingContext.setPendingChord(null)
86
+ event.stopImmediatePropagation()
87
+ break
88
+ case 'none':
89
+ // No match - let other handlers try
90
+ break
91
+ }
92
+ },
93
+ [action, context, handler, keybindingContext],
94
+ )
95
+
96
+ useInput(handleInput, { isActive })
97
+ }
98
+
99
+ /**
100
+ * Handle multiple keybindings in one hook (reduces useInput calls).
101
+ *
102
+ * Supports chord sequences. When a chord is started, the hook will
103
+ * manage the pending state automatically.
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * useKeybindings({
108
+ * 'chat:submit': () => handleSubmit(),
109
+ * 'chat:cancel': () => handleCancel(),
110
+ * }, { context: 'Chat' })
111
+ * ```
112
+ */
113
+ export function useKeybindings(
114
+ // Handler returning `false` means "not consumed" — the event propagates
115
+ // to later useInput/useKeybindings handlers. Useful for fall-through:
116
+ // e.g. ScrollKeybindingHandler's scroll:line* returns false when the
117
+ // ScrollBox content fits (scroll is a no-op), letting a child component's
118
+ // handler take the wheel event for list navigation instead. Promise<void>
119
+ // is allowed for fire-and-forget async handlers (the `!== false` check
120
+ // only skips propagation for a sync `false`, not a pending Promise).
121
+ handlers: Record<string, () => void | false | Promise<void>>,
122
+ options: Options = {},
123
+ ): void {
124
+ const { context = 'Global', isActive = true } = options
125
+ const keybindingContext = useOptionalKeybindingContext()
126
+
127
+ // Register all handlers with the context for ChordInterceptor to invoke
128
+ useEffect(() => {
129
+ if (!keybindingContext || !isActive) return
130
+
131
+ const unregisterFns: Array<() => void> = []
132
+ for (const [action, handler] of Object.entries(handlers)) {
133
+ unregisterFns.push(
134
+ keybindingContext.registerHandler({ action, context, handler }),
135
+ )
136
+ }
137
+
138
+ return () => {
139
+ for (const unregister of unregisterFns) {
140
+ unregister()
141
+ }
142
+ }
143
+ }, [context, handlers, keybindingContext, isActive])
144
+
145
+ const handleInput = useCallback(
146
+ (input: string, key: Key, event: InputEvent) => {
147
+ // If no keybinding context available, skip resolution
148
+ if (!keybindingContext) return
149
+
150
+ // Build context list: registered active contexts + this context + Global
151
+ // More specific contexts (registered ones) take precedence over Global
152
+ const contextsToCheck: KeybindingContextName[] = [
153
+ ...keybindingContext.activeContexts,
154
+ context,
155
+ 'Global',
156
+ ]
157
+ // Deduplicate while preserving order (first occurrence wins for priority)
158
+ const uniqueContexts = [...new Set(contextsToCheck)]
159
+
160
+ const result = keybindingContext.resolve(input, key, uniqueContexts)
161
+
162
+ switch (result.type) {
163
+ case 'match':
164
+ // Chord completed (if any) - clear pending state
165
+ keybindingContext.setPendingChord(null)
166
+ if (result.action in handlers) {
167
+ const handler = handlers[result.action]
168
+ if (handler && handler() !== false) {
169
+ event.stopImmediatePropagation()
170
+ }
171
+ }
172
+ break
173
+ case 'chord_started':
174
+ // User started a chord sequence - update pending state
175
+ keybindingContext.setPendingChord(result.pending)
176
+ event.stopImmediatePropagation()
177
+ break
178
+ case 'chord_cancelled':
179
+ // Chord was cancelled (escape or invalid key)
180
+ keybindingContext.setPendingChord(null)
181
+ break
182
+ case 'unbound':
183
+ // Explicitly unbound - clear any pending chord
184
+ keybindingContext.setPendingChord(null)
185
+ event.stopImmediatePropagation()
186
+ break
187
+ case 'none':
188
+ // No match - let other handlers try
189
+ break
190
+ }
191
+ },
192
+ [context, handlers, keybindingContext],
193
+ )
194
+
195
+ useInput(handleInput, { isActive })
196
+ }
@@ -0,0 +1,59 @@
1
+ import { useEffect, useRef } from 'react'
2
+ import {
3
+ type AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
4
+ logEvent,
5
+ } from '../services/analytics/index.js'
6
+ import { useOptionalKeybindingContext } from './KeybindingContext.js'
7
+ import type { KeybindingContextName } from './types.js'
8
+
9
+ // TODO(keybindings-migration): Remove fallback parameter after migration is complete
10
+ // and we've confirmed no 'keybinding_fallback_used' events are being logged.
11
+ // The fallback exists as a safety net during migration - if bindings fail to load
12
+ // or an action isn't found, we fall back to hardcoded values. Once stable, callers
13
+ // should be able to trust that getBindingDisplayText always returns a value for
14
+ // known actions, and we can remove this defensive pattern.
15
+
16
+ /**
17
+ * Hook to get the display text for a configured shortcut.
18
+ * Returns the configured binding or a fallback if unavailable.
19
+ *
20
+ * @param action - The action name (e.g., 'app:toggleTranscript')
21
+ * @param context - The keybinding context (e.g., 'Global')
22
+ * @param fallback - Fallback text if keybinding context unavailable
23
+ * @returns The configured shortcut display text
24
+ *
25
+ * @example
26
+ * const expandShortcut = useShortcutDisplay('app:toggleTranscript', 'Global', 'ctrl+o')
27
+ * // Returns the user's configured binding, or 'ctrl+o' as default
28
+ */
29
+ export function useShortcutDisplay(
30
+ action: string,
31
+ context: KeybindingContextName,
32
+ fallback: string,
33
+ ): string {
34
+ const keybindingContext = useOptionalKeybindingContext()
35
+ const resolved = keybindingContext?.getDisplayText(action, context)
36
+ const isFallback = resolved === undefined
37
+ const reason = keybindingContext ? 'action_not_found' : 'no_context'
38
+
39
+ // Log fallback usage once per mount (not on every render) to avoid
40
+ // flooding analytics with events from frequent re-renders.
41
+ const hasLoggedRef = useRef(false)
42
+ useEffect(() => {
43
+ if (isFallback && !hasLoggedRef.current) {
44
+ hasLoggedRef.current = true
45
+ logEvent('tengu_keybinding_fallback_used', {
46
+ action:
47
+ action as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
48
+ context:
49
+ context as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
50
+ fallback:
51
+ fallback as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
52
+ reason:
53
+ reason as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
54
+ })
55
+ }
56
+ }, [isFallback, action, context, fallback, reason])
57
+
58
+ return isFallback ? fallback : resolved
59
+ }